Skip to content

Commit b38fb4b

Browse files
authored
Merge pull request ziglang#25917 from alexrp/target-features
`std.Target`: add CPU features and models for alpha and hppa
2 parents 94538d8 + 65b0a23 commit b38fb4b

File tree

5 files changed

+516
-9
lines changed

5 files changed

+516
-9
lines changed

lib/std/Target.zig

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -704,15 +704,15 @@ pub const Os = struct {
704704
};
705705

706706
pub const aarch64 = @import("Target/aarch64.zig");
707-
pub const alpha = @import("Target/generic.zig");
707+
pub const alpha = @import("Target/alpha.zig");
708708
pub const amdgcn = @import("Target/amdgcn.zig");
709709
pub const arc = @import("Target/arc.zig");
710710
pub const arm = @import("Target/arm.zig");
711711
pub const avr = @import("Target/avr.zig");
712712
pub const bpf = @import("Target/bpf.zig");
713713
pub const csky = @import("Target/csky.zig");
714714
pub const hexagon = @import("Target/hexagon.zig");
715-
pub const hppa = @import("Target/generic.zig");
715+
pub const hppa = @import("Target/hppa.zig");
716716
pub const kalimba = @import("Target/generic.zig");
717717
pub const kvx = @import("Target/kvx.zig");
718718
pub const lanai = @import("Target/lanai.zig");
@@ -1950,8 +1950,11 @@ pub const Cpu = struct {
19501950
/// Clang compatibility is important, consider using `baseline` instead.
19511951
pub fn generic(arch: Arch) *const Model {
19521952
return switch (arch) {
1953+
.alpha => &alpha.cpu.ev4,
19531954
.amdgcn => &amdgcn.cpu.gfx600,
19541955
.avr => &avr.cpu.avr1,
1956+
.hppa => &hppa.cpu.ts_1,
1957+
.hppa64 => &hppa.cpu.pa_8000,
19551958
.kvx => &kvx.cpu.coolidge_v1,
19561959
.loongarch32 => &loongarch.cpu.generic_la32,
19571960
.loongarch64 => &loongarch.cpu.generic_la64,
@@ -1982,6 +1985,7 @@ pub const Cpu = struct {
19821985
/// `Os.Tag.freestanding`.
19831986
pub fn baseline(arch: Arch, os: Os) *const Model {
19841987
return switch (arch) {
1988+
.alpha => &alpha.cpu.ev6,
19851989
.amdgcn => &amdgcn.cpu.gfx906,
19861990
.arm => switch (os.tag) {
19871991
.@"3ds" => &arm.cpu.mpcore,
@@ -2004,6 +2008,7 @@ pub const Cpu = struct {
20042008
.bpfel, .bpfeb => &bpf.cpu.v3,
20052009
.csky => &csky.cpu.ck810, // gcc/clang do not have a generic csky model.
20062010
.hexagon => &hexagon.cpu.hexagonv68, // gcc/clang do not have a generic hexagon model.
2011+
.hppa => &hppa.cpu.pa_7300lc,
20072012
.kvx => &kvx.cpu.coolidge_v2,
20082013
.lanai => &lanai.cpu.v11, // clang does not have a generic lanai model.
20092014
.loongarch64 => &loongarch.cpu.la64v1_0,

lib/std/Target/alpha.zig

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
//! This file is auto-generated by tools/update_cpu_features.zig.
2+
3+
const std = @import("../std.zig");
4+
const CpuFeature = std.Target.Cpu.Feature;
5+
const CpuModel = std.Target.Cpu.Model;
6+
7+
pub const Feature = enum {
8+
bwx,
9+
cix,
10+
fix,
11+
max,
12+
};
13+
14+
pub const featureSet = CpuFeature.FeatureSetFns(Feature).featureSet;
15+
pub const featureSetHas = CpuFeature.FeatureSetFns(Feature).featureSetHas;
16+
pub const featureSetHasAny = CpuFeature.FeatureSetFns(Feature).featureSetHasAny;
17+
pub const featureSetHasAll = CpuFeature.FeatureSetFns(Feature).featureSetHasAll;
18+
19+
pub const all_features = blk: {
20+
const len = @typeInfo(Feature).@"enum".fields.len;
21+
std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
22+
var result: [len]CpuFeature = undefined;
23+
result[@intFromEnum(Feature.bwx)] = .{
24+
.llvm_name = null,
25+
.description = "Enable byte/word extensions",
26+
.dependencies = featureSet(&[_]Feature{}),
27+
};
28+
result[@intFromEnum(Feature.cix)] = .{
29+
.llvm_name = null,
30+
.description = "Enable counting extensions",
31+
.dependencies = featureSet(&[_]Feature{}),
32+
};
33+
result[@intFromEnum(Feature.fix)] = .{
34+
.llvm_name = null,
35+
.description = "Enable floating point move and square root extensions",
36+
.dependencies = featureSet(&[_]Feature{}),
37+
};
38+
result[@intFromEnum(Feature.max)] = .{
39+
.llvm_name = null,
40+
.description = "Enable motion video extensions",
41+
.dependencies = featureSet(&[_]Feature{}),
42+
};
43+
const ti = @typeInfo(Feature);
44+
for (&result, 0..) |*elem, i| {
45+
elem.index = i;
46+
elem.name = ti.@"enum".fields[i].name;
47+
}
48+
break :blk result;
49+
};
50+
51+
pub const cpu = struct {
52+
pub const ev4: CpuModel = .{
53+
.name = "ev4",
54+
.llvm_name = null,
55+
.features = featureSet(&[_]Feature{}),
56+
};
57+
pub const ev45: CpuModel = .{
58+
.name = "ev45",
59+
.llvm_name = null,
60+
.features = featureSet(&[_]Feature{}),
61+
};
62+
pub const ev5: CpuModel = .{
63+
.name = "ev5",
64+
.llvm_name = null,
65+
.features = featureSet(&[_]Feature{}),
66+
};
67+
pub const ev56: CpuModel = .{
68+
.name = "ev56",
69+
.llvm_name = null,
70+
.features = featureSet(&[_]Feature{
71+
.bwx,
72+
}),
73+
};
74+
pub const ev6: CpuModel = .{
75+
.name = "ev6",
76+
.llvm_name = null,
77+
.features = featureSet(&[_]Feature{
78+
.bwx,
79+
.fix,
80+
.max,
81+
}),
82+
};
83+
pub const ev67: CpuModel = .{
84+
.name = "ev67",
85+
.llvm_name = null,
86+
.features = featureSet(&[_]Feature{
87+
.bwx,
88+
.cix,
89+
.fix,
90+
.max,
91+
}),
92+
};
93+
pub const pca56: CpuModel = .{
94+
.name = "pca56",
95+
.llvm_name = null,
96+
.features = featureSet(&[_]Feature{
97+
.bwx,
98+
.max,
99+
}),
100+
};
101+
};

lib/std/Target/hppa.zig

Lines changed: 178 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,178 @@
1+
//! This file is auto-generated by tools/update_cpu_features.zig.
2+
3+
const std = @import("../std.zig");
4+
const CpuFeature = std.Target.Cpu.Feature;
5+
const CpuModel = std.Target.Cpu.Model;
6+
7+
pub const Feature = enum {
8+
@"64bit",
9+
max_1,
10+
max_2,
11+
v1_1,
12+
v2_0,
13+
};
14+
15+
pub const featureSet = CpuFeature.FeatureSetFns(Feature).featureSet;
16+
pub const featureSetHas = CpuFeature.FeatureSetFns(Feature).featureSetHas;
17+
pub const featureSetHasAny = CpuFeature.FeatureSetFns(Feature).featureSetHasAny;
18+
pub const featureSetHasAll = CpuFeature.FeatureSetFns(Feature).featureSetHasAll;
19+
20+
pub 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+
64+
pub 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+
};

lib/std/Target/x86.zig

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3081,13 +3081,6 @@ pub const cpu = struct {
30813081
.xsaveopt,
30823082
}),
30833083
};
3084-
pub const @"i86": CpuModel = .{
3085-
.name = "i86",
3086-
.llvm_name = null,
3087-
.features = featureSet(&[_]Feature{
3088-
.@"16bit_mode",
3089-
}),
3090-
};
30913084
pub const @"i386": CpuModel = .{
30923085
.name = "i386",
30933086
.llvm_name = "i386",
@@ -3129,6 +3122,13 @@ pub const cpu = struct {
31293122
.x87,
31303123
}),
31313124
};
3125+
pub const @"i86": CpuModel = .{
3126+
.name = "i86",
3127+
.llvm_name = null,
3128+
.features = featureSet(&[_]Feature{
3129+
.@"16bit_mode",
3130+
}),
3131+
};
31323132
pub const icelake_client: CpuModel = .{
31333133
.name = "icelake_client",
31343134
.llvm_name = "icelake-client",

0 commit comments

Comments
 (0)