1103323Stmm/* $NetBSD: fpsetround.c,v 1.2 2002/01/13 21:45:51 thorpej Exp $ */ 2103323Stmm 3103323Stmm/* 4103323Stmm * Written by J.T. Conklin, Apr 10, 1995 5103323Stmm * Public domain. 6103323Stmm */ 7103323Stmm 8103323Stmm#include <sys/cdefs.h> 9103323Stmm__FBSDID("$FreeBSD$"); 10103323Stmm 11103323Stmm#include <machine/fsr.h> 12103323Stmm#include <ieeefp.h> 13103323Stmm 14103323Stmmfp_rnd_t 15103323Stmmfpsetround(rnd_dir) 16103323Stmm fp_rnd_t rnd_dir; 17103323Stmm{ 18103323Stmm unsigned int old; 19103323Stmm unsigned int new; 20103323Stmm 21103323Stmm __asm__("st %%fsr,%0" : "=m" (old)); 22103323Stmm 23103323Stmm new = old; 24103323Stmm new &= ~FSR_RD_MASK; 25103323Stmm new |= FSR_RD((unsigned int)rnd_dir & 0x03); 26103323Stmm 27103323Stmm __asm__("ld %0,%%fsr" : : "m" (new)); 28103323Stmm 29103323Stmm return ((fp_rnd_t)FSR_GET_RD(old)); 30103323Stmm} 31