1 /* $NetBSD: fpsetround.c,v 1.2 2002/01/13 21:45:51 thorpej Exp $ */ 2 3 /* 4 * Written by J.T. Conklin, Apr 10, 1995 5 * Public domain. 6 */ 7 8 #include <sys/cdefs.h> 9 __FBSDID("$FreeBSD: stable/12/lib/libc/sparc64/gen/fpsetround.c 103323 2002-09-14 18:06:21Z tmm $"); 10 11 #include <machine/fsr.h> 12 #include <ieeefp.h> 13 14 fp_rnd_t fpsetround(rnd_dir)15fpsetround(rnd_dir) 16 fp_rnd_t rnd_dir; 17 { 18 unsigned int old; 19 unsigned int new; 20 21 __asm__("st %%fsr,%0" : "=m" (old)); 22 23 new = old; 24 new &= ~FSR_RD_MASK; 25 new |= FSR_RD((unsigned int)rnd_dir & 0x03); 26 27 __asm__("ld %0,%%fsr" : : "m" (new)); 28 29 return ((fp_rnd_t)FSR_GET_RD(old)); 30 } 31