llvm.org GIT mirror llvm / 7cfbd6d
[AArch64] Create feature set for Exynos M4 Complete the feature set for Exynos M4 and update test cases. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350953 91177308-0d34-0410-b5e6-96231b3b80d8 Evandro Menezes 1 year, 9 months ago
6 changed file(s) with 46 addition(s) and 12 deletion(s). Raw diff Collapse all Expand all
101101 (AArch64::AEK_CRC))
102102 AARCH64_CPU_NAME("exynos-m3", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
103103 (AArch64::AEK_CRC))
104 AARCH64_CPU_NAME("exynos-m4", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
105 (AArch64::AEK_CRC))
104 AARCH64_CPU_NAME("exynos-m4", ARMV8_2A, FK_CRYPTO_NEON_FP_ARMV8, false,
105 (AArch64::AEK_FP16 | AArch64::AEK_DOTPROD))
106106 AARCH64_CPU_NAME("falkor", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
107107 (AArch64::AEK_CRC | AArch64::AEK_RDM))
108108 AARCH64_CPU_NAME("saphira", ARMV8_3A, FK_CRYPTO_NEON_FP_ARMV8, false,
265265 ARM_CPU_NAME("exynos-m1", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false, ARM::AEK_CRC)
266266 ARM_CPU_NAME("exynos-m2", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false, ARM::AEK_CRC)
267267 ARM_CPU_NAME("exynos-m3", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false, ARM::AEK_CRC)
268 ARM_CPU_NAME("exynos-m4", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false, ARM::AEK_CRC)
268 ARM_CPU_NAME("exynos-m4", ARMV8_2A, FK_CRYPTO_NEON_FP_ARMV8, false,
269 (ARM::AEK_FP16 | ARM::AEK_DOTPROD))
269270 ARM_CPU_NAME("kryo", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false, ARM::AEK_CRC)
270271 // Non-standard Arch names.
271272 ARM_CPU_NAME("iwmmxt", IWMMXT, FK_NONE, true, ARM::AEK_NONE)
539539 FeaturePredictableSelectIsExpensive,
540540 FeatureZCZeroingFP]>;
541541
542 def ProcExynosM4 : SubtargetFeature<"exynosm4", "ARMProcFamily", "ExynosM3",
543 "Samsung Exynos-M4 processors",
544 [HasV8_2aOps,
545 FeatureArithmeticBccFusion,
546 FeatureArithmeticCbzFusion,
547 FeatureCrypto,
548 FeatureDotProd,
549 FeatureExynosCheapAsMoveHandling,
550 FeatureForce32BitJumpTables,
551 FeatureFP16FML,
552 FeatureFuseAddress,
553 FeatureFuseAES,
554 FeatureFuseCCSelect,
555 FeatureFuseLiterals,
556 FeatureLSLFast,
557 FeaturePerfMon,
558 FeaturePostRAScheduler,
559 FeatureZCZeroing]>;
560
542561 def ProcKryo : SubtargetFeature<"kryo", "ARMProcFamily", "Kryo",
543562 "Qualcomm Kryo processors", [
544563 FeatureCRC,
676695 def : ProcessorModel<"exynos-m1", ExynosM1Model, [ProcExynosM1]>;
677696 def : ProcessorModel<"exynos-m2", ExynosM1Model, [ProcExynosM2]>;
678697 def : ProcessorModel<"exynos-m3", ExynosM3Model, [ProcExynosM3]>;
679 def : ProcessorModel<"exynos-m4", ExynosM3Model, [ProcExynosM3]>;
698 def : ProcessorModel<"exynos-m4", ExynosM3Model, [ProcExynosM4]>;
680699 def : ProcessorModel<"falkor", FalkorModel, [ProcFalkor]>;
681700 def : ProcessorModel<"saphira", FalkorModel, [ProcSaphira]>;
682701 def : ProcessorModel<"kryo", KryoModel, [ProcKryo]>;
10781078 def : ProcNoItin<"exynos-m2", [ARMv8a, ProcExynos]>;
10791079 def : ProcNoItin<"exynos-m3", [ARMv8a, ProcExynos]>;
10801080 def : ProcNoItin<"exynos-m4", [ARMv8a, ProcExynos]>;
1081 def : ProcNoItin<"exynos-m4", [ARMv82a, ProcExynos,
1082 FeatureFullFP16,
1083 FeatureDotProd]>;
10811084
10821085 def : ProcNoItin<"kryo", [ARMv8a, ProcKryo,
10831086 FeatureHWDivThumb,
16221622 ; EXYNOS-M4: .eabi_attribute 8, 1
16231623 ; EXYNOS-M4: .eabi_attribute 9, 2
16241624 ; EXYNOS-M4: .fpu crypto-neon-fp-armv8
1625 ; EXYNOS-M4: .eabi_attribute 12, 3
1625 ; EXYNOS-M4: .eabi_attribute 12, 4
16261626 ; EXYNOS-M4-NOT: .eabi_attribute 27
16271627 ; EXYNOS-M4: .eabi_attribute 36, 1
16281628 ; EXYNOS-M4: .eabi_attribute 42, 1
264264 ARM::AEK_VIRT | ARM::AEK_HWDIVARM |
265265 ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP,
266266 "8-A"));
267 EXPECT_TRUE(testARMCPU("exynos-m4", "armv8-a", "crypto-neon-fp-armv8",
267 EXPECT_TRUE(testARMCPU("exynos-m4", "armv8.2-a", "crypto-neon-fp-armv8",
268268 ARM::AEK_CRC | ARM::AEK_SEC | ARM::AEK_MP |
269269 ARM::AEK_VIRT | ARM::AEK_HWDIVARM |
270 ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP,
271 "8-A"));
270 ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_DOTPROD |
271 ARM::AEK_FP16 | ARM::AEK_RAS,
272 "8.2-A"));
272273 EXPECT_TRUE(testARMCPU("cortex-m23", "armv8-m.base", "none",
273274 ARM::AEK_HWDIVTHUMB, "8-M.Baseline"));
274275 EXPECT_TRUE(testARMCPU("cortex-m33", "armv8-m.main", "fpv5-sp-d16",
758759 AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_FP |
759760 AArch64::AEK_SIMD, "8-A"));
760761 EXPECT_TRUE(testAArch64CPU(
761 "exynos-m4", "armv8-a", "crypto-neon-fp-armv8",
762 AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_FP |
763 AArch64::AEK_SIMD, "8-A"));
762 "exynos-m4", "armv8.2-a", "crypto-neon-fp-armv8",
763 AArch64::AEK_CRC | AArch64::AEK_CRYPTO |
764 AArch64::AEK_DOTPROD | AArch64::AEK_FP | AArch64::AEK_FP16 |
765 AArch64::AEK_LSE | AArch64::AEK_RAS | AArch64::AEK_RDM |
766 AArch64::AEK_SIMD, "8.2-A"));
764767 EXPECT_TRUE(testAArch64CPU(
765768 "falkor", "armv8-a", "crypto-neon-fp-armv8",
766769 AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_FP |
869872 AArch64::ArchKind::INVALID, "ras"));
870873 EXPECT_FALSE(testAArch64Extension("exynos-m3",
871874 AArch64::ArchKind::INVALID, "ras"));
875 EXPECT_TRUE(testAArch64Extension("exynos-m4",
876 AArch64::ArchKind::INVALID, "lse"));
877 EXPECT_TRUE(testAArch64Extension("exynos-m4",
878 AArch64::ArchKind::INVALID, "rdm"));
879 EXPECT_TRUE(testAArch64Extension("exynos-m4",
880 AArch64::ArchKind::INVALID, "ras"));
872881 EXPECT_FALSE(testAArch64Extension("exynos-m4",
873 AArch64::ArchKind::INVALID, "ras"));
882 AArch64::ArchKind::INVALID, "fullfp16"));
883 EXPECT_TRUE(testAArch64Extension("exynos-m4",
884 AArch64::ArchKind::INVALID, "dotprod"));
874885 EXPECT_TRUE(testAArch64Extension("falkor",
875886 AArch64::ArchKind::INVALID, "rdm"));
876887 EXPECT_FALSE(testAArch64Extension("kryo",