From 32cf3068d5e3db64c9473fea55a525c060bcffed Mon Sep 17 00:00:00 2001 From: Joerg Sonnenberger Date: Sun, 12 Jan 2014 03:35:18 +0000 Subject: [PATCH] Add missing mul aliases for armv4 support. Add checks that armv4 can assemble the various mul instructions. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@199026 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/ARM/ARMInstrInfo.td | 15 ++++++++++++--- test/MC/ARM/directive-arch-armv4.s | 11 ++++++++++- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/lib/Target/ARM/ARMInstrInfo.td b/lib/Target/ARM/ARMInstrInfo.td index 3d38cc98960..2a28122b6c1 100644 --- a/lib/Target/ARM/ARMInstrInfo.td +++ b/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/test/MC/ARM/directive-arch-armv4.s b/test/MC/ARM/directive-arch-armv4.s index 418e2f7787b..8c51efe0dfb 100644 --- a/test/MC/ARM/directive-arch-armv4.s +++ b/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