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