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 6 memd(r17 + r21<<#3) = r31:30 7 # CHECK: 28 d4 c0 48 8 memd(#320) = r21:20 9 # CHECK: 02 40 00 00 10 # CHECK-NEXT: 28 d4 c0 48 11 memd(##168) = r21:20 12 memd(r17+#168) = r21:20 13 # CHECK: 02 f4 d1 a9 14 memd(r17 ++ I:circ(m1)) = r21:20 15 # CHECK: 28 f4 d1 a9 16 memd(r17 ++ #40:circ(m1)) = r21:20 17 # CHECK: 28 d4 d1 ab 18 memd(r17++#40) = r21:20 19 # CHECK: 00 40 00 00 20 # CHECK-NEXT: d5 fe d1 ad 21 memd(r17<<#3 + ##21) = r31:30 22 memd(r17++m1) = r21:20 23 # CHECK: 00 f4 d1 af 24 memd(r17 ++ m1:brev) = r21:20 25 26 # Store doubleword conditionally 27 # CHECK: fe f5 d1 34 28 if (p3) memd(r17+r21<<#3) = r31:30 29 # CHECK: fe f5 d1 35 30 if (!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 40 if (p3) memd(r17+#168) = r31:30 41 # CHECK: ab de d1 44 42 if (!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 52 if (p3) memd(r17++#40) = r21:20 53 # CHECK: 2f f4 d1 ab 54 if (!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 65 if (p3) memd(##168) = r21:20 66 # CHECK: 02 40 00 00 67 # CHECK-NEXT: c7 d4 c2 af 68 if (!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 82 memb(r17 + r21<<#3) = r31 83 # CHECK: 9f ca 11 3c 84 memb(r17+#21)=#31 85 # CHECK: 15 d5 00 48 86 memb(#21) = r21 87 # CHECK: 00 40 00 00 88 # CHECK-NEXT: 15 d5 00 48 89 memb(##21) = r21 90 # CHECK: 15 d5 11 a1 91 memb(r17+#21) = r21 92 # CHECK: 02 f5 11 a9 93 memb(r17 ++ I:circ(m1)) = r21 94 # CHECK: 28 f5 11 a9 95 memb(r17 ++ #5:circ(m1)) = r21 96 # CHECK: 28 d5 11 ab 97 memb(r17++#5) = r21 98 # CHECK: 00 40 00 00 99 # CHECK-NEXT: d5 ff 11 ad 100 memb(r17<<#3 + ##21) = r31 101 # CHECK: 00 f5 11 ad 102 memb(r17++m1) = r21 103 # CHECK: 00 f5 11 af 104 memb(r17 ++ m1:brev) = r21 105 106 # Store byte conditionally 107 # CHECK: ff f5 11 34 108 if (p3) memb(r17+r21<<#3) = r31 109 # CHECK: ff f5 11 35 110 if (!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 120 if (p3) memb(r17+#21)=#31 121 # CHECK: ff ca 91 38 122 if (!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 132 if (p3) memb(r17+#21) = r31 133 # CHECK: ab df 11 44 134 if (!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 144 if (p3) memb(r17++#5) = r21 145 # CHECK: 2f f5 11 ab 146 if (!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 157 if (p3) memb(##21) = r21 158 # CHECK: 00 40 00 00 159 # CHECK-NEXT: af d5 01 af 160 if (!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 174 memh(r17 + r21<<#3) = r31 175 # CHECK: 9f f5 71 3b 176 memh(r17 + r21<<#3) = r31.h 177 # CHECK: 95 cf 31 3c 178 memh(r17+#62)=#21 179 # CHECK: 00 40 00 00 180 # CHECK-NEXT: 2a d5 40 48 181 memh(##42) = r21 182 # CHECK: 00 40 00 00 183 # CHECK-NEXT: 2a d5 60 48 184 memh(##42) = r21.h 185 # CHECK: 2a d5 40 48 186 memh(#84) = r21 187 # CHECK: 2a d5 60 48 188 memh(#84) = r21.h 189 # CHECK: 15 df 51 a1 190 memh(r17+#42) = r31 191 # CHECK: 15 df 71 a1 192 memh(r17+#42) = r31.h 193 # CHECK: 02 f5 51 a9 194 memh(r17 ++ I:circ(m1)) = r21 195 # CHECK: 28 f5 51 a9 196 memh(r17 ++ #10:circ(m1)) = r21 197 # CHECK: 02 f5 71 a9 198 memh(r17 ++ I:circ(m1)) = r21.h 199 # CHECK: 28 f5 71 a9 200 memh(r17 ++ #10:circ(m1)) = r21.h 201 # CHECK: 28 d5 51 ab 202 memh(r17++#10) = r21 203 # CHECK: 00 40 00 00 204 # CHECK-NEXT: d5 ff 51 ad 205 memh(r17<<#3 + ##21) = r31 206 # CHECK: 28 d5 71 ab 207 memh(r17++#10) = r21.h 208 # CHECK: 00 40 00 00 209 # CHECK-NEXT: d5 ff 71 ad 210 memh(r17<<#3 + ##21) = r31.h 211 # CHECK: 00 f5 51 ad 212 memh(r17++m1) = r21 213 # CHECK: 00 f5 71 ad 214 memh(r17++m1) = r21.h 215 # CHECK: 00 f5 51 af 216 memh(r17 ++ m1:brev) = r21 217 # CHECK: 00 f5 71 af 218 memh(r17 ++ m1:brev) = r21.h 219 220 # Store halfword conditionally 221 # CHECK: ff f5 51 34 222 if (p3) memh(r17+r21<<#3) = r31 223 # CHECK: ff f5 71 34 224 if (p3) memh(r17+r21<<#3) = r31.h 225 # CHECK: ff f5 51 35 226 if (!p3) memh(r17+r21<<#3) = r31 227 # CHECK: ff f5 71 35 228 if (!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 246 if (p3) memh(r17+#62)=#21 247 # CHECK: f5 cf b1 38 248 if (!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 258 if (p3) memh(r17+#62) = r21 259 # CHECK: fb d5 71 40 260 if (p3) memh(r17+#62) = r21.h 261 # CHECK: fb d5 51 44 262 if (!p3) memh(r17+#62) = r21 263 # CHECK: fb d5 71 44 264 if (!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 282 if (p3) memh(r17++#10) = r21 283 # CHECK: 2f f5 51 ab 284 if (!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 294 if (p3) memh(r17++#10) = r21.h 295 # CHECK: 2f f5 71 ab 296 if (!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 307 if (p3) memh(##42) = r21 308 # CHECK: 00 40 00 00 309 # CHECK-NEXT: d3 d5 62 af 310 if (p3) memh(##42) = r21.h 311 # CHECK: 00 40 00 00 312 # CHECK-NEXT: d7 d5 42 af 313 if (!p3) memh(##42) = r21 314 # CHECK: 00 40 00 00 315 # CHECK-NEXT: d7 d5 62 af 316 if (!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 340 memw(r17 + r21<<#3) = r31 341 # CHECK: 9f ca 51 3c 342 memw(r17+#84)=#31 343 # CHECK: 15 df 80 48 344 memw(#84) = r31 345 # CHECK: 01 40 00 00 346 # CHECK-NEXT: 14 d5 80 48 347 memw(##84) = r21 348 # CHECK: 9f ca 51 3c 349 memw(r17+#84)=#31 350 # CHECK: 15 df 91 a1 351 memw(r17+#84) = r31 352 # CHECK: 02 f5 91 a9 353 memw(r17 ++ I:circ(m1)) = r21 354 # CHECK: 28 f5 91 a9 355 memw(r17 ++ #20:circ(m1)) = r21 356 # CHECK: 28 d5 91 ab 357 memw(r17++#20) = r21 358 # CHECK: 00 40 00 00 359 # CHECK-NEXT: d5 ff 91 ad 360 memw(r17<<#3 + ##21) = r31 361 # CHECK: 00 f5 91 ad 362 memw(r17++m1) = r21 363 # CHECK: 00 f5 91 af 364 memw(r17 ++ m1:brev) = r21 365 366 # Store word conditionally 367 # CHECK: ff f5 91 34 368 if (p3) memw(r17+r21<<#3) = r31 369 # CHECK: ff f5 91 35 370 if (!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 380 if (p3) memw(r17+#84)=#31 381 # CHECK: ff ca d1 38 382 if (!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 392 if (p3) memw(r17+#84) = r31 393 # CHECK: ab df 91 44 394 if (!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 404 if (p3) memw(r17++#20) = r21 405 # CHECK: 2f f5 91 ab 406 if (!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 417 if (p3) memw(##84) = r21 418 # CHECK: 01 40 00 00 419 # CHECK-NEXT: a7 d5 81 af 420 if (!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 434 allocframe(#248) 435