On Tue, May 26, 2009 at 09:42:40PM -0700, me22 wrote: > 2009/5/26 Florian Weimer <fw@xxxxxxxxxxxxx>: > > * Michael Meissner: > > > >> On Sat, May 23, 2009 at 03:55:34PM +0200, Florian Weimer wrote: > >>> It seems to me that x86_64 supports direct moves from XMM to > >>> general-purpose registers, so that it's possible to access the > >>> representation of a floating point value without going through memory: > >>> > >>> long getbits(double src) > >>> { > >>> long result; > >>> __asm__ ("movq %1, %0" : "=q" (result) : "x" (src)); > >>> return result; > >>> } > >>> > >>> Is this functionally available as some sort of built-in? > >> > >> Well you typically can use a union to get the bits. > > > > Okay. I didn't realize that GCC was smart enough to avoid the > > round-trip through memory. > > > > In my experience compilers are often even smart enough to have this > avoid the memory roundtrip, and it's undeniably legal: > > int ftoi(float x) { > int i; > memcpy(&i, &x, 4); > return i; > } Well from a pedantic point of view, it is only legal if sizeof (i) == sizeof (x) == 4, but you presumably already know that. -- Michael Meissner, IBM 4 Technology Place Drive, MS 2203A, Westford, MA, 01886, USA meissner@xxxxxxxxxxxxxxxxxx