| #include "macros.inc" |
| #include "fpu.h" |
| |
| test_suite fp0_sqrt |
| |
| #if XCHAL_HAVE_FP_SQRT |
| |
| .macro sqrt_seq r, a, y, t1, hn, h2, t5, h |
| sqrt0.s \y, \a |
| const.s \t1, 0 |
| maddn.s \t1, \y, \y |
| nexp01.s \hn, \a |
| const.s \r, 3 |
| addexp.s \hn, \r |
| maddn.s \r, \t1, \hn |
| nexp01.s \t1, \a |
| neg.s \h2, \t1 |
| maddn.s \y, \r, \y |
| const.s \r, 0 |
| const.s \t5, 0 |
| const.s \h, 0 |
| maddn.s \r, \h2, \y |
| maddn.s \t5, \y, \hn |
| const.s \hn, 3 |
| maddn.s \h, \hn, \y |
| maddn.s \t1, \r, \r |
| maddn.s \hn, \t5, \y |
| neg.s \y, \h |
| maddn.s \r, \t1, \y |
| maddn.s \h, \hn, \h |
| mksadj.s \y, \a |
| nexp01.s \a, \a |
| maddn.s \a, \r, \r |
| neg.s \t1, \h |
| addexpm.s \r, \y |
| addexp.s \t1, \y |
| divn.s \r, \a, \t1 |
| .endm |
| |
| .macro sqrt_s fr0, fr1 |
| sqrt_seq \fr0, \fr1, f10, f11, f12, f13, f14, f15 |
| .endm |
| |
| .macro movfp fr, v |
| movi a2, \v |
| wfr \fr, a2 |
| .endm |
| |
| .macro check_res fr, r, sr |
| rfr a2, \fr |
| dump a2 |
| movi a3, \r |
| assert eq, a2, a3 |
| rur a2, fsr |
| movi a3, \sr |
| assert eq, a2, a3 |
| .endm |
| |
| test sqrt_s |
| movi a2, 1 |
| wsr a2, cpenable |
| |
| test_op1 sqrt_s, f0, f1, 0x40000000, \ |
| 0x3fb504f3, 0x3fb504f3, 0x3fb504f4, 0x3fb504f3, \ |
| FSR_I, FSR_I, FSR_I, FSR_I |
| test_op1 sqrt_s, f3, f4, F32_1, \ |
| F32_1, F32_1, F32_1, F32_1, \ |
| FSR__, FSR__, FSR__, FSR__ |
| test_op1 sqrt_s, f6, f7, F32_MINUS | F32_1, \ |
| F32_DNAN, F32_DNAN, F32_DNAN, F32_DNAN, \ |
| FSR_V, FSR_V, FSR_V, FSR_V |
| test_end |
| |
| #endif |
| |
| test_suite_end |