diff options
Diffstat (limited to 'contrib/llvm/patches/patch-18-llvm-r215811-arm-fpu-directive.diff')
-rw-r--r-- | contrib/llvm/patches/patch-18-llvm-r215811-arm-fpu-directive.diff | 90 |
1 files changed, 0 insertions, 90 deletions
diff --git a/contrib/llvm/patches/patch-18-llvm-r215811-arm-fpu-directive.diff b/contrib/llvm/patches/patch-18-llvm-r215811-arm-fpu-directive.diff deleted file mode 100644 index c11365c..0000000 --- a/contrib/llvm/patches/patch-18-llvm-r215811-arm-fpu-directive.diff +++ /dev/null @@ -1,90 +0,0 @@ -Pull in r215811 from upstream llvm trunk (by Nico Weber): - - arm asm: Let .fpu enable instructions, PR20447. - - I'm not very happy with duplicating the fpu->feature mapping in ARMAsmParser.cpp - and in clang's driver. See the bug for a patch that doesn't do that, and the - review thread [1] for why this duplication exists. - - 1: http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20140811/231052.html - -This makes the .fpu directive work properly, so we can successfully -assemble several .S files using the directive, under lib/libc/arm. - -Introduced here: http://svnweb.freebsd.org/changeset/base/275280 - -Index: lib/Target/ARM/AsmParser/ARMAsmParser.cpp -=================================================================== ---- lib/Target/ARM/AsmParser/ARMAsmParser.cpp -+++ lib/Target/ARM/AsmParser/ARMAsmParser.cpp -@@ -8621,6 +8621,30 @@ bool ARMAsmParser::parseDirectiveCPU(SMLoc L) { - return false; - } - -+// FIXME: This is duplicated in getARMFPUFeatures() in -+// tools/clang/lib/Driver/Tools.cpp -+static const struct { -+ const unsigned Fpu; -+ const uint64_t Enabled; -+ const uint64_t Disabled; -+} Fpus[] = { -+ {ARM::VFP, ARM::FeatureVFP2, ARM::FeatureNEON}, -+ {ARM::VFPV2, ARM::FeatureVFP2, ARM::FeatureNEON}, -+ {ARM::VFPV3, ARM::FeatureVFP3, ARM::FeatureNEON}, -+ {ARM::VFPV3_D16, ARM::FeatureVFP3 | ARM::FeatureD16, ARM::FeatureNEON}, -+ {ARM::VFPV4, ARM::FeatureVFP4, ARM::FeatureNEON}, -+ {ARM::VFPV4_D16, ARM::FeatureVFP4 | ARM::FeatureD16, ARM::FeatureNEON}, -+ {ARM::FP_ARMV8, ARM::FeatureFPARMv8, -+ ARM::FeatureNEON | ARM::FeatureCrypto}, -+ {ARM::NEON, ARM::FeatureNEON, 0}, -+ {ARM::NEON_VFPV4, ARM::FeatureVFP4 | ARM::FeatureNEON, 0}, -+ {ARM::NEON_FP_ARMV8, ARM::FeatureFPARMv8 | ARM::FeatureNEON, -+ ARM::FeatureCrypto}, -+ {ARM::CRYPTO_NEON_FP_ARMV8, -+ ARM::FeatureFPARMv8 | ARM::FeatureNEON | ARM::FeatureCrypto, 0}, -+ {ARM::SOFTVFP, 0, 0}, -+}; -+ - /// parseDirectiveFPU - /// ::= .fpu str - bool ARMAsmParser::parseDirectiveFPU(SMLoc L) { -@@ -8636,6 +8660,18 @@ bool ARMAsmParser::parseDirectiveFPU(SMLoc L) { - return false; - } - -+ for (const auto &Fpu : Fpus) { -+ if (Fpu.Fpu != ID) -+ continue; -+ -+ // Need to toggle features that should be on but are off and that -+ // should off but are on. -+ unsigned Toggle = (Fpu.Enabled & ~STI.getFeatureBits()) | -+ (Fpu.Disabled & STI.getFeatureBits()); -+ setAvailableFeatures(ComputeAvailableFeatures(STI.ToggleFeature(Toggle))); -+ break; -+ } -+ - getTargetStreamer().emitFPU(ID); - return false; - } -Index: test/MC/ARM/directive-fpu-instrs.s -=================================================================== ---- test/MC/ARM/directive-fpu-instrs.s -+++ test/MC/ARM/directive-fpu-instrs.s -@@ -0,0 +1,16 @@ -+// RUN: llvm-mc -triple armv7-unknown-linux-gnueabi -mattr=+vfp3,+d16,-neon %s -+ -+.fpu neon -+VAND d3, d5, d5 -+vldr d21, [r7, #296] -+ -+@ .thumb should not disable the prior .fpu neon -+.thumb -+ -+vmov q4, q11 @ v4si -+str r6, [r7, #264] -+mov r6, r5 -+vldr d21, [r7, #296] -+add r9, r7, #216 -+ -+fstmfdd sp!, {d8, d9, d10, d11, d12, d13, d14, d15} |