PPC64-LE에서 소스 파일을 컴파일하려고합니다. xlC 컴파일러를 사용하고 컴파일이 실패했습니다. GCC는 프로그램을 승인하므로 문제의 원인을 정확히 알지 못합니다.xlC 및 유형 "vector unsigned int"와 "int"사이의 연산이 허용되지 않습니다.
$ xlc test-p8.c -qarch=pwr8 -qaltivec -o test-p8.exe
가 여기에 컴파일 오류입니다 :
"test-p8.c", line 113.52: 1506-324 (S) "int" cannot be converted to "vector unsigned int".
"test-p8.c", line 120.15: 1506-068 (S) Operation between types "vector unsigned int" and "int" is not allowed.
"test-p8.c", line 121.15: 1506-068 (S) Operation between types "vector unsigned int" and "int" is not allowed.
"test-p8.c", line 122.15: 1506-068 (S) Operation between types "vector unsigned int" and "int" is not allowed.
"test-p8.c", line 123.15: 1506-068 (S) Operation between types "vector unsigned int" and "int" is not allowed.
"test-p8.c", line 124.15: 1506-068 (S) Operation between types "vector unsigned int" and "int" is not allowed.
"test-p8.c", line 125.15: 1506-068 (S) Operation between types "vector unsigned int" and "int" is not allowed.
"test-p8.c", line 126.15: 1506-068 (S) Operation between types "vector unsigned int" and "int" is not allowed.
"test-p8.c", line 127.15: 1506-068 (S) Operation between types "vector unsigned int" and "int" is not allowed.
"test-p8.c", line 128.15: 1506-068 (S) Operation between types "vector unsigned int" and "int" is not allowed.
"test-p8.c", line 130.15: 1506-068 (S) Operation between types "vector unsigned int" and "int" is not allowed.
여기 소스 파일의 관련 부분
다음은 명령 줄입니다. 소스 파일은 another problem의 경우가 소문자이며 그 파일은 available on GitHub입니다.
$ cat -n test-p8.c
...
12 typedef unsigned char uint8_t;
13 typedef unsigned long long uint64_t;
14 typedef vector unsigned char uint8x16_p8;
15 typedef vector unsigned int uint64x2_p8;
...
76 __attribute__((aligned(16)))
77 uint8_t ks[176] = {
78 0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x9, 0xcf, 0x4f, 0x3c,
...
89 };
...
113 uint64x2_p8 block = (uint64x2_p8)vec_vsx_ld(0U, (const uint8_t*)plain);
...
118 block = vec_xor(block, (uint64x2_p8)vec_ld(0U, (const uint8_t*)ks));
...
120 block = __builtin_crypto_vcipher(block, (uint64x2_p8)vec_ld(16U, (const uint8_t*)ks));
121 block = __builtin_crypto_vcipher(block, (uint64x2_p8)vec_ld(32U, (const uint8_t*)ks));
122 block = __builtin_crypto_vcipher(block, (uint64x2_p8)vec_ld(48U, (const uint8_t*)ks));
123 block = __builtin_crypto_vcipher(block, (uint64x2_p8)vec_ld(64U, (const uint8_t*)ks));
124 block = __builtin_crypto_vcipher(block, (uint64x2_p8)vec_ld(80U, (const uint8_t*)ks));
125 block = __builtin_crypto_vcipher(block, (uint64x2_p8)vec_ld(96U, (const uint8_t*)ks));
126 block = __builtin_crypto_vcipher(block, (uint64x2_p8)vec_ld(112U, (const uint8_t*)ks));
127 block = __builtin_crypto_vcipher(block, (uint64x2_p8)vec_ld(128U, (const uint8_t*)ks));
128 block = __builtin_crypto_vcipher(block, (uint64x2_p8)vec_ld(144U, (const uint8_t*)ks));
129
130 block = __builtin_crypto_vcipherlast(block, (uint64x2_p8)vec_ld(160U, (const uint8_t*)ks));
__builtin_crypto_vcipher
줄 118은 위의 모든 다른 줄과 비슷하지만 경고 나 오류를 유발하지 않습니다.
무엇이 문제이며 어떻게 수정합니까?
감사합니다. * "연결된 레드 북은 [내장되지 않은]"* - 잘못된 브라우저 탭 URL을 복사/붙여 넣은 것처럼 들립니다. 나는 컴파일러 매뉴얼이나 온라인 문서를 사용해야했다. 나는 더 이상 어떤 것을 기억하지 못한다. – jww
Google 문서를 변경해야하는 곳을 발견하면 알려주십시오. 온라인 문서에서이 주제에 대한 [링크] (https://www.ibm.com/support/knowledgecenter/en/SSXVZZ_13.1.5/com.ibm.xlcpp1315.lelinux.doc/compiler_ref/bif_crypto_aes_vcipher.html)를 참조하십시오. – trudeaun
다시 한번 감사드립니다. 이 경우 컴파일러 진단을 개선해야한다고 생각합니다. 컴파일러는 프로토 타입이나 선언되지 않은 함수없이'__builtin_crypto_vcipher'를 함수로 명시해야합니다. 'int'라는 말을'vector'로 변환 할 수 없다는 것은별로 도움이되지 않습니다. – jww