1# Blackfin testcase for register load instructions 2# mach: bfin 3 4 5 .include "testutils.inc" 6 7 start 8 9 .macro load32 num:req, reg0:req, reg1:req 10 imm32 \reg0 \num 11 imm32 \reg1 \num 12 CC = \reg0 == \reg1 13 if CC jump 2f; 14 fail 152: 16 .endm 17 18 .macro load32p num:req preg:req 19 imm32 r0 \num 20 imm32 \preg \num 21 r1 = \preg 22 cc = r0 == r1 23 if CC jump 3f; 24 fail 253: 26 imm32 \preg 0 27 .endm 28 29 .macro load16z num:req reg0:req reg1:req 30 \reg0 = \num (Z); 31 imm32 \reg1 \num 32 CC = \reg0 == \reg1 33 if CC jump 4f; 34 fail 354: 36 .endm 37 38 .macro load16zp num:req reg:req 39 \reg = \num (Z); 40 imm32 r1 \num; 41 r0 = \reg; 42 cc = r0 == r1 43 if CC jump 5f; 44 fail 455: 46 .endm 47 48 .macro load16x num:req reg0:req reg1:req 49 \reg0 = \num (X); 50 imm32 \reg1, \num 51 CC = \reg0 == \reg1 52 if CC jump 6f; 53 fail 546: 55 .endm 56 57 /* Clobbers R0 */ 58 .macro loadinc preg0:req, preg1:req, dreg:req 59 loadsym \preg0, _buf 60 \preg1 = \preg0; 61 \dreg = \preg0; 62 [\preg0\()++] = \preg0; 63 \dreg += 4; 64 R0 = \preg0; 65 CC = \dreg == R0; 66 if CC jump 7f; 67 fail 687: 69 R0 = [ \preg1\() ]; 70 \dreg += -4; 71 CC = \dreg == R0; 72 if CC jump 8f; 73 fail 748: 75 .endm 76 77 /* test a bunch of values */ 78 79 /* load_immediate (Half-Word Load) 80 * register = constant 81 * reg_lo = uimm16; 82 * reg_hi = uimm16; 83 */ 84 85 load32 0 R0 R1 86 load32 0xFFFFFFFF R0 R1 87 load32 0x55aaaa55 r0 r1 88 load32 0x12345678 r0 r1 89 load32 0x12345678 R0 R2 90 load32 0x23456789 R0 R3 91 load32 0x3456789a R0 R4 92 load32 0x456789ab R0 R5 93 load32 0x56789abc R0 R6 94 load32 0x6789abcd R0 R7 95 load32 0x789abcde R0 R0 96 load32 0x89abcdef R1 R0 97 load32 0x9abcdef0 R2 R0 98 load32 0xabcdef01 R3 R0 99 load32 0xbcdef012 R4 R0 100 load32 0xcdef0123 R5 R0 101 load32 0xdef01234 R6 R0 102 load32 0xef012345 R7 R0 103 104 load32p 0xf0123456 P0 105 load32p 0x01234567 P1 106 load32p 0x12345678 P2 107.ifndef BFIN_HOST 108 load32p 0x23456789 P3 109.endif 110 load32p 0x3456789a P4 111 load32p 0x456789ab P5 112 load32p 0x56789abc SP 113 load32p 0x6789abcd FP 114 115 load32p 0x789abcde I0 116 load32p 0x89abcdef I1 117 load32p 0x9abcdef0 I2 118 load32p 0xabcdef01 I3 119 load32p 0xbcdef012 M0 120 load32p 0xcdef0123 M1 121 load32p 0xdef01234 M2 122 load32p 0xef012345 M3 123 124 load32p 0xf0123456 B0 125 load32p 0x01234567 B1 126 load32p 0x12345678 B2 127 load32p 0x23456789 B3 128 load32p 0x3456789a L0 129 load32p 0x456789ab L1 130 load32p 0x56789abc L2 131 load32p 0x6789abcd L3 132 133 /* Zero Extended */ 134 load16z 0x1234 R0 R1 135 load16z 0x2345 R0 R1 136 load16z 0x3456 R0 R2 137 load16z 0x4567 R0 R3 138 load16z 0x5678 R0 R4 139 load16z 0x6789 R0 R5 140 load16z 0x789a R0 R6 141 load16z 0x89ab R0 R7 142 load16z 0x9abc R1 R0 143 load16z 0xabcd R2 R0 144 load16z 0xbcde R3 R0 145 load16z 0xcdef R4 R0 146 load16z 0xdef0 R5 R0 147 load16z 0xef01 R6 R0 148 load16z 0xf012 R7 R0 149 150 load16zp 0x0123 P0 151 load16zp 0x1234 P1 152 load16zp 0x1234 p2 153.ifndef BFIN_HOST 154 load16zp 0x2345 p3 155.endif 156 load16zp 0x3456 p4 157 load16zp 0x4567 p5 158 load16zp 0x5678 sp 159 load16zp 0x6789 fp 160 load16zp 0x789a i0 161 load16zp 0x89ab i1 162 load16zp 0x9abc i2 163 load16zp 0xabcd i3 164 load16zp 0xbcde m0 165 load16zp 0xcdef m1 166 load16zp 0xdef0 m2 167 load16zp 0xef01 m3 168 load16zp 0xf012 b0 169 load16zp 0x0123 b1 170 load16zp 0x1234 b2 171 load16zp 0x2345 b3 172 load16zp 0x3456 l0 173 load16zp 0x4567 l1 174 load16zp 0x5678 l2 175 load16zp 0x6789 l3 176 177 /* Sign Extended */ 178 load16x 0x20 R0 R1 179 load16x 0x3F R0 R1 180 load16x -0x20 R0 R1 181 load16x -0x3F R0 R1 182 load16x 0x1234 R0 R1 183 load16x 0x2345 R0 R1 184 load16x 0x3456 R0 R2 185 load16x 0x4567 R0 R3 186 load16x 0x5678 R0 R4 187 load16x 0x6789 R0 R5 188 load16x 0x789a R0 R6 189 load16x 0x09ab R0 R7 190 load16x -0x1abc R1 R0 191 load16x -0x2bcd R2 R0 192 load16x -0x3cde R3 R0 193 load16x -0x4def R4 R0 194 load16x -0x5ef0 R5 R0 195 load16x -0x6f01 R6 R0 196 load16x -0x7012 R7 R0 197 198 loadinc P0, P1, R1 199 loadinc P1, P2, R1 200 loadinc P2, P1, R2 201.ifndef BFIN_HOST 202 loadinc P3, P4, R3 203.endif 204 loadinc P4, P5, R4 205 loadinc FP, P0, R7 206 loadinc P0, I0, R1 207 loadinc P1, I1, R1 208 loadinc P2, I2, R1 209.ifndef BFIN_HOST 210 loadinc P3, I0, R1 211.endif 212 loadinc P4, I2, R1 213 loadinc P5, I3, R1 214 215 A1 = A0 = 0; 216 R0 = 0x01 (Z); 217 A0.x = R0; 218 imm32 r4, 0x32e02d1a 219 A1.x = R4; 220 A0.w = A1.x; 221 R3 = A0.w; 222 R2 = A0.x; 223 imm32 r0, 0x0000001a 224 imm32 r1, 0x00000001 225 CC = R1 == R2; 226 if CC jump 1f; 227 fail 2281: 229 CC = R0 == R3 230 if CC jump 2f; 231 fail 2322: 233 pass 234 235.data 236_buf: 237 .rept 0x80 238 .long 0 239 .endr 240