我有一个x86rdrand实现,如下所示。我有一个类似的RDSEED实现。
inline void RDRAND32(void* output)
{
#if defined(HAVE_GCC_RDRAND_ASM)
__asm__
(
"1:\n"
".byte 0x0f, 0xc7, 0xf0;\n"
"jnc 1b;\n"
: "=a" (*(uint32_t*)output)
: : "cc"
);
#endif
}
rdrand eax
一个有能力的处理器会很乐意地使用它们。sunstudio12.1及更高版本支持GCC内联程序集,并使用它们。
太阳医生说我需要
-xarch=avx_i
对于提供RDRAND(和
-xarch=avx2_i
对于RDSEED)。另请参见
Sun Studio 12.6 | -xarch Flags for x86
.
我还需要补充吗
-xarch=avx_i
的链接器标志
RDRAND
万一有问题,我们在运行时保护CPU特性,并使用映射文件降低ISA(因为运行时路径受到保护):
$ cat cryptopp.mapfile
hwcap_1 = SSE SSE2 OVERRIDE;