Fix the handling of edge cases in ARM shifted operands.
[oota-llvm.git] / test / MC / ARM / arm-shift-encoding.s
1 @ RUN: llvm-mc -mcpu=cortex-a8 -triple armv7 -show-encoding < %s | FileCheck %s
2
3         ldr r0, [r0, r0]
4         ldr r0, [r0, r0, lsr #32]
5         ldr r0, [r0, r0, lsr #16]
6         ldr r0, [r0, r0, lsl #0]
7         ldr r0, [r0, r0, lsl #16]
8         ldr r0, [r0, r0, asr #32]
9         ldr r0, [r0, r0, asr #16]
10         ldr r0, [r0, r0, rrx]
11         ldr r0, [r0, r0, ror #16]
12
13 @ CHECK: ldr r0, [r0, r0]          @ encoding: [0x00,0x00,0x90,0xe7]
14 @ CHECK: ldr r0, [r0, r0, lsr #32] @ encoding: [0x20,0x00,0x90,0xe7]
15 @ CHECK: ldr r0, [r0, r0, lsr #16] @ encoding: [0x20,0x08,0x90,0xe7]
16 @ CHECK: ldr r0, [r0, r0]          @ encoding: [0x00,0x00,0x90,0xe7]
17 @ CHECK: ldr r0, [r0, r0, lsl #16] @ encoding: [0x00,0x08,0x90,0xe7]
18 @ CHECK: ldr r0, [r0, r0, asr #32] @ encoding: [0x40,0x00,0x90,0xe7]
19 @ CHECK: ldr r0, [r0, r0, asr #16] @ encoding: [0x40,0x08,0x90,0xe7]
20 @ CHECK: ldr r0, [r0, r0, rrx]     @ encoding: [0x60,0x00,0x90,0xe7]
21 @ CHECK: ldr r0, [r0, r0, ror #16] @ encoding: [0x60,0x08,0x90,0xe7]
22
23         pld [r0, r0]
24         pld [r0, r0, lsr #32]
25         pld [r0, r0, lsr #16]
26         pld [r0, r0, lsl #0]
27         pld [r0, r0, lsl #16]
28         pld [r0, r0, asr #32]
29         pld [r0, r0, asr #16]
30         pld [r0, r0, rrx]
31         pld [r0, r0, ror #16]
32
33 @ CHECK: [r0, r0]          @ encoding: [0x00,0xf0,0xd0,0xf7]
34 @ CHECK: [r0, r0, lsr #32] @ encoding: [0x20,0xf0,0xd0,0xf7]
35 @ CHECK: [r0, r0, lsr #16] @ encoding: [0x20,0xf8,0xd0,0xf7]
36 @ CHECK: [r0, r0]          @ encoding: [0x00,0xf0,0xd0,0xf7]
37 @ CHECK: [r0, r0, lsl #16] @ encoding: [0x00,0xf8,0xd0,0xf7]
38 @ CHECK: [r0, r0, asr #32] @ encoding: [0x40,0xf0,0xd0,0xf7]
39 @ CHECK: [r0, r0, asr #16] @ encoding: [0x40,0xf8,0xd0,0xf7]
40 @ CHECK: [r0, r0, rrx]     @ encoding: [0x60,0xf0,0xd0,0xf7]
41 @ CHECK: [r0, r0, ror #16] @ encoding: [0x60,0xf8,0xd0,0xf7]
42
43         str r0, [r0, r0]
44         str r0, [r0, r0, lsr #32]
45         str r0, [r0, r0, lsr #16]
46         str r0, [r0, r0, lsl #0]
47         str r0, [r0, r0, lsl #16]
48         str r0, [r0, r0, asr #32]
49         str r0, [r0, r0, asr #16]
50         str r0, [r0, r0, rrx]
51         str r0, [r0, r0, ror #16]
52
53 @ CHECK: str r0, [r0, r0]          @ encoding: [0x00,0x00,0x80,0xe7]
54 @ CHECK: str r0, [r0, r0, lsr #32] @ encoding: [0x20,0x00,0x80,0xe7]
55 @ CHECK: str r0, [r0, r0, lsr #16] @ encoding: [0x20,0x08,0x80,0xe7]
56 @ CHECK: str r0, [r0, r0]          @ encoding: [0x00,0x00,0x80,0xe7]
57 @ CHECK: str r0, [r0, r0, lsl #16] @ encoding: [0x00,0x08,0x80,0xe7]
58 @ CHECK: str r0, [r0, r0, asr #32] @ encoding: [0x40,0x00,0x80,0xe7]
59 @ CHECK: str r0, [r0, r0, asr #16] @ encoding: [0x40,0x08,0x80,0xe7]
60 @ CHECK: str r0, [r0, r0, rrx]     @ encoding: [0x60,0x00,0x80,0xe7]
61 @ CHECK: str r0, [r0, r0, ror #16] @ encoding: [0x60,0x08,0x80,0xe7]
62
63 @ Uses printAddrMode2OffsetOperand(), used by LDRBT_POST_IMM LDRBT_POST_REG
64 @ LDRB_POST_IMM LDRB_POST_REG LDRT_POST_IMM LDRT_POST_REG LDR_POST_IMM
65 @ LDR_POST_REG STRBT_POST_IMM STRBT_POST_REG STRB_POST_IMM STRB_POST_REG
66 @ STRT_POST_IMM STRT_POST_REG STR_POST_IMM STR_POST_REG
67
68         ldr r0, [r1], r2, rrx
69         ldr r3, [r4], r5, ror #0
70         str r6, [r7], r8, lsl #0
71         str r9, [r10], r11
72
73 @ CHECK: ldr r0, [r1], r2, rrx    @ encoding: [0x62,0x00,0x91,0xe6]
74 @ CHECK: ldr r3, [r4], r5         @ encoding: [0x05,0x30,0x94,0xe6]
75 @ CHECK: str r6, [r7], r8         @ encoding: [0x08,0x60,0x87,0xe6]
76 @ CHECK: str r9, [r10], r11       @ encoding: [0x0b,0x90,0x8a,0xe6]