如何使用RDRAND内在函数?

时间:2015-07-03 21:37:30

标签: gcc intrinsics rdrand

我在看着H.J. Lu的PATCH: Update x86 rdrand intrinsics。我无法判断我是否应该使用MacBook-Pro:~ Dilawer$ node -v v0.12.5 MacBook-Pro:~ Dilawer$ npm -v 2.12.1 MacBook-Pro:~ Dilawer$ npm install -g jade npm ERR! tar.unpack untar error /Users/Dilawer/.npm/jade/1.11.0/package.tgz npm ERR! Darwin 14.4.0 npm ERR! argv "node" "/usr/local/bin/npm" "install" "-g" "jade" npm ERR! node v0.12.5 npm ERR! npm v2.12.1 npm ERR! path /usr/local/lib/node_modules/jade npm ERR! code EACCES npm ERR! errno -13 npm ERR! Error: EACCES, mkdir '/usr/local/lib/node_modules/jade' npm ERR! at Error (native) npm ERR! { [Error: EACCES, mkdir '/usr/local/lib/node_modules/jade'] npm ERR! errno: -13, npm ERR! code: 'EACCES', npm ERR! path: '/usr/local/lib/node_modules/jade', npm ERR! fstream_type: 'Directory', npm ERR! fstream_path: '/usr/local/lib/node_modules/jade', npm ERR! fstream_class: 'DirWriter', npm ERR! fstream_stack: npm ERR! [ '/usr/local/lib/node_modules/npm/node_modules/fstream/lib/dir-writer.js:35:25', npm ERR! '/usr/local/lib/node_modules/npm/node_modules/mkdirp/index.js:47:53', npm ERR! 'FSReqWrap.oncomplete (fs.js:95:15)' ] } npm ERR! npm ERR! Please try running this command again as root/Administrator. npm ERR! Please include the following file with any support request: npm ERR! /Users/Dilawer/npm-debug.log MacBook-Pro:~ Dilawer$ sudo npm install -g jade Password: /usr/local/bin/jade -> /usr/local/lib/node_modules/jade/bin/jade.js jade@1.11.0 /usr/local/lib/node_modules/jade ├── character-parser@1.2.1 ├── void-elements@2.0.1 ├── commander@2.6.0 ├── mkdirp@0.5.1 (minimist@0.0.8) ├── jstransformer@0.0.2 (is-promise@2.0.0, promise@6.1.0) ├── with@4.0.3 (acorn-globals@1.0.4, acorn@1.2.2) ├── constantinople@3.0.1 (acorn-globals@1.0.4) ├── clean-css@3.3.5 (commander@2.8.1, source-map@0.4.2) ├── uglify-js@2.4.23 (uglify-to-browserify@1.0.2, async@0.2.10, source-map@0.1.34, yargs@3.5.4) └── transformers@2.1.0 (promise@2.0.0, css@1.0.8, uglify-js@2.2.5) MacBook-Pro:~ Dilawer$ sudo -s bash-3.2# npm install -g jade /usr/local/bin/jade -> /usr/local/lib/node_modules/jade/bin/jade.js jade@1.11.0 /usr/local/lib/node_modules/jade ├── character-parser@1.2.1 ├── void-elements@2.0.1 ├── commander@2.6.0 ├── mkdirp@0.5.1 (minimist@0.0.8) ├── jstransformer@0.0.2 (is-promise@2.0.0, promise@6.1.0) ├── with@4.0.3 (acorn-globals@1.0.4, acorn@1.2.2) ├── constantinople@3.0.1 (acorn-globals@1.0.4) ├── uglify-js@2.4.23 (uglify-to-browserify@1.0.2, async@0.2.10, yargs@3.5.4, source-map@0.1.34) ├── clean-css@3.3.5 (commander@2.8.1, source-map@0.4.2) └── transformers@2.1.0 (promise@2.0.0, css@1.0.8, uglify-js@2.2.5) bash-3.2# _rdrand_u64,或者是否有其他功能。似乎没有为他们编写测试用例。

似乎还缺少手册页(来自Ubuntu 14,GCC 4.8.4):

_rdrand64_step

如何使用$ man -k rdrand rdrand: nothing appropriate. 内在函数生成一个32字节的块?

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

1 个答案:

答案 0 :(得分: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,Intel CC和其他编译器兼容。

_rdrand64_step将填充64位参数,由指针传递,带有随机位并返回错误代码。同样适用于32位和16位版本

更新

&#34;这些内在函数生成16/32/64位宽随机整数的随机数。生成的随机值将写入给定的内存位置,并返回成功状态:&#39; 1&#39; 1&#39;如果硬件返回了有效的随机值,并且&#39; 0&#39; 0否则&#34;

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