1 /* $OpenBSD: flt_rounds.c,v 1.6 2015/10/27 05:54:49 guenther Exp $ */ 2 3 /* 4 * Written by Miodrag Vallat. Public domain. 5 */ 6 7 #include <sys/types.h> 8 #include <float.h> 9 10 static const int map[] = { 11 1, /* round to nearest */ 12 0, /* round to zero */ 13 2, /* round to positive infinity */ 14 3 /* round to negative infinity */ 15 }; 16 17 int 18 __flt_rounds() 19 { 20 u_int64_t fpsr; 21 22 __asm__ volatile("fstd %%fr0,0(%1)" : "=m" (fpsr) : "r" (&fpsr)); 23 return map[(fpsr >> 41) & 0x03]; 24 } 25 DEF_STRONG(__flt_rounds); 26