DoxigAlpha

serializeCpu

Renders a std.Target.Cpu value into a textual representation that can be parsed via the -mcpu flag passed to the Zig compiler. Appends the result to buffer.

Function parameters

Parameters

#
buffer:*std.array_list.Managed(u8)
cpu:std.Target.Cpu

Type definitions in this namespace

Types

#
EnvVar
Collects all the environment variables that Zig could possibly inspect, so
EmitArtifact
Every kind of artifact which the compiler can emit.

Functions in this namespace

Functions

#
binNameAlloc
Returns the standard file system basename of a binary generated by the Zig compiler.
serializeCpu
Renders a `std.Target.Cpu` value into a textual representation that can be parsed
fmtId
Return a Formatter for a Zig identifier, escaping it with `@""` syntax if needed.
fmtIdFlags
Return a Formatter for a Zig identifier, escaping it with `@""` syntax if needed.
fmtString
Return a formatter for escaping a double quoted Zig string.
fmtChar
Return a formatter for escaping a single quoted Zig string.
stringEscape
Print the string as escaped contents of a double quoted string.
charEscape
Print as escaped contents of a single-quoted string.
readSourceFileToEndAlloc
If the source can be UTF-16LE encoded, this function asserts that `gpa`

There are many assumptions in the entire codebase that Zig source files can

Values

#
max_src_size
There are many assumptions in the entire codebase that Zig source files can

Source

Implementation

#
pub fn serializeCpu(buffer: *std.array_list.Managed(u8), cpu: std.Target.Cpu) Allocator.Error!void {
    const all_features = cpu.arch.allFeaturesList();
    var populated_cpu_features = cpu.model.features;
    populated_cpu_features.populateDependencies(all_features);

    try buffer.appendSlice(cpu.model.name);

    if (populated_cpu_features.eql(cpu.features)) {
        // The CPU name alone is sufficient.
        return;
    }

    for (all_features, 0..) |feature, i_usize| {
        const i: std.Target.Cpu.Feature.Set.Index = @intCast(i_usize);
        const in_cpu_set = populated_cpu_features.isEnabled(i);
        const in_actual_set = cpu.features.isEnabled(i);
        try buffer.ensureUnusedCapacity(feature.name.len + 1);
        if (in_cpu_set and !in_actual_set) {
            buffer.appendAssumeCapacity('-');
            buffer.appendSliceAssumeCapacity(feature.name);
        } else if (!in_cpu_set and in_actual_set) {
            buffer.appendAssumeCapacity('+');
            buffer.appendSliceAssumeCapacity(feature.name);
        }
    }
}