Home | History | Annotate | Line # | Download | only in gen
fpsetsticky.c revision 1.1
      1 /*	$NetBSD: fpsetsticky.c,v 1.1 2004/07/24 19:09:29 chs Exp $	*/
      2 
      3 /*	$OpenBSD: fpsetsticky.c,v 1.4 2004/01/05 06:06:16 otto Exp $	*/
      4 
      5 /*
      6  * Written by Miodrag Vallat.  Public domain
      7  */
      8 
      9 #include <sys/types.h>
     10 #include <ieeefp.h>
     11 
     12 fp_except
     13 fpsetsticky(fp_except mask)
     14 {
     15 	uint64_t fpsr;
     16 	fp_except old;
     17 
     18 	__asm__ __volatile__("fstd %%fr0,0(%1)" : "=m" (fpsr) : "r" (&fpsr));
     19 	old = (fpsr >> 59) & 0x1f;
     20 	fpsr = (fpsr & 0x07ffffff00000000LL) | ((uint64_t)(mask & 0x1f) << 59);
     21 	__asm__ __volatile__("fldd 0(%0),%%fr0" : : "r" (&fpsr));
     22 	return (old);
     23 }
     24