|
96 | 96 | EX fld.d $f31, \base, (31 * FPU_REG_WIDTH) |
97 | 97 | .endm |
98 | 98 |
|
| 99 | +#ifdef CONFIG_32BIT |
| 100 | + .macro sc_save_fcc thread tmp0 tmp1 |
| 101 | + movcf2gr \tmp0, $fcc0 |
| 102 | + move \tmp1, \tmp0 |
| 103 | + movcf2gr \tmp0, $fcc1 |
| 104 | + bstrins.w \tmp1, \tmp0, 15, 8 |
| 105 | + movcf2gr \tmp0, $fcc2 |
| 106 | + bstrins.w \tmp1, \tmp0, 23, 16 |
| 107 | + movcf2gr \tmp0, $fcc3 |
| 108 | + bstrins.w \tmp1, \tmp0, 31, 24 |
| 109 | + EX st.w \tmp1, \thread, THREAD_FCC |
| 110 | + movcf2gr \tmp0, $fcc4 |
| 111 | + move \tmp1, \tmp0 |
| 112 | + movcf2gr \tmp0, $fcc5 |
| 113 | + bstrins.w \tmp1, \tmp0, 15, 8 |
| 114 | + movcf2gr \tmp0, $fcc6 |
| 115 | + bstrins.w \tmp1, \tmp0, 23, 16 |
| 116 | + movcf2gr \tmp0, $fcc7 |
| 117 | + bstrins.w \tmp1, \tmp0, 31, 24 |
| 118 | + EX st.w \tmp1, \thread, (THREAD_FCC + 4) |
| 119 | + .endm |
| 120 | + |
| 121 | + .macro sc_restore_fcc thread tmp0 tmp1 |
| 122 | + EX ld.w \tmp0, \thread, THREAD_FCC |
| 123 | + bstrpick.w \tmp1, \tmp0, 7, 0 |
| 124 | + movgr2cf $fcc0, \tmp1 |
| 125 | + bstrpick.w \tmp1, \tmp0, 15, 8 |
| 126 | + movgr2cf $fcc1, \tmp1 |
| 127 | + bstrpick.w \tmp1, \tmp0, 23, 16 |
| 128 | + movgr2cf $fcc2, \tmp1 |
| 129 | + bstrpick.w \tmp1, \tmp0, 31, 24 |
| 130 | + movgr2cf $fcc3, \tmp1 |
| 131 | + EX ld.w \tmp0, \thread, (THREAD_FCC + 4) |
| 132 | + bstrpick.w \tmp1, \tmp0, 7, 0 |
| 133 | + movgr2cf $fcc4, \tmp1 |
| 134 | + bstrpick.w \tmp1, \tmp0, 15, 8 |
| 135 | + movgr2cf $fcc5, \tmp1 |
| 136 | + bstrpick.w \tmp1, \tmp0, 23, 16 |
| 137 | + movgr2cf $fcc6, \tmp1 |
| 138 | + bstrpick.w \tmp1, \tmp0, 31, 24 |
| 139 | + movgr2cf $fcc7, \tmp1 |
| 140 | + .endm |
| 141 | +#else |
99 | 142 | .macro sc_save_fcc base, tmp0, tmp1 |
100 | 143 | movcf2gr \tmp0, $fcc0 |
101 | 144 | move \tmp1, \tmp0 |
|
135 | 178 | bstrpick.d \tmp1, \tmp0, 63, 56 |
136 | 179 | movgr2cf $fcc7, \tmp1 |
137 | 180 | .endm |
| 181 | +#endif |
138 | 182 |
|
139 | 183 | .macro sc_save_fcsr base, tmp0 |
140 | 184 | movfcsr2gr \tmp0, fcsr0 |
@@ -410,6 +454,72 @@ SYM_FUNC_START(_init_fpu) |
410 | 454 |
|
411 | 455 | li.w t1, -1 # SNaN |
412 | 456 |
|
| 457 | +#ifdef CONFIG_32BIT |
| 458 | + movgr2fr.w $f0, t1 |
| 459 | + movgr2frh.w $f0, t1 |
| 460 | + movgr2fr.w $f1, t1 |
| 461 | + movgr2frh.w $f1, t1 |
| 462 | + movgr2fr.w $f2, t1 |
| 463 | + movgr2frh.w $f2, t1 |
| 464 | + movgr2fr.w $f3, t1 |
| 465 | + movgr2frh.w $f3, t1 |
| 466 | + movgr2fr.w $f4, t1 |
| 467 | + movgr2frh.w $f4, t1 |
| 468 | + movgr2fr.w $f5, t1 |
| 469 | + movgr2frh.w $f5, t1 |
| 470 | + movgr2fr.w $f6, t1 |
| 471 | + movgr2frh.w $f6, t1 |
| 472 | + movgr2fr.w $f7, t1 |
| 473 | + movgr2frh.w $f7, t1 |
| 474 | + movgr2fr.w $f8, t1 |
| 475 | + movgr2frh.w $f8, t1 |
| 476 | + movgr2fr.w $f9, t1 |
| 477 | + movgr2frh.w $f9, t1 |
| 478 | + movgr2fr.w $f10, t1 |
| 479 | + movgr2frh.w $f10, t1 |
| 480 | + movgr2fr.w $f11, t1 |
| 481 | + movgr2frh.w $f11, t1 |
| 482 | + movgr2fr.w $f12, t1 |
| 483 | + movgr2frh.w $f12, t1 |
| 484 | + movgr2fr.w $f13, t1 |
| 485 | + movgr2frh.w $f13, t1 |
| 486 | + movgr2fr.w $f14, t1 |
| 487 | + movgr2frh.w $f14, t1 |
| 488 | + movgr2fr.w $f15, t1 |
| 489 | + movgr2frh.w $f15, t1 |
| 490 | + movgr2fr.w $f16, t1 |
| 491 | + movgr2frh.w $f16, t1 |
| 492 | + movgr2fr.w $f17, t1 |
| 493 | + movgr2frh.w $f17, t1 |
| 494 | + movgr2fr.w $f18, t1 |
| 495 | + movgr2frh.w $f18, t1 |
| 496 | + movgr2fr.w $f19, t1 |
| 497 | + movgr2frh.w $f19, t1 |
| 498 | + movgr2fr.w $f20, t1 |
| 499 | + movgr2frh.w $f20, t1 |
| 500 | + movgr2fr.w $f21, t1 |
| 501 | + movgr2frh.w $f21, t1 |
| 502 | + movgr2fr.w $f22, t1 |
| 503 | + movgr2frh.w $f22, t1 |
| 504 | + movgr2fr.w $f23, t1 |
| 505 | + movgr2frh.w $f23, t1 |
| 506 | + movgr2fr.w $f24, t1 |
| 507 | + movgr2frh.w $f24, t1 |
| 508 | + movgr2fr.w $f25, t1 |
| 509 | + movgr2frh.w $f25, t1 |
| 510 | + movgr2fr.w $f26, t1 |
| 511 | + movgr2frh.w $f26, t1 |
| 512 | + movgr2fr.w $f27, t1 |
| 513 | + movgr2frh.w $f27, t1 |
| 514 | + movgr2fr.w $f28, t1 |
| 515 | + movgr2frh.w $f28, t1 |
| 516 | + movgr2fr.w $f29, t1 |
| 517 | + movgr2frh.w $f29, t1 |
| 518 | + movgr2fr.w $f30, t1 |
| 519 | + movgr2frh.w $f30, t1 |
| 520 | + movgr2fr.w $f31, t1 |
| 521 | + movgr2frh.w $f31, t1 |
| 522 | +#else |
413 | 523 | movgr2fr.d $f0, t1 |
414 | 524 | movgr2fr.d $f1, t1 |
415 | 525 | movgr2fr.d $f2, t1 |
@@ -442,6 +552,7 @@ SYM_FUNC_START(_init_fpu) |
442 | 552 | movgr2fr.d $f29, t1 |
443 | 553 | movgr2fr.d $f30, t1 |
444 | 554 | movgr2fr.d $f31, t1 |
| 555 | +#endif |
445 | 556 |
|
446 | 557 | jr ra |
447 | 558 | SYM_FUNC_END(_init_fpu) |
|
0 commit comments