Skip to content

Commit 157cdae

Browse files
authored
Merge pull request #18498 from castholm/cpu-cortex-m-optional-deps
Don't enable optional ARM Cortex-M series CPU features by default
2 parents fcc0c5d + 0cd508b commit 157cdae

File tree

2 files changed

+76
-28
lines changed

2 files changed

+76
-28
lines changed

lib/std/Target/arm.zig

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2204,9 +2204,7 @@ pub const cpu = struct {
22042204
.name = "cortex_m33",
22052205
.llvm_name = "cortex-m33",
22062206
.features = featureSet(&[_]Feature{
2207-
.dsp,
22082207
.fix_cmse_cve_2021_35465,
2209-
.fp_armv8d16sp,
22102208
.loop_align,
22112209
.no_branch_predictor,
22122210
.slowfpvfmx,
@@ -2219,9 +2217,7 @@ pub const cpu = struct {
22192217
.name = "cortex_m35p",
22202218
.llvm_name = "cortex-m35p",
22212219
.features = featureSet(&[_]Feature{
2222-
.dsp,
22232220
.fix_cmse_cve_2021_35465,
2224-
.fp_armv8d16sp,
22252221
.loop_align,
22262222
.no_branch_predictor,
22272223
.slowfpvfmx,
@@ -2240,17 +2236,15 @@ pub const cpu = struct {
22402236
.slowfpvmlx,
22412237
.use_misched,
22422238
.v7em,
2243-
.vfp4d16sp,
22442239
}),
22452240
};
22462241
pub const cortex_m55 = CpuModel{
22472242
.name = "cortex_m55",
22482243
.llvm_name = "cortex-m55",
22492244
.features = featureSet(&[_]Feature{
2245+
.dsp,
22502246
.fix_cmse_cve_2021_35465,
2251-
.fp_armv8d16,
22522247
.loop_align,
2253-
.mve_fp,
22542248
.no_branch_predictor,
22552249
.slowfpvmlx,
22562250
.use_misched,
@@ -2261,7 +2255,6 @@ pub const cpu = struct {
22612255
.name = "cortex_m7",
22622256
.llvm_name = "cortex-m7",
22632257
.features = featureSet(&[_]Feature{
2264-
.fp_armv8d16,
22652258
.use_mipipeliner,
22662259
.use_misched,
22672260
.v7em,
@@ -2271,9 +2264,8 @@ pub const cpu = struct {
22712264
.name = "cortex_m85",
22722265
.llvm_name = "cortex-m85",
22732266
.features = featureSet(&[_]Feature{
2274-
.fp_armv8d16,
2275-
.mve_fp,
2276-
.pacbti,
2267+
.dsp,
2268+
.trustzone,
22772269
.use_misched,
22782270
.v8_1m_main,
22792271
}),

tools/update_cpu_features.zig

Lines changed: 73 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ const FeatureOverride = struct {
1616
flatten: bool = false,
1717
zig_name: ?[]const u8 = null,
1818
desc: ?[]const u8 = null,
19+
omit_deps: []const []const u8 = &.{},
1920
extra_deps: []const []const u8 = &.{},
2021
};
2122

@@ -378,6 +379,31 @@ const llvm_targets = [_]LlvmTarget{
378379
.llvm_name = "cortex-a710",
379380
.flatten = true,
380381
},
382+
.{
383+
.llvm_name = "cortex-m4",
384+
.omit_deps = &.{"vfp4d16sp"},
385+
},
386+
.{
387+
.llvm_name = "cortex-m7",
388+
.omit_deps = &.{"fp_armv8d16"},
389+
},
390+
.{
391+
.llvm_name = "cortex-m33",
392+
.omit_deps = &.{ "fp_armv8d16sp", "dsp" },
393+
},
394+
.{
395+
.llvm_name = "cortex-m35p",
396+
.omit_deps = &.{ "fp_armv8d16sp", "dsp" },
397+
},
398+
.{
399+
.llvm_name = "cortex-m55",
400+
.omit_deps = &.{ "mve_fp", "fp_armv8d16" },
401+
},
402+
.{
403+
.llvm_name = "cortex-m85",
404+
.omit_deps = &.{ "mve_fp", "pacbti", "fp_armv8d16" },
405+
.extra_deps = &.{"trustzone"},
406+
},
381407
.{
382408
.llvm_name = "cortex-x1c",
383409
.flatten = true,
@@ -1114,18 +1140,8 @@ fn processOneTarget(job: Job) anyerror!void {
11141140
var deps = std.ArrayList([]const u8).init(arena);
11151141
var omit = false;
11161142
var flatten = false;
1117-
const implies = kv.value_ptr.object.get("Implies").?.array;
1118-
for (implies.items) |imply| {
1119-
const other_key = imply.object.get("def").?.string;
1120-
const other_obj = &root_map.getPtr(other_key).?.object;
1121-
const other_llvm_name = other_obj.get("Name").?.string;
1122-
const other_zig_name = (try llvmNameToZigNameOmit(
1123-
arena,
1124-
llvm_target,
1125-
other_llvm_name,
1126-
)) orelse continue;
1127-
try deps.append(other_zig_name);
1128-
}
1143+
var omit_deps: []const []const u8 = &.{};
1144+
var extra_deps: []const []const u8 = &.{};
11291145
for (llvm_target.feature_overrides) |feature_override| {
11301146
if (mem.eql(u8, llvm_name, feature_override.llvm_name)) {
11311147
if (feature_override.omit) {
@@ -1142,12 +1158,30 @@ fn processOneTarget(job: Job) anyerror!void {
11421158
if (feature_override.desc) |override_desc| {
11431159
desc = override_desc;
11441160
}
1145-
for (feature_override.extra_deps) |extra_dep| {
1146-
try deps.append(extra_dep);
1147-
}
1161+
omit_deps = feature_override.omit_deps;
1162+
extra_deps = feature_override.extra_deps;
11481163
break;
11491164
}
11501165
}
1166+
const implies = kv.value_ptr.object.get("Implies").?.array;
1167+
for (implies.items) |imply| {
1168+
const other_key = imply.object.get("def").?.string;
1169+
const other_obj = &root_map.getPtr(other_key).?.object;
1170+
const other_llvm_name = other_obj.get("Name").?.string;
1171+
const other_zig_name = (try llvmNameToZigNameOmit(
1172+
arena,
1173+
llvm_target,
1174+
other_llvm_name,
1175+
)) orelse continue;
1176+
for (omit_deps) |omit_dep| {
1177+
if (mem.eql(u8, other_zig_name, omit_dep)) break;
1178+
} else {
1179+
try deps.append(other_zig_name);
1180+
}
1181+
}
1182+
for (extra_deps) |extra_dep| {
1183+
try deps.append(extra_dep);
1184+
}
11511185
const feature: Feature = .{
11521186
.llvm_name = llvm_name,
11531187
.zig_name = zig_name,
@@ -1170,6 +1204,21 @@ fn processOneTarget(job: Job) anyerror!void {
11701204

11711205
var zig_name = try llvmNameToZigName(arena, llvm_name);
11721206
var deps = std.ArrayList([]const u8).init(arena);
1207+
var omit_deps: []const []const u8 = &.{};
1208+
var extra_deps: []const []const u8 = &.{};
1209+
for (llvm_target.feature_overrides) |feature_override| {
1210+
if (mem.eql(u8, llvm_name, feature_override.llvm_name)) {
1211+
if (feature_override.omit) {
1212+
continue :root_it;
1213+
}
1214+
if (feature_override.zig_name) |override_name| {
1215+
zig_name = override_name;
1216+
}
1217+
omit_deps = feature_override.omit_deps;
1218+
extra_deps = feature_override.extra_deps;
1219+
break;
1220+
}
1221+
}
11731222
const features = kv.value_ptr.object.get("Features").?.array;
11741223
for (features.items) |feature| {
11751224
const feature_key = feature.object.get("def").?.string;
@@ -1181,7 +1230,14 @@ fn processOneTarget(job: Job) anyerror!void {
11811230
llvm_target,
11821231
feature_llvm_name,
11831232
)) orelse continue;
1184-
try deps.append(feature_zig_name);
1233+
for (omit_deps) |omit_dep| {
1234+
if (mem.eql(u8, feature_zig_name, omit_dep)) break;
1235+
} else {
1236+
try deps.append(feature_zig_name);
1237+
}
1238+
}
1239+
for (extra_deps) |extra_dep| {
1240+
try deps.append(extra_dep);
11851241
}
11861242
const tune_features = kv.value_ptr.object.get("TuneFeatures").?.array;
11871243
for (tune_features.items) |feature| {
@@ -1228,7 +1284,7 @@ fn processOneTarget(job: Job) anyerror!void {
12281284
mem.sort(Feature, all_features.items, {}, featureLessThan);
12291285
mem.sort(Cpu, all_cpus.items, {}, cpuLessThan);
12301286

1231-
const target_sub_path = try fs.path.join(arena, &.{ "lib", "std", "target" });
1287+
const target_sub_path = try fs.path.join(arena, &.{ "lib", "std", "Target" });
12321288
var target_dir = try job.zig_src_dir.makeOpenPath(target_sub_path, .{});
12331289
defer target_dir.close();
12341290

0 commit comments

Comments
 (0)