1*af3276d5Sguenther /* $OpenBSD: flt_rounds.c,v 1.4 2015/10/27 05:54:49 guenther Exp $ */ 20eea0d08Spefo /* 30eea0d08Spefo * Written by J.T. Conklin, Apr 11, 1995 40eea0d08Spefo * Public domain. 50eea0d08Spefo */ 60eea0d08Spefo 70eea0d08Spefo #include <sys/types.h> 8fba30992Sderaadt #include <float.h> 90eea0d08Spefo 100eea0d08Spefo static const int map[] = { 110eea0d08Spefo 1, /* round to nearest */ 120eea0d08Spefo 0, /* round to zero */ 130eea0d08Spefo 2, /* round to positive infinity */ 140eea0d08Spefo 3 /* round to negative infinity */ 150eea0d08Spefo }; 160eea0d08Spefo 170eea0d08Spefo int __flt_rounds()180eea0d08Spefo__flt_rounds() 190eea0d08Spefo { 200eea0d08Spefo int x; 210eea0d08Spefo 220eea0d08Spefo __asm__("cfc1 %0,$31" : "=r" (x)); 230eea0d08Spefo __asm__("nop"); 240eea0d08Spefo return map[x & 0x03]; 250eea0d08Spefo } 26*af3276d5Sguenther DEF_STRONG(__flt_rounds); 27