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: Querybuffer: *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); } } }