title: Understanding GCC's floating point constants in assembly listing output
body: <p>Just out of curiosity, I'm using <a href="https://godbolt.org" rel="nofollow noreferrer">Compiler Explorer</a> to see the assembly output of some simple C++ codes.</p>
  
  <p>Consider the following <a href="https://godbolt.org/g/c4h1s1" rel="nofollow noreferrer">example</a></p>
  
  <pre><code>int main(void){
      double x = -5.3;
  }
  </code></pre>
  
  <p>Assembly output</p>
  
  <pre><code>main:
          push    rbp
          mov     rbp, rsp
          movsd   xmm0, QWORD PTR .LC0[rip]
          movsd   QWORD PTR [rbp-8], xmm0
          mov     eax, 0
          pop     rbp
          ret
  .LC0:
          .long   858993459
          .long   -1072352461
  </code></pre>
  
  <p>I would like to understand how to use </p>
  
  <pre><code>.LC0:
          .long   858993459
          .long   -1072352461
  </code></pre>
  
  <p>to get back my <code>-5.3</code>. </p>
  
  <p>My uninformed guess is that I need to merge the bit patterns of the two 32 bit integers and to interpret it as the bit pattern of a double precision floating point number. But how, exactly? Must I interpret the pattern as an IEEE754 double precision? In what order?</p>