1// See LICENSE for license details.
2
3#ifdef __riscv_flen
4
5#if __riscv_flen != 64
6# error single-float only is not supported
7#endif
8
9#define get_f32(which) fmv.x.s a0, which; jr t0
10#define put_f32(which) fmv.s.x which, a0; jr t0
11#if __riscv_xlen == 64
12# define get_f64(which) fmv.x.d a0, which; jr t0
13# define put_f64(which) fmv.d.x which, a0; jr t0
14#else
15# define get_f64(which) fsd which, 0(a0); jr t0
16# define put_f64(which) fld which, 0(a0); jr t0
17#endif
18
19  .text
20  .option norvc
21  .globl get_f32_reg
22  get_f32_reg:
23    get_f32(f0)
24    get_f32(f1)
25    get_f32(f2)
26    get_f32(f3)
27    get_f32(f4)
28    get_f32(f5)
29    get_f32(f6)
30    get_f32(f7)
31    get_f32(f8)
32    get_f32(f9)
33    get_f32(f10)
34    get_f32(f11)
35    get_f32(f12)
36    get_f32(f13)
37    get_f32(f14)
38    get_f32(f15)
39    get_f32(f16)
40    get_f32(f17)
41    get_f32(f18)
42    get_f32(f19)
43    get_f32(f20)
44    get_f32(f21)
45    get_f32(f22)
46    get_f32(f23)
47    get_f32(f24)
48    get_f32(f25)
49    get_f32(f26)
50    get_f32(f27)
51    get_f32(f28)
52    get_f32(f29)
53    get_f32(f30)
54    get_f32(f31)
55
56  .text
57  .globl put_f32_reg
58  put_f32_reg:
59    put_f32(f0)
60    put_f32(f1)
61    put_f32(f2)
62    put_f32(f3)
63    put_f32(f4)
64    put_f32(f5)
65    put_f32(f6)
66    put_f32(f7)
67    put_f32(f8)
68    put_f32(f9)
69    put_f32(f10)
70    put_f32(f11)
71    put_f32(f12)
72    put_f32(f13)
73    put_f32(f14)
74    put_f32(f15)
75    put_f32(f16)
76    put_f32(f17)
77    put_f32(f18)
78    put_f32(f19)
79    put_f32(f20)
80    put_f32(f21)
81    put_f32(f22)
82    put_f32(f23)
83    put_f32(f24)
84    put_f32(f25)
85    put_f32(f26)
86    put_f32(f27)
87    put_f32(f28)
88    put_f32(f29)
89    put_f32(f30)
90    put_f32(f31)
91
92  .text
93  .globl get_f64_reg
94  get_f64_reg:
95    get_f64(f0)
96    get_f64(f1)
97    get_f64(f2)
98    get_f64(f3)
99    get_f64(f4)
100    get_f64(f5)
101    get_f64(f6)
102    get_f64(f7)
103    get_f64(f8)
104    get_f64(f9)
105    get_f64(f10)
106    get_f64(f11)
107    get_f64(f12)
108    get_f64(f13)
109    get_f64(f14)
110    get_f64(f15)
111    get_f64(f16)
112    get_f64(f17)
113    get_f64(f18)
114    get_f64(f19)
115    get_f64(f20)
116    get_f64(f21)
117    get_f64(f22)
118    get_f64(f23)
119    get_f64(f24)
120    get_f64(f25)
121    get_f64(f26)
122    get_f64(f27)
123    get_f64(f28)
124    get_f64(f29)
125    get_f64(f30)
126    get_f64(f31)
127
128  .text
129  .globl put_f64_reg
130  put_f64_reg:
131    put_f64(f0)
132    put_f64(f1)
133    put_f64(f2)
134    put_f64(f3)
135    put_f64(f4)
136    put_f64(f5)
137    put_f64(f6)
138    put_f64(f7)
139    put_f64(f8)
140    put_f64(f9)
141    put_f64(f10)
142    put_f64(f11)
143    put_f64(f12)
144    put_f64(f13)
145    put_f64(f14)
146    put_f64(f15)
147    put_f64(f16)
148    put_f64(f17)
149    put_f64(f18)
150    put_f64(f19)
151    put_f64(f20)
152    put_f64(f21)
153    put_f64(f22)
154    put_f64(f23)
155    put_f64(f24)
156    put_f64(f25)
157    put_f64(f26)
158    put_f64(f27)
159    put_f64(f28)
160    put_f64(f29)
161    put_f64(f30)
162    put_f64(f31)
163
164#endif
165