1*e7dfa64dSMax Filippov.include "macros.inc" 2*e7dfa64dSMax Filippov 3*e7dfa64dSMax Filippov#define debug_level 6 4*e7dfa64dSMax Filippov#define debug_vector level6 5*e7dfa64dSMax Filippov 6*e7dfa64dSMax Filippovtest_suite break 7*e7dfa64dSMax Filippov 8*e7dfa64dSMax Filippovtest break 9*e7dfa64dSMax Filippov set_vector debug_vector, 0 10*e7dfa64dSMax Filippov rsil a2, debug_level 11*e7dfa64dSMax Filippov _break 0, 0 12*e7dfa64dSMax Filippov 13*e7dfa64dSMax Filippov set_vector debug_vector, 2f 14*e7dfa64dSMax Filippov rsil a2, debug_level - 1 15*e7dfa64dSMax Filippov1: 16*e7dfa64dSMax Filippov _break 0, 0 17*e7dfa64dSMax Filippov test_fail 18*e7dfa64dSMax Filippov2: 19*e7dfa64dSMax Filippov rsr a2, ps 20*e7dfa64dSMax Filippov movi a3, 0x1f 21*e7dfa64dSMax Filippov and a2, a2, a3 22*e7dfa64dSMax Filippov movi a3, 0x10 | debug_level 23*e7dfa64dSMax Filippov assert eq, a2, a3 24*e7dfa64dSMax Filippov rsr a2, epc6 25*e7dfa64dSMax Filippov movi a3, 1b 26*e7dfa64dSMax Filippov assert eq, a2, a3 27*e7dfa64dSMax Filippov rsr a2, debugcause 28*e7dfa64dSMax Filippov movi a3, 0x8 29*e7dfa64dSMax Filippov assert eq, a2, a3 30*e7dfa64dSMax Filippovtest_end 31*e7dfa64dSMax Filippov 32*e7dfa64dSMax Filippovtest breakn 33*e7dfa64dSMax Filippov set_vector debug_vector, 0 34*e7dfa64dSMax Filippov rsil a2, debug_level 35*e7dfa64dSMax Filippov _break.n 0 36*e7dfa64dSMax Filippov 37*e7dfa64dSMax Filippov set_vector debug_vector, 2f 38*e7dfa64dSMax Filippov rsil a2, debug_level - 1 39*e7dfa64dSMax Filippov1: 40*e7dfa64dSMax Filippov _break.n 0 41*e7dfa64dSMax Filippov test_fail 42*e7dfa64dSMax Filippov2: 43*e7dfa64dSMax Filippov rsr a2, ps 44*e7dfa64dSMax Filippov movi a3, 0x1f 45*e7dfa64dSMax Filippov and a2, a2, a3 46*e7dfa64dSMax Filippov movi a3, 0x10 | debug_level 47*e7dfa64dSMax Filippov assert eq, a2, a3 48*e7dfa64dSMax Filippov rsr a2, epc6 49*e7dfa64dSMax Filippov movi a3, 1b 50*e7dfa64dSMax Filippov assert eq, a2, a3 51*e7dfa64dSMax Filippov rsr a2, debugcause 52*e7dfa64dSMax Filippov movi a3, 0x10 53*e7dfa64dSMax Filippov assert eq, a2, a3 54*e7dfa64dSMax Filippovtest_end 55*e7dfa64dSMax Filippov 56*e7dfa64dSMax Filippovtest ibreak 57*e7dfa64dSMax Filippov set_vector debug_vector, 0 58*e7dfa64dSMax Filippov rsil a2, debug_level 59*e7dfa64dSMax Filippov movi a2, 1f 60*e7dfa64dSMax Filippov wsr a2, ibreaka0 61*e7dfa64dSMax Filippov movi a2, 1 62*e7dfa64dSMax Filippov wsr a2, ibreakenable 63*e7dfa64dSMax Filippov isync 64*e7dfa64dSMax Filippov1: 65*e7dfa64dSMax Filippov rsil a2, debug_level - 1 66*e7dfa64dSMax Filippov movi a2, 1f 67*e7dfa64dSMax Filippov wsr a2, ibreaka0 68*e7dfa64dSMax Filippov movi a2, 0 69*e7dfa64dSMax Filippov wsr a2, ibreakenable 70*e7dfa64dSMax Filippov isync 71*e7dfa64dSMax Filippov1: 72*e7dfa64dSMax Filippov set_vector debug_vector, 2f 73*e7dfa64dSMax Filippov movi a2, 1f 74*e7dfa64dSMax Filippov wsr a2, ibreaka0 75*e7dfa64dSMax Filippov movi a2, 1 76*e7dfa64dSMax Filippov wsr a2, ibreakenable 77*e7dfa64dSMax Filippov isync 78*e7dfa64dSMax Filippov1: 79*e7dfa64dSMax Filippov test_fail 80*e7dfa64dSMax Filippov2: 81*e7dfa64dSMax Filippov rsr a2, ps 82*e7dfa64dSMax Filippov movi a3, 0x1f 83*e7dfa64dSMax Filippov and a2, a2, a3 84*e7dfa64dSMax Filippov movi a3, 0x10 | debug_level 85*e7dfa64dSMax Filippov assert eq, a2, a3 86*e7dfa64dSMax Filippov rsr a2, epc6 87*e7dfa64dSMax Filippov movi a3, 1b 88*e7dfa64dSMax Filippov assert eq, a2, a3 89*e7dfa64dSMax Filippov rsr a2, debugcause 90*e7dfa64dSMax Filippov movi a3, 0x2 91*e7dfa64dSMax Filippov assert eq, a2, a3 92*e7dfa64dSMax Filippovtest_end 93*e7dfa64dSMax Filippov 94*e7dfa64dSMax Filippovtest ibreak_priority 95*e7dfa64dSMax Filippov set_vector debug_vector, 2f 96*e7dfa64dSMax Filippov rsil a2, debug_level - 1 97*e7dfa64dSMax Filippov movi a2, 1f 98*e7dfa64dSMax Filippov wsr a2, ibreaka0 99*e7dfa64dSMax Filippov movi a2, 1 100*e7dfa64dSMax Filippov wsr a2, ibreakenable 101*e7dfa64dSMax Filippov isync 102*e7dfa64dSMax Filippov1: 103*e7dfa64dSMax Filippov break 0, 0 104*e7dfa64dSMax Filippov test_fail 105*e7dfa64dSMax Filippov2: 106*e7dfa64dSMax Filippov rsr a2, debugcause 107*e7dfa64dSMax Filippov movi a3, 0x2 108*e7dfa64dSMax Filippov assert eq, a2, a3 109*e7dfa64dSMax Filippovtest_end 110*e7dfa64dSMax Filippov 111*e7dfa64dSMax Filippovtest icount 112*e7dfa64dSMax Filippov set_vector debug_vector, 2f 113*e7dfa64dSMax Filippov rsil a2, debug_level - 1 114*e7dfa64dSMax Filippov movi a2, -2 115*e7dfa64dSMax Filippov wsr a2, icount 116*e7dfa64dSMax Filippov movi a2, 1 117*e7dfa64dSMax Filippov wsr a2, icountlevel 118*e7dfa64dSMax Filippov isync 119*e7dfa64dSMax Filippov rsil a2, 0 120*e7dfa64dSMax Filippov nop 121*e7dfa64dSMax Filippov1: 122*e7dfa64dSMax Filippov break 0, 0 123*e7dfa64dSMax Filippov test_fail 124*e7dfa64dSMax Filippov2: 125*e7dfa64dSMax Filippov movi a2, 0 126*e7dfa64dSMax Filippov wsr a2, icountlevel 127*e7dfa64dSMax Filippov rsr a2, epc6 128*e7dfa64dSMax Filippov movi a3, 1b 129*e7dfa64dSMax Filippov assert eq, a2, a3 130*e7dfa64dSMax Filippov rsr a2, debugcause 131*e7dfa64dSMax Filippov movi a3, 0x1 132*e7dfa64dSMax Filippov assert eq, a2, a3 133*e7dfa64dSMax Filippovtest_end 134*e7dfa64dSMax Filippov 135*e7dfa64dSMax Filippov.macro check_dbreak dr 136*e7dfa64dSMax Filippov rsr a2, epc6 137*e7dfa64dSMax Filippov movi a3, 1b 138*e7dfa64dSMax Filippov assert eq, a2, a3 139*e7dfa64dSMax Filippov rsr a2, debugcause 140*e7dfa64dSMax Filippov movi a3, 0x4 | (\dr << 8) 141*e7dfa64dSMax Filippov assert eq, a2, a3 142*e7dfa64dSMax Filippov movi a2, 0 143*e7dfa64dSMax Filippov wsr a2, dbreakc\dr 144*e7dfa64dSMax Filippov.endm 145*e7dfa64dSMax Filippov 146*e7dfa64dSMax Filippov.macro dbreak_test dr, ctl, break, access, op 147*e7dfa64dSMax Filippov set_vector debug_vector, 2f 148*e7dfa64dSMax Filippov rsil a2, debug_level - 1 149*e7dfa64dSMax Filippov movi a2, \ctl 150*e7dfa64dSMax Filippov wsr a2, dbreakc\dr 151*e7dfa64dSMax Filippov movi a2, \break 152*e7dfa64dSMax Filippov wsr a2, dbreaka\dr 153*e7dfa64dSMax Filippov movi a2, \access 154*e7dfa64dSMax Filippov isync 155*e7dfa64dSMax Filippov1: 156*e7dfa64dSMax Filippov \op a3, a2, 0 157*e7dfa64dSMax Filippov test_fail 158*e7dfa64dSMax Filippov2: 159*e7dfa64dSMax Filippov check_dbreak \dr 160*e7dfa64dSMax Filippov reset_ps 161*e7dfa64dSMax Filippov.endm 162*e7dfa64dSMax Filippov 163*e7dfa64dSMax Filippovtest dbreak_exact 164*e7dfa64dSMax Filippov dbreak_test 0, 0x4000003f, 0xd000007f, 0xd000007f, l8ui 165*e7dfa64dSMax Filippov dbreak_test 1, 0x4000003e, 0xd000007e, 0xd000007e, l16ui 166*e7dfa64dSMax Filippov dbreak_test 0, 0x4000003c, 0xd000007c, 0xd000007c, l32i 167*e7dfa64dSMax Filippov 168*e7dfa64dSMax Filippov dbreak_test 1, 0x8000003f, 0xd000007f, 0xd000007f, s8i 169*e7dfa64dSMax Filippov dbreak_test 0, 0x8000003e, 0xd000007e, 0xd000007e, s16i 170*e7dfa64dSMax Filippov dbreak_test 1, 0x8000003c, 0xd000007c, 0xd000007c, s32i 171*e7dfa64dSMax Filippovtest_end 172*e7dfa64dSMax Filippov 173*e7dfa64dSMax Filippovtest dbreak_overlap 174*e7dfa64dSMax Filippov dbreak_test 0, 0x4000003f, 0xd000007d, 0xd000007c, l16ui 175*e7dfa64dSMax Filippov dbreak_test 1, 0x4000003f, 0xd000007d, 0xd000007c, l32i 176*e7dfa64dSMax Filippov 177*e7dfa64dSMax Filippov dbreak_test 0, 0x4000003e, 0xd000007e, 0xd000007f, l8ui 178*e7dfa64dSMax Filippov dbreak_test 1, 0x4000003e, 0xd000007e, 0xd000007c, l32i 179*e7dfa64dSMax Filippov 180*e7dfa64dSMax Filippov dbreak_test 0, 0x4000003c, 0xd000007c, 0xd000007d, l8ui 181*e7dfa64dSMax Filippov dbreak_test 1, 0x4000003c, 0xd000007c, 0xd000007c, l16ui 182*e7dfa64dSMax Filippov 183*e7dfa64dSMax Filippov dbreak_test 0, 0x40000038, 0xd0000078, 0xd000007b, l8ui 184*e7dfa64dSMax Filippov dbreak_test 1, 0x40000038, 0xd0000078, 0xd000007a, l16ui 185*e7dfa64dSMax Filippov dbreak_test 0, 0x40000038, 0xd0000078, 0xd000007c, l32i 186*e7dfa64dSMax Filippov 187*e7dfa64dSMax Filippov dbreak_test 1, 0x40000030, 0xd0000070, 0xd0000075, l8ui 188*e7dfa64dSMax Filippov dbreak_test 0, 0x40000030, 0xd0000070, 0xd0000076, l16ui 189*e7dfa64dSMax Filippov dbreak_test 1, 0x40000030, 0xd0000070, 0xd0000078, l32i 190*e7dfa64dSMax Filippov 191*e7dfa64dSMax Filippov dbreak_test 0, 0x40000020, 0xd0000060, 0xd000006f, l8ui 192*e7dfa64dSMax Filippov dbreak_test 1, 0x40000020, 0xd0000060, 0xd0000070, l16ui 193*e7dfa64dSMax Filippov dbreak_test 0, 0x40000020, 0xd0000060, 0xd0000074, l32i 194*e7dfa64dSMax Filippov 195*e7dfa64dSMax Filippov 196*e7dfa64dSMax Filippov dbreak_test 0, 0x8000003f, 0xd000007d, 0xd000007c, s16i 197*e7dfa64dSMax Filippov dbreak_test 1, 0x8000003f, 0xd000007d, 0xd000007c, s32i 198*e7dfa64dSMax Filippov 199*e7dfa64dSMax Filippov dbreak_test 0, 0x8000003e, 0xd000007e, 0xd000007f, s8i 200*e7dfa64dSMax Filippov dbreak_test 1, 0x8000003e, 0xd000007e, 0xd000007c, s32i 201*e7dfa64dSMax Filippov 202*e7dfa64dSMax Filippov dbreak_test 0, 0x8000003c, 0xd000007c, 0xd000007d, s8i 203*e7dfa64dSMax Filippov dbreak_test 1, 0x8000003c, 0xd000007c, 0xd000007c, s16i 204*e7dfa64dSMax Filippov 205*e7dfa64dSMax Filippov dbreak_test 0, 0x80000038, 0xd0000078, 0xd000007b, s8i 206*e7dfa64dSMax Filippov dbreak_test 1, 0x80000038, 0xd0000078, 0xd000007a, s16i 207*e7dfa64dSMax Filippov dbreak_test 0, 0x80000038, 0xd0000078, 0xd000007c, s32i 208*e7dfa64dSMax Filippov 209*e7dfa64dSMax Filippov dbreak_test 1, 0x80000030, 0xd0000070, 0xd0000075, s8i 210*e7dfa64dSMax Filippov dbreak_test 0, 0x80000030, 0xd0000070, 0xd0000076, s16i 211*e7dfa64dSMax Filippov dbreak_test 1, 0x80000030, 0xd0000070, 0xd0000078, s32i 212*e7dfa64dSMax Filippov 213*e7dfa64dSMax Filippov dbreak_test 0, 0x80000020, 0xd0000060, 0xd000006f, s8i 214*e7dfa64dSMax Filippov dbreak_test 1, 0x80000020, 0xd0000060, 0xd0000070, s16i 215*e7dfa64dSMax Filippov dbreak_test 0, 0x80000020, 0xd0000060, 0xd0000074, s32i 216*e7dfa64dSMax Filippovtest_end 217*e7dfa64dSMax Filippov 218*e7dfa64dSMax Filippovtest dbreak_invalid 219*e7dfa64dSMax Filippov dbreak_test 0, 0x40000030, 0xd0000071, 0xd0000070, l16ui 220*e7dfa64dSMax Filippov dbreak_test 1, 0x40000035, 0xd0000072, 0xd0000070, l32i 221*e7dfa64dSMax Filippovtest_end 222*e7dfa64dSMax Filippov 223*e7dfa64dSMax Filippovtest_suite_end 224