diff options
author | jake <jake@FreeBSD.org> | 2002-03-05 04:03:57 +0000 |
---|---|---|
committer | jake <jake@FreeBSD.org> | 2002-03-05 04:03:57 +0000 |
commit | 605c439175158d318ccd3940427832696c943158 (patch) | |
tree | 5f35a618ec65e372e14bd852d27b771ecedd32f2 /lib | |
parent | e4766db304b6da0903d3e183fbf2d4f6719fd37b (diff) | |
download | FreeBSD-src-605c439175158d318ccd3940427832696c943158.zip FreeBSD-src-605c439175158d318ccd3940427832696c943158.tar.gz |
Add fpsetmask(). Needed to build miniperl.
Obtained from: netbsd
Diffstat (limited to 'lib')
-rw-r--r-- | lib/libc/sparc64/gen/Makefile.inc | 4 | ||||
-rw-r--r-- | lib/libc/sparc64/gen/fpsetmask.c | 27 |
2 files changed, 29 insertions, 2 deletions
diff --git a/lib/libc/sparc64/gen/Makefile.inc b/lib/libc/sparc64/gen/Makefile.inc index e4fdbc7..afc3a9e 100644 --- a/lib/libc/sparc64/gen/Makefile.inc +++ b/lib/libc/sparc64/gen/Makefile.inc @@ -1,4 +1,4 @@ # $FreeBSD$ -SRCS+= _setjmp.S fixunsdfsi.S flt_rounds.c infinity.c isinf.c ldexp.c \ - modf.S setjmp.S sigsetjmp.S +SRCS+= _setjmp.S fixunsdfsi.S flt_rounds.c fpsetmask.c infinity.c isinf.c \ + ldexp.c modf.S setjmp.S sigsetjmp.S diff --git a/lib/libc/sparc64/gen/fpsetmask.c b/lib/libc/sparc64/gen/fpsetmask.c new file mode 100644 index 0000000..a1ef3be --- /dev/null +++ b/lib/libc/sparc64/gen/fpsetmask.c @@ -0,0 +1,27 @@ +/* + * Written by J.T. Conklin, Apr 10, 1995 + * Public domain. + */ + +#include <sys/cdefs.h> +__FBSDID("$FreeBSD$"); + +#include <ieeefp.h> + +fp_except_t +fpsetmask(mask) + fp_except_t mask; +{ + fp_except_t old; + fp_except_t new; + + __asm__("st %%fsr,%0" : "=m" (*&old)); + + new = old; + new &= ~(0x1f << 23); + new |= ((mask & 0x1f) << 23); + + __asm__("ld %0,%%fsr" : : "m" (*&new)); + + return (old >> 23) & 0x1f; +} |