2015-07-03 72 views
2

我在看陆先生的PATCH: Update x86 rdrand intrinsics。我不知道我是否应该使用_rdrand_u64_rdrand64_step或者是否有其他功能。似乎没有为他们编写测试用例。如何使用RDRAND intrinsics?

看起来也似乎是缺少手册页(从Ubuntu的14,GCC 4.8.4):

$ man -k rdrand 
rdrand: nothing appropriate. 

一个人如何使用RDRAND内在函数生成,也就是说,一个32个字节的块?


有关的问题是RDRAND and RDSEED intrinsics GCC and Intel C++。但它并没有告诉我如何使用它们,或者如何生成一个块。

+0

@Filip - 是的,BullRun已经得到了很多负面的批评,由于斯诺登泄漏(等人)。在这种情况下,我使用一个自定义的随机数生成器来提取然后展开熵。有多种来源,所以NSA后门程序不会导致灾难性的发电机故障。 – jww

回答

2

如果你看看<immintrin.h>(我在`/usr/lib/gcc/x86_64-linux-gnu/4.9/include/',Ubuntu 15.04 64bit),我们定义了兼容的功能(包括MSVC,Intel CC)其数据传递回GCC内建

extern __inline int __attribute__((__gnu_inline__, __always_inline__, __artificial__)) 
_rdrand64_step (unsigned long long *__P) 
{ 
    return __builtin_ia32_rdrand64_step (__P); 
} 

64位参数,另外两个16个和32位的参数

_rdrand16_step (unsigned short *__P) 
_rdrand32_step (unsigned int *__P) 

你应该使用那些使你的代码将与MSVC,英特尔兼容CC和其他编译器。

_rdrand64_step将填充64位参数,通过指针传递,随机位,并返回错误代码。同上,用于32位和16位版本

UPDATE

“这些内在产生的16/32/64位宽随机整数随机数生成的随机值写入指定的内存位置和返回成功状态:如果硬件返回有效的随机值,则为'1',否则为'0'。“

https://software.intel.com/en-us/node/523864

+0

什么是回报值?我们如何知道函数是成功还是失败? – jww

+0

@jww请chekc更新 –

+0

海湾合作委员会弄得这个烂摊子。他们使用['unsigned long long'](http://stackoverflow.com/q/38681146)令人沮丧。 – jww

相关问题