1a2e67072SMax Filippov#include "macros.inc" 2e7dfa64dSMax Filippov 3e7dfa64dSMax Filippovtest_suite break 4e7dfa64dSMax Filippov 566c58ba7SMax Filippov#if XCHAL_HAVE_DEBUG 666c58ba7SMax Filippov 766c58ba7SMax Filippov#define debug_level XCHAL_DEBUGLEVEL 866c58ba7SMax Filippov#define debug_vector glue(level, XCHAL_DEBUGLEVEL) 966c58ba7SMax Filippov#define EPC_DEBUG glue(epc, XCHAL_DEBUGLEVEL) 1066c58ba7SMax 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 2766c58ba7SMax 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 5166c58ba7SMax 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 5966c58ba7SMax 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 9066c58ba7SMax 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 11766c58ba7SMax 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 132*6b1f1009SMax Filippovtest ibreak_break_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*6b1f1009SMax Filippov 149*6b1f1009SMax Filippovtest ibreak_icount_priority 150*6b1f1009SMax Filippov set_vector debug_vector, 2f 151*6b1f1009SMax Filippov rsil a2, debug_level - 1 152*6b1f1009SMax Filippov movi a2, 1f 153*6b1f1009SMax Filippov wsr a2, ibreaka0 154*6b1f1009SMax Filippov movi a2, 1 155*6b1f1009SMax Filippov wsr a2, ibreakenable 156*6b1f1009SMax Filippov movi a2, -2 157*6b1f1009SMax Filippov wsr a2, icount 158*6b1f1009SMax Filippov movi a2, 1 159*6b1f1009SMax Filippov wsr a2, icountlevel 160*6b1f1009SMax Filippov isync 161*6b1f1009SMax Filippov rsil a2, 0 162*6b1f1009SMax Filippov nop 163*6b1f1009SMax Filippov1: 164*6b1f1009SMax Filippov break 0, 0 165*6b1f1009SMax Filippov test_fail 166*6b1f1009SMax Filippov2: 167*6b1f1009SMax Filippov rsr a2, debugcause 168*6b1f1009SMax Filippov movi a3, 0x1 169*6b1f1009SMax Filippov assert eq, a2, a3 170*6b1f1009SMax Filippovtest_end 17166c58ba7SMax Filippov#endif 172e7dfa64dSMax Filippov 173e7dfa64dSMax Filippovtest icount 174e7dfa64dSMax Filippov set_vector debug_vector, 2f 175e7dfa64dSMax Filippov rsil a2, debug_level - 1 176e7dfa64dSMax Filippov movi a2, -2 177e7dfa64dSMax Filippov wsr a2, icount 178e7dfa64dSMax Filippov movi a2, 1 179e7dfa64dSMax Filippov wsr a2, icountlevel 180e7dfa64dSMax Filippov isync 181e7dfa64dSMax Filippov rsil a2, 0 182e7dfa64dSMax Filippov nop 183e7dfa64dSMax Filippov1: 184e7dfa64dSMax Filippov break 0, 0 185e7dfa64dSMax Filippov test_fail 186e7dfa64dSMax Filippov2: 187e7dfa64dSMax Filippov movi a2, 0 188e7dfa64dSMax Filippov wsr a2, icountlevel 18966c58ba7SMax Filippov rsr a2, EPC_DEBUG 190e7dfa64dSMax Filippov movi a3, 1b 191e7dfa64dSMax Filippov assert eq, a2, a3 192e7dfa64dSMax Filippov rsr a2, debugcause 193e7dfa64dSMax Filippov movi a3, 0x1 194e7dfa64dSMax Filippov assert eq, a2, a3 195e7dfa64dSMax Filippovtest_end 196e7dfa64dSMax Filippov 197e7dfa64dSMax Filippov.macro check_dbreak dr 19866c58ba7SMax Filippov rsr a2, EPC_DEBUG 199e7dfa64dSMax Filippov movi a3, 1b 200e7dfa64dSMax Filippov assert eq, a2, a3 201e7dfa64dSMax Filippov rsr a2, debugcause 202e7dfa64dSMax Filippov movi a3, 0x4 | (\dr << 8) 203e7dfa64dSMax Filippov assert eq, a2, a3 204e7dfa64dSMax Filippov movi a2, 0 205e7dfa64dSMax Filippov wsr a2, dbreakc\dr 206e7dfa64dSMax Filippov.endm 207e7dfa64dSMax Filippov 208e7dfa64dSMax Filippov.macro dbreak_test dr, ctl, break, access, op 209e7dfa64dSMax Filippov set_vector debug_vector, 2f 210e7dfa64dSMax Filippov rsil a2, debug_level - 1 211e7dfa64dSMax Filippov movi a2, \ctl 212e7dfa64dSMax Filippov wsr a2, dbreakc\dr 213e7dfa64dSMax Filippov movi a2, \break 214e7dfa64dSMax Filippov wsr a2, dbreaka\dr 215e7dfa64dSMax Filippov movi a2, \access 216e7dfa64dSMax Filippov isync 217e7dfa64dSMax Filippov1: 218e7dfa64dSMax Filippov \op a3, a2, 0 219e7dfa64dSMax Filippov test_fail 220e7dfa64dSMax Filippov2: 221e7dfa64dSMax Filippov check_dbreak \dr 222e7dfa64dSMax Filippov reset_ps 223e7dfa64dSMax Filippov.endm 224e7dfa64dSMax Filippov 22566c58ba7SMax Filippov#if XCHAL_NUM_DBREAK 22664407f6aSMax Filippov#define DB0 0 22764407f6aSMax Filippov#if XCHAL_NUM_DBREAK > 1 22864407f6aSMax Filippov#define DB1 1 22964407f6aSMax Filippov#else 23064407f6aSMax Filippov#define DB1 0 23164407f6aSMax Filippov#endif 232e7dfa64dSMax Filippovtest dbreak_exact 23364407f6aSMax Filippov dbreak_test DB0, 0x4000003f, 0xd000007f, 0xd000007f, l8ui 23464407f6aSMax Filippov dbreak_test DB1, 0x4000003e, 0xd000007e, 0xd000007e, l16ui 23564407f6aSMax Filippov dbreak_test DB0, 0x4000003c, 0xd000007c, 0xd000007c, l32i 236e7dfa64dSMax Filippov 23764407f6aSMax Filippov dbreak_test DB1, 0x8000003f, 0xd000007f, 0xd000007f, s8i 23864407f6aSMax Filippov dbreak_test DB0, 0x8000003e, 0xd000007e, 0xd000007e, s16i 23964407f6aSMax Filippov dbreak_test DB1, 0x8000003c, 0xd000007c, 0xd000007c, s32i 240e7dfa64dSMax Filippovtest_end 241e7dfa64dSMax Filippov 24264407f6aSMax Filippovtest DBdbreak_overlap 24364407f6aSMax Filippov dbreak_test DB0, 0x4000003f, 0xd000007d, 0xd000007c, l16ui 24464407f6aSMax Filippov dbreak_test DB1, 0x4000003f, 0xd000007d, 0xd000007c, l32i 245e7dfa64dSMax Filippov 24664407f6aSMax Filippov dbreak_test DB0, 0x4000003e, 0xd000007e, 0xd000007f, l8ui 24764407f6aSMax Filippov dbreak_test DB1, 0x4000003e, 0xd000007e, 0xd000007c, l32i 248e7dfa64dSMax Filippov 24964407f6aSMax Filippov dbreak_test DB0, 0x4000003c, 0xd000007c, 0xd000007d, l8ui 25064407f6aSMax Filippov dbreak_test DB1, 0x4000003c, 0xd000007c, 0xd000007c, l16ui 251e7dfa64dSMax Filippov 25264407f6aSMax Filippov dbreak_test DB0, 0x40000038, 0xd0000078, 0xd000007b, l8ui 25364407f6aSMax Filippov dbreak_test DB1, 0x40000038, 0xd0000078, 0xd000007a, l16ui 25464407f6aSMax Filippov dbreak_test DB0, 0x40000038, 0xd0000078, 0xd000007c, l32i 255e7dfa64dSMax Filippov 25664407f6aSMax Filippov dbreak_test DB1, 0x40000030, 0xd0000070, 0xd0000075, l8ui 25764407f6aSMax Filippov dbreak_test DB0, 0x40000030, 0xd0000070, 0xd0000076, l16ui 25864407f6aSMax Filippov dbreak_test DB1, 0x40000030, 0xd0000070, 0xd0000078, l32i 259e7dfa64dSMax Filippov 26064407f6aSMax Filippov dbreak_test DB0, 0x40000020, 0xd0000060, 0xd000006f, l8ui 26164407f6aSMax Filippov dbreak_test DB1, 0x40000020, 0xd0000060, 0xd0000070, l16ui 26264407f6aSMax Filippov dbreak_test DB0, 0x40000020, 0xd0000060, 0xd0000074, l32i 263e7dfa64dSMax Filippov 264e7dfa64dSMax Filippov 26564407f6aSMax Filippov dbreak_test DB0, 0x8000003f, 0xd000007d, 0xd000007c, s16i 26664407f6aSMax Filippov dbreak_test DB1, 0x8000003f, 0xd000007d, 0xd000007c, s32i 267e7dfa64dSMax Filippov 26864407f6aSMax Filippov dbreak_test DB0, 0x8000003e, 0xd000007e, 0xd000007f, s8i 26964407f6aSMax Filippov dbreak_test DB1, 0x8000003e, 0xd000007e, 0xd000007c, s32i 270e7dfa64dSMax Filippov 27164407f6aSMax Filippov dbreak_test DB0, 0x8000003c, 0xd000007c, 0xd000007d, s8i 27264407f6aSMax Filippov dbreak_test DB1, 0x8000003c, 0xd000007c, 0xd000007c, s16i 273e7dfa64dSMax Filippov 27464407f6aSMax Filippov dbreak_test DB0, 0x80000038, 0xd0000078, 0xd000007b, s8i 27564407f6aSMax Filippov dbreak_test DB1, 0x80000038, 0xd0000078, 0xd000007a, s16i 27664407f6aSMax Filippov dbreak_test DB0, 0x80000038, 0xd0000078, 0xd000007c, s32i 277e7dfa64dSMax Filippov 27864407f6aSMax Filippov dbreak_test DB1, 0x80000030, 0xd0000070, 0xd0000075, s8i 27964407f6aSMax Filippov dbreak_test DB0, 0x80000030, 0xd0000070, 0xd0000076, s16i 28064407f6aSMax Filippov dbreak_test DB1, 0x80000030, 0xd0000070, 0xd0000078, s32i 281e7dfa64dSMax Filippov 28264407f6aSMax Filippov dbreak_test DB0, 0x80000020, 0xd0000060, 0xd000006f, s8i 28364407f6aSMax Filippov dbreak_test DB1, 0x80000020, 0xd0000060, 0xd0000070, s16i 28464407f6aSMax Filippov dbreak_test DB0, 0x80000020, 0xd0000060, 0xd0000074, s32i 285e7dfa64dSMax Filippovtest_end 286e7dfa64dSMax Filippov 28764407f6aSMax Filippovtest DBdbreak_invalid 28864407f6aSMax Filippov dbreak_test DB0, 0x40000030, 0xd0000071, 0xd0000070, l16ui 28964407f6aSMax Filippov dbreak_test DB1, 0x40000035, 0xd0000072, 0xd0000070, l32i 290e7dfa64dSMax Filippovtest_end 29166c58ba7SMax Filippov#endif 29266c58ba7SMax Filippov 29366c58ba7SMax Filippov#endif 294e7dfa64dSMax Filippov 295e7dfa64dSMax Filippovtest_suite_end 296