1 /*	$NetBSD: fpsetmask.c,v 1.5 2005/12/24 23:10:08 perry Exp $	*/
2 
3 /*
4  * Written by J.T. Conklin, Apr 11, 1995
5  * Public domain.
6  */
7 
8 #include <sys/cdefs.h>
9 __FBSDID("$FreeBSD: stable/10/lib/libc/mips/gen/hardfloat/fpsetmask.c 201856 2010-01-08 23:50:39Z imp $");
10 #if defined(LIBC_SCCS) && !defined(lint)
11 __RCSID("$NetBSD: fpsetmask.c,v 1.5 2005/12/24 23:10:08 perry Exp $");
12 #endif /* LIBC_SCCS and not lint */
13 
14 #include "namespace.h"
15 
16 #include <ieeefp.h>
17 
18 #ifdef __weak_alias
19 __weak_alias(fpsetmask,_fpsetmask)
20 #endif
21 
22 fp_except_t
23 fpsetmask(mask)
24 	fp_except_t mask;
25 {
26 	fp_except_t old;
27 	fp_except_t new;
28 
29 	__asm("cfc1 %0,$31" : "=r" (old));
30 
31 	new = old;
32 	new &= ~(0x1f << 7);
33 	new |= ((mask & 0x1f) << 7);
34 
35 	__asm("ctc1 %0,$31" : : "r" (new));
36 
37 	return (old >> 7) & 0x1f;
38 }
39