diff --git a/lib/Target/ARM/ARM.td b/lib/Target/ARM/ARM.td index 5fab93040cf..a0592f23d35 100644 --- a/lib/Target/ARM/ARM.td +++ b/lib/Target/ARM/ARM.td @@ -194,6 +194,7 @@ def ProcSwift : SubtargetFeature<"swift", "ARMProcFamily", "Swift", def ProcA15 : SubtargetFeature<"a15", "ARMProcFamily", "CortexA15", "Cortex-A15 ARM processors", [FeatureT2XtPk, FeatureVFP4, + FeatureMP, FeatureHWDiv, FeatureHWDivARM, FeatureAvoidPartialCPSR, FeatureTrustZone]>; diff --git a/lib/Target/ARM/ARMInstrInfo.td b/lib/Target/ARM/ARMInstrInfo.td index bc39a1da354..7b7e67e9054 100644 --- a/lib/Target/ARM/ARMInstrInfo.td +++ b/lib/Target/ARM/ARMInstrInfo.td @@ -221,9 +221,9 @@ def HasCrypto : Predicate<"Subtarget->hasCrypto()">, def HasFP16 : Predicate<"Subtarget->hasFP16()">, AssemblerPredicate<"FeatureFP16","half-float">; def HasDivide : Predicate<"Subtarget->hasDivide()">, - AssemblerPredicate<"FeatureHWDiv", "divide">; + AssemblerPredicate<"FeatureHWDiv", "divide in THUMB">; def HasDivideInARM : Predicate<"Subtarget->hasDivideInARMMode()">, - AssemblerPredicate<"FeatureHWDivARM">; + AssemblerPredicate<"FeatureHWDivARM", "divide in ARM">; def HasT2ExtractPack : Predicate<"Subtarget->hasT2ExtractPack()">, AssemblerPredicate<"FeatureT2XtPk", "pack/extract">; diff --git a/test/MC/ARM/idiv.s b/test/MC/ARM/idiv.s new file mode 100644 index 00000000000..6238a0fe066 --- /dev/null +++ b/test/MC/ARM/idiv.s @@ -0,0 +1,33 @@ +@ RUN: llvm-mc -triple=armv7 -mcpu=cortex-a15 -show-encoding < %s 2>&1 | FileCheck -check-prefix A15-ARM %s +@ RUN: llvm-mc -triple=thumbv7 -mcpu=cortex-a15 -show-encoding < %s 2>&1 | FileCheck -check-prefix A15-THUMB %s + +@ RUN: llvm-mc -triple=armv7 -mcpu=cortex-a15 -mattr=-hwdiv -show-encoding < %s 2>&1 | FileCheck -check-prefix A15-ARM-NOTHUMBHWDIV %s +@ RUN: llvm-mc -triple=thumbv7 -mcpu=cortex-a15 -mattr=-hwdiv-arm -show-encoding < %s 2>&1 | FileCheck -check-prefix A15-THUMB-NOARMHWDIV %s + +@ RUN: llvm-mc -triple=armv8 -show-encoding < %s 2>&1 | FileCheck -check-prefix ARMV8 %s +@ RUN: llvm-mc -triple=thumbv8 -show-encoding < %s 2>&1 | FileCheck -check-prefix THUMBV8 %s + +@ RUN: llvm-mc -triple=armv8 -mattr=-hwdiv -show-encoding < %s 2>&1 | FileCheck -check-prefix ARMV8-NOTHUMBHWDIV %s +@ RUN: llvm-mc -triple=thumbv8 -mattr=-hwdiv-arm -show-encoding < %s 2>&1 | FileCheck -check-prefix THUMBV8-NOTHUMBHWDIV %s + + sdiv r1, r2, r3 + udiv r3, r4, r5 +@ A15-ARM: sdiv r1, r2, r3 @ encoding: [0x12,0xf3,0x11,0xe7] +@ A15-ARM: udiv r3, r4, r5 @ encoding: [0x14,0xf5,0x33,0xe7] +@ A15-THUMB: sdiv r1, r2, r3 @ encoding: [0x92,0xfb,0xf3,0xf1] +@ A15-THUMB: udiv r3, r4, r5 @ encoding: [0xb4,0xfb,0xf5,0xf3] + +@ A15-ARM-NOTHUMBHWDIV: sdiv r1, r2, r3 @ encoding: [0x12,0xf3,0x11,0xe7] +@ A15-ARM-NOTHUMBHWDIV: udiv r3, r4, r5 @ encoding: [0x14,0xf5,0x33,0xe7] +@ A15-THUMB-NOARMHWDIV: sdiv r1, r2, r3 @ encoding: [0x92,0xfb,0xf3,0xf1] +@ A15-THUMB-NOARMHWDIV: udiv r3, r4, r5 @ encoding: [0xb4,0xfb,0xf5,0xf3] + +@ ARMV8: sdiv r1, r2, r3 @ encoding: [0x12,0xf3,0x11,0xe7] +@ ARMV8: udiv r3, r4, r5 @ encoding: [0x14,0xf5,0x33,0xe7] +@ THUMBV8: sdiv r1, r2, r3 @ encoding: [0x92,0xfb,0xf3,0xf1] +@ THUMBV8: udiv r3, r4, r5 @ encoding: [0xb4,0xfb,0xf5,0xf3] + +@ ARMV8-NOTHUMBHWDIV: sdiv r1, r2, r3 @ encoding: [0x12,0xf3,0x11,0xe7] +@ ARMV8-NOTHUMBHWDIV: udiv r3, r4, r5 @ encoding: [0x14,0xf5,0x33,0xe7] +@ THUMBV8-NOTHUMBHWDIV: sdiv r1, r2, r3 @ encoding: [0x92,0xfb,0xf3,0xf1] +@ THUMBV8-NOTHUMBHWDIV: udiv r3, r4, r5 @ encoding: [0xb4,0xfb,0xf5,0xf3] diff --git a/test/MC/ARM/invalid-idiv.s b/test/MC/ARM/invalid-idiv.s new file mode 100644 index 00000000000..a84e66a0ccf --- /dev/null +++ b/test/MC/ARM/invalid-idiv.s @@ -0,0 +1,28 @@ +@ RUN: not llvm-mc -triple=armv7 -mcpu=cortex-a15 -mattr=-hwdiv-arm < %s 2> %t +@ RUN: FileCheck --check-prefix=ARM-A15 < %t %s +@ RUN: not llvm-mc -triple=thumbv7 -mcpu=cortex-a15 -mattr=-hwdiv < %s 2> %t +@ RUN: FileCheck --check-prefix=THUMB-A15 < %t %s +@ RUN: not llvm-mc -triple=armv7 < %s 2> %t +@ RUN: FileCheck --check-prefix=ARM < %t %s +@ RUN: not llvm-mc -triple=thumbv7 < %s 2> %t +@ RUN: FileCheck --check-prefix=THUMB < %t %s + + sdiv r1, r2, r3 + udiv r3, r4, r5 +@ ARM-A15: error: instruction requires: divide in ARM +@ ARM-A15: sdiv r1, r2, r3 +@ ARM-A15: error: instruction requires: divide in ARM +@ ARM-A15: udiv r3, r4, r5 +@ THUMB-A15: error: instruction requires: arm-mode +@ THUMB-A15: sdiv r1, r2, r3 +@ THUMB-A15: error: instruction requires: arm-mode +@ THUMB-A15: udiv r3, r4, r5 + +@ ARM: error: instruction requires: divide in ARM +@ ARM: sdiv r1, r2, r3 +@ ARM: error: instruction requires: divide in ARM +@ ARM: udiv r3, r4, r5 +@ THUMB: error: instruction requires: divide in THUMB +@ THUMB: sdiv r1, r2, r3 +@ THUMB: error: instruction requires: divide in THUMB +@ THUMB: udiv r3, r4, r5