Macros IBM XL C/C++;预处理器宏?

Macros IBM XL C/C++;预处理器宏?,macros,c-preprocessor,powerpc,xlc,Macros,C Preprocessor,Powerpc,Xlc,我正在从一台Linux ppc64 le机器上开发GCC112。我正在测试IBMXLC/C++并捕获一些使用POWER8的AES代码的编译失败。该准则在过去几年中一直有效。失败是新的 编译失败是: $ CXX=xlC make aes-simd.o xlC -DNDEBUG -g2 -O3 -qrtti -qpic -qarch=pwr8 -qaltivec -c aes-simd.cpp In file included from aes-simd.cpp:29: ./ppc-simd.h:4

我正在从一台Linux ppc64 le机器上开发GCC112。我正在测试IBMXLC/C++并捕获一些使用POWER8的AES代码的编译失败。该准则在过去几年中一直有效。失败是新的

编译失败是:

$ CXX=xlC make aes-simd.o
xlC -DNDEBUG -g2 -O3 -qrtti -qpic -qarch=pwr8 -qaltivec -c aes-simd.cpp
In file included from aes-simd.cpp:29:
./ppc-simd.h:443:16: error: use of undeclared identifier
      '__builtin_crypto_vcipher'; did you mean '__builtin_vec_vcipher'?
    return (T1)__builtin_crypto_vcipher((uint64x2_p)state, (uint64x2_p)key);
\uuuu内置加密vcipher
是一个GCC内置密码。进入该路径的唯一方法是,如果未定义
\uuuuxlc\uuuu
\uuuxlc\uuuuu

template <class T1, class T2>
inline T1 VectorEncrypt(const T1& state, const T2& key)
{
#if defined(__xlc__) || defined(__xlC__)
    return (T1)__vcipher((uint8x16_p)state, (uint8x16_p)key);
#elif defined(__GNUC__)
    return (T1)__builtin_crypto_vcipher((uint64x2_p)state, (uint64x2_p)key);
#else
    _ASSERT(0);
#endif
}
看起来几乎所有的预处理器宏都消失了。
\uuuxlc\u BUILTIN\u VAARG\uuuu
的单个宏不正确

IBM XL C/C++预处理器宏发生了什么事,如何将它们取回



默认情况下,IBM XL C/C++for Linux V13.1.6不定义
\uxlc\uuuuu
\uuxlc\uuuuu
,但您可以让编译器使用
-qxlcompatmacros
来定义它们。您可以使用它定义的其他宏,如
\uuuuuiBMXL\uuuuuuu
;有关更多信息,请参阅

我知道GCC编译场管理员最近应XL的一位其他用户的请求升级到了13.1.6,但我相信IBM XL C/C++for Linux(用于little endian发行版)一直都有这种行为


IBM XL C/C++Linux版(适用于big-endian发行版)和IBM XL C/C++AIX版的行为不同,默认情况下定义
\uuuuuuxlc\uuuu
\uuuxlc\uuuuu

谢谢@Nicole。我应该知道这是LLVM和他们假装是另一个编译器但未能使用程序的愚蠢伎俩。
$ xlC -qshowmacros -qarch=pwr8 -qaltivec -E aes-simd.cpp | grep -i xlc
#define __XLC_BUILTIN_VAARG__ 1
$ xlC -qversion
IBM XL C/C++ for Linux, V13.1.6 (Community Edition)
Version: 13.01.0006.0001
/opt/ibm/xlC/13.1.6/bin/.orig/xlC