1 1.1 christos # Blackfin testcase for HW Loops and user->super transitions 2 1.1 christos # mach: bfin 3 1.1 christos # sim: --environment operating 4 1.1 christos 5 1.1 christos #include "test.h" 6 1.1 christos .include "testutils.inc" 7 1.1 christos 8 1.1 christos .macro check_hwloop_regs lc:req, lt:req, lb:req 9 1.1 christos R0 = LC0; 10 1.1 christos CC = R0 == \lc; 11 1.1 christos IF !CC JUMP fail; 12 1.1 christos 13 1.1 christos R0 = LT0; 14 1.1 christos CC = R0 == \lt; 15 1.1 christos IF !CC JUMP fail; 16 1.1 christos 17 1.1 christos R0 = LB0; 18 1.1 christos CC = R0 == \lb; 19 1.1 christos IF !CC JUMP fail; 20 1.1 christos 21 1.1 christos R0 = LC1; 22 1.1 christos CC = R0 == \lc; 23 1.1 christos IF !CC JUMP fail; 24 1.1 christos 25 1.1 christos R0 = LT1; 26 1.1 christos CC = R0 == \lt; 27 1.1 christos IF !CC JUMP fail; 28 1.1 christos 29 1.1 christos R0 = LB1; 30 1.1 christos CC = R0 == \lb; 31 1.1 christos IF !CC JUMP fail; 32 1.1 christos .endm 33 1.1 christos 34 1.1 christos start 35 1.1 christos 36 1.1 christos imm32 P0, EVT3; 37 1.1 christos loadsym R0, exception; 38 1.1 christos [P0] = R0; 39 1.1 christos 40 1.1 christos imm32 P0, EVT2; 41 1.1 christos loadsym R0, nmi; 42 1.1 christos [P0] = R0; 43 1.1 christos 44 1.1 christos loadsym R0, usermode; 45 1.1 christos RETI = R0; 46 1.1 christos 47 1.1 christos # Set the LC/LB/LT up with LSB set 48 1.1 christos # - Hardware clears LT LSB, but LB remains until we lower 49 1.1 christos imm32 R6, 0xaaaa5555 50 1.1 christos R4 = R6; 51 1.1 christos BITCLR (R4, 0); 52 1.1 christos imm32 R7, 0xaa55aa55 53 1.1 christos R5 = R7; 54 1.1 christos BITCLR (R5, 0); 55 1.1 christos 56 1.1 christos LC0 = R6; 57 1.1 christos LT0 = R6; 58 1.1 christos LB0 = R7; 59 1.1 christos LC1 = R6; 60 1.1 christos LT1 = R6; 61 1.1 christos LB1 = R7; 62 1.1 christos 63 1.1 christos # Sanity check 64 1.1 christos check_hwloop_regs R6, R4, R7 65 1.1 christos 66 1.1 christos RTI; 67 1.1 christos 68 1.1 christos usermode: 69 1.1 christos # Make sure LSB has been cleared in LB 70 1.1 christos check_hwloop_regs R6, R4, R5 71 1.1 christos 72 1.1 christos # Clear LSB in all LC/LT/LB 73 1.1 christos LC0 = R4; 74 1.1 christos LT0 = R4; 75 1.1 christos LB0 = R5; 76 1.1 christos LC1 = R4; 77 1.1 christos LT1 = R4; 78 1.1 christos LB1 = R5; 79 1.1 christos 80 1.1 christos # Now move back up to supervisor 81 1.1 christos EXCPT 4; 82 1.1 christos 83 1.1 christos exception: 84 1.1 christos # Make sure LSB is set in LB 85 1.1 christos check_hwloop_regs R4, R4, R7 86 1.1 christos 87 1.1 christos # Clear the LSB and move up another supervisor level 88 1.1 christos LC0 = R4; 89 1.1 christos LT0 = R4; 90 1.1 christos LB0 = R5; 91 1.1 christos LC1 = R4; 92 1.1 christos LT1 = R4; 93 1.1 christos LB1 = R5; 94 1.1 christos 95 1.1 christos RAISE 2; 96 1.1 christos 97 1.1 christos nmi: 98 1.1 christos # Make sure LSB stayed clear 99 1.1 christos check_hwloop_regs R4, R4, R5 100 1.1 christos 101 1.1 christos dbg_pass 102 1.1 christos 103 1.1 christos fail: 104 1.1 christos dbg_fail 105