1*298116dfSespie /* $OpenBSD: fpsetround.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_rnd fpsetround(rnd_dir)100eea0d08Spefofpsetround(rnd_dir) 110eea0d08Spefo fp_rnd rnd_dir; 120eea0d08Spefo { 130eea0d08Spefo fp_rnd old; 140eea0d08Spefo fp_rnd new; 150eea0d08Spefo 160eea0d08Spefo __asm__("cfc1 %0,$31" : "=r" (old)); 170eea0d08Spefo 180eea0d08Spefo new = old; 190eea0d08Spefo new &= ~0x03; 200eea0d08Spefo new |= (rnd_dir & 0x03); 210eea0d08Spefo 220eea0d08Spefo __asm__("ctc1 %0,$31" : : "r" (new)); 230eea0d08Spefo 240eea0d08Spefo return old & 0x03; 250eea0d08Spefo } 26