Является ли FLAGS/EFLAGS частью "CC" (контроль состояния) для списка клоббера?

Это продолжение " Что такое"=qm"в расширенном ассемблере.

Когда используешь RDRANDустанавливает (или отменяет) флаг переноса (CF):

char rc;
unsigned int val;

__asm__ volatile(
    "rdrand %0 ; setc %1"
    : "=r" (val), "=qm" (rc)
);

// 1 = success, 0 = underflow
if(rc) {
    // use val
    ...
}

Являются ли FLAGS а также EFLAGS регистры считаются частью управления условиями, чтобы они передавали правильную информацию компилятору? Должно ли вышесказанное быть записано как:

__asm__ volatile(
    "rdrand %0 ; setc %1"
    : "=r" (val), "=qm" (rc)
    :
    : "cc"
);

Или это использование "cc" поддельный?

Я знаю, что безвредно использовать, если в этом нет необходимости. Из расширенного ASM:

Если ваша инструкция на ассемблере может изменить регистр кода условия, добавьте 'cc' к списку засоренных регистров. GCC на некоторых машинах представляет коды состояния в виде конкретного аппаратного регистра; 'cc' служит для именования этого регистра. На других машинах код условия обрабатывается по-другому, и указание 'cc' не имеет никакого эффекта. Но это действительно независимо от того, что машина.

Если это ложно, к какой архитектуре это относится? (Я полагаю, ARM и CPSR зарегистрироваться, но я могу ошибаться).

1 ответ

Решение

Согласно инструкции, да - cc забит RDRAND также множества OF, SF, ZF, AF, PF <- 0.

На практике gcc предполагает, что __asm__ блок всегда забивает [E|R]FLAGS регистр кода состояния для x86. У меня нет ссылки, но вы можете увидеть это предположение в таких местах, как longlong.h заголовок, используемый в различных пакетах GNU.

Это, как вы говорите, безвреден, если не используется. По этой причине вы могли бы также включить его, поскольку он все еще обеспечивает семантическое намерение или, в худшем случае, комментарий. Также учтите, что Clang и ICC реализуют синтаксис asm GCC, и они будут соответствовать документации, если они соблюдают "cc" клоббер, а не предположить это - хотя это маловероятно.

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