Встроенные функции RDRAND и RDSEED GCC и Intel Stack Overflow

Поддерживает ли компилятор Intel C ++ и / или GCC следующие встроенные функции, как MSVC с 2012/2013?

int _rdrand16_step(uint16_t*);
int _rdrand32_step(uint32_t*);
int _rdrand64_step(uint64_t*);
int _rdseed16_step(uint16_t*);
int _rdseed32_step(uint32_t*);
int _rdseed64_step(uint64_t*);

И если эти встроенные функции поддерживаются, то с какой версии они поддерживаются (с постоянной времени компиляции, пожалуйста)?

2

Решение

И GCC, и компилятор Intel поддерживают их. Поддержка GCC была введена в конце 2010 года. Для них требуется заголовок <immintrin.h>,

Поддержка GCC присутствует, по крайней мере, с версии 4.6, но не существует какой-либо конкретной константы времени компиляции — вы можете просто проверить __GNUC_MAJOR__ > 4 || (__GNUC_MAJOR__ == 4 && __GNUC_MINOR__ >= 6),

5

Другие решения

Компилятор Microsoft не имеет встроенной поддержки команд RDSEED и RDRAND.

Но вы можете реализовать эти инструкции, используя NASM или MASM. Код сборки доступен по адресу:

https://software.intel.com/en-us/articles/intel-digital-random-number-generator-drng-software-implementation-guide

Для компилятора Intel вы можете использовать заголовок для определения версии. Вы можете использовать следующие макросы для определения версии и дополнительной версии:

__INTEL_COMPILER //Major Version
__INTEL_COMPILER_UPDATE // Minor Update.

Например, если вы используете компилятор 3 обновления ICC15.0, он покажет, что у вас есть

__INTEL_COMPILER  = 1500
__INTEL_COMPILER_UPDATE = 3

Для получения дополнительной информации о предопределенных макросах вы можете перейти к: https://software.intel.com/en-us/node/524490

2

По вопросам рекламы [email protected]