Как использовать встроенные функции 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 " ' иначе."

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

Другие вопросы по тегам