12d934b59SBastian Koppelmann /* Helpers */ 22d934b59SBastian Koppelmann #define LI(reg, val) \ 32d934b59SBastian Koppelmann mov.u reg, lo:val; \ 42d934b59SBastian Koppelmann movh DREG_TEMP_LI, up:val; \ 52d934b59SBastian Koppelmann or reg, reg, DREG_TEMP_LI; \ 62d934b59SBastian Koppelmann 72d934b59SBastian Koppelmann /* Address definitions */ 82d934b59SBastian Koppelmann #define TESTDEV_ADDR 0xf0000000 92d934b59SBastian Koppelmann /* Register definitions */ 102d934b59SBastian Koppelmann #define DREG_RS1 %d0 11*f271aa62SBastian Koppelmann #define DREG_RS2 %d1 122d934b59SBastian Koppelmann #define DREG_CALC_RESULT %d1 13*f271aa62SBastian Koppelmann #define DREG_CALC_PSW %d2 14*f271aa62SBastian Koppelmann #define DREG_CORRECT_PSW %d3 152d934b59SBastian Koppelmann #define DREG_TEMP_LI %d10 162d934b59SBastian Koppelmann #define DREG_TEMP %d11 172d934b59SBastian Koppelmann #define DREG_TEST_NUM %d14 182d934b59SBastian Koppelmann #define DREG_CORRECT_RESULT %d15 192d934b59SBastian Koppelmann 202d934b59SBastian Koppelmann #define DREG_DEV_ADDR %a15 212d934b59SBastian Koppelmann 222d934b59SBastian Koppelmann /* Test case wrappers */ 232d934b59SBastian Koppelmann #define TEST_CASE(num, testreg, correct, code...) \ 242d934b59SBastian Koppelmann test_ ## num: \ 252d934b59SBastian Koppelmann code; \ 262d934b59SBastian Koppelmann LI(DREG_CORRECT_RESULT, correct) \ 272d934b59SBastian Koppelmann mov DREG_TEST_NUM, num; \ 282d934b59SBastian Koppelmann jne testreg, DREG_CORRECT_RESULT, fail \ 292d934b59SBastian Koppelmann 30*f271aa62SBastian Koppelmann #define TEST_CASE_PSW(num, testreg, correct, correct_psw, code...) \ 31*f271aa62SBastian Koppelmann test_ ## num: \ 32*f271aa62SBastian Koppelmann code; \ 33*f271aa62SBastian Koppelmann LI(DREG_CORRECT_RESULT, correct) \ 34*f271aa62SBastian Koppelmann mov DREG_TEST_NUM, num; \ 35*f271aa62SBastian Koppelmann jne testreg, DREG_CORRECT_RESULT, fail; \ 36*f271aa62SBastian Koppelmann mfcr DREG_CALC_PSW, $psw; \ 37*f271aa62SBastian Koppelmann LI(DREG_CORRECT_PSW, correct_psw) \ 38*f271aa62SBastian Koppelmann mov DREG_TEST_NUM, num; \ 39*f271aa62SBastian Koppelmann jne DREG_CALC_PSW, DREG_CORRECT_PSW, fail; 40*f271aa62SBastian Koppelmann 412d934b59SBastian Koppelmann /* Actual test case type 422d934b59SBastian Koppelmann * e.g inst %dX, %dY -> TEST_D_D 432d934b59SBastian Koppelmann * inst %dX, %dY, %dZ -> TEST_D_DD 442d934b59SBastian Koppelmann * inst %eX, %dY, %dZ -> TEST_E_DD 452d934b59SBastian Koppelmann */ 462d934b59SBastian Koppelmann #define TEST_D_D(insn, num, result, rs1) \ 472d934b59SBastian Koppelmann TEST_CASE(num, DREG_CALC_RESULT, result, \ 482d934b59SBastian Koppelmann LI(DREG_RS1, rs1); \ 492d934b59SBastian Koppelmann insn DREG_CALC_RESULT, DREG_RS1; \ 502d934b59SBastian Koppelmann ) 512d934b59SBastian Koppelmann 52*f271aa62SBastian Koppelmann #define TEST_D_DD_PSW(insn, num, result, psw, rs1, rs2) \ 53*f271aa62SBastian Koppelmann TEST_CASE_PSW(num, DREG_CALC_RESULT, result, psw, \ 54*f271aa62SBastian Koppelmann LI(DREG_RS1, rs1); \ 55*f271aa62SBastian Koppelmann LI(DREG_RS2, rs2); \ 56*f271aa62SBastian Koppelmann rstv; \ 57*f271aa62SBastian Koppelmann insn DREG_CALC_RESULT, DREG_RS1, DREG_RS2; \ 58*f271aa62SBastian Koppelmann ) 59*f271aa62SBastian Koppelmann 60*f271aa62SBastian Koppelmann 61*f271aa62SBastian Koppelmann 622d934b59SBastian Koppelmann /* Pass/Fail handling part */ 632d934b59SBastian Koppelmann #define TEST_PASSFAIL \ 642d934b59SBastian Koppelmann j pass; \ 652d934b59SBastian Koppelmann fail: \ 662d934b59SBastian Koppelmann LI(DREG_TEMP, TESTDEV_ADDR) \ 672d934b59SBastian Koppelmann mov.a DREG_DEV_ADDR, DREG_TEMP; \ 682d934b59SBastian Koppelmann st.w [DREG_DEV_ADDR], DREG_TEST_NUM;\ 692d934b59SBastian Koppelmann debug; \ 702d934b59SBastian Koppelmann j fail; \ 712d934b59SBastian Koppelmann pass: \ 722d934b59SBastian Koppelmann LI(DREG_TEMP, TESTDEV_ADDR) \ 732d934b59SBastian Koppelmann mov.a DREG_DEV_ADDR, DREG_TEMP; \ 742d934b59SBastian Koppelmann mov DREG_TEST_NUM, 0; \ 752d934b59SBastian Koppelmann st.w [DREG_DEV_ADDR], DREG_TEST_NUM;\ 762d934b59SBastian Koppelmann debug; \ 772d934b59SBastian Koppelmann j pass; 78