diff --git a/.claude/blackboard.md b/.claude/blackboard.md index eb3aded7..1bcff2e2 100644 --- a/.claude/blackboard.md +++ b/.claude/blackboard.md @@ -1,3 +1,18 @@ +## 2026-09-24 — per-CPU SIMD inventory generated from LLVM's TableGen source + +`tools/gen_llvm_inventory.py` reads llvm-project's `X86.td`, `AArch64Processors.td`, `AArch64Features.td` (plus the instruction/predicate `.td` files) at the `llvmorg-*` tag matching `rustc -vV` (22.1.8 under the pinned 1.98.1), resolves every processor's features, and writes `tools/llvm-inventory/inventory.json` + `.claude/knowledge/llvm-cpu-inventory.md`. Same pattern as `gen_ternlog_bodies.py`: committed output, generator as provenance; default mode exits 1 if the output is stale. + +**Verified, not asserted:** `--verify-rustc` compares EVERY CPU (92 x86, 99 aarch64) with rustc's own `--print cfg -C target-cpu=...` over all features stable rustc exposes (56 / 37), using rustc's own Rust↔LLVM name table parsed from `rustc_codegen_llvm/src/llvm_util.rs` at the pinned release. 191/191 agree. The comparator failed first and drove five real fixes: `!listremove`; `Architecture64` implied list is the first list arg, not the last; aarch64 arch DefaultExts are part of rustc's cfg (apple-m4 `ssbs`); x86 ABI baseline `sse/sse2` is target-level; **tune records imply ISA features** (`TuneOryon` → FullFP16/FP16FML/SPE). + +**Findings the table makes visible (for crypto dispatch):** +- `x86-64-v3` (our portable baseline) has no `aes` and no `pclmul` — compile-time dispatch cannot reach AES-NI or PCLMULQDQ on the v3 build. +- `haswell` in LLVM has `pclmul` but not `aes`; `arrowlake` has `avxifma` (VEX IFMA) without AVX-512. +- aarch64 `neoverse-v2` (Graviton4/Grace) and `cortex-x925` have no `aes` → no hardware AES and no 64-bit PMULL without an explicit `+aes`. + +**Primitive rows** (mul_lo32, var shift/permute u32, IFMA, clmul, AES round) name the LLVM instruction def and gating predicate; the generator ASSERTS they still exist in the `.td` files, so an LLVM rename fails loudly. + +**Loose ends:** the `backend` column mirrors the `simd.rs` cfg ladder by hand (not parsed); no wasm rows (wasm has no processor table); no CI job runs the staleness check yet; rustc builds on rust-lang's LLVM fork (`rustc/22.1-2026-05-19`) — its AArch64 `.td` files matched the upstream tag byte-for-byte here, and `--verify-rustc` is the guard if that ever diverges. + ## 2026-09-23 (21) — ternlog → Count/Any without a mask: a slice loop, NOT a new ISA primitive Question asked (lance-graph #1270 prompt): what is the smallest T1 operation that lets an arbitrary 2/3-input Boolean membership END in Count/Any without writing a mask — and does existing `U64x8` composition already do it register-only? diff --git a/.claude/knowledge/llvm-cpu-inventory.md b/.claude/knowledge/llvm-cpu-inventory.md new file mode 100644 index 00000000..9b85cfc0 --- /dev/null +++ b/.claude/knowledge/llvm-cpu-inventory.md @@ -0,0 +1,211 @@ +# Per-CPU SIMD inventory — generated from LLVM's TableGen source + +> **GENERATED** by `tools/gen_llvm_inventory.py` from llvm-project `llvmorg-22.1.8` +> (the tag matching `rustc -vV` under this repo's pinned toolchain). Do not edit by hand: +> run `python3 tools/gen_llvm_inventory.py --write`. `--verify-rustc` checks every row +> against rustc's own `--print cfg -C target-cpu=...`. + +`backend` mirrors the `simd.rs` cfg ladder. Primitive columns list the instruction(s) +that implement the primitive on that CPU; `—` means the CPU has none and a portable +fallback is required. + +## x86 (92 CPUs) + +| cpu | backend | avx2 | avx512f | avx512vl | avx512ifma | avxifma | pclmul | vpclmulqdq | aes | vaes | gfni | mul_lo32 | shift_var_u32 | permute_var_u32 | ifma52 | clmul | aes_round | +|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---| +| `alderlake` | simd_avx2 | ✓ | | | | | ✓ | ✓ | ✓ | ✓ | ✓ | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2) | VPSLLVD / VPSRLVD | VPERMD | — | PCLMULQDQ | AESENC | +| `arrowlake` | simd_avx2 | ✓ | | | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2) | VPSLLVD / VPSRLVD | VPERMD | VPMADD52LUQ/HUQ (VEX) | PCLMULQDQ | AESENC | +| `arrowlake-s` | simd_avx2 | ✓ | | | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2) | VPSLLVD / VPSRLVD | VPERMD | VPMADD52LUQ/HUQ (VEX) | PCLMULQDQ | AESENC | +| `arrowlake_s` | simd_avx2 | ✓ | | | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2) | VPSLLVD / VPSRLVD | VPERMD | VPMADD52LUQ/HUQ (VEX) | PCLMULQDQ | AESENC | +| `atom` | simd_avx2 (no avx2: array polyfill) | | | | | | | | | | | PMULUDQ (xmm, SSE2) | — | — | — | — | — | +| `atom_sse4_2` | simd_avx2 (no avx2: array polyfill) | | | | | | ✓ | | | | | PMULUDQ (xmm, SSE2) | — | — | — | PCLMULQDQ | — | +| `atom_sse4_2_movbe` | simd_avx2 (no avx2: array polyfill) | | | | | | ✓ | | ✓ | | | PMULUDQ (xmm, SSE2) | — | — | — | PCLMULQDQ | AESENC | +| `bdver1` | simd_avx2 (no avx2: array polyfill) | | | | | | ✓ | | ✓ | | | PMULUDQ (xmm, SSE2) | — | — | — | PCLMULQDQ | AESENC | +| `bdver2` | simd_avx2 (no avx2: array polyfill) | | | | | | ✓ | | ✓ | | | PMULUDQ (xmm, SSE2) | — | — | — | PCLMULQDQ | AESENC | +| `bdver3` | simd_avx2 (no avx2: array polyfill) | | | | | | ✓ | | ✓ | | | PMULUDQ (xmm, SSE2) | — | — | — | PCLMULQDQ | AESENC | +| `bdver4` | simd_avx2 | ✓ | | | | | ✓ | | ✓ | | | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2) | VPSLLVD / VPSRLVD | VPERMD | — | PCLMULQDQ | AESENC | +| `bonnell` | simd_avx2 (no avx2: array polyfill) | | | | | | | | | | | PMULUDQ (xmm, SSE2) | — | — | — | — | — | +| `broadwell` | simd_avx2 | ✓ | | | | | ✓ | | | | | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2) | VPSLLVD / VPSRLVD | VPERMD | — | PCLMULQDQ | — | +| `btver2` | simd_avx2 (no avx2: array polyfill) | | | | | | ✓ | | ✓ | | | PMULUDQ (xmm, SSE2) | — | — | — | PCLMULQDQ | AESENC | +| `cannonlake` | simd_avx512 | ✓ | ✓ | ✓ | ✓ | | ✓ | | ✓ | | | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2)
VPMULUDQ (zmm, AVX-512F) | VPSLLVD / VPSRLVD | VPERMD | VPMADD52LUQ/HUQ (EVEX) | PCLMULQDQ | AESENC | +| `cascadelake` | simd_avx512 | ✓ | ✓ | ✓ | | | ✓ | | ✓ | | | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2)
VPMULUDQ (zmm, AVX-512F) | VPSLLVD / VPSRLVD | VPERMD | — | PCLMULQDQ | AESENC | +| `clearwaterforest` | simd_avx2 | ✓ | | | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2) | VPSLLVD / VPSRLVD | VPERMD | VPMADD52LUQ/HUQ (VEX) | PCLMULQDQ | AESENC | +| `cooperlake` | simd_avx512 | ✓ | ✓ | ✓ | | | ✓ | | ✓ | | | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2)
VPMULUDQ (zmm, AVX-512F) | VPSLLVD / VPSRLVD | VPERMD | — | PCLMULQDQ | AESENC | +| `core-avx-i` | simd_avx2 (no avx2: array polyfill) | | | | | | ✓ | | | | | PMULUDQ (xmm, SSE2) | — | — | — | PCLMULQDQ | — | +| `core-avx2` | simd_avx2 | ✓ | | | | | ✓ | | | | | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2) | VPSLLVD / VPSRLVD | VPERMD | — | PCLMULQDQ | — | +| `core2` | simd_avx2 (no avx2: array polyfill) | | | | | | | | | | | PMULUDQ (xmm, SSE2) | — | — | — | — | — | +| `core_2_duo_sse4_1` | simd_avx2 (no avx2: array polyfill) | | | | | | | | | | | PMULUDQ (xmm, SSE2) | — | — | — | — | — | +| `core_2_duo_ssse3` | simd_avx2 (no avx2: array polyfill) | | | | | | | | | | | PMULUDQ (xmm, SSE2) | — | — | — | — | — | +| `core_2nd_gen_avx` | simd_avx2 (no avx2: array polyfill) | | | | | | ✓ | | | | | PMULUDQ (xmm, SSE2) | — | — | — | PCLMULQDQ | — | +| `core_3rd_gen_avx` | simd_avx2 (no avx2: array polyfill) | | | | | | ✓ | | | | | PMULUDQ (xmm, SSE2) | — | — | — | PCLMULQDQ | — | +| `core_4th_gen_avx` | simd_avx2 | ✓ | | | | | ✓ | | | | | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2) | VPSLLVD / VPSRLVD | VPERMD | — | PCLMULQDQ | — | +| `core_4th_gen_avx_tsx` | simd_avx2 | ✓ | | | | | ✓ | | | | | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2) | VPSLLVD / VPSRLVD | VPERMD | — | PCLMULQDQ | — | +| `core_5th_gen_avx` | simd_avx2 | ✓ | | | | | ✓ | | | | | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2) | VPSLLVD / VPSRLVD | VPERMD | — | PCLMULQDQ | — | +| `core_5th_gen_avx_tsx` | simd_avx2 | ✓ | | | | | ✓ | | | | | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2) | VPSLLVD / VPSRLVD | VPERMD | — | PCLMULQDQ | — | +| `core_aes_pclmulqdq` | simd_avx2 (no avx2: array polyfill) | | | | | | ✓ | | | | | PMULUDQ (xmm, SSE2) | — | — | — | PCLMULQDQ | — | +| `core_i7_sse4_2` | simd_avx2 (no avx2: array polyfill) | | | | | | | | | | | PMULUDQ (xmm, SSE2) | — | — | — | — | — | +| `corei7` | simd_avx2 (no avx2: array polyfill) | | | | | | | | | | | PMULUDQ (xmm, SSE2) | — | — | — | — | — | +| `corei7-avx` | simd_avx2 (no avx2: array polyfill) | | | | | | ✓ | | | | | PMULUDQ (xmm, SSE2) | — | — | — | PCLMULQDQ | — | +| `diamondrapids` | simd_avx512 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2)
VPMULUDQ (zmm, AVX-512F) | VPSLLVD / VPSRLVD | VPERMD | VPMADD52LUQ/HUQ (EVEX)
VPMADD52LUQ/HUQ (VEX) | PCLMULQDQ
VPCLMULQDQ (zmm) | AESENC
VAESENC (zmm) | +| `emeraldrapids` | simd_avx512 | ✓ | ✓ | ✓ | ✓ | | ✓ | ✓ | ✓ | ✓ | ✓ | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2)
VPMULUDQ (zmm, AVX-512F) | VPSLLVD / VPSRLVD | VPERMD | VPMADD52LUQ/HUQ (EVEX) | PCLMULQDQ
VPCLMULQDQ (zmm) | AESENC
VAESENC (zmm) | +| `generic` | simd_avx2 (no avx2: array polyfill) | | | | | | | | | | | — | — | — | — | — | — | +| `goldmont` | simd_avx2 (no avx2: array polyfill) | | | | | | ✓ | | ✓ | | | PMULUDQ (xmm, SSE2) | — | — | — | PCLMULQDQ | AESENC | +| `goldmont-plus` | simd_avx2 (no avx2: array polyfill) | | | | | | ✓ | | ✓ | | | PMULUDQ (xmm, SSE2) | — | — | — | PCLMULQDQ | AESENC | +| `goldmont_plus` | simd_avx2 (no avx2: array polyfill) | | | | | | ✓ | | ✓ | | | PMULUDQ (xmm, SSE2) | — | — | — | PCLMULQDQ | AESENC | +| `gracemont` | simd_avx2 | ✓ | | | | | ✓ | ✓ | ✓ | ✓ | ✓ | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2) | VPSLLVD / VPSRLVD | VPERMD | — | PCLMULQDQ | AESENC | +| `grandridge` | simd_avx2 | ✓ | | | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2) | VPSLLVD / VPSRLVD | VPERMD | VPMADD52LUQ/HUQ (VEX) | PCLMULQDQ | AESENC | +| `graniterapids` | simd_avx512 | ✓ | ✓ | ✓ | ✓ | | ✓ | ✓ | ✓ | ✓ | ✓ | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2)
VPMULUDQ (zmm, AVX-512F) | VPSLLVD / VPSRLVD | VPERMD | VPMADD52LUQ/HUQ (EVEX) | PCLMULQDQ
VPCLMULQDQ (zmm) | AESENC
VAESENC (zmm) | +| `graniterapids-d` | simd_avx512 | ✓ | ✓ | ✓ | ✓ | | ✓ | ✓ | ✓ | ✓ | ✓ | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2)
VPMULUDQ (zmm, AVX-512F) | VPSLLVD / VPSRLVD | VPERMD | VPMADD52LUQ/HUQ (EVEX) | PCLMULQDQ
VPCLMULQDQ (zmm) | AESENC
VAESENC (zmm) | +| `graniterapids_d` | simd_avx512 | ✓ | ✓ | ✓ | ✓ | | ✓ | ✓ | ✓ | ✓ | ✓ | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2)
VPMULUDQ (zmm, AVX-512F) | VPSLLVD / VPSRLVD | VPERMD | VPMADD52LUQ/HUQ (EVEX) | PCLMULQDQ
VPCLMULQDQ (zmm) | AESENC
VAESENC (zmm) | +| `haswell` | simd_avx2 | ✓ | | | | | ✓ | | | | | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2) | VPSLLVD / VPSRLVD | VPERMD | — | PCLMULQDQ | — | +| `icelake-client` | simd_avx512 | ✓ | ✓ | ✓ | ✓ | | ✓ | ✓ | ✓ | ✓ | ✓ | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2)
VPMULUDQ (zmm, AVX-512F) | VPSLLVD / VPSRLVD | VPERMD | VPMADD52LUQ/HUQ (EVEX) | PCLMULQDQ
VPCLMULQDQ (zmm) | AESENC
VAESENC (zmm) | +| `icelake-server` | simd_avx512 | ✓ | ✓ | ✓ | ✓ | | ✓ | ✓ | ✓ | ✓ | ✓ | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2)
VPMULUDQ (zmm, AVX-512F) | VPSLLVD / VPSRLVD | VPERMD | VPMADD52LUQ/HUQ (EVEX) | PCLMULQDQ
VPCLMULQDQ (zmm) | AESENC
VAESENC (zmm) | +| `icelake_client` | simd_avx512 | ✓ | ✓ | ✓ | ✓ | | ✓ | ✓ | ✓ | ✓ | ✓ | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2)
VPMULUDQ (zmm, AVX-512F) | VPSLLVD / VPSRLVD | VPERMD | VPMADD52LUQ/HUQ (EVEX) | PCLMULQDQ
VPCLMULQDQ (zmm) | AESENC
VAESENC (zmm) | +| `icelake_server` | simd_avx512 | ✓ | ✓ | ✓ | ✓ | | ✓ | ✓ | ✓ | ✓ | ✓ | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2)
VPMULUDQ (zmm, AVX-512F) | VPSLLVD / VPSRLVD | VPERMD | VPMADD52LUQ/HUQ (EVEX) | PCLMULQDQ
VPCLMULQDQ (zmm) | AESENC
VAESENC (zmm) | +| `ivybridge` | simd_avx2 (no avx2: array polyfill) | | | | | | ✓ | | | | | PMULUDQ (xmm, SSE2) | — | — | — | PCLMULQDQ | — | +| `knl` | simd_avx512 | ✓ | ✓ | | | | ✓ | | ✓ | | | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2)
VPMULUDQ (zmm, AVX-512F) | VPSLLVD / VPSRLVD | VPERMD | — | PCLMULQDQ | AESENC | +| `knm` | simd_avx512 | ✓ | ✓ | | | | ✓ | | ✓ | | | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2)
VPMULUDQ (zmm, AVX-512F) | VPSLLVD / VPSRLVD | VPERMD | — | PCLMULQDQ | AESENC | +| `lunarlake` | simd_avx2 | ✓ | | | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2) | VPSLLVD / VPSRLVD | VPERMD | VPMADD52LUQ/HUQ (VEX) | PCLMULQDQ | AESENC | +| `meteorlake` | simd_avx2 | ✓ | | | | | ✓ | ✓ | ✓ | ✓ | ✓ | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2) | VPSLLVD / VPSRLVD | VPERMD | — | PCLMULQDQ | AESENC | +| `mic_avx512` | simd_avx512 | ✓ | ✓ | | | | ✓ | | ✓ | | | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2)
VPMULUDQ (zmm, AVX-512F) | VPSLLVD / VPSRLVD | VPERMD | — | PCLMULQDQ | AESENC | +| `nehalem` | simd_avx2 (no avx2: array polyfill) | | | | | | | | | | | PMULUDQ (xmm, SSE2) | — | — | — | — | — | +| `nocona` | simd_avx2 (no avx2: array polyfill) | | | | | | | | | | | PMULUDQ (xmm, SSE2) | — | — | — | — | — | +| `novalake` | simd_avx512 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2)
VPMULUDQ (zmm, AVX-512F) | VPSLLVD / VPSRLVD | VPERMD | VPMADD52LUQ/HUQ (EVEX)
VPMADD52LUQ/HUQ (VEX) | PCLMULQDQ
VPCLMULQDQ (zmm) | AESENC
VAESENC (zmm) | +| `pantherlake` | simd_avx2 | ✓ | | | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2) | VPSLLVD / VPSRLVD | VPERMD | VPMADD52LUQ/HUQ (VEX) | PCLMULQDQ | AESENC | +| `penryn` | simd_avx2 (no avx2: array polyfill) | | | | | | | | | | | PMULUDQ (xmm, SSE2) | — | — | — | — | — | +| `pentium-m` | simd_avx2 (no avx2: array polyfill) | | | | | | | | | | | PMULUDQ (xmm, SSE2) | — | — | — | — | — | +| `pentium4` | simd_avx2 (no avx2: array polyfill) | | | | | | | | | | | PMULUDQ (xmm, SSE2) | — | — | — | — | — | +| `pentium4m` | simd_avx2 (no avx2: array polyfill) | | | | | | | | | | | PMULUDQ (xmm, SSE2) | — | — | — | — | — | +| `pentium_4` | simd_avx2 (no avx2: array polyfill) | | | | | | | | | | | PMULUDQ (xmm, SSE2) | — | — | — | — | — | +| `pentium_4_sse3` | simd_avx2 (no avx2: array polyfill) | | | | | | | | | | | PMULUDQ (xmm, SSE2) | — | — | — | — | — | +| `pentium_m` | simd_avx2 (no avx2: array polyfill) | | | | | | | | | | | PMULUDQ (xmm, SSE2) | — | — | — | — | — | +| `prescott` | simd_avx2 (no avx2: array polyfill) | | | | | | | | | | | PMULUDQ (xmm, SSE2) | — | — | — | — | — | +| `raptorlake` | simd_avx2 | ✓ | | | | | ✓ | ✓ | ✓ | ✓ | ✓ | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2) | VPSLLVD / VPSRLVD | VPERMD | — | PCLMULQDQ | AESENC | +| `rocketlake` | simd_avx512 | ✓ | ✓ | ✓ | ✓ | | ✓ | ✓ | ✓ | ✓ | ✓ | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2)
VPMULUDQ (zmm, AVX-512F) | VPSLLVD / VPSRLVD | VPERMD | VPMADD52LUQ/HUQ (EVEX) | PCLMULQDQ
VPCLMULQDQ (zmm) | AESENC
VAESENC (zmm) | +| `sandybridge` | simd_avx2 (no avx2: array polyfill) | | | | | | ✓ | | | | | PMULUDQ (xmm, SSE2) | — | — | — | PCLMULQDQ | — | +| `sapphirerapids` | simd_avx512 | ✓ | ✓ | ✓ | ✓ | | ✓ | ✓ | ✓ | ✓ | ✓ | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2)
VPMULUDQ (zmm, AVX-512F) | VPSLLVD / VPSRLVD | VPERMD | VPMADD52LUQ/HUQ (EVEX) | PCLMULQDQ
VPCLMULQDQ (zmm) | AESENC
VAESENC (zmm) | +| `sierraforest` | simd_avx2 | ✓ | | | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2) | VPSLLVD / VPSRLVD | VPERMD | VPMADD52LUQ/HUQ (VEX) | PCLMULQDQ | AESENC | +| `silvermont` | simd_avx2 (no avx2: array polyfill) | | | | | | ✓ | | | | | PMULUDQ (xmm, SSE2) | — | — | — | PCLMULQDQ | — | +| `skx` | simd_avx512 | ✓ | ✓ | ✓ | | | ✓ | | ✓ | | | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2)
VPMULUDQ (zmm, AVX-512F) | VPSLLVD / VPSRLVD | VPERMD | — | PCLMULQDQ | AESENC | +| `skylake` | simd_avx2 | ✓ | | | | | ✓ | | ✓ | | | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2) | VPSLLVD / VPSRLVD | VPERMD | — | PCLMULQDQ | AESENC | +| `skylake-avx512` | simd_avx512 | ✓ | ✓ | ✓ | | | ✓ | | ✓ | | | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2)
VPMULUDQ (zmm, AVX-512F) | VPSLLVD / VPSRLVD | VPERMD | — | PCLMULQDQ | AESENC | +| `skylake_avx512` | simd_avx512 | ✓ | ✓ | ✓ | | | ✓ | | ✓ | | | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2)
VPMULUDQ (zmm, AVX-512F) | VPSLLVD / VPSRLVD | VPERMD | — | PCLMULQDQ | AESENC | +| `slm` | simd_avx2 (no avx2: array polyfill) | | | | | | ✓ | | | | | PMULUDQ (xmm, SSE2) | — | — | — | PCLMULQDQ | — | +| `tigerlake` | simd_avx512 | ✓ | ✓ | ✓ | ✓ | | ✓ | ✓ | ✓ | ✓ | ✓ | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2)
VPMULUDQ (zmm, AVX-512F) | VPSLLVD / VPSRLVD | VPERMD | VPMADD52LUQ/HUQ (EVEX) | PCLMULQDQ
VPCLMULQDQ (zmm) | AESENC
VAESENC (zmm) | +| `tremont` | simd_avx2 (no avx2: array polyfill) | | | | | | ✓ | | ✓ | | ✓ | PMULUDQ (xmm, SSE2) | — | — | — | PCLMULQDQ | AESENC | +| `westmere` | simd_avx2 (no avx2: array polyfill) | | | | | | ✓ | | | | | PMULUDQ (xmm, SSE2) | — | — | — | PCLMULQDQ | — | +| `wildcatlake` | simd_avx2 | ✓ | | | | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2) | VPSLLVD / VPSRLVD | VPERMD | VPMADD52LUQ/HUQ (VEX) | PCLMULQDQ | AESENC | +| `x86-64` | simd_avx2 (no avx2: array polyfill) | | | | | | | | | | | PMULUDQ (xmm, SSE2) | — | — | — | — | — | +| `x86-64-v2` | simd_avx2 (no avx2: array polyfill) | | | | | | | | | | | PMULUDQ (xmm, SSE2) | — | — | — | — | — | +| `x86-64-v3` | simd_avx2 | ✓ | | | | | | | | | | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2) | VPSLLVD / VPSRLVD | VPERMD | — | — | — | +| `x86-64-v4` | simd_avx512 | ✓ | ✓ | ✓ | | | | | | | | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2)
VPMULUDQ (zmm, AVX-512F) | VPSLLVD / VPSRLVD | VPERMD | — | — | — | +| `yonah` | simd_avx2 (no avx2: array polyfill) | | | | | | | | | | | PMULUDQ (xmm, SSE2) | — | — | — | — | — | +| `znver1` | simd_avx2 | ✓ | | | | | ✓ | | ✓ | | | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2) | VPSLLVD / VPSRLVD | VPERMD | — | PCLMULQDQ | AESENC | +| `znver2` | simd_avx2 | ✓ | | | | | ✓ | | ✓ | | | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2) | VPSLLVD / VPSRLVD | VPERMD | — | PCLMULQDQ | AESENC | +| `znver3` | simd_avx2 | ✓ | | | | | ✓ | ✓ | ✓ | ✓ | | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2) | VPSLLVD / VPSRLVD | VPERMD | — | PCLMULQDQ | AESENC | +| `znver4` | simd_avx512 | ✓ | ✓ | ✓ | ✓ | | ✓ | ✓ | ✓ | ✓ | ✓ | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2)
VPMULUDQ (zmm, AVX-512F) | VPSLLVD / VPSRLVD | VPERMD | VPMADD52LUQ/HUQ (EVEX) | PCLMULQDQ
VPCLMULQDQ (zmm) | AESENC
VAESENC (zmm) | +| `znver5` | simd_avx512 | ✓ | ✓ | ✓ | ✓ | | ✓ | ✓ | ✓ | ✓ | ✓ | PMULUDQ (xmm, SSE2)
VPMULUDQ (ymm, AVX2)
VPMULUDQ (zmm, AVX-512F) | VPSLLVD / VPSRLVD | VPERMD | VPMADD52LUQ/HUQ (EVEX) | PCLMULQDQ
VPCLMULQDQ (zmm) | AESENC
VAESENC (zmm) | + +## aarch64 (99 CPUs) + +| cpu | backend | neon | dotprod | i8mm | aes | sha2 | sve2 | mul_lo32 | shift_var_u32 | permute_var_u32 | ifma52 | clmul | aes_round | +|---|---|---|---|---|---|---|---|---|---|---|---|---|---| +| `a64fx` | simd_neon | ✓ | | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `ampere1` | simd_neon +dotprod | ✓ | ✓ | ✓ | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `ampere1a` | simd_neon +dotprod | ✓ | ✓ | ✓ | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `ampere1b` | simd_neon +dotprod | ✓ | ✓ | ✓ | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `ampere1c` | simd_neon +dotprod | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `apple-a10` | simd_neon | ✓ | | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `apple-a11` | simd_neon | ✓ | | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `apple-a12` | simd_neon | ✓ | | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `apple-a13` | simd_neon +dotprod | ✓ | ✓ | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `apple-a14` | simd_neon +dotprod | ✓ | ✓ | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `apple-a15` | simd_neon +dotprod | ✓ | ✓ | ✓ | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `apple-a16` | simd_neon +dotprod | ✓ | ✓ | ✓ | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `apple-a17` | simd_neon +dotprod | ✓ | ✓ | ✓ | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `apple-a18` | simd_neon +dotprod | ✓ | ✓ | ✓ | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `apple-a19` | simd_neon +dotprod | ✓ | ✓ | ✓ | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `apple-a7` | simd_neon | ✓ | | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `apple-a8` | simd_neon | ✓ | | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `apple-a9` | simd_neon | ✓ | | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `apple-latest` | simd_neon +dotprod | ✓ | ✓ | ✓ | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `apple-m1` | simd_neon +dotprod | ✓ | ✓ | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `apple-m2` | simd_neon +dotprod | ✓ | ✓ | ✓ | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `apple-m3` | simd_neon +dotprod | ✓ | ✓ | ✓ | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `apple-m4` | simd_neon +dotprod | ✓ | ✓ | ✓ | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `apple-m5` | simd_neon +dotprod | ✓ | ✓ | ✓ | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `apple-s10` | simd_neon +dotprod | ✓ | ✓ | ✓ | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `apple-s4` | simd_neon | ✓ | | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `apple-s5` | simd_neon | ✓ | | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `apple-s6` | simd_neon +dotprod | ✓ | ✓ | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `apple-s7` | simd_neon +dotprod | ✓ | ✓ | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `apple-s8` | simd_neon +dotprod | ✓ | ✓ | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `apple-s9` | simd_neon +dotprod | ✓ | ✓ | ✓ | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `c1-nano` | simd_neon +dotprod | ✓ | ✓ | ✓ | | | ✓ | UMULL / UMULL2 | USHL | TBL | — | — | — | +| `c1-premium` | simd_neon +dotprod | ✓ | ✓ | ✓ | | | ✓ | UMULL / UMULL2 | USHL | TBL | — | — | — | +| `c1-pro` | simd_neon +dotprod | ✓ | ✓ | ✓ | | | ✓ | UMULL / UMULL2 | USHL | TBL | — | — | — | +| `c1-ultra` | simd_neon +dotprod | ✓ | ✓ | ✓ | | | ✓ | UMULL / UMULL2 | USHL | TBL | — | — | — | +| `carmel` | simd_neon | ✓ | | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `cobalt-100` | simd_neon +dotprod | ✓ | ✓ | ✓ | | | ✓ | UMULL / UMULL2 | USHL | TBL | — | — | — | +| `cortex-a320` | simd_neon +dotprod | ✓ | ✓ | ✓ | | | ✓ | UMULL / UMULL2 | USHL | TBL | — | — | — | +| `cortex-a34` | simd_neon | ✓ | | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `cortex-a35` | simd_neon | ✓ | | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `cortex-a510` | simd_neon +dotprod | ✓ | ✓ | ✓ | | | ✓ | UMULL / UMULL2 | USHL | TBL | — | — | — | +| `cortex-a520` | simd_neon +dotprod | ✓ | ✓ | ✓ | | | ✓ | UMULL / UMULL2 | USHL | TBL | — | — | — | +| `cortex-a520ae` | simd_neon +dotprod | ✓ | ✓ | ✓ | | | ✓ | UMULL / UMULL2 | USHL | TBL | — | — | — | +| `cortex-a53` | simd_neon | ✓ | | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `cortex-a55` | simd_neon +dotprod | ✓ | ✓ | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `cortex-a57` | simd_neon | ✓ | | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `cortex-a65` | simd_neon +dotprod | ✓ | ✓ | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `cortex-a65ae` | simd_neon +dotprod | ✓ | ✓ | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `cortex-a710` | simd_neon +dotprod | ✓ | ✓ | ✓ | | | ✓ | UMULL / UMULL2 | USHL | TBL | — | — | — | +| `cortex-a715` | simd_neon +dotprod | ✓ | ✓ | ✓ | | | ✓ | UMULL / UMULL2 | USHL | TBL | — | — | — | +| `cortex-a72` | simd_neon | ✓ | | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `cortex-a720` | simd_neon +dotprod | ✓ | ✓ | ✓ | | | ✓ | UMULL / UMULL2 | USHL | TBL | — | — | — | +| `cortex-a720ae` | simd_neon +dotprod | ✓ | ✓ | ✓ | | | ✓ | UMULL / UMULL2 | USHL | TBL | — | — | — | +| `cortex-a725` | simd_neon +dotprod | ✓ | ✓ | ✓ | | | ✓ | UMULL / UMULL2 | USHL | TBL | — | — | — | +| `cortex-a73` | simd_neon | ✓ | | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `cortex-a75` | simd_neon +dotprod | ✓ | ✓ | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `cortex-a76` | simd_neon +dotprod | ✓ | ✓ | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `cortex-a76ae` | simd_neon +dotprod | ✓ | ✓ | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `cortex-a77` | simd_neon +dotprod | ✓ | ✓ | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `cortex-a78` | simd_neon +dotprod | ✓ | ✓ | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `cortex-a78ae` | simd_neon +dotprod | ✓ | ✓ | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `cortex-a78c` | simd_neon +dotprod | ✓ | ✓ | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `cortex-r82` | simd_neon +dotprod | ✓ | ✓ | | | | | UMULL / UMULL2 | USHL | TBL | — | — | — | +| `cortex-r82ae` | simd_neon +dotprod | ✓ | ✓ | | | | | UMULL / UMULL2 | USHL | TBL | — | — | — | +| `cortex-x1` | simd_neon +dotprod | ✓ | ✓ | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `cortex-x1c` | simd_neon +dotprod | ✓ | ✓ | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `cortex-x2` | simd_neon +dotprod | ✓ | ✓ | ✓ | | | ✓ | UMULL / UMULL2 | USHL | TBL | — | — | — | +| `cortex-x3` | simd_neon +dotprod | ✓ | ✓ | ✓ | | | ✓ | UMULL / UMULL2 | USHL | TBL | — | — | — | +| `cortex-x4` | simd_neon +dotprod | ✓ | ✓ | ✓ | | | ✓ | UMULL / UMULL2 | USHL | TBL | — | — | — | +| `cortex-x925` | simd_neon +dotprod | ✓ | ✓ | ✓ | | | ✓ | UMULL / UMULL2 | USHL | TBL | — | — | — | +| `cyclone` | simd_neon | ✓ | | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `exynos-m3` | simd_neon | ✓ | | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `exynos-m4` | simd_neon +dotprod | ✓ | ✓ | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `exynos-m5` | simd_neon +dotprod | ✓ | ✓ | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `falkor` | simd_neon | ✓ | | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `fujitsu-monaka` | simd_neon +dotprod | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `gb10` | simd_neon +dotprod | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `generic` | simd_neon | ✓ | | | | | | UMULL / UMULL2 | USHL | TBL | — | — | — | +| `grace` | simd_neon +dotprod | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `kryo` | simd_neon | ✓ | | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `neoverse-512tvb` | simd_neon +dotprod | ✓ | ✓ | ✓ | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `neoverse-e1` | simd_neon +dotprod | ✓ | ✓ | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `neoverse-n1` | simd_neon +dotprod | ✓ | ✓ | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `neoverse-n2` | simd_neon +dotprod | ✓ | ✓ | ✓ | | | ✓ | UMULL / UMULL2 | USHL | TBL | — | — | — | +| `neoverse-n3` | simd_neon +dotprod | ✓ | ✓ | ✓ | | | ✓ | UMULL / UMULL2 | USHL | TBL | — | — | — | +| `neoverse-v1` | simd_neon +dotprod | ✓ | ✓ | ✓ | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `neoverse-v2` | simd_neon +dotprod | ✓ | ✓ | ✓ | | | ✓ | UMULL / UMULL2 | USHL | TBL | — | — | — | +| `neoverse-v3` | simd_neon +dotprod | ✓ | ✓ | ✓ | | | ✓ | UMULL / UMULL2 | USHL | TBL | — | — | — | +| `neoverse-v3ae` | simd_neon +dotprod | ✓ | ✓ | ✓ | | | ✓ | UMULL / UMULL2 | USHL | TBL | — | — | — | +| `olympus` | simd_neon +dotprod | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `oryon-1` | simd_neon +dotprod | ✓ | ✓ | ✓ | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `saphira` | simd_neon +dotprod | ✓ | ✓ | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `thunderx` | simd_neon | ✓ | | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `thunderx2t99` | simd_neon | ✓ | | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `thunderx3t110` | simd_neon | ✓ | | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `thunderxt81` | simd_neon | ✓ | | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `thunderxt83` | simd_neon | ✓ | | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `thunderxt88` | simd_neon | ✓ | | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | +| `tsv110` | simd_neon +dotprod | ✓ | ✓ | | ✓ | ✓ | | UMULL / UMULL2 | USHL | TBL | — | PMULL (64x64->128) | AESE + AESMC | diff --git a/tools/gen_llvm_inventory.py b/tools/gen_llvm_inventory.py new file mode 100644 index 00000000..92406c61 --- /dev/null +++ b/tools/gen_llvm_inventory.py @@ -0,0 +1,417 @@ +#!/usr/bin/env python3 +"""Generate the per-CPU SIMD feature inventory from LLVM's own TableGen source. + +WHY THIS EXISTS. ndarray dispatches at compile time on `cfg(target_feature)`. +The set of features a given `-C target-cpu=X` turns on is not ours to decide: +it is LLVM's processor table, compiled into rustc. That table is public source +in llvm-project (`X86.td`, `AArch64Processors.td`, `AArch64Features.td`), so +it can be READ instead of maintained by hand or re-derived by compiling probes. + +This script reads those `.td` files at the `llvmorg-*` tag that matches the +LLVM rustc itself embeds (from `rustc -vV`, so `rust-toolchain.toml` pins it), +resolves every processor's feature list (the `!listconcat` inheritance chains, +the `foreach P = [...]` alias blocks, `ProcessorAlias`, and each feature's +transitive implied features), and writes: + + tools/llvm-inventory/inventory.json full per-CPU feature sets + .claude/knowledge/llvm-cpu-inventory.md the table a human reads + +For each CPU it also records which ndarray backend the `simd.rs` cfg ladder +selects, and whether each SIMD primitive that the crypto references +(curve25519-dalek, poly1305, argon2) need has its instruction on that CPU. + +The primitive table below names, per primitive, the LLVM instruction def and +the LLVM predicate/feature that gates it. Those names are ASSERTED to exist in +the fetched `.td` files, so an LLVM rename fails this script loudly instead of +silently leaving a stale row. + +Like `gen_ternlog_bodies.py`, the output is committed and this script is its +provenance. + + python3 tools/gen_llvm_inventory.py --write regenerate the outputs + python3 tools/gen_llvm_inventory.py check they are current (exit 1 if stale) + python3 tools/gen_llvm_inventory.py --verify-rustc compare EVERY CPU against rustc's own + `--print cfg -C target-cpu=...` + +Sources are fetched from raw.githubusercontent.com into +`target/llvm-inventory//` (gitignored); `--llvm-src DIR` reads a local +llvm-project checkout instead. + +CAVEAT. rustc builds against rust-lang's LLVM fork, not the upstream tag. The +fork carries patches, so the upstream tag is an approximation of what rustc +embeds. `--verify-rustc` is the check that the approximation holds for the +features rustc exposes. +""" +import argparse +import json +import pathlib +import re +import subprocess +import sys +import urllib.request + +ROOT = pathlib.Path(__file__).resolve().parent.parent +OUT_JSON = ROOT / "tools" / "llvm-inventory" / "inventory.json" +OUT_MD = ROOT / ".claude" / "knowledge" / "llvm-cpu-inventory.md" +CACHE = ROOT / "target" / "llvm-inventory" + +TD = { + "x86": [ + "llvm/lib/Target/X86/X86.td", + "llvm/lib/Target/X86/X86InstrAVX512.td", + "llvm/lib/Target/X86/X86InstrSSE.td", + "llvm/lib/Target/X86/X86InstrPredicates.td", + ], + "aarch64": [ + "llvm/lib/Target/AArch64/AArch64Features.td", + "llvm/lib/Target/AArch64/AArch64Processors.td", + "llvm/lib/Target/AArch64/AArch64InstrInfo.td", + ], +} +RUST_TARGET = {"x86": "x86_64-unknown-linux-gnu", "aarch64": "aarch64-unknown-linux-gnu"} + +# Primitives the crypto references need, and what gates each one in LLVM. +# insn: (file basename, regex that must match the instruction's def) +# gate: (file basename, regex that must match the predicate/feature def) +# needs: LLVM feature names that must ALL be present on the CPU +# Several rows per primitive = alternative encodings; a CPU has the primitive +# if any row's `needs` is satisfied. +PRIMITIVES = [ + ("mul_lo32", "x86", "PMULUDQ (xmm, SSE2)", ("X86InstrSSE.td", r"defm PMULUDQ\b"), None, ["sse2"]), + ("mul_lo32", "x86", "VPMULUDQ (ymm, AVX2)", ("X86InstrSSE.td", r"defm PMULUDQ\b"), None, ["avx2"]), + ("mul_lo32", "x86", "VPMULUDQ (zmm, AVX-512F)", ("X86InstrAVX512.td", r"defm VPMULUDQ\b"), None, ["avx512f"]), + ("mul_lo32", "aarch64", "UMULL / UMULL2", ("AArch64InstrInfo.td", r"defm UMULL\s*:"), None, ["neon"]), + ("shift_var_u32", "x86", "VPSLLVD / VPSRLVD", ("X86InstrSSE.td", r"defm VPSLLVD\b"), None, ["avx2"]), + ("shift_var_u32", "aarch64", "USHL", ("AArch64InstrInfo.td", r"defm USHL\s*:"), None, ["neon"]), + ("permute_var_u32", "x86", "VPERMD", ("X86InstrSSE.td", r"defm VPERMD\b"), None, ["avx2"]), + ("permute_var_u32", "aarch64", "TBL", ("AArch64InstrInfo.td", r"defm TBL\s*:"), None, ["neon"]), + ("ifma52", "x86", "VPMADD52LUQ/HUQ (EVEX)", ("X86InstrAVX512.td", r"defm VPMADD52LUQ\b"), + ("X86InstrPredicates.td", r"def HasIFMA\b"), ["avx512ifma"]), + ("ifma52", "x86", "VPMADD52LUQ/HUQ (VEX)", ("X86InstrSSE.td", r"defm VPMADD52LUQ\b"), + ("X86InstrPredicates.td", r"def HasAVXIFMA\b"), ["avxifma"]), + ("clmul", "x86", "PCLMULQDQ", ("X86InstrSSE.td", r"PCLMULQDQ"), + ("X86InstrPredicates.td", r"def HasPCLMUL\b"), ["pclmul"]), + ("clmul", "x86", "VPCLMULQDQ (zmm)", ("X86InstrAVX512.td", r"defm VPCLMULQDQZ\b"), + ("X86InstrPredicates.td", r"def HasVPCLMULQDQ\b"), ["vpclmulqdq", "avx512f"]), + ("clmul", "aarch64", "PMULL (64x64->128)", ("AArch64InstrInfo.td", r"defm PMULL\s*:"), + ("AArch64Features.td", r'def FeatureAES\b[^;]*FEAT_PMULL'), ["aes"]), + ("aes_round", "x86", "AESENC", ("X86InstrSSE.td", r"defm VAESENC\b"), + ("X86InstrPredicates.td", r"def HasAES\b"), ["aes"]), + ("aes_round", "x86", "VAESENC (zmm)", ("X86InstrAVX512.td", r"defm VAESENC\b"), + ("X86InstrPredicates.td", r"def HasVAES\b"), ["vaes", "avx512f"]), + ("aes_round", "aarch64", "AESE + AESMC", ("AArch64InstrInfo.td", r"def AESErr\b"), + ("AArch64Features.td", r"def FeatureAES\b"), ["aes"]), +] +PRIM_ORDER = ["mul_lo32", "shift_var_u32", "permute_var_u32", "ifma52", "clmul", "aes_round"] + +# Features reported in the summary columns. +SHOWN = {"x86": ["avx2", "avx512f", "avx512vl", "avx512ifma", "avxifma", "pclmul", + "vpclmulqdq", "aes", "vaes", "gfni"], + "aarch64": ["neon", "dotprod", "i8mm", "aes", "sha2", "sve2"]} + + +def rustc(*args): + return subprocess.run(["rustc", *args], cwd=ROOT, capture_output=True, text=True, check=True).stdout + + +def llvm_tag(): + m = re.search(r"LLVM version: (\d+\.\d+\.\d+)", rustc("-vV")) + if not m: + sys.exit("cannot read the LLVM version from `rustc -vV`") + return "llvmorg-" + m.group(1) + + +def load(tag, src_dir): + out = {} + for arch, files in TD.items(): + for rel in files: + name = pathlib.PurePosixPath(rel).name + if src_dir: + text = (pathlib.Path(src_dir) / rel).read_text() + else: + cached = CACHE / tag / name + if not cached.exists(): + cached.parent.mkdir(parents=True, exist_ok=True) + url = f"https://raw.githubusercontent.com/llvm/llvm-project/{tag}/{rel}" + with urllib.request.urlopen(url, timeout=60) as r: + cached.write_bytes(r.read()) + text = cached.read_text() + out[name] = text + return out + + +def strip_comments(t): + return re.sub(r"//[^\n]*", "", t) + + +def expand_foreach(t): + """`foreach P = ["a", "b"] in { def : ProcModel; }` -> one def per name.""" + extra = [] + for m in re.finditer(r"foreach\s+(\w+)\s*=\s*\[([^\]]*)\]\s*in\s*\{(.*?)\n\}", t, re.S): + var, body = m.group(1), m.group(3) + for name in re.findall(r'"([^"]+)"', m.group(2)): + extra.append(re.sub(r"<\s*" + var + r"\s*,", f'<"{name}",', body)) + return t + "\n" + "\n".join(extra) + + +def split_top(s): + parts, depth, cur = [], 0, "" + for ch in s: + if ch in "([<": + depth += 1 + elif ch in ")]>": + depth -= 1 + if ch == "," and depth == 0: + parts.append(cur) + cur = "" + else: + cur += ch + parts.append(cur) + return parts + + +def resolve(text): + """Every processor -> set of LLVM feature names (implied features included).""" + t = expand_foreach(strip_comments(text)) + features = {} + # Every feature-like def: the NAME is its first string argument, and the + # IMPLIED features are its first plain list argument. That holds for + # SubtargetFeature, Extension* and Architecture64. Taking the LAST list + # instead reads Architecture64's -march defaults as implied features. + for m in re.finditer(r"def\s+(\w+)\s*:\s*(\w+)<(.*?)>\s*;", t, re.S): + rec, args = m.group(1), split_top(m.group(3)) + name = next((a.strip()[1:-1] for a in args if re.fullmatch(r'\s*"[^"]*"\s*', a)), None) + if name is None: + continue + lst = next((a for a in args if a.strip().startswith("[")), "") + features.setdefault(rec, (name, re.findall(r"\w+", lst))) + # AArch64 architecture levels also carry DEFAULT EXTENSIONS (their last + # argument). They are not implied features, but rustc's cfg for + # `-C target-cpu` includes them: without them apple-m4 misses `ssbs` + # (a v8.5 default) and oryon-1 misses `fp16`/`fhm`, and --verify-rustc + # reports exactly those rows. + arch_defaults = {m.group(1): split_top(m.group(2))[-1] for m in + re.finditer(r"def\s+(\w+)\s*:\s*Architecture64<(.*?)>\s*;", t, re.S)} + + def defaults(expr): + expr = expr.strip() + if expr.startswith("!listconcat("): + return [r for p in split_top(expr[len("!listconcat("):-1]) for r in defaults(p)] + if expr.startswith("!listremove("): + base, drop = split_top(expr[len("!listremove("):-1]) + gone = set(defaults(drop)) + return [r for r in defaults(base) if r not in gone] + if expr.endswith(".DefaultExts"): + return defaults(arch_defaults[expr[:-len(".DefaultExts")]]) + if expr.startswith("["): + return re.findall(r"\w+", expr) + # Scraping words out of an unknown expression is how `!listremove` + # once leaked the architecture def's own name (and its whole implied + # chain) into cortex-r82. Refuse instead. + sys.exit(f"unsupported TableGen expression in DefaultExts: {expr[:60]}") + + body = re.search(r"def\s+ProcessorFeatures\s*\{(.*?)\n\}", t, re.S).group(1) + lists = {m.group(1): m.group(2) for m in + re.finditer(r"list\s+(\w+)\s*=\s*(.*?);", body, re.S)} + + def ev(expr): + expr = expr.strip() + if expr.startswith("!listconcat("): + return [r for p in split_top(expr[len("!listconcat("):-1]) for r in ev(p)] + if expr.startswith("!listremove("): + base, drop = split_top(expr[len("!listremove("):-1]) + gone = set(ev(drop)) + return [r for r in ev(base) if r not in gone] + if expr.startswith("!"): + sys.exit(f"unsupported TableGen operator in a processor list: {expr[:60]}") + if expr.startswith("["): + return re.findall(r"\w+", expr) + return ev(lists[expr.replace("ProcessorFeatures.", "")]) + + def closure(recs): + """Transitive implied features. Tune records (`Tune*`, `Tuning*`) are + followed but not reported: they are scheduling knobs, yet some imply + real ISA features (TuneOryon implies FeatureFullFP16/FP16FML/SPE).""" + seen, stack = set(), list(recs) + while stack: + r = stack.pop() + if r in seen or r not in features: + continue + seen.add(r) + stack += features[r][1] + return {features[r][0] for r in seen if not r.startswith("Tun")} + + cpus = {} + for m in re.finditer(r"def\s*:\s*Proc(?:essor)?Model<\s*\"([^\"]+)\"\s*,\s*\w+\s*,(.*?)>\s*;", t, re.S): + args = split_top(m.group(2)) + recs = ev(args[0]) + recs += [d for r in recs if r in arch_defaults for d in defaults(arch_defaults[r])] + # The tune list (next argument) is applied too, and its records' + # implied ISA features are enabled; see closure(). + if len(args) > 1 and args[1].strip().startswith(("[", "!", "ProcessorFeatures.")): + recs += ev(args[1]) + cpus[m.group(1)] = closure(recs) + for m in re.finditer(r'ProcessorAlias<\s*"([^"]+)"\s*,\s*"([^"]+)"', t): + if m.group(2) in cpus: + cpus[m.group(1)] = cpus[m.group(2)] + return cpus + + +def backend(arch, feats): + """Mirror of the `simd.rs` cfg ladder (read by hand, not parsed).""" + if arch == "x86": + if "avx512f" in feats: + return "simd_avx512" + return "simd_avx2" if "avx2" in feats else "simd_avx2 (no avx2: array polyfill)" + return "simd_neon" + (" +dotprod" if "dotprod" in feats else "") + + +def check_primitive_sources(src): + for prim, arch, label, insn, gate, _ in PRIMITIVES: + for where in (insn, gate): + if where and not re.search(where[1], strip_comments(src[where[0]]), re.S): + sys.exit(f"LLVM source no longer matches {prim}/{label}: /{where[1]}/ not in {where[0]}") + + +def primitives_for(arch, feats): + out = {} + for prim in PRIM_ORDER: + rows = [r for r in PRIMITIVES if r[0] == prim and r[1] == arch] + hit = [r[2] for r in rows if all(n in feats for n in r[5])] + out[prim] = hit + return out + + +def build(tag, src): + check_primitive_sources(src) + inv = {"llvm_tag": tag, "arch": {}} + for arch in TD: + text = "\n".join(src[pathlib.PurePosixPath(f).name] for f in TD[arch] + if "Processors" in f or f.endswith("X86.td") or "Features" in f) + cpus = resolve(text) + inv["arch"][arch] = { + cpu: {"features": sorted(f), "backend": backend(arch, f), + "primitives": primitives_for(arch, f)} + for cpu, f in sorted(cpus.items()) + } + return inv + + +def render_md(inv): + tag = inv["llvm_tag"] + lines = [ + "# Per-CPU SIMD inventory — generated from LLVM's TableGen source", + "", + f"> **GENERATED** by `tools/gen_llvm_inventory.py` from llvm-project `{tag}`", + "> (the tag matching `rustc -vV` under this repo's pinned toolchain). Do not edit by hand:", + "> run `python3 tools/gen_llvm_inventory.py --write`. `--verify-rustc` checks every row", + "> against rustc's own `--print cfg -C target-cpu=...`.", + "", + "`backend` mirrors the `simd.rs` cfg ladder. Primitive columns list the instruction(s)", + "that implement the primitive on that CPU; `—` means the CPU has none and a portable", + "fallback is required.", + "", + ] + for arch, cpus in inv["arch"].items(): + shown = SHOWN[arch] + lines += [f"## {arch} ({len(cpus)} CPUs)", ""] + head = ["cpu", "backend"] + shown + PRIM_ORDER + lines.append("| " + " | ".join(head) + " |") + lines.append("|" + "---|" * len(head)) + for cpu, row in cpus.items(): + feats = set(row["features"]) + cells = [f"`{cpu}`", row["backend"]] + ["✓" if f in feats else "" for f in shown] + cells += ["
".join(row["primitives"][p]) or "—" for p in PRIM_ORDER] + lines.append("| " + " | ".join(cells) + " |") + lines.append("") + return "\n".join(lines) + + +def rust_to_llvm_names(llvm_util_rs): + """rustc's own Rust-name -> LLVM-name table, parsed from `to_llvm_features`.""" + body = llvm_util_rs[llvm_util_rs.index("fn to_llvm_features"):] + table = {} + for arch, marker in (("aarch64", "Arch::AArch64"), ("x86", "Arch::X86")): + start = body.index(marker) + end = body.index("Arch::", start + len(marker) + 20) + section = body[start:end] + table[arch] = {r: l for r, l in re.findall( + r'"([^"]+)"\s*=>\s*Some\(LLVMFeature::(?:new|with_dependencies)\(\s*"([^"]+)"', section)} + return table + + +def verify_rustc(inv, names): + """Compare every CPU with rustc's `--print cfg`, over the features stable rustc prints.""" + bad = 0 + for arch, cpus in inv["arch"].items(): + to_rust = {} + for r, l in names[arch].items(): + to_rust.setdefault(l, set()).add(r) + cfg = {} + for cpu in cpus: + try: + out = rustc("--print", "cfg", "--target", RUST_TARGET[arch], "-C", f"target-cpu={cpu}") + except subprocess.CalledProcessError: + print(f" {arch}/{cpu}: rustc rejects this cpu name (skipped)") + continue + cfg[cpu] = set(re.findall(r'target_feature="([^"]+)"', out)) + exposed = set().union(*cfg.values()) # features stable rustc can print at all + # Features rustc prints for EVERY cpu are target-level, not per-cpu: + # the x86_64 ABI requires sse/sse2, so rustc reports them even for + # LLVM's featureless `generic`. They come from the target, not from + # any processor list, so they are added to both sides. + baseline = set.intersection(*cfg.values()) + for cpu, rust in cfg.items(): + mine = ({r for f in cpus[cpu]["features"] for r in to_rust.get(f, {f})} & exposed) | baseline + if mine != rust: + bad += 1 + print(f" MISMATCH {arch}/{cpu}: llvm-only={sorted(mine - rust)} rustc-only={sorted(rust - mine)}") + print(f"{arch}: {len(cfg)} CPUs compared against rustc over {len(exposed)} exposed features") + return bad + + +def main(): + ap = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) + ap.add_argument("--write", action="store_true", help="write the generated outputs") + ap.add_argument("--verify-rustc", action="store_true", help="compare every CPU with rustc's table") + ap.add_argument("--tag", help="llvm-project tag (default: from rustc -vV)") + ap.add_argument("--llvm-src", help="local llvm-project checkout instead of fetching") + a = ap.parse_args() + + tag = a.tag or llvm_tag() + inv = build(tag, load(tag, a.llvm_src)) + js = json.dumps(inv, indent=1, sort_keys=True) + "\n" + md = render_md(inv) + + if a.verify_rustc: + release = re.search(r"release: (\S+)", rustc("-vV")).group(1) + cached = CACHE / f"rust-{release}" / "llvm_util.rs" + if not cached.exists(): + cached.parent.mkdir(parents=True, exist_ok=True) + url = ("https://raw.githubusercontent.com/rust-lang/rust/" + f"{release}/compiler/rustc_codegen_llvm/src/llvm_util.rs") + with urllib.request.urlopen(url, timeout=60) as r: + cached.write_bytes(r.read()) + bad = verify_rustc(inv, rust_to_llvm_names(cached.read_text())) + print("rustc agrees on every compared CPU" if not bad else f"{bad} CPU(s) disagree") + if bad: + sys.exit(1) + if a.write: + OUT_JSON.parent.mkdir(parents=True, exist_ok=True) + OUT_JSON.write_text(js) + OUT_MD.write_text(md) + n = {k: len(v) for k, v in inv["arch"].items()} + print(f"wrote {OUT_JSON.relative_to(ROOT)} and {OUT_MD.relative_to(ROOT)} ({tag}, {n})") + elif not a.verify_rustc: + stale = [p for p, want in ((OUT_JSON, js), (OUT_MD, md)) + if not p.exists() or p.read_text() != want] + if stale: + sys.exit("stale: " + ", ".join(str(p.relative_to(ROOT)) for p in stale) + + " (run with --write)") + print(f"inventory is current ({tag})") + + +if __name__ == "__main__": + main() diff --git a/tools/llvm-inventory/inventory.json b/tools/llvm-inventory/inventory.json new file mode 100644 index 00000000..7c703690 --- /dev/null +++ b/tools/llvm-inventory/inventory.json @@ -0,0 +1,12484 @@ +{ + "arch": { + "aarch64": { + "a64fx": { + "backend": "simd_neon", + "features": [ + "CONTEXTIDREL2", + "a", + "aes", + "aggressive-fma", + "arith-bcc-fusion", + "ccpp", + "complxnum", + "crc", + "disable-unpredicated-ld-st-lower", + "el2vmsa", + "el3", + "fp-armv8", + "fullfp16", + "lor", + "lse", + "max-interleave-factor-4", + "neon", + "pan", + "pan-rwv", + "perfmon", + "predictable-select-expensive", + "ras", + "rdm", + "sha2", + "store-pair-suppress", + "sve", + "uaops", + "use-postra-scheduler", + "vh" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "ampere1": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "aes", + "aggressive-fma", + "altnzcv", + "alu-lsl-fast", + "am", + "amvs", + "arith-bcc-fusion", + "bf16", + "bti", + "ccdp", + "ccidx", + "ccpp", + "cmp-bcc-fusion", + "complxnum", + "crc", + "dit", + "dotprod", + "ecv", + "el2vmsa", + "el3", + "fgt", + "flagm", + "fp-armv8", + "fptoint", + "fullfp16", + "fuse-address", + "fuse-adrp-add", + "fuse-aes", + "fuse-literals", + "i8mm", + "jsconv", + "ldp-aligned-only", + "lor", + "lse", + "lse2", + "max-interleave-factor-4", + "mpam", + "neon", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predres", + "rand", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "sb", + "sel2", + "sha2", + "sha3", + "specrestrict", + "ssbs", + "store-pair-suppress", + "stp-aligned-only", + "tlb-rmi", + "tracev8.4", + "uaops", + "use-postra-scheduler", + "vh" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "ampere1a": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "aes", + "aggressive-fma", + "altnzcv", + "alu-lsl-fast", + "am", + "amvs", + "arith-bcc-fusion", + "bf16", + "bti", + "ccdp", + "ccidx", + "ccpp", + "cmp-bcc-fusion", + "complxnum", + "crc", + "dit", + "dotprod", + "ecv", + "el2vmsa", + "el3", + "fgt", + "flagm", + "fp-armv8", + "fptoint", + "fullfp16", + "fuse-address", + "fuse-addsub-2reg-const1", + "fuse-adrp-add", + "fuse-aes", + "fuse-literals", + "i8mm", + "jsconv", + "ldp-aligned-only", + "lor", + "lse", + "lse2", + "max-interleave-factor-4", + "mpam", + "mte", + "neon", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predres", + "rand", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "sb", + "sel2", + "sha2", + "sha3", + "sm4", + "specrestrict", + "ssbs", + "store-pair-suppress", + "stp-aligned-only", + "tlb-rmi", + "tracev8.4", + "uaops", + "use-postra-scheduler", + "vh" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "ampere1b": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "aes", + "aggressive-fma", + "altnzcv", + "alu-lsl-fast", + "am", + "amvs", + "arith-bcc-fusion", + "bf16", + "bti", + "ccdp", + "ccidx", + "ccpp", + "cmp-bcc-fusion", + "complxnum", + "crc", + "cssc", + "dit", + "dotprod", + "ecv", + "el2vmsa", + "el3", + "enable-select-opt", + "fgt", + "flagm", + "fp-armv8", + "fptoint", + "fullfp16", + "fuse-address", + "fuse-adrp-add", + "fuse-aes", + "fuse-literals", + "hcx", + "i8mm", + "jsconv", + "ldp-aligned-only", + "lor", + "lse", + "lse2", + "max-interleave-factor-4", + "mpam", + "mte", + "neon", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predictable-select-expensive", + "predres", + "rand", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "sb", + "sel2", + "sha2", + "sha3", + "sm4", + "spe-eef", + "specrestrict", + "ssbs", + "store-pair-suppress", + "stp-aligned-only", + "tlb-rmi", + "tracev8.4", + "uaops", + "use-postra-scheduler", + "vh", + "wfxt", + "xs" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "ampere1c": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "aes", + "aggressive-fma", + "altnzcv", + "alu-lsl-fast", + "am", + "amvs", + "arith-bcc-fusion", + "bf16", + "bti", + "ccdp", + "ccidx", + "ccpp", + "cmp-bcc-fusion", + "complxnum", + "crc", + "cssc", + "dit", + "dotprod", + "ecv", + "el2vmsa", + "el3", + "enable-select-opt", + "faminmax", + "fgt", + "flagm", + "fp-armv8", + "fp16fml", + "fp8", + "fp8fma", + "fptoint", + "fullfp16", + "fuse-address", + "fuse-adrp-add", + "fuse-aes", + "fuse-literals", + "hcx", + "i8mm", + "jsconv", + "lor", + "lse", + "lse2", + "lut", + "max-interleave-factor-4", + "mec", + "mpam", + "mte", + "neon", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predictable-select-expensive", + "predres", + "rand", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "rme", + "sb", + "sel2", + "sha2", + "sha3", + "sm4", + "spe-eef", + "specrestrict", + "ssbs", + "store-pair-suppress", + "sve", + "sve-aes", + "sve-b16b16", + "sve-sha3", + "sve-sm4", + "sve2", + "tlb-rmi", + "tracev8.4", + "uaops", + "use-postra-scheduler", + "vh", + "wfxt", + "xs" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "apple-a10": { + "backend": "simd_neon", + "features": [ + "CONTEXTIDREL2", + "a", + "aes", + "alternate-sextload-cvt-f32-pattern", + "arith-bcc-fusion", + "arith-cbz-fusion", + "crc", + "disable-latency-sched-heuristic", + "el2vmsa", + "el3", + "fp-armv8", + "fuse-aes", + "fuse-crypto-eor", + "lor", + "neon", + "no-zcz-fpr64", + "pan", + "perfmon", + "rdm", + "sha2", + "store-pair-suppress", + "vh", + "zcm-fpr128", + "zcm-gpr64", + "zcz-fpr128", + "zcz-gpr32", + "zcz-gpr64" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "apple-a11": { + "backend": "simd_neon", + "features": [ + "CONTEXTIDREL2", + "a", + "aes", + "alternate-sextload-cvt-f32-pattern", + "arith-bcc-fusion", + "arith-cbz-fusion", + "ccpp", + "crc", + "disable-latency-sched-heuristic", + "el2vmsa", + "el3", + "fp-armv8", + "fullfp16", + "fuse-aes", + "fuse-crypto-eor", + "lor", + "lse", + "neon", + "no-zcz-fpr64", + "pan", + "pan-rwv", + "perfmon", + "ras", + "rdm", + "sha2", + "store-pair-suppress", + "uaops", + "vh", + "zcm-fpr128", + "zcm-gpr64", + "zcz-fpr128", + "zcz-gpr32", + "zcz-gpr64" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "apple-a12": { + "backend": "simd_neon", + "features": [ + "CONTEXTIDREL2", + "a", + "aes", + "alternate-sextload-cvt-f32-pattern", + "arith-bcc-fusion", + "arith-cbz-fusion", + "ccidx", + "ccpp", + "complxnum", + "crc", + "disable-latency-sched-heuristic", + "el2vmsa", + "el3", + "fp-armv8", + "fullfp16", + "fuse-aes", + "fuse-crypto-eor", + "jsconv", + "lor", + "lse", + "neon", + "no-zcz-fpr64", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "ras", + "rcpc", + "rdm", + "sha2", + "store-pair-suppress", + "uaops", + "vh", + "zcm-fpr128", + "zcm-gpr64", + "zcz-fpr128", + "zcz-gpr32", + "zcz-gpr64" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "apple-a13": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "aes", + "alternate-sextload-cvt-f32-pattern", + "am", + "arith-bcc-fusion", + "arith-cbz-fusion", + "ccidx", + "ccpp", + "complxnum", + "crc", + "disable-latency-sched-heuristic", + "dit", + "dotprod", + "el2vmsa", + "el3", + "flagm", + "fp-armv8", + "fp16fml", + "fullfp16", + "fuse-aes", + "fuse-crypto-eor", + "jsconv", + "lor", + "lse", + "lse2", + "mpam", + "neon", + "no-zcz-fpr64", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "sel2", + "sha2", + "sha3", + "store-pair-suppress", + "tlb-rmi", + "tracev8.4", + "uaops", + "vh", + "zcm-fpr128", + "zcm-gpr64", + "zcz-fpr128", + "zcz-gpr32", + "zcz-gpr64" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "apple-a14": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "aes", + "aggressive-fma", + "alternate-sextload-cvt-f32-pattern", + "altnzcv", + "am", + "arith-bcc-fusion", + "arith-cbz-fusion", + "ccdp", + "ccidx", + "ccpp", + "complxnum", + "crc", + "disable-latency-sched-heuristic", + "dit", + "dotprod", + "el2vmsa", + "el3", + "flagm", + "fp-armv8", + "fp16fml", + "fptoint", + "fullfp16", + "fuse-address", + "fuse-aes", + "fuse-arith-logic", + "fuse-crypto-eor", + "fuse-csel", + "fuse-literals", + "jsconv", + "lor", + "lse", + "lse2", + "max-interleave-factor-4", + "mpam", + "neon", + "no-zcz-fpr64", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predres", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "sb", + "sel2", + "sha2", + "sha3", + "specrestrict", + "ssbs", + "store-pair-suppress", + "tlb-rmi", + "tracev8.4", + "uaops", + "vh", + "zcm-fpr128", + "zcm-gpr64", + "zcz-fpr128", + "zcz-gpr32", + "zcz-gpr64" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "apple-a15": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "aes", + "alternate-sextload-cvt-f32-pattern", + "altnzcv", + "am", + "amvs", + "arith-bcc-fusion", + "arith-cbz-fusion", + "bf16", + "bti", + "ccdp", + "ccidx", + "ccpp", + "complxnum", + "crc", + "disable-latency-sched-heuristic", + "dit", + "dotprod", + "ecv", + "el2vmsa", + "el3", + "fgt", + "flagm", + "fp-armv8", + "fp16fml", + "fpac", + "fptoint", + "fullfp16", + "fuse-address", + "fuse-adrp-add", + "fuse-aes", + "fuse-arith-logic", + "fuse-crypto-eor", + "fuse-csel", + "fuse-literals", + "i8mm", + "jsconv", + "lor", + "lse", + "lse2", + "max-interleave-factor-4", + "mpam", + "neon", + "no-zcz-fpr64", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predres", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "sb", + "sel2", + "sha2", + "sha3", + "specrestrict", + "ssbs", + "store-pair-suppress", + "tlb-rmi", + "tracev8.4", + "uaops", + "vh", + "zcm-fpr128", + "zcm-gpr64", + "zcz-fpr128", + "zcz-gpr32", + "zcz-gpr64" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "apple-a16": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "aes", + "alternate-sextload-cvt-f32-pattern", + "altnzcv", + "am", + "amvs", + "arith-bcc-fusion", + "arith-cbz-fusion", + "bf16", + "bti", + "ccdp", + "ccidx", + "ccpp", + "complxnum", + "crc", + "disable-latency-sched-heuristic", + "dit", + "dotprod", + "ecv", + "el2vmsa", + "el3", + "fgt", + "flagm", + "fp-armv8", + "fp16fml", + "fpac", + "fptoint", + "fullfp16", + "fuse-address", + "fuse-adrp-add", + "fuse-aes", + "fuse-arith-logic", + "fuse-crypto-eor", + "fuse-csel", + "fuse-literals", + "hcx", + "i8mm", + "jsconv", + "lor", + "lse", + "lse2", + "max-interleave-factor-4", + "mpam", + "neon", + "no-zcz-fpr64", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predres", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "sb", + "sel2", + "sha2", + "sha3", + "specrestrict", + "ssbs", + "store-pair-suppress", + "tlb-rmi", + "tracev8.4", + "uaops", + "vh", + "zcm-fpr128", + "zcm-gpr64", + "zcz-fpr128", + "zcz-gpr32", + "zcz-gpr64" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "apple-a17": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "aes", + "alternate-sextload-cvt-f32-pattern", + "altnzcv", + "am", + "amvs", + "arith-bcc-fusion", + "arith-cbz-fusion", + "bf16", + "bti", + "ccdp", + "ccidx", + "ccpp", + "complxnum", + "crc", + "disable-latency-sched-heuristic", + "dit", + "dotprod", + "ecv", + "el2vmsa", + "el3", + "fgt", + "flagm", + "fp-armv8", + "fp16fml", + "fpac", + "fptoint", + "fullfp16", + "fuse-address", + "fuse-adrp-add", + "fuse-aes", + "fuse-arith-logic", + "fuse-crypto-eor", + "fuse-csel", + "fuse-literals", + "hcx", + "i8mm", + "jsconv", + "lor", + "lse", + "lse2", + "max-interleave-factor-4", + "mpam", + "neon", + "no-zcz-fpr64", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predres", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "sb", + "sel2", + "sha2", + "sha3", + "specrestrict", + "ssbs", + "store-pair-suppress", + "tlb-rmi", + "tracev8.4", + "uaops", + "vh", + "zcm-fpr128", + "zcm-gpr64", + "zcz-fpr128", + "zcz-gpr32", + "zcz-gpr64" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "apple-a18": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "aes", + "alternate-sextload-cvt-f32-pattern", + "altnzcv", + "am", + "amvs", + "arith-bcc-fusion", + "arith-cbz-fusion", + "bf16", + "bti", + "ccdp", + "ccidx", + "ccpp", + "complxnum", + "crc", + "disable-latency-sched-heuristic", + "dit", + "dotprod", + "ecv", + "el2vmsa", + "el3", + "fgt", + "flagm", + "fp-armv8", + "fp16fml", + "fpac", + "fptoint", + "fullfp16", + "fuse-address", + "fuse-adrp-add", + "fuse-aes", + "fuse-arith-logic", + "fuse-crypto-eor", + "fuse-csel", + "fuse-literals", + "hcx", + "i8mm", + "jsconv", + "lor", + "lse", + "lse2", + "max-interleave-factor-4", + "mpam", + "neon", + "no-zcz-fpr64", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predres", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "sb", + "sel2", + "sha2", + "sha3", + "sme", + "sme-f64f64", + "sme-i16i64", + "sme2", + "spe-eef", + "specrestrict", + "ssbs", + "tlb-rmi", + "tracev8.4", + "uaops", + "vh", + "wfxt", + "xs", + "zcm-fpr128", + "zcm-gpr64", + "zcz-fpr128", + "zcz-gpr32", + "zcz-gpr64" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "apple-a19": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "aes", + "alternate-sextload-cvt-f32-pattern", + "altnzcv", + "am", + "amvs", + "arith-bcc-fusion", + "arith-cbz-fusion", + "bf16", + "bti", + "ccdp", + "ccidx", + "ccpp", + "complxnum", + "crc", + "cssc", + "disable-latency-sched-heuristic", + "dit", + "dotprod", + "ecv", + "el2vmsa", + "el3", + "fgt", + "flagm", + "fp-armv8", + "fp16fml", + "fpac", + "fptoint", + "fullfp16", + "fuse-address", + "fuse-adrp-add", + "fuse-aes", + "fuse-arith-logic", + "fuse-crypto-eor", + "fuse-csel", + "fuse-literals", + "hbc", + "hcx", + "i8mm", + "jsconv", + "lor", + "lse", + "lse2", + "max-interleave-factor-4", + "mpam", + "mte", + "neon", + "no-zcz-fpr64", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predres", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "sb", + "sel2", + "sha2", + "sha3", + "sme", + "sme-b16b16", + "sme-f16f16", + "sme-f64f64", + "sme-i16i64", + "sme2", + "sme2p1", + "spe-eef", + "specres2", + "specrestrict", + "ssbs", + "sve-b16b16", + "tlb-rmi", + "tracev8.4", + "uaops", + "vh", + "wfxt", + "xs", + "zcm-fpr128", + "zcm-gpr64", + "zcz-fpr128", + "zcz-gpr32", + "zcz-gpr64" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "apple-a7": { + "backend": "simd_neon", + "features": [ + "a", + "aes", + "alternate-sextload-cvt-f32-pattern", + "arith-bcc-fusion", + "arith-cbz-fusion", + "disable-latency-sched-heuristic", + "el2vmsa", + "el3", + "fp-armv8", + "fuse-aes", + "fuse-crypto-eor", + "neon", + "no-zcz-fpr64", + "perfmon", + "sha2", + "store-pair-suppress", + "zcm-fpr128", + "zcm-gpr64", + "zcz-fp-workaround", + "zcz-fpr128", + "zcz-gpr32", + "zcz-gpr64" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "apple-a8": { + "backend": "simd_neon", + "features": [ + "a", + "aes", + "alternate-sextload-cvt-f32-pattern", + "arith-bcc-fusion", + "arith-cbz-fusion", + "disable-latency-sched-heuristic", + "el2vmsa", + "el3", + "fp-armv8", + "fuse-aes", + "fuse-crypto-eor", + "neon", + "no-zcz-fpr64", + "perfmon", + "sha2", + "store-pair-suppress", + "zcm-fpr128", + "zcm-gpr64", + "zcz-fp-workaround", + "zcz-fpr128", + "zcz-gpr32", + "zcz-gpr64" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "apple-a9": { + "backend": "simd_neon", + "features": [ + "a", + "aes", + "alternate-sextload-cvt-f32-pattern", + "arith-bcc-fusion", + "arith-cbz-fusion", + "disable-latency-sched-heuristic", + "el2vmsa", + "el3", + "fp-armv8", + "fuse-aes", + "fuse-crypto-eor", + "neon", + "no-zcz-fpr64", + "perfmon", + "sha2", + "store-pair-suppress", + "zcm-fpr128", + "zcm-gpr64", + "zcz-fp-workaround", + "zcz-fpr128", + "zcz-gpr32", + "zcz-gpr64" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "apple-latest": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "aes", + "alternate-sextload-cvt-f32-pattern", + "altnzcv", + "am", + "amvs", + "arith-bcc-fusion", + "arith-cbz-fusion", + "bf16", + "bti", + "ccdp", + "ccidx", + "ccpp", + "complxnum", + "crc", + "cssc", + "disable-latency-sched-heuristic", + "dit", + "dotprod", + "ecv", + "el2vmsa", + "el3", + "fgt", + "flagm", + "fp-armv8", + "fp16fml", + "fpac", + "fptoint", + "fullfp16", + "fuse-address", + "fuse-adrp-add", + "fuse-aes", + "fuse-arith-logic", + "fuse-crypto-eor", + "fuse-csel", + "fuse-literals", + "hbc", + "hcx", + "i8mm", + "jsconv", + "lor", + "lse", + "lse2", + "max-interleave-factor-4", + "mpam", + "mte", + "neon", + "no-zcz-fpr64", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predres", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "sb", + "sel2", + "sha2", + "sha3", + "sme", + "sme-b16b16", + "sme-f16f16", + "sme-f64f64", + "sme-i16i64", + "sme2", + "sme2p1", + "spe-eef", + "specres2", + "specrestrict", + "ssbs", + "sve-b16b16", + "tlb-rmi", + "tracev8.4", + "uaops", + "vh", + "wfxt", + "xs", + "zcm-fpr128", + "zcm-gpr64", + "zcz-fpr128", + "zcz-gpr32", + "zcz-gpr64" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "apple-m1": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "aes", + "aggressive-fma", + "alternate-sextload-cvt-f32-pattern", + "altnzcv", + "am", + "arith-bcc-fusion", + "arith-cbz-fusion", + "ccdp", + "ccidx", + "ccpp", + "complxnum", + "crc", + "disable-latency-sched-heuristic", + "dit", + "dotprod", + "el2vmsa", + "el3", + "flagm", + "fp-armv8", + "fp16fml", + "fptoint", + "fullfp16", + "fuse-address", + "fuse-aes", + "fuse-arith-logic", + "fuse-crypto-eor", + "fuse-csel", + "fuse-literals", + "jsconv", + "lor", + "lse", + "lse2", + "max-interleave-factor-4", + "mpam", + "neon", + "no-zcz-fpr64", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predres", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "sb", + "sel2", + "sha2", + "sha3", + "specrestrict", + "ssbs", + "store-pair-suppress", + "tlb-rmi", + "tracev8.4", + "uaops", + "vh", + "zcm-fpr128", + "zcm-gpr64", + "zcz-fpr128", + "zcz-gpr32", + "zcz-gpr64" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "apple-m2": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "aes", + "alternate-sextload-cvt-f32-pattern", + "altnzcv", + "am", + "amvs", + "arith-bcc-fusion", + "arith-cbz-fusion", + "bf16", + "bti", + "ccdp", + "ccidx", + "ccpp", + "complxnum", + "crc", + "disable-latency-sched-heuristic", + "dit", + "dotprod", + "ecv", + "el2vmsa", + "el3", + "fgt", + "flagm", + "fp-armv8", + "fp16fml", + "fpac", + "fptoint", + "fullfp16", + "fuse-address", + "fuse-adrp-add", + "fuse-aes", + "fuse-arith-logic", + "fuse-crypto-eor", + "fuse-csel", + "fuse-literals", + "i8mm", + "jsconv", + "lor", + "lse", + "lse2", + "max-interleave-factor-4", + "mpam", + "neon", + "no-zcz-fpr64", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predres", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "sb", + "sel2", + "sha2", + "sha3", + "specrestrict", + "ssbs", + "store-pair-suppress", + "tlb-rmi", + "tracev8.4", + "uaops", + "vh", + "zcm-fpr128", + "zcm-gpr64", + "zcz-fpr128", + "zcz-gpr32", + "zcz-gpr64" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "apple-m3": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "aes", + "alternate-sextload-cvt-f32-pattern", + "altnzcv", + "am", + "amvs", + "arith-bcc-fusion", + "arith-cbz-fusion", + "bf16", + "bti", + "ccdp", + "ccidx", + "ccpp", + "complxnum", + "crc", + "disable-latency-sched-heuristic", + "dit", + "dotprod", + "ecv", + "el2vmsa", + "el3", + "fgt", + "flagm", + "fp-armv8", + "fp16fml", + "fpac", + "fptoint", + "fullfp16", + "fuse-address", + "fuse-adrp-add", + "fuse-aes", + "fuse-arith-logic", + "fuse-crypto-eor", + "fuse-csel", + "fuse-literals", + "hcx", + "i8mm", + "jsconv", + "lor", + "lse", + "lse2", + "max-interleave-factor-4", + "mpam", + "neon", + "no-zcz-fpr64", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predres", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "sb", + "sel2", + "sha2", + "sha3", + "specrestrict", + "ssbs", + "store-pair-suppress", + "tlb-rmi", + "tracev8.4", + "uaops", + "vh", + "zcm-fpr128", + "zcm-gpr64", + "zcz-fpr128", + "zcz-gpr32", + "zcz-gpr64" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "apple-m4": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "aes", + "alternate-sextload-cvt-f32-pattern", + "altnzcv", + "am", + "amvs", + "arith-bcc-fusion", + "arith-cbz-fusion", + "bf16", + "bti", + "ccdp", + "ccidx", + "ccpp", + "complxnum", + "crc", + "disable-latency-sched-heuristic", + "dit", + "dotprod", + "ecv", + "el2vmsa", + "el3", + "fgt", + "flagm", + "fp-armv8", + "fp16fml", + "fpac", + "fptoint", + "fullfp16", + "fuse-address", + "fuse-adrp-add", + "fuse-aes", + "fuse-arith-logic", + "fuse-crypto-eor", + "fuse-csel", + "fuse-literals", + "hcx", + "i8mm", + "jsconv", + "lor", + "lse", + "lse2", + "max-interleave-factor-4", + "mpam", + "neon", + "no-zcz-fpr64", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predres", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "sb", + "sel2", + "sha2", + "sha3", + "sme", + "sme-f64f64", + "sme-i16i64", + "sme2", + "spe-eef", + "specrestrict", + "ssbs", + "tlb-rmi", + "tracev8.4", + "uaops", + "vh", + "wfxt", + "xs", + "zcm-fpr128", + "zcm-gpr64", + "zcz-fpr128", + "zcz-gpr32", + "zcz-gpr64" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "apple-m5": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "aes", + "alternate-sextload-cvt-f32-pattern", + "altnzcv", + "am", + "amvs", + "arith-bcc-fusion", + "arith-cbz-fusion", + "bf16", + "bti", + "ccdp", + "ccidx", + "ccpp", + "complxnum", + "crc", + "cssc", + "disable-latency-sched-heuristic", + "dit", + "dotprod", + "ecv", + "el2vmsa", + "el3", + "fgt", + "flagm", + "fp-armv8", + "fp16fml", + "fpac", + "fptoint", + "fullfp16", + "fuse-address", + "fuse-adrp-add", + "fuse-aes", + "fuse-arith-logic", + "fuse-crypto-eor", + "fuse-csel", + "fuse-literals", + "hbc", + "hcx", + "i8mm", + "jsconv", + "lor", + "lse", + "lse2", + "max-interleave-factor-4", + "mpam", + "mte", + "neon", + "no-zcz-fpr64", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predres", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "sb", + "sel2", + "sha2", + "sha3", + "sme", + "sme-b16b16", + "sme-f16f16", + "sme-f64f64", + "sme-i16i64", + "sme2", + "sme2p1", + "spe-eef", + "specres2", + "specrestrict", + "ssbs", + "sve-b16b16", + "tlb-rmi", + "tracev8.4", + "uaops", + "vh", + "wfxt", + "xs", + "zcm-fpr128", + "zcm-gpr64", + "zcz-fpr128", + "zcz-gpr32", + "zcz-gpr64" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "apple-s10": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "aes", + "alternate-sextload-cvt-f32-pattern", + "altnzcv", + "am", + "amvs", + "arith-bcc-fusion", + "arith-cbz-fusion", + "bf16", + "bti", + "ccdp", + "ccidx", + "ccpp", + "complxnum", + "crc", + "disable-latency-sched-heuristic", + "dit", + "dotprod", + "ecv", + "el2vmsa", + "el3", + "fgt", + "flagm", + "fp-armv8", + "fp16fml", + "fpac", + "fptoint", + "fullfp16", + "fuse-address", + "fuse-adrp-add", + "fuse-aes", + "fuse-arith-logic", + "fuse-crypto-eor", + "fuse-csel", + "fuse-literals", + "hcx", + "i8mm", + "jsconv", + "lor", + "lse", + "lse2", + "max-interleave-factor-4", + "mpam", + "neon", + "no-zcz-fpr64", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predres", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "sb", + "sel2", + "sha2", + "sha3", + "specrestrict", + "ssbs", + "store-pair-suppress", + "tlb-rmi", + "tracev8.4", + "uaops", + "vh", + "zcm-fpr128", + "zcm-gpr64", + "zcz-fpr128", + "zcz-gpr32", + "zcz-gpr64" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "apple-s4": { + "backend": "simd_neon", + "features": [ + "CONTEXTIDREL2", + "a", + "aes", + "alternate-sextload-cvt-f32-pattern", + "arith-bcc-fusion", + "arith-cbz-fusion", + "ccidx", + "ccpp", + "complxnum", + "crc", + "disable-latency-sched-heuristic", + "el2vmsa", + "el3", + "fp-armv8", + "fullfp16", + "fuse-aes", + "fuse-crypto-eor", + "jsconv", + "lor", + "lse", + "neon", + "no-zcz-fpr64", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "ras", + "rcpc", + "rdm", + "sha2", + "store-pair-suppress", + "uaops", + "vh", + "zcm-fpr128", + "zcm-gpr64", + "zcz-fpr128", + "zcz-gpr32", + "zcz-gpr64" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "apple-s5": { + "backend": "simd_neon", + "features": [ + "CONTEXTIDREL2", + "a", + "aes", + "alternate-sextload-cvt-f32-pattern", + "arith-bcc-fusion", + "arith-cbz-fusion", + "ccidx", + "ccpp", + "complxnum", + "crc", + "disable-latency-sched-heuristic", + "el2vmsa", + "el3", + "fp-armv8", + "fullfp16", + "fuse-aes", + "fuse-crypto-eor", + "jsconv", + "lor", + "lse", + "neon", + "no-zcz-fpr64", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "ras", + "rcpc", + "rdm", + "sha2", + "store-pair-suppress", + "uaops", + "vh", + "zcm-fpr128", + "zcm-gpr64", + "zcz-fpr128", + "zcz-gpr32", + "zcz-gpr64" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "apple-s6": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "aes", + "alternate-sextload-cvt-f32-pattern", + "am", + "arith-bcc-fusion", + "arith-cbz-fusion", + "ccidx", + "ccpp", + "complxnum", + "crc", + "disable-latency-sched-heuristic", + "dit", + "dotprod", + "el2vmsa", + "el3", + "flagm", + "fp-armv8", + "fp16fml", + "fullfp16", + "fuse-aes", + "fuse-crypto-eor", + "jsconv", + "lor", + "lse", + "lse2", + "mpam", + "neon", + "no-zcz-fpr64", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "sel2", + "sha2", + "sha3", + "store-pair-suppress", + "tlb-rmi", + "tracev8.4", + "uaops", + "vh", + "zcm-fpr128", + "zcm-gpr64", + "zcz-fpr128", + "zcz-gpr32", + "zcz-gpr64" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "apple-s7": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "aes", + "alternate-sextload-cvt-f32-pattern", + "am", + "arith-bcc-fusion", + "arith-cbz-fusion", + "ccidx", + "ccpp", + "complxnum", + "crc", + "disable-latency-sched-heuristic", + "dit", + "dotprod", + "el2vmsa", + "el3", + "flagm", + "fp-armv8", + "fp16fml", + "fullfp16", + "fuse-aes", + "fuse-crypto-eor", + "jsconv", + "lor", + "lse", + "lse2", + "mpam", + "neon", + "no-zcz-fpr64", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "sel2", + "sha2", + "sha3", + "store-pair-suppress", + "tlb-rmi", + "tracev8.4", + "uaops", + "vh", + "zcm-fpr128", + "zcm-gpr64", + "zcz-fpr128", + "zcz-gpr32", + "zcz-gpr64" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "apple-s8": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "aes", + "alternate-sextload-cvt-f32-pattern", + "am", + "arith-bcc-fusion", + "arith-cbz-fusion", + "ccidx", + "ccpp", + "complxnum", + "crc", + "disable-latency-sched-heuristic", + "dit", + "dotprod", + "el2vmsa", + "el3", + "flagm", + "fp-armv8", + "fp16fml", + "fullfp16", + "fuse-aes", + "fuse-crypto-eor", + "jsconv", + "lor", + "lse", + "lse2", + "mpam", + "neon", + "no-zcz-fpr64", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "sel2", + "sha2", + "sha3", + "store-pair-suppress", + "tlb-rmi", + "tracev8.4", + "uaops", + "vh", + "zcm-fpr128", + "zcm-gpr64", + "zcz-fpr128", + "zcz-gpr32", + "zcz-gpr64" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "apple-s9": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "aes", + "alternate-sextload-cvt-f32-pattern", + "altnzcv", + "am", + "amvs", + "arith-bcc-fusion", + "arith-cbz-fusion", + "bf16", + "bti", + "ccdp", + "ccidx", + "ccpp", + "complxnum", + "crc", + "disable-latency-sched-heuristic", + "dit", + "dotprod", + "ecv", + "el2vmsa", + "el3", + "fgt", + "flagm", + "fp-armv8", + "fp16fml", + "fpac", + "fptoint", + "fullfp16", + "fuse-address", + "fuse-adrp-add", + "fuse-aes", + "fuse-arith-logic", + "fuse-crypto-eor", + "fuse-csel", + "fuse-literals", + "hcx", + "i8mm", + "jsconv", + "lor", + "lse", + "lse2", + "max-interleave-factor-4", + "mpam", + "neon", + "no-zcz-fpr64", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predres", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "sb", + "sel2", + "sha2", + "sha3", + "specrestrict", + "ssbs", + "store-pair-suppress", + "tlb-rmi", + "tracev8.4", + "uaops", + "vh", + "zcm-fpr128", + "zcm-gpr64", + "zcz-fpr128", + "zcz-gpr32", + "zcz-gpr64" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "c1-nano": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "altnzcv", + "am", + "amvs", + "bf16", + "bti", + "ccdp", + "ccidx", + "ccpp", + "chk", + "clrbhb", + "complxnum", + "crc", + "dit", + "dotprod", + "ecv", + "el2vmsa", + "el3", + "ete", + "fgt", + "flagm", + "fp-armv8", + "fp16fml", + "fpac", + "fptoint", + "fullfp16", + "fuse-adrp-add", + "fuse-aes", + "hbc", + "hcx", + "i8mm", + "jsconv", + "lor", + "lse", + "lse2", + "mec", + "mops", + "mpam", + "mte", + "neon", + "nmi", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predres", + "ras", + "rcpc", + "rcpc-immo", + "rcpc3", + "rdm", + "rme", + "sb", + "sel2", + "sme", + "sme2", + "spe-eef", + "specres2", + "specrestrict", + "ssbs", + "sve", + "sve-bitperm", + "sve2", + "tlb-rmi", + "tracev8.4", + "trbe", + "uaops", + "use-fixed-over-scalable-if-equal-cost", + "use-postra-scheduler", + "use-wzr-to-vec-move", + "vh", + "wfxt", + "xs" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "c1-premium": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "altnzcv", + "alu-lsl-fast", + "am", + "amvs", + "avoid-ldapur", + "bf16", + "bti", + "ccdp", + "ccidx", + "ccpp", + "chk", + "clrbhb", + "complxnum", + "crc", + "dit", + "dotprod", + "ecv", + "el2vmsa", + "el3", + "enable-select-opt", + "ete", + "fgt", + "flagm", + "fp-armv8", + "fp16fml", + "fpac", + "fptoint", + "fullfp16", + "fuse-adrp-add", + "fuse-aes", + "fuse-csel", + "fuse-cset", + "hbc", + "hcx", + "i8mm", + "jsconv", + "lor", + "lse", + "lse2", + "mec", + "mops", + "mpam", + "mte", + "neon", + "nmi", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predictable-select-expensive", + "predres", + "ras", + "rcpc", + "rcpc-immo", + "rcpc3", + "rdm", + "rme", + "sb", + "sel2", + "sme", + "sme2", + "spe", + "spe-eef", + "specres2", + "specrestrict", + "ssbs", + "sve", + "sve-bitperm", + "sve2", + "tlb-rmi", + "tracev8.4", + "trbe", + "uaops", + "use-fixed-over-scalable-if-equal-cost", + "use-postra-scheduler", + "vh", + "wfxt", + "xs" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "c1-pro": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "altnzcv", + "alu-lsl-fast", + "am", + "amvs", + "bf16", + "bti", + "ccdp", + "ccidx", + "ccpp", + "chk", + "clrbhb", + "cmp-bcc-fusion", + "complxnum", + "crc", + "dit", + "dotprod", + "ecv", + "el2vmsa", + "el3", + "enable-select-opt", + "ete", + "fgt", + "flagm", + "fp-armv8", + "fp16fml", + "fpac", + "fptoint", + "fullfp16", + "fuse-adrp-add", + "fuse-aes", + "fuse-csel", + "fuse-cset", + "hbc", + "hcx", + "i8mm", + "jsconv", + "lor", + "lse", + "lse2", + "mec", + "mops", + "mpam", + "mte", + "neon", + "nmi", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predictable-select-expensive", + "predres", + "ras", + "rcpc", + "rcpc-immo", + "rcpc3", + "rdm", + "rme", + "sb", + "sel2", + "sme", + "sme2", + "spe", + "spe-eef", + "specres2", + "specrestrict", + "ssbs", + "sve", + "sve-bitperm", + "sve2", + "tlb-rmi", + "tracev8.4", + "trbe", + "uaops", + "use-postra-scheduler", + "vh", + "wfxt", + "xs" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "c1-ultra": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "altnzcv", + "alu-lsl-fast", + "am", + "amvs", + "avoid-ldapur", + "bf16", + "bti", + "ccdp", + "ccidx", + "ccpp", + "chk", + "clrbhb", + "complxnum", + "crc", + "dit", + "dotprod", + "ecv", + "el2vmsa", + "el3", + "enable-select-opt", + "ete", + "fgt", + "flagm", + "fp-armv8", + "fp16fml", + "fpac", + "fptoint", + "fullfp16", + "fuse-adrp-add", + "fuse-aes", + "fuse-csel", + "fuse-cset", + "hbc", + "hcx", + "i8mm", + "jsconv", + "lor", + "lse", + "lse2", + "mec", + "mops", + "mpam", + "mte", + "neon", + "nmi", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predictable-select-expensive", + "predres", + "ras", + "rcpc", + "rcpc-immo", + "rcpc3", + "rdm", + "rme", + "sb", + "sel2", + "sme", + "sme2", + "spe", + "spe-eef", + "specres2", + "specrestrict", + "ssbs", + "sve", + "sve-bitperm", + "sve2", + "tlb-rmi", + "tracev8.4", + "trbe", + "uaops", + "use-fixed-over-scalable-if-equal-cost", + "use-postra-scheduler", + "vh", + "wfxt", + "xs" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "carmel": { + "backend": "simd_neon", + "features": [ + "CONTEXTIDREL2", + "a", + "aes", + "ccpp", + "crc", + "el2vmsa", + "el3", + "fp-armv8", + "fullfp16", + "lor", + "lse", + "neon", + "pan", + "pan-rwv", + "ras", + "rdm", + "sha2", + "uaops", + "vh" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "cobalt-100": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "altnzcv", + "alu-lsl-fast", + "am", + "bf16", + "bti", + "ccdp", + "ccidx", + "ccpp", + "complxnum", + "crc", + "disable-maximize-scalable-bandwidth", + "dit", + "dotprod", + "el2vmsa", + "el3", + "enable-select-opt", + "ete", + "flagm", + "fp-armv8", + "fp16fml", + "fpac", + "fptoint", + "fullfp16", + "fuse-adrp-add", + "fuse-aes", + "fuse-csel", + "fuse-cset", + "i8mm", + "jsconv", + "lor", + "lse", + "lse2", + "mpam", + "mte", + "neon", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predictable-select-expensive", + "predres", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "sb", + "sel2", + "specrestrict", + "ssbs", + "sve", + "sve-bitperm", + "sve2", + "tlb-rmi", + "tracev8.4", + "trbe", + "uaops", + "use-postra-scheduler", + "vh" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "cortex-a320": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "aggressive-interleaving", + "altnzcv", + "am", + "amvs", + "bf16", + "bti", + "ccdp", + "ccidx", + "ccpp", + "complxnum", + "crc", + "dit", + "dotprod", + "ecv", + "el2vmsa", + "el3", + "ete", + "fgt", + "flagm", + "fp-armv8", + "fp16fml", + "fptoint", + "fullfp16", + "fuse-adrp-add", + "fuse-aes", + "hcx", + "i8mm", + "jsconv", + "lor", + "lse", + "lse2", + "mec", + "mpam", + "mte", + "neon", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predres", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "rme", + "sb", + "sel2", + "spe-eef", + "specrestrict", + "ssbs", + "sve", + "sve-bitperm", + "sve2", + "tlb-rmi", + "tracev8.4", + "trbe", + "uaops", + "use-fixed-over-scalable-if-equal-cost", + "use-postra-scheduler", + "use-wzr-to-vec-move", + "vh", + "wfxt", + "xs" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "cortex-a34": { + "backend": "simd_neon", + "features": [ + "a", + "aes", + "crc", + "el2vmsa", + "el3", + "fp-armv8", + "neon", + "perfmon", + "sha2" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "cortex-a35": { + "backend": "simd_neon", + "features": [ + "a", + "aes", + "crc", + "el2vmsa", + "el3", + "fp-armv8", + "neon", + "perfmon", + "sha2" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "cortex-a510": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "altnzcv", + "am", + "bf16", + "bti", + "ccdp", + "ccidx", + "ccpp", + "complxnum", + "crc", + "dit", + "dotprod", + "el2vmsa", + "el3", + "ete", + "flagm", + "fp-armv8", + "fp16fml", + "fpac", + "fptoint", + "fullfp16", + "fuse-adrp-add", + "fuse-aes", + "i8mm", + "jsconv", + "lor", + "lse", + "lse2", + "mpam", + "mte", + "neon", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predres", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "sb", + "sel2", + "specrestrict", + "ssbs", + "sve", + "sve-bitperm", + "sve2", + "tlb-rmi", + "tracev8.4", + "trbe", + "uaops", + "use-fixed-over-scalable-if-equal-cost", + "use-postra-scheduler", + "use-wzr-to-vec-move", + "vh" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "cortex-a520": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "altnzcv", + "am", + "amvs", + "bf16", + "bti", + "ccdp", + "ccidx", + "ccpp", + "complxnum", + "crc", + "dit", + "dotprod", + "ecv", + "el2vmsa", + "el3", + "ete", + "fgt", + "flagm", + "fp-armv8", + "fp16fml", + "fpac", + "fptoint", + "fullfp16", + "fuse-adrp-add", + "fuse-aes", + "hcx", + "i8mm", + "jsconv", + "lor", + "lse", + "lse2", + "mec", + "mpam", + "mte", + "neon", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predres", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "rme", + "sb", + "sel2", + "spe-eef", + "specrestrict", + "ssbs", + "sve", + "sve-bitperm", + "sve2", + "tlb-rmi", + "tracev8.4", + "trbe", + "uaops", + "use-fixed-over-scalable-if-equal-cost", + "use-postra-scheduler", + "use-wzr-to-vec-move", + "vh", + "wfxt", + "xs" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "cortex-a520ae": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "altnzcv", + "am", + "amvs", + "bf16", + "bti", + "ccdp", + "ccidx", + "ccpp", + "complxnum", + "crc", + "dit", + "dotprod", + "ecv", + "el2vmsa", + "el3", + "ete", + "fgt", + "flagm", + "fp-armv8", + "fp16fml", + "fpac", + "fptoint", + "fullfp16", + "fuse-adrp-add", + "fuse-aes", + "hcx", + "i8mm", + "jsconv", + "lor", + "lse", + "lse2", + "mec", + "mpam", + "mte", + "neon", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predres", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "rme", + "sb", + "sel2", + "spe-eef", + "specrestrict", + "ssbs", + "sve", + "sve-bitperm", + "sve2", + "tlb-rmi", + "tracev8.4", + "trbe", + "uaops", + "use-postra-scheduler", + "use-wzr-to-vec-move", + "vh", + "wfxt", + "xs" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "cortex-a53": { + "backend": "simd_neon", + "features": [ + "a", + "aes", + "balance-fp-ops", + "crc", + "el2vmsa", + "el3", + "fp-armv8", + "fuse-adrp-add", + "fuse-aes", + "neon", + "perfmon", + "sha2", + "use-postra-scheduler", + "use-wzr-to-vec-move" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "cortex-a55": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "aes", + "ccpp", + "crc", + "dotprod", + "el2vmsa", + "el3", + "fp-armv8", + "fullfp16", + "fuse-address", + "fuse-adrp-add", + "fuse-aes", + "lor", + "lse", + "neon", + "pan", + "pan-rwv", + "perfmon", + "ras", + "rcpc", + "rdm", + "sha2", + "uaops", + "use-postra-scheduler", + "use-wzr-to-vec-move", + "vh" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "cortex-a57": { + "backend": "simd_neon", + "features": [ + "a", + "addr-lsl-slow-14", + "aes", + "balance-fp-ops", + "crc", + "el2vmsa", + "el3", + "enable-select-opt", + "fp-armv8", + "fuse-adrp-add", + "fuse-aes", + "fuse-literals", + "max-interleave-factor-4", + "neon", + "perfmon", + "predictable-select-expensive", + "sha2", + "use-postra-scheduler" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "cortex-a65": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "aes", + "ccpp", + "crc", + "dotprod", + "el2vmsa", + "el3", + "enable-select-opt", + "fp-armv8", + "fullfp16", + "fuse-address", + "fuse-adrp-add", + "fuse-aes", + "fuse-literals", + "lor", + "lse", + "neon", + "pan", + "pan-rwv", + "perfmon", + "predictable-select-expensive", + "ras", + "rcpc", + "rdm", + "sha2", + "ssbs", + "uaops", + "vh" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "cortex-a65ae": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "aes", + "ccpp", + "crc", + "dotprod", + "el2vmsa", + "el3", + "enable-select-opt", + "fp-armv8", + "fullfp16", + "fuse-address", + "fuse-adrp-add", + "fuse-aes", + "fuse-literals", + "lor", + "lse", + "neon", + "pan", + "pan-rwv", + "perfmon", + "predictable-select-expensive", + "ras", + "rcpc", + "rdm", + "sha2", + "ssbs", + "uaops", + "vh" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "cortex-a710": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "altnzcv", + "alu-lsl-fast", + "am", + "bf16", + "bti", + "ccdp", + "ccidx", + "ccpp", + "cmp-bcc-fusion", + "complxnum", + "crc", + "dit", + "dotprod", + "el2vmsa", + "el3", + "enable-select-opt", + "ete", + "flagm", + "fp-armv8", + "fp16fml", + "fpac", + "fptoint", + "fullfp16", + "fuse-adrp-add", + "fuse-aes", + "fuse-csel", + "fuse-cset", + "i8mm", + "jsconv", + "lor", + "lse", + "lse2", + "mpam", + "mte", + "neon", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predictable-select-expensive", + "predres", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "sb", + "sel2", + "specrestrict", + "ssbs", + "sve", + "sve-bitperm", + "sve2", + "tlb-rmi", + "tracev8.4", + "trbe", + "uaops", + "use-postra-scheduler", + "vh" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "cortex-a715": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "altnzcv", + "alu-lsl-fast", + "am", + "bf16", + "bti", + "ccdp", + "ccidx", + "ccpp", + "cmp-bcc-fusion", + "complxnum", + "crc", + "dit", + "dotprod", + "el2vmsa", + "el3", + "enable-select-opt", + "ete", + "flagm", + "fp-armv8", + "fp16fml", + "fpac", + "fptoint", + "fullfp16", + "fuse-adrp-add", + "fuse-aes", + "fuse-csel", + "fuse-cset", + "i8mm", + "jsconv", + "lor", + "lse", + "lse2", + "mpam", + "mte", + "neon", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predictable-select-expensive", + "predres", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "sb", + "sel2", + "spe", + "specrestrict", + "ssbs", + "sve", + "sve-bitperm", + "sve2", + "tlb-rmi", + "tracev8.4", + "trbe", + "uaops", + "use-postra-scheduler", + "vh" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "cortex-a72": { + "backend": "simd_neon", + "features": [ + "a", + "addr-lsl-slow-14", + "aes", + "crc", + "el2vmsa", + "el3", + "enable-select-opt", + "fp-armv8", + "fuse-adrp-add", + "fuse-aes", + "fuse-literals", + "neon", + "perfmon", + "predictable-select-expensive", + "sha2" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "cortex-a720": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "altnzcv", + "alu-lsl-fast", + "am", + "amvs", + "bf16", + "bti", + "ccdp", + "ccidx", + "ccpp", + "cmp-bcc-fusion", + "complxnum", + "crc", + "dit", + "dotprod", + "ecv", + "el2vmsa", + "el3", + "enable-select-opt", + "ete", + "fgt", + "flagm", + "fp-armv8", + "fp16fml", + "fpac", + "fptoint", + "fullfp16", + "fuse-adrp-add", + "fuse-aes", + "fuse-csel", + "fuse-cset", + "hcx", + "i8mm", + "jsconv", + "lor", + "lse", + "lse2", + "mec", + "mpam", + "mte", + "neon", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predictable-select-expensive", + "predres", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "rme", + "sb", + "sel2", + "spe", + "spe-eef", + "specrestrict", + "ssbs", + "sve", + "sve-bitperm", + "sve2", + "tlb-rmi", + "tracev8.4", + "trbe", + "uaops", + "use-postra-scheduler", + "vh", + "wfxt", + "xs" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "cortex-a720ae": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "altnzcv", + "alu-lsl-fast", + "am", + "amvs", + "bf16", + "bti", + "ccdp", + "ccidx", + "ccpp", + "cmp-bcc-fusion", + "complxnum", + "crc", + "dit", + "dotprod", + "ecv", + "el2vmsa", + "el3", + "enable-select-opt", + "ete", + "fgt", + "flagm", + "fp-armv8", + "fp16fml", + "fpac", + "fptoint", + "fullfp16", + "fuse-adrp-add", + "fuse-aes", + "fuse-csel", + "fuse-cset", + "hcx", + "i8mm", + "jsconv", + "lor", + "lse", + "lse2", + "mec", + "mpam", + "mte", + "neon", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predictable-select-expensive", + "predres", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "rme", + "sb", + "sel2", + "spe", + "spe-eef", + "specrestrict", + "ssbs", + "sve", + "sve-bitperm", + "sve2", + "tlb-rmi", + "tracev8.4", + "trbe", + "uaops", + "use-postra-scheduler", + "vh", + "wfxt", + "xs" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "cortex-a725": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "altnzcv", + "alu-lsl-fast", + "am", + "amvs", + "bf16", + "bti", + "ccdp", + "ccidx", + "ccpp", + "cmp-bcc-fusion", + "complxnum", + "crc", + "dit", + "dotprod", + "ecv", + "el2vmsa", + "el3", + "enable-select-opt", + "ete", + "fgt", + "flagm", + "fp-armv8", + "fp16fml", + "fpac", + "fptoint", + "fullfp16", + "fuse-adrp-add", + "fuse-aes", + "fuse-csel", + "fuse-cset", + "hcx", + "i8mm", + "jsconv", + "lor", + "lse", + "lse2", + "mec", + "mpam", + "mte", + "neon", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predictable-select-expensive", + "predres", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "rme", + "sb", + "sel2", + "spe", + "spe-eef", + "specrestrict", + "ssbs", + "sve", + "sve-bitperm", + "sve2", + "tlb-rmi", + "tracev8.4", + "trbe", + "uaops", + "use-postra-scheduler", + "vh", + "wfxt", + "xs" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "cortex-a73": { + "backend": "simd_neon", + "features": [ + "a", + "addr-lsl-slow-14", + "aes", + "crc", + "el2vmsa", + "el3", + "enable-select-opt", + "fp-armv8", + "fuse-adrp-add", + "fuse-aes", + "neon", + "perfmon", + "predictable-select-expensive", + "sha2" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "cortex-a75": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "addr-lsl-slow-14", + "aes", + "ccpp", + "crc", + "dotprod", + "el2vmsa", + "el3", + "enable-select-opt", + "fp-armv8", + "fullfp16", + "fuse-adrp-add", + "fuse-aes", + "lor", + "lse", + "neon", + "pan", + "pan-rwv", + "perfmon", + "predictable-select-expensive", + "ras", + "rcpc", + "rdm", + "sha2", + "uaops", + "vh" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "cortex-a76": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "addr-lsl-slow-14", + "aes", + "alu-lsl-fast", + "ccpp", + "crc", + "dotprod", + "el2vmsa", + "el3", + "enable-select-opt", + "fp-armv8", + "fullfp16", + "fuse-adrp-add", + "fuse-aes", + "lor", + "lse", + "neon", + "pan", + "pan-rwv", + "perfmon", + "predictable-select-expensive", + "ras", + "rcpc", + "rdm", + "sha2", + "ssbs", + "uaops", + "vh" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "cortex-a76ae": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "addr-lsl-slow-14", + "aes", + "alu-lsl-fast", + "ccpp", + "crc", + "dotprod", + "el2vmsa", + "el3", + "enable-select-opt", + "fp-armv8", + "fullfp16", + "fuse-adrp-add", + "fuse-aes", + "lor", + "lse", + "neon", + "pan", + "pan-rwv", + "perfmon", + "predictable-select-expensive", + "ras", + "rcpc", + "rdm", + "sha2", + "ssbs", + "uaops", + "vh" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "cortex-a77": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "addr-lsl-slow-14", + "aes", + "alu-lsl-fast", + "ccpp", + "cmp-bcc-fusion", + "crc", + "dotprod", + "el2vmsa", + "el3", + "enable-select-opt", + "fp-armv8", + "fullfp16", + "fuse-adrp-add", + "fuse-aes", + "lor", + "lse", + "neon", + "pan", + "pan-rwv", + "perfmon", + "predictable-select-expensive", + "ras", + "rcpc", + "rdm", + "sha2", + "ssbs", + "uaops", + "vh" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "cortex-a78": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "addr-lsl-slow-14", + "aes", + "alu-lsl-fast", + "ccpp", + "cmp-bcc-fusion", + "crc", + "dotprod", + "el2vmsa", + "el3", + "enable-select-opt", + "fp-armv8", + "fullfp16", + "fuse-adrp-add", + "fuse-aes", + "fuse-csel", + "fuse-cset", + "lor", + "lse", + "neon", + "pan", + "pan-rwv", + "perfmon", + "predictable-select-expensive", + "ras", + "rcpc", + "rdm", + "sha2", + "spe", + "ssbs", + "uaops", + "use-postra-scheduler", + "vh" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "cortex-a78ae": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "addr-lsl-slow-14", + "aes", + "alu-lsl-fast", + "ccpp", + "cmp-bcc-fusion", + "crc", + "dotprod", + "el2vmsa", + "el3", + "enable-select-opt", + "fp-armv8", + "fullfp16", + "fuse-adrp-add", + "fuse-aes", + "fuse-csel", + "fuse-cset", + "lor", + "lse", + "neon", + "pan", + "pan-rwv", + "perfmon", + "predictable-select-expensive", + "ras", + "rcpc", + "rdm", + "sha2", + "spe", + "ssbs", + "uaops", + "use-postra-scheduler", + "vh" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "cortex-a78c": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "addr-lsl-slow-14", + "aes", + "alu-lsl-fast", + "ccpp", + "cmp-bcc-fusion", + "crc", + "dotprod", + "el2vmsa", + "el3", + "enable-select-opt", + "flagm", + "fp-armv8", + "fullfp16", + "fuse-adrp-add", + "fuse-aes", + "fuse-csel", + "fuse-cset", + "lor", + "lse", + "neon", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predictable-select-expensive", + "ras", + "rcpc", + "rdm", + "sha2", + "spe", + "ssbs", + "uaops", + "use-postra-scheduler", + "vh" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "cortex-r82": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "ccdp", + "ccidx", + "ccpp", + "complxnum", + "crc", + "dit", + "dotprod", + "flagm", + "fp-armv8", + "fp16fml", + "fpac", + "fullfp16", + "jsconv", + "lse", + "neon", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predres", + "r", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "sb", + "sel2", + "specrestrict", + "ssbs", + "tlb-rmi", + "tracev8.4", + "uaops", + "use-postra-scheduler" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "cortex-r82ae": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "ccdp", + "ccidx", + "ccpp", + "complxnum", + "crc", + "dit", + "dotprod", + "flagm", + "fp-armv8", + "fp16fml", + "fpac", + "fullfp16", + "jsconv", + "lse", + "neon", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predres", + "r", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "sb", + "sel2", + "specrestrict", + "ssbs", + "tlb-rmi", + "tracev8.4", + "uaops", + "use-postra-scheduler" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "cortex-x1": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "addr-lsl-slow-14", + "aes", + "alu-lsl-fast", + "ccpp", + "cmp-bcc-fusion", + "crc", + "dotprod", + "el2vmsa", + "el3", + "enable-select-opt", + "fp-armv8", + "fullfp16", + "fuse-adrp-add", + "fuse-aes", + "lor", + "lse", + "neon", + "pan", + "pan-rwv", + "perfmon", + "predictable-select-expensive", + "ras", + "rcpc", + "rdm", + "sha2", + "spe", + "ssbs", + "uaops", + "use-postra-scheduler", + "vh" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "cortex-x1c": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "addr-lsl-slow-14", + "aes", + "alu-lsl-fast", + "ccpp", + "cmp-bcc-fusion", + "crc", + "dotprod", + "el2vmsa", + "el3", + "enable-select-opt", + "flagm", + "fp-armv8", + "fullfp16", + "fuse-adrp-add", + "fuse-aes", + "lor", + "lse", + "lse2", + "neon", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predictable-select-expensive", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "sha2", + "spe", + "ssbs", + "uaops", + "use-postra-scheduler", + "vh" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "cortex-x2": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "altnzcv", + "alu-lsl-fast", + "am", + "bf16", + "bti", + "ccdp", + "ccidx", + "ccpp", + "cmp-bcc-fusion", + "complxnum", + "crc", + "dit", + "dotprod", + "el2vmsa", + "el3", + "enable-select-opt", + "ete", + "flagm", + "fp-armv8", + "fp16fml", + "fpac", + "fptoint", + "fullfp16", + "fuse-adrp-add", + "fuse-aes", + "i8mm", + "jsconv", + "lor", + "lse", + "lse2", + "mpam", + "mte", + "neon", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predictable-select-expensive", + "predres", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "sb", + "sel2", + "specrestrict", + "ssbs", + "sve", + "sve-bitperm", + "sve2", + "tlb-rmi", + "tracev8.4", + "trbe", + "uaops", + "use-fixed-over-scalable-if-equal-cost", + "use-postra-scheduler", + "vh" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "cortex-x3": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "altnzcv", + "alu-lsl-fast", + "am", + "avoid-ldapur", + "bf16", + "bti", + "ccdp", + "ccidx", + "ccpp", + "complxnum", + "crc", + "dit", + "dotprod", + "el2vmsa", + "el3", + "enable-select-opt", + "ete", + "flagm", + "fp-armv8", + "fp16fml", + "fpac", + "fptoint", + "fullfp16", + "fuse-adrp-add", + "fuse-aes", + "i8mm", + "jsconv", + "lor", + "lse", + "lse2", + "mpam", + "mte", + "neon", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predictable-select-expensive", + "predres", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "sb", + "sel2", + "spe", + "specrestrict", + "ssbs", + "sve", + "sve-bitperm", + "sve2", + "tlb-rmi", + "tracev8.4", + "trbe", + "uaops", + "use-fixed-over-scalable-if-equal-cost", + "use-postra-scheduler", + "vh" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "cortex-x4": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "altnzcv", + "alu-lsl-fast", + "am", + "amvs", + "avoid-ldapur", + "bf16", + "bti", + "ccdp", + "ccidx", + "ccpp", + "complxnum", + "crc", + "dit", + "dotprod", + "ecv", + "el2vmsa", + "el3", + "enable-select-opt", + "ete", + "fgt", + "flagm", + "fp-armv8", + "fp16fml", + "fpac", + "fptoint", + "fullfp16", + "fuse-adrp-add", + "fuse-aes", + "fuse-csel", + "fuse-cset", + "hcx", + "i8mm", + "jsconv", + "lor", + "lse", + "lse2", + "mec", + "mpam", + "mte", + "neon", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predictable-select-expensive", + "predres", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "rme", + "sb", + "sel2", + "spe", + "spe-eef", + "specrestrict", + "ssbs", + "sve", + "sve-bitperm", + "sve2", + "tlb-rmi", + "tracev8.4", + "trbe", + "uaops", + "use-fixed-over-scalable-if-equal-cost", + "use-postra-scheduler", + "vh", + "wfxt", + "xs" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "cortex-x925": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "altnzcv", + "alu-lsl-fast", + "am", + "amvs", + "avoid-ldapur", + "bf16", + "bti", + "ccdp", + "ccidx", + "ccpp", + "complxnum", + "crc", + "dit", + "dotprod", + "ecv", + "el2vmsa", + "el3", + "enable-select-opt", + "ete", + "fgt", + "flagm", + "fp-armv8", + "fp16fml", + "fpac", + "fptoint", + "fullfp16", + "fuse-adrp-add", + "fuse-aes", + "fuse-csel", + "fuse-cset", + "hcx", + "i8mm", + "jsconv", + "lor", + "lse", + "lse2", + "mec", + "mpam", + "mte", + "neon", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predictable-select-expensive", + "predres", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "rme", + "sb", + "sel2", + "spe", + "spe-eef", + "specrestrict", + "ssbs", + "sve", + "sve-bitperm", + "sve2", + "tlb-rmi", + "tracev8.4", + "trbe", + "uaops", + "use-fixed-over-scalable-if-equal-cost", + "use-postra-scheduler", + "vh", + "wfxt", + "xs" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "cyclone": { + "backend": "simd_neon", + "features": [ + "a", + "aes", + "alternate-sextload-cvt-f32-pattern", + "arith-bcc-fusion", + "arith-cbz-fusion", + "disable-latency-sched-heuristic", + "el2vmsa", + "el3", + "fp-armv8", + "fuse-aes", + "fuse-crypto-eor", + "neon", + "no-zcz-fpr64", + "perfmon", + "sha2", + "store-pair-suppress", + "zcm-fpr128", + "zcm-gpr64", + "zcz-fp-workaround", + "zcz-fpr128", + "zcz-gpr32", + "zcz-gpr64" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "exynos-m3": { + "backend": "simd_neon", + "features": [ + "a", + "aes", + "alu-lsl-fast", + "crc", + "el2vmsa", + "el3", + "exynos-cheap-as-move", + "force-32bit-jump-tables", + "fp-armv8", + "fuse-address", + "fuse-adrp-add", + "fuse-aes", + "fuse-csel", + "fuse-literals", + "max-interleave-factor-4", + "neon", + "perfmon", + "predictable-select-expensive", + "sha2", + "store-pair-suppress", + "use-postra-scheduler" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "exynos-m4": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "aes", + "alu-lsl-fast", + "arith-bcc-fusion", + "arith-cbz-fusion", + "ccpp", + "crc", + "dotprod", + "el2vmsa", + "el3", + "exynos-cheap-as-move", + "force-32bit-jump-tables", + "fp-armv8", + "fullfp16", + "fuse-address", + "fuse-adrp-add", + "fuse-aes", + "fuse-arith-logic", + "fuse-csel", + "fuse-literals", + "lor", + "lse", + "max-interleave-factor-4", + "neon", + "pan", + "pan-rwv", + "perfmon", + "ras", + "rdm", + "sha2", + "store-pair-suppress", + "uaops", + "use-postra-scheduler", + "vh", + "zcz-gpr32", + "zcz-gpr64" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "exynos-m5": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "aes", + "alu-lsl-fast", + "arith-bcc-fusion", + "arith-cbz-fusion", + "ccpp", + "crc", + "dotprod", + "el2vmsa", + "el3", + "exynos-cheap-as-move", + "force-32bit-jump-tables", + "fp-armv8", + "fullfp16", + "fuse-address", + "fuse-adrp-add", + "fuse-aes", + "fuse-arith-logic", + "fuse-csel", + "fuse-literals", + "lor", + "lse", + "max-interleave-factor-4", + "neon", + "pan", + "pan-rwv", + "perfmon", + "ras", + "rdm", + "sha2", + "store-pair-suppress", + "uaops", + "use-postra-scheduler", + "vh", + "zcz-gpr32", + "zcz-gpr64" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "falkor": { + "backend": "simd_neon", + "features": [ + "a", + "aes", + "alu-lsl-fast", + "crc", + "el2vmsa", + "el3", + "fp-armv8", + "max-interleave-factor-4", + "neon", + "perfmon", + "predictable-select-expensive", + "rdm", + "sha2", + "slow-strqro-store", + "store-pair-suppress", + "use-postra-scheduler", + "zcz-gpr32", + "zcz-gpr64" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "fujitsu-monaka": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "aes", + "altnzcv", + "am", + "amvs", + "arith-bcc-fusion", + "bf16", + "bti", + "ccdp", + "ccidx", + "ccpp", + "clrbhb", + "complxnum", + "crc", + "dit", + "dotprod", + "ecv", + "el2vmsa", + "el3", + "enable-select-opt", + "ete", + "faminmax", + "fgt", + "flagm", + "fp-armv8", + "fp16fml", + "fp8", + "fp8dot2", + "fp8dot4", + "fp8fma", + "fpac", + "fptoint", + "fullfp16", + "hbc", + "hcx", + "i8mm", + "jsconv", + "lor", + "ls64", + "lse", + "lse2", + "lut", + "mec", + "mops", + "mpam", + "neon", + "nmi", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predictable-select-expensive", + "predres", + "rand", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "rme", + "sb", + "sel2", + "sha2", + "sha3", + "sm4", + "spe-eef", + "specres2", + "specrestrict", + "ssbs", + "sve", + "sve-aes", + "sve-bitperm", + "sve-sha3", + "sve-sm4", + "sve2", + "tlb-rmi", + "tracev8.4", + "trbe", + "uaops", + "use-postra-scheduler", + "vh", + "wfxt", + "xs" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "gb10": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "aes", + "altnzcv", + "alu-lsl-fast", + "am", + "amvs", + "avoid-ldapur", + "bf16", + "bti", + "ccdp", + "ccidx", + "ccpp", + "complxnum", + "crc", + "dit", + "dotprod", + "ecv", + "el2vmsa", + "el3", + "enable-select-opt", + "ete", + "fgt", + "flagm", + "fp-armv8", + "fp16fml", + "fpac", + "fptoint", + "fullfp16", + "fuse-adrp-add", + "fuse-aes", + "fuse-csel", + "fuse-cset", + "hcx", + "i8mm", + "jsconv", + "lor", + "lse", + "lse2", + "mec", + "mpam", + "mte", + "neon", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predictable-select-expensive", + "predres", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "rme", + "sb", + "sel2", + "sha2", + "sha3", + "sm4", + "spe", + "spe-eef", + "specrestrict", + "ssbs", + "sve", + "sve-aes", + "sve-bitperm", + "sve-sha3", + "sve-sm4", + "sve2", + "tlb-rmi", + "tracev8.4", + "trbe", + "uaops", + "use-fixed-over-scalable-if-equal-cost", + "use-postra-scheduler", + "vh", + "wfxt", + "xs" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "generic": { + "backend": "simd_neon", + "features": [ + "enable-select-opt", + "ete", + "fp-armv8", + "fuse-adrp-add", + "fuse-aes", + "neon", + "trbe", + "use-postra-scheduler" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "grace": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "aes", + "altnzcv", + "alu-lsl-fast", + "am", + "avoid-ldapur", + "bf16", + "bti", + "ccdp", + "ccidx", + "ccpp", + "cmp-bcc-fusion", + "complxnum", + "crc", + "disable-latency-sched-heuristic", + "dit", + "dotprod", + "el2vmsa", + "el3", + "enable-select-opt", + "ete", + "flagm", + "fp-armv8", + "fp16fml", + "fpac", + "fptoint", + "fullfp16", + "fuse-adrp-add", + "fuse-aes", + "fuse-csel", + "fuse-cset", + "i8mm", + "jsconv", + "lor", + "lse", + "lse2", + "max-interleave-factor-4", + "mpam", + "mte", + "neon", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predictable-select-expensive", + "predres", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "sb", + "sel2", + "sha2", + "sha3", + "sm4", + "spe", + "specrestrict", + "ssbs", + "sve", + "sve-aes", + "sve-bitperm", + "sve-sha3", + "sve-sm4", + "sve2", + "tlb-rmi", + "tracev8.4", + "trbe", + "uaops", + "use-fixed-over-scalable-if-equal-cost", + "use-postra-scheduler", + "vh" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "kryo": { + "backend": "simd_neon", + "features": [ + "a", + "aes", + "alu-lsl-fast", + "crc", + "el2vmsa", + "el3", + "fp-armv8", + "max-interleave-factor-4", + "neon", + "perfmon", + "predictable-select-expensive", + "sha2", + "store-pair-suppress", + "use-postra-scheduler", + "zcz-gpr32", + "zcz-gpr64" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "neoverse-512tvb": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "aes", + "alu-lsl-fast", + "am", + "bf16", + "ccdp", + "ccidx", + "ccpp", + "complxnum", + "crc", + "dit", + "dotprod", + "el2vmsa", + "el3", + "enable-select-opt", + "flagm", + "fp-armv8", + "fp16fml", + "fpac", + "fullfp16", + "fuse-adrp-add", + "fuse-aes", + "i8mm", + "jsconv", + "lor", + "lse", + "lse2", + "max-interleave-factor-4", + "mpam", + "neon", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predictable-select-expensive", + "rand", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "sel2", + "sha2", + "sha3", + "sm4", + "spe", + "ssbs", + "sve", + "tlb-rmi", + "tracev8.4", + "uaops", + "use-postra-scheduler", + "vh" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "neoverse-e1": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "aes", + "ccpp", + "crc", + "dotprod", + "el2vmsa", + "el3", + "fp-armv8", + "fullfp16", + "fuse-adrp-add", + "fuse-aes", + "lor", + "lse", + "neon", + "pan", + "pan-rwv", + "perfmon", + "ras", + "rcpc", + "rdm", + "sha2", + "ssbs", + "uaops", + "use-postra-scheduler", + "vh" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "neoverse-n1": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "addr-lsl-slow-14", + "aes", + "alu-lsl-fast", + "ccpp", + "crc", + "dotprod", + "el2vmsa", + "el3", + "enable-select-opt", + "fp-armv8", + "fullfp16", + "fuse-adrp-add", + "fuse-aes", + "lor", + "lse", + "neon", + "pan", + "pan-rwv", + "perfmon", + "predictable-select-expensive", + "ras", + "rcpc", + "rdm", + "sha2", + "spe", + "ssbs", + "uaops", + "use-postra-scheduler", + "vh" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "neoverse-n2": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "altnzcv", + "alu-lsl-fast", + "am", + "bf16", + "bti", + "ccdp", + "ccidx", + "ccpp", + "complxnum", + "crc", + "disable-maximize-scalable-bandwidth", + "dit", + "dotprod", + "el2vmsa", + "el3", + "enable-select-opt", + "ete", + "flagm", + "fp-armv8", + "fp16fml", + "fpac", + "fptoint", + "fullfp16", + "fuse-adrp-add", + "fuse-aes", + "fuse-csel", + "fuse-cset", + "i8mm", + "jsconv", + "lor", + "lse", + "lse2", + "mpam", + "mte", + "neon", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predictable-select-expensive", + "predres", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "sb", + "sel2", + "specrestrict", + "ssbs", + "sve", + "sve-bitperm", + "sve2", + "tlb-rmi", + "tracev8.4", + "trbe", + "uaops", + "use-postra-scheduler", + "vh" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "neoverse-n3": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "altnzcv", + "alu-lsl-fast", + "am", + "amvs", + "bf16", + "bti", + "ccdp", + "ccidx", + "ccpp", + "complxnum", + "crc", + "dit", + "dotprod", + "ecv", + "el2vmsa", + "el3", + "enable-select-opt", + "ete", + "fgt", + "flagm", + "fp-armv8", + "fp16fml", + "fpac", + "fptoint", + "fullfp16", + "fuse-adrp-add", + "fuse-aes", + "fuse-csel", + "fuse-cset", + "hcx", + "i8mm", + "jsconv", + "lor", + "lse", + "lse2", + "mec", + "mpam", + "mte", + "neon", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predictable-select-expensive", + "predres", + "rand", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "rme", + "sb", + "sel2", + "spe", + "spe-eef", + "specrestrict", + "ssbs", + "sve", + "sve-bitperm", + "sve2", + "tlb-rmi", + "tracev8.4", + "trbe", + "uaops", + "use-postra-scheduler", + "vh", + "wfxt", + "xs" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "neoverse-v1": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "addr-lsl-slow-14", + "aes", + "alu-lsl-fast", + "am", + "bf16", + "ccdp", + "ccidx", + "ccpp", + "complxnum", + "crc", + "disable-maximize-scalable-bandwidth", + "dit", + "dotprod", + "el2vmsa", + "el3", + "enable-select-opt", + "flagm", + "fp-armv8", + "fp16fml", + "fullfp16", + "fuse-adrp-add", + "fuse-aes", + "fuse-csel", + "fuse-cset", + "i8mm", + "jsconv", + "lor", + "lse", + "lse2", + "mpam", + "neon", + "no-sve-fp-ld1r", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predictable-select-expensive", + "rand", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "sel2", + "sha2", + "sha3", + "sm4", + "spe", + "ssbs", + "sve", + "tlb-rmi", + "tracev8.4", + "uaops", + "use-postra-scheduler", + "vh" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "neoverse-v2": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "altnzcv", + "alu-lsl-fast", + "am", + "avoid-ldapur", + "bf16", + "bti", + "ccdp", + "ccidx", + "ccpp", + "cmp-bcc-fusion", + "complxnum", + "crc", + "disable-latency-sched-heuristic", + "dit", + "dotprod", + "el2vmsa", + "el3", + "enable-select-opt", + "ete", + "flagm", + "fp-armv8", + "fp16fml", + "fpac", + "fptoint", + "fullfp16", + "fuse-adrp-add", + "fuse-aes", + "fuse-csel", + "fuse-cset", + "i8mm", + "jsconv", + "lor", + "lse", + "lse2", + "max-interleave-factor-4", + "mpam", + "mte", + "neon", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predictable-select-expensive", + "predres", + "rand", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "sb", + "sel2", + "spe", + "specrestrict", + "ssbs", + "sve", + "sve-bitperm", + "sve2", + "tlb-rmi", + "tracev8.4", + "trbe", + "uaops", + "use-fixed-over-scalable-if-equal-cost", + "use-postra-scheduler", + "vh" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "neoverse-v3": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "altnzcv", + "alu-lsl-fast", + "am", + "amvs", + "avoid-ldapur", + "bf16", + "brbe", + "bti", + "ccdp", + "ccidx", + "ccpp", + "complxnum", + "crc", + "dit", + "dotprod", + "ecv", + "el2vmsa", + "el3", + "enable-select-opt", + "ete", + "fgt", + "flagm", + "fp-armv8", + "fp16fml", + "fpac", + "fptoint", + "fullfp16", + "fuse-adrp-add", + "fuse-aes", + "fuse-csel", + "fuse-cset", + "hcx", + "i8mm", + "jsconv", + "lor", + "ls64", + "lse", + "lse2", + "max-interleave-factor-4", + "mec", + "mpam", + "mte", + "neon", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predictable-select-expensive", + "predres", + "rand", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "rme", + "sb", + "sel2", + "spe", + "spe-eef", + "specrestrict", + "ssbs", + "sve", + "sve-bitperm", + "sve2", + "tlb-rmi", + "tracev8.4", + "trbe", + "uaops", + "use-postra-scheduler", + "vh", + "wfxt", + "xs" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "neoverse-v3ae": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "altnzcv", + "alu-lsl-fast", + "am", + "amvs", + "avoid-ldapur", + "bf16", + "brbe", + "bti", + "ccdp", + "ccidx", + "ccpp", + "complxnum", + "crc", + "dit", + "dotprod", + "ecv", + "el2vmsa", + "el3", + "enable-select-opt", + "ete", + "fgt", + "flagm", + "fp-armv8", + "fp16fml", + "fpac", + "fptoint", + "fullfp16", + "fuse-adrp-add", + "fuse-aes", + "fuse-csel", + "fuse-cset", + "hcx", + "i8mm", + "jsconv", + "lor", + "ls64", + "lse", + "lse2", + "max-interleave-factor-4", + "mec", + "mpam", + "mte", + "neon", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predictable-select-expensive", + "predres", + "rand", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "rme", + "sb", + "sel2", + "spe", + "spe-eef", + "specrestrict", + "ssbs", + "sve", + "sve-bitperm", + "sve2", + "tlb-rmi", + "tracev8.4", + "trbe", + "uaops", + "use-postra-scheduler", + "vh", + "wfxt", + "xs" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "olympus": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "aes", + "altnzcv", + "alu-lsl-fast", + "am", + "amvs", + "bf16", + "brbe", + "bti", + "ccdp", + "ccidx", + "ccpp", + "chk", + "cmp-bcc-fusion", + "complxnum", + "crc", + "dit", + "dotprod", + "ecv", + "el2vmsa", + "el3", + "enable-select-opt", + "ete", + "faminmax", + "fgt", + "flagm", + "fp-armv8", + "fp16fml", + "fp8", + "fp8dot2", + "fp8dot4", + "fp8fma", + "fpac", + "fptoint", + "fullfp16", + "fuse-adrp-add", + "fuse-aes", + "hcx", + "i8mm", + "jsconv", + "lor", + "ls64", + "lse", + "lse2", + "lut", + "max-interleave-factor-4", + "mec", + "mpam", + "mte", + "neon", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predictable-select-expensive", + "predres", + "rand", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "rme", + "sb", + "sel2", + "sha2", + "sha3", + "sm4", + "spe", + "spe-eef", + "specrestrict", + "ssbs", + "sve", + "sve-aes", + "sve-bitperm", + "sve-sha3", + "sve-sm4", + "sve2", + "tlb-rmi", + "tracev8.4", + "trbe", + "uaops", + "use-fixed-over-scalable-if-equal-cost", + "use-postra-scheduler", + "vh", + "wfxt", + "xs" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "oryon-1": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "aes", + "altnzcv", + "am", + "amvs", + "bf16", + "bti", + "ccdp", + "ccidx", + "ccpp", + "complxnum", + "crc", + "dit", + "dotprod", + "ecv", + "el2vmsa", + "el3", + "enable-select-opt", + "fgt", + "flagm", + "fp-armv8", + "fp16fml", + "fptoint", + "fullfp16", + "fuse-address", + "fuse-adrp-add", + "fuse-aes", + "fuse-crypto-eor", + "i8mm", + "jsconv", + "lor", + "lse", + "lse2", + "max-interleave-factor-4", + "mpam", + "neon", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predres", + "rand", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "sb", + "sel2", + "sha2", + "sha3", + "sm4", + "spe", + "specrestrict", + "ssbs", + "tlb-rmi", + "tracev8.4", + "uaops", + "use-postra-scheduler", + "vh" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "saphira": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "aes", + "alu-lsl-fast", + "am", + "ccidx", + "ccpp", + "complxnum", + "crc", + "dit", + "dotprod", + "el2vmsa", + "el3", + "flagm", + "fp-armv8", + "jsconv", + "lor", + "lse", + "lse2", + "max-interleave-factor-4", + "mpam", + "neon", + "nv", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predictable-select-expensive", + "ras", + "rcpc", + "rcpc-immo", + "rdm", + "sel2", + "sha2", + "spe", + "store-pair-suppress", + "tlb-rmi", + "tracev8.4", + "uaops", + "use-postra-scheduler", + "vh", + "zcz-gpr32", + "zcz-gpr64" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "thunderx": { + "backend": "simd_neon", + "features": [ + "a", + "aes", + "crc", + "el2vmsa", + "el3", + "fp-armv8", + "neon", + "perfmon", + "predictable-select-expensive", + "sha2", + "store-pair-suppress", + "use-postra-scheduler" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "thunderx2t99": { + "backend": "simd_neon", + "features": [ + "CONTEXTIDREL2", + "a", + "aes", + "aggressive-fma", + "arith-bcc-fusion", + "crc", + "el2vmsa", + "el3", + "fp-armv8", + "lor", + "lse", + "max-interleave-factor-4", + "neon", + "pan", + "predictable-select-expensive", + "rdm", + "sha2", + "store-pair-suppress", + "use-postra-scheduler", + "vh" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "thunderx3t110": { + "backend": "simd_neon", + "features": [ + "CONTEXTIDREL2", + "a", + "aes", + "aggressive-fma", + "arith-bcc-fusion", + "balance-fp-ops", + "ccidx", + "ccpp", + "complxnum", + "crc", + "el2vmsa", + "el3", + "fp-armv8", + "jsconv", + "lor", + "lse", + "max-interleave-factor-4", + "neon", + "pan", + "pan-rwv", + "pauth", + "perfmon", + "predictable-select-expensive", + "ras", + "rcpc", + "rdm", + "sha2", + "store-pair-suppress", + "strict-align", + "uaops", + "use-postra-scheduler", + "vh" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "thunderxt81": { + "backend": "simd_neon", + "features": [ + "a", + "aes", + "crc", + "el2vmsa", + "el3", + "fp-armv8", + "neon", + "perfmon", + "predictable-select-expensive", + "sha2", + "store-pair-suppress", + "use-postra-scheduler" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "thunderxt83": { + "backend": "simd_neon", + "features": [ + "a", + "aes", + "crc", + "el2vmsa", + "el3", + "fp-armv8", + "neon", + "perfmon", + "predictable-select-expensive", + "sha2", + "store-pair-suppress", + "use-postra-scheduler" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "thunderxt88": { + "backend": "simd_neon", + "features": [ + "a", + "aes", + "crc", + "el2vmsa", + "el3", + "fp-armv8", + "neon", + "perfmon", + "predictable-select-expensive", + "sha2", + "store-pair-suppress", + "use-postra-scheduler" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + }, + "tsv110": { + "backend": "simd_neon +dotprod", + "features": [ + "CONTEXTIDREL2", + "a", + "aes", + "ccpp", + "complxnum", + "crc", + "dotprod", + "el2vmsa", + "el3", + "fp-armv8", + "fp16fml", + "fullfp16", + "fuse-aes", + "jsconv", + "lor", + "lse", + "neon", + "pan", + "pan-rwv", + "perfmon", + "ras", + "rdm", + "sha2", + "spe", + "store-pair-suppress", + "uaops", + "use-postra-scheduler", + "vh" + ], + "primitives": { + "aes_round": [ + "AESE + AESMC" + ], + "clmul": [ + "PMULL (64x64->128)" + ], + "ifma52": [], + "mul_lo32": [ + "UMULL / UMULL2" + ], + "permute_var_u32": [ + "TBL" + ], + "shift_var_u32": [ + "USHL" + ] + } + } + }, + "x86": { + "alderlake": { + "backend": "simd_avx2", + "features": [ + "64bit", + "adx", + "aes", + "avx", + "avx2", + "avxvnni", + "bmi", + "bmi2", + "clflushopt", + "clwb", + "cmov", + "crc32", + "cx16", + "cx8", + "f16c", + "fma", + "fsgsbase", + "fxsr", + "gfni", + "hreset", + "invpcid", + "kl", + "lzcnt", + "mmx", + "movbe", + "movdir64b", + "movdiri", + "nopl", + "pclmul", + "pconfig", + "pku", + "popcnt", + "prfchw", + "ptwrite", + "rdpid", + "rdrnd", + "rdseed", + "sahf", + "serialize", + "sha", + "shstk", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "vaes", + "vpclmulqdq", + "waitpkg", + "widekl", + "x87", + "xsave", + "xsavec", + "xsaveopt", + "xsaves" + ], + "primitives": { + "aes_round": [ + "AESENC" + ], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "arrowlake": { + "backend": "simd_avx2", + "features": [ + "64bit", + "adx", + "aes", + "avx", + "avx2", + "avxifma", + "avxneconvert", + "avxvnni", + "avxvnniint8", + "bmi", + "bmi2", + "clflushopt", + "clwb", + "cmov", + "cmpccxadd", + "crc32", + "cx16", + "cx8", + "enqcmd", + "f16c", + "fma", + "fsgsbase", + "fxsr", + "gfni", + "hreset", + "invpcid", + "kl", + "lzcnt", + "mmx", + "movbe", + "movdir64b", + "movdiri", + "nopl", + "pclmul", + "pconfig", + "pku", + "popcnt", + "prfchw", + "ptwrite", + "rdpid", + "rdrnd", + "rdseed", + "sahf", + "serialize", + "sha", + "shstk", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "uintr", + "vaes", + "vpclmulqdq", + "waitpkg", + "widekl", + "x87", + "xsave", + "xsavec", + "xsaveopt", + "xsaves" + ], + "primitives": { + "aes_round": [ + "AESENC" + ], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [ + "VPMADD52LUQ/HUQ (VEX)" + ], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "arrowlake-s": { + "backend": "simd_avx2", + "features": [ + "64bit", + "adx", + "aes", + "avx", + "avx2", + "avxifma", + "avxneconvert", + "avxvnni", + "avxvnniint16", + "avxvnniint8", + "bmi", + "bmi2", + "clflushopt", + "clwb", + "cmov", + "cmpccxadd", + "crc32", + "cx16", + "cx8", + "enqcmd", + "f16c", + "fma", + "fsgsbase", + "fxsr", + "gfni", + "hreset", + "invpcid", + "kl", + "lzcnt", + "mmx", + "movbe", + "movdir64b", + "movdiri", + "nopl", + "pclmul", + "pconfig", + "pku", + "popcnt", + "prfchw", + "ptwrite", + "rdpid", + "rdrnd", + "rdseed", + "sahf", + "serialize", + "sha", + "sha512", + "shstk", + "sm3", + "sm4", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "uintr", + "vaes", + "vpclmulqdq", + "waitpkg", + "widekl", + "x87", + "xsave", + "xsavec", + "xsaveopt", + "xsaves" + ], + "primitives": { + "aes_round": [ + "AESENC" + ], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [ + "VPMADD52LUQ/HUQ (VEX)" + ], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "arrowlake_s": { + "backend": "simd_avx2", + "features": [ + "64bit", + "adx", + "aes", + "avx", + "avx2", + "avxifma", + "avxneconvert", + "avxvnni", + "avxvnniint16", + "avxvnniint8", + "bmi", + "bmi2", + "clflushopt", + "clwb", + "cmov", + "cmpccxadd", + "crc32", + "cx16", + "cx8", + "enqcmd", + "f16c", + "fma", + "fsgsbase", + "fxsr", + "gfni", + "hreset", + "invpcid", + "kl", + "lzcnt", + "mmx", + "movbe", + "movdir64b", + "movdiri", + "nopl", + "pclmul", + "pconfig", + "pku", + "popcnt", + "prfchw", + "ptwrite", + "rdpid", + "rdrnd", + "rdseed", + "sahf", + "serialize", + "sha", + "sha512", + "shstk", + "sm3", + "sm4", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "uintr", + "vaes", + "vpclmulqdq", + "waitpkg", + "widekl", + "x87", + "xsave", + "xsavec", + "xsaveopt", + "xsaves" + ], + "primitives": { + "aes_round": [ + "AESENC" + ], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [ + "VPMADD52LUQ/HUQ (VEX)" + ], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "atom": { + "backend": "simd_avx2 (no avx2: array polyfill)", + "features": [ + "", + "64bit", + "cmov", + "cx16", + "cx8", + "fxsr", + "mmx", + "movbe", + "nopl", + "sahf", + "sse", + "sse2", + "sse3", + "ssse3", + "x87" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)" + ], + "permute_var_u32": [], + "shift_var_u32": [] + } + }, + "atom_sse4_2": { + "backend": "simd_avx2 (no avx2: array polyfill)", + "features": [ + "64bit", + "cmov", + "crc32", + "cx16", + "cx8", + "fxsr", + "mmx", + "movbe", + "nopl", + "pclmul", + "popcnt", + "prfchw", + "rdrnd", + "sahf", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "x87" + ], + "primitives": { + "aes_round": [], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)" + ], + "permute_var_u32": [], + "shift_var_u32": [] + } + }, + "atom_sse4_2_movbe": { + "backend": "simd_avx2 (no avx2: array polyfill)", + "features": [ + "64bit", + "aes", + "clflushopt", + "cmov", + "crc32", + "cx16", + "cx8", + "fsgsbase", + "fxsr", + "mmx", + "movbe", + "nopl", + "pclmul", + "popcnt", + "prfchw", + "rdrnd", + "rdseed", + "sahf", + "sha", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "x87", + "xsave", + "xsavec", + "xsaveopt", + "xsaves" + ], + "primitives": { + "aes_round": [ + "AESENC" + ], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)" + ], + "permute_var_u32": [], + "shift_var_u32": [] + } + }, + "bdver1": { + "backend": "simd_avx2 (no avx2: array polyfill)", + "features": [ + "64bit", + "aes", + "avx", + "cmov", + "crc32", + "cx16", + "cx8", + "fma4", + "fxsr", + "lwp", + "lzcnt", + "mmx", + "nopl", + "pclmul", + "popcnt", + "prfchw", + "sahf", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "sse4a", + "ssse3", + "x87", + "xop", + "xsave" + ], + "primitives": { + "aes_round": [ + "AESENC" + ], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)" + ], + "permute_var_u32": [], + "shift_var_u32": [] + } + }, + "bdver2": { + "backend": "simd_avx2 (no avx2: array polyfill)", + "features": [ + "64bit", + "aes", + "avx", + "bmi", + "cmov", + "crc32", + "cx16", + "cx8", + "f16c", + "fma", + "fma4", + "fxsr", + "lwp", + "lzcnt", + "mmx", + "nopl", + "pclmul", + "popcnt", + "prfchw", + "sahf", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "sse4a", + "ssse3", + "tbm", + "x87", + "xop", + "xsave" + ], + "primitives": { + "aes_round": [ + "AESENC" + ], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)" + ], + "permute_var_u32": [], + "shift_var_u32": [] + } + }, + "bdver3": { + "backend": "simd_avx2 (no avx2: array polyfill)", + "features": [ + "64bit", + "aes", + "avx", + "bmi", + "cmov", + "crc32", + "cx16", + "cx8", + "f16c", + "fma", + "fma4", + "fsgsbase", + "fxsr", + "lwp", + "lzcnt", + "mmx", + "nopl", + "pclmul", + "popcnt", + "prfchw", + "sahf", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "sse4a", + "ssse3", + "tbm", + "x87", + "xop", + "xsave", + "xsaveopt" + ], + "primitives": { + "aes_round": [ + "AESENC" + ], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)" + ], + "permute_var_u32": [], + "shift_var_u32": [] + } + }, + "bdver4": { + "backend": "simd_avx2", + "features": [ + "64bit", + "aes", + "avx", + "avx2", + "bmi", + "bmi2", + "cmov", + "crc32", + "cx16", + "cx8", + "f16c", + "fma", + "fma4", + "fsgsbase", + "fxsr", + "lwp", + "lzcnt", + "mmx", + "movbe", + "mwaitx", + "nopl", + "pclmul", + "popcnt", + "prfchw", + "rdrnd", + "sahf", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "sse4a", + "ssse3", + "tbm", + "x87", + "xop", + "xsave", + "xsaveopt" + ], + "primitives": { + "aes_round": [ + "AESENC" + ], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "bonnell": { + "backend": "simd_avx2 (no avx2: array polyfill)", + "features": [ + "", + "64bit", + "cmov", + "cx16", + "cx8", + "fxsr", + "mmx", + "movbe", + "nopl", + "sahf", + "sse", + "sse2", + "sse3", + "ssse3", + "x87" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)" + ], + "permute_var_u32": [], + "shift_var_u32": [] + } + }, + "broadwell": { + "backend": "simd_avx2", + "features": [ + "64bit", + "adx", + "avx", + "avx2", + "bmi", + "bmi2", + "cmov", + "crc32", + "cx16", + "cx8", + "ermsb", + "f16c", + "fma", + "fsgsbase", + "fxsr", + "invpcid", + "lzcnt", + "mmx", + "movbe", + "nopl", + "pclmul", + "popcnt", + "prfchw", + "rdrnd", + "rdseed", + "sahf", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "x87", + "xsave", + "xsaveopt" + ], + "primitives": { + "aes_round": [], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "btver2": { + "backend": "simd_avx2 (no avx2: array polyfill)", + "features": [ + "64bit", + "aes", + "avx", + "bmi", + "cmov", + "crc32", + "cx16", + "cx8", + "f16c", + "fxsr", + "lzcnt", + "mmx", + "movbe", + "nopl", + "pclmul", + "popcnt", + "prfchw", + "sahf", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "sse4a", + "ssse3", + "x87", + "xsave", + "xsaveopt" + ], + "primitives": { + "aes_round": [ + "AESENC" + ], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)" + ], + "permute_var_u32": [], + "shift_var_u32": [] + } + }, + "cannonlake": { + "backend": "simd_avx512", + "features": [ + "64bit", + "adx", + "aes", + "avx", + "avx2", + "avx512bw", + "avx512cd", + "avx512dq", + "avx512f", + "avx512ifma", + "avx512vbmi", + "avx512vl", + "bmi", + "bmi2", + "clflushopt", + "cmov", + "crc32", + "cx16", + "cx8", + "ermsb", + "f16c", + "fma", + "fsgsbase", + "fxsr", + "invpcid", + "lzcnt", + "mmx", + "movbe", + "nopl", + "pclmul", + "pku", + "popcnt", + "prfchw", + "rdrnd", + "rdseed", + "sahf", + "sha", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "x87", + "xsave", + "xsavec", + "xsaveopt", + "xsaves" + ], + "primitives": { + "aes_round": [ + "AESENC" + ], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [ + "VPMADD52LUQ/HUQ (EVEX)" + ], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)", + "VPMULUDQ (zmm, AVX-512F)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "cascadelake": { + "backend": "simd_avx512", + "features": [ + "64bit", + "adx", + "aes", + "avx", + "avx2", + "avx512bw", + "avx512cd", + "avx512dq", + "avx512f", + "avx512vl", + "avx512vnni", + "bmi", + "bmi2", + "clflushopt", + "clwb", + "cmov", + "crc32", + "cx16", + "cx8", + "ermsb", + "f16c", + "fma", + "fsgsbase", + "fxsr", + "invpcid", + "lzcnt", + "mmx", + "movbe", + "nopl", + "pclmul", + "pku", + "popcnt", + "prfchw", + "rdrnd", + "rdseed", + "sahf", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "x87", + "xsave", + "xsavec", + "xsaveopt", + "xsaves" + ], + "primitives": { + "aes_round": [ + "AESENC" + ], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)", + "VPMULUDQ (zmm, AVX-512F)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "clearwaterforest": { + "backend": "simd_avx2", + "features": [ + "64bit", + "adx", + "aes", + "avx", + "avx2", + "avxifma", + "avxneconvert", + "avxvnni", + "avxvnniint16", + "avxvnniint8", + "bmi", + "bmi2", + "cldemote", + "clflushopt", + "clwb", + "cmov", + "cmpccxadd", + "crc32", + "cx16", + "cx8", + "enqcmd", + "f16c", + "fma", + "fsgsbase", + "fxsr", + "gfni", + "hreset", + "invpcid", + "lzcnt", + "mmx", + "movbe", + "movdir64b", + "movdiri", + "nopl", + "pclmul", + "pconfig", + "pku", + "popcnt", + "prefetchi", + "prfchw", + "ptwrite", + "rdpid", + "rdrnd", + "rdseed", + "sahf", + "serialize", + "sha", + "sha512", + "shstk", + "sm3", + "sm4", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "uintr", + "usermsr", + "vaes", + "vpclmulqdq", + "waitpkg", + "x87", + "xsave", + "xsavec", + "xsaveopt", + "xsaves" + ], + "primitives": { + "aes_round": [ + "AESENC" + ], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [ + "VPMADD52LUQ/HUQ (VEX)" + ], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "cooperlake": { + "backend": "simd_avx512", + "features": [ + "64bit", + "adx", + "aes", + "avx", + "avx2", + "avx512bf16", + "avx512bw", + "avx512cd", + "avx512dq", + "avx512f", + "avx512vl", + "avx512vnni", + "bmi", + "bmi2", + "clflushopt", + "clwb", + "cmov", + "crc32", + "cx16", + "cx8", + "ermsb", + "f16c", + "fma", + "fsgsbase", + "fxsr", + "invpcid", + "lzcnt", + "mmx", + "movbe", + "nopl", + "pclmul", + "pku", + "popcnt", + "prfchw", + "rdrnd", + "rdseed", + "sahf", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "x87", + "xsave", + "xsavec", + "xsaveopt", + "xsaves" + ], + "primitives": { + "aes_round": [ + "AESENC" + ], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)", + "VPMULUDQ (zmm, AVX-512F)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "core-avx-i": { + "backend": "simd_avx2 (no avx2: array polyfill)", + "features": [ + "64bit", + "avx", + "cmov", + "crc32", + "cx16", + "cx8", + "f16c", + "fsgsbase", + "fxsr", + "mmx", + "nopl", + "pclmul", + "popcnt", + "rdrnd", + "sahf", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "x87", + "xsave", + "xsaveopt" + ], + "primitives": { + "aes_round": [], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)" + ], + "permute_var_u32": [], + "shift_var_u32": [] + } + }, + "core-avx2": { + "backend": "simd_avx2", + "features": [ + "64bit", + "avx", + "avx2", + "bmi", + "bmi2", + "cmov", + "crc32", + "cx16", + "cx8", + "ermsb", + "f16c", + "fma", + "fsgsbase", + "fxsr", + "invpcid", + "lzcnt", + "mmx", + "movbe", + "nopl", + "pclmul", + "popcnt", + "rdrnd", + "sahf", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "x87", + "xsave", + "xsaveopt" + ], + "primitives": { + "aes_round": [], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "core2": { + "backend": "simd_avx2 (no avx2: array polyfill)", + "features": [ + "64bit", + "cmov", + "cx16", + "cx8", + "fxsr", + "mmx", + "nopl", + "sahf", + "sse", + "sse2", + "sse3", + "ssse3", + "x87" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)" + ], + "permute_var_u32": [], + "shift_var_u32": [] + } + }, + "core_2_duo_sse4_1": { + "backend": "simd_avx2 (no avx2: array polyfill)", + "features": [ + "64bit", + "cmov", + "cx16", + "cx8", + "fxsr", + "mmx", + "nopl", + "sahf", + "sse", + "sse2", + "sse3", + "sse4.1", + "ssse3", + "x87" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)" + ], + "permute_var_u32": [], + "shift_var_u32": [] + } + }, + "core_2_duo_ssse3": { + "backend": "simd_avx2 (no avx2: array polyfill)", + "features": [ + "64bit", + "cmov", + "cx16", + "cx8", + "fxsr", + "mmx", + "nopl", + "sahf", + "sse", + "sse2", + "sse3", + "ssse3", + "x87" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)" + ], + "permute_var_u32": [], + "shift_var_u32": [] + } + }, + "core_2nd_gen_avx": { + "backend": "simd_avx2 (no avx2: array polyfill)", + "features": [ + "64bit", + "avx", + "cmov", + "crc32", + "cx16", + "cx8", + "fxsr", + "mmx", + "nopl", + "pclmul", + "popcnt", + "sahf", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "x87", + "xsave", + "xsaveopt" + ], + "primitives": { + "aes_round": [], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)" + ], + "permute_var_u32": [], + "shift_var_u32": [] + } + }, + "core_3rd_gen_avx": { + "backend": "simd_avx2 (no avx2: array polyfill)", + "features": [ + "64bit", + "avx", + "cmov", + "crc32", + "cx16", + "cx8", + "f16c", + "fsgsbase", + "fxsr", + "mmx", + "nopl", + "pclmul", + "popcnt", + "rdrnd", + "sahf", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "x87", + "xsave", + "xsaveopt" + ], + "primitives": { + "aes_round": [], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)" + ], + "permute_var_u32": [], + "shift_var_u32": [] + } + }, + "core_4th_gen_avx": { + "backend": "simd_avx2", + "features": [ + "64bit", + "avx", + "avx2", + "bmi", + "bmi2", + "cmov", + "crc32", + "cx16", + "cx8", + "ermsb", + "f16c", + "fma", + "fsgsbase", + "fxsr", + "invpcid", + "lzcnt", + "mmx", + "movbe", + "nopl", + "pclmul", + "popcnt", + "rdrnd", + "sahf", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "x87", + "xsave", + "xsaveopt" + ], + "primitives": { + "aes_round": [], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "core_4th_gen_avx_tsx": { + "backend": "simd_avx2", + "features": [ + "64bit", + "avx", + "avx2", + "bmi", + "bmi2", + "cmov", + "crc32", + "cx16", + "cx8", + "ermsb", + "f16c", + "fma", + "fsgsbase", + "fxsr", + "invpcid", + "lzcnt", + "mmx", + "movbe", + "nopl", + "pclmul", + "popcnt", + "rdrnd", + "sahf", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "x87", + "xsave", + "xsaveopt" + ], + "primitives": { + "aes_round": [], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "core_5th_gen_avx": { + "backend": "simd_avx2", + "features": [ + "64bit", + "adx", + "avx", + "avx2", + "bmi", + "bmi2", + "cmov", + "crc32", + "cx16", + "cx8", + "ermsb", + "f16c", + "fma", + "fsgsbase", + "fxsr", + "invpcid", + "lzcnt", + "mmx", + "movbe", + "nopl", + "pclmul", + "popcnt", + "prfchw", + "rdrnd", + "rdseed", + "sahf", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "x87", + "xsave", + "xsaveopt" + ], + "primitives": { + "aes_round": [], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "core_5th_gen_avx_tsx": { + "backend": "simd_avx2", + "features": [ + "64bit", + "adx", + "avx", + "avx2", + "bmi", + "bmi2", + "cmov", + "crc32", + "cx16", + "cx8", + "ermsb", + "f16c", + "fma", + "fsgsbase", + "fxsr", + "invpcid", + "lzcnt", + "mmx", + "movbe", + "nopl", + "pclmul", + "popcnt", + "prfchw", + "rdrnd", + "rdseed", + "sahf", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "x87", + "xsave", + "xsaveopt" + ], + "primitives": { + "aes_round": [], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "core_aes_pclmulqdq": { + "backend": "simd_avx2 (no avx2: array polyfill)", + "features": [ + "64bit", + "cmov", + "crc32", + "cx16", + "cx8", + "fxsr", + "mmx", + "nopl", + "pclmul", + "popcnt", + "sahf", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "x87" + ], + "primitives": { + "aes_round": [], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)" + ], + "permute_var_u32": [], + "shift_var_u32": [] + } + }, + "core_i7_sse4_2": { + "backend": "simd_avx2 (no avx2: array polyfill)", + "features": [ + "64bit", + "cmov", + "crc32", + "cx16", + "cx8", + "fxsr", + "mmx", + "nopl", + "popcnt", + "sahf", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "x87" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)" + ], + "permute_var_u32": [], + "shift_var_u32": [] + } + }, + "corei7": { + "backend": "simd_avx2 (no avx2: array polyfill)", + "features": [ + "64bit", + "cmov", + "crc32", + "cx16", + "cx8", + "fxsr", + "mmx", + "nopl", + "popcnt", + "sahf", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "x87" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)" + ], + "permute_var_u32": [], + "shift_var_u32": [] + } + }, + "corei7-avx": { + "backend": "simd_avx2 (no avx2: array polyfill)", + "features": [ + "64bit", + "avx", + "cmov", + "crc32", + "cx16", + "cx8", + "fxsr", + "mmx", + "nopl", + "pclmul", + "popcnt", + "sahf", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "x87", + "xsave", + "xsaveopt" + ], + "primitives": { + "aes_round": [], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)" + ], + "permute_var_u32": [], + "shift_var_u32": [] + } + }, + "diamondrapids": { + "backend": "simd_avx512", + "features": [ + "64bit", + "adx", + "aes", + "amx-avx512", + "amx-bf16", + "amx-complex", + "amx-fp16", + "amx-fp8", + "amx-int8", + "amx-movrs", + "amx-tf32", + "amx-tile", + "avx", + "avx10.1", + "avx10.2", + "avx2", + "avx512bf16", + "avx512bitalg", + "avx512bw", + "avx512cd", + "avx512dq", + "avx512f", + "avx512fp16", + "avx512ifma", + "avx512vbmi", + "avx512vbmi2", + "avx512vl", + "avx512vnni", + "avx512vpopcntdq", + "avxifma", + "avxneconvert", + "avxvnni", + "avxvnniint16", + "avxvnniint8", + "bmi", + "bmi2", + "ccmp", + "cldemote", + "clflushopt", + "clwb", + "cmov", + "cmpccxadd", + "crc32", + "cx16", + "cx8", + "egpr", + "enqcmd", + "ermsb", + "f16c", + "fma", + "fsgsbase", + "fsrm", + "fxsr", + "gfni", + "invpcid", + "lzcnt", + "mmx", + "movbe", + "movdir64b", + "movdiri", + "movrs", + "ndd", + "nf", + "nopl", + "pclmul", + "pconfig", + "pku", + "popcnt", + "ppx", + "prefetchi", + "prfchw", + "ptwrite", + "push2pop2", + "rdpid", + "rdrnd", + "rdseed", + "sahf", + "serialize", + "sha", + "sha512", + "shstk", + "sm3", + "sm4", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "tsxldtrk", + "uintr", + "vaes", + "vpclmulqdq", + "waitpkg", + "wbnoinvd", + "x87", + "xsave", + "xsavec", + "xsaveopt", + "xsaves", + "zu" + ], + "primitives": { + "aes_round": [ + "AESENC", + "VAESENC (zmm)" + ], + "clmul": [ + "PCLMULQDQ", + "VPCLMULQDQ (zmm)" + ], + "ifma52": [ + "VPMADD52LUQ/HUQ (EVEX)", + "VPMADD52LUQ/HUQ (VEX)" + ], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)", + "VPMULUDQ (zmm, AVX-512F)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "emeraldrapids": { + "backend": "simd_avx512", + "features": [ + "64bit", + "adx", + "aes", + "amx-bf16", + "amx-int8", + "amx-tile", + "avx", + "avx2", + "avx512bf16", + "avx512bitalg", + "avx512bw", + "avx512cd", + "avx512dq", + "avx512f", + "avx512fp16", + "avx512ifma", + "avx512vbmi", + "avx512vbmi2", + "avx512vl", + "avx512vnni", + "avx512vpopcntdq", + "avxvnni", + "bmi", + "bmi2", + "cldemote", + "clflushopt", + "clwb", + "cmov", + "crc32", + "cx16", + "cx8", + "enqcmd", + "ermsb", + "f16c", + "fma", + "fsgsbase", + "fsrm", + "fxsr", + "gfni", + "invpcid", + "lzcnt", + "mmx", + "movbe", + "movdir64b", + "movdiri", + "nopl", + "pclmul", + "pconfig", + "pku", + "popcnt", + "prfchw", + "ptwrite", + "rdpid", + "rdrnd", + "rdseed", + "sahf", + "serialize", + "sha", + "shstk", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "tsxldtrk", + "uintr", + "vaes", + "vpclmulqdq", + "waitpkg", + "wbnoinvd", + "x87", + "xsave", + "xsavec", + "xsaveopt", + "xsaves" + ], + "primitives": { + "aes_round": [ + "AESENC", + "VAESENC (zmm)" + ], + "clmul": [ + "PCLMULQDQ", + "VPCLMULQDQ (zmm)" + ], + "ifma52": [ + "VPMADD52LUQ/HUQ (EVEX)" + ], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)", + "VPMULUDQ (zmm, AVX-512F)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "generic": { + "backend": "simd_avx2 (no avx2: array polyfill)", + "features": [ + "64bit", + "cx8", + "x87" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [], + "permute_var_u32": [], + "shift_var_u32": [] + } + }, + "goldmont": { + "backend": "simd_avx2 (no avx2: array polyfill)", + "features": [ + "64bit", + "aes", + "clflushopt", + "cmov", + "crc32", + "cx16", + "cx8", + "fsgsbase", + "fxsr", + "mmx", + "movbe", + "nopl", + "pclmul", + "popcnt", + "prfchw", + "rdrnd", + "rdseed", + "sahf", + "sha", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "x87", + "xsave", + "xsavec", + "xsaveopt", + "xsaves" + ], + "primitives": { + "aes_round": [ + "AESENC" + ], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)" + ], + "permute_var_u32": [], + "shift_var_u32": [] + } + }, + "goldmont-plus": { + "backend": "simd_avx2 (no avx2: array polyfill)", + "features": [ + "64bit", + "aes", + "clflushopt", + "cmov", + "crc32", + "cx16", + "cx8", + "fsgsbase", + "fxsr", + "mmx", + "movbe", + "nopl", + "pclmul", + "popcnt", + "prfchw", + "ptwrite", + "rdpid", + "rdrnd", + "rdseed", + "sahf", + "sha", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "x87", + "xsave", + "xsavec", + "xsaveopt", + "xsaves" + ], + "primitives": { + "aes_round": [ + "AESENC" + ], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)" + ], + "permute_var_u32": [], + "shift_var_u32": [] + } + }, + "goldmont_plus": { + "backend": "simd_avx2 (no avx2: array polyfill)", + "features": [ + "64bit", + "aes", + "clflushopt", + "cmov", + "crc32", + "cx16", + "cx8", + "fsgsbase", + "fxsr", + "mmx", + "movbe", + "nopl", + "pclmul", + "popcnt", + "prfchw", + "ptwrite", + "rdpid", + "rdrnd", + "rdseed", + "sahf", + "sha", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "x87", + "xsave", + "xsavec", + "xsaveopt", + "xsaves" + ], + "primitives": { + "aes_round": [ + "AESENC" + ], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)" + ], + "permute_var_u32": [], + "shift_var_u32": [] + } + }, + "gracemont": { + "backend": "simd_avx2", + "features": [ + "64bit", + "adx", + "aes", + "avx", + "avx2", + "avxvnni", + "bmi", + "bmi2", + "clflushopt", + "clwb", + "cmov", + "crc32", + "cx16", + "cx8", + "f16c", + "fma", + "fsgsbase", + "fxsr", + "gfni", + "hreset", + "invpcid", + "kl", + "lzcnt", + "mmx", + "movbe", + "movdir64b", + "movdiri", + "nopl", + "pclmul", + "pconfig", + "pku", + "popcnt", + "prfchw", + "ptwrite", + "rdpid", + "rdrnd", + "rdseed", + "sahf", + "serialize", + "sha", + "shstk", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "vaes", + "vpclmulqdq", + "waitpkg", + "widekl", + "x87", + "xsave", + "xsavec", + "xsaveopt", + "xsaves" + ], + "primitives": { + "aes_round": [ + "AESENC" + ], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "grandridge": { + "backend": "simd_avx2", + "features": [ + "64bit", + "adx", + "aes", + "avx", + "avx2", + "avxifma", + "avxneconvert", + "avxvnni", + "avxvnniint8", + "bmi", + "bmi2", + "cldemote", + "clflushopt", + "clwb", + "cmov", + "cmpccxadd", + "crc32", + "cx16", + "cx8", + "enqcmd", + "f16c", + "fma", + "fsgsbase", + "fxsr", + "gfni", + "hreset", + "invpcid", + "kl", + "lzcnt", + "mmx", + "movbe", + "movdir64b", + "movdiri", + "nopl", + "pclmul", + "pconfig", + "pku", + "popcnt", + "prfchw", + "ptwrite", + "rdpid", + "rdrnd", + "rdseed", + "sahf", + "serialize", + "sha", + "shstk", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "uintr", + "vaes", + "vpclmulqdq", + "waitpkg", + "widekl", + "x87", + "xsave", + "xsavec", + "xsaveopt", + "xsaves" + ], + "primitives": { + "aes_round": [ + "AESENC" + ], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [ + "VPMADD52LUQ/HUQ (VEX)" + ], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "graniterapids": { + "backend": "simd_avx512", + "features": [ + "64bit", + "adx", + "aes", + "amx-bf16", + "amx-fp16", + "amx-int8", + "amx-tile", + "avx", + "avx2", + "avx512bf16", + "avx512bitalg", + "avx512bw", + "avx512cd", + "avx512dq", + "avx512f", + "avx512fp16", + "avx512ifma", + "avx512vbmi", + "avx512vbmi2", + "avx512vl", + "avx512vnni", + "avx512vpopcntdq", + "avxvnni", + "bmi", + "bmi2", + "cldemote", + "clflushopt", + "clwb", + "cmov", + "crc32", + "cx16", + "cx8", + "enqcmd", + "ermsb", + "f16c", + "fma", + "fsgsbase", + "fsrm", + "fxsr", + "gfni", + "invpcid", + "lzcnt", + "mmx", + "movbe", + "movdir64b", + "movdiri", + "nopl", + "pclmul", + "pconfig", + "pku", + "popcnt", + "prefetchi", + "prfchw", + "ptwrite", + "rdpid", + "rdrnd", + "rdseed", + "sahf", + "serialize", + "sha", + "shstk", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "tsxldtrk", + "uintr", + "vaes", + "vpclmulqdq", + "waitpkg", + "wbnoinvd", + "x87", + "xsave", + "xsavec", + "xsaveopt", + "xsaves" + ], + "primitives": { + "aes_round": [ + "AESENC", + "VAESENC (zmm)" + ], + "clmul": [ + "PCLMULQDQ", + "VPCLMULQDQ (zmm)" + ], + "ifma52": [ + "VPMADD52LUQ/HUQ (EVEX)" + ], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)", + "VPMULUDQ (zmm, AVX-512F)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "graniterapids-d": { + "backend": "simd_avx512", + "features": [ + "64bit", + "adx", + "aes", + "amx-bf16", + "amx-complex", + "amx-fp16", + "amx-int8", + "amx-tile", + "avx", + "avx2", + "avx512bf16", + "avx512bitalg", + "avx512bw", + "avx512cd", + "avx512dq", + "avx512f", + "avx512fp16", + "avx512ifma", + "avx512vbmi", + "avx512vbmi2", + "avx512vl", + "avx512vnni", + "avx512vpopcntdq", + "avxvnni", + "bmi", + "bmi2", + "cldemote", + "clflushopt", + "clwb", + "cmov", + "crc32", + "cx16", + "cx8", + "enqcmd", + "ermsb", + "f16c", + "fma", + "fsgsbase", + "fsrm", + "fxsr", + "gfni", + "invpcid", + "lzcnt", + "mmx", + "movbe", + "movdir64b", + "movdiri", + "nopl", + "pclmul", + "pconfig", + "pku", + "popcnt", + "prefetchi", + "prfchw", + "ptwrite", + "rdpid", + "rdrnd", + "rdseed", + "sahf", + "serialize", + "sha", + "shstk", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "tsxldtrk", + "uintr", + "vaes", + "vpclmulqdq", + "waitpkg", + "wbnoinvd", + "x87", + "xsave", + "xsavec", + "xsaveopt", + "xsaves" + ], + "primitives": { + "aes_round": [ + "AESENC", + "VAESENC (zmm)" + ], + "clmul": [ + "PCLMULQDQ", + "VPCLMULQDQ (zmm)" + ], + "ifma52": [ + "VPMADD52LUQ/HUQ (EVEX)" + ], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)", + "VPMULUDQ (zmm, AVX-512F)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "graniterapids_d": { + "backend": "simd_avx512", + "features": [ + "64bit", + "adx", + "aes", + "amx-bf16", + "amx-complex", + "amx-fp16", + "amx-int8", + "amx-tile", + "avx", + "avx2", + "avx512bf16", + "avx512bitalg", + "avx512bw", + "avx512cd", + "avx512dq", + "avx512f", + "avx512fp16", + "avx512ifma", + "avx512vbmi", + "avx512vbmi2", + "avx512vl", + "avx512vnni", + "avx512vpopcntdq", + "avxvnni", + "bmi", + "bmi2", + "cldemote", + "clflushopt", + "clwb", + "cmov", + "crc32", + "cx16", + "cx8", + "enqcmd", + "ermsb", + "f16c", + "fma", + "fsgsbase", + "fsrm", + "fxsr", + "gfni", + "invpcid", + "lzcnt", + "mmx", + "movbe", + "movdir64b", + "movdiri", + "nopl", + "pclmul", + "pconfig", + "pku", + "popcnt", + "prefetchi", + "prfchw", + "ptwrite", + "rdpid", + "rdrnd", + "rdseed", + "sahf", + "serialize", + "sha", + "shstk", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "tsxldtrk", + "uintr", + "vaes", + "vpclmulqdq", + "waitpkg", + "wbnoinvd", + "x87", + "xsave", + "xsavec", + "xsaveopt", + "xsaves" + ], + "primitives": { + "aes_round": [ + "AESENC", + "VAESENC (zmm)" + ], + "clmul": [ + "PCLMULQDQ", + "VPCLMULQDQ (zmm)" + ], + "ifma52": [ + "VPMADD52LUQ/HUQ (EVEX)" + ], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)", + "VPMULUDQ (zmm, AVX-512F)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "haswell": { + "backend": "simd_avx2", + "features": [ + "64bit", + "avx", + "avx2", + "bmi", + "bmi2", + "cmov", + "crc32", + "cx16", + "cx8", + "ermsb", + "f16c", + "fma", + "fsgsbase", + "fxsr", + "invpcid", + "lzcnt", + "mmx", + "movbe", + "nopl", + "pclmul", + "popcnt", + "rdrnd", + "sahf", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "x87", + "xsave", + "xsaveopt" + ], + "primitives": { + "aes_round": [], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "icelake-client": { + "backend": "simd_avx512", + "features": [ + "64bit", + "adx", + "aes", + "avx", + "avx2", + "avx512bitalg", + "avx512bw", + "avx512cd", + "avx512dq", + "avx512f", + "avx512ifma", + "avx512vbmi", + "avx512vbmi2", + "avx512vl", + "avx512vnni", + "avx512vpopcntdq", + "bmi", + "bmi2", + "clflushopt", + "cmov", + "crc32", + "cx16", + "cx8", + "ermsb", + "f16c", + "fma", + "fsgsbase", + "fsrm", + "fxsr", + "gfni", + "invpcid", + "lzcnt", + "mmx", + "movbe", + "nopl", + "pclmul", + "pku", + "popcnt", + "prfchw", + "rdpid", + "rdrnd", + "rdseed", + "sahf", + "sha", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "vaes", + "vpclmulqdq", + "x87", + "xsave", + "xsavec", + "xsaveopt", + "xsaves" + ], + "primitives": { + "aes_round": [ + "AESENC", + "VAESENC (zmm)" + ], + "clmul": [ + "PCLMULQDQ", + "VPCLMULQDQ (zmm)" + ], + "ifma52": [ + "VPMADD52LUQ/HUQ (EVEX)" + ], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)", + "VPMULUDQ (zmm, AVX-512F)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "icelake-server": { + "backend": "simd_avx512", + "features": [ + "64bit", + "adx", + "aes", + "avx", + "avx2", + "avx512bitalg", + "avx512bw", + "avx512cd", + "avx512dq", + "avx512f", + "avx512ifma", + "avx512vbmi", + "avx512vbmi2", + "avx512vl", + "avx512vnni", + "avx512vpopcntdq", + "bmi", + "bmi2", + "clflushopt", + "clwb", + "cmov", + "crc32", + "cx16", + "cx8", + "ermsb", + "f16c", + "fma", + "fsgsbase", + "fsrm", + "fxsr", + "gfni", + "invpcid", + "lzcnt", + "mmx", + "movbe", + "nopl", + "pclmul", + "pconfig", + "pku", + "popcnt", + "prfchw", + "rdpid", + "rdrnd", + "rdseed", + "sahf", + "sha", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "vaes", + "vpclmulqdq", + "wbnoinvd", + "x87", + "xsave", + "xsavec", + "xsaveopt", + "xsaves" + ], + "primitives": { + "aes_round": [ + "AESENC", + "VAESENC (zmm)" + ], + "clmul": [ + "PCLMULQDQ", + "VPCLMULQDQ (zmm)" + ], + "ifma52": [ + "VPMADD52LUQ/HUQ (EVEX)" + ], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)", + "VPMULUDQ (zmm, AVX-512F)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "icelake_client": { + "backend": "simd_avx512", + "features": [ + "64bit", + "adx", + "aes", + "avx", + "avx2", + "avx512bitalg", + "avx512bw", + "avx512cd", + "avx512dq", + "avx512f", + "avx512ifma", + "avx512vbmi", + "avx512vbmi2", + "avx512vl", + "avx512vnni", + "avx512vpopcntdq", + "bmi", + "bmi2", + "clflushopt", + "cmov", + "crc32", + "cx16", + "cx8", + "ermsb", + "f16c", + "fma", + "fsgsbase", + "fsrm", + "fxsr", + "gfni", + "invpcid", + "lzcnt", + "mmx", + "movbe", + "nopl", + "pclmul", + "pku", + "popcnt", + "prfchw", + "rdpid", + "rdrnd", + "rdseed", + "sahf", + "sha", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "vaes", + "vpclmulqdq", + "x87", + "xsave", + "xsavec", + "xsaveopt", + "xsaves" + ], + "primitives": { + "aes_round": [ + "AESENC", + "VAESENC (zmm)" + ], + "clmul": [ + "PCLMULQDQ", + "VPCLMULQDQ (zmm)" + ], + "ifma52": [ + "VPMADD52LUQ/HUQ (EVEX)" + ], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)", + "VPMULUDQ (zmm, AVX-512F)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "icelake_server": { + "backend": "simd_avx512", + "features": [ + "64bit", + "adx", + "aes", + "avx", + "avx2", + "avx512bitalg", + "avx512bw", + "avx512cd", + "avx512dq", + "avx512f", + "avx512ifma", + "avx512vbmi", + "avx512vbmi2", + "avx512vl", + "avx512vnni", + "avx512vpopcntdq", + "bmi", + "bmi2", + "clflushopt", + "clwb", + "cmov", + "crc32", + "cx16", + "cx8", + "ermsb", + "f16c", + "fma", + "fsgsbase", + "fsrm", + "fxsr", + "gfni", + "invpcid", + "lzcnt", + "mmx", + "movbe", + "nopl", + "pclmul", + "pconfig", + "pku", + "popcnt", + "prfchw", + "rdpid", + "rdrnd", + "rdseed", + "sahf", + "sha", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "vaes", + "vpclmulqdq", + "wbnoinvd", + "x87", + "xsave", + "xsavec", + "xsaveopt", + "xsaves" + ], + "primitives": { + "aes_round": [ + "AESENC", + "VAESENC (zmm)" + ], + "clmul": [ + "PCLMULQDQ", + "VPCLMULQDQ (zmm)" + ], + "ifma52": [ + "VPMADD52LUQ/HUQ (EVEX)" + ], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)", + "VPMULUDQ (zmm, AVX-512F)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "ivybridge": { + "backend": "simd_avx2 (no avx2: array polyfill)", + "features": [ + "64bit", + "avx", + "cmov", + "crc32", + "cx16", + "cx8", + "f16c", + "fsgsbase", + "fxsr", + "mmx", + "nopl", + "pclmul", + "popcnt", + "rdrnd", + "sahf", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "x87", + "xsave", + "xsaveopt" + ], + "primitives": { + "aes_round": [], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)" + ], + "permute_var_u32": [], + "shift_var_u32": [] + } + }, + "knl": { + "backend": "simd_avx512", + "features": [ + "64bit", + "adx", + "aes", + "avx", + "avx2", + "avx512cd", + "avx512f", + "bmi", + "bmi2", + "cmov", + "crc32", + "cx16", + "cx8", + "f16c", + "fma", + "fsgsbase", + "fxsr", + "lzcnt", + "mmx", + "movbe", + "nopl", + "pclmul", + "popcnt", + "prfchw", + "rdrnd", + "rdseed", + "sahf", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "x87", + "xsave", + "xsaveopt" + ], + "primitives": { + "aes_round": [ + "AESENC" + ], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)", + "VPMULUDQ (zmm, AVX-512F)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "knm": { + "backend": "simd_avx512", + "features": [ + "64bit", + "adx", + "aes", + "avx", + "avx2", + "avx512cd", + "avx512f", + "avx512vpopcntdq", + "bmi", + "bmi2", + "cmov", + "crc32", + "cx16", + "cx8", + "f16c", + "fma", + "fsgsbase", + "fxsr", + "lzcnt", + "mmx", + "movbe", + "nopl", + "pclmul", + "popcnt", + "prfchw", + "rdrnd", + "rdseed", + "sahf", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "x87", + "xsave", + "xsaveopt" + ], + "primitives": { + "aes_round": [ + "AESENC" + ], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)", + "VPMULUDQ (zmm, AVX-512F)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "lunarlake": { + "backend": "simd_avx2", + "features": [ + "64bit", + "adx", + "aes", + "avx", + "avx2", + "avxifma", + "avxneconvert", + "avxvnni", + "avxvnniint16", + "avxvnniint8", + "bmi", + "bmi2", + "clflushopt", + "clwb", + "cmov", + "cmpccxadd", + "crc32", + "cx16", + "cx8", + "enqcmd", + "f16c", + "fma", + "fsgsbase", + "fxsr", + "gfni", + "hreset", + "invpcid", + "kl", + "lzcnt", + "mmx", + "movbe", + "movdir64b", + "movdiri", + "nopl", + "pclmul", + "pconfig", + "pku", + "popcnt", + "prfchw", + "ptwrite", + "rdpid", + "rdrnd", + "rdseed", + "sahf", + "serialize", + "sha", + "sha512", + "shstk", + "sm3", + "sm4", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "uintr", + "vaes", + "vpclmulqdq", + "waitpkg", + "widekl", + "x87", + "xsave", + "xsavec", + "xsaveopt", + "xsaves" + ], + "primitives": { + "aes_round": [ + "AESENC" + ], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [ + "VPMADD52LUQ/HUQ (VEX)" + ], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "meteorlake": { + "backend": "simd_avx2", + "features": [ + "64bit", + "adx", + "aes", + "avx", + "avx2", + "avxvnni", + "bmi", + "bmi2", + "clflushopt", + "clwb", + "cmov", + "crc32", + "cx16", + "cx8", + "f16c", + "fma", + "fsgsbase", + "fxsr", + "gfni", + "hreset", + "invpcid", + "kl", + "lzcnt", + "mmx", + "movbe", + "movdir64b", + "movdiri", + "nopl", + "pclmul", + "pconfig", + "pku", + "popcnt", + "prfchw", + "ptwrite", + "rdpid", + "rdrnd", + "rdseed", + "sahf", + "serialize", + "sha", + "shstk", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "vaes", + "vpclmulqdq", + "waitpkg", + "widekl", + "x87", + "xsave", + "xsavec", + "xsaveopt", + "xsaves" + ], + "primitives": { + "aes_round": [ + "AESENC" + ], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "mic_avx512": { + "backend": "simd_avx512", + "features": [ + "64bit", + "adx", + "aes", + "avx", + "avx2", + "avx512cd", + "avx512f", + "bmi", + "bmi2", + "cmov", + "crc32", + "cx16", + "cx8", + "f16c", + "fma", + "fsgsbase", + "fxsr", + "lzcnt", + "mmx", + "movbe", + "nopl", + "pclmul", + "popcnt", + "prfchw", + "rdrnd", + "rdseed", + "sahf", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "x87", + "xsave", + "xsaveopt" + ], + "primitives": { + "aes_round": [ + "AESENC" + ], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)", + "VPMULUDQ (zmm, AVX-512F)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "nehalem": { + "backend": "simd_avx2 (no avx2: array polyfill)", + "features": [ + "64bit", + "cmov", + "crc32", + "cx16", + "cx8", + "fxsr", + "mmx", + "nopl", + "popcnt", + "sahf", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "x87" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)" + ], + "permute_var_u32": [], + "shift_var_u32": [] + } + }, + "nocona": { + "backend": "simd_avx2 (no avx2: array polyfill)", + "features": [ + "64bit", + "cmov", + "cx16", + "cx8", + "fxsr", + "mmx", + "nopl", + "sse", + "sse2", + "sse3", + "x87" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)" + ], + "permute_var_u32": [], + "shift_var_u32": [] + } + }, + "novalake": { + "backend": "simd_avx512", + "features": [ + "64bit", + "adx", + "aes", + "avx", + "avx10.1", + "avx10.2", + "avx2", + "avx512bf16", + "avx512bitalg", + "avx512bw", + "avx512cd", + "avx512dq", + "avx512f", + "avx512fp16", + "avx512ifma", + "avx512vbmi", + "avx512vbmi2", + "avx512vl", + "avx512vnni", + "avx512vpopcntdq", + "avxifma", + "avxneconvert", + "avxvnni", + "avxvnniint16", + "avxvnniint8", + "bmi", + "bmi2", + "ccmp", + "clflushopt", + "clwb", + "cmov", + "cmpccxadd", + "crc32", + "cx16", + "cx8", + "egpr", + "enqcmd", + "f16c", + "fma", + "fsgsbase", + "fxsr", + "gfni", + "hreset", + "invpcid", + "lzcnt", + "mmx", + "movbe", + "movdir64b", + "movdiri", + "movrs", + "ndd", + "nf", + "nopl", + "pclmul", + "pconfig", + "pku", + "popcnt", + "ppx", + "prefetchi", + "prfchw", + "ptwrite", + "push2pop2", + "rdpid", + "rdrnd", + "rdseed", + "sahf", + "serialize", + "sha", + "sha512", + "shstk", + "sm3", + "sm4", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "uintr", + "vaes", + "vpclmulqdq", + "waitpkg", + "x87", + "xsave", + "xsavec", + "xsaveopt", + "xsaves", + "zu" + ], + "primitives": { + "aes_round": [ + "AESENC", + "VAESENC (zmm)" + ], + "clmul": [ + "PCLMULQDQ", + "VPCLMULQDQ (zmm)" + ], + "ifma52": [ + "VPMADD52LUQ/HUQ (EVEX)", + "VPMADD52LUQ/HUQ (VEX)" + ], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)", + "VPMULUDQ (zmm, AVX-512F)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "pantherlake": { + "backend": "simd_avx2", + "features": [ + "64bit", + "adx", + "aes", + "avx", + "avx2", + "avxifma", + "avxneconvert", + "avxvnni", + "avxvnniint16", + "avxvnniint8", + "bmi", + "bmi2", + "clflushopt", + "clwb", + "cmov", + "cmpccxadd", + "crc32", + "cx16", + "cx8", + "enqcmd", + "f16c", + "fma", + "fsgsbase", + "fxsr", + "gfni", + "hreset", + "invpcid", + "lzcnt", + "mmx", + "movbe", + "movdir64b", + "movdiri", + "nopl", + "pclmul", + "pconfig", + "pku", + "popcnt", + "prfchw", + "ptwrite", + "rdpid", + "rdrnd", + "rdseed", + "sahf", + "serialize", + "sha", + "sha512", + "shstk", + "sm3", + "sm4", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "uintr", + "vaes", + "vpclmulqdq", + "waitpkg", + "x87", + "xsave", + "xsavec", + "xsaveopt", + "xsaves" + ], + "primitives": { + "aes_round": [ + "AESENC" + ], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [ + "VPMADD52LUQ/HUQ (VEX)" + ], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "penryn": { + "backend": "simd_avx2 (no avx2: array polyfill)", + "features": [ + "64bit", + "cmov", + "cx16", + "cx8", + "fxsr", + "mmx", + "nopl", + "sahf", + "sse", + "sse2", + "sse3", + "sse4.1", + "ssse3", + "x87" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)" + ], + "permute_var_u32": [], + "shift_var_u32": [] + } + }, + "pentium-m": { + "backend": "simd_avx2 (no avx2: array polyfill)", + "features": [ + "cmov", + "cx8", + "fxsr", + "mmx", + "nopl", + "sse", + "sse2", + "x87" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)" + ], + "permute_var_u32": [], + "shift_var_u32": [] + } + }, + "pentium4": { + "backend": "simd_avx2 (no avx2: array polyfill)", + "features": [ + "cmov", + "cx8", + "fxsr", + "mmx", + "nopl", + "sse", + "sse2", + "x87" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)" + ], + "permute_var_u32": [], + "shift_var_u32": [] + } + }, + "pentium4m": { + "backend": "simd_avx2 (no avx2: array polyfill)", + "features": [ + "cmov", + "cx8", + "fxsr", + "mmx", + "nopl", + "sse", + "sse2", + "x87" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)" + ], + "permute_var_u32": [], + "shift_var_u32": [] + } + }, + "pentium_4": { + "backend": "simd_avx2 (no avx2: array polyfill)", + "features": [ + "cmov", + "cx8", + "fxsr", + "mmx", + "nopl", + "sse", + "sse2", + "x87" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)" + ], + "permute_var_u32": [], + "shift_var_u32": [] + } + }, + "pentium_4_sse3": { + "backend": "simd_avx2 (no avx2: array polyfill)", + "features": [ + "cmov", + "cx8", + "fxsr", + "mmx", + "nopl", + "sse", + "sse2", + "sse3", + "x87" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)" + ], + "permute_var_u32": [], + "shift_var_u32": [] + } + }, + "pentium_m": { + "backend": "simd_avx2 (no avx2: array polyfill)", + "features": [ + "cmov", + "cx8", + "fxsr", + "mmx", + "nopl", + "sse", + "sse2", + "x87" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)" + ], + "permute_var_u32": [], + "shift_var_u32": [] + } + }, + "prescott": { + "backend": "simd_avx2 (no avx2: array polyfill)", + "features": [ + "cmov", + "cx8", + "fxsr", + "mmx", + "nopl", + "sse", + "sse2", + "sse3", + "x87" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)" + ], + "permute_var_u32": [], + "shift_var_u32": [] + } + }, + "raptorlake": { + "backend": "simd_avx2", + "features": [ + "64bit", + "adx", + "aes", + "avx", + "avx2", + "avxvnni", + "bmi", + "bmi2", + "clflushopt", + "clwb", + "cmov", + "crc32", + "cx16", + "cx8", + "f16c", + "fma", + "fsgsbase", + "fxsr", + "gfni", + "hreset", + "invpcid", + "kl", + "lzcnt", + "mmx", + "movbe", + "movdir64b", + "movdiri", + "nopl", + "pclmul", + "pconfig", + "pku", + "popcnt", + "prfchw", + "ptwrite", + "rdpid", + "rdrnd", + "rdseed", + "sahf", + "serialize", + "sha", + "shstk", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "vaes", + "vpclmulqdq", + "waitpkg", + "widekl", + "x87", + "xsave", + "xsavec", + "xsaveopt", + "xsaves" + ], + "primitives": { + "aes_round": [ + "AESENC" + ], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "rocketlake": { + "backend": "simd_avx512", + "features": [ + "64bit", + "adx", + "aes", + "avx", + "avx2", + "avx512bitalg", + "avx512bw", + "avx512cd", + "avx512dq", + "avx512f", + "avx512ifma", + "avx512vbmi", + "avx512vbmi2", + "avx512vl", + "avx512vnni", + "avx512vpopcntdq", + "bmi", + "bmi2", + "clflushopt", + "cmov", + "crc32", + "cx16", + "cx8", + "ermsb", + "f16c", + "fma", + "fsgsbase", + "fsrm", + "fxsr", + "gfni", + "invpcid", + "lzcnt", + "mmx", + "movbe", + "nopl", + "pclmul", + "pku", + "popcnt", + "prfchw", + "rdpid", + "rdrnd", + "rdseed", + "sahf", + "sha", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "vaes", + "vpclmulqdq", + "x87", + "xsave", + "xsavec", + "xsaveopt", + "xsaves" + ], + "primitives": { + "aes_round": [ + "AESENC", + "VAESENC (zmm)" + ], + "clmul": [ + "PCLMULQDQ", + "VPCLMULQDQ (zmm)" + ], + "ifma52": [ + "VPMADD52LUQ/HUQ (EVEX)" + ], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)", + "VPMULUDQ (zmm, AVX-512F)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "sandybridge": { + "backend": "simd_avx2 (no avx2: array polyfill)", + "features": [ + "64bit", + "avx", + "cmov", + "crc32", + "cx16", + "cx8", + "fxsr", + "mmx", + "nopl", + "pclmul", + "popcnt", + "sahf", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "x87", + "xsave", + "xsaveopt" + ], + "primitives": { + "aes_round": [], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)" + ], + "permute_var_u32": [], + "shift_var_u32": [] + } + }, + "sapphirerapids": { + "backend": "simd_avx512", + "features": [ + "64bit", + "adx", + "aes", + "amx-bf16", + "amx-int8", + "amx-tile", + "avx", + "avx2", + "avx512bf16", + "avx512bitalg", + "avx512bw", + "avx512cd", + "avx512dq", + "avx512f", + "avx512fp16", + "avx512ifma", + "avx512vbmi", + "avx512vbmi2", + "avx512vl", + "avx512vnni", + "avx512vpopcntdq", + "avxvnni", + "bmi", + "bmi2", + "cldemote", + "clflushopt", + "clwb", + "cmov", + "crc32", + "cx16", + "cx8", + "enqcmd", + "ermsb", + "f16c", + "fma", + "fsgsbase", + "fsrm", + "fxsr", + "gfni", + "invpcid", + "lzcnt", + "mmx", + "movbe", + "movdir64b", + "movdiri", + "nopl", + "pclmul", + "pconfig", + "pku", + "popcnt", + "prfchw", + "ptwrite", + "rdpid", + "rdrnd", + "rdseed", + "sahf", + "serialize", + "sha", + "shstk", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "tsxldtrk", + "uintr", + "vaes", + "vpclmulqdq", + "waitpkg", + "wbnoinvd", + "x87", + "xsave", + "xsavec", + "xsaveopt", + "xsaves" + ], + "primitives": { + "aes_round": [ + "AESENC", + "VAESENC (zmm)" + ], + "clmul": [ + "PCLMULQDQ", + "VPCLMULQDQ (zmm)" + ], + "ifma52": [ + "VPMADD52LUQ/HUQ (EVEX)" + ], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)", + "VPMULUDQ (zmm, AVX-512F)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "sierraforest": { + "backend": "simd_avx2", + "features": [ + "64bit", + "adx", + "aes", + "avx", + "avx2", + "avxifma", + "avxneconvert", + "avxvnni", + "avxvnniint8", + "bmi", + "bmi2", + "cldemote", + "clflushopt", + "clwb", + "cmov", + "cmpccxadd", + "crc32", + "cx16", + "cx8", + "enqcmd", + "f16c", + "fma", + "fsgsbase", + "fxsr", + "gfni", + "hreset", + "invpcid", + "kl", + "lzcnt", + "mmx", + "movbe", + "movdir64b", + "movdiri", + "nopl", + "pclmul", + "pconfig", + "pku", + "popcnt", + "prfchw", + "ptwrite", + "rdpid", + "rdrnd", + "rdseed", + "sahf", + "serialize", + "sha", + "shstk", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "uintr", + "vaes", + "vpclmulqdq", + "waitpkg", + "widekl", + "x87", + "xsave", + "xsavec", + "xsaveopt", + "xsaves" + ], + "primitives": { + "aes_round": [ + "AESENC" + ], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [ + "VPMADD52LUQ/HUQ (VEX)" + ], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "silvermont": { + "backend": "simd_avx2 (no avx2: array polyfill)", + "features": [ + "64bit", + "cmov", + "crc32", + "cx16", + "cx8", + "fxsr", + "mmx", + "movbe", + "nopl", + "pclmul", + "popcnt", + "prfchw", + "rdrnd", + "sahf", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "x87" + ], + "primitives": { + "aes_round": [], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)" + ], + "permute_var_u32": [], + "shift_var_u32": [] + } + }, + "skx": { + "backend": "simd_avx512", + "features": [ + "64bit", + "adx", + "aes", + "avx", + "avx2", + "avx512bw", + "avx512cd", + "avx512dq", + "avx512f", + "avx512vl", + "bmi", + "bmi2", + "clflushopt", + "clwb", + "cmov", + "crc32", + "cx16", + "cx8", + "ermsb", + "f16c", + "fma", + "fsgsbase", + "fxsr", + "invpcid", + "lzcnt", + "mmx", + "movbe", + "nopl", + "pclmul", + "pku", + "popcnt", + "prfchw", + "rdrnd", + "rdseed", + "sahf", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "x87", + "xsave", + "xsavec", + "xsaveopt", + "xsaves" + ], + "primitives": { + "aes_round": [ + "AESENC" + ], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)", + "VPMULUDQ (zmm, AVX-512F)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "skylake": { + "backend": "simd_avx2", + "features": [ + "64bit", + "adx", + "aes", + "avx", + "avx2", + "bmi", + "bmi2", + "clflushopt", + "cmov", + "crc32", + "cx16", + "cx8", + "ermsb", + "f16c", + "fma", + "fsgsbase", + "fxsr", + "invpcid", + "lzcnt", + "mmx", + "movbe", + "nopl", + "pclmul", + "popcnt", + "prfchw", + "rdrnd", + "rdseed", + "sahf", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "x87", + "xsave", + "xsavec", + "xsaveopt", + "xsaves" + ], + "primitives": { + "aes_round": [ + "AESENC" + ], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "skylake-avx512": { + "backend": "simd_avx512", + "features": [ + "64bit", + "adx", + "aes", + "avx", + "avx2", + "avx512bw", + "avx512cd", + "avx512dq", + "avx512f", + "avx512vl", + "bmi", + "bmi2", + "clflushopt", + "clwb", + "cmov", + "crc32", + "cx16", + "cx8", + "ermsb", + "f16c", + "fma", + "fsgsbase", + "fxsr", + "invpcid", + "lzcnt", + "mmx", + "movbe", + "nopl", + "pclmul", + "pku", + "popcnt", + "prfchw", + "rdrnd", + "rdseed", + "sahf", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "x87", + "xsave", + "xsavec", + "xsaveopt", + "xsaves" + ], + "primitives": { + "aes_round": [ + "AESENC" + ], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)", + "VPMULUDQ (zmm, AVX-512F)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "skylake_avx512": { + "backend": "simd_avx512", + "features": [ + "64bit", + "adx", + "aes", + "avx", + "avx2", + "avx512bw", + "avx512cd", + "avx512dq", + "avx512f", + "avx512vl", + "bmi", + "bmi2", + "clflushopt", + "clwb", + "cmov", + "crc32", + "cx16", + "cx8", + "ermsb", + "f16c", + "fma", + "fsgsbase", + "fxsr", + "invpcid", + "lzcnt", + "mmx", + "movbe", + "nopl", + "pclmul", + "pku", + "popcnt", + "prfchw", + "rdrnd", + "rdseed", + "sahf", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "x87", + "xsave", + "xsavec", + "xsaveopt", + "xsaves" + ], + "primitives": { + "aes_round": [ + "AESENC" + ], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)", + "VPMULUDQ (zmm, AVX-512F)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "slm": { + "backend": "simd_avx2 (no avx2: array polyfill)", + "features": [ + "64bit", + "cmov", + "crc32", + "cx16", + "cx8", + "fxsr", + "mmx", + "movbe", + "nopl", + "pclmul", + "popcnt", + "prfchw", + "rdrnd", + "sahf", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "x87" + ], + "primitives": { + "aes_round": [], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)" + ], + "permute_var_u32": [], + "shift_var_u32": [] + } + }, + "tigerlake": { + "backend": "simd_avx512", + "features": [ + "64bit", + "adx", + "aes", + "avx", + "avx2", + "avx512bitalg", + "avx512bw", + "avx512cd", + "avx512dq", + "avx512f", + "avx512ifma", + "avx512vbmi", + "avx512vbmi2", + "avx512vl", + "avx512vnni", + "avx512vp2intersect", + "avx512vpopcntdq", + "bmi", + "bmi2", + "clflushopt", + "clwb", + "cmov", + "crc32", + "cx16", + "cx8", + "ermsb", + "f16c", + "fma", + "fsgsbase", + "fsrm", + "fxsr", + "gfni", + "invpcid", + "lzcnt", + "mmx", + "movbe", + "movdir64b", + "movdiri", + "nopl", + "pclmul", + "pku", + "popcnt", + "prfchw", + "rdpid", + "rdrnd", + "rdseed", + "sahf", + "sha", + "shstk", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "vaes", + "vpclmulqdq", + "x87", + "xsave", + "xsavec", + "xsaveopt", + "xsaves" + ], + "primitives": { + "aes_round": [ + "AESENC", + "VAESENC (zmm)" + ], + "clmul": [ + "PCLMULQDQ", + "VPCLMULQDQ (zmm)" + ], + "ifma52": [ + "VPMADD52LUQ/HUQ (EVEX)" + ], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)", + "VPMULUDQ (zmm, AVX-512F)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "tremont": { + "backend": "simd_avx2 (no avx2: array polyfill)", + "features": [ + "64bit", + "aes", + "clflushopt", + "clwb", + "cmov", + "crc32", + "cx16", + "cx8", + "fsgsbase", + "fxsr", + "gfni", + "mmx", + "movbe", + "nopl", + "pclmul", + "popcnt", + "prfchw", + "ptwrite", + "rdpid", + "rdrnd", + "rdseed", + "sahf", + "sha", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "x87", + "xsave", + "xsavec", + "xsaveopt", + "xsaves" + ], + "primitives": { + "aes_round": [ + "AESENC" + ], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)" + ], + "permute_var_u32": [], + "shift_var_u32": [] + } + }, + "westmere": { + "backend": "simd_avx2 (no avx2: array polyfill)", + "features": [ + "64bit", + "cmov", + "crc32", + "cx16", + "cx8", + "fxsr", + "mmx", + "nopl", + "pclmul", + "popcnt", + "sahf", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "x87" + ], + "primitives": { + "aes_round": [], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)" + ], + "permute_var_u32": [], + "shift_var_u32": [] + } + }, + "wildcatlake": { + "backend": "simd_avx2", + "features": [ + "64bit", + "adx", + "aes", + "avx", + "avx2", + "avxifma", + "avxneconvert", + "avxvnni", + "avxvnniint16", + "avxvnniint8", + "bmi", + "bmi2", + "clflushopt", + "clwb", + "cmov", + "cmpccxadd", + "crc32", + "cx16", + "cx8", + "enqcmd", + "f16c", + "fma", + "fsgsbase", + "fxsr", + "gfni", + "hreset", + "invpcid", + "lzcnt", + "mmx", + "movbe", + "movdir64b", + "movdiri", + "nopl", + "pclmul", + "pconfig", + "pku", + "popcnt", + "prfchw", + "ptwrite", + "rdpid", + "rdrnd", + "rdseed", + "sahf", + "serialize", + "sha", + "sha512", + "shstk", + "sm3", + "sm4", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "uintr", + "vaes", + "vpclmulqdq", + "waitpkg", + "x87", + "xsave", + "xsavec", + "xsaveopt", + "xsaves" + ], + "primitives": { + "aes_round": [ + "AESENC" + ], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [ + "VPMADD52LUQ/HUQ (VEX)" + ], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "x86-64": { + "backend": "simd_avx2 (no avx2: array polyfill)", + "features": [ + "64bit", + "cmov", + "cx8", + "fxsr", + "mmx", + "nopl", + "sse", + "sse2", + "x87" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)" + ], + "permute_var_u32": [], + "shift_var_u32": [] + } + }, + "x86-64-v2": { + "backend": "simd_avx2 (no avx2: array polyfill)", + "features": [ + "64bit", + "cmov", + "crc32", + "cx16", + "cx8", + "fxsr", + "mmx", + "nopl", + "popcnt", + "sahf", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "x87" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)" + ], + "permute_var_u32": [], + "shift_var_u32": [] + } + }, + "x86-64-v3": { + "backend": "simd_avx2", + "features": [ + "64bit", + "avx", + "avx2", + "bmi", + "bmi2", + "cmov", + "crc32", + "cx16", + "cx8", + "f16c", + "fma", + "fxsr", + "lzcnt", + "mmx", + "movbe", + "nopl", + "popcnt", + "sahf", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "x87", + "xsave" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "x86-64-v4": { + "backend": "simd_avx512", + "features": [ + "64bit", + "avx", + "avx2", + "avx512bw", + "avx512cd", + "avx512dq", + "avx512f", + "avx512vl", + "bmi", + "bmi2", + "cmov", + "crc32", + "cx16", + "cx8", + "f16c", + "fma", + "fxsr", + "lzcnt", + "mmx", + "movbe", + "nopl", + "popcnt", + "sahf", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "ssse3", + "x87", + "xsave" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)", + "VPMULUDQ (zmm, AVX-512F)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "yonah": { + "backend": "simd_avx2 (no avx2: array polyfill)", + "features": [ + "cmov", + "cx8", + "fxsr", + "mmx", + "nopl", + "sse", + "sse2", + "sse3", + "x87" + ], + "primitives": { + "aes_round": [], + "clmul": [], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)" + ], + "permute_var_u32": [], + "shift_var_u32": [] + } + }, + "znver1": { + "backend": "simd_avx2", + "features": [ + "64bit", + "adx", + "aes", + "avx", + "avx2", + "bmi", + "bmi2", + "clflushopt", + "clzero", + "cmov", + "crc32", + "cx16", + "cx8", + "f16c", + "fma", + "fsgsbase", + "fxsr", + "lzcnt", + "mmx", + "movbe", + "mwaitx", + "nopl", + "pclmul", + "popcnt", + "prfchw", + "rdrnd", + "rdseed", + "sahf", + "sha", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "sse4a", + "ssse3", + "x87", + "xsave", + "xsavec", + "xsaveopt", + "xsaves" + ], + "primitives": { + "aes_round": [ + "AESENC" + ], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "znver2": { + "backend": "simd_avx2", + "features": [ + "64bit", + "adx", + "aes", + "avx", + "avx2", + "bmi", + "bmi2", + "clflushopt", + "clwb", + "clzero", + "cmov", + "crc32", + "cx16", + "cx8", + "f16c", + "fma", + "fsgsbase", + "fxsr", + "lzcnt", + "mmx", + "movbe", + "mwaitx", + "nopl", + "pclmul", + "popcnt", + "prfchw", + "rdpid", + "rdpru", + "rdrnd", + "rdseed", + "sahf", + "sha", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "sse4a", + "ssse3", + "wbnoinvd", + "x87", + "xsave", + "xsavec", + "xsaveopt", + "xsaves" + ], + "primitives": { + "aes_round": [ + "AESENC" + ], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "znver3": { + "backend": "simd_avx2", + "features": [ + "64bit", + "adx", + "aes", + "avx", + "avx2", + "bmi", + "bmi2", + "clflushopt", + "clwb", + "clzero", + "cmov", + "crc32", + "cx16", + "cx8", + "f16c", + "fma", + "fsgsbase", + "fsrm", + "fxsr", + "invpcid", + "lzcnt", + "mmx", + "movbe", + "mwaitx", + "nopl", + "pclmul", + "pku", + "popcnt", + "prfchw", + "rdpid", + "rdpru", + "rdrnd", + "rdseed", + "sahf", + "sha", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "sse4a", + "ssse3", + "vaes", + "vpclmulqdq", + "wbnoinvd", + "x87", + "xsave", + "xsavec", + "xsaveopt", + "xsaves" + ], + "primitives": { + "aes_round": [ + "AESENC" + ], + "clmul": [ + "PCLMULQDQ" + ], + "ifma52": [], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "znver4": { + "backend": "simd_avx512", + "features": [ + "64bit", + "adx", + "aes", + "avx", + "avx2", + "avx512bf16", + "avx512bitalg", + "avx512bw", + "avx512cd", + "avx512dq", + "avx512f", + "avx512ifma", + "avx512vbmi", + "avx512vbmi2", + "avx512vl", + "avx512vnni", + "avx512vpopcntdq", + "bmi", + "bmi2", + "clflushopt", + "clwb", + "clzero", + "cmov", + "crc32", + "cx16", + "cx8", + "f16c", + "fma", + "fsgsbase", + "fsrm", + "fxsr", + "gfni", + "invpcid", + "lzcnt", + "mmx", + "movbe", + "mwaitx", + "nopl", + "pclmul", + "pku", + "popcnt", + "prfchw", + "rdpid", + "rdpru", + "rdrnd", + "rdseed", + "sahf", + "sha", + "shstk", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "sse4a", + "ssse3", + "vaes", + "vpclmulqdq", + "wbnoinvd", + "x87", + "xsave", + "xsavec", + "xsaveopt", + "xsaves" + ], + "primitives": { + "aes_round": [ + "AESENC", + "VAESENC (zmm)" + ], + "clmul": [ + "PCLMULQDQ", + "VPCLMULQDQ (zmm)" + ], + "ifma52": [ + "VPMADD52LUQ/HUQ (EVEX)" + ], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)", + "VPMULUDQ (zmm, AVX-512F)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + }, + "znver5": { + "backend": "simd_avx512", + "features": [ + "64bit", + "adx", + "aes", + "avx", + "avx2", + "avx512bf16", + "avx512bitalg", + "avx512bw", + "avx512cd", + "avx512dq", + "avx512f", + "avx512ifma", + "avx512vbmi", + "avx512vbmi2", + "avx512vl", + "avx512vnni", + "avx512vp2intersect", + "avx512vpopcntdq", + "avxvnni", + "bmi", + "bmi2", + "clflushopt", + "clwb", + "clzero", + "cmov", + "crc32", + "cx16", + "cx8", + "f16c", + "fma", + "fsgsbase", + "fsrm", + "fxsr", + "gfni", + "invpcid", + "lzcnt", + "mmx", + "movbe", + "movdir64b", + "movdiri", + "mwaitx", + "nopl", + "pclmul", + "pku", + "popcnt", + "prefetchi", + "prfchw", + "rdpid", + "rdpru", + "rdrnd", + "rdseed", + "sahf", + "sha", + "shstk", + "sse", + "sse2", + "sse3", + "sse4.1", + "sse4.2", + "sse4a", + "ssse3", + "vaes", + "vpclmulqdq", + "wbnoinvd", + "x87", + "xsave", + "xsavec", + "xsaveopt", + "xsaves" + ], + "primitives": { + "aes_round": [ + "AESENC", + "VAESENC (zmm)" + ], + "clmul": [ + "PCLMULQDQ", + "VPCLMULQDQ (zmm)" + ], + "ifma52": [ + "VPMADD52LUQ/HUQ (EVEX)" + ], + "mul_lo32": [ + "PMULUDQ (xmm, SSE2)", + "VPMULUDQ (ymm, AVX2)", + "VPMULUDQ (zmm, AVX-512F)" + ], + "permute_var_u32": [ + "VPERMD" + ], + "shift_var_u32": [ + "VPSLLVD / VPSRLVD" + ] + } + } + } + }, + "llvm_tag": "llvmorg-22.1.8" +}