Поддерживает ли компилятор 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*);
И если эти встроенные функции поддерживаются, то с какой версии они поддерживаются (с постоянной времени компиляции, пожалуйста)?
И GCC, и компилятор Intel поддерживают их. Поддержка GCC была введена в конце 2010 года. Для них требуется заголовок <immintrin.h>
,
Поддержка GCC присутствует, по крайней мере, с версии 4.6, но не существует какой-либо конкретной константы времени компиляции — вы можете просто проверить __GNUC_MAJOR__ > 4 || (__GNUC_MAJOR__ == 4 && __GNUC_MINOR__ >= 6)
,
Компилятор Microsoft не имеет встроенной поддержки команд RDSEED и RDRAND.
Но вы можете реализовать эти инструкции, используя NASM или MASM. Код сборки доступен по адресу:
Для компилятора 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