forked from OSchip/llvm-project
435 lines
10 KiB
ArmAsm
435 lines
10 KiB
ArmAsm
# RUN: llvm-mc -triple=hexagon -filetype=obj -o - %s | llvm-objdump -d - | FileCheck %s
|
|
# Hexagon Programmer's Reference Manual 11.8 ST
|
|
|
|
# Store doubleword
|
|
# CHECK: 9e f5 d1 3b
|
|
memd(r17 + r21<<#3) = r31:30
|
|
# CHECK: 28 d4 c0 48
|
|
memd(gp+#320) = r21:20
|
|
# CHECK: 02 40 00 00
|
|
# CHECK-NEXT: 28 d4 c0 48
|
|
memd(##168) = r21:20
|
|
memd(r17+#168) = r21:20
|
|
# CHECK: 02 f4 d1 a9
|
|
memd(r17 ++ I:circ(m1)) = r21:20
|
|
# CHECK: 28 f4 d1 a9
|
|
memd(r17 ++ #40:circ(m1)) = r21:20
|
|
# CHECK: 28 d4 d1 ab
|
|
memd(r17++#40) = r21:20
|
|
# CHECK: 00 40 00 00
|
|
# CHECK-NEXT: d5 fe d1 ad
|
|
memd(r17<<#3 + ##21) = r31:30
|
|
memd(r17++m1) = r21:20
|
|
# CHECK: 00 f4 d1 af
|
|
memd(r17 ++ m1:brev) = r21:20
|
|
|
|
# Store doubleword conditionally
|
|
# CHECK: fe f5 d1 34
|
|
if (p3) memd(r17+r21<<#3) = r31:30
|
|
# CHECK: fe f5 d1 35
|
|
if (!p3) memd(r17+r21<<#3) = r31:30
|
|
# CHECK: 03 40 45 85
|
|
# CHECK-NEXT: fe f5 d1 36
|
|
{ p3 = r5
|
|
if (p3.new) memd(r17+r21<<#3) = r31:30 }
|
|
# CHECK: 03 40 45 85
|
|
# CHECK-NEXT: fe f5 d1 37
|
|
{ p3 = r5
|
|
if (!p3.new) memd(r17+r21<<#3) = r31:30 }
|
|
# CHECK: ab de d1 40
|
|
if (p3) memd(r17+#168) = r31:30
|
|
# CHECK: ab de d1 44
|
|
if (!p3) memd(r17+#168) = r31:30
|
|
# CHECK: 03 40 45 85
|
|
# CHECK-NEXT: ab de d1 42
|
|
{ p3 = r5
|
|
if (p3.new) memd(r17+#168) = r31:30 }
|
|
# CHECK: 03 40 45 85
|
|
# CHECK-NEXT: ab de d1 46
|
|
{ p3 = r5
|
|
if (!p3.new) memd(r17+#168) = r31:30 }
|
|
# CHECK: 2b f4 d1 ab
|
|
if (p3) memd(r17++#40) = r21:20
|
|
# CHECK: 2f f4 d1 ab
|
|
if (!p3) memd(r17++#40) = r21:20
|
|
# CHECK: 03 40 45 85
|
|
# CHECK-NEXT: ab f4 d1 ab
|
|
{ p3 = r5
|
|
if (p3.new) memd(r17++#40) = r21:20 }
|
|
# CHECK: 03 40 45 85
|
|
# CHECK-NEXT: af f4 d1 ab
|
|
{ p3 = r5
|
|
if (!p3.new) memd(r17++#40) = r21:20 }
|
|
# CHECK: 02 40 00 00
|
|
# CHECK-NEXT: c3 d4 c2 af
|
|
if (p3) memd(##168) = r21:20
|
|
# CHECK: 02 40 00 00
|
|
# CHECK-NEXT: c7 d4 c2 af
|
|
if (!p3) memd(##168) = r21:20
|
|
# CHECK: 03 40 45 85
|
|
# CHECK-NEXT: 02 40 00 00
|
|
# CHECK-NEXT: c3 f4 c2 af
|
|
{ p3 = r5
|
|
if (p3.new) memd(##168) = r21:20 }
|
|
# CHECK: 03 40 45 85
|
|
# CHECK-NEXT: 02 40 00 00
|
|
# CHECK-NEXT: c7 f4 c2 af
|
|
{ p3 = r5
|
|
if (!p3.new) memd(##168) = r21:20 }
|
|
|
|
# Store byte
|
|
# CHECK: 9f f5 11 3b
|
|
memb(r17 + r21<<#3) = r31
|
|
# CHECK: 9f ca 11 3c
|
|
memb(r17+#21)=#31
|
|
# CHECK: 15 d5 00 48
|
|
memb(gp+#21) = r21
|
|
# CHECK: 00 40 00 00
|
|
# CHECK-NEXT: 15 d5 00 48
|
|
memb(##21) = r21
|
|
# CHECK: 15 d5 11 a1
|
|
memb(r17+#21) = r21
|
|
# CHECK: 02 f5 11 a9
|
|
memb(r17 ++ I:circ(m1)) = r21
|
|
# CHECK: 28 f5 11 a9
|
|
memb(r17 ++ #5:circ(m1)) = r21
|
|
# CHECK: 28 d5 11 ab
|
|
memb(r17++#5) = r21
|
|
# CHECK: 00 40 00 00
|
|
# CHECK-NEXT: d5 ff 11 ad
|
|
memb(r17<<#3 + ##21) = r31
|
|
# CHECK: 00 f5 11 ad
|
|
memb(r17++m1) = r21
|
|
# CHECK: 00 f5 11 af
|
|
memb(r17 ++ m1:brev) = r21
|
|
|
|
# Store byte conditionally
|
|
# CHECK: ff f5 11 34
|
|
if (p3) memb(r17+r21<<#3) = r31
|
|
# CHECK: ff f5 11 35
|
|
if (!p3) memb(r17+r21<<#3) = r31
|
|
# CHECK: 03 40 45 85
|
|
# CHECK-NEXT: ff f5 11 36
|
|
{ p3 = r5
|
|
if (p3.new) memb(r17+r21<<#3) = r31 }
|
|
# CHECK: 03 40 45 85
|
|
# CHECK-NEXT: ff f5 11 37
|
|
{ p3 = r5
|
|
if (!p3.new) memb(r17+r21<<#3) = r31 }
|
|
# CHECK: ff ca 11 38
|
|
if (p3) memb(r17+#21)=#31
|
|
# CHECK: ff ca 91 38
|
|
if (!p3) memb(r17+#21)=#31
|
|
# CHECK: 03 40 45 85
|
|
# CHECK-NEXT: ff ca 11 39
|
|
{ p3 = r5
|
|
if (p3.new) memb(r17+#21)=#31 }
|
|
# CHECK: 03 40 45 85
|
|
# CHECK-NEXT: ff ca 91 39
|
|
{ p3 = r5
|
|
if (!p3.new) memb(r17+#21)=#31 }
|
|
# CHECK: ab df 11 40
|
|
if (p3) memb(r17+#21) = r31
|
|
# CHECK: ab df 11 44
|
|
if (!p3) memb(r17+#21) = r31
|
|
# CHECK: 03 40 45 85
|
|
# CHECK-NEXT: ab df 11 42
|
|
{ p3 = r5
|
|
if (p3.new) memb(r17+#21) = r31 }
|
|
# CHECK: 03 40 45 85
|
|
# CHECK-NEXT: ab df 11 46
|
|
{ p3 = r5
|
|
if (!p3.new) memb(r17+#21) = r31 }
|
|
# CHECK: 2b f5 11 ab
|
|
if (p3) memb(r17++#5) = r21
|
|
# CHECK: 2f f5 11 ab
|
|
if (!p3) memb(r17++#5) = r21
|
|
# CHECK: 03 40 45 85
|
|
# CHECK-NEXT: ab f5 11 ab
|
|
{ p3 = r5
|
|
if (p3.new) memb(r17++#5) = r21 }
|
|
# CHECK: 03 40 45 85
|
|
# CHECK-NEXT: af f5 11 ab
|
|
{ p3 = r5
|
|
if (!p3.new) memb(r17++#5) = r21 }
|
|
# CHECK: 00 40 00 00
|
|
# CHECK-NEXT: ab d5 01 af
|
|
if (p3) memb(##21) = r21
|
|
# CHECK: 00 40 00 00
|
|
# CHECK-NEXT: af d5 01 af
|
|
if (!p3) memb(##21) = r21
|
|
# CHECK: 03 40 45 85
|
|
# CHECK-NEXT: 00 40 00 00
|
|
# CHECK-NEXT: ab f5 01 af
|
|
{ p3 = r5
|
|
if (p3.new) memb(##21) = r21 }
|
|
# CHECK: 03 40 45 85
|
|
# CHECK-NEXT: 00 40 00 00
|
|
# CHECK-NEXT: af f5 01 af
|
|
{ p3 = r5
|
|
if (!p3.new) memb(##21) = r21 }
|
|
|
|
# Store halfword
|
|
# CHECK: 9f f5 51 3b
|
|
memh(r17 + r21<<#3) = r31
|
|
# CHECK: 9f f5 71 3b
|
|
memh(r17 + r21<<#3) = r31.h
|
|
# CHECK: 95 cf 31 3c
|
|
memh(r17+#62)=#21
|
|
# CHECK: 00 40 00 00
|
|
# CHECK-NEXT: 2a d5 40 48
|
|
memh(##42) = r21
|
|
# CHECK: 00 40 00 00
|
|
# CHECK-NEXT: 2a d5 60 48
|
|
memh(##42) = r21.h
|
|
# CHECK: 2a d5 40 48
|
|
memh(gp+#84) = r21
|
|
# CHECK: 2a d5 60 48
|
|
memh(gp+#84) = r21.h
|
|
# CHECK: 15 df 51 a1
|
|
memh(r17+#42) = r31
|
|
# CHECK: 15 df 71 a1
|
|
memh(r17+#42) = r31.h
|
|
# CHECK: 02 f5 51 a9
|
|
memh(r17 ++ I:circ(m1)) = r21
|
|
# CHECK: 28 f5 51 a9
|
|
memh(r17 ++ #10:circ(m1)) = r21
|
|
# CHECK: 02 f5 71 a9
|
|
memh(r17 ++ I:circ(m1)) = r21.h
|
|
# CHECK: 28 f5 71 a9
|
|
memh(r17 ++ #10:circ(m1)) = r21.h
|
|
# CHECK: 28 d5 51 ab
|
|
memh(r17++#10) = r21
|
|
# CHECK: 00 40 00 00
|
|
# CHECK-NEXT: d5 ff 51 ad
|
|
memh(r17<<#3 + ##21) = r31
|
|
# CHECK: 28 d5 71 ab
|
|
memh(r17++#10) = r21.h
|
|
# CHECK: 00 40 00 00
|
|
# CHECK-NEXT: d5 ff 71 ad
|
|
memh(r17<<#3 + ##21) = r31.h
|
|
# CHECK: 00 f5 51 ad
|
|
memh(r17++m1) = r21
|
|
# CHECK: 00 f5 71 ad
|
|
memh(r17++m1) = r21.h
|
|
# CHECK: 00 f5 51 af
|
|
memh(r17 ++ m1:brev) = r21
|
|
# CHECK: 00 f5 71 af
|
|
memh(r17 ++ m1:brev) = r21.h
|
|
|
|
# Store halfword conditionally
|
|
# CHECK: ff f5 51 34
|
|
if (p3) memh(r17+r21<<#3) = r31
|
|
# CHECK: ff f5 71 34
|
|
if (p3) memh(r17+r21<<#3) = r31.h
|
|
# CHECK: ff f5 51 35
|
|
if (!p3) memh(r17+r21<<#3) = r31
|
|
# CHECK: ff f5 71 35
|
|
if (!p3) memh(r17+r21<<#3) = r31.h
|
|
# CHECK: 03 40 45 85
|
|
# CHECK-NEXT: ff f5 51 36
|
|
{ p3 = r5
|
|
if (p3.new) memh(r17+r21<<#3) = r31 }
|
|
# CHECK: 03 40 45 85
|
|
# CHECK-NEXT: ff f5 71 36
|
|
{ p3 = r5
|
|
if (p3.new) memh(r17+r21<<#3) = r31.h }
|
|
# CHECK: 03 40 45 85
|
|
# CHECK-NEXT: ff f5 51 37
|
|
{ p3 = r5
|
|
if (!p3.new) memh(r17+r21<<#3) = r31 }
|
|
# CHECK: 03 40 45 85
|
|
# CHECK-NEXT: ff f5 71 37
|
|
{ p3 = r5
|
|
if (!p3.new) memh(r17+r21<<#3) = r31.h }
|
|
# CHECK: f5 cf 31 38
|
|
if (p3) memh(r17+#62)=#21
|
|
# CHECK: f5 cf b1 38
|
|
if (!p3) memh(r17+#62)=#21
|
|
# CHECK: 03 40 45 85
|
|
# CHECK-NEXT: f5 cf 31 39
|
|
{ p3 = r5
|
|
if (p3.new) memh(r17+#62)=#21 }
|
|
# CHECK: 03 40 45 85
|
|
# CHECK-NEXT: f5 cf b1 39
|
|
{ p3 = r5
|
|
if (!p3.new) memh(r17+#62)=#21 }
|
|
# CHECK: fb d5 51 40
|
|
if (p3) memh(r17+#62) = r21
|
|
# CHECK: fb d5 71 40
|
|
if (p3) memh(r17+#62) = r21.h
|
|
# CHECK: fb d5 51 44
|
|
if (!p3) memh(r17+#62) = r21
|
|
# CHECK: fb d5 71 44
|
|
if (!p3) memh(r17+#62) = r21.h
|
|
# CHECK: 03 40 45 85
|
|
# CHECK-NEXT: fb d5 51 42
|
|
{ p3 = r5
|
|
if (p3.new) memh(r17+#62) = r21 }
|
|
# CHECK: 03 40 45 85
|
|
# CHECK-NEXT: fb d5 71 42
|
|
{ p3 = r5
|
|
if (p3.new) memh(r17+#62) = r21.h }
|
|
# CHECK: 03 40 45 85
|
|
# CHECK-NEXT: fb d5 51 46
|
|
{ p3 = r5
|
|
if (!p3.new) memh(r17+#62) = r21 }
|
|
# CHECK: 03 40 45 85
|
|
# CHECK-NEXT: fb d5 71 46
|
|
{ p3 = r5
|
|
if (!p3.new) memh(r17+#62) = r21.h }
|
|
# CHECK: 2b f5 51 ab
|
|
if (p3) memh(r17++#10) = r21
|
|
# CHECK: 2f f5 51 ab
|
|
if (!p3) memh(r17++#10) = r21
|
|
# CHECK: 03 40 45 85
|
|
# CHECK-NEXT: ab f5 51 ab
|
|
{ p3 = r5
|
|
if (p3.new) memh(r17++#10) = r21 }
|
|
# CHECK: 03 40 45 85
|
|
# CHECK-NEXT: af f5 51 ab
|
|
{ p3 = r5
|
|
if (!p3.new) memh(r17++#10) = r21 }
|
|
# CHECK: 2b f5 71 ab
|
|
if (p3) memh(r17++#10) = r21.h
|
|
# CHECK: 2f f5 71 ab
|
|
if (!p3) memh(r17++#10) = r21.h
|
|
# CHECK: 03 40 45 85
|
|
# CHECK-NEXT: ab f5 71 ab
|
|
{ p3 = r5
|
|
if (p3.new) memh(r17++#10) = r21.h }
|
|
# CHECK: 03 40 45 85
|
|
# CHECK-NEXT: af f5 71 ab
|
|
{ p3 = r5
|
|
if (!p3.new) memh(r17++#10) = r21.h }
|
|
# CHECK: 00 40 00 00
|
|
# CHECK-NEXT: d3 d5 42 af
|
|
if (p3) memh(##42) = r21
|
|
# CHECK: 00 40 00 00
|
|
# CHECK-NEXT: d3 d5 62 af
|
|
if (p3) memh(##42) = r21.h
|
|
# CHECK: 00 40 00 00
|
|
# CHECK-NEXT: d7 d5 42 af
|
|
if (!p3) memh(##42) = r21
|
|
# CHECK: 00 40 00 00
|
|
# CHECK-NEXT: d7 d5 62 af
|
|
if (!p3) memh(##42) = r21.h
|
|
# CHECK: 03 40 45 85
|
|
# CHECK-NEXT: 00 40 00 00
|
|
# CHECK-NEXT: d3 f5 42 af
|
|
{ p3 = r5
|
|
if (p3.new) memh(##42) = r21 }
|
|
# CHECK: 03 40 45 85
|
|
# CHECK-NEXT: 00 40 00 00
|
|
# CHECK-NEXT: d3 f5 62 af
|
|
{ p3 = r5
|
|
if (p3.new) memh(##42) = r21.h }
|
|
# CHECK: 03 40 45 85
|
|
# CHECK-NEXT: 00 40 00 00
|
|
# CHECK-NEXT: d7 f5 42 af
|
|
{ p3 = r5
|
|
if (!p3.new) memh(##42) = r21 }
|
|
# CHECK: 03 40 45 85
|
|
# CHECK-NEXT: 00 40 00 00
|
|
# CHECK-NEXT: d7 f5 62 af
|
|
{ p3 = r5
|
|
if (!p3.new) memh(##42) = r21.h }
|
|
|
|
# Store word
|
|
# CHECK: 9f f5 91 3b
|
|
memw(r17 + r21<<#3) = r31
|
|
# CHECK: 9f ca 51 3c
|
|
memw(r17+#84)=#31
|
|
# CHECK: 15 df 80 48
|
|
memw(gp+#84) = r31
|
|
# CHECK: 01 40 00 00
|
|
# CHECK-NEXT: 14 d5 80 48
|
|
memw(##84) = r21
|
|
# CHECK: 9f ca 51 3c
|
|
memw(r17+#84)=#31
|
|
# CHECK: 15 df 91 a1
|
|
memw(r17+#84) = r31
|
|
# CHECK: 02 f5 91 a9
|
|
memw(r17 ++ I:circ(m1)) = r21
|
|
# CHECK: 28 f5 91 a9
|
|
memw(r17 ++ #20:circ(m1)) = r21
|
|
# CHECK: 28 d5 91 ab
|
|
memw(r17++#20) = r21
|
|
# CHECK: 00 40 00 00
|
|
# CHECK-NEXT: d5 ff 91 ad
|
|
memw(r17<<#3 + ##21) = r31
|
|
# CHECK: 00 f5 91 ad
|
|
memw(r17++m1) = r21
|
|
# CHECK: 00 f5 91 af
|
|
memw(r17 ++ m1:brev) = r21
|
|
|
|
# Store word conditionally
|
|
# CHECK: ff f5 91 34
|
|
if (p3) memw(r17+r21<<#3) = r31
|
|
# CHECK: ff f5 91 35
|
|
if (!p3) memw(r17+r21<<#3) = r31
|
|
# CHECK: 03 40 45 85
|
|
# CHECK-NEXT: ff f5 91 36
|
|
{ p3 = r5
|
|
if (p3.new) memw(r17+r21<<#3) = r31 }
|
|
# CHECK: 03 40 45 85
|
|
# CHECK-NEXT: ff f5 91 37
|
|
{ p3 = r5
|
|
if (!p3.new) memw(r17+r21<<#3) = r31 }
|
|
# CHECK: ff ca 51 38
|
|
if (p3) memw(r17+#84)=#31
|
|
# CHECK: ff ca d1 38
|
|
if (!p3) memw(r17+#84)=#31
|
|
# CHECK: 03 40 45 85
|
|
# CHECK-NEXT: ff ca 51 39
|
|
{ p3 = r5
|
|
if (p3.new) memw(r17+#84)=#31 }
|
|
# CHECK: 03 40 45 85
|
|
# CHECK-NEXT: ff ca d1 39
|
|
{ p3 = r5
|
|
if (!p3.new) memw(r17+#84)=#31 }
|
|
# CHECK: ab df 91 40
|
|
if (p3) memw(r17+#84) = r31
|
|
# CHECK: ab df 91 44
|
|
if (!p3) memw(r17+#84) = r31
|
|
# CHECK: 03 40 45 85
|
|
# CHECK-NEXT: ab df 91 42
|
|
{ p3 = r5
|
|
if (p3.new) memw(r17+#84) = r31 }
|
|
# CHECK: 03 40 45 85
|
|
# CHECK-NEXT: ab df 91 46
|
|
{ p3 = r5
|
|
if (!p3.new) memw(r17+#84) = r31 }
|
|
# CHECK: 2b f5 91 ab
|
|
if (p3) memw(r17++#20) = r21
|
|
# CHECK: 2f f5 91 ab
|
|
if (!p3) memw(r17++#20) = r21
|
|
# CHECK: 03 40 45 85
|
|
# CHECK-NEXT: af f5 91 ab
|
|
{ p3 = r5
|
|
if (!p3.new) memw(r17++#20) = r21 }
|
|
# CHECK: 03 40 45 85
|
|
# CHECK-NEXT: ab f5 91 ab
|
|
{ p3 = r5
|
|
if (p3.new) memw(r17++#20) = r21 }
|
|
# CHECK: 01 40 00 00
|
|
# CHECK-NEXT: a3 d5 81 af
|
|
if (p3) memw(##84) = r21
|
|
# CHECK: 01 40 00 00
|
|
# CHECK-NEXT: a7 d5 81 af
|
|
if (!p3) memw(##84) = r21
|
|
# CHECK: 03 40 45 85
|
|
# CHECK-NEXT: 01 40 00 00
|
|
# CHECK-NEXT: a3 f5 81 af
|
|
{ p3 = r5
|
|
if (p3.new) memw(##84) = r21 }
|
|
# CHECK: 03 40 45 85
|
|
# CHECK-NEXT: 01 40 00 00
|
|
# CHECK-NEXT: a7 f5 81 af
|
|
{ p3 = r5
|
|
if (!p3.new) memw(##84) = r21 }
|
|
|
|
# Allocate stack frame
|
|
# CHECK: 1f c0 9d a0
|
|
allocframe(#248)
|