1fd78bc55SMax Filippov#include "macros.inc" 2*7f4faa21SMax Filippov#include "fpu.h" 3fd78bc55SMax Filippov 4fd78bc55SMax Filippovtest_suite fp1 5fd78bc55SMax Filippov 6fd78bc55SMax Filippov#if XCHAL_HAVE_FP 7fd78bc55SMax Filippov 8fd78bc55SMax Filippov.macro movfp fr, v 9fd78bc55SMax Filippov movi a2, \v 10fd78bc55SMax Filippov wfr \fr, a2 11fd78bc55SMax Filippov.endm 12fd78bc55SMax Filippov 13*7f4faa21SMax Filippov.macro test_ord_ex op, br, fr0, fr1, v0, v1, r, sr 14fd78bc55SMax Filippov movi a2, 0 15fd78bc55SMax Filippov wur a2, fsr 16fd78bc55SMax Filippov movfp \fr0, \v0 17fd78bc55SMax Filippov movfp \fr1, \v1 18fd78bc55SMax Filippov \op \br, \fr0, \fr1 19fd78bc55SMax Filippov movi a2, 0 20fd78bc55SMax Filippov movi a3, 1 21fd78bc55SMax Filippov movt a2, a3, \br 22fd78bc55SMax Filippov assert eqi, a2, \r 23fd78bc55SMax Filippov rur a2, fsr 24*7f4faa21SMax Filippov#if DFPU 25*7f4faa21SMax Filippov movi a3, \sr 26*7f4faa21SMax Filippov assert eq, a2, a3 27*7f4faa21SMax Filippov#else 28fd78bc55SMax Filippov assert eqi, a2, 0 29*7f4faa21SMax Filippov#endif 30fd78bc55SMax Filippov.endm 31fd78bc55SMax Filippov 32*7f4faa21SMax Filippov.macro test_ord op, br, fr0, fr1, v0, v1, r, sr 33fd78bc55SMax Filippov movi a2, 0 34fd78bc55SMax Filippov wur a2, fcr 35*7f4faa21SMax Filippov test_ord_ex \op, \br, \fr0, \fr1, \v0, \v1, \r, \sr 36fd78bc55SMax Filippov movi a2, 0x7c 37fd78bc55SMax Filippov wur a2, fcr 38*7f4faa21SMax Filippov test_ord_ex \op, \br, \fr0, \fr1, \v0, \v1, \r, \sr 39fd78bc55SMax Filippov.endm 40fd78bc55SMax Filippov 41*7f4faa21SMax Filippov.macro test_ord_all op, aa, ab, ba, aPI, PIa, aN, Na, II, IN, NI, qnan_sr 42*7f4faa21SMax Filippov test_ord \op b0, f0, f1, 0x3f800000, 0x3f800000, \aa, FSR__ /* ord == ord */ 43*7f4faa21SMax Filippov test_ord \op b1, f2, f3, 0x3f800000, 0x3fc00000, \ab, FSR__ /* ord < ord */ 44*7f4faa21SMax Filippov test_ord \op b2, f4, f5, 0x3fc00000, 0x3f800000, \ba, FSR__ /* ord > ord */ 45*7f4faa21SMax Filippov test_ord \op b3, f6, f7, 0x3f800000, 0x7f800000, \aPI, FSR__ /* ord +INF */ 46*7f4faa21SMax Filippov test_ord \op b4, f8, f9, 0x7f800000, 0x3f800000, \PIa, FSR__ /* +INF ord */ 47*7f4faa21SMax Filippov test_ord \op b5, f10, f11, 0x3f800000, 0xffc00001, \aN, \qnan_sr /* ord -QNaN */ 48*7f4faa21SMax Filippov test_ord \op b6, f12, f13, 0x3f800000, 0xff800001, \aN, FSR_V /* ord -SNaN */ 49*7f4faa21SMax Filippov test_ord \op b7, f14, f15, 0x3f800000, 0x7f800001, \aN, FSR_V /* ord +SNaN */ 50*7f4faa21SMax Filippov test_ord \op b8, f0, f1, 0x3f800000, 0x7fc00000, \aN, \qnan_sr /* ord +QNaN */ 51*7f4faa21SMax Filippov test_ord \op b9, f2, f3, 0xffc00001, 0x3f800000, \Na, \qnan_sr /* -QNaN ord */ 52*7f4faa21SMax Filippov test_ord \op b10, f4, f5, 0xff800001, 0x3f800000, \Na, FSR_V /* -SNaN ord */ 53*7f4faa21SMax Filippov test_ord \op b11, f6, f7, 0x7f800001, 0x3f800000, \Na, FSR_V /* +SNaN ord */ 54*7f4faa21SMax Filippov test_ord \op b12, f8, f9, 0x7fc00000, 0x3f800000, \Na, \qnan_sr /* +QNaN ord */ 55*7f4faa21SMax Filippov test_ord \op b13, f10, f11, 0x7f800000, 0x7f800000, \II, FSR__ /* +INF +INF */ 56*7f4faa21SMax Filippov test_ord \op b14, f12, f13, 0x7f800000, 0x7fc00000, \IN, \qnan_sr /* +INF +QNaN */ 57*7f4faa21SMax Filippov test_ord \op b15, f14, f15, 0x7fc00000, 0x7f800000, \NI, \qnan_sr /* +QNaN +INF */ 58fd78bc55SMax Filippov.endm 59fd78bc55SMax Filippov 60fd78bc55SMax Filippovtest un_s 61fd78bc55SMax Filippov movi a2, 1 62fd78bc55SMax Filippov wsr a2, cpenable 63*7f4faa21SMax Filippov test_ord_all un.s, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, FSR__ 64fd78bc55SMax Filippovtest_end 65fd78bc55SMax Filippov 66fd78bc55SMax Filippovtest oeq_s 67*7f4faa21SMax Filippov test_ord_all oeq.s, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, FSR__ 68fd78bc55SMax Filippovtest_end 69fd78bc55SMax Filippov 70fd78bc55SMax Filippovtest ueq_s 71*7f4faa21SMax Filippov test_ord_all ueq.s, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, FSR__ 72fd78bc55SMax Filippovtest_end 73fd78bc55SMax Filippov 74fd78bc55SMax Filippovtest olt_s 75*7f4faa21SMax Filippov test_ord_all olt.s, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, FSR_V 76fd78bc55SMax Filippovtest_end 77fd78bc55SMax Filippov 78fd78bc55SMax Filippovtest ult_s 79*7f4faa21SMax Filippov test_ord_all ult.s, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, FSR__ 80fd78bc55SMax Filippovtest_end 81fd78bc55SMax Filippov 82fd78bc55SMax Filippovtest ole_s 83*7f4faa21SMax Filippov test_ord_all ole.s, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, FSR_V 84fd78bc55SMax Filippovtest_end 85fd78bc55SMax Filippov 86fd78bc55SMax Filippovtest ule_s 87*7f4faa21SMax Filippov test_ord_all ule.s, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, FSR__ 88fd78bc55SMax Filippovtest_end 89fd78bc55SMax Filippov 90fd78bc55SMax Filippov.macro test_cond op, fr0, fr1, cr, v0, v1, r 91fd78bc55SMax Filippov movfp \fr0, \v0 92fd78bc55SMax Filippov movfp \fr1, \v1 93fd78bc55SMax Filippov \op \fr0, \fr1, \cr 94fd78bc55SMax Filippov rfr a2, \fr0 95fd78bc55SMax Filippov movi a3, \r 96fd78bc55SMax Filippov assert eq, a2, a3 97fd78bc55SMax Filippov.endm 98fd78bc55SMax Filippov 99fd78bc55SMax Filippovtest moveqz_s 100fd78bc55SMax Filippov movi a3, 0 101fd78bc55SMax Filippov test_cond moveqz.s, f0, f1, a3, 0, 0x3f800000, 0x3f800000 102fd78bc55SMax Filippov movi a3, 1 103fd78bc55SMax Filippov test_cond moveqz.s, f0, f1, a3, 0, 0x3f800000, 0 104fd78bc55SMax Filippovtest_end 105fd78bc55SMax Filippov 106fd78bc55SMax Filippovtest movnez_s 107fd78bc55SMax Filippov movi a3, 0 108fd78bc55SMax Filippov test_cond movnez.s, f0, f1, a3, 0, 0x3f800000, 0 109fd78bc55SMax Filippov movi a3, 1 110fd78bc55SMax Filippov test_cond movnez.s, f0, f1, a3, 0, 0x3f800000, 0x3f800000 111fd78bc55SMax Filippovtest_end 112fd78bc55SMax Filippov 113fd78bc55SMax Filippovtest movltz_s 114fd78bc55SMax Filippov movi a3, -1 115fd78bc55SMax Filippov test_cond movltz.s, f0, f1, a3, 0, 0x3f800000, 0x3f800000 116fd78bc55SMax Filippov movi a3, 0 117fd78bc55SMax Filippov test_cond movltz.s, f0, f1, a3, 0, 0x3f800000, 0 118fd78bc55SMax Filippov movi a3, 1 119fd78bc55SMax Filippov test_cond movltz.s, f0, f1, a3, 0, 0x3f800000, 0 120fd78bc55SMax Filippovtest_end 121fd78bc55SMax Filippov 122fd78bc55SMax Filippovtest movgez_s 123fd78bc55SMax Filippov movi a3, -1 124fd78bc55SMax Filippov test_cond movgez.s, f0, f1, a3, 0, 0x3f800000, 0 125fd78bc55SMax Filippov movi a3, 0 126fd78bc55SMax Filippov test_cond movgez.s, f0, f1, a3, 0, 0x3f800000, 0x3f800000 127fd78bc55SMax Filippov movi a3, 1 128fd78bc55SMax Filippov test_cond movgez.s, f0, f1, a3, 0, 0x3f800000, 0x3f800000 129fd78bc55SMax Filippovtest_end 130fd78bc55SMax Filippov 131fd78bc55SMax Filippovtest movf_s 132fd78bc55SMax Filippov olt.s b0, f0, f0 133fd78bc55SMax Filippov test_cond movf.s, f0, f1, b0, 0, 0x3f800000, 0x3f800000 134fd78bc55SMax Filippov ueq.s b0, f0, f0 135fd78bc55SMax Filippov test_cond movf.s, f0, f1, b0, 0, 0x3f800000, 0 136fd78bc55SMax Filippovtest_end 137fd78bc55SMax Filippov 138fd78bc55SMax Filippovtest movt_s 139fd78bc55SMax Filippov ueq.s b0, f0, f0 140fd78bc55SMax Filippov test_cond movt.s, f0, f1, b0, 0, 0x3f800000, 0x3f800000 141fd78bc55SMax Filippov olt.s b0, f0, f0 142fd78bc55SMax Filippov test_cond movt.s, f0, f1, b0, 0, 0x3f800000, 0 143fd78bc55SMax Filippovtest_end 144fd78bc55SMax Filippov 145fd78bc55SMax Filippov#endif 146fd78bc55SMax Filippov 147fd78bc55SMax Filippovtest_suite_end 148