1865 lines
43 KiB
Zig
1865 lines
43 KiB
Zig
const feature = @import("std").target.feature;
|
|
const CpuInfo = @import("std").target.cpu.CpuInfo;
|
|
|
|
pub const X86Cpu = enum {
|
|
Amdfam10,
|
|
Athlon,
|
|
Athlon4,
|
|
AthlonFx,
|
|
AthlonMp,
|
|
AthlonTbird,
|
|
AthlonXp,
|
|
Athlon64,
|
|
Athlon64Sse3,
|
|
Atom,
|
|
Barcelona,
|
|
Bdver1,
|
|
Bdver2,
|
|
Bdver3,
|
|
Bdver4,
|
|
Bonnell,
|
|
Broadwell,
|
|
Btver1,
|
|
Btver2,
|
|
C3,
|
|
C32,
|
|
Cannonlake,
|
|
Cascadelake,
|
|
Cooperlake,
|
|
CoreAvxI,
|
|
CoreAvx2,
|
|
Core2,
|
|
Corei7,
|
|
Corei7Avx,
|
|
Generic,
|
|
Geode,
|
|
Goldmont,
|
|
GoldmontPlus,
|
|
Haswell,
|
|
I386,
|
|
I486,
|
|
I586,
|
|
I686,
|
|
IcelakeClient,
|
|
IcelakeServer,
|
|
Ivybridge,
|
|
K6,
|
|
K62,
|
|
K63,
|
|
K8,
|
|
K8Sse3,
|
|
Knl,
|
|
Knm,
|
|
Lakemont,
|
|
Nehalem,
|
|
Nocona,
|
|
Opteron,
|
|
OpteronSse3,
|
|
Penryn,
|
|
Pentium,
|
|
PentiumM,
|
|
PentiumMmx,
|
|
Pentium2,
|
|
Pentium3,
|
|
Pentium3m,
|
|
Pentium4,
|
|
Pentium4m,
|
|
Pentiumpro,
|
|
Prescott,
|
|
Sandybridge,
|
|
Silvermont,
|
|
Skx,
|
|
Skylake,
|
|
SkylakeAvx512,
|
|
Slm,
|
|
Tigerlake,
|
|
Tremont,
|
|
Westmere,
|
|
WinchipC6,
|
|
Winchip2,
|
|
X8664,
|
|
Yonah,
|
|
Znver1,
|
|
Znver2,
|
|
|
|
const FeatureType = feature.X86Feature;
|
|
|
|
pub fn getInfo(self: @This()) CpuInfo(@This(), FeatureType) {
|
|
return cpu_infos[@enumToInt(self)];
|
|
}
|
|
|
|
pub const cpu_infos = [@memberCount(@This())]CpuInfo(@This(), FeatureType) {
|
|
CpuInfo(@This(), FeatureType).create(.Amdfam10, "amdfam10", &[_]FeatureType {
|
|
.Mmx,
|
|
.Dnowa3,
|
|
.Bit64,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Cx16,
|
|
.Fxsr,
|
|
.FastScalarShiftMasks,
|
|
.Sahf,
|
|
.Lzcnt,
|
|
.Nopl,
|
|
.Popcnt,
|
|
.Sse,
|
|
.Sse4a,
|
|
.SlowShld,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Athlon, "athlon", &[_]FeatureType {
|
|
.Mmx,
|
|
.Dnowa3,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Nopl,
|
|
.SlowShld,
|
|
.SlowUnalignedMem16,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Athlon4, "athlon-4", &[_]FeatureType {
|
|
.Mmx,
|
|
.Dnowa3,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Fxsr,
|
|
.Nopl,
|
|
.Sse,
|
|
.SlowShld,
|
|
.SlowUnalignedMem16,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.AthlonFx, "athlon-fx", &[_]FeatureType {
|
|
.Mmx,
|
|
.Dnowa3,
|
|
.Bit64,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Fxsr,
|
|
.FastScalarShiftMasks,
|
|
.Nopl,
|
|
.Sse,
|
|
.Sse2,
|
|
.SlowShld,
|
|
.SlowUnalignedMem16,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.AthlonMp, "athlon-mp", &[_]FeatureType {
|
|
.Mmx,
|
|
.Dnowa3,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Fxsr,
|
|
.Nopl,
|
|
.Sse,
|
|
.SlowShld,
|
|
.SlowUnalignedMem16,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.AthlonTbird, "athlon-tbird", &[_]FeatureType {
|
|
.Mmx,
|
|
.Dnowa3,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Nopl,
|
|
.SlowShld,
|
|
.SlowUnalignedMem16,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.AthlonXp, "athlon-xp", &[_]FeatureType {
|
|
.Mmx,
|
|
.Dnowa3,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Fxsr,
|
|
.Nopl,
|
|
.Sse,
|
|
.SlowShld,
|
|
.SlowUnalignedMem16,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Athlon64, "athlon64", &[_]FeatureType {
|
|
.Mmx,
|
|
.Dnowa3,
|
|
.Bit64,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Fxsr,
|
|
.FastScalarShiftMasks,
|
|
.Nopl,
|
|
.Sse,
|
|
.Sse2,
|
|
.SlowShld,
|
|
.SlowUnalignedMem16,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Athlon64Sse3, "athlon64-sse3", &[_]FeatureType {
|
|
.Mmx,
|
|
.Dnowa3,
|
|
.Bit64,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Cx16,
|
|
.Fxsr,
|
|
.FastScalarShiftMasks,
|
|
.Nopl,
|
|
.Sse,
|
|
.Sse3,
|
|
.SlowShld,
|
|
.SlowUnalignedMem16,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Atom, "atom", &[_]FeatureType {
|
|
.Bit64,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Cx16,
|
|
.Fxsr,
|
|
.Sahf,
|
|
.LeaSp,
|
|
.LeaUsesAg,
|
|
.Mmx,
|
|
.Movbe,
|
|
.Nopl,
|
|
.PadShortFunctions,
|
|
.Sse,
|
|
.Ssse3,
|
|
.IdivlToDivb,
|
|
.IdivqToDivl,
|
|
.SlowTwoMemOps,
|
|
.SlowUnalignedMem16,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Barcelona, "barcelona", &[_]FeatureType {
|
|
.Mmx,
|
|
.Dnowa3,
|
|
.Bit64,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Cx16,
|
|
.Fxsr,
|
|
.FastScalarShiftMasks,
|
|
.Sahf,
|
|
.Lzcnt,
|
|
.Nopl,
|
|
.Popcnt,
|
|
.Sse,
|
|
.Sse4a,
|
|
.SlowShld,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Bdver1, "bdver1", &[_]FeatureType {
|
|
.Bit64,
|
|
.Sse,
|
|
.Aes,
|
|
.Branchfusion,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Cx16,
|
|
.Fxsr,
|
|
.Fast11bytenop,
|
|
.FastScalarShiftMasks,
|
|
.Sahf,
|
|
.Lwp,
|
|
.Lzcnt,
|
|
.Mmx,
|
|
.Nopl,
|
|
.Pclmul,
|
|
.Popcnt,
|
|
.Prfchw,
|
|
.SlowShld,
|
|
.X87,
|
|
.Xop,
|
|
.Xsave,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Bdver2, "bdver2", &[_]FeatureType {
|
|
.Bit64,
|
|
.Sse,
|
|
.Aes,
|
|
.Bmi,
|
|
.Branchfusion,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Cx16,
|
|
.F16c,
|
|
.Fma,
|
|
.Fxsr,
|
|
.Fast11bytenop,
|
|
.FastBextr,
|
|
.FastScalarShiftMasks,
|
|
.Sahf,
|
|
.Lwp,
|
|
.Lzcnt,
|
|
.Mmx,
|
|
.Nopl,
|
|
.Pclmul,
|
|
.Popcnt,
|
|
.Prfchw,
|
|
.SlowShld,
|
|
.Tbm,
|
|
.X87,
|
|
.Xop,
|
|
.Xsave,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Bdver3, "bdver3", &[_]FeatureType {
|
|
.Bit64,
|
|
.Sse,
|
|
.Aes,
|
|
.Bmi,
|
|
.Branchfusion,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Cx16,
|
|
.F16c,
|
|
.Fma,
|
|
.Fsgsbase,
|
|
.Fxsr,
|
|
.Fast11bytenop,
|
|
.FastBextr,
|
|
.FastScalarShiftMasks,
|
|
.Sahf,
|
|
.Lwp,
|
|
.Lzcnt,
|
|
.Mmx,
|
|
.Nopl,
|
|
.Pclmul,
|
|
.Popcnt,
|
|
.Prfchw,
|
|
.SlowShld,
|
|
.Tbm,
|
|
.X87,
|
|
.Xop,
|
|
.Xsave,
|
|
.Xsaveopt,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Bdver4, "bdver4", &[_]FeatureType {
|
|
.Bit64,
|
|
.Sse,
|
|
.Aes,
|
|
.Avx2,
|
|
.Bmi,
|
|
.Bmi2,
|
|
.Branchfusion,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Cx16,
|
|
.F16c,
|
|
.Fma,
|
|
.Fsgsbase,
|
|
.Fxsr,
|
|
.Fast11bytenop,
|
|
.FastBextr,
|
|
.FastScalarShiftMasks,
|
|
.Sahf,
|
|
.Lwp,
|
|
.Lzcnt,
|
|
.Mmx,
|
|
.Mwaitx,
|
|
.Nopl,
|
|
.Pclmul,
|
|
.Popcnt,
|
|
.Prfchw,
|
|
.SlowShld,
|
|
.Tbm,
|
|
.X87,
|
|
.Xop,
|
|
.Xsave,
|
|
.Xsaveopt,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Bonnell, "bonnell", &[_]FeatureType {
|
|
.Bit64,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Cx16,
|
|
.Fxsr,
|
|
.Sahf,
|
|
.LeaSp,
|
|
.LeaUsesAg,
|
|
.Mmx,
|
|
.Movbe,
|
|
.Nopl,
|
|
.PadShortFunctions,
|
|
.Sse,
|
|
.Ssse3,
|
|
.IdivlToDivb,
|
|
.IdivqToDivl,
|
|
.SlowTwoMemOps,
|
|
.SlowUnalignedMem16,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Broadwell, "broadwell", &[_]FeatureType {
|
|
.Bit64,
|
|
.Adx,
|
|
.Sse,
|
|
.Avx,
|
|
.Avx2,
|
|
.Bmi,
|
|
.Bmi2,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Cx16,
|
|
.Ermsb,
|
|
.F16c,
|
|
.Fma,
|
|
.Fsgsbase,
|
|
.Fxsr,
|
|
.FastShldRotate,
|
|
.FastScalarFsqrt,
|
|
.FastVariableShuffle,
|
|
.Invpcid,
|
|
.Sahf,
|
|
.Lzcnt,
|
|
.FalseDepsLzcntTzcnt,
|
|
.Mmx,
|
|
.Movbe,
|
|
.Macrofusion,
|
|
.MergeToThreewayBranch,
|
|
.Nopl,
|
|
.Pclmul,
|
|
.Popcnt,
|
|
.FalseDepsPopcnt,
|
|
.Prfchw,
|
|
.Rdrnd,
|
|
.Rdseed,
|
|
.Sse42,
|
|
.Slow3opsLea,
|
|
.IdivqToDivl,
|
|
.X87,
|
|
.Xsave,
|
|
.Xsaveopt,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Btver1, "btver1", &[_]FeatureType {
|
|
.Bit64,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Cx16,
|
|
.Fxsr,
|
|
.Fast15bytenop,
|
|
.FastScalarShiftMasks,
|
|
.FastVectorShiftMasks,
|
|
.Sahf,
|
|
.Lzcnt,
|
|
.Mmx,
|
|
.Nopl,
|
|
.Popcnt,
|
|
.Prfchw,
|
|
.Sse,
|
|
.Sse4a,
|
|
.Ssse3,
|
|
.SlowShld,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Btver2, "btver2", &[_]FeatureType {
|
|
.Bit64,
|
|
.Sse,
|
|
.Aes,
|
|
.Avx,
|
|
.Bmi,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Cx16,
|
|
.F16c,
|
|
.Fxsr,
|
|
.Fast15bytenop,
|
|
.FastBextr,
|
|
.FastHops,
|
|
.FastLzcnt,
|
|
.FastPartialYmmOrZmmWrite,
|
|
.FastScalarShiftMasks,
|
|
.FastVectorShiftMasks,
|
|
.Sahf,
|
|
.Lzcnt,
|
|
.Mmx,
|
|
.Movbe,
|
|
.Nopl,
|
|
.Pclmul,
|
|
.Popcnt,
|
|
.Prfchw,
|
|
.Sse4a,
|
|
.Ssse3,
|
|
.SlowShld,
|
|
.X87,
|
|
.Xsave,
|
|
.Xsaveopt,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.C3, "c3", &[_]FeatureType {
|
|
.Mmx,
|
|
.Dnow3,
|
|
.SlowUnalignedMem16,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.C32, "c3-2", &[_]FeatureType {
|
|
.Cmov,
|
|
.Cx8,
|
|
.Fxsr,
|
|
.Mmx,
|
|
.Sse,
|
|
.SlowUnalignedMem16,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Cannonlake, "cannonlake", &[_]FeatureType {
|
|
.Bit64,
|
|
.Adx,
|
|
.Sse,
|
|
.Aes,
|
|
.Avx,
|
|
.Avx2,
|
|
.Avx512f,
|
|
.Bmi,
|
|
.Bmi2,
|
|
.Avx512bw,
|
|
.Avx512cd,
|
|
.Clflushopt,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Cx16,
|
|
.Avx512dq,
|
|
.Ermsb,
|
|
.F16c,
|
|
.Fma,
|
|
.Fsgsbase,
|
|
.Fxsr,
|
|
.FastShldRotate,
|
|
.FastScalarFsqrt,
|
|
.FastVariableShuffle,
|
|
.FastVectorFsqrt,
|
|
.FastGather,
|
|
.Avx512ifma,
|
|
.Invpcid,
|
|
.Sahf,
|
|
.Lzcnt,
|
|
.Mmx,
|
|
.Movbe,
|
|
.Macrofusion,
|
|
.MergeToThreewayBranch,
|
|
.Nopl,
|
|
.Pclmul,
|
|
.Pku,
|
|
.Popcnt,
|
|
.Prfchw,
|
|
.Prefer256Bit,
|
|
.Rdrnd,
|
|
.Rdseed,
|
|
.Sgx,
|
|
.Sha,
|
|
.Sse42,
|
|
.Slow3opsLea,
|
|
.IdivqToDivl,
|
|
.Avx512vbmi,
|
|
.Avx512vl,
|
|
.X87,
|
|
.Xsave,
|
|
.Xsavec,
|
|
.Xsaveopt,
|
|
.Xsaves,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Cascadelake, "cascadelake", &[_]FeatureType {
|
|
.Bit64,
|
|
.Adx,
|
|
.Sse,
|
|
.Aes,
|
|
.Avx,
|
|
.Avx2,
|
|
.Avx512f,
|
|
.Bmi,
|
|
.Bmi2,
|
|
.Avx512bw,
|
|
.Avx512cd,
|
|
.Clflushopt,
|
|
.Clwb,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Cx16,
|
|
.Avx512dq,
|
|
.Ermsb,
|
|
.F16c,
|
|
.Fma,
|
|
.Fsgsbase,
|
|
.Fxsr,
|
|
.FastShldRotate,
|
|
.FastScalarFsqrt,
|
|
.FastVariableShuffle,
|
|
.FastVectorFsqrt,
|
|
.FastGather,
|
|
.Invpcid,
|
|
.Sahf,
|
|
.Lzcnt,
|
|
.Mmx,
|
|
.Movbe,
|
|
.Macrofusion,
|
|
.MergeToThreewayBranch,
|
|
.Nopl,
|
|
.Pclmul,
|
|
.Pku,
|
|
.Popcnt,
|
|
.FalseDepsPopcnt,
|
|
.Prfchw,
|
|
.Prefer256Bit,
|
|
.Rdrnd,
|
|
.Rdseed,
|
|
.Sse42,
|
|
.Slow3opsLea,
|
|
.IdivqToDivl,
|
|
.Avx512vl,
|
|
.Avx512vnni,
|
|
.X87,
|
|
.Xsave,
|
|
.Xsavec,
|
|
.Xsaveopt,
|
|
.Xsaves,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Cooperlake, "cooperlake", &[_]FeatureType {
|
|
.Bit64,
|
|
.Adx,
|
|
.Sse,
|
|
.Aes,
|
|
.Avx,
|
|
.Avx2,
|
|
.Avx512f,
|
|
.Avx512bf16,
|
|
.Bmi,
|
|
.Bmi2,
|
|
.Avx512bw,
|
|
.Avx512cd,
|
|
.Clflushopt,
|
|
.Clwb,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Cx16,
|
|
.Avx512dq,
|
|
.Ermsb,
|
|
.F16c,
|
|
.Fma,
|
|
.Fsgsbase,
|
|
.Fxsr,
|
|
.FastShldRotate,
|
|
.FastScalarFsqrt,
|
|
.FastVariableShuffle,
|
|
.FastVectorFsqrt,
|
|
.FastGather,
|
|
.Invpcid,
|
|
.Sahf,
|
|
.Lzcnt,
|
|
.Mmx,
|
|
.Movbe,
|
|
.Macrofusion,
|
|
.MergeToThreewayBranch,
|
|
.Nopl,
|
|
.Pclmul,
|
|
.Pku,
|
|
.Popcnt,
|
|
.FalseDepsPopcnt,
|
|
.Prfchw,
|
|
.Prefer256Bit,
|
|
.Rdrnd,
|
|
.Rdseed,
|
|
.Sse42,
|
|
.Slow3opsLea,
|
|
.IdivqToDivl,
|
|
.Avx512vl,
|
|
.Avx512vnni,
|
|
.X87,
|
|
.Xsave,
|
|
.Xsavec,
|
|
.Xsaveopt,
|
|
.Xsaves,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.CoreAvxI, "core-avx-i", &[_]FeatureType {
|
|
.Bit64,
|
|
.Sse,
|
|
.Avx,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Cx16,
|
|
.F16c,
|
|
.Fsgsbase,
|
|
.Fxsr,
|
|
.FastShldRotate,
|
|
.FastScalarFsqrt,
|
|
.Sahf,
|
|
.Mmx,
|
|
.Macrofusion,
|
|
.MergeToThreewayBranch,
|
|
.Nopl,
|
|
.Pclmul,
|
|
.Popcnt,
|
|
.FalseDepsPopcnt,
|
|
.Rdrnd,
|
|
.Sse42,
|
|
.Slow3opsLea,
|
|
.IdivqToDivl,
|
|
.SlowUnalignedMem32,
|
|
.X87,
|
|
.Xsave,
|
|
.Xsaveopt,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.CoreAvx2, "core-avx2", &[_]FeatureType {
|
|
.Bit64,
|
|
.Sse,
|
|
.Avx,
|
|
.Avx2,
|
|
.Bmi,
|
|
.Bmi2,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Cx16,
|
|
.Ermsb,
|
|
.F16c,
|
|
.Fma,
|
|
.Fsgsbase,
|
|
.Fxsr,
|
|
.FastShldRotate,
|
|
.FastScalarFsqrt,
|
|
.FastVariableShuffle,
|
|
.Invpcid,
|
|
.Sahf,
|
|
.Lzcnt,
|
|
.FalseDepsLzcntTzcnt,
|
|
.Mmx,
|
|
.Movbe,
|
|
.Macrofusion,
|
|
.MergeToThreewayBranch,
|
|
.Nopl,
|
|
.Pclmul,
|
|
.Popcnt,
|
|
.FalseDepsPopcnt,
|
|
.Rdrnd,
|
|
.Sse42,
|
|
.Slow3opsLea,
|
|
.IdivqToDivl,
|
|
.X87,
|
|
.Xsave,
|
|
.Xsaveopt,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Core2, "core2", &[_]FeatureType {
|
|
.Bit64,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Cx16,
|
|
.Fxsr,
|
|
.Sahf,
|
|
.Mmx,
|
|
.Macrofusion,
|
|
.Nopl,
|
|
.Sse,
|
|
.Ssse3,
|
|
.SlowUnalignedMem16,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Corei7, "corei7", &[_]FeatureType {
|
|
.Bit64,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Cx16,
|
|
.Fxsr,
|
|
.Sahf,
|
|
.Mmx,
|
|
.Macrofusion,
|
|
.Nopl,
|
|
.Popcnt,
|
|
.Sse,
|
|
.Sse42,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Corei7Avx, "corei7-avx", &[_]FeatureType {
|
|
.Bit64,
|
|
.Sse,
|
|
.Avx,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Cx16,
|
|
.Fxsr,
|
|
.FastShldRotate,
|
|
.FastScalarFsqrt,
|
|
.Sahf,
|
|
.Mmx,
|
|
.Macrofusion,
|
|
.MergeToThreewayBranch,
|
|
.Nopl,
|
|
.Pclmul,
|
|
.Popcnt,
|
|
.FalseDepsPopcnt,
|
|
.Sse42,
|
|
.Slow3opsLea,
|
|
.IdivqToDivl,
|
|
.SlowUnalignedMem32,
|
|
.X87,
|
|
.Xsave,
|
|
.Xsaveopt,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Generic, "generic", &[_]FeatureType {
|
|
.Cx8,
|
|
.SlowUnalignedMem16,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Geode, "geode", &[_]FeatureType {
|
|
.Mmx,
|
|
.Dnowa3,
|
|
.Cx8,
|
|
.SlowUnalignedMem16,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Goldmont, "goldmont", &[_]FeatureType {
|
|
.Bit64,
|
|
.Sse,
|
|
.Aes,
|
|
.Clflushopt,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Cx16,
|
|
.Fsgsbase,
|
|
.Fxsr,
|
|
.Sahf,
|
|
.Mmx,
|
|
.Movbe,
|
|
.Nopl,
|
|
.Pclmul,
|
|
.Popcnt,
|
|
.FalseDepsPopcnt,
|
|
.Prfchw,
|
|
.Rdrnd,
|
|
.Rdseed,
|
|
.Sha,
|
|
.Sse42,
|
|
.Ssse3,
|
|
.SlowIncdec,
|
|
.SlowLea,
|
|
.SlowTwoMemOps,
|
|
.X87,
|
|
.Xsave,
|
|
.Xsavec,
|
|
.Xsaveopt,
|
|
.Xsaves,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.GoldmontPlus, "goldmont-plus", &[_]FeatureType {
|
|
.Bit64,
|
|
.Sse,
|
|
.Aes,
|
|
.Clflushopt,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Cx16,
|
|
.Fsgsbase,
|
|
.Fxsr,
|
|
.Sahf,
|
|
.Mmx,
|
|
.Movbe,
|
|
.Nopl,
|
|
.Pclmul,
|
|
.Popcnt,
|
|
.Prfchw,
|
|
.Ptwrite,
|
|
.Rdpid,
|
|
.Rdrnd,
|
|
.Rdseed,
|
|
.Sgx,
|
|
.Sha,
|
|
.Sse42,
|
|
.Ssse3,
|
|
.SlowIncdec,
|
|
.SlowLea,
|
|
.SlowTwoMemOps,
|
|
.X87,
|
|
.Xsave,
|
|
.Xsavec,
|
|
.Xsaveopt,
|
|
.Xsaves,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Haswell, "haswell", &[_]FeatureType {
|
|
.Bit64,
|
|
.Sse,
|
|
.Avx,
|
|
.Avx2,
|
|
.Bmi,
|
|
.Bmi2,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Cx16,
|
|
.Ermsb,
|
|
.F16c,
|
|
.Fma,
|
|
.Fsgsbase,
|
|
.Fxsr,
|
|
.FastShldRotate,
|
|
.FastScalarFsqrt,
|
|
.FastVariableShuffle,
|
|
.Invpcid,
|
|
.Sahf,
|
|
.Lzcnt,
|
|
.FalseDepsLzcntTzcnt,
|
|
.Mmx,
|
|
.Movbe,
|
|
.Macrofusion,
|
|
.MergeToThreewayBranch,
|
|
.Nopl,
|
|
.Pclmul,
|
|
.Popcnt,
|
|
.FalseDepsPopcnt,
|
|
.Rdrnd,
|
|
.Sse42,
|
|
.Slow3opsLea,
|
|
.IdivqToDivl,
|
|
.X87,
|
|
.Xsave,
|
|
.Xsaveopt,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.I386, "i386", &[_]FeatureType {
|
|
.SlowUnalignedMem16,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.I486, "i486", &[_]FeatureType {
|
|
.SlowUnalignedMem16,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.I586, "i586", &[_]FeatureType {
|
|
.Cx8,
|
|
.SlowUnalignedMem16,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.I686, "i686", &[_]FeatureType {
|
|
.Cmov,
|
|
.Cx8,
|
|
.SlowUnalignedMem16,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.IcelakeClient, "icelake-client", &[_]FeatureType {
|
|
.Bit64,
|
|
.Adx,
|
|
.Sse,
|
|
.Aes,
|
|
.Avx,
|
|
.Avx2,
|
|
.Avx512f,
|
|
.Avx512bitalg,
|
|
.Bmi,
|
|
.Bmi2,
|
|
.Avx512bw,
|
|
.Avx512cd,
|
|
.Clflushopt,
|
|
.Clwb,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Cx16,
|
|
.Avx512dq,
|
|
.Ermsb,
|
|
.F16c,
|
|
.Fma,
|
|
.Fsgsbase,
|
|
.Fxsr,
|
|
.FastShldRotate,
|
|
.FastScalarFsqrt,
|
|
.FastVariableShuffle,
|
|
.FastVectorFsqrt,
|
|
.Gfni,
|
|
.FastGather,
|
|
.Avx512ifma,
|
|
.Invpcid,
|
|
.Sahf,
|
|
.Lzcnt,
|
|
.Mmx,
|
|
.Movbe,
|
|
.Macrofusion,
|
|
.MergeToThreewayBranch,
|
|
.Nopl,
|
|
.Pclmul,
|
|
.Pku,
|
|
.Popcnt,
|
|
.Prfchw,
|
|
.Prefer256Bit,
|
|
.Rdpid,
|
|
.Rdrnd,
|
|
.Rdseed,
|
|
.Sgx,
|
|
.Sha,
|
|
.Sse42,
|
|
.Slow3opsLea,
|
|
.IdivqToDivl,
|
|
.Vaes,
|
|
.Avx512vbmi,
|
|
.Avx512vbmi2,
|
|
.Avx512vl,
|
|
.Avx512vnni,
|
|
.Vpclmulqdq,
|
|
.Avx512vpopcntdq,
|
|
.X87,
|
|
.Xsave,
|
|
.Xsavec,
|
|
.Xsaveopt,
|
|
.Xsaves,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.IcelakeServer, "icelake-server", &[_]FeatureType {
|
|
.Bit64,
|
|
.Adx,
|
|
.Sse,
|
|
.Aes,
|
|
.Avx,
|
|
.Avx2,
|
|
.Avx512f,
|
|
.Avx512bitalg,
|
|
.Bmi,
|
|
.Bmi2,
|
|
.Avx512bw,
|
|
.Avx512cd,
|
|
.Clflushopt,
|
|
.Clwb,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Cx16,
|
|
.Avx512dq,
|
|
.Ermsb,
|
|
.F16c,
|
|
.Fma,
|
|
.Fsgsbase,
|
|
.Fxsr,
|
|
.FastShldRotate,
|
|
.FastScalarFsqrt,
|
|
.FastVariableShuffle,
|
|
.FastVectorFsqrt,
|
|
.Gfni,
|
|
.FastGather,
|
|
.Avx512ifma,
|
|
.Invpcid,
|
|
.Sahf,
|
|
.Lzcnt,
|
|
.Mmx,
|
|
.Movbe,
|
|
.Macrofusion,
|
|
.MergeToThreewayBranch,
|
|
.Nopl,
|
|
.Pclmul,
|
|
.Pconfig,
|
|
.Pku,
|
|
.Popcnt,
|
|
.Prfchw,
|
|
.Prefer256Bit,
|
|
.Rdpid,
|
|
.Rdrnd,
|
|
.Rdseed,
|
|
.Sgx,
|
|
.Sha,
|
|
.Sse42,
|
|
.Slow3opsLea,
|
|
.IdivqToDivl,
|
|
.Vaes,
|
|
.Avx512vbmi,
|
|
.Avx512vbmi2,
|
|
.Avx512vl,
|
|
.Avx512vnni,
|
|
.Vpclmulqdq,
|
|
.Avx512vpopcntdq,
|
|
.Wbnoinvd,
|
|
.X87,
|
|
.Xsave,
|
|
.Xsavec,
|
|
.Xsaveopt,
|
|
.Xsaves,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Ivybridge, "ivybridge", &[_]FeatureType {
|
|
.Bit64,
|
|
.Sse,
|
|
.Avx,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Cx16,
|
|
.F16c,
|
|
.Fsgsbase,
|
|
.Fxsr,
|
|
.FastShldRotate,
|
|
.FastScalarFsqrt,
|
|
.Sahf,
|
|
.Mmx,
|
|
.Macrofusion,
|
|
.MergeToThreewayBranch,
|
|
.Nopl,
|
|
.Pclmul,
|
|
.Popcnt,
|
|
.FalseDepsPopcnt,
|
|
.Rdrnd,
|
|
.Sse42,
|
|
.Slow3opsLea,
|
|
.IdivqToDivl,
|
|
.SlowUnalignedMem32,
|
|
.X87,
|
|
.Xsave,
|
|
.Xsaveopt,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.K6, "k6", &[_]FeatureType {
|
|
.Cx8,
|
|
.Mmx,
|
|
.SlowUnalignedMem16,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.K62, "k6-2", &[_]FeatureType {
|
|
.Mmx,
|
|
.Dnow3,
|
|
.Cx8,
|
|
.SlowUnalignedMem16,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.K63, "k6-3", &[_]FeatureType {
|
|
.Mmx,
|
|
.Dnow3,
|
|
.Cx8,
|
|
.SlowUnalignedMem16,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.K8, "k8", &[_]FeatureType {
|
|
.Mmx,
|
|
.Dnowa3,
|
|
.Bit64,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Fxsr,
|
|
.FastScalarShiftMasks,
|
|
.Nopl,
|
|
.Sse,
|
|
.Sse2,
|
|
.SlowShld,
|
|
.SlowUnalignedMem16,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.K8Sse3, "k8-sse3", &[_]FeatureType {
|
|
.Mmx,
|
|
.Dnowa3,
|
|
.Bit64,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Cx16,
|
|
.Fxsr,
|
|
.FastScalarShiftMasks,
|
|
.Nopl,
|
|
.Sse,
|
|
.Sse3,
|
|
.SlowShld,
|
|
.SlowUnalignedMem16,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Knl, "knl", &[_]FeatureType {
|
|
.Bit64,
|
|
.Adx,
|
|
.Sse,
|
|
.Aes,
|
|
.Avx512f,
|
|
.Bmi,
|
|
.Bmi2,
|
|
.Avx512cd,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Cx16,
|
|
.Avx512er,
|
|
.F16c,
|
|
.Fma,
|
|
.Fsgsbase,
|
|
.Fxsr,
|
|
.FastPartialYmmOrZmmWrite,
|
|
.FastGather,
|
|
.Sahf,
|
|
.Lzcnt,
|
|
.Mmx,
|
|
.Movbe,
|
|
.Nopl,
|
|
.Pclmul,
|
|
.Avx512pf,
|
|
.Popcnt,
|
|
.Prefetchwt1,
|
|
.Prfchw,
|
|
.Rdrnd,
|
|
.Rdseed,
|
|
.Slow3opsLea,
|
|
.IdivqToDivl,
|
|
.SlowIncdec,
|
|
.SlowPmaddwd,
|
|
.SlowTwoMemOps,
|
|
.X87,
|
|
.Xsave,
|
|
.Xsaveopt,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Knm, "knm", &[_]FeatureType {
|
|
.Bit64,
|
|
.Adx,
|
|
.Sse,
|
|
.Aes,
|
|
.Avx512f,
|
|
.Bmi,
|
|
.Bmi2,
|
|
.Avx512cd,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Cx16,
|
|
.Avx512er,
|
|
.F16c,
|
|
.Fma,
|
|
.Fsgsbase,
|
|
.Fxsr,
|
|
.FastPartialYmmOrZmmWrite,
|
|
.FastGather,
|
|
.Sahf,
|
|
.Lzcnt,
|
|
.Mmx,
|
|
.Movbe,
|
|
.Nopl,
|
|
.Pclmul,
|
|
.Avx512pf,
|
|
.Popcnt,
|
|
.Prefetchwt1,
|
|
.Prfchw,
|
|
.Rdrnd,
|
|
.Rdseed,
|
|
.Slow3opsLea,
|
|
.IdivqToDivl,
|
|
.SlowIncdec,
|
|
.SlowPmaddwd,
|
|
.SlowTwoMemOps,
|
|
.Avx512vpopcntdq,
|
|
.X87,
|
|
.Xsave,
|
|
.Xsaveopt,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Lakemont, "lakemont", &[_]FeatureType {
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Nehalem, "nehalem", &[_]FeatureType {
|
|
.Bit64,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Cx16,
|
|
.Fxsr,
|
|
.Sahf,
|
|
.Mmx,
|
|
.Macrofusion,
|
|
.Nopl,
|
|
.Popcnt,
|
|
.Sse,
|
|
.Sse42,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Nocona, "nocona", &[_]FeatureType {
|
|
.Bit64,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Cx16,
|
|
.Fxsr,
|
|
.Mmx,
|
|
.Nopl,
|
|
.Sse,
|
|
.Sse3,
|
|
.SlowUnalignedMem16,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Opteron, "opteron", &[_]FeatureType {
|
|
.Mmx,
|
|
.Dnowa3,
|
|
.Bit64,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Fxsr,
|
|
.FastScalarShiftMasks,
|
|
.Nopl,
|
|
.Sse,
|
|
.Sse2,
|
|
.SlowShld,
|
|
.SlowUnalignedMem16,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.OpteronSse3, "opteron-sse3", &[_]FeatureType {
|
|
.Mmx,
|
|
.Dnowa3,
|
|
.Bit64,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Cx16,
|
|
.Fxsr,
|
|
.FastScalarShiftMasks,
|
|
.Nopl,
|
|
.Sse,
|
|
.Sse3,
|
|
.SlowShld,
|
|
.SlowUnalignedMem16,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Penryn, "penryn", &[_]FeatureType {
|
|
.Bit64,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Cx16,
|
|
.Fxsr,
|
|
.Sahf,
|
|
.Mmx,
|
|
.Macrofusion,
|
|
.Nopl,
|
|
.Sse,
|
|
.Sse41,
|
|
.SlowUnalignedMem16,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Pentium, "pentium", &[_]FeatureType {
|
|
.Cx8,
|
|
.SlowUnalignedMem16,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.PentiumM, "pentium-m", &[_]FeatureType {
|
|
.Cmov,
|
|
.Cx8,
|
|
.Fxsr,
|
|
.Mmx,
|
|
.Nopl,
|
|
.Sse,
|
|
.Sse2,
|
|
.SlowUnalignedMem16,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.PentiumMmx, "pentium-mmx", &[_]FeatureType {
|
|
.Cx8,
|
|
.Mmx,
|
|
.SlowUnalignedMem16,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Pentium2, "pentium2", &[_]FeatureType {
|
|
.Cmov,
|
|
.Cx8,
|
|
.Fxsr,
|
|
.Mmx,
|
|
.Nopl,
|
|
.SlowUnalignedMem16,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Pentium3, "pentium3", &[_]FeatureType {
|
|
.Cmov,
|
|
.Cx8,
|
|
.Fxsr,
|
|
.Mmx,
|
|
.Nopl,
|
|
.Sse,
|
|
.SlowUnalignedMem16,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Pentium3m, "pentium3m", &[_]FeatureType {
|
|
.Cmov,
|
|
.Cx8,
|
|
.Fxsr,
|
|
.Mmx,
|
|
.Nopl,
|
|
.Sse,
|
|
.SlowUnalignedMem16,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Pentium4, "pentium4", &[_]FeatureType {
|
|
.Cmov,
|
|
.Cx8,
|
|
.Fxsr,
|
|
.Mmx,
|
|
.Nopl,
|
|
.Sse,
|
|
.Sse2,
|
|
.SlowUnalignedMem16,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Pentium4m, "pentium4m", &[_]FeatureType {
|
|
.Cmov,
|
|
.Cx8,
|
|
.Fxsr,
|
|
.Mmx,
|
|
.Nopl,
|
|
.Sse,
|
|
.Sse2,
|
|
.SlowUnalignedMem16,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Pentiumpro, "pentiumpro", &[_]FeatureType {
|
|
.Cmov,
|
|
.Cx8,
|
|
.Nopl,
|
|
.SlowUnalignedMem16,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Prescott, "prescott", &[_]FeatureType {
|
|
.Cmov,
|
|
.Cx8,
|
|
.Fxsr,
|
|
.Mmx,
|
|
.Nopl,
|
|
.Sse,
|
|
.Sse3,
|
|
.SlowUnalignedMem16,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Sandybridge, "sandybridge", &[_]FeatureType {
|
|
.Bit64,
|
|
.Sse,
|
|
.Avx,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Cx16,
|
|
.Fxsr,
|
|
.FastShldRotate,
|
|
.FastScalarFsqrt,
|
|
.Sahf,
|
|
.Mmx,
|
|
.Macrofusion,
|
|
.MergeToThreewayBranch,
|
|
.Nopl,
|
|
.Pclmul,
|
|
.Popcnt,
|
|
.FalseDepsPopcnt,
|
|
.Sse42,
|
|
.Slow3opsLea,
|
|
.IdivqToDivl,
|
|
.SlowUnalignedMem32,
|
|
.X87,
|
|
.Xsave,
|
|
.Xsaveopt,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Silvermont, "silvermont", &[_]FeatureType {
|
|
.Bit64,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Cx16,
|
|
.Fxsr,
|
|
.Sahf,
|
|
.Mmx,
|
|
.Movbe,
|
|
.Nopl,
|
|
.Sse,
|
|
.Pclmul,
|
|
.Popcnt,
|
|
.FalseDepsPopcnt,
|
|
.Prfchw,
|
|
.Rdrnd,
|
|
.Sse42,
|
|
.Ssse3,
|
|
.IdivqToDivl,
|
|
.SlowIncdec,
|
|
.SlowLea,
|
|
.SlowPmulld,
|
|
.SlowTwoMemOps,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Skx, "skx", &[_]FeatureType {
|
|
.Bit64,
|
|
.Adx,
|
|
.Sse,
|
|
.Aes,
|
|
.Avx,
|
|
.Avx2,
|
|
.Avx512f,
|
|
.Bmi,
|
|
.Bmi2,
|
|
.Avx512bw,
|
|
.Avx512cd,
|
|
.Clflushopt,
|
|
.Clwb,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Cx16,
|
|
.Avx512dq,
|
|
.Ermsb,
|
|
.F16c,
|
|
.Fma,
|
|
.Fsgsbase,
|
|
.Fxsr,
|
|
.FastShldRotate,
|
|
.FastScalarFsqrt,
|
|
.FastVariableShuffle,
|
|
.FastVectorFsqrt,
|
|
.FastGather,
|
|
.Invpcid,
|
|
.Sahf,
|
|
.Lzcnt,
|
|
.Mmx,
|
|
.Movbe,
|
|
.Macrofusion,
|
|
.MergeToThreewayBranch,
|
|
.Nopl,
|
|
.Pclmul,
|
|
.Pku,
|
|
.Popcnt,
|
|
.FalseDepsPopcnt,
|
|
.Prfchw,
|
|
.Prefer256Bit,
|
|
.Rdrnd,
|
|
.Rdseed,
|
|
.Sse42,
|
|
.Slow3opsLea,
|
|
.IdivqToDivl,
|
|
.Avx512vl,
|
|
.X87,
|
|
.Xsave,
|
|
.Xsavec,
|
|
.Xsaveopt,
|
|
.Xsaves,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Skylake, "skylake", &[_]FeatureType {
|
|
.Bit64,
|
|
.Adx,
|
|
.Sse,
|
|
.Aes,
|
|
.Avx,
|
|
.Avx2,
|
|
.Bmi,
|
|
.Bmi2,
|
|
.Clflushopt,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Cx16,
|
|
.Ermsb,
|
|
.F16c,
|
|
.Fma,
|
|
.Fsgsbase,
|
|
.Fxsr,
|
|
.FastShldRotate,
|
|
.FastScalarFsqrt,
|
|
.FastVariableShuffle,
|
|
.FastVectorFsqrt,
|
|
.FastGather,
|
|
.Invpcid,
|
|
.Sahf,
|
|
.Lzcnt,
|
|
.Mmx,
|
|
.Movbe,
|
|
.Macrofusion,
|
|
.MergeToThreewayBranch,
|
|
.Nopl,
|
|
.Pclmul,
|
|
.Popcnt,
|
|
.FalseDepsPopcnt,
|
|
.Prfchw,
|
|
.Rdrnd,
|
|
.Rdseed,
|
|
.Sgx,
|
|
.Sse42,
|
|
.Slow3opsLea,
|
|
.IdivqToDivl,
|
|
.X87,
|
|
.Xsave,
|
|
.Xsavec,
|
|
.Xsaveopt,
|
|
.Xsaves,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.SkylakeAvx512, "skylake-avx512", &[_]FeatureType {
|
|
.Bit64,
|
|
.Adx,
|
|
.Sse,
|
|
.Aes,
|
|
.Avx,
|
|
.Avx2,
|
|
.Avx512f,
|
|
.Bmi,
|
|
.Bmi2,
|
|
.Avx512bw,
|
|
.Avx512cd,
|
|
.Clflushopt,
|
|
.Clwb,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Cx16,
|
|
.Avx512dq,
|
|
.Ermsb,
|
|
.F16c,
|
|
.Fma,
|
|
.Fsgsbase,
|
|
.Fxsr,
|
|
.FastShldRotate,
|
|
.FastScalarFsqrt,
|
|
.FastVariableShuffle,
|
|
.FastVectorFsqrt,
|
|
.FastGather,
|
|
.Invpcid,
|
|
.Sahf,
|
|
.Lzcnt,
|
|
.Mmx,
|
|
.Movbe,
|
|
.Macrofusion,
|
|
.MergeToThreewayBranch,
|
|
.Nopl,
|
|
.Pclmul,
|
|
.Pku,
|
|
.Popcnt,
|
|
.FalseDepsPopcnt,
|
|
.Prfchw,
|
|
.Prefer256Bit,
|
|
.Rdrnd,
|
|
.Rdseed,
|
|
.Sse42,
|
|
.Slow3opsLea,
|
|
.IdivqToDivl,
|
|
.Avx512vl,
|
|
.X87,
|
|
.Xsave,
|
|
.Xsavec,
|
|
.Xsaveopt,
|
|
.Xsaves,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Slm, "slm", &[_]FeatureType {
|
|
.Bit64,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Cx16,
|
|
.Fxsr,
|
|
.Sahf,
|
|
.Mmx,
|
|
.Movbe,
|
|
.Nopl,
|
|
.Sse,
|
|
.Pclmul,
|
|
.Popcnt,
|
|
.FalseDepsPopcnt,
|
|
.Prfchw,
|
|
.Rdrnd,
|
|
.Sse42,
|
|
.Ssse3,
|
|
.IdivqToDivl,
|
|
.SlowIncdec,
|
|
.SlowLea,
|
|
.SlowPmulld,
|
|
.SlowTwoMemOps,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Tigerlake, "tigerlake", &[_]FeatureType {
|
|
.Bit64,
|
|
.Adx,
|
|
.Sse,
|
|
.Aes,
|
|
.Avx,
|
|
.Avx2,
|
|
.Avx512f,
|
|
.Avx512bitalg,
|
|
.Bmi,
|
|
.Bmi2,
|
|
.Avx512bw,
|
|
.Avx512cd,
|
|
.Clflushopt,
|
|
.Clwb,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Cx16,
|
|
.Avx512dq,
|
|
.Ermsb,
|
|
.F16c,
|
|
.Fma,
|
|
.Fsgsbase,
|
|
.Fxsr,
|
|
.FastShldRotate,
|
|
.FastScalarFsqrt,
|
|
.FastVariableShuffle,
|
|
.FastVectorFsqrt,
|
|
.Gfni,
|
|
.FastGather,
|
|
.Avx512ifma,
|
|
.Invpcid,
|
|
.Sahf,
|
|
.Lzcnt,
|
|
.Mmx,
|
|
.Movbe,
|
|
.Movdir64b,
|
|
.Movdiri,
|
|
.Macrofusion,
|
|
.MergeToThreewayBranch,
|
|
.Nopl,
|
|
.Pclmul,
|
|
.Pku,
|
|
.Popcnt,
|
|
.Prfchw,
|
|
.Prefer256Bit,
|
|
.Rdpid,
|
|
.Rdrnd,
|
|
.Rdseed,
|
|
.Sgx,
|
|
.Sha,
|
|
.Shstk,
|
|
.Sse42,
|
|
.Slow3opsLea,
|
|
.IdivqToDivl,
|
|
.Vaes,
|
|
.Avx512vbmi,
|
|
.Avx512vbmi2,
|
|
.Avx512vl,
|
|
.Avx512vnni,
|
|
.Avx512vp2intersect,
|
|
.Vpclmulqdq,
|
|
.Avx512vpopcntdq,
|
|
.X87,
|
|
.Xsave,
|
|
.Xsavec,
|
|
.Xsaveopt,
|
|
.Xsaves,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Tremont, "tremont", &[_]FeatureType {
|
|
.Bit64,
|
|
.Sse,
|
|
.Aes,
|
|
.Cldemote,
|
|
.Clflushopt,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Cx16,
|
|
.Fsgsbase,
|
|
.Fxsr,
|
|
.Gfni,
|
|
.Sahf,
|
|
.Mmx,
|
|
.Movbe,
|
|
.Movdir64b,
|
|
.Movdiri,
|
|
.Nopl,
|
|
.Pclmul,
|
|
.Popcnt,
|
|
.Prfchw,
|
|
.Ptwrite,
|
|
.Rdpid,
|
|
.Rdrnd,
|
|
.Rdseed,
|
|
.Sgx,
|
|
.Sha,
|
|
.Sse42,
|
|
.Ssse3,
|
|
.SlowIncdec,
|
|
.SlowLea,
|
|
.SlowTwoMemOps,
|
|
.Waitpkg,
|
|
.X87,
|
|
.Xsave,
|
|
.Xsavec,
|
|
.Xsaveopt,
|
|
.Xsaves,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Westmere, "westmere", &[_]FeatureType {
|
|
.Bit64,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Cx16,
|
|
.Fxsr,
|
|
.Sahf,
|
|
.Mmx,
|
|
.Macrofusion,
|
|
.Nopl,
|
|
.Sse,
|
|
.Pclmul,
|
|
.Popcnt,
|
|
.Sse42,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.WinchipC6, "winchip-c6", &[_]FeatureType {
|
|
.Mmx,
|
|
.SlowUnalignedMem16,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Winchip2, "winchip2", &[_]FeatureType {
|
|
.Mmx,
|
|
.Dnow3,
|
|
.SlowUnalignedMem16,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.X8664, "x86-64", &[_]FeatureType {
|
|
.Bit64,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Fxsr,
|
|
.Mmx,
|
|
.Macrofusion,
|
|
.Nopl,
|
|
.Sse,
|
|
.Sse2,
|
|
.Slow3opsLea,
|
|
.SlowIncdec,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Yonah, "yonah", &[_]FeatureType {
|
|
.Cmov,
|
|
.Cx8,
|
|
.Fxsr,
|
|
.Mmx,
|
|
.Nopl,
|
|
.Sse,
|
|
.Sse3,
|
|
.SlowUnalignedMem16,
|
|
.X87,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Znver1, "znver1", &[_]FeatureType {
|
|
.Bit64,
|
|
.Adx,
|
|
.Sse,
|
|
.Aes,
|
|
.Avx2,
|
|
.Bmi,
|
|
.Bmi2,
|
|
.Branchfusion,
|
|
.Clflushopt,
|
|
.Clzero,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Cx16,
|
|
.F16c,
|
|
.Fma,
|
|
.Fsgsbase,
|
|
.Fxsr,
|
|
.Fast15bytenop,
|
|
.FastBextr,
|
|
.FastLzcnt,
|
|
.FastScalarShiftMasks,
|
|
.Sahf,
|
|
.Lzcnt,
|
|
.Mmx,
|
|
.Movbe,
|
|
.Mwaitx,
|
|
.Nopl,
|
|
.Pclmul,
|
|
.Popcnt,
|
|
.Prfchw,
|
|
.Rdrnd,
|
|
.Rdseed,
|
|
.Sha,
|
|
.Sse4a,
|
|
.SlowShld,
|
|
.X87,
|
|
.Xsave,
|
|
.Xsavec,
|
|
.Xsaveopt,
|
|
.Xsaves,
|
|
}),
|
|
CpuInfo(@This(), FeatureType).create(.Znver2, "znver2", &[_]FeatureType {
|
|
.Bit64,
|
|
.Adx,
|
|
.Sse,
|
|
.Aes,
|
|
.Avx2,
|
|
.Bmi,
|
|
.Bmi2,
|
|
.Branchfusion,
|
|
.Clflushopt,
|
|
.Clwb,
|
|
.Clzero,
|
|
.Cmov,
|
|
.Cx8,
|
|
.Cx16,
|
|
.F16c,
|
|
.Fma,
|
|
.Fsgsbase,
|
|
.Fxsr,
|
|
.Fast15bytenop,
|
|
.FastBextr,
|
|
.FastLzcnt,
|
|
.FastScalarShiftMasks,
|
|
.Sahf,
|
|
.Lzcnt,
|
|
.Mmx,
|
|
.Movbe,
|
|
.Mwaitx,
|
|
.Nopl,
|
|
.Pclmul,
|
|
.Popcnt,
|
|
.Prfchw,
|
|
.Rdpid,
|
|
.Rdrnd,
|
|
.Rdseed,
|
|
.Sha,
|
|
.Sse4a,
|
|
.SlowShld,
|
|
.Wbnoinvd,
|
|
.X87,
|
|
.Xsave,
|
|
.Xsavec,
|
|
.Xsaveopt,
|
|
.Xsaves,
|
|
}),
|
|
};
|
|
};
|