arm-memory-instructions.s revision 263bb07135bc34982fca7efc7c4ed56abee21281
1@ RUN: llvm-mc -triple=armv7-apple-darwin -show-encoding < %s | FileCheck %s 2 .syntax unified 3 .globl _func 4 5@ Check that the assembler can handle the documented syntax from the ARM ARM 6@ for loads and stores. 7 8_func: 9@ CHECK: _func 10 11@------------------------------------------------------------------------------ 12@ LDR (immediate) 13@------------------------------------------------------------------------------ 14 ldr r5, [r7] 15 ldr r6, [r3, #63] 16 ldr r2, [r4, #4095]! 17 ldr r1, [r2], #30 18 ldr r3, [r1], #-30 19 20@ CHECK: ldr r5, [r7] @ encoding: [0x00,0x50,0x97,0xe5] 21@ CHECK: ldr r6, [r3, #63] @ encoding: [0x3f,0x60,0x93,0xe5] 22@ CHECK: ldr r2, [r4, #4095]! @ encoding: [0xff,0x2f,0xb4,0xe5] 23@ CHECK: ldr r1, [r2], #30 @ encoding: [0x1e,0x10,0x92,0xe4] 24@ CHECK: ldr r3, [r1], #-30 @ encoding: [0x1e,0x30,0x11,0xe4] 25 26@------------------------------------------------------------------------------ 27@ FIXME: LDR (literal) 28@------------------------------------------------------------------------------ 29@ label operands currently assert the show-encoding asm comment helper due 30@ to the use of non-contiguous bit ranges for fixups in ARM. Once that's 31@ cleaned up, we can write useful assembly testcases for these sorts of 32@ instructions. 33 34@------------------------------------------------------------------------------ 35@ LDR (register) 36@------------------------------------------------------------------------------ 37 ldr r3, [r8, r1] 38 ldr r2, [r5, -r3] 39 ldr r1, [r5, r9]! 40 ldr r6, [r7, -r8]! 41 ldr r5, [r9], r2 42 ldr r4, [r3], -r6 43 ldr r3, [r8, -r2, lsl #15] 44 ldr r1, [r5], r3, asr #15 45 46@ CHECK: ldr r3, [r8, r1] @ encoding: [0x01,0x30,0x98,0xe7] 47@ CHECK: ldr r2, [r5, -r3] @ encoding: [0x03,0x20,0x15,0xe7] 48@ CHECK: ldr r1, [r5, r9]! @ encoding: [0x09,0x10,0xb5,0xe7] 49@ CHECK: ldr r6, [r7, -r8]! @ encoding: [0x08,0x60,0x37,0xe7] 50@ CHECK: ldr r5, [r9], r2 @ encoding: [0x02,0x50,0x99,0xe6] 51@ CHECK: ldr r4, [r3], -r6 @ encoding: [0x06,0x40,0x13,0xe6] 52@ CHECK: ldr r3, [r8, -r2, lsl #15] @ encoding: [0x82,0x37,0x18,0xe7] 53@ CHECK: ldr r1, [r5], r3, asr #15 @ encoding: [0xc3,0x17,0x95,0xe6] 54 55 56@------------------------------------------------------------------------------ 57@ LDRB (immediate) 58@------------------------------------------------------------------------------ 59 ldrb r3, [r8] 60 ldrb r1, [sp, #63] 61 ldrb r9, [r3, #4095]! 62 ldrb r8, [r1], #22 63 ldrb r2, [r7], #-19 64 65@ CHECK: ldrb r3, [r8] @ encoding: [0x00,0x30,0xd8,0xe5] 66@ CHECK: ldrb r1, [sp, #63] @ encoding: [0x3f,0x10,0xdd,0xe5] 67@ CHECK: ldrb r9, [r3, #4095]! @ encoding: [0xff,0x9f,0xf3,0xe5] 68@ CHECK: ldrb r8, [r1], #22 @ encoding: [0x16,0x80,0xd1,0xe4] 69@ CHECK: ldrb r2, [r7], #-19 @ encoding: [0x13,0x20,0x57,0xe4] 70 71 72@------------------------------------------------------------------------------ 73@ LDRB (register) 74@------------------------------------------------------------------------------ 75 ldr r9, [r8, r5] 76 ldr r1, [r5, -r1] 77 ldr r3, [r5, r2]! 78 ldr r6, [r9, -r3]! 79 ldr r2, [r1], r4 80 ldr r8, [r4], -r5 81 ldr r7, [r12, -r1, lsl #15] 82 ldr r5, [r2], r9, asr #15 83 84@ CHECK: ldr r9, [r8, r5] @ encoding: [0x05,0x90,0x98,0xe7] 85@ CHECK: ldr r1, [r5, -r1] @ encoding: [0x01,0x10,0x15,0xe7] 86@ CHECK: ldr r3, [r5, r2]! @ encoding: [0x02,0x30,0xb5,0xe7] 87@ CHECK: ldr r6, [r9, -r3]! @ encoding: [0x03,0x60,0x39,0xe7] 88@ CHECK: ldr r2, [r1], r4 @ encoding: [0x04,0x20,0x91,0xe6] 89@ CHECK: ldr r8, [r4], -r5 @ encoding: [0x05,0x80,0x14,0xe6] 90@ CHECK: ldr r7, [r12, -r1, lsl #15] @ encoding: [0x81,0x77,0x1c,0xe7] 91@ CHECK: ldr r5, [r2], r9, asr #15 @ encoding: [0xc9,0x57,0x92,0xe6] 92 93 94@------------------------------------------------------------------------------ 95@ LDRBT 96@------------------------------------------------------------------------------ 97@ FIXME: Optional offset operand. 98 ldrbt r3, [r1], #4 99 ldrbt r2, [r8], #-8 100 ldrbt r8, [r7], r6 101 ldrbt r1, [r2], -r6, lsl #12 102 103 104@ CHECK: ldrbt r3, [r1], #4 @ encoding: [0x04,0x30,0xf1,0xe4] 105@ CHECK: ldrbt r2, [r8], #-8 @ encoding: [0x08,0x20,0x78,0xe4] 106@ CHECK: ldrbt r8, [r7], r6 @ encoding: [0x06,0x80,0xf7,0xe6] 107@ CHECK: ldrbt r1, [r2], -r6, lsl #12 @ encoding: [0x06,0x16,0x72,0xe6] 108 109 110@------------------------------------------------------------------------------ 111@ LDRD (immediate) 112@------------------------------------------------------------------------------ 113 ldrd r3, r4, [r5] 114 ldrd r7, r8, [r2, #15] 115 ldrd r1, r2, [r9, #32]! 116 ldrd r6, r7, [r1], #8 117 ldrd r1, r2, [r8], #0 118 ldrd r1, r2, [r8], #+0 119 ldrd r1, r2, [r8], #-0 120 121@ CHECK: ldrd r3, r4, [r5] @ encoding: [0xd0,0x30,0xc5,0xe1] 122@ CHECK: ldrd r7, r8, [r2, #15] @ encoding: [0xdf,0x70,0xc2,0xe1] 123@ CHECK: ldrd r1, r2, [r9, #32]! @ encoding: [0xd0,0x12,0xe9,0xe1] 124@ CHECK: ldrd r6, r7, [r1], #8 @ encoding: [0xd8,0x60,0xc1,0xe0] 125@ CHECK: ldrd r1, r2, [r8], #0 @ encoding: [0xd0,0x10,0xc8,0xe0] 126@ CHECK: ldrd r1, r2, [r8], #0 @ encoding: [0xd0,0x10,0xc8,0xe0] 127@ CHECK: ldrd r1, r2, [r8], #-0 @ encoding: [0xd0,0x10,0x48,0xe0] 128 129 130@------------------------------------------------------------------------------ 131@ FIXME: LDRD (label) 132@------------------------------------------------------------------------------ 133 134@------------------------------------------------------------------------------ 135@ LDRD (register) 136@------------------------------------------------------------------------------ 137 ldrd r3, r4, [r1, r3] 138 ldrd r4, r5, [r7, r2]! 139 ldrd r1, r2, [r8], r12 140 ldrd r1, r2, [r8], -r12 141 142@ CHECK: ldrd r3, r4, [r1, r3] @ encoding: [0xd3,0x30,0x81,0xe1] 143@ CHECK: ldrd r4, r5, [r7, r2]! @ encoding: [0xd2,0x40,0xa7,0xe1] 144@ CHECK: ldrd r1, r2, [r8], r12 @ encoding: [0xdc,0x10,0x88,0xe0] 145@ CHECK: ldrd r1, r2, [r8], -r12 @ encoding: [0xdc,0x10,0x08,0xe0] 146 147 148@------------------------------------------------------------------------------ 149@ LDRH (immediate) 150@------------------------------------------------------------------------------ 151 ldrh r3, [r4] 152 ldrh r2, [r7, #4] 153 ldrh r1, [r8, #64]! 154 ldrh r12, [sp], #4 155 156@ CHECK: ldrh r3, [r4] @ encoding: [0xb0,0x30,0xd4,0xe1] 157@ CHECK: ldrh r2, [r7, #4] @ encoding: [0xb4,0x20,0xd7,0xe1] 158@ CHECK: ldrh r1, [r8, #64]! @ encoding: [0xb0,0x14,0xf8,0xe1] 159@ CHECK: ldrh r12, [sp], #4 @ encoding: [0xb4,0xc0,0xdd,0xe0] 160 161 162@------------------------------------------------------------------------------ 163@ FIXME: LDRH (label) 164@------------------------------------------------------------------------------ 165 166 167@------------------------------------------------------------------------------ 168@ LDRH (register) 169@------------------------------------------------------------------------------ 170 ldrh r6, [r5, r4] 171 ldrh r3, [r8, r11]! 172 ldrh r1, [r2, -r1]! 173 ldrh r9, [r7], r2 174 ldrh r4, [r3], -r2 175 176@ CHECK: ldrh r6, [r5, r4] @ encoding: [0xb4,0x60,0x95,0xe1] 177@ CHECK: ldrh r3, [r8, r11]! @ encoding: [0xbb,0x30,0xb8,0xe1] 178@ CHECK: ldrh r1, [r2, -r1]! @ encoding: [0xb1,0x10,0x32,0xe1] 179@ CHECK: ldrh r9, [r7], r2 @ encoding: [0xb2,0x90,0x97,0xe0] 180@ CHECK: ldrh r4, [r3], -r2 @ encoding: [0xb2,0x40,0x13,0xe0] 181 182 183@------------------------------------------------------------------------------ 184@ LDRHT 185@------------------------------------------------------------------------------ 186 ldrht r9, [r7], #128 187 ldrht r4, [r3], #-75 188 ldrht r9, [r7], r2 189 ldrht r4, [r3], -r2 190 191@ CHECK: ldrht r9, [r7], #128 @ encoding: [0xb0,0x98,0xf7,0xe0] 192@ CHECK: ldrht r4, [r3], #-75 @ encoding: [0xbb,0x44,0x73,0xe0] 193@ CHECK: ldrht r9, [r7], r2 @ encoding: [0xb2,0x90,0xb7,0xe0] 194@ CHECK: ldrht r4, [r3], -r2 @ encoding: [0xb2,0x40,0x33,0xe0] 195 196 197