summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorJoerg Sonnenberger <joerg@bec.de>2014-01-12 03:35:18 +0000
committerJoerg Sonnenberger <joerg@bec.de>2014-01-12 03:35:18 +0000
commit485f00fe0fecb4f47e27192552bbcae48b9de2a1 (patch)
treeb7f3a3c56899084dbf59967167974f748b13361f /llvm
parentac114a3ce7deffc3d82a5ba72c26481a6a6ae219 (diff)
downloadbcm5719-llvm-485f00fe0fecb4f47e27192552bbcae48b9de2a1.tar.gz
bcm5719-llvm-485f00fe0fecb4f47e27192552bbcae48b9de2a1.zip
Add missing mul aliases for armv4 support. Add checks that armv4 can
assemble the various mul instructions. llvm-svn: 199026
Diffstat (limited to 'llvm')
-rw-r--r--llvm/lib/Target/ARM/ARMInstrInfo.td15
-rw-r--r--llvm/test/MC/ARM/directive-arch-armv4.s11
2 files changed, 22 insertions, 4 deletions
diff --git a/llvm/lib/Target/ARM/ARMInstrInfo.td b/llvm/lib/Target/ARM/ARMInstrInfo.td
index 3d38cc98960..2a28122b6c1 100644
--- a/llvm/lib/Target/ARM/ARMInstrInfo.td
+++ b/llvm/lib/Target/ARM/ARMInstrInfo.td
@@ -5596,9 +5596,18 @@ def : ARMInstAlias<"neg${s}${p} $Rd, $Rm",
def : InstAlias<"nop${p}", (MOVr R0, R0, pred:$p, zero_reg)>,
Requires<[IsARM, NoV6]>;
-// UMULL/SMULL are available on all arches, but the instruction definitions
-// need difference constraints pre-v6. Use these aliases for the assembly
-// parsing on pre-v6.
+// MUL/UMLAL/SMLAL/UMULL/SMULL are available on all arches, but
+// the instruction definitions need difference constraints pre-v6.
+// Use these aliases for the assembly parsing on pre-v6.
+def : InstAlias<"mul${s}${p} $Rd, $Rn, $Rm",
+ (MUL GPRnopc:$Rd, GPRnopc:$Rn, GPRnopc:$Rm, pred:$p, cc_out:$s)>,
+ Requires<[IsARM, NoV6]>;
+def : InstAlias<"smlal${s}${p} $RdLo, $RdHi, $Rn, $Rm",
+ (SMLAL GPR:$RdLo, GPR:$RdHi, GPR:$Rn, GPR:$Rm, pred:$p, cc_out:$s)>,
+ Requires<[IsARM, NoV6]>;
+def : InstAlias<"umlal${s}${p} $RdLo, $RdHi, $Rn, $Rm",
+ (UMLAL GPR:$RdLo, GPR:$RdHi, GPR:$Rn, GPR:$Rm, pred:$p, cc_out:$s)>,
+ Requires<[IsARM, NoV6]>;
def : InstAlias<"smull${s}${p} $RdLo, $RdHi, $Rn, $Rm",
(SMULL GPR:$RdLo, GPR:$RdHi, GPR:$Rn, GPR:$Rm, pred:$p, cc_out:$s)>,
Requires<[IsARM, NoV6]>;
diff --git a/llvm/test/MC/ARM/directive-arch-armv4.s b/llvm/test/MC/ARM/directive-arch-armv4.s
index 418e2f7787b..8c51efe0dfb 100644
--- a/llvm/test/MC/ARM/directive-arch-armv4.s
+++ b/llvm/test/MC/ARM/directive-arch-armv4.s
@@ -18,7 +18,7 @@
@ CHECK-OBJ: Flags [ (0x0)
@ CHECK-OBJ: ]
@ CHECK-OBJ: Address: 0x0
-@ CHECK-OBJ: Offset: 0x34
+@ CHECK-OBJ: Offset: 0x{{[0-9A-F]*}}
@ CHECK-OBJ: Size: 23
@ CHECK-OBJ: Link: 0
@ CHECK-OBJ: Info: 0
@@ -28,3 +28,12 @@
@ CHECK-OBJ: 0000: 41160000 00616561 62690001 0C000000 |A....aeabi......|
@ CHECK-OBJ: 0010: 05340006 010801 |.4.....|
@ CHECK-OBJ: )
+
+
+@ Check that multiplication is supported
+ mul r4, r5, r6
+ smull r4, r5, r6, r3
+ umull r4, r5, r6, r3
+ umlal r4, r5, r6, r3
+ umaal r4, r5, r6, r3
+ smlal r4, r5, r6, r3
OpenPOWER on IntegriCloud