xref: /openbsd/lib/libc/arch/mips64/gen/fpsetround.c (revision 298116df)
1*298116dfSespie /*	$OpenBSD: fpsetround.c,v 1.2 2005/08/07 16:40:15 espie Exp $ */
20eea0d08Spefo /*
30eea0d08Spefo  * Written by J.T. Conklin, Apr 11, 1995
40eea0d08Spefo  * Public domain.
50eea0d08Spefo  */
60eea0d08Spefo 
70eea0d08Spefo #include <ieeefp.h>
80eea0d08Spefo 
90eea0d08Spefo fp_rnd
fpsetround(rnd_dir)100eea0d08Spefo fpsetround(rnd_dir)
110eea0d08Spefo 	fp_rnd rnd_dir;
120eea0d08Spefo {
130eea0d08Spefo 	fp_rnd old;
140eea0d08Spefo 	fp_rnd new;
150eea0d08Spefo 
160eea0d08Spefo 	__asm__("cfc1 %0,$31" : "=r" (old));
170eea0d08Spefo 
180eea0d08Spefo 	new = old;
190eea0d08Spefo 	new &= ~0x03;
200eea0d08Spefo 	new |= (rnd_dir & 0x03);
210eea0d08Spefo 
220eea0d08Spefo 	__asm__("ctc1 %0,$31" : : "r" (new));
230eea0d08Spefo 
240eea0d08Spefo 	return old & 0x03;
250eea0d08Spefo }
26