title: C inline assembly of x86 fbstp instruction
body: <p>Was wondering how to inline a usage of fbstp on a 32 bit I86 architecture. I tried something like</p>
  
  <pre><code>int main( )
  {
      double foo = 100.0;
  
      long bar = 0;
  
      asm( "pushl %1; fbstp %0"
           : "=m"(bar)
           : "r"(foo)
         );
  
      ...
  </code></pre>
  
  <p>But bar is unchanged. I have tried reading everything I can find on this but most example simply do things like add two integers together. I can’t find any that talk about pushing operands onto the stack and what I should be doing when an instruction like fbstp writes 80 bits of data back to memory ( i.e. what C type to use ) and how to specify it in the asm syntax.</p>
  
  <p>Also on x86-64 there seems to be a pushq and no pushl but fbstp still exists whereas fbstq does not. Is there some other magic for 64 bit.</p>