xref: /openbsd/lib/libc/arch/hppa/gen/fpsetmask.c (revision 09467b48)
1 /*	$OpenBSD: fpsetmask.c,v 1.5 2014/04/18 15:09:52 guenther Exp $	*/
2 
3 /*
4  * Written by Miodrag Vallat.  Public domain
5  */
6 
7 #include <sys/types.h>
8 #include <ieeefp.h>
9 
10 fp_except
11 fpsetmask(mask)
12 	fp_except mask;
13 {
14 	u_int64_t fpsr;
15 	fp_except old;
16 
17 	__asm__ volatile("fstd %%fr0,0(%1)" : "=m"(fpsr) : "r"(&fpsr));
18 	old = (fpsr >> 32) & 0x1f;
19 	fpsr = (fpsr & 0xffffffe000000000LL) | ((u_int64_t)(mask & 0x1f) << 32);
20 	__asm__ volatile("fldd 0(%0),%%fr0" : : "r"(&fpsr));
21 	return (old);
22 }
23