1# Blackfin testcase for push/pop instructions 2# mach: bfin 3 4 .include "testutils.inc" 5 6 start 7 8 # This uses R0/R1 as scratch ... assume those work fine in general 9 .macro check loader:req, reg:req 10 \loader \reg, 0x12345678 11 [--SP] = \reg; 12 R0 = [SP]; 13 R1 = \reg; 14 CC = R0 == R1; 15 IF !CC JUMP 8f; 16 \loader \reg, 0x87654321 17 \reg = [SP++]; 18 CC = R0 == R1; 19 IF !CC JUMP 8f; 20 # need to do a long jump to avoid PCREL issues 21 jump 9f; 22 8: jump 1f; 23 9: 24 .endm 25 .macro imm_check reg:req 26 check imm32, \reg 27 .endm 28 .macro dmm_check reg:req 29 check dmm32, \reg 30 .endm 31 32 imm_check R2 33 imm_check R3 34 imm_check R4 35 imm_check R5 36 imm_check R6 37 imm_check R7 38 imm_check P0 39 imm_check P1 40 imm_check P2 41 imm_check P3 42 imm_check P4 43 imm_check P5 44 imm_check FP 45 imm_check I0 46 imm_check I1 47 imm_check I2 48 imm_check I3 49 imm_check M0 50 imm_check M1 51 imm_check M2 52 imm_check M3 53 imm_check B0 54 imm_check B1 55 imm_check B2 56 imm_check B3 57 imm_check L0 58 imm_check L1 59 imm_check L2 60 imm_check L3 61 dmm_check A0.X 62 dmm_check A0.W 63 dmm_check A1.X 64 dmm_check A1.W 65 dmm_check LC0 66 dmm_check LC1 67 # Make sure the top/bottom regs have bit 1 set 68 dmm_check LT0 69 dmm_check LT1 70 dmm_check LB0 71 dmm_check LB1 72 dmm_check RETS 73 74 # These require supervisor resources 75.ifndef BFIN_HOST 76 dmm_check RETI 77 dmm_check RETX 78 dmm_check RETN 79 # RETE likes to change on the fly with an ICE 80 # dmm_check RETE 81 # CYCLES can be user mode, but screws kernel 82 dmm_check CYCLES 83 dmm_check CYCLES2 84 dmm_check USP 85 86 # No one pushes/pops these 87# dmm_check EMUDAT 88 dmm_check SEQSTAT 89 dmm_check SYSCFG 90.endif 91 dmm_check ASTAT 92 93 pass 941: 95 fail 96