Macros IBM XL/C signal Altivec是否支持预处理器?

Macros IBM XL/C signal Altivec是否支持预处理器?,macros,c-preprocessor,powerpc,altivec,Macros,C Preprocessor,Powerpc,Altivec,我正在尝试确定何时激活一些Altivec代码路径。当我在-qaltivec生效时检查预处理器宏时,我没有看到相应的预处理器宏(见下文) 我们的担忧或恐惧是需要-qaltivec和-DALTIVEC=1或类似的东西。用户几乎从未阅读过该手册,因此它将为平台生成无休止的问题和错误报告。如果RTFM真的能起作用的话,它会在过去50年左右发生 当-qaltivec生效时,XL/C是否会发出Altivec信号?如果没有,我们还有其他方法可以推断吗 提前谢谢 下面是从,这是一台Power7机器。我不知道为

我正在尝试确定何时激活一些Altivec代码路径。当我在
-qaltivec
生效时检查预处理器宏时,我没有看到相应的预处理器宏(见下文)

我们的担忧或恐惧是需要
-qaltivec
-DALTIVEC=1
或类似的东西。用户几乎从未阅读过该手册,因此它将为平台生成无休止的问题和错误报告。如果RTFM真的能起作用的话,它会在过去50年左右发生

-qaltivec
生效时,XL/C是否会发出Altivec信号?如果没有,我们还有其他方法可以推断吗

提前谢谢


下面是从,这是一台Power7机器。我不知道为什么编译器声称不支持Altivec

