]> CyberLeo.Net >> Repos - FreeBSD/releng/9.2.git/blob - lib/libc/sparc64/gen/fpsetround.c
- Copy stable/9 to releng/9.2 as part of the 9.2-RELEASE cycle.
[FreeBSD/releng/9.2.git] / lib / libc / sparc64 / gen / fpsetround.c
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$");
10
11 #include <machine/fsr.h>
12 #include <ieeefp.h>
13
14 fp_rnd_t
15 fpsetround(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 }