zig/lib/std/target/feature/ArmFeature.zig
2020-01-19 20:53:15 -05:00

819 lines
31 KiB
Zig

const FeatureInfo = @import("std").target.feature.FeatureInfo;
pub const ArmFeature = enum {
Armv2,
Armv2a,
Armv3,
Armv3m,
Armv4,
Armv4t,
Armv5t,
Armv5te,
Armv5tej,
Armv6,
Armv6j,
Armv6k,
Armv6kz,
Armv6M,
Armv6sM,
Armv6t2,
Armv7A,
Armv7eM,
Armv7k,
Armv7M,
Armv7R,
Armv7s,
Armv7ve,
Armv8A,
Armv8Mbase,
Armv8Mmain,
Armv8R,
Armv81A,
Armv81Mmain,
Armv82A,
Armv83A,
Armv84A,
Armv85A,
Msecext8,
Aclass,
Aes,
AcquireRelease,
AvoidMovsShop,
AvoidPartialCpsr,
Crc,
CheapPredicableCpsr,
VldnAlign,
Crypto,
D32,
Db,
Dfb,
Dsp,
DontWidenVmovs,
Dotprod,
ExecuteOnly,
ExpandFpMlx,
Fp16,
Fp16fml,
Fp64,
Fpao,
FpArmv8,
FpArmv8d16,
FpArmv8d16sp,
FpArmv8sp,
Fpregs,
Fpregs16,
Fpregs64,
Fullfp16,
FuseAes,
FuseLiterals,
HwdivArm,
Hwdiv,
NoBranchPredictor,
RetAddrStack,
Slowfpvmlx,
VmlxHazards,
Lob,
LongCalls,
Mclass,
Mp,
Mve1beat,
Mve2beat,
Mve4beat,
MuxedUnits,
Neon,
Neonfp,
NeonFpmovs,
NaclTrap,
Noarm,
NoMovt,
NoNegImmediates,
DisablePostraScheduler,
NonpipelinedVfp,
Perfmon,
Bit32,
PreferIshst,
LoopAlign,
PreferVmovsr,
ProfUnpr,
Ras,
Rclass,
ReadTpHard,
ReserveR9,
Sb,
Sha2,
SlowFpBrcc,
SlowLoadDSubreg,
SlowOddReg,
SlowVdup32,
SlowVgetlni32,
SplatVfpNeon,
StrictAlign,
Thumb2,
Trustzone,
UseAa,
UseMisched,
WideStrideVfp,
V7clrex,
Vfp2,
Vfp2sp,
Vfp3,
Vfp3d16,
Vfp3d16sp,
Vfp3sp,
Vfp4,
Vfp4d16,
Vfp4d16sp,
Vfp4sp,
VmlxForwarding,
Virtualization,
Zcz,
Mvefp,
Mve,
V4t,
V5te,
V5t,
V6k,
V6m,
V6,
V6t2,
V7,
V8m,
V8mmain,
V8,
V81mmain,
V81a,
V82a,
V83a,
V84a,
V85a,
Iwmmxt,
Iwmmxt2,
SoftFloat,
ThumbMode,
A5,
A7,
A8,
A9,
A12,
A15,
A17,
A32,
A35,
A53,
A55,
A57,
A72,
A73,
A75,
A76,
Exynos,
Krait,
Kryo,
M3,
R4,
R5,
R7,
R52,
Swift,
Xscale,
pub fn getInfo(self: @This()) FeatureInfo {
return feature_infos[@enumToInt(self)];
}
pub const feature_infos = [@memberCount(@This())]FeatureInfo(@This()) {
FeatureInfo(@This()).create(.Armv2, "armv2", "ARMv2 architecture", "armv2"),
FeatureInfo(@This()).create(.Armv2a, "armv2a", "ARMv2a architecture", "armv2a"),
FeatureInfo(@This()).create(.Armv3, "armv3", "ARMv3 architecture", "armv3"),
FeatureInfo(@This()).create(.Armv3m, "armv3m", "ARMv3m architecture", "armv3m"),
FeatureInfo(@This()).create(.Armv4, "armv4", "ARMv4 architecture", "armv4"),
FeatureInfo(@This()).createWithSubfeatures(.Armv4t, "armv4t", "ARMv4t architecture", "armv4t", &[_]@This() {
.V4t,
}),
FeatureInfo(@This()).createWithSubfeatures(.Armv5t, "armv5t", "ARMv5t architecture", "armv5t", &[_]@This() {
.V4t,
}),
FeatureInfo(@This()).createWithSubfeatures(.Armv5te, "armv5te", "ARMv5te architecture", "armv5te", &[_]@This() {
.V4t,
}),
FeatureInfo(@This()).createWithSubfeatures(.Armv5tej, "armv5tej", "ARMv5tej architecture", "armv5tej", &[_]@This() {
.V4t,
}),
FeatureInfo(@This()).createWithSubfeatures(.Armv6, "armv6", "ARMv6 architecture", "armv6", &[_]@This() {
.V4t,
.Dsp,
}),
FeatureInfo(@This()).createWithSubfeatures(.Armv6j, "armv6j", "ARMv7a architecture", "armv6j", &[_]@This() {
.V4t,
.Dsp,
}),
FeatureInfo(@This()).createWithSubfeatures(.Armv6k, "armv6k", "ARMv6k architecture", "armv6k", &[_]@This() {
.V4t,
}),
FeatureInfo(@This()).createWithSubfeatures(.Armv6kz, "armv6kz", "ARMv6kz architecture", "armv6kz", &[_]@This() {
.V4t,
.Trustzone,
}),
FeatureInfo(@This()).createWithSubfeatures(.Armv6M, "armv6-m", "ARMv6m architecture", "armv6-m", &[_]@This() {
.Mclass,
.StrictAlign,
.ThumbMode,
.Db,
.V4t,
.Noarm,
}),
FeatureInfo(@This()).createWithSubfeatures(.Armv6sM, "armv6s-m", "ARMv6sm architecture", "armv6s-m", &[_]@This() {
.Mclass,
.StrictAlign,
.ThumbMode,
.Db,
.V4t,
.Noarm,
}),
FeatureInfo(@This()).createWithSubfeatures(.Armv6t2, "armv6t2", "ARMv6t2 architecture", "armv6t2", &[_]@This() {
.Thumb2,
.V4t,
.Dsp,
}),
FeatureInfo(@This()).createWithSubfeatures(.Armv7A, "armv7-a", "ARMv7a architecture", "armv7-a", &[_]@This() {
.Thumb2,
.Perfmon,
.Db,
.Dsp,
.V7clrex,
.V4t,
.Fpregs,
.D32,
.Aclass,
}),
FeatureInfo(@This()).createWithSubfeatures(.Armv7eM, "armv7e-m", "ARMv7em architecture", "armv7e-m", &[_]@This() {
.Thumb2,
.Mclass,
.Perfmon,
.ThumbMode,
.Db,
.Dsp,
.V7clrex,
.V4t,
.Hwdiv,
.Noarm,
}),
FeatureInfo(@This()).createWithSubfeatures(.Armv7k, "armv7k", "ARMv7a architecture", "armv7k", &[_]@This() {
.Thumb2,
.Perfmon,
.Db,
.Dsp,
.V7clrex,
.V4t,
.Fpregs,
.D32,
.Aclass,
}),
FeatureInfo(@This()).createWithSubfeatures(.Armv7M, "armv7-m", "ARMv7m architecture", "armv7-m", &[_]@This() {
.Thumb2,
.Mclass,
.Perfmon,
.ThumbMode,
.Db,
.V7clrex,
.V4t,
.Hwdiv,
.Noarm,
}),
FeatureInfo(@This()).createWithSubfeatures(.Armv7R, "armv7-r", "ARMv7r architecture", "armv7-r", &[_]@This() {
.Thumb2,
.Perfmon,
.Db,
.Dsp,
.Rclass,
.V7clrex,
.V4t,
.Hwdiv,
}),
FeatureInfo(@This()).createWithSubfeatures(.Armv7s, "armv7s", "ARMv7a architecture", "armv7s", &[_]@This() {
.Thumb2,
.Perfmon,
.Db,
.Dsp,
.V7clrex,
.V4t,
.Fpregs,
.D32,
.Aclass,
}),
FeatureInfo(@This()).createWithSubfeatures(.Armv7ve, "armv7ve", "ARMv7ve architecture", "armv7ve", &[_]@This() {
.Thumb2,
.Mp,
.Perfmon,
.Db,
.Dsp,
.V7clrex,
.V4t,
.Fpregs,
.D32,
.Hwdiv,
.HwdivArm,
.Aclass,
.Trustzone,
}),
FeatureInfo(@This()).createWithSubfeatures(.Armv8A, "armv8-a", "ARMv8a architecture", "armv8-a", &[_]@This() {
.Thumb2,
.Mp,
.Perfmon,
.Db,
.Crc,
.Fp16,
.Dsp,
.V7clrex,
.V4t,
.Fpregs,
.D32,
.Hwdiv,
.HwdivArm,
.Aclass,
.Trustzone,
.AcquireRelease,
}),
FeatureInfo(@This()).createWithSubfeatures(.Armv8Mbase, "armv8-m.base", "ARMv8mBaseline architecture", "armv8-m.base", &[_]@This() {
.Mclass,
.StrictAlign,
.ThumbMode,
.Db,
.Msecext8,
.V7clrex,
.V4t,
.Hwdiv,
.Noarm,
.AcquireRelease,
}),
FeatureInfo(@This()).createWithSubfeatures(.Armv8Mmain, "armv8-m.main", "ARMv8mMainline architecture", "armv8-m.main", &[_]@This() {
.Thumb2,
.Mclass,
.Perfmon,
.ThumbMode,
.Db,
.Msecext8,
.V7clrex,
.V4t,
.Hwdiv,
.Noarm,
.AcquireRelease,
}),
FeatureInfo(@This()).createWithSubfeatures(.Armv8R, "armv8-r", "ARMv8r architecture", "armv8-r", &[_]@This() {
.Thumb2,
.Mp,
.Perfmon,
.Db,
.Crc,
.Fp16,
.Dfb,
.Dsp,
.Rclass,
.V7clrex,
.V4t,
.Fpregs,
.D32,
.Hwdiv,
.HwdivArm,
.AcquireRelease,
}),
FeatureInfo(@This()).createWithSubfeatures(.Armv81A, "armv8.1-a", "ARMv81a architecture", "armv8.1-a", &[_]@This() {
.Thumb2,
.Mp,
.Perfmon,
.Db,
.Crc,
.Fp16,
.Dsp,
.V7clrex,
.V4t,
.Fpregs,
.D32,
.Hwdiv,
.HwdivArm,
.Aclass,
.Trustzone,
.AcquireRelease,
}),
FeatureInfo(@This()).createWithSubfeatures(.Armv81Mmain, "armv8.1-m.main", "ARMv81mMainline architecture", "armv8.1-m.main", &[_]@This() {
.Thumb2,
.Mclass,
.Perfmon,
.ThumbMode,
.Db,
.Msecext8,
.Ras,
.V7clrex,
.V4t,
.Hwdiv,
.Noarm,
.Lob,
.AcquireRelease,
}),
FeatureInfo(@This()).createWithSubfeatures(.Armv82A, "armv8.2-a", "ARMv82a architecture", "armv8.2-a", &[_]@This() {
.Thumb2,
.Mp,
.Perfmon,
.Db,
.Crc,
.Fp16,
.Ras,
.Dsp,
.V7clrex,
.V4t,
.Fpregs,
.D32,
.Hwdiv,
.HwdivArm,
.Aclass,
.Trustzone,
.AcquireRelease,
}),
FeatureInfo(@This()).createWithSubfeatures(.Armv83A, "armv8.3-a", "ARMv83a architecture", "armv8.3-a", &[_]@This() {
.Thumb2,
.Mp,
.Perfmon,
.Db,
.Crc,
.Fp16,
.Ras,
.Dsp,
.V7clrex,
.V4t,
.Fpregs,
.D32,
.Hwdiv,
.HwdivArm,
.Aclass,
.Trustzone,
.AcquireRelease,
}),
FeatureInfo(@This()).createWithSubfeatures(.Armv84A, "armv8.4-a", "ARMv84a architecture", "armv8.4-a", &[_]@This() {
.Thumb2,
.Mp,
.Perfmon,
.Db,
.Crc,
.Fp16,
.Ras,
.Dsp,
.V7clrex,
.V4t,
.Fpregs,
.D32,
.Hwdiv,
.HwdivArm,
.Aclass,
.Trustzone,
.AcquireRelease,
}),
FeatureInfo(@This()).createWithSubfeatures(.Armv85A, "armv8.5-a", "ARMv85a architecture", "armv8.5-a", &[_]@This() {
.Thumb2,
.Mp,
.Perfmon,
.Sb,
.Db,
.Crc,
.Fp16,
.Ras,
.Dsp,
.V7clrex,
.V4t,
.Fpregs,
.D32,
.Hwdiv,
.HwdivArm,
.Aclass,
.Trustzone,
.AcquireRelease,
}),
FeatureInfo(@This()).create(.Msecext8, "8msecext", "Enable support for ARMv8-M Security Extensions", "8msecext"),
FeatureInfo(@This()).create(.Aclass, "aclass", "Is application profile ('A' series)", "aclass"),
FeatureInfo(@This()).createWithSubfeatures(.Aes, "aes", "Enable AES support", "aes", &[_]@This() {
.Fpregs,
.D32,
}),
FeatureInfo(@This()).create(.AcquireRelease, "acquire-release", "Has v8 acquire/release (lda/ldaex etc) instructions", "acquire-release"),
FeatureInfo(@This()).create(.AvoidMovsShop, "avoid-movs-shop", "Avoid movs instructions with shifter operand", "avoid-movs-shop"),
FeatureInfo(@This()).create(.AvoidPartialCpsr, "avoid-partial-cpsr", "Avoid CPSR partial update for OOO execution", "avoid-partial-cpsr"),
FeatureInfo(@This()).create(.Crc, "crc", "Enable support for CRC instructions", "crc"),
FeatureInfo(@This()).create(.CheapPredicableCpsr, "cheap-predicable-cpsr", "Disable +1 predication cost for instructions updating CPSR", "cheap-predicable-cpsr"),
FeatureInfo(@This()).create(.VldnAlign, "vldn-align", "Check for VLDn unaligned access", "vldn-align"),
FeatureInfo(@This()).createWithSubfeatures(.Crypto, "crypto", "Enable support for Cryptography extensions", "crypto", &[_]@This() {
.Fpregs,
.D32,
}),
FeatureInfo(@This()).create(.D32, "d32", "Extend FP to 32 double registers", "d32"),
FeatureInfo(@This()).create(.Db, "db", "Has data barrier (dmb/dsb) instructions", "db"),
FeatureInfo(@This()).create(.Dfb, "dfb", "Has full data barrier (dfb) instruction", "dfb"),
FeatureInfo(@This()).create(.Dsp, "dsp", "Supports DSP instructions in ARM and/or Thumb2", "dsp"),
FeatureInfo(@This()).create(.DontWidenVmovs, "dont-widen-vmovs", "Don't widen VMOVS to VMOVD", "dont-widen-vmovs"),
FeatureInfo(@This()).createWithSubfeatures(.Dotprod, "dotprod", "Enable support for dot product instructions", "dotprod", &[_]@This() {
.Fpregs,
.D32,
}),
FeatureInfo(@This()).create(.ExecuteOnly, "execute-only", "Enable the generation of execute only code.", "execute-only"),
FeatureInfo(@This()).create(.ExpandFpMlx, "expand-fp-mlx", "Expand VFP/NEON MLA/MLS instructions", "expand-fp-mlx"),
FeatureInfo(@This()).create(.Fp16, "fp16", "Enable half-precision floating point", "fp16"),
FeatureInfo(@This()).createWithSubfeatures(.Fp16fml, "fp16fml", "Enable full half-precision floating point fml instructions", "fp16fml", &[_]@This() {
.Fp16,
.Fpregs,
}),
FeatureInfo(@This()).createWithSubfeatures(.Fp64, "fp64", "Floating point unit supports double precision", "fp64", &[_]@This() {
.Fpregs,
}),
FeatureInfo(@This()).create(.Fpao, "fpao", "Enable fast computation of positive address offsets", "fpao"),
FeatureInfo(@This()).createWithSubfeatures(.FpArmv8, "fp-armv8", "Enable ARMv8 FP", "fp-armv8", &[_]@This() {
.Fp16,
.Fpregs,
.D32,
}),
FeatureInfo(@This()).createWithSubfeatures(.FpArmv8d16, "fp-armv8d16", "Enable ARMv8 FP with only 16 d-registers", "fp-armv8d16", &[_]@This() {
.Fp16,
.Fpregs,
}),
FeatureInfo(@This()).createWithSubfeatures(.FpArmv8d16sp, "fp-armv8d16sp", "Enable ARMv8 FP with only 16 d-registers and no double precision", "fp-armv8d16sp", &[_]@This() {
.Fp16,
.Fpregs,
}),
FeatureInfo(@This()).createWithSubfeatures(.FpArmv8sp, "fp-armv8sp", "Enable ARMv8 FP with no double precision", "fp-armv8sp", &[_]@This() {
.Fp16,
.Fpregs,
.D32,
}),
FeatureInfo(@This()).create(.Fpregs, "fpregs", "Enable FP registers", "fpregs"),
FeatureInfo(@This()).createWithSubfeatures(.Fpregs16, "fpregs16", "Enable 16-bit FP registers", "fpregs16", &[_]@This() {
.Fpregs,
}),
FeatureInfo(@This()).createWithSubfeatures(.Fpregs64, "fpregs64", "Enable 64-bit FP registers", "fpregs64", &[_]@This() {
.Fpregs,
}),
FeatureInfo(@This()).createWithSubfeatures(.Fullfp16, "fullfp16", "Enable full half-precision floating point", "fullfp16", &[_]@This() {
.Fp16,
.Fpregs,
}),
FeatureInfo(@This()).create(.FuseAes, "fuse-aes", "CPU fuses AES crypto operations", "fuse-aes"),
FeatureInfo(@This()).create(.FuseLiterals, "fuse-literals", "CPU fuses literal generation operations", "fuse-literals"),
FeatureInfo(@This()).create(.HwdivArm, "hwdiv-arm", "Enable divide instructions in ARM mode", "hwdiv-arm"),
FeatureInfo(@This()).create(.Hwdiv, "hwdiv", "Enable divide instructions in Thumb", "hwdiv"),
FeatureInfo(@This()).create(.NoBranchPredictor, "no-branch-predictor", "Has no branch predictor", "no-branch-predictor"),
FeatureInfo(@This()).create(.RetAddrStack, "ret-addr-stack", "Has return address stack", "ret-addr-stack"),
FeatureInfo(@This()).create(.Slowfpvmlx, "slowfpvmlx", "Disable VFP / NEON MAC instructions", "slowfpvmlx"),
FeatureInfo(@This()).create(.VmlxHazards, "vmlx-hazards", "Has VMLx hazards", "vmlx-hazards"),
FeatureInfo(@This()).create(.Lob, "lob", "Enable Low Overhead Branch extensions", "lob"),
FeatureInfo(@This()).create(.LongCalls, "long-calls", "Generate calls via indirect call instructions", "long-calls"),
FeatureInfo(@This()).create(.Mclass, "mclass", "Is microcontroller profile ('M' series)", "mclass"),
FeatureInfo(@This()).create(.Mp, "mp", "Supports Multiprocessing extension", "mp"),
FeatureInfo(@This()).create(.Mve1beat, "mve1beat", "Model MVE instructions as a 1 beat per tick architecture", "mve1beat"),
FeatureInfo(@This()).create(.Mve2beat, "mve2beat", "Model MVE instructions as a 2 beats per tick architecture", "mve2beat"),
FeatureInfo(@This()).create(.Mve4beat, "mve4beat", "Model MVE instructions as a 4 beats per tick architecture", "mve4beat"),
FeatureInfo(@This()).create(.MuxedUnits, "muxed-units", "Has muxed AGU and NEON/FPU", "muxed-units"),
FeatureInfo(@This()).createWithSubfeatures(.Neon, "neon", "Enable NEON instructions", "neon", &[_]@This() {
.Fpregs,
.D32,
}),
FeatureInfo(@This()).create(.Neonfp, "neonfp", "Use NEON for single precision FP", "neonfp"),
FeatureInfo(@This()).create(.NeonFpmovs, "neon-fpmovs", "Convert VMOVSR, VMOVRS, VMOVS to NEON", "neon-fpmovs"),
FeatureInfo(@This()).create(.NaclTrap, "nacl-trap", "NaCl trap", "nacl-trap"),
FeatureInfo(@This()).create(.Noarm, "noarm", "Does not support ARM mode execution", "noarm"),
FeatureInfo(@This()).create(.NoMovt, "no-movt", "Don't use movt/movw pairs for 32-bit imms", "no-movt"),
FeatureInfo(@This()).create(.NoNegImmediates, "no-neg-immediates", "Convert immediates and instructions to their negated or complemented equivalent when the immediate does not fit in the encoding.", "no-neg-immediates"),
FeatureInfo(@This()).create(.DisablePostraScheduler, "disable-postra-scheduler", "Don't schedule again after register allocation", "disable-postra-scheduler"),
FeatureInfo(@This()).create(.NonpipelinedVfp, "nonpipelined-vfp", "VFP instructions are not pipelined", "nonpipelined-vfp"),
FeatureInfo(@This()).create(.Perfmon, "perfmon", "Enable support for Performance Monitor extensions", "perfmon"),
FeatureInfo(@This()).create(.Bit32, "32bit", "Prefer 32-bit Thumb instrs", "32bit"),
FeatureInfo(@This()).create(.PreferIshst, "prefer-ishst", "Prefer ISHST barriers", "prefer-ishst"),
FeatureInfo(@This()).create(.LoopAlign, "loop-align", "Prefer 32-bit alignment for loops", "loop-align"),
FeatureInfo(@This()).create(.PreferVmovsr, "prefer-vmovsr", "Prefer VMOVSR", "prefer-vmovsr"),
FeatureInfo(@This()).create(.ProfUnpr, "prof-unpr", "Is profitable to unpredicate", "prof-unpr"),
FeatureInfo(@This()).create(.Ras, "ras", "Enable Reliability, Availability and Serviceability extensions", "ras"),
FeatureInfo(@This()).create(.Rclass, "rclass", "Is realtime profile ('R' series)", "rclass"),
FeatureInfo(@This()).create(.ReadTpHard, "read-tp-hard", "Reading thread pointer from register", "read-tp-hard"),
FeatureInfo(@This()).create(.ReserveR9, "reserve-r9", "Reserve R9, making it unavailable as GPR", "reserve-r9"),
FeatureInfo(@This()).create(.Sb, "sb", "Enable v8.5a Speculation Barrier", "sb"),
FeatureInfo(@This()).createWithSubfeatures(.Sha2, "sha2", "Enable SHA1 and SHA256 support", "sha2", &[_]@This() {
.Fpregs,
.D32,
}),
FeatureInfo(@This()).create(.SlowFpBrcc, "slow-fp-brcc", "FP compare + branch is slow", "slow-fp-brcc"),
FeatureInfo(@This()).create(.SlowLoadDSubreg, "slow-load-D-subreg", "Loading into D subregs is slow", "slow-load-D-subreg"),
FeatureInfo(@This()).create(.SlowOddReg, "slow-odd-reg", "VLDM/VSTM starting with an odd register is slow", "slow-odd-reg"),
FeatureInfo(@This()).create(.SlowVdup32, "slow-vdup32", "Has slow VDUP32 - prefer VMOV", "slow-vdup32"),
FeatureInfo(@This()).create(.SlowVgetlni32, "slow-vgetlni32", "Has slow VGETLNi32 - prefer VMOV", "slow-vgetlni32"),
FeatureInfo(@This()).createWithSubfeatures(.SplatVfpNeon, "splat-vfp-neon", "Splat register from VFP to NEON", "splat-vfp-neon", &[_]@This() {
.DontWidenVmovs,
}),
FeatureInfo(@This()).create(.StrictAlign, "strict-align", "Disallow all unaligned memory access", "strict-align"),
FeatureInfo(@This()).create(.Thumb2, "thumb2", "Enable Thumb2 instructions", "thumb2"),
FeatureInfo(@This()).create(.Trustzone, "trustzone", "Enable support for TrustZone security extensions", "trustzone"),
FeatureInfo(@This()).create(.UseAa, "use-aa", "Use alias analysis during codegen", "use-aa"),
FeatureInfo(@This()).create(.UseMisched, "use-misched", "Use the MachineScheduler", "use-misched"),
FeatureInfo(@This()).create(.WideStrideVfp, "wide-stride-vfp", "Use a wide stride when allocating VFP registers", "wide-stride-vfp"),
FeatureInfo(@This()).create(.V7clrex, "v7clrex", "Has v7 clrex instruction", "v7clrex"),
FeatureInfo(@This()).createWithSubfeatures(.Vfp2, "vfp2", "Enable VFP2 instructions", "vfp2", &[_]@This() {
.Fpregs,
}),
FeatureInfo(@This()).createWithSubfeatures(.Vfp2sp, "vfp2sp", "Enable VFP2 instructions with no double precision", "vfp2sp", &[_]@This() {
.Fpregs,
}),
FeatureInfo(@This()).createWithSubfeatures(.Vfp3, "vfp3", "Enable VFP3 instructions", "vfp3", &[_]@This() {
.Fpregs,
.D32,
}),
FeatureInfo(@This()).createWithSubfeatures(.Vfp3d16, "vfp3d16", "Enable VFP3 instructions with only 16 d-registers", "vfp3d16", &[_]@This() {
.Fpregs,
}),
FeatureInfo(@This()).createWithSubfeatures(.Vfp3d16sp, "vfp3d16sp", "Enable VFP3 instructions with only 16 d-registers and no double precision", "vfp3d16sp", &[_]@This() {
.Fpregs,
}),
FeatureInfo(@This()).createWithSubfeatures(.Vfp3sp, "vfp3sp", "Enable VFP3 instructions with no double precision", "vfp3sp", &[_]@This() {
.Fpregs,
.D32,
}),
FeatureInfo(@This()).createWithSubfeatures(.Vfp4, "vfp4", "Enable VFP4 instructions", "vfp4", &[_]@This() {
.Fp16,
.Fpregs,
.D32,
}),
FeatureInfo(@This()).createWithSubfeatures(.Vfp4d16, "vfp4d16", "Enable VFP4 instructions with only 16 d-registers", "vfp4d16", &[_]@This() {
.Fp16,
.Fpregs,
}),
FeatureInfo(@This()).createWithSubfeatures(.Vfp4d16sp, "vfp4d16sp", "Enable VFP4 instructions with only 16 d-registers and no double precision", "vfp4d16sp", &[_]@This() {
.Fp16,
.Fpregs,
}),
FeatureInfo(@This()).createWithSubfeatures(.Vfp4sp, "vfp4sp", "Enable VFP4 instructions with no double precision", "vfp4sp", &[_]@This() {
.Fp16,
.Fpregs,
.D32,
}),
FeatureInfo(@This()).create(.VmlxForwarding, "vmlx-forwarding", "Has multiplier accumulator forwarding", "vmlx-forwarding"),
FeatureInfo(@This()).createWithSubfeatures(.Virtualization, "virtualization", "Supports Virtualization extension", "virtualization", &[_]@This() {
.HwdivArm,
.Hwdiv,
}),
FeatureInfo(@This()).create(.Zcz, "zcz", "Has zero-cycle zeroing instructions", "zcz"),
FeatureInfo(@This()).createWithSubfeatures(.Mvefp, "mve.fp", "Support M-Class Vector Extension with integer and floating ops", "mve.fp", &[_]@This() {
.Thumb2,
.Perfmon,
.Fp16,
.Dsp,
.V7clrex,
.V4t,
.Fpregs,
}),
FeatureInfo(@This()).createWithSubfeatures(.Mve, "mve", "Support M-Class Vector Extension with integer ops", "mve", &[_]@This() {
.Thumb2,
.Perfmon,
.Dsp,
.V7clrex,
.V4t,
.Fpregs,
}),
FeatureInfo(@This()).create(.V4t, "v4t", "Support ARM v4T instructions", "v4t"),
FeatureInfo(@This()).createWithSubfeatures(.V5te, "v5te", "Support ARM v5TE, v5TEj, and v5TExp instructions", "v5te", &[_]@This() {
.V4t,
}),
FeatureInfo(@This()).createWithSubfeatures(.V5t, "v5t", "Support ARM v5T instructions", "v5t", &[_]@This() {
.V4t,
}),
FeatureInfo(@This()).createWithSubfeatures(.V6k, "v6k", "Support ARM v6k instructions", "v6k", &[_]@This() {
.V4t,
}),
FeatureInfo(@This()).createWithSubfeatures(.V6m, "v6m", "Support ARM v6M instructions", "v6m", &[_]@This() {
.V4t,
}),
FeatureInfo(@This()).createWithSubfeatures(.V6, "v6", "Support ARM v6 instructions", "v6", &[_]@This() {
.V4t,
}),
FeatureInfo(@This()).createWithSubfeatures(.V6t2, "v6t2", "Support ARM v6t2 instructions", "v6t2", &[_]@This() {
.Thumb2,
.V4t,
}),
FeatureInfo(@This()).createWithSubfeatures(.V7, "v7", "Support ARM v7 instructions", "v7", &[_]@This() {
.V7clrex,
.V4t,
.Perfmon,
.Thumb2,
}),
FeatureInfo(@This()).createWithSubfeatures(.V8m, "v8m", "Support ARM v8M Baseline instructions", "v8m", &[_]@This() {
.V4t,
}),
FeatureInfo(@This()).createWithSubfeatures(.V8mmain, "v8m.main", "Support ARM v8M Mainline instructions", "v8m.main", &[_]@This() {
.V7clrex,
.V4t,
.Perfmon,
.Thumb2,
}),
FeatureInfo(@This()).createWithSubfeatures(.V8, "v8", "Support ARM v8 instructions", "v8", &[_]@This() {
.Thumb2,
.Perfmon,
.V7clrex,
.V4t,
.AcquireRelease,
}),
FeatureInfo(@This()).createWithSubfeatures(.V81mmain, "v8.1m.main", "Support ARM v8-1M Mainline instructions", "v8.1m.main", &[_]@This() {
.V7clrex,
.V4t,
.Perfmon,
.Thumb2,
}),
FeatureInfo(@This()).createWithSubfeatures(.V81a, "v8.1a", "Support ARM v8.1a instructions", "v8.1a", &[_]@This() {
.Thumb2,
.Perfmon,
.V7clrex,
.V4t,
.AcquireRelease,
}),
FeatureInfo(@This()).createWithSubfeatures(.V82a, "v8.2a", "Support ARM v8.2a instructions", "v8.2a", &[_]@This() {
.Thumb2,
.Perfmon,
.V7clrex,
.V4t,
.AcquireRelease,
}),
FeatureInfo(@This()).createWithSubfeatures(.V83a, "v8.3a", "Support ARM v8.3a instructions", "v8.3a", &[_]@This() {
.Thumb2,
.Perfmon,
.V7clrex,
.V4t,
.AcquireRelease,
}),
FeatureInfo(@This()).createWithSubfeatures(.V84a, "v8.4a", "Support ARM v8.4a instructions", "v8.4a", &[_]@This() {
.Thumb2,
.Perfmon,
.V7clrex,
.V4t,
.Fpregs,
.D32,
.AcquireRelease,
}),
FeatureInfo(@This()).createWithSubfeatures(.V85a, "v8.5a", "Support ARM v8.5a instructions", "v8.5a", &[_]@This() {
.Thumb2,
.Perfmon,
.Sb,
.V7clrex,
.V4t,
.Fpregs,
.D32,
.AcquireRelease,
}),
FeatureInfo(@This()).createWithSubfeatures(.Iwmmxt, "iwmmxt", "ARMv5te architecture", "iwmmxt", &[_]@This() {
.V4t,
}),
FeatureInfo(@This()).createWithSubfeatures(.Iwmmxt2, "iwmmxt2", "ARMv5te architecture", "iwmmxt2", &[_]@This() {
.V4t,
}),
FeatureInfo(@This()).create(.SoftFloat, "soft-float", "Use software floating point features.", "soft-float"),
FeatureInfo(@This()).create(.ThumbMode, "thumb-mode", "Thumb mode", "thumb-mode"),
FeatureInfo(@This()).create(.A5, "a5", "Cortex-A5 ARM processors", "a5"),
FeatureInfo(@This()).create(.A7, "a7", "Cortex-A7 ARM processors", "a7"),
FeatureInfo(@This()).create(.A8, "a8", "Cortex-A8 ARM processors", "a8"),
FeatureInfo(@This()).create(.A9, "a9", "Cortex-A9 ARM processors", "a9"),
FeatureInfo(@This()).create(.A12, "a12", "Cortex-A12 ARM processors", "a12"),
FeatureInfo(@This()).create(.A15, "a15", "Cortex-A15 ARM processors", "a15"),
FeatureInfo(@This()).create(.A17, "a17", "Cortex-A17 ARM processors", "a17"),
FeatureInfo(@This()).create(.A32, "a32", "Cortex-A32 ARM processors", "a32"),
FeatureInfo(@This()).create(.A35, "a35", "Cortex-A35 ARM processors", "a35"),
FeatureInfo(@This()).create(.A53, "a53", "Cortex-A53 ARM processors", "a53"),
FeatureInfo(@This()).create(.A55, "a55", "Cortex-A55 ARM processors", "a55"),
FeatureInfo(@This()).create(.A57, "a57", "Cortex-A57 ARM processors", "a57"),
FeatureInfo(@This()).create(.A72, "a72", "Cortex-A72 ARM processors", "a72"),
FeatureInfo(@This()).create(.A73, "a73", "Cortex-A73 ARM processors", "a73"),
FeatureInfo(@This()).create(.A75, "a75", "Cortex-A75 ARM processors", "a75"),
FeatureInfo(@This()).create(.A76, "a76", "Cortex-A76 ARM processors", "a76"),
FeatureInfo(@This()).createWithSubfeatures(.Exynos, "exynos", "Samsung Exynos processors", "exynos", &[_]@This() {
.Zcz,
.SlowVdup32,
.SlowVgetlni32,
.DontWidenVmovs,
.Crc,
.FuseAes,
.WideStrideVfp,
.ProfUnpr,
.Slowfpvmlx,
.SlowFpBrcc,
.FuseLiterals,
.Fpregs,
.D32,
.ExpandFpMlx,
.Hwdiv,
.HwdivArm,
.RetAddrStack,
.UseAa,
}),
FeatureInfo(@This()).create(.Krait, "krait", "Qualcomm Krait processors", "krait"),
FeatureInfo(@This()).create(.Kryo, "kryo", "Qualcomm Kryo processors", "kryo"),
FeatureInfo(@This()).create(.M3, "m3", "Cortex-M3 ARM processors", "m3"),
FeatureInfo(@This()).create(.R4, "r4", "Cortex-R4 ARM processors", "r4"),
FeatureInfo(@This()).create(.R5, "r5", "Cortex-R5 ARM processors", "r5"),
FeatureInfo(@This()).create(.R7, "r7", "Cortex-R7 ARM processors", "r7"),
FeatureInfo(@This()).create(.R52, "r52", "Cortex-R52 ARM processors", "r52"),
FeatureInfo(@This()).create(.Swift, "swift", "Swift ARM processors", "swift"),
FeatureInfo(@This()).createWithSubfeatures(.Xscale, "xscale", "ARMv5te architecture", "xscale", &[_]@This() {
.V4t,
}),
};
};