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