use super::*;
static NAMES: &[&str] = &[
"10e60",
"2e3",
"3e3r1",
"3e3r2",
"3e3r3",
"3e7",
"7e10",
"a",
"aarch64-apple-darwin",
"aarch64-apple-ios",
"aarch64-apple-ios-macabi",
"aarch64-apple-ios-sim",
"aarch64-apple-tvos",
"aarch64-apple-tvos-sim",
"aarch64-apple-visionos",
"aarch64-apple-visionos-sim",
"aarch64-apple-watchos",
"aarch64-apple-watchos-sim",
"aarch64-kmc-solid_asp3",
"aarch64-linux-android",
"aarch64-nintendo-switch-freestanding",
"aarch64-pc-windows-gnullvm",
"aarch64-pc-windows-msvc",
"aarch64-unknown-freebsd",
"aarch64-unknown-fuchsia",
"aarch64-unknown-hermit",
"aarch64-unknown-illumos",
"aarch64-unknown-linux-gnu",
"aarch64-unknown-linux-gnu_ilp32",
"aarch64-unknown-linux-musl",
"aarch64-unknown-linux-ohos",
"aarch64-unknown-netbsd",
"aarch64-unknown-none",
"aarch64-unknown-none-softfloat",
"aarch64-unknown-nto-qnx700",
"aarch64-unknown-nto-qnx710",
"aarch64-unknown-nto-qnx710_iosock",
"aarch64-unknown-nto-qnx800",
"aarch64-unknown-nuttx",
"aarch64-unknown-openbsd",
"aarch64-unknown-redox",
"aarch64-unknown-teeos",
"aarch64-unknown-trusty",
"aarch64-unknown-uefi",
"aarch64-uwp-windows-msvc",
"aarch64-wrs-vxworks",
"aarch64_be-unknown-linux-gnu",
"aarch64_be-unknown-linux-gnu_ilp32",
"aarch64_be-unknown-netbsd",
"aarch64_unstable_target_feature",
"aarch64_ver_target_feature",
"aclass",
"adx",
"aes",
"altivec",
"alu32",
"amdgcn-amd-amdhsa",
"amx-bf16",
"amx-complex",
"amx-fp16",
"amx-int8",
"amx-tile",
"arm-linux-androideabi",
"arm-unknown-linux-gnueabi",
"arm-unknown-linux-gnueabihf",
"arm-unknown-linux-musleabi",
"arm-unknown-linux-musleabihf",
"arm64_32-apple-watchos",
"arm64e-apple-darwin",
"arm64e-apple-ios",
"arm64e-apple-tvos",
"arm64ec-pc-windows-msvc",
"arm_target_feature",
"armeb-unknown-linux-gnueabi",
"armebv7r-none-eabi",
"armebv7r-none-eabihf",
"armv4t-none-eabi",
"armv4t-unknown-linux-gnueabi",
"armv5te-none-eabi",
"armv5te-unknown-linux-gnueabi",
"armv5te-unknown-linux-musleabi",
"armv5te-unknown-linux-uclibceabi",
"armv6-unknown-freebsd",
"armv6-unknown-netbsd-eabihf",
"armv6k-nintendo-3ds",
"armv7-linux-androideabi",
"armv7-rtems-eabihf",
"armv7-sony-vita-newlibeabihf",
"armv7-unknown-freebsd",
"armv7-unknown-linux-gnueabi",
"armv7-unknown-linux-gnueabihf",
"armv7-unknown-linux-musleabi",
"armv7-unknown-linux-musleabihf",
"armv7-unknown-linux-ohos",
"armv7-unknown-linux-uclibceabi",
"armv7-unknown-linux-uclibceabihf",
"armv7-unknown-netbsd-eabihf",
"armv7-unknown-trusty",
"armv7-wrs-vxworks-eabihf",
"armv7a-kmc-solid_asp3-eabi",
"armv7a-kmc-solid_asp3-eabihf",
"armv7a-none-eabi",
"armv7a-none-eabihf",
"armv7a-nuttx-eabi",
"armv7a-nuttx-eabihf",
"armv7k-apple-watchos",
"armv7r-none-eabi",
"armv7r-none-eabihf",
"armv7s-apple-ios",
"armv8r-none-eabihf",
"atomics",
"avr-none",
"avr-unknown-gnu-atmega328",
"avx",
"avx2",
"avx512_target_feature",
"avx512bf16",
"avx512bitalg",
"avx512bw",
"avx512cd",
"avx512dq",
"avx512f",
"avx512fp16",
"avx512ifma",
"avx512vbmi",
"avx512vbmi2",
"avx512vl",
"avx512vnni",
"avx512vp2intersect",
"avx512vpopcntdq",
"avxifma",
"avxneconvert",
"avxvnni",
"avxvnniint16",
"avxvnniint8",
"backchain",
"bf16",
"bmi1",
"bmi2",
"bpf_target_feature",
"bpfeb-unknown-none",
"bpfel-unknown-none",
"bti",
"bulk-memory",
"c",
"cache",
"cmpxchg16b",
"crc",
"csky-unknown-linux-gnuabiv2",
"csky-unknown-linux-gnuabiv2hf",
"csky_target_feature",
"cssc",
"d",
"d32",
"deflate-conversion",
"dit",
"div32",
"doloop",
"dotprod",
"dpb",
"dpb2",
"dsp",
"dsp1e2",
"dspe60",
"e",
"e1",
"e2",
"ecv",
"edsp",
"elrw",
"enhanced-sort",
"ermsb",
"ermsb_target_feature",
"exception-handling",
"extended-const",
"f",
"f16c",
"f32mm",
"f64mm",
"faminmax",
"fcma",
"fdivdu",
"fhm",
"flagm",
"flagm2",
"float1e2",
"float1e3",
"float3e4",
"float7e60",
"floate1",
"fma",
"fp-armv8",
"fp16",
"fp64",
"fp8",
"fp8dot2",
"fp8dot4",
"fp8fma",
"fpregs",
"fpuv2_df",
"fpuv2_sf",
"fpuv3_df",
"fpuv3_hf",
"fpuv3_hi",
"fpuv3_sf",
"frecipe",
"frintts",
"fxsr",
"gfni",
"guarded-storage",
"hard-float",
"hard-float-abi",
"hard-tp",
"hbc",
"hexagon-unknown-linux-musl",
"hexagon-unknown-none-elf",
"hexagon_target_feature",
"high-registers",
"high-word",
"hvx",
"hvx-length128b",
"hwdiv",
"i386-apple-ios",
"i586-pc-nto-qnx700",
"i586-pc-windows-msvc",
"i586-unknown-linux-gnu",
"i586-unknown-linux-musl",
"i586-unknown-netbsd",
"i586-unknown-redox",
"i686-apple-darwin",
"i686-linux-android",
"i686-pc-nto-qnx700",
"i686-pc-windows-gnu",
"i686-pc-windows-gnullvm",
"i686-pc-windows-msvc",
"i686-unknown-freebsd",
"i686-unknown-haiku",
"i686-unknown-hurd-gnu",
"i686-unknown-linux-gnu",
"i686-unknown-linux-musl",
"i686-unknown-netbsd",
"i686-unknown-openbsd",
"i686-unknown-redox",
"i686-unknown-uefi",
"i686-uwp-windows-gnu",
"i686-uwp-windows-msvc",
"i686-win7-windows-gnu",
"i686-win7-windows-msvc",
"i686-wrs-vxworks",
"i8mm",
"isa-68000",
"isa-68010",
"isa-68020",
"isa-68030",
"isa-68040",
"isa-68060",
"isa-68881",
"isa-68882",
"jsconv",
"keylocker_x86",
"kl",
"lahfsahf",
"lahfsahf_target_feature",
"lam-bh",
"lamcas",
"lasx",
"lbt",
"ld-seq-sa",
"leoncasa",
"loongarch64-unknown-linux-gnu",
"loongarch64-unknown-linux-musl",
"loongarch64-unknown-linux-ohos",
"loongarch64-unknown-none",
"loongarch64-unknown-none-softfloat",
"loongarch_target_feature",
"lor",
"lse",
"lse128",
"lse2",
"lsx",
"lut",
"lvz",
"lzcnt",
"m",
"m68k-unknown-linux-gnu",
"m68k-unknown-none-elf",
"m68k_target_feature",
"mclass",
"mips-mti-none-elf",
"mips-unknown-linux-gnu",
"mips-unknown-linux-musl",
"mips-unknown-linux-uclibc",
"mips64-openwrt-linux-musl",
"mips64-unknown-linux-gnuabi64",
"mips64-unknown-linux-muslabi64",
"mips64el-unknown-linux-gnuabi64",
"mips64el-unknown-linux-muslabi64",
"mips_target_feature",
"mipsel-mti-none-elf",
"mipsel-sony-psp",
"mipsel-sony-psx",
"mipsel-unknown-linux-gnu",
"mipsel-unknown-linux-musl",
"mipsel-unknown-linux-uclibc",
"mipsel-unknown-netbsd",
"mipsel-unknown-none",
"mipsisa32r6-unknown-linux-gnu",
"mipsisa32r6el-unknown-linux-gnu",
"mipsisa64r6-unknown-linux-gnuabi64",
"mipsisa64r6el-unknown-linux-gnuabi64",
"mops",
"movbe",
"mp",
"mp1e2",
"msa",
"msp430-none-elf",
"msync",
"mte",
"multivalue",
"mutable-globals",
"neon",
"nnp-assist",
"nontrapping-fptoint",
"nvic",
"nvptx64-nvidia-cuda",
"paca",
"pacg",
"pan",
"partword-atomics",
"pauth-lr",
"pclmulqdq",
"pmuv3",
"popcnt",
"power10-vector",
"power8-altivec",
"power8-crypto",
"power8-vector",
"power9-altivec",
"power9-vector",
"powerpc-unknown-freebsd",
"powerpc-unknown-linux-gnu",
"powerpc-unknown-linux-gnuspe",
"powerpc-unknown-linux-musl",
"powerpc-unknown-linux-muslspe",
"powerpc-unknown-netbsd",
"powerpc-unknown-openbsd",
"powerpc-wrs-vxworks",
"powerpc-wrs-vxworks-spe",
"powerpc64-ibm-aix",
"powerpc64-unknown-freebsd",
"powerpc64-unknown-linux-gnu",
"powerpc64-unknown-linux-musl",
"powerpc64-unknown-openbsd",
"powerpc64-wrs-vxworks",
"powerpc64le-unknown-freebsd",
"powerpc64le-unknown-linux-gnu",
"powerpc64le-unknown-linux-musl",
"powerpc_target_feature",
"prfchw",
"prfchw_target_feature",
"quadword-atomics",
"rand",
"ras",
"rclass",
"rcpc",
"rcpc2",
"rcpc3",
"rdm",
"rdrand",
"rdseed",
"reference-types",
"relax",
"relaxed-simd",
"reserve-x18",
"riscv32-wrs-vxworks",
"riscv32e-unknown-none-elf",
"riscv32em-unknown-none-elf",
"riscv32emc-unknown-none-elf",
"riscv32gc-unknown-linux-gnu",
"riscv32gc-unknown-linux-musl",
"riscv32i-unknown-none-elf",
"riscv32im-risc0-zkvm-elf",
"riscv32im-unknown-none-elf",
"riscv32ima-unknown-none-elf",
"riscv32imac-esp-espidf",
"riscv32imac-unknown-none-elf",
"riscv32imac-unknown-nuttx-elf",
"riscv32imac-unknown-xous-elf",
"riscv32imafc-esp-espidf",
"riscv32imafc-unknown-none-elf",
"riscv32imafc-unknown-nuttx-elf",
"riscv32imc-esp-espidf",
"riscv32imc-unknown-none-elf",
"riscv32imc-unknown-nuttx-elf",
"riscv64-linux-android",
"riscv64-wrs-vxworks",
"riscv64gc-unknown-freebsd",
"riscv64gc-unknown-fuchsia",
"riscv64gc-unknown-hermit",
"riscv64gc-unknown-linux-gnu",
"riscv64gc-unknown-linux-musl",
"riscv64gc-unknown-netbsd",
"riscv64gc-unknown-none-elf",
"riscv64gc-unknown-nuttx-elf",
"riscv64gc-unknown-openbsd",
"riscv64imac-unknown-none-elf",
"riscv64imac-unknown-nuttx-elf",
"riscv_target_feature",
"rtm",
"rtm_target_feature",
"s390x-unknown-linux-gnu",
"s390x-unknown-linux-musl",
"s390x_target_feature",
"sb",
"scq",
"sha",
"sha2",
"sha3",
"sha512",
"sha512_sm_x86",
"sign-ext",
"simd128",
"sm3",
"sm4",
"sme",
"sme-b16b16",
"sme-f16f16",
"sme-f64f64",
"sme-f8f16",
"sme-f8f32",
"sme-fa64",
"sme-i16i64",
"sme-lutv2",
"sme2",
"sme2p1",
"soft-float",
"sparc-unknown-linux-gnu",
"sparc-unknown-none-elf",
"sparc64-unknown-linux-gnu",
"sparc64-unknown-netbsd",
"sparc64-unknown-openbsd",
"sparc_target_feature",
"sparcv9-sun-solaris",
"spe",
"ssbs",
"sse",
"sse2",
"sse3",
"sse4.1",
"sse4.2",
"sse4a",
"sse4a_target_feature",
"ssse3",
"ssve-fp8dot2",
"ssve-fp8dot4",
"ssve-fp8fma",
"sve",
"sve-b16b16",
"sve2",
"sve2-aes",
"sve2-bitperm",
"sve2-sha3",
"sve2-sm4",
"sve2p1",
"tail-call",
"tbm",
"tbm_target_feature",
"thumb-mode",
"thumb2",
"thumbv4t-none-eabi",
"thumbv5te-none-eabi",
"thumbv6m-none-eabi",
"thumbv6m-nuttx-eabi",
"thumbv7a-nuttx-eabi",
"thumbv7a-nuttx-eabihf",
"thumbv7a-pc-windows-msvc",
"thumbv7a-uwp-windows-msvc",
"thumbv7em-none-eabi",
"thumbv7em-none-eabihf",
"thumbv7em-nuttx-eabi",
"thumbv7em-nuttx-eabihf",
"thumbv7m-none-eabi",
"thumbv7m-nuttx-eabi",
"thumbv7neon-linux-androideabi",
"thumbv7neon-unknown-linux-gnueabihf",
"thumbv7neon-unknown-linux-musleabihf",
"thumbv8m.base-none-eabi",
"thumbv8m.base-nuttx-eabi",
"thumbv8m.main-none-eabi",
"thumbv8m.main-none-eabihf",
"thumbv8m.main-nuttx-eabi",
"thumbv8m.main-nuttx-eabihf",
"tme",
"transactional-execution",
"trust",
"trustzone",
"ual",
"unaligned-scalar-mem",
"v",
"v5te",
"v6",
"v6k",
"v6t2",
"v7",
"v8",
"v8.1a",
"v8.2a",
"v8.3a",
"v8.4a",
"v8.5a",
"v8.6a",
"v8.7a",
"v8.8a",
"v8.9a",
"v8plus",
"v9",
"v9.1a",
"v9.2a",
"v9.3a",
"v9.4a",
"v9.5a",
"v9a",
"vaes",
"vdsp2e60f",
"vdspv1",
"vdspv2",
"vector",
"vector-enhancements-1",
"vector-enhancements-2",
"vector-packed-decimal",
"vector-packed-decimal-enhancement",
"vector-packed-decimal-enhancement-2",
"vfp2",
"vfp3",
"vfp4",
"vh",
"virt",
"virtualization",
"vpclmulqdq",
"vsx",
"wasm32-unknown-emscripten",
"wasm32-unknown-unknown",
"wasm32-wali-linux-musl",
"wasm32-wasip1",
"wasm32-wasip1-threads",
"wasm32-wasip2",
"wasm32v1-none",
"wasm64-unknown-unknown",
"wasm_target_feature",
"wfxt",
"wide-arithmetic",
"widekl",
"x86_64-apple-darwin",
"x86_64-apple-ios",
"x86_64-apple-ios-macabi",
"x86_64-apple-tvos",
"x86_64-apple-watchos-sim",
"x86_64-fortanix-unknown-sgx",
"x86_64-linux-android",
"x86_64-pc-cygwin",
"x86_64-pc-nto-qnx710",
"x86_64-pc-nto-qnx710_iosock",
"x86_64-pc-nto-qnx800",
"x86_64-pc-solaris",
"x86_64-pc-windows-gnu",
"x86_64-pc-windows-gnullvm",
"x86_64-pc-windows-msvc",
"x86_64-unikraft-linux-musl",
"x86_64-unknown-dragonfly",
"x86_64-unknown-freebsd",
"x86_64-unknown-fuchsia",
"x86_64-unknown-haiku",
"x86_64-unknown-hermit",
"x86_64-unknown-hurd-gnu",
"x86_64-unknown-illumos",
"x86_64-unknown-l4re-uclibc",
"x86_64-unknown-linux-gnu",
"x86_64-unknown-linux-gnux32",
"x86_64-unknown-linux-musl",
"x86_64-unknown-linux-none",
"x86_64-unknown-linux-ohos",
"x86_64-unknown-netbsd",
"x86_64-unknown-none",
"x86_64-unknown-openbsd",
"x86_64-unknown-redox",
"x86_64-unknown-trusty",
"x86_64-unknown-uefi",
"x86_64-uwp-windows-gnu",
"x86_64-uwp-windows-msvc",
"x86_64-win7-windows-gnu",
"x86_64-win7-windows-msvc",
"x86_64-wrs-vxworks",
"x86_64h-apple-darwin",
"x86_amx_intrinsics",
"x87",
"x87_target_feature",
"xop",
"xop_target_feature",
"xsave",
"xsavec",
"xsaveopt",
"xsaves",
"xtensa-esp32-espidf",
"xtensa-esp32-none-elf",
"xtensa-esp32s2-espidf",
"xtensa-esp32s2-none-elf",
"xtensa-esp32s3-espidf",
"xtensa-esp32s3-none-elf",
"za128rs",
"za64rs",
"zaamo",
"zabha",
"zacas",
"zalrsc",
"zama16b",
"zawrs",
"zba",
"zbb",
"zbc",
"zbkb",
"zbkc",
"zbkx",
"zbs",
"zdinx",
"zfh",
"zfhmin",
"zfinx",
"zhinx",
"zhinxmin",
"zk",
"zkn",
"zknd",
"zkne",
"zknh",
"zkr",
"zks",
"zksed",
"zksh",
"zkt",
];
static IMPLIES_FEATURES_NAMES: &[u16] = &[
0u16, 2u16, 0u16, 3u16, 158u16, 0u16, 6u16, 0u16, 7u16, 0u16, 54u16, 115u16, 0u16,
54u16, 459u16, 0u16, 55u16, 0u16, 62u16, 0u16, 114u16, 0u16, 114u16, 331u16, 0u16,
114u16, 451u16, 0u16, 115u16, 0u16, 115u16, 177u16, 191u16, 0u16, 119u16, 0u16,
119u16, 121u16, 127u16, 0u16, 122u16, 0u16, 137u16, 0u16, 137u16, 180u16, 281u16,
0u16, 137u16, 250u16, 510u16, 0u16, 137u16, 434u16, 458u16, 0u16, 143u16, 161u16,
414u16, 445u16, 509u16, 0u16, 148u16, 276u16, 277u16, 328u16, 368u16, 536u16, 0u16,
152u16, 513u16, 0u16, 153u16, 0u16, 154u16, 533u16, 0u16, 156u16, 159u16, 184u16,
508u16, 0u16, 158u16, 0u16, 160u16, 0u16, 160u16, 363u16, 506u16, 0u16, 167u16, 0u16,
170u16, 0u16, 176u16, 0u16, 193u16, 0u16, 195u16, 0u16, 195u16, 434u16, 0u16, 197u16,
0u16, 198u16, 0u16, 214u16, 311u16, 512u16, 0u16, 220u16, 0u16, 251u16, 0u16, 252u16,
0u16, 253u16, 0u16, 254u16, 258u16, 0u16, 255u16, 0u16, 257u16, 0u16, 259u16, 326u16,
327u16, 365u16, 507u16, 0u16, 261u16, 0u16, 277u16, 0u16, 280u16, 0u16, 321u16, 0u16,
335u16, 0u16, 335u16, 540u16, 0u16, 337u16, 338u16, 0u16, 339u16, 0u16, 365u16, 0u16,
366u16, 0u16, 417u16, 0u16, 418u16, 459u16, 0u16, 422u16, 0u16, 424u16, 459u16, 0u16,
425u16, 0u16, 425u16, 459u16, 0u16, 430u16, 0u16, 434u16, 0u16, 446u16, 0u16, 447u16,
0u16, 448u16, 0u16, 449u16, 0u16, 450u16, 0u16, 453u16, 0u16, 455u16, 0u16, 456u16,
0u16, 457u16, 0u16, 459u16, 0u16, 459u16, 510u16, 0u16, 469u16, 502u16, 0u16, 500u16,
0u16, 501u16, 0u16, 503u16, 0u16, 504u16, 0u16, 511u16, 522u16, 0u16, 511u16, 550u16,
0u16, 512u16, 517u16, 0u16, 513u16, 518u16, 0u16, 514u16, 519u16, 0u16, 520u16, 0u16,
527u16, 0u16, 528u16, 0u16, 530u16, 0u16, 531u16, 0u16, 534u16, 0u16, 535u16, 0u16,
599u16, 0u16, 611u16, 0u16, 611u16, 614u16, 0u16, 620u16, 621u16, 622u16, 632u16,
633u16, 634u16, 0u16, 620u16, 621u16, 622u16, 637u16, 638u16, 0u16, 626u16, 0u16,
627u16, 0u16, 629u16, 0u16, 631u16, 635u16, 639u16, 0u16,
];
fn get_implies_features(mut n: usize) -> impl Iterator<Item = &'static str> {
let mut values = IMPLIES_FEATURES_NAMES
.iter()
.skip_while(move |v| {
if n == 0 {
false
} else {
if **v == 0 {
n -= 1;
}
true
}
});
std::iter::from_fn(move || {
let id = *values.next().unwrap();
id.checked_sub(1).map(|idx| NAMES[idx as usize])
})
.fuse()
}
static FEATURES_BLOB: &[u8] = include_bytes!("generated_features.blob");
fn get_feature(n: usize) -> TargetFeature {
let offset = n * 6;
let blob = &FEATURES_BLOB[offset..];
let mut list = blob
.chunks(2)
.map(|bytes| u16::from_le_bytes(bytes.try_into().unwrap()));
let name = NAMES[list.next().unwrap() as usize];
let packed = list.next().unwrap();
let unstable_feature_gate = (packed & 0x7fff)
.checked_sub(1)
.map(|idx| NAMES[idx as usize]);
let globally_enabled = (packed & 0x8000) != 0;
let implies_features = get_implies_features(list.next().unwrap() as usize).collect();
TargetFeature {
name,
unstable_feature_gate,
globally_enabled,
implies_features,
}
}
static FEATURE_LISTS_BLOB: &[u8] = include_bytes!("generated_feature_lists.blob");
static FEATURE_LISTS_OFFSETS: &[usize] = &[
0usize, 186usize, 372usize, 558usize, 744usize, 930usize, 1116usize, 1168usize,
1220usize, 1272usize, 1324usize, 1376usize, 1428usize, 1482usize, 1536usize,
1588usize, 1640usize, 1692usize, 1744usize, 1796usize, 1848usize, 1902usize,
1954usize, 2006usize, 2058usize, 2060usize, 2064usize, 2144usize, 2224usize,
2230usize, 2360usize, 2490usize, 2620usize, 2750usize, 2882usize, 2902usize,
2922usize, 2942usize, 2960usize, 2968usize, 2976usize, 2998usize, 3020usize,
3042usize, 3064usize, 3134usize, 3204usize, 3274usize, 3344usize, 3414usize,
3484usize, 3554usize, 3624usize, 3694usize, 3764usize, 3834usize, 3840usize,
3848usize, 3856usize, 3910usize, 3964usize, 4016usize, 4068usize, 4120usize,
4172usize, 4200usize, 4228usize, 4256usize, 4284usize, 4414usize, 4544usize,
4674usize, 4804usize, 4934usize, 4992usize, 5050usize, 5108usize, 5166usize,
5224usize, 5282usize, 5340usize, 5398usize, 5456usize, 5514usize, 5572usize,
5630usize, 5688usize, 5746usize, 5804usize, 5862usize, 5920usize, 5978usize,
6116usize, 6254usize, 6392usize, 6530usize, 6668usize, 6686usize, 6758usize,
6830usize, 6902usize, 6974usize, 7046usize, 7118usize, 7190usize, 7262usize,
7334usize, 7406usize, 7478usize, 7536usize, 7594usize, 7652usize, 7710usize,
7768usize, 7826usize, 7884usize, 7942usize, 8000usize, 8138usize, 8276usize,
8414usize, 8552usize, 8690usize, 8876usize, 8906usize, 8936usize, 8960usize,
8984usize, 9008usize, 9032usize, 9056usize, 9138usize, 9220usize, 9302usize,
9384usize, 9466usize, 9548usize, 9630usize, 9712usize, 9794usize, 9876usize,
9958usize, 9986usize, 9994usize, 10022usize,
];
fn get_feature_list(n: usize) -> impl Iterator<Item = TargetFeature> {
let offset = FEATURE_LISTS_OFFSETS[n];
let blob = &FEATURE_LISTS_BLOB[offset..];
let mut list = blob
.chunks(2)
.map(|bytes| u16::from_le_bytes(bytes.try_into().unwrap()));
std::iter::from_fn(move || {
list.next().unwrap().checked_sub(1).map(|id| get_feature(id as usize))
})
.fuse()
}
static TARGET_MAPS_BLOB: &[u8] = include_bytes!("generated_target_maps.blob");
static TARGET_MAPS_OFFSETS: &[(&str, usize)] = &[
("1.85.0", 0usize),
("1.86.0", 1084usize),
("1.87.0", 2232usize),
("", 3380usize),
];
pub(crate) fn all() -> impl Iterator<
Item = (
&'static str,
impl Iterator<Item = (&'static str, impl Iterator<Item = TargetFeature>)>,
),
> {
TARGET_MAPS_OFFSETS
.windows(2)
.map(|window| {
let &[(version, start), (_, end)] = window else { unreachable!() };
let slice = &TARGET_MAPS_BLOB[start..end];
let targets = slice
.chunks(4)
.map(|bytes| {
let target_name = u16::from_le_bytes([bytes[0], bytes[1]]);
let feature_list = u16::from_le_bytes([bytes[2], bytes[3]]);
(NAMES[target_name as usize], get_feature_list(feature_list.into()))
});
(version, targets)
})
}