diff options
author | Andrew Waterman <waterman@cs.berkeley.edu> | 2015-02-09 15:38:07 -0800 |
---|---|---|
committer | Andrew Waterman <waterman@cs.berkeley.edu> | 2015-02-09 21:19:18 -0800 |
commit | 5c8645013001ff125f9b28e0f861328e9b9a4d12 (patch) | |
tree | 0b04cb002dd38ff87b1d9ead9f45f31717fb1617 /pk/fp_asm.S | |
parent | d2b36b1484059c5792cdf9243f972c83bb96026a (diff) | |
download | pk-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.S | 154 |
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: |