1# RUN: llvm-mc -triple=hexagon -filetype=obj -o - %s | llvm-objdump -d - | FileCheck %s 2# Hexagon Programmer's Reference Manual 11.8 ST 3 4# Store doubleword 5# CHECK: 9e f5 d1 3b 6memd(r17 + r21<<#3) = r31:30 7# CHECK: 28 d4 c0 48 8memd(gp+#320) = r21:20 9# CHECK: 02 40 00 00 10# CHECK-NEXT: 28 d4 c0 48 11memd(##168) = r21:20 12memd(r17+#168) = r21:20 13# CHECK: 02 f4 d1 a9 14memd(r17 ++ I:circ(m1)) = r21:20 15# CHECK: 28 f4 d1 a9 16memd(r17 ++ #40:circ(m1)) = r21:20 17# CHECK: 28 d4 d1 ab 18memd(r17++#40) = r21:20 19# CHECK: 00 40 00 00 20# CHECK-NEXT: d5 fe d1 ad 21memd(r17<<#3 + ##21) = r31:30 22memd(r17++m1) = r21:20 23# CHECK: 00 f4 d1 af 24memd(r17 ++ m1:brev) = r21:20 25 26# Store doubleword conditionally 27# CHECK: fe f5 d1 34 28if (p3) memd(r17+r21<<#3) = r31:30 29# CHECK: fe f5 d1 35 30if (!p3) memd(r17+r21<<#3) = r31:30 31# CHECK: 03 40 45 85 32# CHECK-NEXT: fe f5 d1 36 33{ p3 = r5 34 if (p3.new) memd(r17+r21<<#3) = r31:30 } 35# CHECK: 03 40 45 85 36# CHECK-NEXT: fe f5 d1 37 37{ p3 = r5 38 if (!p3.new) memd(r17+r21<<#3) = r31:30 } 39# CHECK: ab de d1 40 40if (p3) memd(r17+#168) = r31:30 41# CHECK: ab de d1 44 42if (!p3) memd(r17+#168) = r31:30 43# CHECK: 03 40 45 85 44# CHECK-NEXT: ab de d1 42 45{ p3 = r5 46 if (p3.new) memd(r17+#168) = r31:30 } 47# CHECK: 03 40 45 85 48# CHECK-NEXT: ab de d1 46 49{ p3 = r5 50 if (!p3.new) memd(r17+#168) = r31:30 } 51# CHECK: 2b f4 d1 ab 52if (p3) memd(r17++#40) = r21:20 53# CHECK: 2f f4 d1 ab 54if (!p3) memd(r17++#40) = r21:20 55# CHECK: 03 40 45 85 56# CHECK-NEXT: ab f4 d1 ab 57{ p3 = r5 58 if (p3.new) memd(r17++#40) = r21:20 } 59# CHECK: 03 40 45 85 60# CHECK-NEXT: af f4 d1 ab 61{ p3 = r5 62 if (!p3.new) memd(r17++#40) = r21:20 } 63# CHECK: 02 40 00 00 64# CHECK-NEXT: c3 d4 c2 af 65if (p3) memd(##168) = r21:20 66# CHECK: 02 40 00 00 67# CHECK-NEXT: c7 d4 c2 af 68if (!p3) memd(##168) = r21:20 69# CHECK: 03 40 45 85 70# CHECK-NEXT: 02 40 00 00 71# CHECK-NEXT: c3 f4 c2 af 72{ p3 = r5 73 if (p3.new) memd(##168) = r21:20 } 74# CHECK: 03 40 45 85 75# CHECK-NEXT: 02 40 00 00 76# CHECK-NEXT: c7 f4 c2 af 77{ p3 = r5 78 if (!p3.new) memd(##168) = r21:20 } 79 80# Store byte 81# CHECK: 9f f5 11 3b 82memb(r17 + r21<<#3) = r31 83# CHECK: 9f ca 11 3c 84memb(r17+#21)=#31 85# CHECK: 15 d5 00 48 86memb(gp+#21) = r21 87# CHECK: 00 40 00 00 88# CHECK-NEXT: 15 d5 00 48 89memb(##21) = r21 90# CHECK: 15 d5 11 a1 91memb(r17+#21) = r21 92# CHECK: 02 f5 11 a9 93memb(r17 ++ I:circ(m1)) = r21 94# CHECK: 28 f5 11 a9 95memb(r17 ++ #5:circ(m1)) = r21 96# CHECK: 28 d5 11 ab 97memb(r17++#5) = r21 98# CHECK: 00 40 00 00 99# CHECK-NEXT: d5 ff 11 ad 100memb(r17<<#3 + ##21) = r31 101# CHECK: 00 f5 11 ad 102memb(r17++m1) = r21 103# CHECK: 00 f5 11 af 104memb(r17 ++ m1:brev) = r21 105 106# Store byte conditionally 107# CHECK: ff f5 11 34 108if (p3) memb(r17+r21<<#3) = r31 109# CHECK: ff f5 11 35 110if (!p3) memb(r17+r21<<#3) = r31 111# CHECK: 03 40 45 85 112# CHECK-NEXT: ff f5 11 36 113{ p3 = r5 114 if (p3.new) memb(r17+r21<<#3) = r31 } 115# CHECK: 03 40 45 85 116# CHECK-NEXT: ff f5 11 37 117{ p3 = r5 118 if (!p3.new) memb(r17+r21<<#3) = r31 } 119# CHECK: ff ca 11 38 120if (p3) memb(r17+#21)=#31 121# CHECK: ff ca 91 38 122if (!p3) memb(r17+#21)=#31 123# CHECK: 03 40 45 85 124# CHECK-NEXT: ff ca 11 39 125{ p3 = r5 126 if (p3.new) memb(r17+#21)=#31 } 127# CHECK: 03 40 45 85 128# CHECK-NEXT: ff ca 91 39 129{ p3 = r5 130 if (!p3.new) memb(r17+#21)=#31 } 131# CHECK: ab df 11 40 132if (p3) memb(r17+#21) = r31 133# CHECK: ab df 11 44 134if (!p3) memb(r17+#21) = r31 135# CHECK: 03 40 45 85 136# CHECK-NEXT: ab df 11 42 137{ p3 = r5 138 if (p3.new) memb(r17+#21) = r31 } 139# CHECK: 03 40 45 85 140# CHECK-NEXT: ab df 11 46 141{ p3 = r5 142 if (!p3.new) memb(r17+#21) = r31 } 143# CHECK: 2b f5 11 ab 144if (p3) memb(r17++#5) = r21 145# CHECK: 2f f5 11 ab 146if (!p3) memb(r17++#5) = r21 147# CHECK: 03 40 45 85 148# CHECK-NEXT: ab f5 11 ab 149{ p3 = r5 150 if (p3.new) memb(r17++#5) = r21 } 151# CHECK: 03 40 45 85 152# CHECK-NEXT: af f5 11 ab 153{ p3 = r5 154 if (!p3.new) memb(r17++#5) = r21 } 155# CHECK: 00 40 00 00 156# CHECK-NEXT: ab d5 01 af 157if (p3) memb(##21) = r21 158# CHECK: 00 40 00 00 159# CHECK-NEXT: af d5 01 af 160if (!p3) memb(##21) = r21 161# CHECK: 03 40 45 85 162# CHECK-NEXT: 00 40 00 00 163# CHECK-NEXT: ab f5 01 af 164{ p3 = r5 165 if (p3.new) memb(##21) = r21 } 166# CHECK: 03 40 45 85 167# CHECK-NEXT: 00 40 00 00 168# CHECK-NEXT: af f5 01 af 169{ p3 = r5 170 if (!p3.new) memb(##21) = r21 } 171 172# Store halfword 173# CHECK: 9f f5 51 3b 174memh(r17 + r21<<#3) = r31 175# CHECK: 9f f5 71 3b 176memh(r17 + r21<<#3) = r31.h 177# CHECK: 95 cf 31 3c 178memh(r17+#62)=#21 179# CHECK: 00 40 00 00 180# CHECK-NEXT: 2a d5 40 48 181memh(##42) = r21 182# CHECK: 00 40 00 00 183# CHECK-NEXT: 2a d5 60 48 184memh(##42) = r21.h 185# CHECK: 2a d5 40 48 186memh(gp+#84) = r21 187# CHECK: 2a d5 60 48 188memh(gp+#84) = r21.h 189# CHECK: 15 df 51 a1 190memh(r17+#42) = r31 191# CHECK: 15 df 71 a1 192memh(r17+#42) = r31.h 193# CHECK: 02 f5 51 a9 194memh(r17 ++ I:circ(m1)) = r21 195# CHECK: 28 f5 51 a9 196memh(r17 ++ #10:circ(m1)) = r21 197# CHECK: 02 f5 71 a9 198memh(r17 ++ I:circ(m1)) = r21.h 199# CHECK: 28 f5 71 a9 200memh(r17 ++ #10:circ(m1)) = r21.h 201# CHECK: 28 d5 51 ab 202memh(r17++#10) = r21 203# CHECK: 00 40 00 00 204# CHECK-NEXT: d5 ff 51 ad 205memh(r17<<#3 + ##21) = r31 206# CHECK: 28 d5 71 ab 207memh(r17++#10) = r21.h 208# CHECK: 00 40 00 00 209# CHECK-NEXT: d5 ff 71 ad 210memh(r17<<#3 + ##21) = r31.h 211# CHECK: 00 f5 51 ad 212memh(r17++m1) = r21 213# CHECK: 00 f5 71 ad 214memh(r17++m1) = r21.h 215# CHECK: 00 f5 51 af 216memh(r17 ++ m1:brev) = r21 217# CHECK: 00 f5 71 af 218memh(r17 ++ m1:brev) = r21.h 219 220# Store halfword conditionally 221# CHECK: ff f5 51 34 222if (p3) memh(r17+r21<<#3) = r31 223# CHECK: ff f5 71 34 224if (p3) memh(r17+r21<<#3) = r31.h 225# CHECK: ff f5 51 35 226if (!p3) memh(r17+r21<<#3) = r31 227# CHECK: ff f5 71 35 228if (!p3) memh(r17+r21<<#3) = r31.h 229# CHECK: 03 40 45 85 230# CHECK-NEXT: ff f5 51 36 231{ p3 = r5 232 if (p3.new) memh(r17+r21<<#3) = r31 } 233# CHECK: 03 40 45 85 234# CHECK-NEXT: ff f5 71 36 235{ p3 = r5 236 if (p3.new) memh(r17+r21<<#3) = r31.h } 237# CHECK: 03 40 45 85 238# CHECK-NEXT: ff f5 51 37 239{ p3 = r5 240 if (!p3.new) memh(r17+r21<<#3) = r31 } 241# CHECK: 03 40 45 85 242# CHECK-NEXT: ff f5 71 37 243{ p3 = r5 244 if (!p3.new) memh(r17+r21<<#3) = r31.h } 245# CHECK: f5 cf 31 38 246if (p3) memh(r17+#62)=#21 247# CHECK: f5 cf b1 38 248if (!p3) memh(r17+#62)=#21 249# CHECK: 03 40 45 85 250# CHECK-NEXT: f5 cf 31 39 251{ p3 = r5 252 if (p3.new) memh(r17+#62)=#21 } 253# CHECK: 03 40 45 85 254# CHECK-NEXT: f5 cf b1 39 255{ p3 = r5 256 if (!p3.new) memh(r17+#62)=#21 } 257# CHECK: fb d5 51 40 258if (p3) memh(r17+#62) = r21 259# CHECK: fb d5 71 40 260if (p3) memh(r17+#62) = r21.h 261# CHECK: fb d5 51 44 262if (!p3) memh(r17+#62) = r21 263# CHECK: fb d5 71 44 264if (!p3) memh(r17+#62) = r21.h 265# CHECK: 03 40 45 85 266# CHECK-NEXT: fb d5 51 42 267{ p3 = r5 268 if (p3.new) memh(r17+#62) = r21 } 269# CHECK: 03 40 45 85 270# CHECK-NEXT: fb d5 71 42 271{ p3 = r5 272 if (p3.new) memh(r17+#62) = r21.h } 273# CHECK: 03 40 45 85 274# CHECK-NEXT: fb d5 51 46 275{ p3 = r5 276 if (!p3.new) memh(r17+#62) = r21 } 277# CHECK: 03 40 45 85 278# CHECK-NEXT: fb d5 71 46 279{ p3 = r5 280 if (!p3.new) memh(r17+#62) = r21.h } 281# CHECK: 2b f5 51 ab 282if (p3) memh(r17++#10) = r21 283# CHECK: 2f f5 51 ab 284if (!p3) memh(r17++#10) = r21 285# CHECK: 03 40 45 85 286# CHECK-NEXT: ab f5 51 ab 287{ p3 = r5 288 if (p3.new) memh(r17++#10) = r21 } 289# CHECK: 03 40 45 85 290# CHECK-NEXT: af f5 51 ab 291{ p3 = r5 292 if (!p3.new) memh(r17++#10) = r21 } 293# CHECK: 2b f5 71 ab 294if (p3) memh(r17++#10) = r21.h 295# CHECK: 2f f5 71 ab 296if (!p3) memh(r17++#10) = r21.h 297# CHECK: 03 40 45 85 298# CHECK-NEXT: ab f5 71 ab 299{ p3 = r5 300 if (p3.new) memh(r17++#10) = r21.h } 301# CHECK: 03 40 45 85 302# CHECK-NEXT: af f5 71 ab 303{ p3 = r5 304 if (!p3.new) memh(r17++#10) = r21.h } 305# CHECK: 00 40 00 00 306# CHECK-NEXT: d3 d5 42 af 307if (p3) memh(##42) = r21 308# CHECK: 00 40 00 00 309# CHECK-NEXT: d3 d5 62 af 310if (p3) memh(##42) = r21.h 311# CHECK: 00 40 00 00 312# CHECK-NEXT: d7 d5 42 af 313if (!p3) memh(##42) = r21 314# CHECK: 00 40 00 00 315# CHECK-NEXT: d7 d5 62 af 316if (!p3) memh(##42) = r21.h 317# CHECK: 03 40 45 85 318# CHECK-NEXT: 00 40 00 00 319# CHECK-NEXT: d3 f5 42 af 320{ p3 = r5 321 if (p3.new) memh(##42) = r21 } 322# CHECK: 03 40 45 85 323# CHECK-NEXT: 00 40 00 00 324# CHECK-NEXT: d3 f5 62 af 325{ p3 = r5 326 if (p3.new) memh(##42) = r21.h } 327# CHECK: 03 40 45 85 328# CHECK-NEXT: 00 40 00 00 329# CHECK-NEXT: d7 f5 42 af 330{ p3 = r5 331 if (!p3.new) memh(##42) = r21 } 332# CHECK: 03 40 45 85 333# CHECK-NEXT: 00 40 00 00 334# CHECK-NEXT: d7 f5 62 af 335{ p3 = r5 336 if (!p3.new) memh(##42) = r21.h } 337 338# Store word 339# CHECK: 9f f5 91 3b 340memw(r17 + r21<<#3) = r31 341# CHECK: 9f ca 51 3c 342memw(r17+#84)=#31 343# CHECK: 15 df 80 48 344memw(gp+#84) = r31 345# CHECK: 01 40 00 00 346# CHECK-NEXT: 14 d5 80 48 347memw(##84) = r21 348# CHECK: 9f ca 51 3c 349memw(r17+#84)=#31 350# CHECK: 15 df 91 a1 351memw(r17+#84) = r31 352# CHECK: 02 f5 91 a9 353memw(r17 ++ I:circ(m1)) = r21 354# CHECK: 28 f5 91 a9 355memw(r17 ++ #20:circ(m1)) = r21 356# CHECK: 28 d5 91 ab 357memw(r17++#20) = r21 358# CHECK: 00 40 00 00 359# CHECK-NEXT: d5 ff 91 ad 360memw(r17<<#3 + ##21) = r31 361# CHECK: 00 f5 91 ad 362memw(r17++m1) = r21 363# CHECK: 00 f5 91 af 364memw(r17 ++ m1:brev) = r21 365 366# Store word conditionally 367# CHECK: ff f5 91 34 368if (p3) memw(r17+r21<<#3) = r31 369# CHECK: ff f5 91 35 370if (!p3) memw(r17+r21<<#3) = r31 371# CHECK: 03 40 45 85 372# CHECK-NEXT: ff f5 91 36 373{ p3 = r5 374 if (p3.new) memw(r17+r21<<#3) = r31 } 375# CHECK: 03 40 45 85 376# CHECK-NEXT: ff f5 91 37 377{ p3 = r5 378 if (!p3.new) memw(r17+r21<<#3) = r31 } 379# CHECK: ff ca 51 38 380if (p3) memw(r17+#84)=#31 381# CHECK: ff ca d1 38 382if (!p3) memw(r17+#84)=#31 383# CHECK: 03 40 45 85 384# CHECK-NEXT: ff ca 51 39 385{ p3 = r5 386 if (p3.new) memw(r17+#84)=#31 } 387# CHECK: 03 40 45 85 388# CHECK-NEXT: ff ca d1 39 389{ p3 = r5 390 if (!p3.new) memw(r17+#84)=#31 } 391# CHECK: ab df 91 40 392if (p3) memw(r17+#84) = r31 393# CHECK: ab df 91 44 394if (!p3) memw(r17+#84) = r31 395# CHECK: 03 40 45 85 396# CHECK-NEXT: ab df 91 42 397{ p3 = r5 398 if (p3.new) memw(r17+#84) = r31 } 399# CHECK: 03 40 45 85 400# CHECK-NEXT: ab df 91 46 401{ p3 = r5 402 if (!p3.new) memw(r17+#84) = r31 } 403# CHECK: 2b f5 91 ab 404if (p3) memw(r17++#20) = r21 405# CHECK: 2f f5 91 ab 406if (!p3) memw(r17++#20) = r21 407# CHECK: 03 40 45 85 408# CHECK-NEXT: af f5 91 ab 409{ p3 = r5 410 if (!p3.new) memw(r17++#20) = r21 } 411# CHECK: 03 40 45 85 412# CHECK-NEXT: ab f5 91 ab 413{ p3 = r5 414 if (p3.new) memw(r17++#20) = r21 } 415# CHECK: 01 40 00 00 416# CHECK-NEXT: a3 d5 81 af 417if (p3) memw(##84) = r21 418# CHECK: 01 40 00 00 419# CHECK-NEXT: a7 d5 81 af 420if (!p3) memw(##84) = r21 421# CHECK: 03 40 45 85 422# CHECK-NEXT: 01 40 00 00 423# CHECK-NEXT: a3 f5 81 af 424{ p3 = r5 425 if (p3.new) memw(##84) = r21 } 426# CHECK: 03 40 45 85 427# CHECK-NEXT: 01 40 00 00 428# CHECK-NEXT: a7 f5 81 af 429{ p3 = r5 430 if (!p3.new) memw(##84) = r21 } 431 432# Allocate stack frame 433# CHECK: 1f c0 9d a0 434allocframe(#248) 435