title: gcc asm with empty input operand constraint
body: <p>When using extended asm in gcc, it is clear and documented what this does:</p>
  <pre><code>__asm__ (&quot;some instructions&quot; : /* No outputs */ : &quot;r&quot; (var));
  </code></pre>
  <p>It asks gcc to place var into a register and pass it to me as %0. It also creates a dependency on var, such that this instruction will not be moved prior to the last point var was changed, not will it be moved relative to other volatiles (which is another documentation subtlety).</p>
  <p>What's not clear is what this does:</p>
  <pre><code>__asm__ (&quot;&quot; : : &quot;&quot; (var));
  </code></pre>
  <p>My first initial thought is that the empty constraint might be the same as &quot;X&quot; - ie: put it anywhere. But it isn't. For me (using Arm cortex), the &quot;X&quot; or &quot;r&quot; places var in, say, r4. The &quot;&quot; does not.</p>
  <p>It creates the same ordering dependency but doesn't appear to do anything else. Which might be the intent but is this documented anywhere?</p>