Проверка сбоя RDRAND или RDSEED во встроенной сборке

Я пытаюсь проверить наличие ошибки в RDRAND и RDSEED, используя встроенную сборку в стиле MSVC. Если я правильно помню, в регистре хранится флаг отказа, но я не могу вспомнить, какой именно. Я видел пример на веб-сайте Intel

    asm volatile ("rdrand %0; setc %1"
    : "=r" (*rand), "=qm" (ok));

где "=qm" и "ok" указывают на сбой, если они не равны 1, но я относительно не знаком со встроенной сборкой в ​​​​стиле GCC, поэтому я не знаю, что означает "=qm", и я не смог понять это из. Как определить успех или неудачу встроенной сборки в стиле MSVC?

Заранее спасибо.


person FeeeshMeister    schedule 02.04.2018    source источник
comment
Статус находится в CF (см. справочник по набору инструкций). Этот код просто использует setc для передачи его в выходной операнд. PS: вместо этого вы должны использовать встроенный, если он доступен.   -  person Jester    schedule 03.04.2018
comment
@Jester Я также забыл упомянуть, что я очень новичок в ассемблере в целом, как мне читать из CF? Кроме того, компилятор, который я использую, не имеет встроенных функций RDRAND.   -  person FeeeshMeister    schedule 03.04.2018
comment
Используйте setc как в коде. Просто дайте ему операнд, где вы хотите результат.   -  person Jester    schedule 03.04.2018
comment
Какой компилятор и версию вы используете? Использование встроенного _rdrand32_step (или 16 или 64) было бы лучше, если бы оно было доступно (в immintrin.h).   -  person 1201ProgramAlarm    schedule 03.04.2018