authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2025-11-13 22:29:12+01:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2025-11-13 22:29:12+01:00
log39e91deb77624116bc6ebfe9902954c61cae9582
treefaf64a93663cfb42ed086483a628892db8c0785a
parent2b23f98d2c31ef1a8cbe67e8f37e3b2aa2387ed3
signaturebadge-check Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

std.Target: add CPU features and models for hppa


3 files changed, 328 insertions(+), 1 deletions(-)

lib/std/Target.zig+4-1
......@@ -708,7 +708,7 @@ pub const avr = @import("Target/avr.zig");
708708pub const bpf = @import("Target/bpf.zig");
709709pub const csky = @import("Target/csky.zig");
710710pub const hexagon = @import("Target/hexagon.zig");
711pub const hppa = @import("Target/generic.zig");
711pub const hppa = @import("Target/hppa.zig");
712712pub const kalimba = @import("Target/generic.zig");
713713pub const kvx = @import("Target/kvx.zig");
714714pub const lanai = @import("Target/lanai.zig");
......@@ -1947,6 +1947,8 @@ pub const Cpu = struct {
19471947 .alpha => &alpha.cpu.ev4,
19481948 .amdgcn => &amdgcn.cpu.gfx600,
19491949 .avr => &avr.cpu.avr1,
1950 .hppa => &hppa.cpu.ts_1,
1951 .hppa64 => &hppa.cpu.pa_8000,
19501952 .kvx => &kvx.cpu.coolidge_v1,
19511953 .loongarch32 => &loongarch.cpu.generic_la32,
19521954 .loongarch64 => &loongarch.cpu.generic_la64,
......@@ -2000,6 +2002,7 @@ pub const Cpu = struct {
20002002 .bpfel, .bpfeb => &bpf.cpu.v3,
20012003 .csky => &csky.cpu.ck810, // gcc/clang do not have a generic csky model.
20022004 .hexagon => &hexagon.cpu.hexagonv68, // gcc/clang do not have a generic hexagon model.
2005 .hppa => &hppa.cpu.pa_7300lc,
20032006 .kvx => &kvx.cpu.coolidge_v2,
20042007 .lanai => &lanai.cpu.v11, // clang does not have a generic lanai model.
20052008 .loongarch64 => &loongarch.cpu.la64v1_0,
lib/std/Target/hppa.zig created+178
......@@ -0,0 +1,178 @@
1//! This file is auto-generated by tools/update_cpu_features.zig.
2
3const std = @import("../std.zig");
4const CpuFeature = std.Target.Cpu.Feature;
5const CpuModel = std.Target.Cpu.Model;
6
7pub const Feature = enum {
8 @"64bit",
9 max_1,
10 max_2,
11 v1_1,
12 v2_0,
13};
14
15pub const featureSet = CpuFeature.FeatureSetFns(Feature).featureSet;
16pub const featureSetHas = CpuFeature.FeatureSetFns(Feature).featureSetHas;
17pub const featureSetHasAny = CpuFeature.FeatureSetFns(Feature).featureSetHasAny;
18pub const featureSetHasAll = CpuFeature.FeatureSetFns(Feature).featureSetHasAll;
19
20pub const all_features = blk: {
21 const len = @typeInfo(Feature).@"enum".fields.len;
22 std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
23 var result: [len]CpuFeature = undefined;
24 result[@intFromEnum(Feature.@"64bit")] = .{
25 .llvm_name = null,
26 .description = "Enable 64-bit PA-RISC 2.0",
27 .dependencies = featureSet(&[_]Feature{
28 .v2_0,
29 }),
30 };
31 result[@intFromEnum(Feature.max_1)] = .{
32 .llvm_name = null,
33 .description = "Enable MAX-1 multimedia acceleration extensions",
34 .dependencies = featureSet(&[_]Feature{}),
35 };
36 result[@intFromEnum(Feature.max_2)] = .{
37 .llvm_name = null,
38 .description = "Enable MAX-2 multimedia acceleration extensions",
39 .dependencies = featureSet(&[_]Feature{
40 .max_1,
41 }),
42 };
43 result[@intFromEnum(Feature.v1_1)] = .{
44 .llvm_name = null,
45 .description = "Enable ISA v1.1",
46 .dependencies = featureSet(&[_]Feature{}),
47 };
48 result[@intFromEnum(Feature.v2_0)] = .{
49 .llvm_name = null,
50 .description = "Enable ISA v2.0",
51 .dependencies = featureSet(&[_]Feature{
52 .max_2,
53 .v1_1,
54 }),
55 };
56 const ti = @typeInfo(Feature);
57 for (&result, 0..) |*elem, i| {
58 elem.index = i;
59 elem.name = ti.@"enum".fields[i].name;
60 }
61 break :blk result;
62};
63
64pub const cpu = struct {
65 pub const ns_1: CpuModel = .{
66 .name = "ns_1",
67 .llvm_name = null,
68 .features = featureSet(&[_]Feature{}),
69 };
70 pub const ns_2: CpuModel = .{
71 .name = "ns_2",
72 .llvm_name = null,
73 .features = featureSet(&[_]Feature{}),
74 };
75 pub const pa_7000: CpuModel = .{
76 .name = "pa_7000",
77 .llvm_name = null,
78 .features = featureSet(&[_]Feature{
79 .v1_1,
80 }),
81 };
82 pub const pa_7100: CpuModel = .{
83 .name = "pa_7100",
84 .llvm_name = null,
85 .features = featureSet(&[_]Feature{
86 .v1_1,
87 }),
88 };
89 pub const pa_7100lc: CpuModel = .{
90 .name = "pa_7100lc",
91 .llvm_name = null,
92 .features = featureSet(&[_]Feature{
93 .max_1,
94 .v1_1,
95 }),
96 };
97 pub const pa_7150: CpuModel = .{
98 .name = "pa_7150",
99 .llvm_name = null,
100 .features = featureSet(&[_]Feature{
101 .v1_1,
102 }),
103 };
104 pub const pa_7200: CpuModel = .{
105 .name = "pa_7200",
106 .llvm_name = null,
107 .features = featureSet(&[_]Feature{
108 .v1_1,
109 }),
110 };
111 pub const pa_7300lc: CpuModel = .{
112 .name = "pa_7300lc",
113 .llvm_name = null,
114 .features = featureSet(&[_]Feature{
115 .max_1,
116 .v1_1,
117 }),
118 };
119 pub const pa_8000: CpuModel = .{
120 .name = "pa_8000",
121 .llvm_name = null,
122 .features = featureSet(&[_]Feature{
123 .@"64bit",
124 }),
125 };
126 pub const pa_8200: CpuModel = .{
127 .name = "pa_8200",
128 .llvm_name = null,
129 .features = featureSet(&[_]Feature{
130 .@"64bit",
131 }),
132 };
133 pub const pa_8500: CpuModel = .{
134 .name = "pa_8500",
135 .llvm_name = null,
136 .features = featureSet(&[_]Feature{
137 .@"64bit",
138 }),
139 };
140 pub const pa_8600: CpuModel = .{
141 .name = "pa_8600",
142 .llvm_name = null,
143 .features = featureSet(&[_]Feature{
144 .@"64bit",
145 }),
146 };
147 pub const pa_8700: CpuModel = .{
148 .name = "pa_8700",
149 .llvm_name = null,
150 .features = featureSet(&[_]Feature{
151 .@"64bit",
152 }),
153 };
154 pub const pa_8800: CpuModel = .{
155 .name = "pa_8800",
156 .llvm_name = null,
157 .features = featureSet(&[_]Feature{
158 .@"64bit",
159 }),
160 };
161 pub const pa_8900: CpuModel = .{
162 .name = "pa_8900",
163 .llvm_name = null,
164 .features = featureSet(&[_]Feature{
165 .@"64bit",
166 }),
167 };
168 pub const pcx: CpuModel = .{
169 .name = "pcx",
170 .llvm_name = null,
171 .features = featureSet(&[_]Feature{}),
172 };
173 pub const ts_1: CpuModel = .{
174 .name = "ts_1",
175 .llvm_name = null,
176 .features = featureSet(&[_]Feature{}),
177 };
178};
tools/update_cpu_features.zig+146
......@@ -1050,6 +1050,152 @@ const targets = [_]ArchTarget{
10501050 .td_name = "Hexagon",
10511051 },
10521052 },
1053 .{
1054 .zig_name = "hppa",
1055 .llvm = null,
1056 .extra_features = &.{
1057 .{
1058 .zig_name = "64bit",
1059 .desc = "Enable 64-bit PA-RISC 2.0",
1060 .deps = &.{"v2_0"},
1061 },
1062 .{
1063 .zig_name = "max_1",
1064 .desc = "Enable MAX-1 multimedia acceleration extensions",
1065 .deps = &.{},
1066 },
1067 .{
1068 .zig_name = "max_2",
1069 .desc = "Enable MAX-2 multimedia acceleration extensions",
1070 .deps = &.{"max_1"},
1071 },
1072 .{
1073 .zig_name = "v1_1",
1074 .desc = "Enable ISA v1.1",
1075 .deps = &.{},
1076 },
1077 .{
1078 .zig_name = "v2_0",
1079 .desc = "Enable ISA v2.0",
1080 .deps = &.{ "max_2", "v1_1" },
1081 },
1082 },
1083 .extra_cpus = &.{
1084 .{
1085 .llvm_name = null,
1086 .zig_name = "ts_1",
1087 .features = &.{},
1088 },
1089 .{
1090 .llvm_name = null,
1091 .zig_name = "ns_1",
1092 .features = &.{},
1093 },
1094 .{
1095 .llvm_name = null,
1096 .zig_name = "ns_2",
1097 .features = &.{},
1098 },
1099 .{
1100 .llvm_name = null,
1101 .zig_name = "pcx",
1102 .features = &.{},
1103 },
1104 .{
1105 .llvm_name = null,
1106 .zig_name = "pa_7000",
1107 .features = &.{
1108 "v1_1",
1109 },
1110 },
1111 .{
1112 .llvm_name = null,
1113 .zig_name = "pa_7100",
1114 .features = &.{
1115 "v1_1",
1116 },
1117 },
1118 .{
1119 .llvm_name = null,
1120 .zig_name = "pa_7150",
1121 .features = &.{
1122 "v1_1",
1123 },
1124 },
1125 .{
1126 .llvm_name = null,
1127 .zig_name = "pa_7100lc",
1128 .features = &.{
1129 "max_1",
1130 "v1_1",
1131 },
1132 },
1133 .{
1134 .llvm_name = null,
1135 .zig_name = "pa_7200",
1136 .features = &.{
1137 "v1_1",
1138 },
1139 },
1140 .{
1141 .llvm_name = null,
1142 .zig_name = "pa_7300lc",
1143 .features = &.{
1144 "max_1",
1145 "v1_1",
1146 },
1147 },
1148 .{
1149 .llvm_name = null,
1150 .zig_name = "pa_8000",
1151 .features = &.{
1152 "64bit",
1153 },
1154 },
1155 .{
1156 .llvm_name = null,
1157 .zig_name = "pa_8200",
1158 .features = &.{
1159 "64bit",
1160 },
1161 },
1162 .{
1163 .llvm_name = null,
1164 .zig_name = "pa_8500",
1165 .features = &.{
1166 "64bit",
1167 },
1168 },
1169 .{
1170 .llvm_name = null,
1171 .zig_name = "pa_8600",
1172 .features = &.{
1173 "64bit",
1174 },
1175 },
1176 .{
1177 .llvm_name = null,
1178 .zig_name = "pa_8700",
1179 .features = &.{
1180 "64bit",
1181 },
1182 },
1183 .{
1184 .llvm_name = null,
1185 .zig_name = "pa_8800",
1186 .features = &.{
1187 "64bit",
1188 },
1189 },
1190 .{
1191 .llvm_name = null,
1192 .zig_name = "pa_8900",
1193 .features = &.{
1194 "64bit",
1195 },
1196 },
1197 },
1198 },
10531199 .{
10541200 .zig_name = "kvx",
10551201 .llvm = null,