1*479f8d22SDavid Schultz /* 2*479f8d22SDavid Schultz * Written by J.T. Conklin, Apr 10, 1995 3*479f8d22SDavid Schultz * Public domain. 4*479f8d22SDavid Schultz */ 5*479f8d22SDavid Schultz 6*479f8d22SDavid Schultz #include <float.h> 7*479f8d22SDavid Schultz 8*479f8d22SDavid Schultz static const int map[] = { 9*479f8d22SDavid Schultz 1, /* round to nearest */ 10*479f8d22SDavid Schultz 3, /* round to zero */ 11*479f8d22SDavid Schultz 2, /* round to negative infinity */ 12*479f8d22SDavid Schultz 0 /* round to positive infinity */ 13*479f8d22SDavid Schultz }; 14*479f8d22SDavid Schultz 15*479f8d22SDavid Schultz int __flt_rounds(void)16*479f8d22SDavid Schultz__flt_rounds(void) 17*479f8d22SDavid Schultz { 18*479f8d22SDavid Schultz int x; 19*479f8d22SDavid Schultz 20*479f8d22SDavid Schultz /* Assume that the x87 and the SSE unit agree on the rounding mode. */ 21*479f8d22SDavid Schultz __asm("fnstcw %0" : "=m" (x)); 22*479f8d22SDavid Schultz return (map[(x >> 10) & 0x03]); 23*479f8d22SDavid Schultz } 24