Home | History | Annotate | Line # | Download | only in gen
fpsetsticky.c revision 1.5.50.1
      1  1.5.50.1      tls /*	$NetBSD: fpsetsticky.c,v 1.5.50.1 2014/08/20 00:02:12 tls Exp $	*/
      2       1.2    perry 
      3       1.1      jtc /*
      4       1.1      jtc  * Written by J.T. Conklin, Apr 10, 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.5.50.1      tls __RCSID("$NetBSD: fpsetsticky.c,v 1.5.50.1 2014/08/20 00:02:12 tls 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.5.50.1      tls 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.5    perry 	__asm("st %%fsr,%0" : "=m" (*&old));
     28       1.1      jtc 
     29       1.1      jtc 	new = old;
     30       1.1      jtc 	new &= ~(0x1f << 5);
     31       1.1      jtc 	new |= ((sticky & 0x1f) << 5);
     32       1.1      jtc 
     33       1.5    perry 	__asm("ld %0,%%fsr" : : "m" (*&new));
     34       1.1      jtc 
     35       1.1      jtc 	return (old >> 5) & 0x1f;
     36       1.1      jtc }
     37