Как использовать встроенные функции RDRAND?
Я смотрел на патч HJ Lu : Обновление встроенных функций x86 rdrand. Я не могу сказать, должен ли я использовать _rdrand_u64
, _rdrand64_step
или, если есть другие функции. Похоже, для них не написаны тестовые примеры.
Также, похоже, не хватает man-страниц (из Ubuntu 14, GCC 4.8.4):
$ man -k rdrand
rdrand: nothing appropriate.
Как использовать RDRAND
внутренности для генерации, скажем, блока в 32 байта?
Смежный вопрос - это встроенные функции RDRAND и RDSEED GCC и Intel C++. Но это не говорит мне, как их использовать или как генерировать блок.
1 ответ
Если вы посмотрите на <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-битных версий
ОБНОВИТЬ
"Эти встроенные функции генерируют случайные числа случайных чисел шириной 16/32/64 бита. Сгенерированное случайное значение записывается в заданную ячейку памяти и возвращается статус успеха:" 1 ", если оборудование вернуло допустимое случайное значение, и" 0 " ' иначе."