|
@@ -27,7 +27,8 @@ const char *ARMArch[] = {
|
|
"armv8l", "armv8.1-a", "armv8.1a", "armv8.2-a", "armv8.2a",
|
|
"armv8l", "armv8.1-a", "armv8.1a", "armv8.2-a", "armv8.2a",
|
|
"armv8.3-a", "armv8.3a", "armv8.4-a", "armv8.4a", "armv8.5-a",
|
|
"armv8.3-a", "armv8.3a", "armv8.4-a", "armv8.4a", "armv8.5-a",
|
|
"armv8.5a", "armv8-r", "armv8r", "armv8-m.base", "armv8m.base",
|
|
"armv8.5a", "armv8-r", "armv8r", "armv8-m.base", "armv8m.base",
|
|
- "armv8-m.main", "armv8m.main", "iwmmxt", "iwmmxt2", "xscale"
|
|
|
|
|
|
+ "armv8-m.main", "armv8m.main", "iwmmxt", "iwmmxt2", "xscale",
|
|
|
|
+ "armv8.1-m.main",
|
|
};
|
|
};
|
|
|
|
|
|
bool testARMCPU(StringRef CPUName, StringRef ExpectedArch,
|
|
bool testARMCPU(StringRef CPUName, StringRef ExpectedArch,
|
|
@@ -417,6 +418,9 @@ TEST(TargetParserTest, testARMArch) {
|
|
EXPECT_TRUE(
|
|
EXPECT_TRUE(
|
|
testARMArch("armv8-m.main", "generic", "v8m.main",
|
|
testARMArch("armv8-m.main", "generic", "v8m.main",
|
|
ARMBuildAttrs::CPUArch::v8_M_Main));
|
|
ARMBuildAttrs::CPUArch::v8_M_Main));
|
|
|
|
+ EXPECT_TRUE(
|
|
|
|
+ testARMArch("armv8.1-m.main", "generic", "v8.1m.main",
|
|
|
|
+ ARMBuildAttrs::CPUArch::v8_1_M_Main));
|
|
EXPECT_TRUE(
|
|
EXPECT_TRUE(
|
|
testARMArch("iwmmxt", "iwmmxt", "",
|
|
testARMArch("iwmmxt", "iwmmxt", "",
|
|
ARMBuildAttrs::CPUArch::v5TE));
|
|
ARMBuildAttrs::CPUArch::v5TE));
|
|
@@ -569,7 +573,7 @@ TEST(TargetParserTest, ARMExtensionFeatures) {
|
|
unsigned Extensions = ARM::AEK_CRC | ARM::AEK_CRYPTO | ARM::AEK_DSP |
|
|
unsigned Extensions = ARM::AEK_CRC | ARM::AEK_CRYPTO | ARM::AEK_DSP |
|
|
ARM::AEK_HWDIVARM | ARM::AEK_HWDIVTHUMB | ARM::AEK_MP |
|
|
ARM::AEK_HWDIVARM | ARM::AEK_HWDIVTHUMB | ARM::AEK_MP |
|
|
ARM::AEK_SEC | ARM::AEK_VIRT | ARM::AEK_RAS | ARM::AEK_FP16 |
|
|
ARM::AEK_SEC | ARM::AEK_VIRT | ARM::AEK_RAS | ARM::AEK_FP16 |
|
|
- ARM::AEK_FP16FML;
|
|
|
|
|
|
+ ARM::AEK_FP16FML | ARM::AEK_FP_DP;
|
|
|
|
|
|
for (unsigned i = 0; i <= Extensions; i++)
|
|
for (unsigned i = 0; i <= Extensions; i++)
|
|
EXPECT_TRUE(i == 0 ? !ARM::getExtensionFeatures(i, Features)
|
|
EXPECT_TRUE(i == 0 ? !ARM::getExtensionFeatures(i, Features)
|
|
@@ -605,7 +609,9 @@ TEST(TargetParserTest, ARMArchExtFeature) {
|
|
{"iwmmxt2", "noiwmmxt2", nullptr, nullptr},
|
|
{"iwmmxt2", "noiwmmxt2", nullptr, nullptr},
|
|
{"maverick", "maverick", nullptr, nullptr},
|
|
{"maverick", "maverick", nullptr, nullptr},
|
|
{"xscale", "noxscale", nullptr, nullptr},
|
|
{"xscale", "noxscale", nullptr, nullptr},
|
|
- {"sb", "nosb", "+sb", "-sb"}};
|
|
|
|
|
|
+ {"sb", "nosb", "+sb", "-sb"},
|
|
|
|
+ {"mve", "nomve", "+mve", "-mve"},
|
|
|
|
+ {"mve.fp", "nomve.fp", "+mve.fp", "-mve.fp"}};
|
|
|
|
|
|
for (unsigned i = 0; i < array_lengthof(ArchExt); i++) {
|
|
for (unsigned i = 0; i < array_lengthof(ArchExt); i++) {
|
|
EXPECT_EQ(StringRef(ArchExt[i][2]), ARM::getArchExtFeature(ArchExt[i][0]));
|
|
EXPECT_EQ(StringRef(ArchExt[i][2]), ARM::getArchExtFeature(ArchExt[i][0]));
|
|
@@ -628,7 +634,7 @@ TEST(TargetParserTest, ARMparseArchEndianAndISA) {
|
|
"v7", "v7a", "v7ve", "v7hl", "v7l", "v7-r", "v7r", "v7-m",
|
|
"v7", "v7a", "v7ve", "v7hl", "v7l", "v7-r", "v7r", "v7-m",
|
|
"v7m", "v7k", "v7s", "v7e-m", "v7em", "v8-a", "v8", "v8a",
|
|
"v7m", "v7k", "v7s", "v7e-m", "v7em", "v8-a", "v8", "v8a",
|
|
"v8l", "v8.1-a", "v8.1a", "v8.2-a", "v8.2a", "v8.3-a", "v8.3a", "v8.4-a",
|
|
"v8l", "v8.1-a", "v8.1a", "v8.2-a", "v8.2a", "v8.3-a", "v8.3a", "v8.4-a",
|
|
- "v8.4a", "v8.5-a","v8.5a", "v8-r"
|
|
|
|
|
|
+ "v8.4a", "v8.5-a","v8.5a", "v8-r", "v8m.base", "v8m.main", "v8.1m.main"
|
|
};
|
|
};
|
|
|
|
|
|
for (unsigned i = 0; i < array_lengthof(Arch); i++) {
|
|
for (unsigned i = 0; i < array_lengthof(Arch); i++) {
|
|
@@ -677,6 +683,7 @@ TEST(TargetParserTest, ARMparseArchProfile) {
|
|
case ARM::ArchKind::ARMV7EM:
|
|
case ARM::ArchKind::ARMV7EM:
|
|
case ARM::ArchKind::ARMV8MMainline:
|
|
case ARM::ArchKind::ARMV8MMainline:
|
|
case ARM::ArchKind::ARMV8MBaseline:
|
|
case ARM::ArchKind::ARMV8MBaseline:
|
|
|
|
+ case ARM::ArchKind::ARMV8_1MMainline:
|
|
EXPECT_EQ(ARM::ProfileKind::M, ARM::parseArchProfile(ARMArch[i]));
|
|
EXPECT_EQ(ARM::ProfileKind::M, ARM::parseArchProfile(ARMArch[i]));
|
|
break;
|
|
break;
|
|
case ARM::ArchKind::ARMV7R:
|
|
case ARM::ArchKind::ARMV7R:
|