1; RUN: llvm-mc -triple arm64-apple-darwin -show-encoding < %s | FileCheck %s 2 3foo: 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