xref: /openbsd/lib/libc/arch/m88k/gen/fpsetround.c (revision 09467b48)
1 /*	$OpenBSD: fpsetround.c,v 1.4 2013/01/05 11:20:55 miod Exp $	*/
2 
3 /*
4  * Written by J.T. Conklin, Apr 10, 1995
5  * Public domain.
6  * Ported to 88k by Nivas Madhur
7  */
8 
9 #include <ieeefp.h>
10 
11 fp_rnd
12 fpsetround(rnd_dir)
13 	fp_rnd rnd_dir;
14 {
15 	fp_rnd old;
16 	fp_rnd new;
17 
18 	__asm__ volatile("fldcr %0, %%fcr63" : "=r" (old));
19 
20 	new = old;
21 	new &= ~(0x03 << 14); 		/* clear old value */
22 	new |= ((rnd_dir & 0x03) << 14);/* and set new one */
23 
24 	__asm__ volatile("fstcr %0, %%fcr63" : : "r" (new));
25 
26 	return (old >> 14) & 0x03;
27 }
28