Home | History | Annotate | Line # | Download | only in gen
fpsetsticky.c revision 1.10
      1  1.10       chs /*	$NetBSD: fpsetsticky.c,v 1.10 2017/02/27 06:55:26 chs Exp $	*/
      2   1.2  jonathan 
      3   1.1       jtc /*
      4   1.1       jtc  * Written by J.T. Conklin, Apr 11, 1995
      5   1.1       jtc  * Public domain.
      6   1.1       jtc  */
      7   1.1       jtc 
      8   1.3   thorpej #include <sys/cdefs.h>
      9   1.4     lukem #if defined(LIBC_SCCS) && !defined(lint)
     10  1.10       chs __RCSID("$NetBSD: fpsetsticky.c,v 1.10 2017/02/27 06:55:26 chs Exp $");
     11   1.4     lukem #endif /* LIBC_SCCS and not lint */
     12   1.3   thorpej 
     13   1.3   thorpej #include "namespace.h"
     14   1.3   thorpej 
     15   1.1       jtc #include <ieeefp.h>
     16   1.3   thorpej 
     17   1.3   thorpej #ifdef __weak_alias
     18   1.3   thorpej __weak_alias(fpsetsticky,_fpsetsticky)
     19   1.3   thorpej #endif
     20   1.1       jtc 
     21   1.1       jtc fp_except
     22   1.6      matt fpsetsticky(fp_except sticky)
     23   1.1       jtc {
     24   1.1       jtc 	fp_except old;
     25   1.1       jtc 	fp_except new;
     26   1.1       jtc 
     27   1.9     joerg 	__asm(".set push; .set noat; cfc1 %0,$31; .set pop" : "=r" (old));
     28   1.1       jtc 
     29   1.6      matt 	new = old & ~(0x1f << 2);
     30   1.6      matt 	new |= (sticky & 0x1f) << 2;
     31   1.1       jtc 
     32  1.10       chs 	__asm(".set push; .set noat; ctc1 %0,$31; .set pop" : : "r" (new));
     33   1.1       jtc 
     34   1.8      matt 	return (old >> 2) & 0x1f;
     35   1.1       jtc }
     36