1 #ifndef _MATH_PRIVATE_H
3 #define math_opt_barrier(x) \
5 if (sizeof (x) <= sizeof (double)) \
6 __asm ("" : "=x" (__x) : "0" (x)); \
8 __asm ("" : "=t" (__x) : "0" (x)); \
10 #define math_force_eval(x) \
13 if (sizeof (x) <= sizeof (double)) \
14 __asm __volatile ("" : : "x" (x)); \
16 __asm __volatile ("" : : "f" (x)); \
20 #include <math/math_private.h>
22 /* We can do a few things better on x86-64. */
24 /* Direct movement of float into integer register. */
25 #undef EXTRACT_WORDS64
26 #define EXTRACT_WORDS64(i,d) \
29 asm ("movd %1, %0" : "=rm" (i_) : "x" (d)); \
33 /* And the reverse. */
35 #define INSERT_WORDS64(d,i) \
38 asm ("movd %1, %0" : "=x" (d) : "rm" (i_)); \
41 /* Direct movement of float into integer register. */
43 #define GET_FLOAT_WORD(i,d) \
46 asm ("movd %1, %0" : "=rm" (i_) : "x" (d)); \
50 /* And the reverse. */
52 #define SET_FLOAT_WORD(d,i) \
55 asm ("movd %1, %0" : "=x" (d) : "rm" (i_)); \