<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
</head>
<body dir="ltr">
<div id="divtagdefaultwrapper" style="font-size:12pt;color:#000000;font-family:Calibri,Helvetica,sans-serif;" dir="ltr">
<p style="margin-top:0;margin-bottom:0"><span>Hi Ahmed,</span></p>
<p style="margin-top:0;margin-bottom:0"><span><br>
</span></p>
<p style="margin-top:0;margin-bottom:0"><span>Thanks, fixed in r336115. This should have not been causing any issues, as the target features were modeling this correctly, but is indeed more consistent to add it here too. We really would like to clean up this
one day... <br>
</span></p>
<p style="margin-top:0;margin-bottom:0"><span><br>
</span></p>
<p style="margin-top:0;margin-bottom:0"><span>Cheers,</span></p>
<p style="margin-top:0;margin-bottom:0"><span>Sjoerd.<br>
</span></p>
<p style="margin-top:0;margin-bottom:0"><span></span><br>
</p>
</div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> Ahmed Bougacha <ahmed.bougacha@gmail.com><br>
<b>Sent:</b> 29 June 2018 18:28:03<br>
<b>To:</b> Sjoerd Meijer<br>
<b>Cc:</b> llvm-commits<br>
<b>Subject:</b> Re: [llvm] r335953 - [ARM][AArch64] Armv8.4-A Enablement</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt;">
<div class="PlainText">Hey Sjoerd,<br>
<br>
On Fri, Jun 29, 2018 at 1:43 AM, Sjoerd Meijer via llvm-commits<br>
<llvm-commits@lists.llvm.org> wrote:<br>
> Author: sjoerdmeijer<br>
> Date: Fri Jun 29 01:43:19 2018<br>
> New Revision: 335953<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=335953&view=rev">http://llvm.org/viewvc/llvm-project?rev=335953&view=rev</a><br>
> Log:<br>
> [ARM][AArch64] Armv8.4-A Enablement<br>
><br>
> Initial patch adding assembly support for Armv8.4-A.<br>
><br>
> Besides adding v8.4 as a supported architecture to the usual places, this also<br>
> adds target features for the different crypto algorithms. Armv8.4-A introduced<br>
> new crypto algorithms, made them optional, and allows different combinations:<br>
><br>
> - none of the v8.4 crypto functions are supported, which is independent of the<br>
> implementation of the Armv8.0 SHA1 and SHA2 instructions.<br>
> - the v8.4 SHA512 and SHA3 support is implemented, in this case the Armv8.0<br>
> SHA1 and SHA2 instructions must also be implemented.<br>
> - the v8.4 SM3 and SM4 support is implemented, which is independent of the<br>
> implementation of the Armv8.0 SHA1 and SHA2 instructions.<br>
> - all of the v8.4 crypto functions are supported, in this case the Armv8.0 SHA1<br>
> and SHA2 instructions must also be implemented.<br>
><br>
> The v8.4 crypto instructions are added to AArch64 only, and not AArch32,<br>
> and are made optional extensions to Armv8.2-A.<br>
><br>
> The user-facing Clang options will map on these new target features, their<br>
> naming will be compatible with GCC and added in follow-up patches.<br>
><br>
> The Armv8.4-A instruction sets can be downloaded here:<br>
> <a href="https://developer.arm.com/products/architecture/a-profile/exploration-tools">
https://developer.arm.com/products/architecture/a-profile/exploration-tools</a><br>
><br>
> Differential Revision: <a href="https://reviews.llvm.org/D48625">https://reviews.llvm.org/D48625</a><br>
><br>
> Modified:<br>
> llvm/trunk/include/llvm/ADT/Triple.h<br>
> llvm/trunk/include/llvm/Support/AArch64TargetParser.def<br>
> llvm/trunk/include/llvm/Support/ARMTargetParser.def<br>
> llvm/trunk/include/llvm/Support/TargetParser.h<br>
> llvm/trunk/lib/Support/TargetParser.cpp<br>
> llvm/trunk/lib/Support/Triple.cpp<br>
> llvm/trunk/lib/Target/AArch64/AArch64.td<br>
> llvm/trunk/lib/Target/AArch64/AArch64Subtarget.h<br>
> llvm/trunk/lib/Target/ARM/ARM.td<br>
> llvm/trunk/lib/Target/ARM/ARMInstrInfo.td<br>
> llvm/trunk/lib/Target/ARM/ARMSubtarget.h<br>
> llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp<br>
><br>
> Modified: llvm/trunk/include/llvm/ADT/Triple.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/Triple.h?rev=335953&r1=335952&r2=335953&view=diff">
http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/Triple.h?rev=335953&r1=335952&r2=335953&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/include/llvm/ADT/Triple.h (original)<br>
> +++ llvm/trunk/include/llvm/ADT/Triple.h Fri Jun 29 01:43:19 2018<br>
> @@ -101,6 +101,7 @@ public:<br>
> enum SubArchType {<br>
> NoSubArch,<br>
><br>
> + ARMSubArch_v8_4a,<br>
> ARMSubArch_v8_3a,<br>
> ARMSubArch_v8_2a,<br>
> ARMSubArch_v8_1a,<br>
><br>
> Modified: llvm/trunk/include/llvm/Support/AArch64TargetParser.def<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/AArch64TargetParser.def?rev=335953&r1=335952&r2=335953&view=diff">
http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/AArch64TargetParser.def?rev=335953&r1=335952&r2=335953&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/include/llvm/Support/AArch64TargetParser.def (original)<br>
> +++ llvm/trunk/include/llvm/Support/AArch64TargetParser.def Fri Jun 29 01:43:19 2018<br>
> @@ -35,6 +35,11 @@ AARCH64_ARCH("armv8.3-a", ARMV8_3A, "8.3<br>
> (AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_FP |<br>
> AArch64::AEK_SIMD | AArch64::AEK_RAS | AArch64::AEK_LSE |<br>
> AArch64::AEK_RDM | AArch64::AEK_RCPC))<br>
> +AARCH64_ARCH("armv8.4-a", ARMV8_4A, "8.4-A", "v8.4a",<br>
> + ARMBuildAttrs::CPUArch::v8_A, FK_CRYPTO_NEON_FP_ARMV8,<br>
> + (AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_FP |<br>
> + AArch64::AEK_SIMD | AArch64::AEK_RAS | AArch64::AEK_LSE |<br>
> + AArch64::AEK_RDM | AArch64::AEK_RCPC))<br>
<br>
Should dotprod be implied here?<br>
<br>
-Ahmed<br>
<br>
> #undef AARCH64_ARCH<br>
><br>
> #ifndef AARCH64_ARCH_EXT_NAME<br>
> @@ -47,6 +52,10 @@ AARCH64_ARCH_EXT_NAME("crc", AArch6<br>
> AARCH64_ARCH_EXT_NAME("lse", AArch64::AEK_LSE, "+lse", "-lse")<br>
> AARCH64_ARCH_EXT_NAME("rdm", AArch64::AEK_RDM, "+rdm", "-rdm")<br>
> AARCH64_ARCH_EXT_NAME("crypto", AArch64::AEK_CRYPTO, "+crypto","-crypto")<br>
> +AARCH64_ARCH_EXT_NAME("sm4", AArch64::AEK_SM4, "+sm4", "-sm4")<br>
> +AARCH64_ARCH_EXT_NAME("sha3", AArch64::AEK_SHA3, "+sha3", "-sha3")<br>
> +AARCH64_ARCH_EXT_NAME("sha2", AArch64::AEK_SHA2, "+sha2", "-sha2")<br>
> +AARCH64_ARCH_EXT_NAME("aes", AArch64::AEK_AES, "+aes", "-aes")<br>
> AARCH64_ARCH_EXT_NAME("dotprod", AArch64::AEK_DOTPROD, "+dotprod","-dotprod")<br>
> AARCH64_ARCH_EXT_NAME("fp", AArch64::AEK_FP, "+fp-armv8", "-fp-armv8")<br>
> AARCH64_ARCH_EXT_NAME("simd", AArch64::AEK_SIMD, "+neon", "-neon")<br>
><br>
> Modified: llvm/trunk/include/llvm/Support/ARMTargetParser.def<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/ARMTargetParser.def?rev=335953&r1=335952&r2=335953&view=diff">
http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/ARMTargetParser.def?rev=335953&r1=335952&r2=335953&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/include/llvm/Support/ARMTargetParser.def (original)<br>
> +++ llvm/trunk/include/llvm/Support/ARMTargetParser.def Fri Jun 29 01:43:19 2018<br>
> @@ -101,6 +101,10 @@ ARM_ARCH("armv8.3-a", ARMV8_3A, "8.3-A",<br>
> ARMBuildAttrs::CPUArch::v8_A, FK_CRYPTO_NEON_FP_ARMV8,<br>
> (ARM::AEK_SEC | ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM |<br>
> ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_RAS))<br>
> +ARM_ARCH("armv8.4-a", ARMV8_4A, "8.4-A", "v8.4a",<br>
> + ARMBuildAttrs::CPUArch::v8_A, FK_CRYPTO_NEON_FP_ARMV8,<br>
> + (ARM::AEK_SEC | ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM |<br>
> + ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_RAS))<br>
> ARM_ARCH("armv8-r", ARMV8R, "8-R", "v8r", ARMBuildAttrs::CPUArch::v8_R,<br>
> FK_NEON_FP_ARMV8,<br>
> (ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM | ARM::AEK_HWDIVTHUMB |<br>
> @@ -130,6 +134,8 @@ ARM_ARCH_EXT_NAME("invalid", ARM::AEK_I<br>
> ARM_ARCH_EXT_NAME("none", ARM::AEK_NONE, nullptr, nullptr)<br>
> ARM_ARCH_EXT_NAME("crc", ARM::AEK_CRC, "+crc", "-crc")<br>
> ARM_ARCH_EXT_NAME("crypto", ARM::AEK_CRYPTO, "+crypto","-crypto")<br>
> +ARM_ARCH_EXT_NAME("sha2", ARM::AEK_SHA2, "+sha2", "-sha2")<br>
> +ARM_ARCH_EXT_NAME("aes", ARM::AEK_AES, "+aes", "-aes")<br>
> ARM_ARCH_EXT_NAME("dotprod", ARM::AEK_DOTPROD, "+dotprod","-dotprod")<br>
> ARM_ARCH_EXT_NAME("dsp", ARM::AEK_DSP, "+dsp", "-dsp")<br>
> ARM_ARCH_EXT_NAME("fp", ARM::AEK_FP, nullptr, nullptr)<br>
><br>
> Modified: llvm/trunk/include/llvm/Support/TargetParser.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/TargetParser.h?rev=335953&r1=335952&r2=335953&view=diff">
http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/TargetParser.h?rev=335953&r1=335952&r2=335953&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/include/llvm/Support/TargetParser.h (original)<br>
> +++ llvm/trunk/include/llvm/Support/TargetParser.h Fri Jun 29 01:43:19 2018<br>
> @@ -86,6 +86,8 @@ enum ArchExtKind : unsigned {<br>
> AEK_RAS = 1 << 12,<br>
> AEK_SVE = 1 << 13,<br>
> AEK_DOTPROD = 1 << 14,<br>
> + AEK_SHA2 = 1 << 15,<br>
> + AEK_AES = 1 << 16,<br>
> // Unsupported extensions.<br>
> AEK_OS = 0x8000000,<br>
> AEK_IWMMXT = 0x10000000,<br>
> @@ -171,7 +173,11 @@ enum ArchExtKind : unsigned {<br>
> AEK_SVE = 1 << 9,<br>
> AEK_DOTPROD = 1 << 10,<br>
> AEK_RCPC = 1 << 11,<br>
> - AEK_RDM = 1 << 12<br>
> + AEK_RDM = 1 << 12,<br>
> + AEK_SM4 = 1 << 13,<br>
> + AEK_SHA3 = 1 << 14,<br>
> + AEK_SHA2 = 1 << 15,<br>
> + AEK_AES = 1 << 16,<br>
> };<br>
><br>
> StringRef getCanonicalArchName(StringRef Arch);<br>
><br>
> Modified: llvm/trunk/lib/Support/TargetParser.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/TargetParser.cpp?rev=335953&r1=335952&r2=335953&view=diff">
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/TargetParser.cpp?rev=335953&r1=335952&r2=335953&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/lib/Support/TargetParser.cpp (original)<br>
> +++ llvm/trunk/lib/Support/TargetParser.cpp Fri Jun 29 01:43:19 2018<br>
> @@ -480,6 +480,8 @@ bool llvm::AArch64::getArchFeatures(AArc<br>
> Features.push_back("+v8.2a");<br>
> if (AK == AArch64::ArchKind::ARMV8_3A)<br>
> Features.push_back("+v8.3a");<br>
> + if (AK == AArch64::ArchKind::ARMV8_4A)<br>
> + Features.push_back("+v8.4a");<br>
><br>
> return AK != AArch64::ArchKind::INVALID;<br>
> }<br>
> @@ -585,6 +587,7 @@ static StringRef getArchSynonym(StringRe<br>
> .Case("v8.1a", "v8.1-a")<br>
> .Case("v8.2a", "v8.2-a")<br>
> .Case("v8.3a", "v8.3-a")<br>
> + .Case("v8.4a", "v8.4-a")<br>
> .Case("v8r", "v8-r")<br>
> .Case("v8m.base", "v8-m.base")<br>
> .Case("v8m.main", "v8-m.main")<br>
> @@ -752,6 +755,7 @@ ARM::ProfileKind ARM::parseArchProfile(S<br>
> case ARM::ArchKind::ARMV8_1A:<br>
> case ARM::ArchKind::ARMV8_2A:<br>
> case ARM::ArchKind::ARMV8_3A:<br>
> + case ARM::ArchKind::ARMV8_4A:<br>
> return ARM::ProfileKind::A;<br>
> case ARM::ArchKind::ARMV2:<br>
> case ARM::ArchKind::ARMV2A:<br>
> @@ -814,6 +818,7 @@ unsigned llvm::ARM::parseArchVersion(Str<br>
> case ARM::ArchKind::ARMV8_1A:<br>
> case ARM::ArchKind::ARMV8_2A:<br>
> case ARM::ArchKind::ARMV8_3A:<br>
> + case ARM::ArchKind::ARMV8_4A:<br>
> case ARM::ArchKind::ARMV8R:<br>
> case ARM::ArchKind::ARMV8MBaseline:<br>
> case ARM::ArchKind::ARMV8MMainline:<br>
><br>
> Modified: llvm/trunk/lib/Support/Triple.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Triple.cpp?rev=335953&r1=335952&r2=335953&view=diff">
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Triple.cpp?rev=335953&r1=335952&r2=335953&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/lib/Support/Triple.cpp (original)<br>
> +++ llvm/trunk/lib/Support/Triple.cpp Fri Jun 29 01:43:19 2018<br>
> @@ -590,6 +590,8 @@ static Triple::SubArchType parseSubArch(<br>
> return Triple::ARMSubArch_v8_2a;<br>
> case ARM::ArchKind::ARMV8_3A:<br>
> return Triple::ARMSubArch_v8_3a;<br>
> + case ARM::ArchKind::ARMV8_4A:<br>
> + return Triple::ARMSubArch_v8_4a;<br>
> case ARM::ArchKind::ARMV8R:<br>
> return Triple::ARMSubArch_v8r;<br>
> case ARM::ArchKind::ARMV8MBaseline:<br>
><br>
> Modified: llvm/trunk/lib/Target/AArch64/AArch64.td<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64.td?rev=335953&r1=335952&r2=335953&view=diff">
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64.td?rev=335953&r1=335952&r2=335953&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/lib/Target/AArch64/AArch64.td (original)<br>
> +++ llvm/trunk/lib/Target/AArch64/AArch64.td Fri Jun 29 01:43:19 2018<br>
> @@ -26,8 +26,32 @@ def FeatureFPARMv8 : SubtargetFeature<"f<br>
> def FeatureNEON : SubtargetFeature<"neon", "HasNEON", "true",<br>
> "Enable Advanced SIMD instructions", [FeatureFPARMv8]>;<br>
><br>
> +def FeatureSM4 : SubtargetFeature<<br>
> + "sm4", "HasSM4", "true",<br>
> + "Enable SM3 and SM4 support", [FeatureNEON]>;<br>
> +<br>
> +def FeatureSHA2 : SubtargetFeature<<br>
> + "sha2", "HasSHA2", "true",<br>
> + "Enable SHA1 and SHA256 support", [FeatureNEON]>;<br>
> +<br>
> +def FeatureSHA3 : SubtargetFeature<<br>
> + "sha3", "HasSHA3", "true",<br>
> + "Enable SHA512 and SHA3 support", [FeatureNEON, FeatureSHA2]>;<br>
> +<br>
> +def FeatureAES : SubtargetFeature<<br>
> + "aes", "HasAES", "true",<br>
> + "Enable AES support", [FeatureNEON]>;<br>
> +<br>
> +// Crypto has been split up and any combination is now valid (see the<br>
> +// crypto defintions above). Also, crypto is now context sensitive:<br>
> +// it has a different meaning for e.g. Armv8.4 than it has for Armv8.2.<br>
> +// Therefore, we rely on Clang, the user interacing tool, to pass on the<br>
> +// appropriate crypto options. But here in the backend, crypto has very little<br>
> +// meaning anymore. We kept the Crypto defintion here for backward<br>
> +// compatibility, and now imply features SHA2 and AES, which was the<br>
> +// "traditional" meaning of Crypto.<br>
> def FeatureCrypto : SubtargetFeature<"crypto", "HasCrypto", "true",<br>
> - "Enable cryptographic instructions", [FeatureNEON]>;<br>
> + "Enable cryptographic instructions", [FeatureNEON, FeatureSHA2, FeatureAES]>;<br>
><br>
> def FeatureCRC : SubtargetFeature<"crc", "HasCRC", "true",<br>
> "Enable ARMv8 CRC-32 checksum instructions">;<br>
> @@ -185,6 +209,9 @@ def HasV8_2aOps : SubtargetFeature<"v8.2<br>
> def HasV8_3aOps : SubtargetFeature<"v8.3a", "HasV8_3aOps", "true",<br>
> "Support ARM v8.3a instructions", [HasV8_2aOps, FeatureRCPC]>;<br>
><br>
> +def HasV8_4aOps : SubtargetFeature<"v8.4a", "HasV8_4aOps", "true",<br>
> + "Support ARM v8.4a instructions", [HasV8_3aOps, FeatureDotProd]>;<br>
> +<br>
> //===----------------------------------------------------------------------===//<br>
> // Register File Description<br>
> //===----------------------------------------------------------------------===//<br>
><br>
> Modified: llvm/trunk/lib/Target/AArch64/AArch64Subtarget.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64Subtarget.h?rev=335953&r1=335952&r2=335953&view=diff">
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64Subtarget.h?rev=335953&r1=335952&r2=335953&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/lib/Target/AArch64/AArch64Subtarget.h (original)<br>
> +++ llvm/trunk/lib/Target/AArch64/AArch64Subtarget.h Fri Jun 29 01:43:19 2018<br>
> @@ -66,6 +66,7 @@ protected:<br>
> bool HasV8_1aOps = false;<br>
> bool HasV8_2aOps = false;<br>
> bool HasV8_3aOps = false;<br>
> + bool HasV8_4aOps = false;<br>
><br>
> bool HasFPARMv8 = false;<br>
> bool HasNEON = false;<br>
> @@ -78,6 +79,14 @@ protected:<br>
> bool HasPerfMon = false;<br>
> bool HasFullFP16 = false;<br>
> bool HasSPE = false;<br>
> +<br>
> + // ARMv8.4 Crypto extensions<br>
> + bool HasSM4 = true;<br>
> + bool HasSHA3 = true;<br>
> +<br>
> + bool HasSHA2 = true;<br>
> + bool HasAES = true;<br>
> +<br>
> bool HasLSLFast = false;<br>
> bool HasSVE = false;<br>
> bool HasRCPC = false;<br>
> @@ -201,6 +210,7 @@ public:<br>
> bool hasV8_1aOps() const { return HasV8_1aOps; }<br>
> bool hasV8_2aOps() const { return HasV8_2aOps; }<br>
> bool hasV8_3aOps() const { return HasV8_3aOps; }<br>
> + bool hasV8_4aOps() const { return HasV8_4aOps; }<br>
><br>
> bool hasZeroCycleRegMove() const { return HasZeroCycleRegMove; }<br>
><br>
> @@ -228,6 +238,10 @@ public:<br>
> bool hasLSE() const { return HasLSE; }<br>
> bool hasRAS() const { return HasRAS; }<br>
> bool hasRDM() const { return HasRDM; }<br>
> + bool hasSM4() const { return HasSM4; }<br>
> + bool hasSHA3() const { return HasSHA3; }<br>
> + bool hasSHA2() const { return HasSHA2; }<br>
> + bool hasAES() const { return HasAES; }<br>
> bool balanceFPOps() const { return BalanceFPOps; }<br>
> bool predictableSelectIsExpensive() const {<br>
> return PredictableSelectIsExpensive;<br>
><br>
> Modified: llvm/trunk/lib/Target/ARM/ARM.td<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARM.td?rev=335953&r1=335952&r2=335953&view=diff">
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARM.td?rev=335953&r1=335952&r2=335953&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/lib/Target/ARM/ARM.td (original)<br>
> +++ llvm/trunk/lib/Target/ARM/ARM.td Fri Jun 29 01:43:19 2018<br>
> @@ -109,10 +109,16 @@ def Feature8MSecExt : SubtargetFea<br>
> "Enable support for ARMv8-M "<br>
> "Security Extensions">;<br>
><br>
> +def FeatureSHA2 : SubtargetFeature<"sha2", "HasSHA2", "true",<br>
> + "Enable SHA1 and SHA256 support", [FeatureNEON]>;<br>
> +<br>
> +def FeatureAES : SubtargetFeature<"aes", "HasAES", "true",<br>
> + "Enable AES support", [FeatureNEON]>;<br>
> +<br>
> def FeatureCrypto : SubtargetFeature<"crypto", "HasCrypto", "true",<br>
> "Enable support for "<br>
> "Cryptography extensions",<br>
> - [FeatureNEON]>;<br>
> + [FeatureNEON, FeatureSHA2, FeatureAES]>;<br>
><br>
> def FeatureCRC : SubtargetFeature<"crc", "HasCRC", "true",<br>
> "Enable support for CRC instructions">;<br>
> @@ -419,6 +425,10 @@ def HasV8_3aOps : SubtargetFeature<"v8<br>
> "Support ARM v8.3a instructions",<br>
> [HasV8_2aOps]>;<br>
><br>
> +def HasV8_4aOps : SubtargetFeature<"v8.4a", "HasV8_4aOps", "true",<br>
> + "Support ARM v8.4a instructions",<br>
> + [HasV8_3aOps, FeatureDotProd]>;<br>
> +<br>
> //===----------------------------------------------------------------------===//<br>
> // ARM Processor subtarget features.<br>
> //<br>
> @@ -624,6 +634,20 @@ def ARMv83a : Architecture<"armv8.3-a"<br>
> FeatureCRC,<br>
> FeatureRAS]>;<br>
><br>
> +def ARMv84a : Architecture<"armv8.4-a", "ARMv84a", [HasV8_4aOps,<br>
> + FeatureAClass,<br>
> + FeatureDB,<br>
> + FeatureFPARMv8,<br>
> + FeatureNEON,<br>
> + FeatureDSP,<br>
> + FeatureTrustZone,<br>
> + FeatureMP,<br>
> + FeatureVirtualization,<br>
> + FeatureCrypto,<br>
> + FeatureCRC,<br>
> + FeatureRAS,<br>
> + FeatureDotProd]>;<br>
> +<br>
> def ARMv8r : Architecture<"armv8-r", "ARMv8r", [HasV8Ops,<br>
> FeatureRClass,<br>
> FeatureDB,<br>
><br>
> Modified: llvm/trunk/lib/Target/ARM/ARMInstrInfo.td<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMInstrInfo.td?rev=335953&r1=335952&r2=335953&view=diff">
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMInstrInfo.td?rev=335953&r1=335952&r2=335953&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/lib/Target/ARM/ARMInstrInfo.td (original)<br>
> +++ llvm/trunk/lib/Target/ARM/ARMInstrInfo.td Fri Jun 29 01:43:19 2018<br>
> @@ -253,6 +253,8 @@ def HasV8_2a : Predicate<"Subtar<br>
> AssemblerPredicate<"HasV8_2aOps", "armv8.2a">;<br>
> def HasV8_3a : Predicate<"Subtarget->hasV8_3aOps()">,<br>
> AssemblerPredicate<"HasV8_3aOps", "armv8.3a">;<br>
> +def HasV8_4a : Predicate<"Subtarget->hasV8_4aOps()">,<br>
> + AssemblerPredicate<"HasV8_4aOps", "armv8.4a">;<br>
> def NoVFP : Predicate<"!Subtarget->hasVFP2()">;<br>
> def HasVFP2 : Predicate<"Subtarget->hasVFP2()">,<br>
> AssemblerPredicate<"FeatureVFP2", "VFP2">;<br>
> @@ -267,6 +269,10 @@ def HasFPARMv8 : Predicate<"Subtar<br>
> AssemblerPredicate<"FeatureFPARMv8", "FPARMv8">;<br>
> def HasNEON : Predicate<"Subtarget->hasNEON()">,<br>
> AssemblerPredicate<"FeatureNEON", "NEON">;<br>
> +def HasSHA2 : Predicate<"Subtarget->hasSHA2()">,<br>
> + AssemblerPredicate<"FeatureSHA2", "sha2">;<br>
> +def HasAES : Predicate<"Subtarget->hasAES()">,<br>
> + AssemblerPredicate<"FeatureAES", "aes">;<br>
> def HasCrypto : Predicate<"Subtarget->hasCrypto()">,<br>
> AssemblerPredicate<"FeatureCrypto", "crypto">;<br>
> def HasDotProd : Predicate<"Subtarget->hasDotProd()">,<br>
><br>
> Modified: llvm/trunk/lib/Target/ARM/ARMSubtarget.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMSubtarget.h?rev=335953&r1=335952&r2=335953&view=diff">
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMSubtarget.h?rev=335953&r1=335952&r2=335953&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/lib/Target/ARM/ARMSubtarget.h (original)<br>
> +++ llvm/trunk/lib/Target/ARM/ARMSubtarget.h Fri Jun 29 01:43:19 2018<br>
> @@ -105,6 +105,7 @@ protected:<br>
> ARMv81a,<br>
> ARMv82a,<br>
> ARMv83a,<br>
> + ARMv84a,<br>
> ARMv8a,<br>
> ARMv8mBaseline,<br>
> ARMv8mMainline,<br>
> @@ -151,6 +152,7 @@ protected:<br>
> bool HasV8_1aOps = false;<br>
> bool HasV8_2aOps = false;<br>
> bool HasV8_3aOps = false;<br>
> + bool HasV8_4aOps = false;<br>
> bool HasV8MBaselineOps = false;<br>
> bool HasV8MMainlineOps = false;<br>
><br>
> @@ -299,6 +301,12 @@ protected:<br>
> /// Has8MSecExt - if true, processor supports ARMv8-M Security Extensions<br>
> bool Has8MSecExt = false;<br>
><br>
> + /// HasSHA2 - if true, processor supports SHA1 and SHA256<br>
> + bool HasSHA2 = false;<br>
> +<br>
> + /// HasAES - if true, processor supports AES<br>
> + bool HasAES = false;<br>
> +<br>
> /// HasCrypto - if true, processor supports Cryptography extensions<br>
> bool HasCrypto = false;<br>
><br>
> @@ -513,6 +521,7 @@ public:<br>
> bool hasV8_1aOps() const { return HasV8_1aOps; }<br>
> bool hasV8_2aOps() const { return HasV8_2aOps; }<br>
> bool hasV8_3aOps() const { return HasV8_3aOps; }<br>
> + bool hasV8_4aOps() const { return HasV8_4aOps; }<br>
> bool hasV8MBaselineOps() const { return HasV8MBaselineOps; }<br>
> bool hasV8MMainlineOps() const { return HasV8MMainlineOps; }<br>
><br>
> @@ -538,6 +547,8 @@ public:<br>
> bool hasVFP4() const { return HasVFPv4; }<br>
> bool hasFPARMv8() const { return HasFPARMv8; }<br>
> bool hasNEON() const { return HasNEON; }<br>
> + bool hasSHA2() const { return HasSHA2; }<br>
> + bool hasAES() const { return HasAES; }<br>
> bool hasCrypto() const { return HasCrypto; }<br>
> bool hasDotProd() const { return HasDotProd; }<br>
> bool hasCRC() const { return HasCRC; }<br>
><br>
> Modified: llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp?rev=335953&r1=335952&r2=335953&view=diff">
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp?rev=335953&r1=335952&r2=335953&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp (original)<br>
> +++ llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp Fri Jun 29 01:43:19 2018<br>
> @@ -859,6 +859,8 @@ void ARMTargetELFStreamer::emitArchDefau<br>
> case ARM::ArchKind::ARMV8A:<br>
> case ARM::ArchKind::ARMV8_1A:<br>
> case ARM::ArchKind::ARMV8_2A:<br>
> + case ARM::ArchKind::ARMV8_3A:<br>
> + case ARM::ArchKind::ARMV8_4A:<br>
> setAttributeItem(CPU_arch_profile, ApplicationProfile, false);<br>
> setAttributeItem(ARM_ISA_use, Allowed, false);<br>
> setAttributeItem(THUMB_ISA_use, AllowThumb32, false);<br>
><br>
><br>
> _______________________________________________<br>
> llvm-commits mailing list<br>
> llvm-commits@lists.llvm.org<br>
> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</div>
</span></font></div>
IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose,
or store or copy the information in any medium. Thank you.
</body>
</html>