Optimised float->int cast for Win64
authorJohn Ridges <jridges@masque.com>
Sat, 16 Oct 2010 22:00:54 +0000 (18:00 -0400)
committerJean-Marc Valin <jean-marc.valin@usherbrooke.ca>
Sat, 16 Oct 2010 22:00:54 +0000 (18:00 -0400)
I've been compiling CELT for 64-bit Windows and it all seems to work
fine (with the occasional benign warning message) except for one place,
and that is in "float_cast.h" where there is some inline assembly
language that gets complied for Windows. Since the Microsoft 64-bit
compiler won't allow inline assembly language (and *still* doesn't have
"lrintf").

libcelt/float_cast.h

index 280b491..b2ffe24 100644 (file)
 #include       <math.h>
 #define float2int(x) lrint(x)
 
+#elif (defined (WIN64) || defined (_WIN64))
+       #include <xmmintrin.h>
+
+       __inline long int float2int(float value)
+       {
+               return _mm_cvtss_si32(_mm_load_ss(&value));
+       }
 #elif (defined (WIN32) || defined (_WIN32))
 
        #include        <math.h>