xref: /inferno-os/lib9/setfcr-Solaris-sparc.c (revision 04d2181bc05242c53f5fd4cb782191bafe53ded1)
1*04d2181bSCharles Forsyth /* This code is a little awkward.  If somebody who understands Solaris
2*04d2181bSCharles Forsyth    better would tell me an idiomatic way to invoke equivalent
3*04d2181bSCharles Forsyth    behavior, I'd be grateful.    ehg@bell-labs.com  */
4*04d2181bSCharles Forsyth 
5*04d2181bSCharles Forsyth #include "lib9.h"
6*04d2181bSCharles Forsyth 
7*04d2181bSCharles Forsyth ulong
getfcr(void)8*04d2181bSCharles Forsyth getfcr(void)
9*04d2181bSCharles Forsyth {
10*04d2181bSCharles Forsyth 	ulong v;
11*04d2181bSCharles Forsyth 
12*04d2181bSCharles Forsyth 	asm("	st	%fsr, [%fp-8]");
13*04d2181bSCharles Forsyth 	return v;
14*04d2181bSCharles Forsyth }
15*04d2181bSCharles Forsyth 
16*04d2181bSCharles Forsyth void
setfcr(ulong v)17*04d2181bSCharles Forsyth setfcr(ulong v)
18*04d2181bSCharles Forsyth {
19*04d2181bSCharles Forsyth 	ulong vv;
20*04d2181bSCharles Forsyth 
21*04d2181bSCharles Forsyth 	vv = (getfcr() & ~FPFCR) | (v & FPFCR);
22*04d2181bSCharles Forsyth 	asm("	ld	[%fp-4], %fsr");
23*04d2181bSCharles Forsyth }
24*04d2181bSCharles Forsyth 
25*04d2181bSCharles Forsyth ulong
getfsr(void)26*04d2181bSCharles Forsyth getfsr(void)
27*04d2181bSCharles Forsyth {
28*04d2181bSCharles Forsyth 	ulong v;
29*04d2181bSCharles Forsyth 
30*04d2181bSCharles Forsyth 	asm("	st	%fsr, [%fp-8]");
31*04d2181bSCharles Forsyth 	return v;
32*04d2181bSCharles Forsyth }
33*04d2181bSCharles Forsyth 
34*04d2181bSCharles Forsyth void
setfsr(ulong v)35*04d2181bSCharles Forsyth setfsr(ulong v)
36*04d2181bSCharles Forsyth {
37*04d2181bSCharles Forsyth 	ulong vv;
38*04d2181bSCharles Forsyth 
39*04d2181bSCharles Forsyth 	vv = (getfsr() & ~FPFSR) | (v & FPFSR);
40*04d2181bSCharles Forsyth 	asm("	ld	[%fp-4], %fsr");
41*04d2181bSCharles Forsyth }
42*04d2181bSCharles Forsyth 
43