| # Blackfin testcase for hardware single stepping |
| # mach: bfin |
| # sim: --environment operating |
| |
| #include "test.h" |
| .include "testutils.inc" |
| |
| start |
| |
| # Set up exception handler |
| imm32 P4, EVT3; |
| loadsym R1, _evx; |
| [P4] = R1; |
| |
| # Enable single stepping |
| R0 = 1; |
| SYSCFG = R0; |
| |
| # Lower to the code we want to single step through |
| R1 = 1; |
| imm32 R5, 0xffff |
| R6 = 0; |
| R7 = 0; |
| loadsym R1, _usr; |
| RETI = R1; |
| RTI; |
| |
| _usr: |
| # Single step and set a new bit every time |
| BITSET (R7, 0); |
| BITSET (R7, 1); |
| BITSET (R7, 2); |
| BITSET (R7, 3); |
| BITSET (R7, 4); |
| BITSET (R7, 5); |
| BITSET (R7, 6); |
| BITSET (R7, 7); |
| BITSET (R7, 8); |
| BITSET (R7, 9); |
| BITSET (R7, 10); |
| BITSET (R7, 11); |
| BITSET (R7, 12); |
| BITSET (R7, 13); |
| BITSET (R7, 14); |
| BITSET (R7, 15); |
| JUMP fail_lvl; |
| |
| _evx: |
| # Make sure exception reason is single step |
| R3 = SEQSTAT; |
| R4 = 0x3f; |
| R3 = R3 & R4; |
| R4 = 0x10; |
| CC = R3 == R4; |
| IF !CC JUMP fail_lvl; |
| |
| # Set a new bit in R6 every single step to match R7 |
| CC = R1; |
| R6 = ROT R6 BY 1; |
| CC = R6 == R7; |
| IF !CC JUMP fail_lvl; |
| |
| # Do it through each bit |
| CC = R5 == R6; |
| IF CC JUMP pass_lvl; |
| |
| RTX; |
| |
| pass_lvl: |
| dbg_pass; |
| fail_lvl: |
| dbg_fail; |