1 ; RUN: llvm-mc -triple arm64-apple-darwin -show-encoding < %s | FileCheck %s 2 3 foo: 4 ;----------------------------------------------------------------------------- 5 ; Indexed loads 6 ;----------------------------------------------------------------------------- 7 8 ldr w5, [x4, #20] 9 ldr x4, [x3] 10 ldr x2, [sp, #32] 11 ldr b5, [sp, #1] 12 ldr h6, [sp, #2] 13 ldr s7, [sp, #4] 14 ldr d8, [sp, #8] 15 ldr q9, [sp, #16] 16 ldrb w4, [x3] 17 ldrb w5, [x4, #20] 18 ldrb w2, [x3, _foo@pageoff] 19 ldrb w3, [x2, "+[Test method].var"@PAGEOFF] 20 ldrsb w9, [x3] 21 ldrsb x2, [sp, #128] 22 ldrh w2, [sp, #32] 23 ldrsh w3, [sp, #32] 24 ldrsh x5, [x9, #24] 25 ldrsw x9, [sp, #512] 26 27 prfm #5, [sp, #32] 28 prfm #31, [sp, #32] 29 prfm pldl1keep, [x2] 30 prfm pldl1strm, [x2] 31 prfm pldl2keep, [x2] 32 prfm pldl2strm, [x2] 33 prfm pldl3keep, [x2] 34 prfm pldl3strm, [x2] 35 prfm pstl1keep, [x2] 36 prfm pstl1strm, [x2] 37 prfm pstl2keep, [x2] 38 prfm pstl2strm, [x2] 39 prfm pstl3keep, [x2] 40 prfm pstl3strm, [x2] 41 prfm pstl3strm, [x4, x5, lsl #3] 42 43 ; CHECK: ldr w5, [x4, #20] ; encoding: [0x85,0x14,0x40,0xb9] 44 ; CHECK: ldr x4, [x3] ; encoding: [0x64,0x00,0x40,0xf9] 45 ; CHECK: ldr x2, [sp, #32] ; encoding: [0xe2,0x13,0x40,0xf9] 46 ; CHECK: ldr b5, [sp, #1] ; encoding: [0xe5,0x07,0x40,0x3d] 47 ; CHECK: ldr h6, [sp, #2] ; encoding: [0xe6,0x07,0x40,0x7d] 48 ; CHECK: ldr s7, [sp, #4] ; encoding: [0xe7,0x07,0x40,0xbd] 49 ; CHECK: ldr d8, [sp, #8] ; encoding: [0xe8,0x07,0x40,0xfd] 50 ; CHECK: ldr q9, [sp, #16] ; encoding: [0xe9,0x07,0xc0,0x3d] 51 ; CHECK: ldrb w4, [x3] ; encoding: [0x64,0x00,0x40,0x39] 52 ; CHECK: ldrb w5, [x4, #20] ; encoding: [0x85,0x50,0x40,0x39] 53 ; CHECK: ldrb w2, [x3, _foo@PAGEOFF] ; encoding: [0x62,0bAAAAAA00,0b01AAAAAA,0x39] 54 ; CHECK: ldrb w3, [x2, "+[Test method].var"@PAGEOFF] ; encoding: [0x43,0bAAAAAA00,0b01AAAAAA,0x39] 55 ; CHECK: ldrsb w9, [x3] ; encoding: [0x69,0x00,0xc0,0x39] 56 ; CHECK: ldrsb x2, [sp, #128] ; encoding: [0xe2,0x03,0x82,0x39] 57 ; CHECK: ldrh w2, [sp, #32] ; encoding: [0xe2,0x43,0x40,0x79] 58 ; CHECK: ldrsh w3, [sp, #32] ; encoding: [0xe3,0x43,0xc0,0x79] 59 ; CHECK: ldrsh x5, [x9, #24] ; encoding: [0x25,0x31,0x80,0x79] 60 ; CHECK: ldrsw x9, [sp, #512] ; encoding: [0xe9,0x03,0x82,0xb9] 61 ; CHECK: prfm pldl3strm, [sp, #32] ; encoding: [0xe5,0x13,0x80,0xf9] 62 ; CHECK: prfm #31, [sp, #32] ; encoding: [0xff,0x13,0x80,0xf9] 63 ; CHECK: prfm pldl1keep, [x2] ; encoding: [0x40,0x00,0x80,0xf9] 64 ; CHECK: prfm pldl1strm, [x2] ; encoding: [0x41,0x00,0x80,0xf9] 65 ; CHECK: prfm pldl2keep, [x2] ; encoding: [0x42,0x00,0x80,0xf9] 66 ; CHECK: prfm pldl2strm, [x2] ; encoding: [0x43,0x00,0x80,0xf9] 67 ; CHECK: prfm pldl3keep, [x2] ; encoding: [0x44,0x00,0x80,0xf9] 68 ; CHECK: prfm pldl3strm, [x2] ; encoding: [0x45,0x00,0x80,0xf9] 69 ; CHECK: prfm pstl1keep, [x2] ; encoding: [0x50,0x00,0x80,0xf9] 70 ; CHECK: prfm pstl1strm, [x2] ; encoding: [0x51,0x00,0x80,0xf9] 71 ; CHECK: prfm pstl2keep, [x2] ; encoding: [0x52,0x00,0x80,0xf9] 72 ; CHECK: prfm pstl2strm, [x2] ; encoding: [0x53,0x00,0x80,0xf9] 73 ; CHECK: prfm pstl3keep, [x2] ; encoding: [0x54,0x00,0x80,0xf9] 74 ; CHECK: prfm pstl3strm, [x2] ; encoding: [0x55,0x00,0x80,0xf9] 75 ; CHECK: prfm pstl3strm, [x4, x5, lsl #3] ; encoding: [0x95,0x78,0xa5,0xf8] 76 77 ;----------------------------------------------------------------------------- 78 ; Indexed stores 79 ;----------------------------------------------------------------------------- 80 81 str x4, [x3] 82 str x2, [sp, #32] 83 str w5, [x4, #20] 84 str b5, [sp, #1] 85 str h6, [sp, #2] 86 str s7, [sp, #4] 87 str d8, [sp, #8] 88 str q9, [sp, #16] 89 strb w4, [x3] 90 strb w5, [x4, #20] 91 strh w2, [sp, #32] 92 93 ; CHECK: str x4, [x3] ; encoding: [0x64,0x00,0x00,0xf9] 94 ; CHECK: str x2, [sp, #32] ; encoding: [0xe2,0x13,0x00,0xf9] 95 ; CHECK: str w5, [x4, #20] ; encoding: [0x85,0x14,0x00,0xb9] 96 ; CHECK: str b5, [sp, #1] ; encoding: [0xe5,0x07,0x00,0x3d] 97 ; CHECK: str h6, [sp, #2] ; encoding: [0xe6,0x07,0x00,0x7d] 98 ; CHECK: str s7, [sp, #4] ; encoding: [0xe7,0x07,0x00,0xbd] 99 ; CHECK: str d8, [sp, #8] ; encoding: [0xe8,0x07,0x00,0xfd] 100 ; CHECK: str q9, [sp, #16] ; encoding: [0xe9,0x07,0x80,0x3d] 101 ; CHECK: strb w4, [x3] ; encoding: [0x64,0x00,0x00,0x39] 102 ; CHECK: strb w5, [x4, #20] ; encoding: [0x85,0x50,0x00,0x39] 103 ; CHECK: strh w2, [sp, #32] ; encoding: [0xe2,0x43,0x00,0x79] 104 105 ;----------------------------------------------------------------------------- 106 ; Unscaled immediate loads and stores 107 ;----------------------------------------------------------------------------- 108 109 ldur w2, [x3] 110 ldur w2, [sp, #24] 111 ldur x2, [x3] 112 ldur x2, [sp, #24] 113 ldur b5, [sp, #1] 114 ldur h6, [sp, #2] 115 ldur s7, [sp, #4] 116 ldur d8, [sp, #8] 117 ldur q9, [sp, #16] 118 ldursb w9, [x3] 119 ldursb x2, [sp, #128] 120 ldursh w3, [sp, #32] 121 ldursh x5, [x9, #24] 122 ldursw x9, [sp, #-128] 123 124 ; CHECK: ldur w2, [x3] ; encoding: [0x62,0x00,0x40,0xb8] 125 ; CHECK: ldur w2, [sp, #24] ; encoding: [0xe2,0x83,0x41,0xb8] 126 ; CHECK: ldur x2, [x3] ; encoding: [0x62,0x00,0x40,0xf8] 127 ; CHECK: ldur x2, [sp, #24] ; encoding: [0xe2,0x83,0x41,0xf8] 128 ; CHECK: ldur b5, [sp, #1] ; encoding: [0xe5,0x13,0x40,0x3c] 129 ; CHECK: ldur h6, [sp, #2] ; encoding: [0xe6,0x23,0x40,0x7c] 130 ; CHECK: ldur s7, [sp, #4] ; encoding: [0xe7,0x43,0x40,0xbc] 131 ; CHECK: ldur d8, [sp, #8] ; encoding: [0xe8,0x83,0x40,0xfc] 132 ; CHECK: ldur q9, [sp, #16] ; encoding: [0xe9,0x03,0xc1,0x3c] 133 ; CHECK: ldursb w9, [x3] ; encoding: [0x69,0x00,0xc0,0x38] 134 ; CHECK: ldursb x2, [sp, #128] ; encoding: [0xe2,0x03,0x88,0x38] 135 ; CHECK: ldursh w3, [sp, #32] ; encoding: [0xe3,0x03,0xc2,0x78] 136 ; CHECK: ldursh x5, [x9, #24] ; encoding: [0x25,0x81,0x81,0x78] 137 ; CHECK: ldursw x9, [sp, #-128] ; encoding: [0xe9,0x03,0x98,0xb8] 138 139 stur w4, [x3] 140 stur w2, [sp, #32] 141 stur x4, [x3] 142 stur x2, [sp, #32] 143 stur w5, [x4, #20] 144 stur b5, [sp, #1] 145 stur h6, [sp, #2] 146 stur s7, [sp, #4] 147 stur d8, [sp, #8] 148 stur q9, [sp, #16] 149 sturb w4, [x3] 150 sturb w5, [x4, #20] 151 sturh w2, [sp, #32] 152 prfum #5, [sp, #32] 153 154 ; CHECK: stur w4, [x3] ; encoding: [0x64,0x00,0x00,0xb8] 155 ; CHECK: stur w2, [sp, #32] ; encoding: [0xe2,0x03,0x02,0xb8] 156 ; CHECK: stur x4, [x3] ; encoding: [0x64,0x00,0x00,0xf8] 157 ; CHECK: stur x2, [sp, #32] ; encoding: [0xe2,0x03,0x02,0xf8] 158 ; CHECK: stur w5, [x4, #20] ; encoding: [0x85,0x40,0x01,0xb8] 159 ; CHECK: stur b5, [sp, #1] ; encoding: [0xe5,0x13,0x00,0x3c] 160 ; CHECK: stur h6, [sp, #2] ; encoding: [0xe6,0x23,0x00,0x7c] 161 ; CHECK: stur s7, [sp, #4] ; encoding: [0xe7,0x43,0x00,0xbc] 162 ; CHECK: stur d8, [sp, #8] ; encoding: [0xe8,0x83,0x00,0xfc] 163 ; CHECK: stur q9, [sp, #16] ; encoding: [0xe9,0x03,0x81,0x3c] 164 ; CHECK: sturb w4, [x3] ; encoding: [0x64,0x00,0x00,0x38] 165 ; CHECK: sturb w5, [x4, #20] ; encoding: [0x85,0x40,0x01,0x38] 166 ; CHECK: sturh w2, [sp, #32] ; encoding: [0xe2,0x03,0x02,0x78] 167 ; CHECK: prfum pldl3strm, [sp, #32] ; encoding: [0xe5,0x03,0x82,0xf8] 168 169 ;----------------------------------------------------------------------------- 170 ; Unprivileged loads and stores 171 ;----------------------------------------------------------------------------- 172 173 ldtr w3, [x4, #16] 174 ldtr x3, [x4, #16] 175 ldtrb w3, [x4, #16] 176 ldtrsb w9, [x3] 177 ldtrsb x2, [sp, #128] 178 ldtrh w3, [x4, #16] 179 ldtrsh w3, [sp, #32] 180 ldtrsh x5, [x9, #24] 181 ldtrsw x9, [sp, #-128] 182 183 ; CHECK: ldtr w3, [x4, #16] ; encoding: [0x83,0x08,0x41,0xb8] 184 ; CHECK: ldtr x3, [x4, #16] ; encoding: [0x83,0x08,0x41,0xf8] 185 ; CHECK: ldtrb w3, [x4, #16] ; encoding: [0x83,0x08,0x41,0x38] 186 ; CHECK: ldtrsb w9, [x3] ; encoding: [0x69,0x08,0xc0,0x38] 187 ; CHECK: ldtrsb x2, [sp, #128] ; encoding: [0xe2,0x0b,0x88,0x38] 188 ; CHECK: ldtrh w3, [x4, #16] ; encoding: [0x83,0x08,0x41,0x78] 189 ; CHECK: ldtrsh w3, [sp, #32] ; encoding: [0xe3,0x0b,0xc2,0x78] 190 ; CHECK: ldtrsh x5, [x9, #24] ; encoding: [0x25,0x89,0x81,0x78] 191 ; CHECK: ldtrsw x9, [sp, #-128] ; encoding: [0xe9,0x0b,0x98,0xb8] 192 193 sttr w5, [x4, #20] 194 sttr x4, [x3] 195 sttr x2, [sp, #32] 196 sttrb w4, [x3] 197 sttrb w5, [x4, #20] 198 sttrh w2, [sp, #32] 199 200 ; CHECK: sttr w5, [x4, #20] ; encoding: [0x85,0x48,0x01,0xb8] 201 ; CHECK: sttr x4, [x3] ; encoding: [0x64,0x08,0x00,0xf8] 202 ; CHECK: sttr x2, [sp, #32] ; encoding: [0xe2,0x0b,0x02,0xf8] 203 ; CHECK: sttrb w4, [x3] ; encoding: [0x64,0x08,0x00,0x38] 204 ; CHECK: sttrb w5, [x4, #20] ; encoding: [0x85,0x48,0x01,0x38] 205 ; CHECK: sttrh w2, [sp, #32] ; encoding: [0xe2,0x0b,0x02,0x78] 206 207 ;----------------------------------------------------------------------------- 208 ; Pre-indexed loads and stores 209 ;----------------------------------------------------------------------------- 210 211 ldr x29, [x7, #8]! 212 ldr x30, [x7, #8]! 213 ldr b5, [x0, #1]! 214 ldr h6, [x0, #2]! 215 ldr s7, [x0, #4]! 216 ldr d8, [x0, #8]! 217 ldr q9, [x0, #16]! 218 219 str x30, [x7, #-8]! 220 str x29, [x7, #-8]! 221 str b5, [x0, #-1]! 222 str h6, [x0, #-2]! 223 str s7, [x0, #-4]! 224 str d8, [x0, #-8]! 225 str q9, [x0, #-16]! 226 227 ; CHECK: ldr x29, [x7, #8]! ; encoding: [0xfd,0x8c,0x40,0xf8] 228 ; CHECK: ldr x30, [x7, #8]! ; encoding: [0xfe,0x8c,0x40,0xf8] 229 ; CHECK: ldr b5, [x0, #1]! ; encoding: [0x05,0x1c,0x40,0x3c] 230 ; CHECK: ldr h6, [x0, #2]! ; encoding: [0x06,0x2c,0x40,0x7c] 231 ; CHECK: ldr s7, [x0, #4]! ; encoding: [0x07,0x4c,0x40,0xbc] 232 ; CHECK: ldr d8, [x0, #8]! ; encoding: [0x08,0x8c,0x40,0xfc] 233 ; CHECK: ldr q9, [x0, #16]! ; encoding: [0x09,0x0c,0xc1,0x3c] 234 235 ; CHECK: str x30, [x7, #-8]! ; encoding: [0xfe,0x8c,0x1f,0xf8] 236 ; CHECK: str x29, [x7, #-8]! ; encoding: [0xfd,0x8c,0x1f,0xf8] 237 ; CHECK: str b5, [x0, #-1]! ; encoding: [0x05,0xfc,0x1f,0x3c] 238 ; CHECK: str h6, [x0, #-2]! ; encoding: [0x06,0xec,0x1f,0x7c] 239 ; CHECK: str s7, [x0, #-4]! ; encoding: [0x07,0xcc,0x1f,0xbc] 240 ; CHECK: str d8, [x0, #-8]! ; encoding: [0x08,0x8c,0x1f,0xfc] 241 ; CHECK: str q9, [x0, #-16]! ; encoding: [0x09,0x0c,0x9f,0x3c] 242 243 ;----------------------------------------------------------------------------- 244 ; post-indexed loads and stores 245 ;----------------------------------------------------------------------------- 246 str x30, [x7], #-8 247 str x29, [x7], #-8 248 str b5, [x0], #-1 249 str h6, [x0], #-2 250 str s7, [x0], #-4 251 str d8, [x0], #-8 252 str q9, [x0], #-16 253 254 ldr x29, [x7], #8 255 ldr x30, [x7], #8 256 ldr b5, [x0], #1 257 ldr h6, [x0], #2 258 ldr s7, [x0], #4 259 ldr d8, [x0], #8 260 ldr q9, [x0], #16 261 262 ; CHECK: str x30, [x7], #-8 ; encoding: [0xfe,0x84,0x1f,0xf8] 263 ; CHECK: str x29, [x7], #-8 ; encoding: [0xfd,0x84,0x1f,0xf8] 264 ; CHECK: str b5, [x0], #-1 ; encoding: [0x05,0xf4,0x1f,0x3c] 265 ; CHECK: str h6, [x0], #-2 ; encoding: [0x06,0xe4,0x1f,0x7c] 266 ; CHECK: str s7, [x0], #-4 ; encoding: [0x07,0xc4,0x1f,0xbc] 267 ; CHECK: str d8, [x0], #-8 ; encoding: [0x08,0x84,0x1f,0xfc] 268 ; CHECK: str q9, [x0], #-16 ; encoding: [0x09,0x04,0x9f,0x3c] 269 270 ; CHECK: ldr x29, [x7], #8 ; encoding: [0xfd,0x84,0x40,0xf8] 271 ; CHECK: ldr x30, [x7], #8 ; encoding: [0xfe,0x84,0x40,0xf8] 272 ; CHECK: ldr b5, [x0], #1 ; encoding: [0x05,0x14,0x40,0x3c] 273 ; CHECK: ldr h6, [x0], #2 ; encoding: [0x06,0x24,0x40,0x7c] 274 ; CHECK: ldr s7, [x0], #4 ; encoding: [0x07,0x44,0x40,0xbc] 275 ; CHECK: ldr d8, [x0], #8 ; encoding: [0x08,0x84,0x40,0xfc] 276 ; CHECK: ldr q9, [x0], #16 ; encoding: [0x09,0x04,0xc1,0x3c] 277 278 ;----------------------------------------------------------------------------- 279 ; Load/Store pair (indexed, offset) 280 ;----------------------------------------------------------------------------- 281 282 ldp w3, w2, [x15, #16] 283 ldp x4, x9, [sp, #-16] 284 ldpsw x2, x3, [x14, #16] 285 ldpsw x2, x3, [sp, #-16] 286 ldp s10, s1, [x2, #64] 287 ldp d10, d1, [x2] 288 ldp q2, q3, [x0, #32] 289 290 ; CHECK: ldp w3, w2, [x15, #16] ; encoding: [0xe3,0x09,0x42,0x29] 291 ; CHECK: ldp x4, x9, [sp, #-16] ; encoding: [0xe4,0x27,0x7f,0xa9] 292 ; CHECK: ldpsw x2, x3, [x14, #16] ; encoding: [0xc2,0x0d,0x42,0x69] 293 ; CHECK: ldpsw x2, x3, [sp, #-16] ; encoding: [0xe2,0x0f,0x7e,0x69] 294 ; CHECK: ldp s10, s1, [x2, #64] ; encoding: [0x4a,0x04,0x48,0x2d] 295 ; CHECK: ldp d10, d1, [x2] ; encoding: [0x4a,0x04,0x40,0x6d] 296 ; CHECK: ldp q2, q3, [x0, #32] ; encoding: [0x02,0x0c,0x41,0xad] 297 298 stp w3, w2, [x15, #16] 299 stp x4, x9, [sp, #-16] 300 stp s10, s1, [x2, #64] 301 stp d10, d1, [x2] 302 stp q2, q3, [x0, #32] 303 304 ; CHECK: stp w3, w2, [x15, #16] ; encoding: [0xe3,0x09,0x02,0x29] 305 ; CHECK: stp x4, x9, [sp, #-16] ; encoding: [0xe4,0x27,0x3f,0xa9] 306 ; CHECK: stp s10, s1, [x2, #64] ; encoding: [0x4a,0x04,0x08,0x2d] 307 ; CHECK: stp d10, d1, [x2] ; encoding: [0x4a,0x04,0x00,0x6d] 308 ; CHECK: stp q2, q3, [x0, #32] ; encoding: [0x02,0x0c,0x01,0xad] 309 310 ;----------------------------------------------------------------------------- 311 ; Load/Store pair (pre-indexed) 312 ;----------------------------------------------------------------------------- 313 314 ldp w3, w2, [x15, #16]! 315 ldp x4, x9, [sp, #-16]! 316 ldpsw x2, x3, [x14, #16]! 317 ldpsw x2, x3, [sp, #-16]! 318 ldp s10, s1, [x2, #64]! 319 ldp d10, d1, [x2, #16]! 320 321 ; CHECK: ldp w3, w2, [x15, #16]! ; encoding: [0xe3,0x09,0xc2,0x29] 322 ; CHECK: ldp x4, x9, [sp, #-16]! ; encoding: [0xe4,0x27,0xff,0xa9] 323 ; CHECK: ldpsw x2, x3, [x14, #16]! ; encoding: [0xc2,0x0d,0xc2,0x69] 324 ; CHECK: ldpsw x2, x3, [sp, #-16]! ; encoding: [0xe2,0x0f,0xfe,0x69] 325 ; CHECK: ldp s10, s1, [x2, #64]! ; encoding: [0x4a,0x04,0xc8,0x2d] 326 ; CHECK: ldp d10, d1, [x2, #16]! ; encoding: [0x4a,0x04,0xc1,0x6d] 327 328 stp w3, w2, [x15, #16]! 329 stp x4, x9, [sp, #-16]! 330 stp s10, s1, [x2, #64]! 331 stp d10, d1, [x2, #16]! 332 333 ; CHECK: stp w3, w2, [x15, #16]! ; encoding: [0xe3,0x09,0x82,0x29] 334 ; CHECK: stp x4, x9, [sp, #-16]! ; encoding: [0xe4,0x27,0xbf,0xa9] 335 ; CHECK: stp s10, s1, [x2, #64]! ; encoding: [0x4a,0x04,0x88,0x2d] 336 ; CHECK: stp d10, d1, [x2, #16]! ; encoding: [0x4a,0x04,0x81,0x6d] 337 338 ;----------------------------------------------------------------------------- 339 ; Load/Store pair (post-indexed) 340 ;----------------------------------------------------------------------------- 341 342 ldp w3, w2, [x15], #16 343 ldp x4, x9, [sp], #-16 344 ldpsw x2, x3, [x14], #16 345 ldpsw x2, x3, [sp], #-16 346 ldp s10, s1, [x2], #64 347 ldp d10, d1, [x2], #16 348 349 ; CHECK: ldp w3, w2, [x15], #16 ; encoding: [0xe3,0x09,0xc2,0x28] 350 ; CHECK: ldp x4, x9, [sp], #-16 ; encoding: [0xe4,0x27,0xff,0xa8] 351 ; CHECK: ldpsw x2, x3, [x14], #16 ; encoding: [0xc2,0x0d,0xc2,0x68] 352 ; CHECK: ldpsw x2, x3, [sp], #-16 ; encoding: [0xe2,0x0f,0xfe,0x68] 353 ; CHECK: ldp s10, s1, [x2], #64 ; encoding: [0x4a,0x04,0xc8,0x2c] 354 ; CHECK: ldp d10, d1, [x2], #16 ; encoding: [0x4a,0x04,0xc1,0x6c] 355 356 stp w3, w2, [x15], #16 357 stp x4, x9, [sp], #-16 358 stp s10, s1, [x2], #64 359 stp d10, d1, [x2], #16 360 361 ; CHECK: stp w3, w2, [x15], #16 ; encoding: [0xe3,0x09,0x82,0x28] 362 ; CHECK: stp x4, x9, [sp], #-16 ; encoding: [0xe4,0x27,0xbf,0xa8] 363 ; CHECK: stp s10, s1, [x2], #64 ; encoding: [0x4a,0x04,0x88,0x2c] 364 ; CHECK: stp d10, d1, [x2], #16 ; encoding: [0x4a,0x04,0x81,0x6c] 365 366 ;----------------------------------------------------------------------------- 367 ; Load/Store pair (no-allocate) 368 ;----------------------------------------------------------------------------- 369 370 ldnp w3, w2, [x15, #16] 371 ldnp x4, x9, [sp, #-16] 372 ldnp s10, s1, [x2, #64] 373 ldnp d10, d1, [x2] 374 375 ; CHECK: ldnp w3, w2, [x15, #16] ; encoding: [0xe3,0x09,0x42,0x28] 376 ; CHECK: ldnp x4, x9, [sp, #-16] ; encoding: [0xe4,0x27,0x7f,0xa8] 377 ; CHECK: ldnp s10, s1, [x2, #64] ; encoding: [0x4a,0x04,0x48,0x2c] 378 ; CHECK: ldnp d10, d1, [x2] ; encoding: [0x4a,0x04,0x40,0x6c] 379 380 stnp w3, w2, [x15, #16] 381 stnp x4, x9, [sp, #-16] 382 stnp s10, s1, [x2, #64] 383 stnp d10, d1, [x2] 384 385 ; CHECK: stnp w3, w2, [x15, #16] ; encoding: [0xe3,0x09,0x02,0x28] 386 ; CHECK: stnp x4, x9, [sp, #-16] ; encoding: [0xe4,0x27,0x3f,0xa8] 387 ; CHECK: stnp s10, s1, [x2, #64] ; encoding: [0x4a,0x04,0x08,0x2c] 388 ; CHECK: stnp d10, d1, [x2] ; encoding: [0x4a,0x04,0x00,0x6c] 389 390 ;----------------------------------------------------------------------------- 391 ; Load/Store register offset 392 ;----------------------------------------------------------------------------- 393 394 ldr w0, [x0, x0] 395 ldr w0, [x0, x0, lsl #2] 396 ldr x0, [x0, x0] 397 ldr x0, [x0, x0, lsl #3] 398 ldr x0, [x0, x0, sxtx] 399 400 ; CHECK: ldr w0, [x0, x0] ; encoding: [0x00,0x68,0x60,0xb8] 401 ; CHECK: ldr w0, [x0, x0, lsl #2] ; encoding: [0x00,0x78,0x60,0xb8] 402 ; CHECK: ldr x0, [x0, x0] ; encoding: [0x00,0x68,0x60,0xf8] 403 ; CHECK: ldr x0, [x0, x0, lsl #3] ; encoding: [0x00,0x78,0x60,0xf8] 404 ; CHECK: ldr x0, [x0, x0, sxtx] ; encoding: [0x00,0xe8,0x60,0xf8] 405 406 ldr b1, [x1, x2] 407 ldr b1, [x1, x2, lsl #0] 408 ldr h1, [x1, x2] 409 ldr h1, [x1, x2, lsl #1] 410 ldr s1, [x1, x2] 411 ldr s1, [x1, x2, lsl #2] 412 ldr d1, [x1, x2] 413 ldr d1, [x1, x2, lsl #3] 414 ldr q1, [x1, x2] 415 ldr q1, [x1, x2, lsl #4] 416 417 ; CHECK: ldr b1, [x1, x2] ; encoding: [0x21,0x68,0x62,0x3c] 418 ; CHECK: ldr b1, [x1, x2, lsl #0] ; encoding: [0x21,0x78,0x62,0x3c] 419 ; CHECK: ldr h1, [x1, x2] ; encoding: [0x21,0x68,0x62,0x7c] 420 ; CHECK: ldr h1, [x1, x2, lsl #1] ; encoding: [0x21,0x78,0x62,0x7c] 421 ; CHECK: ldr s1, [x1, x2] ; encoding: [0x21,0x68,0x62,0xbc] 422 ; CHECK: ldr s1, [x1, x2, lsl #2] ; encoding: [0x21,0x78,0x62,0xbc] 423 ; CHECK: ldr d1, [x1, x2] ; encoding: [0x21,0x68,0x62,0xfc] 424 ; CHECK: ldr d1, [x1, x2, lsl #3] ; encoding: [0x21,0x78,0x62,0xfc] 425 ; CHECK: ldr q1, [x1, x2] ; encoding: [0x21,0x68,0xe2,0x3c] 426 ; CHECK: ldr q1, [x1, x2, lsl #4] ; encoding: [0x21,0x78,0xe2,0x3c] 427 428 str d1, [sp, x3] 429 str d1, [sp, w3, uxtw #3] 430 str q1, [sp, x3] 431 str q1, [sp, w3, uxtw #4] 432 433 ; CHECK: str d1, [sp, x3] ; encoding: [0xe1,0x6b,0x23,0xfc] 434 ; CHECK: str d1, [sp, w3, uxtw #3] ; encoding: [0xe1,0x5b,0x23,0xfc] 435 ; CHECK: str q1, [sp, x3] ; encoding: [0xe1,0x6b,0xa3,0x3c] 436 ; CHECK: str q1, [sp, w3, uxtw #4] ; encoding: [0xe1,0x5b,0xa3,0x3c] 437 438 ;----------------------------------------------------------------------------- 439 ; Load literal 440 ;----------------------------------------------------------------------------- 441 442 ldr w5, foo 443 ldr x4, foo 444 ldrsw x9, foo 445 prfm #5, foo 446 447 ; CHECK: ldr w5, foo ; encoding: [0bAAA00101,A,A,0x18] 448 ; CHECK: ldr x4, foo ; encoding: [0bAAA00100,A,A,0x58] 449 ; CHECK: ldrsw x9, foo ; encoding: [0bAAA01001,A,A,0x98] 450 ; CHECK: prfm pldl3strm, foo ; encoding: [0bAAA00101,A,A,0xd8] 451 452 ;----------------------------------------------------------------------------- 453 ; Load/Store exclusive 454 ;----------------------------------------------------------------------------- 455 456 ldxr w6, [x1] 457 ldxr x6, [x1] 458 ldxrb w6, [x1] 459 ldxrh w6, [x1] 460 ldxp w7, w3, [x9] 461 ldxp x7, x3, [x9] 462 463 ; CHECK: ldxrb w6, [x1] ; encoding: [0x26,0x7c,0x5f,0x08] 464 ; CHECK: ldxrh w6, [x1] ; encoding: [0x26,0x7c,0x5f,0x48] 465 ; CHECK: ldxp w7, w3, [x9] ; encoding: [0x27,0x0d,0x7f,0x88] 466 ; CHECK: ldxp x7, x3, [x9] ; encoding: [0x27,0x0d,0x7f,0xc8] 467 468 stxr w1, x4, [x3] 469 stxr w1, w4, [x3] 470 stxrb w1, w4, [x3] 471 stxrh w1, w4, [x3] 472 stxp w1, x2, x6, [x1] 473 stxp w1, w2, w6, [x1] 474 475 ; CHECK: stxr w1, x4, [x3] ; encoding: [0x64,0x7c,0x01,0xc8] 476 ; CHECK: stxr w1, w4, [x3] ; encoding: [0x64,0x7c,0x01,0x88] 477 ; CHECK: stxrb w1, w4, [x3] ; encoding: [0x64,0x7c,0x01,0x08] 478 ; CHECK: stxrh w1, w4, [x3] ; encoding: [0x64,0x7c,0x01,0x48] 479 ; CHECK: stxp w1, x2, x6, [x1] ; encoding: [0x22,0x18,0x21,0xc8] 480 ; CHECK: stxp w1, w2, w6, [x1] ; encoding: [0x22,0x18,0x21,0x88] 481 482 ;----------------------------------------------------------------------------- 483 ; Load-acquire/Store-release non-exclusive 484 ;----------------------------------------------------------------------------- 485 486 ldar w4, [sp] 487 ldar x4, [sp, #0] 488 ldarb w4, [sp] 489 ldarh w4, [sp] 490 491 ; CHECK: ldar w4, [sp] ; encoding: [0xe4,0xff,0xdf,0x88] 492 ; CHECK: ldar x4, [sp] ; encoding: [0xe4,0xff,0xdf,0xc8] 493 ; CHECK: ldarb w4, [sp] ; encoding: [0xe4,0xff,0xdf,0x08] 494 ; CHECK: ldarh w4, [sp] ; encoding: [0xe4,0xff,0xdf,0x48] 495 496 stlr w3, [x6] 497 stlr x3, [x6] 498 stlrb w3, [x6] 499 stlrh w3, [x6] 500 501 ; CHECK: stlr w3, [x6] ; encoding: [0xc3,0xfc,0x9f,0x88] 502 ; CHECK: stlr x3, [x6] ; encoding: [0xc3,0xfc,0x9f,0xc8] 503 ; CHECK: stlrb w3, [x6] ; encoding: [0xc3,0xfc,0x9f,0x08] 504 ; CHECK: stlrh w3, [x6] ; encoding: [0xc3,0xfc,0x9f,0x48] 505 506 ;----------------------------------------------------------------------------- 507 ; Load-acquire/Store-release exclusive 508 ;----------------------------------------------------------------------------- 509 510 ldaxr w2, [x4] 511 ldaxr x2, [x4] 512 ldaxrb w2, [x4, #0] 513 ldaxrh w2, [x4] 514 ldaxp w2, w6, [x1] 515 ldaxp x2, x6, [x1] 516 517 ; CHECK: ldaxr w2, [x4] ; encoding: [0x82,0xfc,0x5f,0x88] 518 ; CHECK: ldaxr x2, [x4] ; encoding: [0x82,0xfc,0x5f,0xc8] 519 ; CHECK: ldaxrb w2, [x4] ; encoding: [0x82,0xfc,0x5f,0x08] 520 ; CHECK: ldaxrh w2, [x4] ; encoding: [0x82,0xfc,0x5f,0x48] 521 ; CHECK: ldaxp w2, w6, [x1] ; encoding: [0x22,0x98,0x7f,0x88] 522 ; CHECK: ldaxp x2, x6, [x1] ; encoding: [0x22,0x98,0x7f,0xc8] 523 524 stlxr w8, x7, [x1] 525 stlxr w8, w7, [x1] 526 stlxrb w8, w7, [x1] 527 stlxrh w8, w7, [x1] 528 stlxp w1, x2, x6, [x1] 529 stlxp w1, w2, w6, [x1] 530 531 ; CHECK: stlxr w8, x7, [x1] ; encoding: [0x27,0xfc,0x08,0xc8] 532 ; CHECK: stlxr w8, w7, [x1] ; encoding: [0x27,0xfc,0x08,0x88] 533 ; CHECK: stlxrb w8, w7, [x1] ; encoding: [0x27,0xfc,0x08,0x08] 534 ; CHECK: stlxrh w8, w7, [x1] ; encoding: [0x27,0xfc,0x08,0x48] 535 ; CHECK: stlxp w1, x2, x6, [x1] ; encoding: [0x22,0x98,0x21,0xc8] 536 ; CHECK: stlxp w1, w2, w6, [x1] ; encoding: [0x22,0x98,0x21,0x88] 537 538 539 ;----------------------------------------------------------------------------- 540 ; LDUR/STUR aliases for negative and unaligned LDR/STR instructions. 541 ; 542 ; According to the ARM ISA documentation: 543 ; "A programmer-friendly assembler should also generate these instructions 544 ; in response to the standard LDR/STR mnemonics when the immediate offset is 545 ; unambiguous, i.e. negative or unaligned." 546 ;----------------------------------------------------------------------------- 547 548 ldr x11, [x29, #-8] 549 ldr x11, [x29, #7] 550 ldr w0, [x0, #2] 551 ldr w0, [x0, #-256] 552 ldr b2, [x1, #-2] 553 ldr h3, [x2, #3] 554 ldr h3, [x3, #-4] 555 ldr s3, [x4, #3] 556 ldr s3, [x5, #-4] 557 ldr d4, [x6, #4] 558 ldr d4, [x7, #-8] 559 ldr q5, [x8, #8] 560 ldr q5, [x9, #-16] 561 562 ; CHECK: ldur x11, [x29, #-8] ; encoding: [0xab,0x83,0x5f,0xf8] 563 ; CHECK: ldur x11, [x29, #7] ; encoding: [0xab,0x73,0x40,0xf8] 564 ; CHECK: ldur w0, [x0, #2] ; encoding: [0x00,0x20,0x40,0xb8] 565 ; CHECK: ldur w0, [x0, #-256] ; encoding: [0x00,0x00,0x50,0xb8] 566 ; CHECK: ldur b2, [x1, #-2] ; encoding: [0x22,0xe0,0x5f,0x3c] 567 ; CHECK: ldur h3, [x2, #3] ; encoding: [0x43,0x30,0x40,0x7c] 568 ; CHECK: ldur h3, [x3, #-4] ; encoding: [0x63,0xc0,0x5f,0x7c] 569 ; CHECK: ldur s3, [x4, #3] ; encoding: [0x83,0x30,0x40,0xbc] 570 ; CHECK: ldur s3, [x5, #-4] ; encoding: [0xa3,0xc0,0x5f,0xbc] 571 ; CHECK: ldur d4, [x6, #4] ; encoding: [0xc4,0x40,0x40,0xfc] 572 ; CHECK: ldur d4, [x7, #-8] ; encoding: [0xe4,0x80,0x5f,0xfc] 573 ; CHECK: ldur q5, [x8, #8] ; encoding: [0x05,0x81,0xc0,0x3c] 574 ; CHECK: ldur q5, [x9, #-16] ; encoding: [0x25,0x01,0xdf,0x3c] 575 576 str x11, [x29, #-8] 577 str x11, [x29, #7] 578 str w0, [x0, #2] 579 str w0, [x0, #-256] 580 str b2, [x1, #-2] 581 str h3, [x2, #3] 582 str h3, [x3, #-4] 583 str s3, [x4, #3] 584 str s3, [x5, #-4] 585 str d4, [x6, #4] 586 str d4, [x7, #-8] 587 str q5, [x8, #8] 588 str q5, [x9, #-16] 589 590 ; CHECK: stur x11, [x29, #-8] ; encoding: [0xab,0x83,0x1f,0xf8] 591 ; CHECK: stur x11, [x29, #7] ; encoding: [0xab,0x73,0x00,0xf8] 592 ; CHECK: stur w0, [x0, #2] ; encoding: [0x00,0x20,0x00,0xb8] 593 ; CHECK: stur w0, [x0, #-256] ; encoding: [0x00,0x00,0x10,0xb8] 594 ; CHECK: stur b2, [x1, #-2] ; encoding: [0x22,0xe0,0x1f,0x3c] 595 ; CHECK: stur h3, [x2, #3] ; encoding: [0x43,0x30,0x00,0x7c] 596 ; CHECK: stur h3, [x3, #-4] ; encoding: [0x63,0xc0,0x1f,0x7c] 597 ; CHECK: stur s3, [x4, #3] ; encoding: [0x83,0x30,0x00,0xbc] 598 ; CHECK: stur s3, [x5, #-4] ; encoding: [0xa3,0xc0,0x1f,0xbc] 599 ; CHECK: stur d4, [x6, #4] ; encoding: [0xc4,0x40,0x00,0xfc] 600 ; CHECK: stur d4, [x7, #-8] ; encoding: [0xe4,0x80,0x1f,0xfc] 601 ; CHECK: stur q5, [x8, #8] ; encoding: [0x05,0x81,0x80,0x3c] 602 ; CHECK: stur q5, [x9, #-16] ; encoding: [0x25,0x01,0x9f,0x3c] 603 604 ldrb w3, [x1, #-1] 605 ldrh w4, [x2, #1] 606 ldrh w5, [x3, #-1] 607 ldrsb w6, [x4, #-1] 608 ldrsb x7, [x5, #-1] 609 ldrsh w8, [x6, #1] 610 ldrsh w9, [x7, #-1] 611 ldrsh x1, [x8, #1] 612 ldrsh x2, [x9, #-1] 613 ldrsw x3, [x10, #10] 614 ldrsw x4, [x11, #-1] 615 616 ; CHECK: ldurb w3, [x1, #-1] ; encoding: [0x23,0xf0,0x5f,0x38] 617 ; CHECK: ldurh w4, [x2, #1] ; encoding: [0x44,0x10,0x40,0x78] 618 ; CHECK: ldurh w5, [x3, #-1] ; encoding: [0x65,0xf0,0x5f,0x78] 619 ; CHECK: ldursb w6, [x4, #-1] ; encoding: [0x86,0xf0,0xdf,0x38] 620 ; CHECK: ldursb x7, [x5, #-1] ; encoding: [0xa7,0xf0,0x9f,0x38] 621 ; CHECK: ldursh w8, [x6, #1] ; encoding: [0xc8,0x10,0xc0,0x78] 622 ; CHECK: ldursh w9, [x7, #-1] ; encoding: [0xe9,0xf0,0xdf,0x78] 623 ; CHECK: ldursh x1, [x8, #1] ; encoding: [0x01,0x11,0x80,0x78] 624 ; CHECK: ldursh x2, [x9, #-1] ; encoding: [0x22,0xf1,0x9f,0x78] 625 ; CHECK: ldursw x3, [x10, #10] ; encoding: [0x43,0xa1,0x80,0xb8] 626 ; CHECK: ldursw x4, [x11, #-1] ; encoding: [0x64,0xf1,0x9f,0xb8] 627 628 strb w3, [x1, #-1] 629 strh w4, [x2, #1] 630 strh w5, [x3, #-1] 631 632 ; CHECK: sturb w3, [x1, #-1] ; encoding: [0x23,0xf0,0x1f,0x38] 633 ; CHECK: sturh w4, [x2, #1] ; encoding: [0x44,0x10,0x00,0x78] 634 ; CHECK: sturh w5, [x3, #-1] ; encoding: [0x65,0xf0,0x1f,0x78] 635