1*298116dfSespie /* $OpenBSD: fpsetsticky.c,v 1.2 2005/08/07 16:40:15 espie Exp $ */ 20eea0d08Spefo /* 30eea0d08Spefo * Written by J.T. Conklin, Apr 11, 1995 40eea0d08Spefo * Public domain. 50eea0d08Spefo */ 60eea0d08Spefo 70eea0d08Spefo #include <ieeefp.h> 80eea0d08Spefo 90eea0d08Spefo fp_except fpsetsticky(sticky)100eea0d08Spefofpsetsticky(sticky) 110eea0d08Spefo fp_except sticky; 120eea0d08Spefo { 130eea0d08Spefo fp_except old; 140eea0d08Spefo fp_except new; 150eea0d08Spefo 160eea0d08Spefo __asm__("cfc1 %0,$31" : "=r" (old)); 170eea0d08Spefo 180eea0d08Spefo new = old; 190eea0d08Spefo new &= ~(0x1f << 2); 200eea0d08Spefo new |= ((sticky & 0x1f) << 2); 210eea0d08Spefo 220eea0d08Spefo __asm__("ctc1 %0,$31" : : "r" (new)); 230eea0d08Spefo 240eea0d08Spefo return (old >> 2) & 0x1f; 250eea0d08Spefo } 26