123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- # 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;
|