我正在查看英特尔提供的 RDRAND
指令的引用实现。页面是Intel Digital Random Number Generator (DRNG) Software Implementation Guide , 代码来自 Intel Digital Random Number Generator software code examples .
以下是英特尔的相关部分。它读取一个随机值并将其放入 val
,并在成功时设置进位标志。
char rc;
unsigned int val;
__asm__ volatile(
"rdrand %0 ; setc %1"
: "=r" (val), "=qm" (rc)
);
// 1 = success, 0 = underflow
if(rc) {
// use val
...
}
很抱歉不得不问。我不认为它包含在 GNU Extended Assembler 中,并且搜索“=qm”会产生虚假命中。
"=qm"
在扩展汇编器中是什么意思?
最佳答案
您正在查看的是 inline assembler constraint . GCC 文档位于 6.47.3.1 Simple Constraints和 6.47.3.4 Constraints for Particular Machines在 x86 系列 部分下。这个 (=qm
) 结合了三个标志,表示:
=
:操作数是只写的 - 它之前的值不相关。q
:操作数必须在寄存器a
、b
、c
或d中
(例如,它不能在esi
中)。m
:操作数可能放在内存中。
关于gcc - 什么是扩展汇编器中的 "=qm",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21516852/