fpsetround.c revision 1.1
1/* $NetBSD: fpsetround.c,v 1.1 2004/07/24 19:09:29 chs Exp $ */ 2 3/* $OpenBSD: fpsetround.c,v 1.3 2002/10/21 18:41:05 mickey Exp $ */ 4 5/* 6 * Written by Miodrag Vallat. Public domain 7 */ 8 9#include <sys/types.h> 10#include <ieeefp.h> 11 12fp_rnd 13fpsetround(fp_rnd rnd_dir) 14{ 15 uint64_t fpsr; 16 fp_rnd old; 17 18 __asm__ __volatile__("fstd %%fr0,0(%1)" : "=m" (fpsr) : "r" (&fpsr)); 19 old = (fpsr >> 41) & 0x03; 20 fpsr = (fpsr & 0xfffff9ff00000000LL) | 21 ((uint64_t)(rnd_dir & 0x03) << 41); 22 __asm__ __volatile__("fldd 0(%0),%%fr0" : : "r" (&fpsr)); 23 return (old); 24} 25