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