aboutsummaryrefslogtreecommitdiff
path: root/pk/fp_asm.S
diff options
context:
space:
mode:
authorAndrew Waterman <waterman@cs.berkeley.edu>2015-02-09 15:38:07 -0800
committerAndrew Waterman <waterman@cs.berkeley.edu>2015-02-09 21:19:18 -0800
commit5c8645013001ff125f9b28e0f861328e9b9a4d12 (patch)
tree0b04cb002dd38ff87b1d9ead9f45f31717fb1617 /pk/fp_asm.S
parentd2b36b1484059c5792cdf9243f972c83bb96026a (diff)
downloadpk-5c8645013001ff125f9b28e0f861328e9b9a4d12.zip
pk-5c8645013001ff125f9b28e0f861328e9b9a4d12.tar.gz
pk-5c8645013001ff125f9b28e0f861328e9b9a4d12.tar.bz2
work in progress on new supervisor spec
Diffstat (limited to 'pk/fp_asm.S')
-rw-r--r--pk/fp_asm.S154
1 files changed, 154 insertions, 0 deletions
diff --git a/pk/fp_asm.S b/pk/fp_asm.S
index 5e00c6c..0a9f34b 100644
--- a/pk/fp_asm.S
+++ b/pk/fp_asm.S
@@ -1,5 +1,159 @@
// See LICENSE for license details.
+#define get_f32(which) fmv.x.s a0, which; ret
+#define put_f32(which) fmv.s.x which, a0; ret
+#ifdef __riscv64
+# define get_f64(which) fmv.x.d a0, which; ret
+# define put_f64(which) fmv.d.x which, a0; ret
+#else
+# define get_f64(which) fsd which, 0(a0); ret
+# define put_f64(which) fld which, 0(a0); ret
+#endif
+
+ .text
+ .globl get_f32_reg
+ get_f32_reg:
+ get_f32(f0)
+ get_f32(f1)
+ get_f32(f2)
+ get_f32(f3)
+ get_f32(f4)
+ get_f32(f5)
+ get_f32(f6)
+ get_f32(f7)
+ get_f32(f8)
+ get_f32(f9)
+ get_f32(f10)
+ get_f32(f11)
+ get_f32(f12)
+ get_f32(f13)
+ get_f32(f14)
+ get_f32(f15)
+ get_f32(f16)
+ get_f32(f17)
+ get_f32(f18)
+ get_f32(f19)
+ get_f32(f20)
+ get_f32(f21)
+ get_f32(f22)
+ get_f32(f23)
+ get_f32(f24)
+ get_f32(f25)
+ get_f32(f26)
+ get_f32(f27)
+ get_f32(f28)
+ get_f32(f29)
+ get_f32(f30)
+ get_f32(f31)
+
+ .text
+ .globl put_f32_reg
+ put_f32_reg:
+ put_f32(f0)
+ put_f32(f1)
+ put_f32(f2)
+ put_f32(f3)
+ put_f32(f4)
+ put_f32(f5)
+ put_f32(f6)
+ put_f32(f7)
+ put_f32(f8)
+ put_f32(f9)
+ put_f32(f10)
+ put_f32(f11)
+ put_f32(f12)
+ put_f32(f13)
+ put_f32(f14)
+ put_f32(f15)
+ put_f32(f16)
+ put_f32(f17)
+ put_f32(f18)
+ put_f32(f19)
+ put_f32(f20)
+ put_f32(f21)
+ put_f32(f22)
+ put_f32(f23)
+ put_f32(f24)
+ put_f32(f25)
+ put_f32(f26)
+ put_f32(f27)
+ put_f32(f28)
+ put_f32(f29)
+ put_f32(f30)
+ put_f32(f31)
+
+ .text
+ .globl get_f64_reg
+ get_f64_reg:
+ get_f64(f0)
+ get_f64(f1)
+ get_f64(f2)
+ get_f64(f3)
+ get_f64(f4)
+ get_f64(f5)
+ get_f64(f6)
+ get_f64(f7)
+ get_f64(f8)
+ get_f64(f9)
+ get_f64(f10)
+ get_f64(f11)
+ get_f64(f12)
+ get_f64(f13)
+ get_f64(f14)
+ get_f64(f15)
+ get_f64(f16)
+ get_f64(f17)
+ get_f64(f18)
+ get_f64(f19)
+ get_f64(f20)
+ get_f64(f21)
+ get_f64(f22)
+ get_f64(f23)
+ get_f64(f24)
+ get_f64(f25)
+ get_f64(f26)
+ get_f64(f27)
+ get_f64(f28)
+ get_f64(f29)
+ get_f64(f30)
+ get_f64(f31)
+
+ .text
+ .globl put_f64_reg
+ put_f64_reg:
+ put_f64(f0)
+ put_f64(f1)
+ put_f64(f2)
+ put_f64(f3)
+ put_f64(f4)
+ put_f64(f5)
+ put_f64(f6)
+ put_f64(f7)
+ put_f64(f8)
+ put_f64(f9)
+ put_f64(f10)
+ put_f64(f11)
+ put_f64(f12)
+ put_f64(f13)
+ put_f64(f14)
+ put_f64(f15)
+ put_f64(f16)
+ put_f64(f17)
+ put_f64(f18)
+ put_f64(f19)
+ put_f64(f20)
+ put_f64(f21)
+ put_f64(f22)
+ put_f64(f23)
+ put_f64(f24)
+ put_f64(f25)
+ put_f64(f26)
+ put_f64(f27)
+ put_f64(f28)
+ put_f64(f29)
+ put_f64(f30)
+ put_f64(f31)
+
.text
.globl get_fp_state
get_fp_state: