Доступность встроенных функций _rdrand_step в компиляторах Microsoft?

Согласно списку встроенных функций Microsoft x64 (amd64) Microsoft предлагает встроенную функцию для RDRAND:

  • _rdrand16_step
  • _rdrand32_step
  • _rdrand64_step

Однако на странице не обсуждается обнаружение наличия встроенного. Есть сноска с [2], но там говорится, что она доступна только для процессоров Intel.

У меня два вопроса. Во-первых, как я могу определить наличие встроенных функций. То есть, какой макрос препроцессора я должен использовать для защиты вызова, чтобы сказать _rdrand64_step,

Во-вторых, как я могу получить доступ к RDRAND под процессорами AMD. Согласно руководству AMD, AMD тоже это предлагает.

(Более смешно, что Microsoft называет страницу "Внутренний список amd64". Почему они называют его "Внутренним списком AMD64", если не включают AMD?)


Инструкции AMD и RDRAND см. В Руководстве программиста по архитектуре AMD64, том 3: Общие инструкции и системные инструкции, стр. 278.

2 ответа

Во-первых, как я могу определить наличие встроенных функций. То есть, какой макрос препроцессора я должен использовать для защиты вызова, чтобы сказать _rdrand64_step.

Вот версии компилятора, необходимые для встроенных функций RDRAND:

  • Microsoft добавила RDRAND в августе 2012 года, VS2012. Тест для _MSC_VER >= 1700,
  • GCC добавил RDRAND в декабре 2010 года, GCC 4.6.
  • Clang добавил RDRAND в июле 2012 года, Clang 3.2.
  • Intel добавила RDRAND в сентябре 2011 года, ICC 12.1.

Во-вторых, как я могу получить доступ к RDRAND под процессорами AMD. Согласно руководству AMD, AMD тоже это предлагает.

Процессоры AMD, которые предоставляют инструкцию RDRAND, появятся в ближайшее время. То есть в настоящее время нет процессоров, поставляющих эту функцию.

В документах Microsoft четко указано, что встроенные функции предназначены только для процессоров Intel. Чтобы обеспечить поддержку AMD с учетом антиконкурентной истории между Intel и AMD, ASM должен быть создан вручную и собран с MASM/ML и MASM64/ML64.

Вы можете проверить версию компилятора MS, используя:

  1. MSVC++ 14.0 _MSC_VER == 1900 (Visual Studio 2015) Подробно

  2. Я не уверен, как использовать его с архитектурой AMD. Сообщу, если я найду какое-нибудь решение

  3. Вы можете получить ответ, почему документация MS называет это amd64 в этом посте.

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