Function serializeCpu [src]
Renders the query into a textual representation that can be parsed via the
-mcpu flag passed to the Zig compiler.
Appends the result to buffer.
Prototype
pub fn serializeCpu(q: Query, buffer: *std.ArrayList(u8)) Allocator.Error!void
Parameters
q: Query
buffer: *std.ArrayList(u8)
Source
pub fn serializeCpu(q: Query, buffer: *std.ArrayList(u8)) Allocator.Error!void {
try buffer.ensureUnusedCapacity(8);
switch (q.cpu_model) {
.native => {
buffer.appendSliceAssumeCapacity("native");
},
.baseline => {
buffer.appendSliceAssumeCapacity("baseline");
},
.determined_by_arch_os => {
if (q.cpu_arch == null) {
buffer.appendSliceAssumeCapacity("native");
} else {
buffer.appendSliceAssumeCapacity("baseline");
}
},
.explicit => |model| {
try buffer.appendSlice(model.name);
},
}
if (q.cpu_features_add.isEmpty() and q.cpu_features_sub.isEmpty()) {
// The CPU name alone is sufficient.
return;
}
const cpu_arch = q.cpu_arch orelse builtin.cpu.arch;
const all_features = cpu_arch.allFeaturesList();
for (all_features, 0..) |feature, i_usize| {
const i: Target.Cpu.Feature.Set.Index = @intCast(i_usize);
try buffer.ensureUnusedCapacity(feature.name.len + 1);
if (q.cpu_features_sub.isEnabled(i)) {
buffer.appendAssumeCapacity('-');
buffer.appendSliceAssumeCapacity(feature.name);
} else if (q.cpu_features_add.isEnabled(i)) {
buffer.appendAssumeCapacity('+');
buffer.appendSliceAssumeCapacity(feature.name);
}
}
}