What is “=qm” in extended assembler

后端 未结 3 1168
小蘑菇
小蘑菇 2020-12-21 15:53

I was looking through an Intel provided reference implementation of RDRAND instruction. The page is Intel Digital Random Number Generator (DRNG) Software Implem

相关标签:
3条回答
  • 2020-12-21 16:40

    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

    0 讨论(0)
  • 2020-12-21 16:43

    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.

    0 讨论(0)
  • 2020-12-21 16:48

    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.
    0 讨论(0)
提交回复
热议问题