1*11029e94SMax Filippov#include "macros.inc" 2*11029e94SMax Filippov#include "fpu.h" 3*11029e94SMax Filippov 4*11029e94SMax Filippovtest_suite fp0_div 5*11029e94SMax Filippov 6*11029e94SMax Filippov#if XCHAL_HAVE_FP_DIV 7*11029e94SMax Filippov 8*11029e94SMax Filippov.macro divs_seq q, a, b, r, y, y0, an, bn, e, ex 9*11029e94SMax Filippov div0.s \y0, \b 10*11029e94SMax Filippov nexp01.s \bn, \b 11*11029e94SMax Filippov const.s \e, 1 12*11029e94SMax Filippov maddn.s \e, \bn, \y0 13*11029e94SMax Filippov mov.s \y, \y0 14*11029e94SMax Filippov mov.s \ex, \b 15*11029e94SMax Filippov nexp01.s \an, \a 16*11029e94SMax Filippov maddn.s \y, \e, \y0 17*11029e94SMax Filippov const.s \e, 1 18*11029e94SMax Filippov const.s \q, 0 19*11029e94SMax Filippov neg.s \r, \an 20*11029e94SMax Filippov maddn.s \e, \bn, \y 21*11029e94SMax Filippov maddn.s \q, \r, \y0 22*11029e94SMax Filippov mkdadj.s \ex, \a 23*11029e94SMax Filippov maddn.s \y, \e, \y 24*11029e94SMax Filippov maddn.s \r, \bn, \q 25*11029e94SMax Filippov const.s \e, 1 26*11029e94SMax Filippov maddn.s \e, \bn, \y 27*11029e94SMax Filippov maddn.s \q, \r, \y 28*11029e94SMax Filippov neg.s \r, \an 29*11029e94SMax Filippov maddn.s \y, \e, \y 30*11029e94SMax Filippov maddn.s \r, \bn, \q 31*11029e94SMax Filippov addexpm.s \q, \ex 32*11029e94SMax Filippov addexp.s \y, \ex 33*11029e94SMax Filippov divn.s \q, \r, \y 34*11029e94SMax Filippov.endm 35*11029e94SMax Filippov 36*11029e94SMax Filippov.macro div_s fr0, fr1, fr2 37*11029e94SMax Filippov divs_seq \fr0, \fr1, \fr2, f9, f10, f11, f12, f13, f14, f15 38*11029e94SMax Filippov.endm 39*11029e94SMax Filippov 40*11029e94SMax Filippov.macro movfp fr, v 41*11029e94SMax Filippov movi a2, \v 42*11029e94SMax Filippov wfr \fr, a2 43*11029e94SMax Filippov.endm 44*11029e94SMax Filippov 45*11029e94SMax Filippov.macro check_res fr, r, sr 46*11029e94SMax Filippov rfr a2, \fr 47*11029e94SMax Filippov dump a2 48*11029e94SMax Filippov movi a3, \r 49*11029e94SMax Filippov assert eq, a2, a3 50*11029e94SMax Filippov rur a2, fsr 51*11029e94SMax Filippov movi a3, \sr 52*11029e94SMax Filippov assert eq, a2, a3 53*11029e94SMax Filippov.endm 54*11029e94SMax Filippov 55*11029e94SMax Filippovtest div_s 56*11029e94SMax Filippov movi a2, 1 57*11029e94SMax Filippov wsr a2, cpenable 58*11029e94SMax Filippov 59*11029e94SMax Filippov test_op2 div_s, f0, f1, f2, 0x40000000, 0x40400000, \ 60*11029e94SMax Filippov 0x3f2aaaab, 0x3f2aaaaa, 0x3f2aaaab, 0x3f2aaaaa, \ 61*11029e94SMax Filippov FSR_I, FSR_I, FSR_I, FSR_I 62*11029e94SMax Filippov test_op2 div_s, f3, f4, f5, F32_1, F32_0, \ 63*11029e94SMax Filippov F32_PINF, F32_PINF, F32_PINF, F32_PINF, \ 64*11029e94SMax Filippov FSR_Z, FSR_Z, FSR_Z, FSR_Z 65*11029e94SMax Filippov test_op2 div_s, f6, f7, f8, F32_0, F32_0, \ 66*11029e94SMax Filippov F32_DNAN, F32_DNAN, F32_DNAN, F32_DNAN, \ 67*11029e94SMax Filippov FSR_V, FSR_V, FSR_V, FSR_V 68*11029e94SMax Filippov 69*11029e94SMax Filippov /* MAX_FLOAT / 0.5 = +inf/MAX_FLOAT */ 70*11029e94SMax Filippov test_op2 div_s, f0, f1, f2, F32_MAX, F32_0_5, \ 71*11029e94SMax Filippov F32_PINF, F32_MAX, F32_PINF, F32_MAX, \ 72*11029e94SMax Filippov FSR_OI, FSR_OI, FSR_OI, FSR_OI 73*11029e94SMax Filippov 74*11029e94SMax Filippov /* 0.5 / MAX_FLOAT = denorm */ 75*11029e94SMax Filippov test_op2 div_s, f0, f1, f2, F32_0_5, F32_MAX, \ 76*11029e94SMax Filippov 0x00100000, 0x00100000, 0x00100001, 0x00100000, \ 77*11029e94SMax Filippov FSR_UI, FSR_UI, FSR_UI, FSR_UI 78*11029e94SMax Filippovtest_end 79*11029e94SMax Filippov 80*11029e94SMax Filippov#endif 81*11029e94SMax Filippov 82*11029e94SMax Filippovtest_suite_end 83