title: What is "=qm" in extended assembler
body: <p>I was looking through an Intel provided reference implementation of <code>RDRAND</code> instruction. The page is <a href="http://software.intel.com/en-us/articles/intel-digital-random-number-generator-drng-software-implementation-guide/" rel="nofollow">Intel Digital Random Number Generator (DRNG) Software Implementation Guide</a>, and the code came from <a href="http://software.intel.com/en-us/articles/intel-digital-random-number-generator-drng-software-implementation-guide/" rel="nofollow">Intel Digital Random Number Generator software code examples</a>.</p>
  
  <p>The following is the relevant portion from Intel. It reads a random value and places it in <code>val</code>, and it sets the carry flag on success.</p>
  
  <pre><code>char rc;
  unsigned int val;
  
  __asm__ volatile(
      "rdrand %0 ; setc %1"
      : "=r" (val), "=qm" (rc)
  );
  
  // 1 = success, 0 = underflow
  if(rc) {
      // use val
      ...
  }
  </code></pre>
  
  <p>Soory to have to ask. I don't think it was covered in <a href="http://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html" rel="nofollow">GNU Extended Assembler</a>, and searching for "=qm" is producing spurious hits.</p>
  
  <p>What does the <code>"=qm"</code> mean in the extended assembler?</p>