- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Solaris 11 上使用 Sun Studio 12.4 和 12.5。我们有一个源文件,它提供了 CRC32 的直接 C/C++ 实现,或使用 Intel 内在函数的 CRC32 优化版本。在运行时,函数指针会填充正确的实现。
在具有双 Xeon 的 x86 服务器上进行测试会产生以下结果,因为我们正在根据编译器版本提供可用的代码路径。 SunCC 12.1 添加了对 SSE4 的支持(如果我正确解析了矩阵),因此我们尝试在 __SUNPRO_CC >= 0x5100
时启用它。
"crc.cpp", line 311: ube: error: _mm_crc32_u8 intrinsic requires at least -xarch=sse4_2.
SunCC没有定义惯用的 GCC 定义,例如 __SSE4_1__
和 __SSE4_2__
。此外,SunCC 似乎没有像 MS VC++ 那样提供内在函数,其中编译器版本表明支持。
SunCC 似乎启用了基于 -xarch
选项的功能,但我不清楚如何在预处理器中检测它。此外,使用 -xarch
设置一些位,导致程序在下层处理器(类似于“最小”平台)上执行失败。
我有两个问题。
-xarch
选项?-xarch
位以便程序可以在低级处理器上运行?下面是使用 -xarch=aes
编译的宏转储。请注意,没有任何内容表明可用的功能。
$ /opt/solarisstudio12.4/bin/CC -native -m64 -xarch=aes -xdumpmacros -E /dev/null 2>&1 | /usr/gnu/bin/sort --ignore-case
#1 "/dev/null"
#define __alignof__ __alignof
#define __amd64 1
#define __amd64__ 1
#define __ARRAYNEW 1
#define __asm asm
#define __asm__ asm
#define __attribute __attribute__
#define __builtin_constant_p __oracle_builtin_constant_p
#define __builtin_fpclassify __oracle_builtin_fpclassify
#define __builtin_huge_val __oracle_builtin_huge_val
#define __builtin_huge_valf __oracle_builtin_huge_valf
#define __builtin_huge_vall __oracle_builtin_huge_vall
#define __builtin_infinity __oracle_builtin_infinity
#define __builtin_isfinite __oracle_builtin_isfinite
#define __builtin_isgreater __oracle_builtin_isgreater
#define __builtin_isgreaterequal __oracle_builtin_isgreaterequal
#define __builtin_isinf __oracle_builtin_isinf
#define __builtin_isless __oracle_builtin_isless
#define __builtin_islessequal __oracle_builtin_islessequal
#define __builtin_islessgreater __oracle_builtin_islessgreater
#define __builtin_isnan __oracle_builtin_isnan
#define __builtin_isnormal __oracle_builtin_isnormal
#define __builtin_isunordered __oracle_builtin_isunordered
#define __builtin_nan __oracle_builtin_nan
#define __builtin_signbit __oracle_builtin_signbit
#define __BUILTIN_VA_STRUCT 1
#define __cplusplus 199711L
#define __DATE__ "Jul 11 2016"
#define __FILE__
#define __has_attribute(x) __oracle_has_attribute(x)
#define __has_nothrow_assign(x) __oracle_has_nothrow_assign(x)
#define __has_nothrow_constructor(x) __oracle_has_nothrow_constructor(x)
#define __has_nothrow_copy(x) __oracle_has_nothrow_copy(x)
#define __has_trivial_assign(x) __oracle_has_trivial_assign(x)
#define __has_trivial_constructor(x) __oracle_has_trivial_constructor(x)
#define __has_trivial_copy(x) __oracle_has_trivial_copy(x)
#define __has_trivial_destructor(x) __oracle_has_trivial_destructor(x)
#define __has_virtual_destructor(x) __oracle_has_virtual_destructor(x)
#define __is_abstract(x) __oracle_is_abstract(x)
#define __is_base_of(x,y) __oracle_is_base_of(x,y)
#define __is_class(x) __oracle_is_class(x)
#define __is_empty(x) __oracle_is_empty(x)
#define __is_enum(x) __oracle_is_enum(x)
#define __is_final(x) __oracle_is_final(x)
#define __is_literal_type(x) __oracle_is_literal_type(x)
#define __is_pod(x) __oracle_is_pod(x)
#define __is_polymorphic(x) __oracle_is_polymorphic(x)
#define __is_standard_layout(x) __oracle_is_standard_layout(x)
#define __is_trivial(x) __oracle_is_trivial(x)
#define __is_union(x) __oracle_is_union(x)
#define __LINE__
#define __LP64__ 1
#define __PRAGMA_REDEFINE_EXTNAME 1
#define __STDC__ 0
#define __sun 1
#define __SUN_PREFETCH 1
#define __SunOS 1
#define __SunOS_5_11 1
#define __SUNPRO_CC 0x5130
#define __SUNPRO_CC_COMPAT 5
#define __SVR4 1
#define __TIME__ "20:58:00"
#define __underlying_type(x) __oracle_underlying_type(x)
#define __unix 1
#define __volatile volatile
#define __volatile__ volatile
#define __x86_64 1
#define __x86_64__ 1
#define _BOOL 1
#define _LARGEFILE64_SOURCE 1
#define _LP64 1
#define _SIGNEDCHAR_ 1
#define _TEMPLATE_NO_EXTDEF 1
#define _WCHAR_T
#define sun 1
#define unix 1
最佳答案
对于你的第二个问题:
如何禁用 -xarch 位以便程序可以在低级处理器上运行?
请参阅第 7 章链接器和库能力处理指南:
https://docs.oracle.com/cd/E53394_01/html/E54813/index.html
这向您展示了如何交付同一函数的多个实例它们被标记为能力位。运行时链接器将根据报告的功能确定使用哪个功能。
如果您确实想自己管理功能位,请参阅第 9 章映射文件,特别是“能力指令”部分。这展示了如何从生成的对象中删除功能。
关于macros - 检测预处理器中的 -xarch 选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38318425/
我在 Solaris 11 上使用 Sun Studio 12.4 和 12.5。我们有一个源文件,它提供了 CRC32 的直接 C/C++ 实现,或使用 Intel 内在函数的 CRC32 优化版本
我使用的是带有旧 GCC 的 QT Creator,现在我更新到了 4.8 版本。但是 QT Creator 添加了一个 -Xarch_x86_64 选项,GCC 4.8 告诉我 g++: error
我在 SunOS 5.11 (Solaris 11.3) 上的 Sun Studio 12.3 下工作。它提供了一个我不太明白的编译错误: $ /opt/solarisstudio12.3/bin/C
我是一名优秀的程序员,十分优秀!