1178580Simp/* $NetBSD: fpsetround.c,v 1.5 2005/12/24 23:10:08 perry Exp $ */ 2178580Simp 3178580Simp/* 4178580Simp * Written by J.T. Conklin, Apr 11, 1995 5178580Simp * Public domain. 6178580Simp */ 7178580Simp 8178580Simp#include <sys/cdefs.h> 9178580Simp__FBSDID("$FreeBSD$"); 10178580Simp#if defined(LIBC_SCCS) && !defined(lint) 11178580Simp__RCSID("$NetBSD: fpsetround.c,v 1.5 2005/12/24 23:10:08 perry Exp $"); 12178580Simp#endif /* LIBC_SCCS and not lint */ 13178580Simp 14178580Simp#include "namespace.h" 15178580Simp 16178580Simp#include <ieeefp.h> 17178580Simp 18178580Simp#ifdef __weak_alias 19178580Simp__weak_alias(fpsetround,_fpsetround) 20178580Simp#endif 21178580Simp 22178580Simpfp_rnd_t 23178580Simpfpsetround(fp_rnd_t rnd_dir) 24178580Simp{ 25178580Simp fp_rnd_t old; 26178580Simp fp_rnd_t new; 27178580Simp 28178580Simp __asm("cfc1 %0,$31" : "=r" (old)); 29178580Simp 30178580Simp new = old; 31178580Simp new &= ~0x03; 32178580Simp new |= (rnd_dir & 0x03); 33178580Simp 34178580Simp __asm("ctc1 %0,$31" : : "r" (new)); 35178580Simp 36178580Simp return old & 0x03; 37178580Simp} 38