2015-07-03 102 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

相關問題