xref: /openbsd-src/lib/libc/arch/mips64/gen/flt_rounds.c (revision af3276d5e32f3e939032c022c530ad02a9ed9a1e)
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