|
7 | 7 | * Date Author Notes |
8 | 8 | * 2018/10/28 Bernard The unify RISC-V porting implementation |
9 | 9 | * 2018/12/27 Jesven Add SMP support |
| 10 | + * 2020/11/20 BalanceTWK Add FPU support |
10 | 11 | */ |
11 | 12 |
|
12 | 13 | #include "cpuport.h" |
@@ -72,6 +73,43 @@ rt_hw_context_switch: |
72 | 73 | * mstatus.mie -> sp(2) |
73 | 74 | * x(i) -> sp(i-4) |
74 | 75 | */ |
| 76 | +#ifdef ARCH_RISCV_FPU |
| 77 | + addi sp, sp, -32 * FREGBYTES |
| 78 | + |
| 79 | + FSTORE f0, 0 * FREGBYTES(sp) |
| 80 | + FSTORE f1, 1 * FREGBYTES(sp) |
| 81 | + FSTORE f2, 2 * FREGBYTES(sp) |
| 82 | + FSTORE f3, 3 * FREGBYTES(sp) |
| 83 | + FSTORE f4, 4 * FREGBYTES(sp) |
| 84 | + FSTORE f5, 5 * FREGBYTES(sp) |
| 85 | + FSTORE f6, 6 * FREGBYTES(sp) |
| 86 | + FSTORE f7, 7 * FREGBYTES(sp) |
| 87 | + FSTORE f8, 8 * FREGBYTES(sp) |
| 88 | + FSTORE f9, 9 * FREGBYTES(sp) |
| 89 | + FSTORE f10, 10 * FREGBYTES(sp) |
| 90 | + FSTORE f11, 11 * FREGBYTES(sp) |
| 91 | + FSTORE f12, 12 * FREGBYTES(sp) |
| 92 | + FSTORE f13, 13 * FREGBYTES(sp) |
| 93 | + FSTORE f14, 14 * FREGBYTES(sp) |
| 94 | + FSTORE f15, 15 * FREGBYTES(sp) |
| 95 | + FSTORE f16, 16 * FREGBYTES(sp) |
| 96 | + FSTORE f17, 17 * FREGBYTES(sp) |
| 97 | + FSTORE f18, 18 * FREGBYTES(sp) |
| 98 | + FSTORE f19, 19 * FREGBYTES(sp) |
| 99 | + FSTORE f20, 20 * FREGBYTES(sp) |
| 100 | + FSTORE f21, 21 * FREGBYTES(sp) |
| 101 | + FSTORE f22, 22 * FREGBYTES(sp) |
| 102 | + FSTORE f23, 23 * FREGBYTES(sp) |
| 103 | + FSTORE f24, 24 * FREGBYTES(sp) |
| 104 | + FSTORE f25, 25 * FREGBYTES(sp) |
| 105 | + FSTORE f26, 26 * FREGBYTES(sp) |
| 106 | + FSTORE f27, 27 * FREGBYTES(sp) |
| 107 | + FSTORE f28, 28 * FREGBYTES(sp) |
| 108 | + FSTORE f29, 29 * FREGBYTES(sp) |
| 109 | + FSTORE f30, 30 * FREGBYTES(sp) |
| 110 | + FSTORE f31, 31 * FREGBYTES(sp) |
| 111 | + |
| 112 | +#endif |
75 | 113 | addi sp, sp, -32 * REGBYTES |
76 | 114 | STORE sp, (a0) |
77 | 115 |
|
@@ -174,7 +212,7 @@ rt_hw_context_switch_exit: |
174 | 212 |
|
175 | 213 | LOAD x1, 1 * REGBYTES(sp) |
176 | 214 |
|
177 | | - li t0, 0x00001800 |
| 215 | + li t0, 0x00007800 |
178 | 216 | csrw mstatus, t0 |
179 | 217 | LOAD a0, 2 * REGBYTES(sp) |
180 | 218 | csrs mstatus, a0 |
@@ -209,4 +247,42 @@ rt_hw_context_switch_exit: |
209 | 247 | LOAD x31, 31 * REGBYTES(sp) |
210 | 248 |
|
211 | 249 | addi sp, sp, 32 * REGBYTES |
| 250 | + |
| 251 | +#ifdef ARCH_RISCV_FPU |
| 252 | + FLOAD f0, 0 * FREGBYTES(sp) |
| 253 | + FLOAD f1, 1 * FREGBYTES(sp) |
| 254 | + FLOAD f2, 2 * FREGBYTES(sp) |
| 255 | + FLOAD f3, 3 * FREGBYTES(sp) |
| 256 | + FLOAD f4, 4 * FREGBYTES(sp) |
| 257 | + FLOAD f5, 5 * FREGBYTES(sp) |
| 258 | + FLOAD f6, 6 * FREGBYTES(sp) |
| 259 | + FLOAD f7, 7 * FREGBYTES(sp) |
| 260 | + FLOAD f8, 8 * FREGBYTES(sp) |
| 261 | + FLOAD f9, 9 * FREGBYTES(sp) |
| 262 | + FLOAD f10, 10 * FREGBYTES(sp) |
| 263 | + FLOAD f11, 11 * FREGBYTES(sp) |
| 264 | + FLOAD f12, 12 * FREGBYTES(sp) |
| 265 | + FLOAD f13, 13 * FREGBYTES(sp) |
| 266 | + FLOAD f14, 14 * FREGBYTES(sp) |
| 267 | + FLOAD f15, 15 * FREGBYTES(sp) |
| 268 | + FLOAD f16, 16 * FREGBYTES(sp) |
| 269 | + FLOAD f17, 17 * FREGBYTES(sp) |
| 270 | + FLOAD f18, 18 * FREGBYTES(sp) |
| 271 | + FLOAD f19, 19 * FREGBYTES(sp) |
| 272 | + FLOAD f20, 20 * FREGBYTES(sp) |
| 273 | + FLOAD f21, 21 * FREGBYTES(sp) |
| 274 | + FLOAD f22, 22 * FREGBYTES(sp) |
| 275 | + FLOAD f23, 23 * FREGBYTES(sp) |
| 276 | + FLOAD f24, 24 * FREGBYTES(sp) |
| 277 | + FLOAD f25, 25 * FREGBYTES(sp) |
| 278 | + FLOAD f26, 26 * FREGBYTES(sp) |
| 279 | + FLOAD f27, 27 * FREGBYTES(sp) |
| 280 | + FLOAD f28, 28 * FREGBYTES(sp) |
| 281 | + FLOAD f29, 29 * FREGBYTES(sp) |
| 282 | + FLOAD f30, 30 * FREGBYTES(sp) |
| 283 | + FLOAD f31, 31 * FREGBYTES(sp) |
| 284 | + |
| 285 | + addi sp, sp, 32 * FREGBYTES |
| 286 | +#endif |
| 287 | + |
212 | 288 | mret |
0 commit comments