$ xlC -qshowmacros -qaltivec -E adhoc.cpp.proto | sort | egrep -iv 'sync'
1506-1162 (W) The altivec option is not supported for the target architecture and is ignored.
"adhoc.cpp.proto", line 2.10: 1506-296 (S) #include file <iosfwd> not found.
"adhoc.cpp.proto", line 3.10: 1506-296 (S) #include file <string> not found.
#define _AIX 1
#define _AIX32 1
#define _AIX41 1
#define _AIX43 1
#define _AIX50 1
#define _AIX51 1
#define _AIX52 1
#define _AIX53 1
#define _AIX61 1
#define _AIX71 1
#define _ARCH_COM 1
#define _ARCH_PPC 1
#define _BIG_ENDIAN 1
#define _CHAR_UNSIGNED 1
#define _IBMR2 1
#define _ILP32 1
#define _LONG_LONG 1
#define _POWER 1
#define __ALIGN 1
#define __BASE_FILE__ "adhoc.cpp.proto"
#define __BIG_ENDIAN__ 1
#define __BOOL__ 1
#define __C99_BOOL 1
#define __C99_COMPLEX 1
#define __C99_COMPOUND_LITERAL 1
#define __C99_CPLUSCMT 1
#define __C99_DESIGNATED_INITIALIZER 1
#define __C99_DUP_TYPE_QUALIFIER 1
#define __C99_EMPTY_MACRO_ARGUMENTS 1
#define __C99_FLEXIBLE_ARRAY_MEMBER 1
#define __C99_HEX_FLOAT_CONST 1
#define __C99_INLINE 1
#define __C99_LLONG 1
#define __C99_MACRO_WITH_VA_ARGS 1
#define __C99_MAX_LINE_NUMBER 1
#define __C99_MIXED_DECL_AND_CODE 1
#define __C99_MIXED_STRING_CONCAT 1
#define __C99_NON_CONST_AGGR_INITIALIZER 1
#define __C99_NON_LVALUE_ARRAY_SUB 1
#define __C99_PRAGMA_OPERATOR 1
#define __C99_RESTRICT 1
#define __C99_STATIC_ARRAY_SIZE 1
#define __C99_STD_PRAGMAS 1
#define __C99_TGMATH 1
#define __C99_UCN 1
#define __C99_VAR_LEN_ARRAY 1
#define __C99__FUNC__ 1
#define __CHAR_UNSIGNED__ 1
#define __DIGRAPHS__ 1
#define __FENCE 1
#define __FUNCTION__ __FUNCTION__
#define __GCC_PROTO_OVERRIDES_KNR_DEF 1
#define __HHW_BIG_ENDIAN__ 1
#define __HHW_RS6000__ 1
#define __HOS_AIX__ 1
#define __IBMC_NORETURN 1
#define __IBMC_STATIC_ASSERT 1
#define __IBMC__ 1210
#define __IBM_ALIGNOF__ 1
#define __IBM_ATTRIBUTES 1
#define __IBM_COMPUTED_GOTO 1
#define __IBM_DOLLAR_IN_ID 1
#define __IBM_EXTENSION_KEYWORD 1
#define __IBM_GCC_ASM 1
#define __IBM_GCC__INLINE__ 1
#define __IBM_GENERALIZED_LVALUE 1
#define __IBM_INCLUDE_NEXT 1
#define __IBM_LABEL_VALUE 1
#define __IBM_LOCAL_LABEL 1
#define __IBM_MACRO_WITH_VA_ARGS 1
#define __IBM_NESTED_FUNCTION 1
#define __IBM_PP_PREDICATE 1
#define __IBM_PP_WARNING 1
#define __IBM_REGISTER_VARS 1
#define __IBM__IMAG__ 1
#define __IBM__REAL__ 1
#define __IBM__TYPEOF__ 1
#define __ILP32__ 1
#define __LONGDOUBLE64 1
#define __MATH__ 1
#define __PPC 1
#define __PPC__ 1
#define __SIZE_TYPE__ unsigned int
#define __STDC_HOSTED__ 1
#define __STDC_VERSION__ 199901L
#define __STDC__ 1
#define __STR__ 1
#define __THW_BIG_ENDIAN__ 1
#define __THW_PPC__ 1
#define __THW_RS6000__ 1
#define __TOS_AIX__ 1
#define __XLC121__ 1
#define __XLC13__ 1
#define __XLC_BUILTIN_VAARG__ 1
#define __alignof __alignof__
#define __const const
#define __const__ const
#define __powerpc 1
#define __powerpc__ 1
#define __signed signed
#define __signed__ signed
#define __typeof __typeof__
#define __unix 1
#define __unix__ 1
#define __volatile volatile
#define __volatile__ volatile
#define __xlC__ 0x0c01
#define __xlC_ver__ 0x00000000
#define __xlc__ "12.1.0.0"
$xlC-qshowmacros-qaltivec-E adhoc.cpp.proto | sort | egrep-iv“同步”
1506-1162(W)目标体系结构不支持altivec选项,该选项被忽略。
“adhoc.cpp.proto”,第2.10行:1506-296(S)#未找到包含文件。
“adhoc.cpp.proto”,第3.10行:1506-296(S)#未找到包含文件。
#定义aix1
#定义_aix321
#定义_aix411
#定义_aix431
#定义_aix501
#定义_aix511
#定义_aix521
#定义_aix531
#定义_aix611
#定义\u AIX71 1
#定义_ARCH_COM 1
#定义_ARCH_PPC 1
#定义_BIG_ENDIAN 1
#定义\u字符\u无符号1
#定义IBMR2 1
#定义ILP32 1
#定义_LONG_LONG 1
#定义_幂1
#定义对齐1
#定义“adhoc.cpp.proto”
#定义uuu BIG_uendian_uuuu1
#定义布尔1
#定义\uuuuuC99\uBOOL 1
#定义uu C99_复合体1
#定义uuuC99_复合文字1
#定义\uuuuC99\uCPLUCMT 1
#定义指定的初始值设定项1
#定义\uuuuC99\uDUP\u类型\u限定符1
#定义\uuuuC99\u空\u宏\u参数1
#定义\uuuuC99\u灵活\u数组\u成员1
#定义\uuuuC99\uHex\uFloat\uConst 1
#定义uu C99_内联1
#定义一个
#使用参数1定义\uuuuC99\u宏
#定义\uuuuC99\uMax\uLine\u1号
#定义\uuuuC99\u混合\u DECL\u和\u代码1
#定义\uuuuC99\uMixed\uString\uConcat 1
#定义非常量聚集初始值设定项1
#定义uuuC99_非左值数组SUB 1
#定义uuuC99_PRAGMA_1运算符
#定义\uuuuC99\uRestrict 1
#定义\uuuuC99\u静态\u数组\u大小1
#定义\uuuuC99\uStd\uPragmas 1
#定义数学1
#定义\uuuuuC99\uUCN 1
#定义uuuC99_VAR_LEN_Array1
#定义函数C99函数1
#定义字符无符号1
#定义有向图
#定义围栏1
#定义函数__
#定义\uuuuGCC\uProto\uOverrides\uKNR\uDef1
#定义uuuhw_uuubig_uuendian_uuuuu1
#定义\uuuuhw\uRS6000\uuuuuu1
#定义\uuuuhos\uaix\uuuuu1
#定义IBMC NORETURN 1
#定义IBMC静态断言1
#定义IBMC 1210
#定义\uuuu IBM\uu校准\uuuuu1
#定义IBM属性1
#定义\u IBM\u计算\u转到1
#在ID 1中定义IBM美元
#定义\u IBM\u扩展\u关键字1
#定义IBM GCC ASM 1
#定义IBM GCC内联1
#定义IBM广义左值1
#定义\u IBM\u包含\u下一步1
#定义\uuu IBM\u标签\u值1
#定义IBM本地标签1
#用参数1定义IBM宏
#定义IBM嵌套函数1
#定义IBM PP谓词1
#定义IBM PP警告1
#定义IBM寄存器变量1
#定义IBM映像1
#定义IBM REAL 1
#定义IBM的类型1
#定义ILP32\UUUU1
#定义长双64 1
#定义数学1
#定义PPC 1
#定义PPC 1
#定义大小类型无符号整数
#定义STDC托管的1
#定义STDC版本199901L
#定义u STDC_uu_uu1
#定义\uuuu STR\uuuuu1
#定义uu THW_ubig_uendian_uu1
#定义uu THW_uppc_uuu1
#定义uuu THW_urs6000_uuuuuuu1
#定义uuu TOS_uaix_uuuu1
#定义uuxlc121_uuuuu1
#定义uuxlc13_uuuuu1
#定义XLC内置变量1
#定义__
#定义常数
#定义常数
#定义powerpc 1
#定义\uuuuPowerPC\uuuuu1
#定义签名
#定义已签名已签名
#定义类型__
#定义unix 1
#定义unix
#定义uu volatile volatile
#定义易失性易失性
#定义\uuuxlc\uuuu0c01
#定义0x00000000
#定义“12.1.0.0”

大多数编译器(gcc等)自动定义的常用宏是
\uvec\uvec
(或者至少这是我在跨平台代码中通常用来测试AltiVec的符号)。(使用
-maltivec
-qaltivec

谢谢@Paul时,请参阅xlc的“预定义宏”)。我在中看到了
\uuuuvec\uuuuu
,但它没有如上图所示出现。我真的不明白XL C/C++声称
-qaltivec
是一个不受支持的选项。那对我来说毫无意义。但公平地说,当我包含
并尝试使用
\uu vector
时,未知类型上的编译错误。所以编译器真的很混乱。Altivec仅在具有向量单元的CPU上受支持。AIX上XLC中的默认CPU体系结构是pwr4,这是操作系统所需的最低CPU。由于pwr4没有向量单元,XLC发出了您看到的错误。要解决此问题,请添加-qarch=pwr7或-qarch=auto。