mirror of
https://codeberg.org/ziglang/zig.git
synced 2026-10-29 03:06:10 +08:00
302 lines
8.5 KiB
Zig
302 lines
8.5 KiB
Zig
//! This file is auto-generated by tools/update_cpu_features.zig.
|
|
|
|
const std = @import("../std.zig");
|
|
const CpuFeature = std.Target.Cpu.Feature;
|
|
const CpuModel = std.Target.Cpu.Model;
|
|
|
|
pub const Feature = enum {
|
|
barrel,
|
|
div,
|
|
fpu,
|
|
fpu2,
|
|
msr,
|
|
mul,
|
|
mul64,
|
|
pcmp,
|
|
pipe3,
|
|
pipe8,
|
|
reorder,
|
|
v10_0,
|
|
v7_20,
|
|
v8_10,
|
|
v8_30,
|
|
};
|
|
|
|
pub const featureSet = CpuFeature.FeatureSetFns(Feature).featureSet;
|
|
pub const featureSetHas = CpuFeature.FeatureSetFns(Feature).featureSetHas;
|
|
pub const featureSetHasAny = CpuFeature.FeatureSetFns(Feature).featureSetHasAny;
|
|
pub const featureSetHasAll = CpuFeature.FeatureSetFns(Feature).featureSetHasAll;
|
|
|
|
pub const all_features = blk: {
|
|
const len = @typeInfo(Feature).@"enum".field_names.len;
|
|
std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
|
|
var result: [len]CpuFeature = undefined;
|
|
result[@backingInt(Feature.barrel)] = .{
|
|
.llvm_name = null,
|
|
.description = "Enable barrel shift instructions (C_USE_BARREL)",
|
|
.dependencies = featureSet(&[_]Feature{}),
|
|
};
|
|
result[@backingInt(Feature.div)] = .{
|
|
.llvm_name = null,
|
|
.description = "Enable hardware divide instructions (C_USE_DIV)",
|
|
.dependencies = featureSet(&[_]Feature{}),
|
|
};
|
|
result[@backingInt(Feature.fpu)] = .{
|
|
.llvm_name = null,
|
|
.description = "Enable single-precision floating point instructions (C_USE_FPU >= 1)",
|
|
.dependencies = featureSet(&[_]Feature{}),
|
|
};
|
|
result[@backingInt(Feature.fpu2)] = .{
|
|
.llvm_name = null,
|
|
.description = "Enable floating point conversion and square root instructions (C_USE_FPU = 2)",
|
|
.dependencies = featureSet(&[_]Feature{
|
|
.fpu,
|
|
}),
|
|
};
|
|
result[@backingInt(Feature.msr)] = .{
|
|
.llvm_name = null,
|
|
.description = "Enable msrset and msrclr instructions (C_USE_MSR_INSTR)",
|
|
.dependencies = featureSet(&[_]Feature{}),
|
|
};
|
|
result[@backingInt(Feature.mul)] = .{
|
|
.llvm_name = null,
|
|
.description = "Enable 32-bit multiply instructions (C_USE_HW_MUL >= 1)",
|
|
.dependencies = featureSet(&[_]Feature{}),
|
|
};
|
|
result[@backingInt(Feature.mul64)] = .{
|
|
.llvm_name = null,
|
|
.description = "Enable multiply high instructions (C_USE_HW_MUL = 2)",
|
|
.dependencies = featureSet(&[_]Feature{
|
|
.mul,
|
|
}),
|
|
};
|
|
result[@backingInt(Feature.pcmp)] = .{
|
|
.llvm_name = null,
|
|
.description = "Enable pattern compare instructions, and clz with v8.10 (C_USE_PCMP_INSTR)",
|
|
.dependencies = featureSet(&[_]Feature{}),
|
|
};
|
|
result[@backingInt(Feature.pipe3)] = .{
|
|
.llvm_name = null,
|
|
.description = "Tune for the 3-stage pipeline (C_AREA_OPTIMIZED = 1)",
|
|
.dependencies = featureSet(&[_]Feature{}),
|
|
};
|
|
result[@backingInt(Feature.pipe8)] = .{
|
|
.llvm_name = null,
|
|
.description = "Tune for the 8-stage pipeline (C_AREA_OPTIMIZED = 2)",
|
|
.dependencies = featureSet(&[_]Feature{}),
|
|
};
|
|
result[@backingInt(Feature.reorder)] = .{
|
|
.llvm_name = null,
|
|
.description = "Enable byte-reversed load/store instructions, and swapb and swaph with v8.30 (C_USE_REORDER_INSTR)",
|
|
.dependencies = featureSet(&[_]Feature{}),
|
|
};
|
|
result[@backingInt(Feature.v10_0)] = .{
|
|
.llvm_name = null,
|
|
.description = "Enable MicroBlaze v10.0 instructions (bsefi and bsifi with barrel)",
|
|
.dependencies = featureSet(&[_]Feature{
|
|
.v8_30,
|
|
}),
|
|
};
|
|
result[@backingInt(Feature.v7_20)] = .{
|
|
.llvm_name = null,
|
|
.description = "Enable MicroBlaze v7.20 instructions (lwx, swx)",
|
|
.dependencies = featureSet(&[_]Feature{}),
|
|
};
|
|
result[@backingInt(Feature.v8_10)] = .{
|
|
.llvm_name = null,
|
|
.description = "Enable MicroBlaze v8.10 instructions (mbar)",
|
|
.dependencies = featureSet(&[_]Feature{
|
|
.v7_20,
|
|
}),
|
|
};
|
|
result[@backingInt(Feature.v8_30)] = .{
|
|
.llvm_name = null,
|
|
.description = "Enable MicroBlaze v8.30 instructions (swapb and swaph with reorder)",
|
|
.dependencies = featureSet(&[_]Feature{
|
|
.v8_10,
|
|
}),
|
|
};
|
|
const ti = @typeInfo(Feature);
|
|
for (&result, 0..) |*elem, i| {
|
|
elem.index = i;
|
|
elem.name = ti.@"enum".field_names[i];
|
|
}
|
|
break :blk result;
|
|
};
|
|
|
|
pub const cpu = struct {
|
|
pub const v10_0: CpuModel = .{
|
|
.name = "v10_0",
|
|
.llvm_name = null,
|
|
.features = featureSet(&[_]Feature{
|
|
.v10_0,
|
|
}),
|
|
};
|
|
pub const v11_0: CpuModel = .{
|
|
.name = "v11_0",
|
|
.llvm_name = null,
|
|
.features = featureSet(&[_]Feature{
|
|
.v10_0,
|
|
}),
|
|
};
|
|
pub const v2_00: CpuModel = .{
|
|
.name = "v2_00",
|
|
.llvm_name = null,
|
|
.features = featureSet(&[_]Feature{
|
|
.pipe3,
|
|
}),
|
|
};
|
|
pub const v2_10: CpuModel = .{
|
|
.name = "v2_10",
|
|
.llvm_name = null,
|
|
.features = featureSet(&[_]Feature{
|
|
.pipe3,
|
|
}),
|
|
};
|
|
pub const v3_00: CpuModel = .{
|
|
.name = "v3_00",
|
|
.llvm_name = null,
|
|
.features = featureSet(&[_]Feature{
|
|
.pipe3,
|
|
}),
|
|
};
|
|
pub const v4_00: CpuModel = .{
|
|
.name = "v4_00",
|
|
.llvm_name = null,
|
|
.features = featureSet(&[_]Feature{
|
|
.pipe3,
|
|
}),
|
|
};
|
|
pub const v5_00: CpuModel = .{
|
|
.name = "v5_00",
|
|
.llvm_name = null,
|
|
.features = featureSet(&[_]Feature{
|
|
.msr,
|
|
.pcmp,
|
|
}),
|
|
};
|
|
pub const v6_00: CpuModel = .{
|
|
.name = "v6_00",
|
|
.llvm_name = null,
|
|
.features = featureSet(&[_]Feature{}),
|
|
};
|
|
pub const v7_00: CpuModel = .{
|
|
.name = "v7_00",
|
|
.llvm_name = null,
|
|
.features = featureSet(&[_]Feature{}),
|
|
};
|
|
pub const v7_10: CpuModel = .{
|
|
.name = "v7_10",
|
|
.llvm_name = null,
|
|
.features = featureSet(&[_]Feature{}),
|
|
};
|
|
pub const v7_20: CpuModel = .{
|
|
.name = "v7_20",
|
|
.llvm_name = null,
|
|
.features = featureSet(&[_]Feature{
|
|
.v7_20,
|
|
}),
|
|
};
|
|
pub const v7_30: CpuModel = .{
|
|
.name = "v7_30",
|
|
.llvm_name = null,
|
|
.features = featureSet(&[_]Feature{
|
|
.v7_20,
|
|
}),
|
|
};
|
|
pub const v8_00: CpuModel = .{
|
|
.name = "v8_00",
|
|
.llvm_name = null,
|
|
.features = featureSet(&[_]Feature{
|
|
.reorder,
|
|
.v7_20,
|
|
}),
|
|
};
|
|
pub const v8_10: CpuModel = .{
|
|
.name = "v8_10",
|
|
.llvm_name = null,
|
|
.features = featureSet(&[_]Feature{
|
|
.reorder,
|
|
.v8_10,
|
|
}),
|
|
};
|
|
pub const v8_20: CpuModel = .{
|
|
.name = "v8_20",
|
|
.llvm_name = null,
|
|
.features = featureSet(&[_]Feature{
|
|
.reorder,
|
|
.v8_10,
|
|
}),
|
|
};
|
|
pub const v8_30: CpuModel = .{
|
|
.name = "v8_30",
|
|
.llvm_name = null,
|
|
.features = featureSet(&[_]Feature{
|
|
.v8_30,
|
|
}),
|
|
};
|
|
pub const v8_40: CpuModel = .{
|
|
.name = "v8_40",
|
|
.llvm_name = null,
|
|
.features = featureSet(&[_]Feature{
|
|
.v8_30,
|
|
}),
|
|
};
|
|
pub const v8_50: CpuModel = .{
|
|
.name = "v8_50",
|
|
.llvm_name = null,
|
|
.features = featureSet(&[_]Feature{
|
|
.v8_30,
|
|
}),
|
|
};
|
|
pub const v9_0: CpuModel = .{
|
|
.name = "v9_0",
|
|
.llvm_name = null,
|
|
.features = featureSet(&[_]Feature{
|
|
.v8_30,
|
|
}),
|
|
};
|
|
pub const v9_1: CpuModel = .{
|
|
.name = "v9_1",
|
|
.llvm_name = null,
|
|
.features = featureSet(&[_]Feature{
|
|
.v8_30,
|
|
}),
|
|
};
|
|
pub const v9_2: CpuModel = .{
|
|
.name = "v9_2",
|
|
.llvm_name = null,
|
|
.features = featureSet(&[_]Feature{
|
|
.v8_30,
|
|
}),
|
|
};
|
|
pub const v9_3: CpuModel = .{
|
|
.name = "v9_3",
|
|
.llvm_name = null,
|
|
.features = featureSet(&[_]Feature{
|
|
.v8_30,
|
|
}),
|
|
};
|
|
pub const v9_4: CpuModel = .{
|
|
.name = "v9_4",
|
|
.llvm_name = null,
|
|
.features = featureSet(&[_]Feature{
|
|
.v8_30,
|
|
}),
|
|
};
|
|
pub const v9_5: CpuModel = .{
|
|
.name = "v9_5",
|
|
.llvm_name = null,
|
|
.features = featureSet(&[_]Feature{
|
|
.v8_30,
|
|
}),
|
|
};
|
|
pub const v9_6: CpuModel = .{
|
|
.name = "v9_6",
|
|
.llvm_name = null,
|
|
.features = featureSet(&[_]Feature{
|
|
.v8_30,
|
|
}),
|
|
};
|
|
};
|