| # Blackfin testcase for register load instructions |
| # mach: bfin |
| |
| |
| .include "testutils.inc" |
| |
| start |
| |
| .macro load32 num:req, reg0:req, reg1:req |
| imm32 \reg0 \num |
| imm32 \reg1 \num |
| CC = \reg0 == \reg1 |
| if CC jump 2f; |
| fail |
| 2: |
| .endm |
| |
| .macro load32p num:req preg:req |
| imm32 r0 \num |
| imm32 \preg \num |
| r1 = \preg |
| cc = r0 == r1 |
| if CC jump 3f; |
| fail |
| 3: |
| imm32 \preg 0 |
| .endm |
| |
| .macro load16z num:req reg0:req reg1:req |
| \reg0 = \num (Z); |
| imm32 \reg1 \num |
| CC = \reg0 == \reg1 |
| if CC jump 4f; |
| fail |
| 4: |
| .endm |
| |
| .macro load16zp num:req reg:req |
| \reg = \num (Z); |
| imm32 r1 \num; |
| r0 = \reg; |
| cc = r0 == r1 |
| if CC jump 5f; |
| fail |
| 5: |
| .endm |
| |
| .macro load16x num:req reg0:req reg1:req |
| \reg0 = \num (X); |
| imm32 \reg1, \num |
| CC = \reg0 == \reg1 |
| if CC jump 6f; |
| fail |
| 6: |
| .endm |
| |
| /* Clobbers R0 */ |
| .macro loadinc preg0:req, preg1:req, dreg:req |
| loadsym \preg0, _buf |
| \preg1 = \preg0; |
| \dreg = \preg0; |
| [\preg0\()++] = \preg0; |
| \dreg += 4; |
| R0 = \preg0; |
| CC = \dreg == R0; |
| if CC jump 7f; |
| fail |
| 7: |
| R0 = [ \preg1\() ]; |
| \dreg += -4; |
| CC = \dreg == R0; |
| if CC jump 8f; |
| fail |
| 8: |
| .endm |
| |
| /* test a bunch of values */ |
| |
| /* load_immediate (Half-Word Load) |
| * register = constant |
| * reg_lo = uimm16; |
| * reg_hi = uimm16; |
| */ |
| |
| load32 0 R0 R1 |
| load32 0xFFFFFFFF R0 R1 |
| load32 0x55aaaa55 r0 r1 |
| load32 0x12345678 r0 r1 |
| load32 0x12345678 R0 R2 |
| load32 0x23456789 R0 R3 |
| load32 0x3456789a R0 R4 |
| load32 0x456789ab R0 R5 |
| load32 0x56789abc R0 R6 |
| load32 0x6789abcd R0 R7 |
| load32 0x789abcde R0 R0 |
| load32 0x89abcdef R1 R0 |
| load32 0x9abcdef0 R2 R0 |
| load32 0xabcdef01 R3 R0 |
| load32 0xbcdef012 R4 R0 |
| load32 0xcdef0123 R5 R0 |
| load32 0xdef01234 R6 R0 |
| load32 0xef012345 R7 R0 |
| |
| load32p 0xf0123456 P0 |
| load32p 0x01234567 P1 |
| load32p 0x12345678 P2 |
| .ifndef BFIN_HOST |
| load32p 0x23456789 P3 |
| .endif |
| load32p 0x3456789a P4 |
| load32p 0x456789ab P5 |
| load32p 0x56789abc SP |
| load32p 0x6789abcd FP |
| |
| load32p 0x789abcde I0 |
| load32p 0x89abcdef I1 |
| load32p 0x9abcdef0 I2 |
| load32p 0xabcdef01 I3 |
| load32p 0xbcdef012 M0 |
| load32p 0xcdef0123 M1 |
| load32p 0xdef01234 M2 |
| load32p 0xef012345 M3 |
| |
| load32p 0xf0123456 B0 |
| load32p 0x01234567 B1 |
| load32p 0x12345678 B2 |
| load32p 0x23456789 B3 |
| load32p 0x3456789a L0 |
| load32p 0x456789ab L1 |
| load32p 0x56789abc L2 |
| load32p 0x6789abcd L3 |
| |
| /* Zero Extended */ |
| load16z 0x1234 R0 R1 |
| load16z 0x2345 R0 R1 |
| load16z 0x3456 R0 R2 |
| load16z 0x4567 R0 R3 |
| load16z 0x5678 R0 R4 |
| load16z 0x6789 R0 R5 |
| load16z 0x789a R0 R6 |
| load16z 0x89ab R0 R7 |
| load16z 0x9abc R1 R0 |
| load16z 0xabcd R2 R0 |
| load16z 0xbcde R3 R0 |
| load16z 0xcdef R4 R0 |
| load16z 0xdef0 R5 R0 |
| load16z 0xef01 R6 R0 |
| load16z 0xf012 R7 R0 |
| |
| load16zp 0x0123 P0 |
| load16zp 0x1234 P1 |
| load16zp 0x1234 p2 |
| .ifndef BFIN_HOST |
| load16zp 0x2345 p3 |
| .endif |
| load16zp 0x3456 p4 |
| load16zp 0x4567 p5 |
| load16zp 0x5678 sp |
| load16zp 0x6789 fp |
| load16zp 0x789a i0 |
| load16zp 0x89ab i1 |
| load16zp 0x9abc i2 |
| load16zp 0xabcd i3 |
| load16zp 0xbcde m0 |
| load16zp 0xcdef m1 |
| load16zp 0xdef0 m2 |
| load16zp 0xef01 m3 |
| load16zp 0xf012 b0 |
| load16zp 0x0123 b1 |
| load16zp 0x1234 b2 |
| load16zp 0x2345 b3 |
| load16zp 0x3456 l0 |
| load16zp 0x4567 l1 |
| load16zp 0x5678 l2 |
| load16zp 0x6789 l3 |
| |
| /* Sign Extended */ |
| load16x 0x20 R0 R1 |
| load16x 0x3F R0 R1 |
| load16x -0x20 R0 R1 |
| load16x -0x3F R0 R1 |
| load16x 0x1234 R0 R1 |
| load16x 0x2345 R0 R1 |
| load16x 0x3456 R0 R2 |
| load16x 0x4567 R0 R3 |
| load16x 0x5678 R0 R4 |
| load16x 0x6789 R0 R5 |
| load16x 0x789a R0 R6 |
| load16x 0x09ab R0 R7 |
| load16x -0x1abc R1 R0 |
| load16x -0x2bcd R2 R0 |
| load16x -0x3cde R3 R0 |
| load16x -0x4def R4 R0 |
| load16x -0x5ef0 R5 R0 |
| load16x -0x6f01 R6 R0 |
| load16x -0x7012 R7 R0 |
| |
| loadinc P0, P1, R1 |
| loadinc P1, P2, R1 |
| loadinc P2, P1, R2 |
| .ifndef BFIN_HOST |
| loadinc P3, P4, R3 |
| .endif |
| loadinc P4, P5, R4 |
| loadinc FP, P0, R7 |
| loadinc P0, I0, R1 |
| loadinc P1, I1, R1 |
| loadinc P2, I2, R1 |
| .ifndef BFIN_HOST |
| loadinc P3, I0, R1 |
| .endif |
| loadinc P4, I2, R1 |
| loadinc P5, I3, R1 |
| |
| A1 = A0 = 0; |
| R0 = 0x01 (Z); |
| A0.x = R0; |
| imm32 r4, 0x32e02d1a |
| A1.x = R4; |
| A0.w = A1.x; |
| R3 = A0.w; |
| R2 = A0.x; |
| imm32 r0, 0x0000001a |
| imm32 r1, 0x00000001 |
| CC = R1 == R2; |
| if CC jump 1f; |
| fail |
| 1: |
| CC = R0 == R3 |
| if CC jump 2f; |
| fail |
| 2: |
| pass |
| |
| .data |
| _buf: |
| .rept 0x80 |
| .long 0 |
| .endr |