From owner-svn-src-projects@FreeBSD.ORG Sun Nov 30 00:09:27 2014 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 55D17FE3; Sun, 30 Nov 2014 00:09:27 +0000 (UTC) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4243B8C9; Sun, 30 Nov 2014 00:09:27 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id sAU09R4s096922; Sun, 30 Nov 2014 00:09:27 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by svn.freebsd.org (8.14.9/8.14.9/Submit) id sAU09R85096921; Sun, 30 Nov 2014 00:09:27 GMT (envelope-from dim@FreeBSD.org) Message-Id: <201411300009.sAU09R85096921@svn.freebsd.org> X-Authentication-Warning: svn.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Sun, 30 Nov 2014 00:09:27 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r275281 - projects/clang350-import/contrib/llvm/patches X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 30 Nov 2014 00:09:27 -0000 Author: dim Date: Sun Nov 30 00:09:26 2014 New Revision: 275281 URL: https://svnweb.freebsd.org/changeset/base/275281 Log: Add patch file for r275280. Added: projects/clang350-import/contrib/llvm/patches/patch-19-llvm-r215811-arm-fpu-directive.diff Added: projects/clang350-import/contrib/llvm/patches/patch-19-llvm-r215811-arm-fpu-directive.diff ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/clang350-import/contrib/llvm/patches/patch-19-llvm-r215811-arm-fpu-directive.diff Sun Nov 30 00:09:26 2014 (r275281) @@ -0,0 +1,90 @@ +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}