summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharles Forsyth <charles.forsyth@gmail.com>2015-07-18 12:33:55 +0100
committerCharles Forsyth <charles.forsyth@gmail.com>2015-07-18 12:33:55 +0100
commit04d2181bc05242c53f5fd4cb782191bafe53ded1 (patch)
tree49bf0a5b3522a788bbb2772b5eefea32eb38b5b1
parentaac4406b05753bf20e17e5c5bc6443aafb2152c9 (diff)
move setfcr to lib9
-rw-r--r--lib9/setfcr-Solaris-sparc.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/lib9/setfcr-Solaris-sparc.c b/lib9/setfcr-Solaris-sparc.c
new file mode 100644
index 00000000..405e9cf2
--- /dev/null
+++ b/lib9/setfcr-Solaris-sparc.c
@@ -0,0 +1,42 @@
+/* This code is a little awkward. If somebody who understands Solaris
+ better would tell me an idiomatic way to invoke equivalent
+ behavior, I'd be grateful. ehg@bell-labs.com */
+
+#include "lib9.h"
+
+ulong
+getfcr(void)
+{
+ ulong v;
+
+ asm(" st %fsr, [%fp-8]");
+ return v;
+}
+
+void
+setfcr(ulong v)
+{
+ ulong vv;
+
+ vv = (getfcr() & ~FPFCR) | (v & FPFCR);
+ asm(" ld [%fp-4], %fsr");
+}
+
+ulong
+getfsr(void)
+{
+ ulong v;
+
+ asm(" st %fsr, [%fp-8]");
+ return v;
+}
+
+void
+setfsr(ulong v)
+{
+ ulong vv;
+
+ vv = (getfsr() & ~FPFSR) | (v & FPFSR);
+ asm(" ld [%fp-4], %fsr");
+}
+