1 1.1 christos # Blackfin testcase for insns that implicitly have DISALGNEXCPT behavior 2 1.1 christos # when used in parallel insns 3 1.1 christos # mach: bfin 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 start 9 1.1 christos 10 1.1 christos LINK 0x100; 11 1.1 christos 12 1.1 christos # Set up I0/I1/I2/I3 to be unaligned by 0/1/2/3 bytes 13 1.1 christos init_l_regs 0 14 1.1 christos init_m_regs 0 15 1.1 christos R0 = SP; 16 1.1 christos BITCLR (R0, 0); 17 1.1 christos BITCLR (R0, 1); 18 1.1 christos I0 = R0; 19 1.1 christos B0 = R0; 20 1.1 christos R1 = 1; 21 1.1 christos R1 = R0 + R1; 22 1.1 christos I1 = R1; 23 1.1 christos B1 = R1; 24 1.1 christos R2 = 2; 25 1.1 christos R2 = R0 + R2; 26 1.1 christos I2 = R2; 27 1.1 christos B2 = R2; 28 1.1 christos R3 = 3; 29 1.1 christos R3 = R0 + R3; 30 1.1 christos I3 = R3; 31 1.1 christos B3 = R3; 32 1.1 christos 33 1.1 christos #define EXP_VAL 0x12345678 34 1.1 christos #define EXP(r, n) CHECKREG (r, EXP_VAL); r = 0; I##n = B##n 35 1.1 christos imm32 R5, EXP_VAL; 36 1.1 christos imm32 R6, 0x9abcdef0; 37 1.1 christos imm32 R7, 0x0a1b2c3e; 38 1.1 christos [SP] = R5; 39 1.1 christos [SP - 4] = R6; 40 1.1 christos [SP + 4] = R7; 41 1.1 christos 42 1.1 christos #define BYTEPACK(n) \ 43 1.1 christos R7 = BYTEPACK (R0, R1) || R4 = [I##n]; EXP (R4, n); \ 44 1.1 christos R6 = BYTEPACK (R0, R1) || R5 = [I##n ++ M##n]; EXP (R5, n); \ 45 1.1 christos R5 = BYTEPACK (R0, R1) || R6 = [I##n++]; EXP (R6, n); \ 46 1.1 christos R4 = BYTEPACK (R0, R1) || R7 = [I##n--]; EXP (R7, n); 47 1.1 christos BYTEPACK(0) 48 1.1 christos BYTEPACK(1) 49 1.1 christos BYTEPACK(2) 50 1.1 christos BYTEPACK(3) 51 1.1 christos 52 1.1 christos #define BYTEUNPACK(n) \ 53 1.1 christos (R7, R5) = BYTEUNPACK R1:0 || R4 = [I##n]; EXP (R4, n); \ 54 1.1 christos (R6, R7) = BYTEUNPACK R3:2 || R5 = [I##n ++ M##n]; EXP (R5, n); \ 55 1.1 christos (R5, R4) = BYTEUNPACK R1:0 || R6 = [I##n++]; EXP (R6, n); \ 56 1.1 christos (R4, R6) = BYTEUNPACK R3:2 || R7 = [I##n--]; EXP (R7, n); 57 1.1 christos BYTEUNPACK(0) 58 1.1 christos BYTEUNPACK(1) 59 1.1 christos BYTEUNPACK(2) 60 1.1 christos BYTEUNPACK(3) 61 1.1 christos 62 1.1 christos #define SAA(n) \ 63 1.1 christos SAA (R1:0, R3:2) || R4 = [I##n]; EXP (R4, n); \ 64 1.1 christos SAA (R1:0, R3:2) || R5 = [I##n ++ M##n]; EXP (R5, n); \ 65 1.1 christos SAA (R1:0, R3:2) || R6 = [I##n++]; EXP (R6, n); \ 66 1.1 christos SAA (R1:0, R3:2) || R7 = [I##n--]; EXP (R7, n); 67 1.1 christos SAA(0) 68 1.1 christos SAA(1) 69 1.1 christos SAA(2) 70 1.1 christos SAA(3) 71 1.1 christos 72 1.1 christos #define BYTEOP1P(n) \ 73 1.1 christos R7 = BYTEOP1P (R1:0, R3:2) || R4 = [I##n]; EXP (R4, n); \ 74 1.1 christos R6 = BYTEOP1P (R1:0, R3:2) || R5 = [I##n ++ M##n]; EXP (R5, n); \ 75 1.1 christos R5 = BYTEOP1P (R1:0, R3:2) || R6 = [I##n++]; EXP (R6, n); \ 76 1.1 christos R4 = BYTEOP1P (R1:0, R3:2) || R7 = [I##n--]; EXP (R7, n); 77 1.1 christos BYTEOP1P(0) 78 1.1 christos BYTEOP1P(1) 79 1.1 christos BYTEOP1P(2) 80 1.1 christos BYTEOP1P(3) 81 1.1 christos 82 1.1 christos #define BYTEOP2P(n) \ 83 1.1 christos R7 = BYTEOP2P (R1:0, R3:2) (TL) || R4 = [I##n]; EXP (R4, n); \ 84 1.1 christos R6 = BYTEOP2P (R1:0, R3:2) (TH) || R5 = [I##n ++ M##n]; EXP (R5, n); \ 85 1.1 christos R5 = BYTEOP2P (R1:0, R3:2) (RNDL) || R6 = [I##n++]; EXP (R6, n); \ 86 1.1 christos R4 = BYTEOP2P (R1:0, R3:2) (RNDH) || R7 = [I##n--]; EXP (R7, n); 87 1.1 christos BYTEOP2P(0) 88 1.1 christos BYTEOP2P(1) 89 1.1 christos BYTEOP2P(2) 90 1.1 christos BYTEOP2P(3) 91 1.1 christos 92 1.1 christos #define BYTEOP3P(n) \ 93 1.1 christos R7 = BYTEOP3P (R1:0, R3:2) (LO) || R4 = [I##n]; EXP (R4, n); \ 94 1.1 christos R6 = BYTEOP3P (R1:0, R3:2) (HI) || R5 = [I##n ++ M##n]; EXP (R5, n); \ 95 1.1 christos R5 = BYTEOP3P (R1:0, R3:2) (LO) || R6 = [I##n++]; EXP (R6, n); \ 96 1.1 christos R4 = BYTEOP3P (R1:0, R3:2) (HI) || R7 = [I##n--]; EXP (R7, n); 97 1.1 christos BYTEOP3P(0) 98 1.1 christos BYTEOP3P(1) 99 1.1 christos BYTEOP3P(2) 100 1.1 christos BYTEOP3P(3) 101 1.1 christos 102 1.1 christos #define BYTEOP16P(n) \ 103 1.1 christos (R7, R6) = BYTEOP16P (R1:0, R3:2) || R4 = [I##n]; EXP (R4, n); \ 104 1.1 christos (R6, R4) = BYTEOP16P (R1:0, R3:2) || R5 = [I##n ++ M##n]; EXP (R5, n); \ 105 1.1 christos (R5, R7) = BYTEOP16P (R1:0, R3:2) || R6 = [I##n++]; EXP (R6, n); \ 106 1.1 christos (R4, R6) = BYTEOP16P (R1:0, R3:2) || R7 = [I##n--]; EXP (R7, n); 107 1.1 christos BYTEOP16P(0) 108 1.1 christos BYTEOP16P(1) 109 1.1 christos BYTEOP16P(2) 110 1.1 christos BYTEOP16P(3) 111 1.1 christos 112 1.1 christos #define BYTEOP16M(n) \ 113 1.1 christos (R7, R5) = BYTEOP16M (R1:0, R3:2) || R4 = [I##n]; EXP (R4, n); \ 114 1.1 christos (R6, R7) = BYTEOP16M (R1:0, R3:2) || R5 = [I##n ++ M##n]; EXP (R5, n); \ 115 1.1 christos (R5, R4) = BYTEOP16M (R1:0, R3:2) || R6 = [I##n++]; EXP (R6, n); \ 116 1.1 christos (R4, R5) = BYTEOP16M (R1:0, R3:2) || R7 = [I##n--]; EXP (R7, n); 117 1.1 christos BYTEOP16M(0) 118 1.1 christos BYTEOP16M(1) 119 1.1 christos BYTEOP16M(2) 120 1.1 christos BYTEOP16M(3) 121 1.1 christos 122 1.1 christos pass 123