I was looking through an Intel provided reference implementation of RDRAND
instruction. The page is Intel Digital Random Number Generator (DRNG) Software Implementation Guide , and the code came from Intel Digital Random Number Generator software code examples .
The following is the relevant portion from Intel. It reads a random value and places it in val
, and it sets the carry flag on success.
char rc;
unsigned int val;
__asm__ volatile(
"rdrand %0 ; setc %1"
: "=r" (val), "=qm" (rc)
);
// 1 = success, 0 = underflow
if(rc) {
// use val
...
}
Soory to have to ask. I don't think it was covered in GNU Extended Assembler , and searching for "=qm" is producing spurious hits.
What does the "=qm"
mean in the extended assembler?
What you're looking at is an inline assembler constraint . The GCC documentation is at 6.47.3.1 Simple Constraints and 6.47.3.4 Constraints for Particular Machines under x86 family section. This one ( =qm
) combines three flags which indicate:
=
: The operand is write-only - its previous value is not relevant. q
: The operand must be in register a
, b
, c
, or d
(it cannot be in esi
, for instance). m
: The operand may be placed in memory. qm probably means 1 byte 8 bit mem =qm will be valid constraint for storing 1 byte result See what setc wants
http://web.itu.edu.tr/~aydineb/index_files/instr/setc.html
reg8 and mem8
as we know only eax , ebx edx ecx .. a,b,c,d registers that q refer can be used cause they can accessed with low byte al dl cl ...With combining qm we are getting mem8 . m meant memory. Thats what I meant
Wow that stumped me at first but I searched around a bit and found out that it is a reference to the model of the processor this peice of code is meant for.
Spicically I read that it is for the i7 Quadcore.
Is that where you got this code from?
It is a simple value indicator for a variable syntax.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.