Skip to content

Commit 54e1b1b

Browse files
AlbertHuang-CPULukacma
authored andcommitted
[ARM] [AArch32] Add support for Arm China STAR-MC3 CPU (llvm#163709)
STAR-MC3 is an Armv8.1m CPU. Technical specificationa available at: https://www.armchina.com/download/Documents/TRM?infoId=240
1 parent 91cd2db commit 54e1b1b

File tree

7 files changed

+28
-1
lines changed

7 files changed

+28
-1
lines changed

clang/test/CodeGen/arm-target-features.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,9 @@
116116
// RUN: %clang_cc1 -triple thumb-linux-gnueabi -target-cpu cortex-m52 -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-ARMV81M-CORTEX-M52-LINUX
117117
// CHECK-ARMV81M-CORTEX-M52-LINUX: "target-features"="+armv8.1-m.main,+dsp,+fp-armv8d16,+fp-armv8d16sp,+fp16,+fp64,+fullfp16,+hwdiv,+lob,+mve,+mve.fp,+pacbti,+ras,+thumb-mode,+vfp2,+vfp2sp,+vfp3d16,+vfp3d16sp,+vfp4d16,+vfp4d16sp"
118118

119+
// RUN: %clang_cc1 -triple thumb-linux-gnueabi -target-cpu star-mc3 -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-ARMV81M-STAR-MC3-LINUX
120+
// CHECK-ARMV81M-STAR-MC3-LINUX: "target-features"="+armv8.1-m.main,+dsp,+fp-armv8d16,+fp-armv8d16sp,+fp16,+fp64,+fullfp16,+hwdiv,+lob,+mve,+mve.fp,+pacbti,+ras,+thumb-mode,+vfp2,+vfp2sp,+vfp3d16,+vfp3d16sp,+vfp4d16,+vfp4d16sp"
121+
119122
// RUN: %clang_cc1 -triple thumbv9.3a-linux-gnueabihf -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK-ARCH93
120123
// CHECK-ARCH93: "target-features"="+armv9.3-a,+thumb-mode,+v8.1a,+v8.2a,+v8.3a,+v8.4a,+v8.5a,+v8.6a,+v8.7a,+v8.8a,+v9.1a,+v9.2a,+v9.3a,+v9a"
121124

clang/test/Driver/arm-cortex-cpus-2.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -585,6 +585,9 @@
585585
// RUN: %clang -target arm -mcpu=cortex-m52 -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-CORTEX-M52 %s
586586
// CHECK-CORTEX-M52: "-cc1"{{.*}} "-triple" "thumbv8.1m.main-{{.*}} "-target-cpu" "cortex-m52"
587587

588+
// RUN: %clang -target arm -mcpu=star-mc3 -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-STAR-MC3 %s
589+
// CHECK-STAR-MC3: "-cc1"{{.*}} "-triple" "thumbv8.1m.main-{{.*}} "-target-cpu" "star-mc3"
590+
588591
// RUN: %clang -target arm -mcpu=neoverse-n2 -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-NEOVERSE-N2 %s
589592
// CHECK-NEOVERSE-N2: "-cc1"{{.*}} "-triple" "armv9a-{{.*}}" "-target-cpu" "neoverse-n2"
590593

clang/test/Misc/target-invalid-cpu-note/arm.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@
7070
// CHECK-SAME: {{^}}, cortex-m55
7171
// CHECK-SAME: {{^}}, cortex-m85
7272
// CHECK-SAME: {{^}}, cortex-m52
73+
// CHECK-SAME: {{^}}, star-mc3
7374
// CHECK-SAME: {{^}}, cortex-a32
7475
// CHECK-SAME: {{^}}, cortex-a35
7576
// CHECK-SAME: {{^}}, cortex-a53

llvm/include/llvm/TargetParser/ARMTargetParser.def

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -357,6 +357,9 @@ ARM_CPU_NAME("cortex-m85", ARMV8_1MMainline, FK_FP_ARMV8_FULLFP16_D16, false,
357357
ARM_CPU_NAME("cortex-m52", ARMV8_1MMainline, FK_FP_ARMV8_FULLFP16_D16, false,
358358
(ARM::AEK_DSP | ARM::AEK_MVE | ARM::AEK_FP | ARM::AEK_FP16 |
359359
ARM::AEK_RAS | ARM::AEK_PACBTI))
360+
ARM_CPU_NAME("star-mc3", ARMV8_1MMainline, FK_FP_ARMV8_FULLFP16_D16, false,
361+
(ARM::AEK_DSP | ARM::AEK_MVE | ARM::AEK_FP | ARM::AEK_FP16 |
362+
ARM::AEK_RAS | ARM::AEK_PACBTI))
360363
ARM_CPU_NAME("cortex-a32", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false, ARM::AEK_CRC)
361364
ARM_CPU_NAME("cortex-a35", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false, ARM::AEK_CRC)
362365
ARM_CPU_NAME("cortex-a53", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false, ARM::AEK_CRC)

llvm/lib/Target/ARM/ARMProcessors.td

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -421,6 +421,17 @@ def : ProcessorModel<"cortex-m52", CortexM55Model, [ARMv81mMainline,
421421
FeatureMVEVectorCostFactor1,
422422
HasMVEFloatOps]>;
423423

424+
def : ProcessorModel<"star-mc3", CortexM55Model, [ARMv81mMainline,
425+
FeatureDSP,
426+
FeatureFPARMv8_D16,
427+
FeatureHasNoBranchPredictor,
428+
FeaturePACBTI,
429+
FeatureUseMISched,
430+
FeaturePreferBranchAlign32,
431+
FeatureHasSlowFPVMLx,
432+
FeatureMVEVectorCostFactor1,
433+
HasMVEFloatOps]>;
434+
424435
def : ProcNoItin<"cortex-a32", [ARMv8a,
425436
FeatureHWDivThumb,
426437
FeatureHWDivARM,

llvm/lib/TargetParser/Host.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -369,6 +369,7 @@ getHostCPUNameForARMFromComponents(StringRef Implementer, StringRef Hardware,
369369
if (Implementer == "0x63") { // Arm China.
370370
return StringSwitch<const char *>(Part)
371371
.Case("0x132", "star-mc1")
372+
.Case("0xd25", "star-mc3")
372373
.Default("generic");
373374
}
374375

llvm/unittests/TargetParser/TargetParserTest.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -518,6 +518,11 @@ INSTANTIATE_TEST_SUITE_P(
518518
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_MVE | ARM::AEK_FP |
519519
ARM::AEK_RAS | ARM::AEK_LOB | ARM::AEK_FP16 | ARM::AEK_PACBTI,
520520
"8.1-M.Mainline"),
521+
ARMCPUTestParams<uint64_t>(
522+
"star-mc3", "armv8.1-m.main", "fp-armv8-fullfp16-d16",
523+
ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_MVE | ARM::AEK_FP |
524+
ARM::AEK_RAS | ARM::AEK_LOB | ARM::AEK_FP16 | ARM::AEK_PACBTI,
525+
"8.1-M.Mainline"),
521526
ARMCPUTestParams<uint64_t>("iwmmxt", "iwmmxt", "none", ARM::AEK_NONE,
522527
"iwmmxt"),
523528
ARMCPUTestParams<uint64_t>("xscale", "xscale", "none", ARM::AEK_NONE,
@@ -528,7 +533,7 @@ INSTANTIATE_TEST_SUITE_P(
528533
"7-S")),
529534
ARMCPUTestParams<uint64_t>::PrintToStringParamName);
530535

531-
static constexpr unsigned NumARMCPUArchs = 94;
536+
static constexpr unsigned NumARMCPUArchs = 95;
532537

533538
TEST(TargetParserTest, testARMCPUArchList) {
534539
SmallVector<StringRef, NumARMCPUArchs> List;

0 commit comments

Comments
 (0)