Compare commits

..

11 Commits

Author SHA1 Message Date
Dylan Conway
ca04287f4f computeLineColumnWithSourcemap: add remappedSourceURL out-param
Matches oven-sh/WebKit@8594cd29 + @e31c039f. Sourcemaps can map
to a different file, not just a different line/col — the callback
now writes the remapped URL back so the CPU profiler shows original
source paths (/src/foo.ts) instead of bundle paths
(/$bunfs/root/chunk.js).
2026-03-04 20:11:46 -08:00
Dylan Conway
2f0e60fc48 Reapply "TEST: WebKit pr-171 preview (do not merge)"
This reverts commit 90e7814cdc.
2026-03-04 20:11:27 -08:00
Dylan Conway
90e7814cdc Revert "TEST: WebKit pr-171 preview (do not merge)"
This reverts commit cb5f783789.
2026-03-04 20:06:44 -08:00
Dylan Conway
cb5f783789 TEST: WebKit pr-171 preview (do not merge)
Validates two things:
- Windows baseline picks up the fixed ICU, scanner should pass
- Linux baseline downloads the haswell WebKit artifact (no
  -baseline suffix in SetupWebKit.cmake yet), scanner should
  catch the leak
2026-03-04 19:51:47 -08:00
Dylan Conway
5cfe14040d README: stronger language on stripped binaries; note PDB instability 2026-03-04 19:11:11 -08:00
Dylan Conway
717b9d16a8 allowlist <lib:lolhtml.lib> for Rust memchr on Windows
PDB attribution for this code varies by toolchain. Locally it
attributed to a hashbrown call site; on CI there's no symbol
record so it falls through to section-contribution naming.
2026-03-04 19:09:43 -08:00
Dylan Conway
014442bdda use Response().text() for older bun on glibc CI agents 2026-03-04 19:06:24 -08:00
Dylan Conway
0cf2cbf0a4 verify-baseline: scan bun-profile, not stripped bun
--strip-all removes .symtab on ELF and there's no .pdb next to
the stripped exe on Windows. Without symbols, the static scanner
emits <no-symbol@addr> for every AVX instruction and none of the
~550 allowlist entries match, producing 50k+ lines of noise.

bun-profile has identical .text (stripping only removes metadata),
so violation results are the same.
2026-03-04 17:39:24 -08:00
Dylan Conway
eede736402 Merge branch 'main' into claude/check-baseline-isa 2026-03-05 00:28:50 +00:00
autofix-ci[bot]
59e7d89190 [autofix.ci] apply automated fixes 2026-03-04 20:08:01 +00:00
Dylan Conway
4d47111451 Add static baseline CPU instruction verifier
Best-effort scan that disassembles .text and flags instructions beyond the
baseline target. Runs before the emulator phase in verify-baseline.
Allowlists cover runtime-dispatched code.
2026-03-04 12:05:23 -08:00
15 changed files with 3222 additions and 19 deletions

View File

@@ -634,13 +634,20 @@ function getVerifyBaselineStep(platform, options) {
const emulator = getEmulatorBinary(platform);
const jitStressFlag = hasWebKitChanges(options) ? " --jit-stress" : "";
// Scan bun-profile, not bun. The stripped binary has no .symtab (ELF) and
// no companion .pdb (PE) — the static scanner would emit <no-symbol@addr>
// for everything and none of the allowlist entries would match. bun-profile
// has identical .text so violation results are the same, just attributable.
const profileDir = `${triplet}-profile`;
const profileExe = os === "windows" ? "bun-profile.exe" : "bun-profile";
const setupCommands =
os === "windows"
? [
`echo Downloading build artifacts...`,
`buildkite-agent artifact download ${triplet}.zip . --step ${targetKey}-build-bun`,
`echo Extracting ${triplet}.zip...`,
`tar -xf ${triplet}.zip`,
`buildkite-agent artifact download ${profileDir}.zip . --step ${targetKey}-build-bun`,
`echo Extracting ${profileDir}.zip...`,
`tar -xf ${profileDir}.zip`,
`echo Downloading Intel SDE...`,
`curl.exe -fsSL -o sde.tar.xz "${SDE_URL}"`,
`echo Extracting Intel SDE...`,
@@ -649,9 +656,9 @@ function getVerifyBaselineStep(platform, options) {
`ren sde-external-${SDE_VERSION}-win sde-external`,
]
: [
`buildkite-agent artifact download '*.zip' . --step ${targetKey}-build-bun`,
`unzip -o '${triplet}.zip'`,
`chmod +x ${triplet}/bun`,
`buildkite-agent artifact download '${profileDir}.zip' . --step ${targetKey}-build-bun`,
`unzip -o '${profileDir}.zip'`,
`chmod +x ${profileDir}/${profileExe}`,
];
return {
@@ -664,7 +671,8 @@ function getVerifyBaselineStep(platform, options) {
timeout_in_minutes: hasWebKitChanges(options) ? 30 : 10,
command: [
...setupCommands,
`bun scripts/verify-baseline.ts --binary ${triplet}/${os === "windows" ? "bun.exe" : "bun"} --emulator ${emulator}${jitStressFlag}`,
`cargo build --release --manifest-path scripts/verify-baseline-static/Cargo.toml`,
`bun scripts/verify-baseline.ts --binary ${profileDir}/${profileExe} --emulator ${emulator}${jitStressFlag}`,
],
};
}

View File

@@ -6,7 +6,7 @@ option(WEBKIT_LOCAL "If a local version of WebKit should be used instead of down
option(WEBKIT_BUILD_TYPE "The build type for local WebKit (defaults to CMAKE_BUILD_TYPE)")
if(NOT WEBKIT_VERSION)
set(WEBKIT_VERSION 4a6a32c32c11ffb9f5a94c310b10f50130bfe6de)
set(WEBKIT_VERSION autobuild-preview-pr-171-164c1fb9)
endif()

View File

@@ -0,0 +1,2 @@
/target
/.artifacts

189
scripts/verify-baseline-static/Cargo.lock generated Normal file
View File

@@ -0,0 +1,189 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 4
[[package]]
name = "bumpalo"
version = "3.20.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb"
[[package]]
name = "cfg-if"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
[[package]]
name = "fallible-iterator"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7"
[[package]]
name = "iced-x86"
version = "1.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7c447cff8c7f384a7d4f741cfcff32f75f3ad02b406432e8d6c878d56b1edf6b"
dependencies = [
"lazy_static",
]
[[package]]
name = "js-sys"
version = "0.3.91"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b49715b7073f385ba4bc528e5747d02e66cb39c6146efb66b781f131f0fb399c"
dependencies = [
"once_cell",
"wasm-bindgen",
]
[[package]]
name = "lazy_static"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
[[package]]
name = "memchr"
version = "2.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79"
[[package]]
name = "object"
version = "0.36.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87"
dependencies = [
"memchr",
]
[[package]]
name = "once_cell"
version = "1.21.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
[[package]]
name = "pdb"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "82040a392923abe6279c00ab4aff62d5250d1c8555dc780e4b02783a7aa74863"
dependencies = [
"fallible-iterator",
"scroll",
"uuid",
]
[[package]]
name = "proc-macro2"
version = "1.0.106"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"
dependencies = [
"unicode-ident",
]
[[package]]
name = "quote"
version = "1.0.45"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924"
dependencies = [
"proc-macro2",
]
[[package]]
name = "rustversion"
version = "1.0.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
[[package]]
name = "scroll"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "04c565b551bafbef4157586fa379538366e4385d42082f255bfd96e4fe8519da"
[[package]]
name = "syn"
version = "2.0.117"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99"
dependencies = [
"proc-macro2",
"quote",
"unicode-ident",
]
[[package]]
name = "unicode-ident"
version = "1.0.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
[[package]]
name = "uuid"
version = "1.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b672338555252d43fd2240c714dc444b8c6fb0a5c5335e65a07bba7742735ddb"
dependencies = [
"js-sys",
"wasm-bindgen",
]
[[package]]
name = "verify-baseline-static"
version = "0.1.0"
dependencies = [
"iced-x86",
"object",
"pdb",
]
[[package]]
name = "wasm-bindgen"
version = "0.2.114"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6532f9a5c1ece3798cb1c2cfdba640b9b3ba884f5db45973a6f442510a87d38e"
dependencies = [
"cfg-if",
"once_cell",
"rustversion",
"wasm-bindgen-macro",
"wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-macro"
version = "0.2.114"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "18a2d50fcf105fb33bb15f00e7a77b772945a2ee45dcf454961fd843e74c18e6"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
]
[[package]]
name = "wasm-bindgen-macro-support"
version = "0.2.114"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "03ce4caeaac547cdf713d280eda22a730824dd11e6b8c3ca9e42247b25c631e3"
dependencies = [
"bumpalo",
"proc-macro2",
"quote",
"syn",
"wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-shared"
version = "0.2.114"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "75a326b8c223ee17883a4251907455a2431acc2791c98c26279376490c378c16"
dependencies = [
"unicode-ident",
]

View File

@@ -0,0 +1,13 @@
[package]
name = "verify-baseline-static"
version = "0.1.0"
edition = "2021"
[dependencies]
iced-x86 = { version = "1.21", default-features = false, features = ["decoder", "std", "instr_info"] }
object = { version = "0.36", default-features = false, features = ["read", "std", "elf", "pe"] }
pdb = "0.8"
[profile.release]
lto = true
strip = true

View File

@@ -0,0 +1,135 @@
# verify-baseline-static
Static ISA verifier for Bun baseline builds. Disassembles every instruction in
`.text` and flags anything requiring CPU features beyond the baseline target.
| Target | Baseline | Flags |
| ------- | ---------------------------------- | ---------------------------------------------------------------------------- |
| x86-64 | Nehalem (`-march=nehalem`) | AVX, AVX2, AVX-512, BMI1/2, FMA, AES-NI, PCLMULQDQ, ADX, SHA-NI, RDRAND, ... |
| aarch64 | armv8-a+crc (`-march=armv8-a+crc`) | LSE atomics, SVE, DotProd, RCPC, JSCVT, RDM, non-hint PAC |
Architecture and format (ELF/PE) are auto-detected from the binary header.
Complements the emulator-based check in `scripts/verify-baseline.ts`: the
emulator only catches instructions the test suite _executes_. This catches
everything the compiler _emitted_.
## Usage
```sh
cargo build --release --manifest-path scripts/verify-baseline-static/Cargo.toml
./scripts/verify-baseline-static/target/release/verify-baseline-static \
--binary path/to/bun-linux-x64-baseline/bun-profile \
--allowlist scripts/verify-baseline-static/allowlist-x64.txt
```
`--allowlist` can be repeated; entries merge (feature ceilings union,
blanket-pass wins). Useful for layering an extra allowlist on top of the
base one without editing it.
Exit `0` = clean, `1` = violations, `2` = tool error.
Use the `-profile` artifact. The stripped release binary has no `.symtab`
(ELF) and no companion `.pdb` (PE) — every violation becomes `<no-symbol@addr>`
and nothing in the allowlist matches. Windows auto-discovers `<binary>.pdb`
if present, or pass `--pdb` explicitly.
## When it fails
A new symbol showed up with post-baseline instructions. Two possibilities:
1. **It's runtime-dispatched** (CPUID / HWCAP-gated). Find the gate in the
caller, add the symbol to the allowlist with a comment pointing at it.
Group with related symbols.
2. **It's not gated.** That's a real bug — a `-march` flag leaked into a
subbuild and the function will SIGILL on baseline hardware. Fix the
compile flags for that translation unit.
If you're not sure which: run the binary under `qemu-x86_64 -cpu Nehalem`
(or `qemu-aarch64 -cpu cortex-a53`) and hit that code path. SIGILL = bug.
### Data-in-`.text` false positives
The tool linear-sweeps every byte in `.text`. There's no general way to do
better for x86: toolchains don't emit "this byte is data" markers the way
ARM EABI's `$d` mapping symbols do, and code/data separation in x86 binaries
is undecidable in general
([Schwarz & Debray 2002](https://www2.cs.arizona.edu/~debray/Publications/disasm.pdf)).
MSVC inlines jump tables and small `static const` arrays into `.text` right
after the function that uses them (LLVM puts them in `.rodata`, so ELF builds
are typically clean). When those bytes form a valid instruction encoding,
the decoder reports it.
**Filtered automatically:** 3DNow!, SMM, Cyrix, VIA Padlock — ISA extensions
no toolchain targeting x86-64 emits in any configuration. Their two-byte
`0f xx` encodings tend to surface when a lookup table uses `0x0f` as a
sentinel value.
**Not filtered (very rare):** a table whose bytes form a valid
VEX/EVEX-prefixed encoding. Looks like a real AVX hit. Triage the same way:
disassemble around the address; if preceded by `ret` + small-int byte soup
instead of stack-frame setup, it's a table. Allowlist the symbol.
## What's deliberately ignored
**x64:**
- **ENDBR64 / CET** — NOP-compatible on pre-CET CPUs by design.
- **TZCNT/LZCNT** — LLVM preloads the destination with operand-width so the
REP-BSF fallback on pre-BMI1 CPUs gives identical results.
- **XGETBV** — every AVX-dispatch path calls this, always after
`if (CPUID.OSXSAVE)`. A stray one would SIGILL at startup; the emulator
test catches that trivially.
**aarch64:**
- **PACIASP / AUTIASP / BTI** — HINT-space; architecturally NOP on older CPUs.
- **`$d`-marked data** — literal pools and inline strings in `.text` are
skipped via ARM EABI mapping symbols.
## Symbol attribution
| Binary | Primary source | Fallback |
| ------ | --------------------------------------------------------------- | -------------------------------------------- |
| ELF | `.symtab` | `.dynsym` |
| PE | PDB DBI module stream (`S_*PROC32`, has real sizes) → `S_PUB32` | PDB section contributions → `<lib:NAME.lib>` |
The Windows fallback handles code with no per-function PDB record (stripped
CRT objects, anonymized staticlib helpers). Section contributions are the
linker-map data in structured form — they say which `.obj`/`.lib` every byte
came from. Attribution is by library basename, which doesn't move when
unrelated code shifts the link layout.
PDB coverage for the same code can vary across linker versions — a function
that gets an `S_LPROC32` record on one toolchain may fall through to `<lib:>`
on another. If a symbol flips between a mangled name and `<lib:NAME.lib>`
across CI runs, allowlist both forms.
Rust v0 mangled names carry a crate-hash (`Cs[base62]_`) that changes across
target triples and toolchain versions. The allowlist uses `<rust-hash>` as a
placeholder; the tool canonicalizes both sides before comparing.
## Allowlist format
```
# comment
symbol_name # blanket pass — any feature allowed
symbol_name [AVX, AVX2] # feature ceiling — only these allowed
```
A feature outside the brackets is a violation even for an allowlisted symbol.
Widening the bracket is the explicit checkpoint for "did the gate get updated
when the dependency did?"
| File | Covers |
| --------------------------- | ------------------------------------------------------------- |
| `allowlist-x64.txt` | `linux-x64-baseline`, `linux-x64-musl-baseline` |
| `allowlist-x64-windows.txt` | `windows-x64-baseline` (separate: MSVC mangling, CRT symbols) |
| `allowlist-aarch64.txt` | `linux-aarch64`, `linux-aarch64-musl` |
One allowlist covers both glibc and musl because the dispatch surface is
architecture-specific, not libc-specific. Symbols that LTO inlined away on
one libc show as STALE on the other — informational, not an error.

View File

@@ -0,0 +1,130 @@
# verify-baseline-static allowlist for aarch64 armv8-a+crc baseline.
#
# Shared by linux-aarch64 and linux-aarch64-musl.
# ----------------------------------------------------------------------------
# Bun's Highway SVE/SVE2 targets. Gate: hwy::SupportedTargets via getauxval(AT_HWCAP).
# (48 symbols)
# ----------------------------------------------------------------------------
_ZN3bun10N_SVE2_12810MemMemImplEPKhmS2_m [SVE]
_ZN3bun10N_SVE2_12815CopyU16ToU8ImplEPKtmPh [SVE]
_ZN3bun10N_SVE2_12815IndexOfCharImplEPKhmh [SVE]
_ZN3bun10N_SVE2_12818IndexOfAnyCharImplEPKhmS2_m [SVE]
_ZN3bun10N_SVE2_12820FillWithSkipMaskImplEPKhmPhS2_mb [SVE]
_ZN3bun10N_SVE2_12828IndexOfNewlineOrNonASCIIImplEPKhm [SVE]
_ZN3bun10N_SVE2_12835IndexOfSpaceOrNewlineOrNonASCIIImplEPKhm [SVE]
_ZN3bun10N_SVE2_12836ContainsNewlineOrNonASCIIOrQuoteImplEPKhm [SVE]
_ZN3bun10N_SVE2_12838IndexOfNewlineOrNonASCIIOrHashOrAtImplEPKhm [SVE]
_ZN3bun10N_SVE2_12846IndexOfInterestingCharacterInStringLiteralImplEPKhmh [SVE]
_ZN3bun10N_SVE2_12846IndexOfNeedsEscapeForJavaScriptStringImplQuoteEPKhmh [SVE]
_ZN3bun10N_SVE2_12849IndexOfNeedsEscapeForJavaScriptStringImplBacktickEPKhmh [SVE]
_ZN3bun5N_SVE10MemMemImplEPKhmS2_m [SVE]
_ZN3bun5N_SVE15CopyU16ToU8ImplEPKtmPh [SVE]
_ZN3bun5N_SVE15IndexOfCharImplEPKhmh [SVE]
_ZN3bun5N_SVE18IndexOfAnyCharImplEPKhmS2_m [SVE]
_ZN3bun5N_SVE20FillWithSkipMaskImplEPKhmPhS2_mb [SVE]
_ZN3bun5N_SVE28IndexOfNewlineOrNonASCIIImplEPKhm [SVE]
_ZN3bun5N_SVE35IndexOfSpaceOrNewlineOrNonASCIIImplEPKhm [SVE]
_ZN3bun5N_SVE36ContainsNewlineOrNonASCIIOrQuoteImplEPKhm [SVE]
_ZN3bun5N_SVE38IndexOfNewlineOrNonASCIIOrHashOrAtImplEPKhm [SVE]
_ZN3bun5N_SVE46IndexOfInterestingCharacterInStringLiteralImplEPKhmh [SVE]
_ZN3bun5N_SVE46IndexOfNeedsEscapeForJavaScriptStringImplQuoteEPKhmh [SVE]
_ZN3bun5N_SVE49IndexOfNeedsEscapeForJavaScriptStringImplBacktickEPKhmh [SVE]
_ZN3bun6N_SVE210MemMemImplEPKhmS2_m [SVE]
_ZN3bun6N_SVE215CopyU16ToU8ImplEPKtmPh [SVE]
_ZN3bun6N_SVE215IndexOfCharImplEPKhmh [SVE]
_ZN3bun6N_SVE218IndexOfAnyCharImplEPKhmS2_m [SVE]
_ZN3bun6N_SVE220FillWithSkipMaskImplEPKhmPhS2_mb [SVE]
_ZN3bun6N_SVE228IndexOfNewlineOrNonASCIIImplEPKhm [SVE]
_ZN3bun6N_SVE235IndexOfSpaceOrNewlineOrNonASCIIImplEPKhm [SVE]
_ZN3bun6N_SVE236ContainsNewlineOrNonASCIIOrQuoteImplEPKhm [SVE]
_ZN3bun6N_SVE238IndexOfNewlineOrNonASCIIOrHashOrAtImplEPKhm [SVE]
_ZN3bun6N_SVE246IndexOfInterestingCharacterInStringLiteralImplEPKhmh [SVE]
_ZN3bun6N_SVE246IndexOfNeedsEscapeForJavaScriptStringImplQuoteEPKhmh [SVE]
_ZN3bun6N_SVE249IndexOfNeedsEscapeForJavaScriptStringImplBacktickEPKhmh [SVE]
_ZN3bun9N_SVE_25610MemMemImplEPKhmS2_m [SVE]
_ZN3bun9N_SVE_25615CopyU16ToU8ImplEPKtmPh [SVE]
_ZN3bun9N_SVE_25615IndexOfCharImplEPKhmh [SVE]
_ZN3bun9N_SVE_25618IndexOfAnyCharImplEPKhmS2_m [SVE]
_ZN3bun9N_SVE_25620FillWithSkipMaskImplEPKhmPhS2_mb [SVE]
_ZN3bun9N_SVE_25628IndexOfNewlineOrNonASCIIImplEPKhm [SVE]
_ZN3bun9N_SVE_25635IndexOfSpaceOrNewlineOrNonASCIIImplEPKhm [SVE]
_ZN3bun9N_SVE_25636ContainsNewlineOrNonASCIIOrQuoteImplEPKhm [SVE]
_ZN3bun9N_SVE_25638IndexOfNewlineOrNonASCIIOrHashOrAtImplEPKhm [SVE]
_ZN3bun9N_SVE_25646IndexOfInterestingCharacterInStringLiteralImplEPKhmh [SVE]
_ZN3bun9N_SVE_25646IndexOfNeedsEscapeForJavaScriptStringImplQuoteEPKhmh [SVE]
_ZN3bun9N_SVE_25649IndexOfNeedsEscapeForJavaScriptStringImplBacktickEPKhmh [SVE]
# ----------------------------------------------------------------------------
# Highway SVE detector.
# (1 symbols)
# ----------------------------------------------------------------------------
_ZN3hwy3armL26DetectAdditionalSveTargetsEl [SVE]
# ----------------------------------------------------------------------------
# compiler-rt outline atomics. Each helper has both LSE and LDXR/STXR paths;
# __aarch64_have_lse_atomics (= AT_HWCAP & HWCAP_ATOMICS) picks at runtime.
# (41 symbols)
# ----------------------------------------------------------------------------
__aarch64_cas1_acq [LSE]
__aarch64_cas1_acq_rel [LSE]
__aarch64_cas1_rel [LSE]
__aarch64_cas1_relax [LSE]
__aarch64_cas2_acq_rel [LSE]
__aarch64_cas4_acq [LSE]
__aarch64_cas4_acq_rel [LSE]
__aarch64_cas4_rel [LSE]
__aarch64_cas4_relax [LSE]
__aarch64_cas8_acq [LSE]
__aarch64_cas8_acq_rel [LSE]
__aarch64_cas8_rel [LSE]
__aarch64_cas8_relax [LSE]
__aarch64_ldadd1_acq_rel [LSE]
__aarch64_ldadd2_acq_rel [LSE]
__aarch64_ldadd4_acq_rel [LSE]
__aarch64_ldadd4_rel [LSE]
__aarch64_ldadd4_relax [LSE]
__aarch64_ldadd8_acq_rel [LSE]
__aarch64_ldadd8_rel [LSE]
__aarch64_ldadd8_relax [LSE]
__aarch64_ldclr1_acq_rel [LSE]
__aarch64_ldclr2_acq_rel [LSE]
__aarch64_ldclr4_acq_rel [LSE]
__aarch64_ldclr8_acq_rel [LSE]
__aarch64_ldeor1_acq_rel [LSE]
__aarch64_ldeor2_acq_rel [LSE]
__aarch64_ldeor4_acq_rel [LSE]
__aarch64_ldeor8_acq_rel [LSE]
__aarch64_ldset1_acq_rel [LSE]
__aarch64_ldset2_acq_rel [LSE]
__aarch64_ldset4_acq_rel [LSE]
__aarch64_ldset8_acq_rel [LSE]
__aarch64_swp1_acq [LSE]
__aarch64_swp1_acq_rel [LSE]
__aarch64_swp1_relax [LSE]
__aarch64_swp2_acq_rel [LSE]
__aarch64_swp4_acq [LSE]
__aarch64_swp4_acq_rel [LSE]
__aarch64_swp4_rel [LSE]
__aarch64_swp8_acq_rel [LSE]
# ----------------------------------------------------------------------------
# libgcc DWARF unwinder SVE VG register (CNTD). Only reached when unwinding
# through an SVE frame — transitively gated by Highway's dispatch.
# (4 symbols)
# ----------------------------------------------------------------------------
_Unwind_GetGR [SVE]
execute_stack_op [SVE]
uw_update_context [SVE]
uw_update_context_1 [SVE]
# ----------------------------------------------------------------------------
# libdeflate Adler-32 NEON DotProd. Gate: HWCAP_ASIMDDP.
# (1 symbols)
# ----------------------------------------------------------------------------
adler32_arm_neon_dotprod [DotProd]

View File

@@ -0,0 +1,656 @@
# verify-baseline-static allowlist for windows-x64-baseline.
#
# Symbol names differ from Linux: MSVC C++ mangling, demangled Rust in DBI
# records, _validate suffix on JSC offlineasm, <lib:NAME> for code with no
# per-function PDB symbol (attributed via section contributions).
# ----------------------------------------------------------------------------
# simdutf. MSVC-mangled names.
# (172 symbols)
# ----------------------------------------------------------------------------
simdutf::haswell::`anonymous namespace'::base64::compress_decode_base64<0,0,0,char16_t> [AVX, AVX2, BMI1]
simdutf::haswell::`anonymous namespace'::base64::compress_decode_base64<0,0,0,char> [AVX, AVX2, BMI1]
simdutf::haswell::`anonymous namespace'::base64::compress_decode_base64<0,0,1,char16_t> [AVX, AVX2, BMI1]
simdutf::haswell::`anonymous namespace'::base64::compress_decode_base64<0,0,1,char> [AVX, AVX2, BMI1]
simdutf::haswell::`anonymous namespace'::base64::compress_decode_base64<0,1,0,char16_t> [AVX, AVX2, BMI1]
simdutf::haswell::`anonymous namespace'::base64::compress_decode_base64<0,1,0,char> [AVX, AVX2, BMI1]
simdutf::haswell::`anonymous namespace'::base64::compress_decode_base64<0,1,1,char16_t> [AVX, AVX2, BMI1]
simdutf::haswell::`anonymous namespace'::base64::compress_decode_base64<0,1,1,char> [AVX, AVX2, BMI1]
simdutf::haswell::`anonymous namespace'::base64::compress_decode_base64<1,0,0,char16_t> [AVX, AVX2, BMI1]
simdutf::haswell::`anonymous namespace'::base64::compress_decode_base64<1,0,0,char> [AVX, AVX2, BMI1]
simdutf::haswell::`anonymous namespace'::base64::compress_decode_base64<1,1,0,char16_t> [AVX, AVX2, BMI1]
simdutf::haswell::`anonymous namespace'::base64::compress_decode_base64<1,1,0,char> [AVX, AVX2, BMI1]
simdutf::haswell::implementation::binary_to_base64 [AVX, AVX2]
simdutf::haswell::implementation::binary_to_base64_with_lines [AVX, AVX2]
simdutf::haswell::implementation::change_endianness_utf16 [AVX, AVX2]
simdutf::haswell::implementation::convert_latin1_to_utf16be [AVX, AVX2]
simdutf::haswell::implementation::convert_latin1_to_utf16le [AVX, AVX2]
simdutf::haswell::implementation::convert_latin1_to_utf32 [AVX, AVX2]
simdutf::haswell::implementation::convert_latin1_to_utf8 [AVX, AVX2]
simdutf::haswell::implementation::convert_utf16be_to_latin1 [AVX, AVX2]
simdutf::haswell::implementation::convert_utf16be_to_latin1_with_errors [AVX, AVX2]
simdutf::haswell::implementation::convert_utf16be_to_utf32 [AVX, AVX2]
simdutf::haswell::implementation::convert_utf16be_to_utf32_with_errors [AVX, AVX2]
simdutf::haswell::implementation::convert_utf16be_to_utf8 [AVX, AVX2]
simdutf::haswell::implementation::convert_utf16be_to_utf8_with_errors [AVX, AVX2]
simdutf::haswell::implementation::convert_utf16le_to_latin1 [AVX, AVX2]
simdutf::haswell::implementation::convert_utf16le_to_latin1_with_errors [AVX, AVX2]
simdutf::haswell::implementation::convert_utf16le_to_utf32 [AVX, AVX2]
simdutf::haswell::implementation::convert_utf16le_to_utf32_with_errors [AVX, AVX2]
simdutf::haswell::implementation::convert_utf16le_to_utf8 [AVX, AVX2]
simdutf::haswell::implementation::convert_utf16le_to_utf8_with_errors [AVX, AVX2]
simdutf::haswell::implementation::convert_utf32_to_latin1 [AVX, AVX2]
simdutf::haswell::implementation::convert_utf32_to_latin1_with_errors [AVX, AVX2]
simdutf::haswell::implementation::convert_utf32_to_utf16be [AVX, AVX2]
simdutf::haswell::implementation::convert_utf32_to_utf16be_with_errors [AVX, AVX2]
simdutf::haswell::implementation::convert_utf32_to_utf16le [AVX, AVX2]
simdutf::haswell::implementation::convert_utf32_to_utf16le_with_errors [AVX, AVX2]
simdutf::haswell::implementation::convert_utf32_to_utf8 [AVX, AVX2]
simdutf::haswell::implementation::convert_utf32_to_utf8_with_errors [AVX, AVX2]
simdutf::haswell::implementation::convert_utf8_to_latin1 [AVX, AVX2]
simdutf::haswell::implementation::convert_utf8_to_latin1_with_errors [AVX, AVX2]
simdutf::haswell::implementation::convert_utf8_to_utf16be [AVX, AVX2]
simdutf::haswell::implementation::convert_utf8_to_utf16be_with_errors [AVX, AVX2]
simdutf::haswell::implementation::convert_utf8_to_utf16le [AVX, AVX2]
simdutf::haswell::implementation::convert_utf8_to_utf16le_with_errors [AVX, AVX2]
simdutf::haswell::implementation::convert_utf8_to_utf32 [AVX, AVX2]
simdutf::haswell::implementation::convert_utf8_to_utf32_with_errors [AVX, AVX2]
simdutf::haswell::implementation::convert_valid_utf16be_to_latin1 [AVX, AVX2]
simdutf::haswell::implementation::convert_valid_utf16be_to_utf32 [AVX, AVX2]
simdutf::haswell::implementation::convert_valid_utf16le_to_latin1 [AVX, AVX2]
simdutf::haswell::implementation::convert_valid_utf16le_to_utf32 [AVX, AVX2]
simdutf::haswell::implementation::convert_valid_utf32_to_latin1 [AVX, AVX2]
simdutf::haswell::implementation::convert_valid_utf8_to_latin1 [AVX, AVX2]
simdutf::haswell::implementation::convert_valid_utf8_to_utf16be [AVX, AVX2]
simdutf::haswell::implementation::convert_valid_utf8_to_utf16le [AVX, AVX2]
simdutf::haswell::implementation::convert_valid_utf8_to_utf32 [AVX, AVX2]
simdutf::haswell::implementation::count_utf16be [AVX, AVX2]
simdutf::haswell::implementation::count_utf16le [AVX, AVX2]
simdutf::haswell::implementation::count_utf8 [AVX, AVX2]
simdutf::haswell::implementation::detect_encodings [AVX, AVX2]
simdutf::haswell::implementation::find [AVX, AVX2]
simdutf::haswell::implementation::latin1_length_from_utf8 [AVX, AVX2]
simdutf::haswell::implementation::to_well_formed_utf16be [AVX, AVX2, BMI1]
simdutf::haswell::implementation::to_well_formed_utf16le [AVX, AVX2, BMI1]
simdutf::haswell::implementation::utf16_length_from_utf32 [AVX, AVX2]
simdutf::haswell::implementation::utf16_length_from_utf8 [AVX, AVX2]
simdutf::haswell::implementation::utf32_length_from_utf16be [AVX, AVX2]
simdutf::haswell::implementation::utf32_length_from_utf16le [AVX, AVX2]
simdutf::haswell::implementation::utf32_length_from_utf8 [AVX, AVX2]
simdutf::haswell::implementation::utf8_length_from_latin1 [AVX, AVX2]
simdutf::haswell::implementation::utf8_length_from_utf16be [AVX, AVX2]
simdutf::haswell::implementation::utf8_length_from_utf16le [AVX, AVX2]
simdutf::haswell::implementation::utf8_length_from_utf32 [AVX, AVX2]
simdutf::haswell::implementation::validate_ascii [AVX, AVX2]
simdutf::haswell::implementation::validate_ascii_with_errors [AVX, AVX2]
simdutf::haswell::implementation::validate_utf16be [AVX, AVX2, BMI1]
simdutf::haswell::implementation::validate_utf16be_as_ascii [AVX, AVX2]
simdutf::haswell::implementation::validate_utf16be_with_errors [AVX, AVX2, BMI1]
simdutf::haswell::implementation::validate_utf16le [AVX, AVX2, BMI1]
simdutf::haswell::implementation::validate_utf16le_as_ascii [AVX, AVX2]
simdutf::haswell::implementation::validate_utf16le_with_errors [AVX, AVX2, BMI1]
simdutf::haswell::implementation::validate_utf32 [AVX, AVX2]
simdutf::haswell::implementation::validate_utf32_with_errors [AVX, AVX2]
simdutf::haswell::implementation::validate_utf8 [AVX, AVX2]
simdutf::haswell::implementation::validate_utf8_with_errors [AVX, AVX2]
simdutf::icelake::`anonymous namespace'::compress_decode_base64<0,0,0,char16_t> [AVX, AVX512BW, AVX512F, AVX512_VBMI, AVX512_VBMI2, BMI2]
simdutf::icelake::`anonymous namespace'::compress_decode_base64<0,0,0,char> [AVX, AVX512BW, AVX512F, AVX512_VBMI, AVX512_VBMI2, BMI2]
simdutf::icelake::`anonymous namespace'::compress_decode_base64<0,0,1,char16_t> [AVX, AVX512BW, AVX512F, AVX512_VBMI, AVX512_VBMI2, BMI2]
simdutf::icelake::`anonymous namespace'::compress_decode_base64<0,0,1,char> [AVX, AVX512BW, AVX512F, AVX512_VBMI, AVX512_VBMI2, BMI2]
simdutf::icelake::`anonymous namespace'::compress_decode_base64<0,1,0,char16_t> [AVX, AVX512BW, AVX512F, AVX512_VBMI, AVX512_VBMI2, BMI2]
simdutf::icelake::`anonymous namespace'::compress_decode_base64<0,1,0,char> [AVX, AVX512BW, AVX512F, AVX512_VBMI, AVX512_VBMI2, BMI2]
simdutf::icelake::`anonymous namespace'::compress_decode_base64<0,1,1,char16_t> [AVX, AVX512BW, AVX512F, AVX512_VBMI, AVX512_VBMI2, BMI2]
simdutf::icelake::`anonymous namespace'::compress_decode_base64<0,1,1,char> [AVX, AVX512BW, AVX512F, AVX512_VBMI, AVX512_VBMI2, BMI2]
simdutf::icelake::`anonymous namespace'::compress_decode_base64<1,0,0,char16_t> [AVX, AVX512BW, AVX512F, AVX512_VBMI, AVX512_VBMI2, BMI2]
simdutf::icelake::`anonymous namespace'::compress_decode_base64<1,0,0,char> [AVX, AVX512BW, AVX512F, AVX512_VBMI, AVX512_VBMI2, BMI2]
simdutf::icelake::`anonymous namespace'::compress_decode_base64<1,1,0,char16_t> [AVX, AVX512BW, AVX512F, AVX512_VBMI, AVX512_VBMI2, BMI2]
simdutf::icelake::`anonymous namespace'::compress_decode_base64<1,1,0,char> [AVX, AVX512BW, AVX512F, AVX512_VBMI, AVX512_VBMI2, BMI2]
simdutf::icelake::implementation::binary_to_base64 [AVX, AVX512BW, AVX512F, AVX512_VBMI, BMI2]
simdutf::icelake::implementation::binary_to_base64_with_lines [AVX, AVX512BW, AVX512F, AVX512_VBMI, AVX512_VBMI2, BMI2]
simdutf::icelake::implementation::change_endianness_utf16 [AVX, AVX512BW, AVX512F, BMI2]
simdutf::icelake::implementation::convert_latin1_to_utf16be [AVX, AVX512BW, AVX512F, AVX512VL, AVX512_VBMI, BMI2]
simdutf::icelake::implementation::convert_latin1_to_utf16le [AVX, AVX512BW, AVX512F, AVX512VL, BMI2]
simdutf::icelake::implementation::convert_latin1_to_utf32 [AVX, AVX512BW, AVX512F, AVX512VL, BMI2]
simdutf::icelake::implementation::convert_latin1_to_utf8 [AVX, AVX512BW, AVX512F, AVX512_VBMI, AVX512_VBMI2, BMI2]
simdutf::icelake::implementation::convert_utf16be_to_latin1 [AVX, AVX512BW, AVX512F, BMI2]
simdutf::icelake::implementation::convert_utf16be_to_latin1_with_errors [AVX, AVX512BW, AVX512F, BMI2]
simdutf::icelake::implementation::convert_utf16be_to_utf32 [AVX, AVX512BW, AVX512F, BMI2]
simdutf::icelake::implementation::convert_utf16be_to_utf32_with_errors [AVX, AVX512BW, AVX512F, BMI2]
simdutf::icelake::implementation::convert_utf16be_to_utf8 [AVX, AVX512BW, AVX512F, AVX512_VBMI, AVX512_VBMI2, BMI1, BMI2]
simdutf::icelake::implementation::convert_utf16be_to_utf8_with_errors [AVX, AVX512BW, AVX512F, AVX512_VBMI, AVX512_VBMI2, BMI1, BMI2]
simdutf::icelake::implementation::convert_utf16le_to_latin1 [AVX, AVX512BW, AVX512F, BMI2]
simdutf::icelake::implementation::convert_utf16le_to_latin1_with_errors [AVX, AVX512BW, AVX512F, BMI2]
simdutf::icelake::implementation::convert_utf16le_to_utf32 [AVX, AVX512BW, AVX512F, BMI2]
simdutf::icelake::implementation::convert_utf16le_to_utf32_with_errors [AVX, AVX512BW, AVX512F, BMI2]
simdutf::icelake::implementation::convert_utf16le_to_utf8 [AVX, AVX512BW, AVX512F, AVX512_VBMI, AVX512_VBMI2, BMI1, BMI2]
simdutf::icelake::implementation::convert_utf16le_to_utf8_with_errors [AVX, AVX512BW, AVX512F, AVX512_VBMI, AVX512_VBMI2, BMI1, BMI2]
simdutf::icelake::implementation::convert_utf32_to_latin1 [AVX, AVX512BW, AVX512F, BMI2]
simdutf::icelake::implementation::convert_utf32_to_latin1_with_errors [AVX, AVX512BW, AVX512F, BMI2]
simdutf::icelake::implementation::convert_utf32_to_utf16be [AVX, AVX2, AVX512BW, AVX512F, AVX512VL, AVX512_VBMI2, BMI2]
simdutf::icelake::implementation::convert_utf32_to_utf16be_with_errors [AVX, AVX2, AVX512BW, AVX512F, AVX512VL, AVX512_VBMI2, BMI1, BMI2]
simdutf::icelake::implementation::convert_utf32_to_utf16le [AVX, AVX512BW, AVX512F, AVX512_VBMI2, BMI2]
simdutf::icelake::implementation::convert_utf32_to_utf16le_with_errors [AVX, AVX512BW, AVX512F, AVX512VL, AVX512_VBMI2, BMI1, BMI2]
simdutf::icelake::implementation::convert_utf32_to_utf8 [AVX, AVX2, AVX512BW, AVX512F, AVX512VL]
simdutf::icelake::implementation::convert_utf32_to_utf8_with_errors [AVX, AVX2, AVX512BW, AVX512F, AVX512VL]
simdutf::icelake::implementation::convert_utf8_to_latin1 [AVX, AVX512BW, AVX512F, AVX512_VBMI2, BMI1, BMI2]
simdutf::icelake::implementation::convert_utf8_to_latin1_with_errors [AVX, AVX512BW, AVX512F, AVX512_VBMI2, BMI1, BMI2]
simdutf::icelake::implementation::convert_utf8_to_utf16be [AVX, AVX512BW, AVX512F, AVX512VL, AVX512_VBMI, AVX512_VBMI2, BMI1, BMI2]
simdutf::icelake::implementation::convert_utf8_to_utf16be_with_errors [AVX, AVX512BW, AVX512F, AVX512VL, AVX512_VBMI, AVX512_VBMI2, BMI1, BMI2]
simdutf::icelake::implementation::convert_utf8_to_utf16le [AVX, AVX512BW, AVX512F, AVX512_VBMI, AVX512_VBMI2, BMI1, BMI2]
simdutf::icelake::implementation::convert_utf8_to_utf16le_with_errors [AVX, AVX512BW, AVX512F, AVX512_VBMI, AVX512_VBMI2, BMI1, BMI2]
simdutf::icelake::implementation::convert_utf8_to_utf32 [AVX, AVX2, AVX512BW, AVX512F, AVX512_VBMI, BMI2]
simdutf::icelake::implementation::convert_utf8_to_utf32_with_errors [AVX, AVX2, AVX512BW, AVX512F, AVX512_VBMI, BMI2]
simdutf::icelake::implementation::convert_valid_utf16be_to_latin1 [AVX, AVX512BW, AVX512F, BMI2]
simdutf::icelake::implementation::convert_valid_utf16be_to_utf32 [AVX, AVX512BW, AVX512F, BMI2]
simdutf::icelake::implementation::convert_valid_utf16le_to_latin1 [AVX, AVX512BW, AVX512F, BMI2]
simdutf::icelake::implementation::convert_valid_utf16le_to_utf32 [AVX, AVX512BW, AVX512F, BMI2]
simdutf::icelake::implementation::convert_valid_utf32_to_latin1 [AVX, AVX512BW, AVX512F, BMI2]
simdutf::icelake::implementation::convert_valid_utf32_to_utf16be [AVX, AVX2, AVX512BW, AVX512F, AVX512VL, AVX512_VBMI2, BMI2]
simdutf::icelake::implementation::convert_valid_utf32_to_utf16le [AVX, AVX512BW, AVX512F, AVX512_VBMI2, BMI2]
simdutf::icelake::implementation::convert_valid_utf8_to_latin1 [AVX, AVX512BW, AVX512F, AVX512_VBMI2, BMI2]
simdutf::icelake::implementation::convert_valid_utf8_to_utf16be [AVX, AVX2, AVX512BW, AVX512F, AVX512VL, AVX512_VBMI, AVX512_VBMI2, BMI2]
simdutf::icelake::implementation::convert_valid_utf8_to_utf16le [AVX, AVX512BW, AVX512F, AVX512_VBMI, AVX512_VBMI2, BMI2]
simdutf::icelake::implementation::convert_valid_utf8_to_utf32 [AVX, AVX2, AVX512BW, AVX512F, AVX512VL, AVX512_VBMI, BMI2]
simdutf::icelake::implementation::count_utf16be [AVX, AVX2, AVX512BW, AVX512DQ, AVX512F, AVX512VL]
simdutf::icelake::implementation::count_utf16le [AVX, AVX2, AVX512BW, AVX512DQ, AVX512F, AVX512VL]
simdutf::icelake::implementation::count_utf8 [AVX, AVX2, AVX512BW, AVX512DQ, AVX512F, AVX512VL, AVX512_VPOPCNTDQ]
simdutf::icelake::implementation::detect_encodings [AVX, AVX512BW, AVX512F, BMI2]
simdutf::icelake::implementation::find [AVX, AVX512BW, BMI2]
simdutf::icelake::implementation::latin1_length_from_utf8 [AVX, AVX2, AVX512BW, AVX512DQ, AVX512F, AVX512VL, AVX512_VPOPCNTDQ]
simdutf::icelake::implementation::to_well_formed_utf16be [AVX, AVX512BW, AVX512F, BMI2]
simdutf::icelake::implementation::to_well_formed_utf16le [AVX, AVX512BW, AVX512F, BMI2]
simdutf::icelake::implementation::utf16_length_from_utf32 [AVX, AVX2, AVX512DQ, AVX512F, AVX512VL]
simdutf::icelake::implementation::utf16_length_from_utf8 [AVX, AVX2, AVX512BW, AVX512DQ, AVX512F, AVX512VL]
simdutf::icelake::implementation::utf32_length_from_utf16be [AVX, AVX2, AVX512BW, AVX512DQ, AVX512F, AVX512VL]
simdutf::icelake::implementation::utf32_length_from_utf16le [AVX, AVX2, AVX512BW, AVX512DQ, AVX512F, AVX512VL]
simdutf::icelake::implementation::utf32_length_from_utf8 [AVX, AVX2, AVX512BW, AVX512DQ, AVX512F, AVX512VL, AVX512_VPOPCNTDQ]
simdutf::icelake::implementation::utf8_length_from_latin1 [AVX, AVX2, AVX512BW, AVX512F, AVX512VL]
simdutf::icelake::implementation::utf8_length_from_utf16be [AVX, AVX2, AVX512BW, AVX512DQ, AVX512F, AVX512VL]
simdutf::icelake::implementation::utf8_length_from_utf16le [AVX, AVX2, AVX512BW, AVX512DQ, AVX512F, AVX512VL]
simdutf::icelake::implementation::utf8_length_from_utf32 [AVX, AVX2, AVX512DQ, AVX512F, AVX512VL]
simdutf::icelake::implementation::validate_ascii [AVX, AVX512BW, AVX512F, BMI2]
simdutf::icelake::implementation::validate_ascii_with_errors [AVX, AVX512BW, BMI2]
simdutf::icelake::implementation::validate_utf16be [AVX, AVX512BW, AVX512F, BMI2]
simdutf::icelake::implementation::validate_utf16be_as_ascii [AVX, AVX512BW, AVX512F, BMI2]
simdutf::icelake::implementation::validate_utf16be_with_errors [AVX, AVX512BW, BMI1, BMI2]
simdutf::icelake::implementation::validate_utf16le [AVX, AVX512BW, BMI2]
simdutf::icelake::implementation::validate_utf16le_as_ascii [AVX, AVX512BW, BMI2]
simdutf::icelake::implementation::validate_utf16le_with_errors [AVX, AVX512BW, BMI1, BMI2]
simdutf::icelake::implementation::validate_utf32 [AVX, AVX512BW, AVX512F, BMI2]
simdutf::icelake::implementation::validate_utf32_with_errors [AVX, AVX512BW, AVX512F, BMI2]
simdutf::icelake::implementation::validate_utf8 [AVX, AVX512BW, AVX512F, BMI2]
simdutf::icelake::implementation::validate_utf8_with_errors [AVX, AVX512BW, AVX512F, BMI2]
# ----------------------------------------------------------------------------
# JSC IPInt SIMD. Windows offlineasm emits _validate suffix.
# (196 symbols)
# ----------------------------------------------------------------------------
ipint_simd_f32x4_abs_validate [AVX]
ipint_simd_f32x4_add_validate [AVX]
ipint_simd_f32x4_ceil_validate [AVX]
ipint_simd_f32x4_convert_i32x4_s_validate [AVX]
ipint_simd_f32x4_convert_i32x4_u_validate [AVX]
ipint_simd_f32x4_demote_f64x2_zero_validate [AVX]
ipint_simd_f32x4_div_validate [AVX]
ipint_simd_f32x4_eq_validate [AVX]
ipint_simd_f32x4_floor_validate [AVX]
ipint_simd_f32x4_ge_validate [AVX]
ipint_simd_f32x4_gt_validate [AVX]
ipint_simd_f32x4_le_validate [AVX]
ipint_simd_f32x4_lt_validate [AVX]
ipint_simd_f32x4_max_validate [AVX]
ipint_simd_f32x4_min_validate [AVX]
ipint_simd_f32x4_mul_validate [AVX]
ipint_simd_f32x4_ne_validate [AVX]
ipint_simd_f32x4_nearest_validate [AVX]
ipint_simd_f32x4_neg_validate [AVX]
ipint_simd_f32x4_pmax_validate [AVX]
ipint_simd_f32x4_pmin_validate [AVX]
ipint_simd_f32x4_splat_validate [AVX]
ipint_simd_f32x4_sqrt_validate [AVX]
ipint_simd_f32x4_sub_validate [AVX]
ipint_simd_f32x4_trunc_validate [AVX]
ipint_simd_f64x2_abs_validate [AVX]
ipint_simd_f64x2_add_validate [AVX]
ipint_simd_f64x2_ceil_validate [AVX]
ipint_simd_f64x2_convert_low_i32x4_s_validate [AVX]
ipint_simd_f64x2_convert_low_i32x4_u_validate [AVX]
ipint_simd_f64x2_div_validate [AVX]
ipint_simd_f64x2_eq_validate [AVX]
ipint_simd_f64x2_floor_validate [AVX]
ipint_simd_f64x2_ge_validate [AVX]
ipint_simd_f64x2_gt_validate [AVX]
ipint_simd_f64x2_le_validate [AVX]
ipint_simd_f64x2_lt_validate [AVX]
ipint_simd_f64x2_max_validate [AVX]
ipint_simd_f64x2_min_validate [AVX]
ipint_simd_f64x2_mul_validate [AVX]
ipint_simd_f64x2_ne_validate [AVX]
ipint_simd_f64x2_nearest_validate [AVX]
ipint_simd_f64x2_neg_validate [AVX]
ipint_simd_f64x2_pmax_validate [AVX]
ipint_simd_f64x2_pmin_validate [AVX]
ipint_simd_f64x2_promote_low_f32x4_validate [AVX]
ipint_simd_f64x2_splat_validate [AVX]
ipint_simd_f64x2_sqrt_validate [AVX]
ipint_simd_f64x2_sub_validate [AVX]
ipint_simd_f64x2_trunc_validate [AVX]
ipint_simd_i16x8_abs_validate [AVX]
ipint_simd_i16x8_add_sat_s_validate [AVX]
ipint_simd_i16x8_add_sat_u_validate [AVX]
ipint_simd_i16x8_add_validate [AVX]
ipint_simd_i16x8_all_true_validate [AVX]
ipint_simd_i16x8_avgr_u_validate [AVX]
ipint_simd_i16x8_eq_validate [AVX]
ipint_simd_i16x8_extadd_pairwise_i8x16_s_validate [AVX]
ipint_simd_i16x8_extadd_pairwise_i8x16_u_validate [AVX]
ipint_simd_i16x8_extend_high_i8x16_s_validate [AVX]
ipint_simd_i16x8_extend_high_i8x16_u_validate [AVX]
ipint_simd_i16x8_extend_low_i8x16_s_validate [AVX]
ipint_simd_i16x8_extend_low_i8x16_u_validate [AVX]
ipint_simd_i16x8_extmul_high_i8x16_s_validate [AVX]
ipint_simd_i16x8_extmul_high_i8x16_u_validate [AVX]
ipint_simd_i16x8_extmul_low_i8x16_s_validate [AVX]
ipint_simd_i16x8_extmul_low_i8x16_u_validate [AVX]
ipint_simd_i16x8_ge_s_validate [AVX]
ipint_simd_i16x8_ge_u_validate [AVX]
ipint_simd_i16x8_gt_s_validate [AVX]
ipint_simd_i16x8_gt_u_validate [AVX]
ipint_simd_i16x8_le_s_validate [AVX]
ipint_simd_i16x8_le_u_validate [AVX]
ipint_simd_i16x8_lt_s_validate [AVX]
ipint_simd_i16x8_lt_u_validate [AVX]
ipint_simd_i16x8_max_s_validate [AVX]
ipint_simd_i16x8_max_u_validate [AVX]
ipint_simd_i16x8_min_s_validate [AVX]
ipint_simd_i16x8_min_u_validate [AVX]
ipint_simd_i16x8_mul_validate [AVX]
ipint_simd_i16x8_narrow_i32x4_s_validate [AVX]
ipint_simd_i16x8_narrow_i32x4_u_validate [AVX]
ipint_simd_i16x8_ne_validate [AVX]
ipint_simd_i16x8_neg_validate [AVX]
ipint_simd_i16x8_q15mulr_sat_s_validate [AVX]
ipint_simd_i16x8_shl_validate [AVX]
ipint_simd_i16x8_shr_s_validate [AVX]
ipint_simd_i16x8_shr_u_validate [AVX]
ipint_simd_i16x8_splat_validate [AVX]
ipint_simd_i16x8_sub_sat_s_validate [AVX]
ipint_simd_i16x8_sub_sat_u_validate [AVX]
ipint_simd_i16x8_sub_validate [AVX]
ipint_simd_i32x4_abs_validate [AVX]
ipint_simd_i32x4_add_validate [AVX]
ipint_simd_i32x4_all_true_validate [AVX]
ipint_simd_i32x4_dot_i16x8_s_validate [AVX]
ipint_simd_i32x4_eq_validate [AVX]
ipint_simd_i32x4_extadd_pairwise_i16x8_s_validate [AVX]
ipint_simd_i32x4_extadd_pairwise_i16x8_u_validate [AVX]
ipint_simd_i32x4_extend_high_i16x8_s_validate [AVX]
ipint_simd_i32x4_extend_high_i16x8_u_validate [AVX]
ipint_simd_i32x4_extend_low_i16x8_s_validate [AVX]
ipint_simd_i32x4_extend_low_i16x8_u_validate [AVX]
ipint_simd_i32x4_extmul_high_i16x8_s_validate [AVX]
ipint_simd_i32x4_extmul_high_i16x8_u_validate [AVX]
ipint_simd_i32x4_extmul_low_i16x8_s_validate [AVX]
ipint_simd_i32x4_extmul_low_i16x8_u_validate [AVX]
ipint_simd_i32x4_ge_s_validate [AVX]
ipint_simd_i32x4_ge_u_validate [AVX]
ipint_simd_i32x4_gt_s_validate [AVX]
ipint_simd_i32x4_gt_u_validate [AVX]
ipint_simd_i32x4_le_s_validate [AVX]
ipint_simd_i32x4_le_u_validate [AVX]
ipint_simd_i32x4_lt_s_validate [AVX]
ipint_simd_i32x4_lt_u_validate [AVX]
ipint_simd_i32x4_max_s_validate [AVX]
ipint_simd_i32x4_max_u_validate [AVX]
ipint_simd_i32x4_min_s_validate [AVX]
ipint_simd_i32x4_min_u_validate [AVX]
ipint_simd_i32x4_mul_validate [AVX]
ipint_simd_i32x4_ne_validate [AVX]
ipint_simd_i32x4_neg_validate [AVX]
ipint_simd_i32x4_shl_validate [AVX]
ipint_simd_i32x4_shr_s_validate [AVX]
ipint_simd_i32x4_shr_u_validate [AVX]
ipint_simd_i32x4_splat_validate [AVX]
ipint_simd_i32x4_sub_validate [AVX]
ipint_simd_i32x4_trunc_sat_f32x4_s_validate [AVX]
ipint_simd_i32x4_trunc_sat_f32x4_u_validate [AVX]
ipint_simd_i32x4_trunc_sat_f64x2_s_zero_validate [AVX]
ipint_simd_i32x4_trunc_sat_f64x2_u_zero_validate [AVX]
ipint_simd_i64x2_abs_validate [AVX]
ipint_simd_i64x2_add_validate [AVX]
ipint_simd_i64x2_all_true_validate [AVX]
ipint_simd_i64x2_eq_validate [AVX]
ipint_simd_i64x2_extend_high_i32x4_s_validate [AVX]
ipint_simd_i64x2_extend_high_i32x4_u_validate [AVX]
ipint_simd_i64x2_extend_low_i32x4_s_validate [AVX]
ipint_simd_i64x2_extend_low_i32x4_u_validate [AVX]
ipint_simd_i64x2_extmul_high_i32x4_s_validate [AVX]
ipint_simd_i64x2_extmul_high_i32x4_u_validate [AVX]
ipint_simd_i64x2_extmul_low_i32x4_s_validate [AVX]
ipint_simd_i64x2_extmul_low_i32x4_u_validate [AVX]
ipint_simd_i64x2_ge_s_validate [AVX]
ipint_simd_i64x2_gt_s_validate [AVX]
ipint_simd_i64x2_le_s_validate [AVX]
ipint_simd_i64x2_lt_s_validate [AVX]
ipint_simd_i64x2_ne_validate [AVX]
ipint_simd_i64x2_neg_validate [AVX]
ipint_simd_i64x2_shl_validate [AVX]
ipint_simd_i64x2_shr_u_validate [AVX]
ipint_simd_i64x2_splat_validate [AVX]
ipint_simd_i64x2_sub_validate [AVX]
ipint_simd_i8x16_abs_validate [AVX]
ipint_simd_i8x16_add_sat_s_validate [AVX]
ipint_simd_i8x16_add_sat_u_validate [AVX]
ipint_simd_i8x16_add_validate [AVX]
ipint_simd_i8x16_all_true_validate [AVX]
ipint_simd_i8x16_avgr_u_validate [AVX]
ipint_simd_i8x16_eq_validate [AVX]
ipint_simd_i8x16_ge_s_validate [AVX]
ipint_simd_i8x16_ge_u_validate [AVX]
ipint_simd_i8x16_gt_s_validate [AVX]
ipint_simd_i8x16_gt_u_validate [AVX]
ipint_simd_i8x16_le_s_validate [AVX]
ipint_simd_i8x16_le_u_validate [AVX]
ipint_simd_i8x16_lt_s_validate [AVX]
ipint_simd_i8x16_lt_u_validate [AVX]
ipint_simd_i8x16_max_s_validate [AVX]
ipint_simd_i8x16_max_u_validate [AVX]
ipint_simd_i8x16_min_s_validate [AVX]
ipint_simd_i8x16_min_u_validate [AVX]
ipint_simd_i8x16_narrow_i16x8_s_validate [AVX]
ipint_simd_i8x16_narrow_i16x8_u_validate [AVX]
ipint_simd_i8x16_ne_validate [AVX]
ipint_simd_i8x16_neg_validate [AVX]
ipint_simd_i8x16_popcnt_validate [AVX]
ipint_simd_i8x16_shl_validate [AVX]
ipint_simd_i8x16_shr_s_validate [AVX]
ipint_simd_i8x16_shr_u_validate [AVX]
ipint_simd_i8x16_splat_validate [AVX]
ipint_simd_i8x16_sub_sat_s_validate [AVX]
ipint_simd_i8x16_sub_sat_u_validate [AVX]
ipint_simd_i8x16_sub_validate [AVX]
ipint_simd_i8x16_swizzle_validate [AVX]
ipint_simd_v128_and_validate [AVX]
ipint_simd_v128_andnot_validate [AVX]
ipint_simd_v128_any_true_validate [AVX]
ipint_simd_v128_bitselect_validate [AVX]
ipint_simd_v128_load16_splat_mem_validate [AVX]
ipint_simd_v128_load32_splat_mem_validate [AVX]
ipint_simd_v128_load64_splat_mem_validate [AVX]
ipint_simd_v128_load8_splat_mem_validate [AVX]
ipint_simd_v128_not_validate [AVX]
ipint_simd_v128_or_validate [AVX]
ipint_simd_v128_xor_validate [AVX]
# ----------------------------------------------------------------------------
# JSC MacroAssembler probe.
# (1 symbols)
# ----------------------------------------------------------------------------
ctiMasmProbeTrampolineAVX [AVX]
# ----------------------------------------------------------------------------
# Highway. MSVC-mangled bun::N_AVX* names.
# (72 symbols)
# ----------------------------------------------------------------------------
bun::N_AVX10_2::ContainsNewlineOrNonASCIIOrQuoteImpl [AVX, AVX512BW, AVX512F]
bun::N_AVX10_2::CopyU16ToU8Impl [AVX, AVX512BW, AVX512F, AVX512VL, AVX512_VBMI]
bun::N_AVX10_2::FillWithSkipMaskImpl [AVX, AVX512DQ, AVX512F]
bun::N_AVX10_2::IndexOfAnyCharImpl [AVX, AVX512BW, AVX512F, AVX512VL, AVX512_FP16]
bun::N_AVX10_2::IndexOfCharImpl [AVX, AVX512BW, BMI2]
bun::N_AVX10_2::IndexOfInterestingCharacterInStringLiteralImpl [AVX, AVX512BW, AVX512F]
bun::N_AVX10_2::IndexOfNeedsEscapeForJavaScriptStringImplBacktick [AVX, AVX512BW, AVX512F]
bun::N_AVX10_2::IndexOfNeedsEscapeForJavaScriptStringImplQuote [AVX, AVX512BW, AVX512F]
bun::N_AVX10_2::IndexOfNewlineOrNonASCIIImpl [AVX, AVX512BW, AVX512F]
bun::N_AVX10_2::IndexOfNewlineOrNonASCIIOrHashOrAtImpl [AVX, AVX512BW, AVX512F]
bun::N_AVX10_2::IndexOfSpaceOrNewlineOrNonASCIIImpl [AVX, AVX512BW, AVX512F]
bun::N_AVX10_2::MemMemImpl [AVX, AVX512BW, AVX512F, BMI1]
bun::N_AVX2::ContainsNewlineOrNonASCIIOrQuoteImpl [AVX, AVX2]
bun::N_AVX2::CopyU16ToU8Impl [AVX, AVX2]
bun::N_AVX2::FillWithSkipMaskImpl [AVX]
bun::N_AVX2::IndexOfAnyCharImpl [AVX, AVX2]
bun::N_AVX2::IndexOfCharImpl [AVX, AVX2]
bun::N_AVX2::IndexOfInterestingCharacterInStringLiteralImpl [AVX, AVX2]
bun::N_AVX2::IndexOfNeedsEscapeForJavaScriptStringImplBacktick [AVX, AVX2]
bun::N_AVX2::IndexOfNeedsEscapeForJavaScriptStringImplQuote [AVX, AVX2]
bun::N_AVX2::IndexOfNewlineOrNonASCIIImpl [AVX, AVX2]
bun::N_AVX2::IndexOfNewlineOrNonASCIIOrHashOrAtImpl [AVX, AVX2]
bun::N_AVX2::IndexOfSpaceOrNewlineOrNonASCIIImpl [AVX, AVX2]
bun::N_AVX2::MemMemImpl [AVX, AVX2]
bun::N_AVX3::ContainsNewlineOrNonASCIIOrQuoteImpl [AVX, AVX512BW, AVX512F]
bun::N_AVX3::CopyU16ToU8Impl [AVX, AVX512BW, AVX512F, AVX512VL]
bun::N_AVX3::FillWithSkipMaskImpl [AVX, AVX512DQ, AVX512F]
bun::N_AVX3::IndexOfAnyCharImpl [AVX, AVX512BW, AVX512F, AVX512VL]
bun::N_AVX3::IndexOfCharImpl [AVX, AVX512BW, BMI2]
bun::N_AVX3::IndexOfInterestingCharacterInStringLiteralImpl [AVX, AVX512BW, AVX512F]
bun::N_AVX3::IndexOfNeedsEscapeForJavaScriptStringImplBacktick [AVX, AVX512BW, AVX512F]
bun::N_AVX3::IndexOfNeedsEscapeForJavaScriptStringImplQuote [AVX, AVX512BW, AVX512F]
bun::N_AVX3::IndexOfNewlineOrNonASCIIImpl [AVX, AVX512BW, AVX512F]
bun::N_AVX3::IndexOfNewlineOrNonASCIIOrHashOrAtImpl [AVX, AVX512BW, AVX512F]
bun::N_AVX3::IndexOfSpaceOrNewlineOrNonASCIIImpl [AVX, AVX512BW, AVX512F]
bun::N_AVX3::MemMemImpl [AVX, AVX512BW, AVX512F, BMI1]
bun::N_AVX3_DL::ContainsNewlineOrNonASCIIOrQuoteImpl [AVX, AVX512BW, AVX512F]
bun::N_AVX3_DL::CopyU16ToU8Impl [AVX, AVX512BW, AVX512F, AVX512VL, AVX512_VBMI]
bun::N_AVX3_DL::FillWithSkipMaskImpl [AVX, AVX512DQ, AVX512F]
bun::N_AVX3_DL::IndexOfAnyCharImpl [AVX, AVX512BW, AVX512F, AVX512VL]
bun::N_AVX3_DL::IndexOfCharImpl [AVX, AVX512BW, BMI2]
bun::N_AVX3_DL::IndexOfInterestingCharacterInStringLiteralImpl [AVX, AVX512BW, AVX512F]
bun::N_AVX3_DL::IndexOfNeedsEscapeForJavaScriptStringImplBacktick [AVX, AVX512BW, AVX512F]
bun::N_AVX3_DL::IndexOfNeedsEscapeForJavaScriptStringImplQuote [AVX, AVX512BW, AVX512F]
bun::N_AVX3_DL::IndexOfNewlineOrNonASCIIImpl [AVX, AVX512BW, AVX512F]
bun::N_AVX3_DL::IndexOfNewlineOrNonASCIIOrHashOrAtImpl [AVX, AVX512BW, AVX512F]
bun::N_AVX3_DL::IndexOfSpaceOrNewlineOrNonASCIIImpl [AVX, AVX512BW, AVX512F]
bun::N_AVX3_DL::MemMemImpl [AVX, AVX512BW, AVX512F, BMI1]
bun::N_AVX3_SPR::ContainsNewlineOrNonASCIIOrQuoteImpl [AVX, AVX512BW, AVX512F]
bun::N_AVX3_SPR::CopyU16ToU8Impl [AVX, AVX512BW, AVX512F, AVX512VL, AVX512_VBMI]
bun::N_AVX3_SPR::FillWithSkipMaskImpl [AVX, AVX512DQ, AVX512F]
bun::N_AVX3_SPR::IndexOfAnyCharImpl [AVX, AVX512BW, AVX512F, AVX512VL, AVX512_FP16]
bun::N_AVX3_SPR::IndexOfCharImpl [AVX, AVX512BW, BMI2]
bun::N_AVX3_SPR::IndexOfInterestingCharacterInStringLiteralImpl [AVX, AVX512BW, AVX512F]
bun::N_AVX3_SPR::IndexOfNeedsEscapeForJavaScriptStringImplBacktick [AVX, AVX512BW, AVX512F]
bun::N_AVX3_SPR::IndexOfNeedsEscapeForJavaScriptStringImplQuote [AVX, AVX512BW, AVX512F]
bun::N_AVX3_SPR::IndexOfNewlineOrNonASCIIImpl [AVX, AVX512BW, AVX512F]
bun::N_AVX3_SPR::IndexOfNewlineOrNonASCIIOrHashOrAtImpl [AVX, AVX512BW, AVX512F]
bun::N_AVX3_SPR::IndexOfSpaceOrNewlineOrNonASCIIImpl [AVX, AVX512BW, AVX512F]
bun::N_AVX3_SPR::MemMemImpl [AVX, AVX512BW, AVX512F, BMI1]
bun::N_AVX3_ZEN4::ContainsNewlineOrNonASCIIOrQuoteImpl [AVX, AVX512BW, AVX512F]
bun::N_AVX3_ZEN4::CopyU16ToU8Impl [AVX, AVX512BW, AVX512F, AVX512VL, AVX512_VBMI]
bun::N_AVX3_ZEN4::FillWithSkipMaskImpl [AVX, AVX512DQ, AVX512F]
bun::N_AVX3_ZEN4::IndexOfAnyCharImpl [AVX, AVX512BW, AVX512F, AVX512VL]
bun::N_AVX3_ZEN4::IndexOfCharImpl [AVX, AVX512BW, BMI2]
bun::N_AVX3_ZEN4::IndexOfInterestingCharacterInStringLiteralImpl [AVX, AVX512BW, AVX512F]
bun::N_AVX3_ZEN4::IndexOfNeedsEscapeForJavaScriptStringImplBacktick [AVX, AVX512BW, AVX512F]
bun::N_AVX3_ZEN4::IndexOfNeedsEscapeForJavaScriptStringImplQuote [AVX, AVX512BW, AVX512F]
bun::N_AVX3_ZEN4::IndexOfNewlineOrNonASCIIImpl [AVX, AVX512BW, AVX512F]
bun::N_AVX3_ZEN4::IndexOfNewlineOrNonASCIIOrHashOrAtImpl [AVX, AVX512BW, AVX512F]
bun::N_AVX3_ZEN4::IndexOfSpaceOrNewlineOrNonASCIIImpl [AVX, AVX512BW, AVX512F]
bun::N_AVX3_ZEN4::MemMemImpl [AVX, AVX512BW, AVX512F, BMI1]
# ----------------------------------------------------------------------------
# BoringSSL AES.
# (14 symbols)
# ----------------------------------------------------------------------------
aes_gcm_dec_update_vaes_avx2 [AES, AVX, AVX2, MOVBE, PCLMULQDQ, VAES, VPCLMULQDQ]
aes_gcm_dec_update_vaes_avx512 [AVX, AVX512BW, AVX512F, AVX512VL, BMI2]
aes_gcm_enc_update_vaes_avx2 [AVX, AVX2, PCLMULQDQ, VAES, VPCLMULQDQ]
aes_gcm_enc_update_vaes_avx512 [AVX, AVX512BW, AVX512F, AVX512VL, BMI2]
aes_hw_cbc_encrypt [AES]
aes_hw_ctr32_encrypt_blocks [AES]
aes_hw_decrypt [AES]
aes_hw_ecb_encrypt [AES]
aes_hw_encrypt [AES]
aes_hw_encrypt_key_to_decrypt_key [AES]
aes_hw_set_encrypt_key_alt [AES]
aes_hw_set_encrypt_key_base [AES]
aesni_gcm_decrypt [AES, AVX]
aesni_gcm_encrypt [AVX, PCLMULQDQ]
# ----------------------------------------------------------------------------
# BoringSSL SHA.
# (6 symbols)
# ----------------------------------------------------------------------------
sha1_block_data_order_avx [AVX]
sha1_block_data_order_avx2 [AVX, AVX2, BMI1, BMI2]
sha1_block_data_order_hw [SHA]
sha256_block_data_order_avx [AVX]
sha256_block_data_order_hw [SHA]
sha512_block_data_order_avx [AVX]
# ----------------------------------------------------------------------------
# BoringSSL ChaCha20.
# (3 symbols)
# ----------------------------------------------------------------------------
ChaCha20_ctr32_avx2 [AVX, AVX2]
chacha20_poly1305_open_avx2 [AVX, AVX2, BMI2]
chacha20_poly1305_seal_avx2 [AVX, AVX2, BMI2]
# ----------------------------------------------------------------------------
# BoringSSL GCM.
# (11 symbols)
# ----------------------------------------------------------------------------
gcm_ghash_avx [AVX, PCLMULQDQ]
gcm_ghash_clmul [PCLMULQDQ]
gcm_ghash_vpclmulqdq_avx2 [AVX, AVX2, PCLMULQDQ, VPCLMULQDQ]
gcm_ghash_vpclmulqdq_avx512 [AVX, AVX512BW, AVX512F, AVX512VL, PCLMULQDQ]
gcm_gmult_clmul [PCLMULQDQ]
gcm_gmult_vpclmulqdq_avx2 [AVX, PCLMULQDQ]
gcm_gmult_vpclmulqdq_avx512 [AVX, AVX512VL, PCLMULQDQ]
gcm_init_avx [AVX, PCLMULQDQ]
gcm_init_clmul [PCLMULQDQ]
gcm_init_vpclmulqdq_avx2 [AVX, AVX2, PCLMULQDQ, VPCLMULQDQ]
gcm_init_vpclmulqdq_avx512 [AVX, AVX2, AVX512BW, AVX512F, AVX512VL, PCLMULQDQ, VPCLMULQDQ]
# ----------------------------------------------------------------------------
# BoringSSL bignum.
# (14 symbols)
# ----------------------------------------------------------------------------
beeu_mod_inverse_vartime [AVX]
bn_mulx4x_mont [ADX, BMI2]
bn_mulx4x_mont_gather5 [ADX, BMI2]
bn_sqrx8x_internal [ADX, BMI1, BMI2]
ecp_nistz256_mul_mont_adx [ADX, BMI2]
ecp_nistz256_ord_mul_mont_adx [ADX, BMI2]
ecp_nistz256_ord_sqr_mont_adx [ADX, BMI2]
ecp_nistz256_select_w5_avx2 [AVX, AVX2]
ecp_nistz256_select_w7_avx2 [AVX, AVX2]
ecp_nistz256_sqr_mont_adx [ADX, BMI2]
rsaz_1024_gather5_avx2 [AVX, AVX2]
rsaz_1024_mul_avx2 [AVX, AVX2]
rsaz_1024_scatter5_avx2 [AVX, AVX2]
rsaz_1024_sqr_avx2 [AVX, AVX2]
# ----------------------------------------------------------------------------
# BoringSSL RDRAND.
# (2 symbols)
# ----------------------------------------------------------------------------
CRYPTO_rdrand [RDRAND]
CRYPTO_rdrand_multiple8_buf [RDRAND]
# ----------------------------------------------------------------------------
# libdeflate.
# (10 symbols)
# ----------------------------------------------------------------------------
adler32_x86_avx2 [AVX, AVX2]
adler32_x86_avx2_vnni [AVX, AVX2, AVX_VNNI]
adler32_x86_avx512_vl256_vnni [AVX, AVX2, AVX512BW, AVX512F, AVX512VL]
adler32_x86_avx512_vl512_vnni [AVX, AVX2, AVX512BW, AVX512F, AVX512_VNNI]
crc32_x86_pclmulqdq [PCLMULQDQ]
crc32_x86_pclmulqdq_avx [AVX, PCLMULQDQ]
crc32_x86_vpclmulqdq_avx2 [AVX, AVX2, PCLMULQDQ, VPCLMULQDQ]
crc32_x86_vpclmulqdq_avx512_vl256 [AVX, AVX2, AVX512BW, AVX512VL, PCLMULQDQ, VPCLMULQDQ]
crc32_x86_vpclmulqdq_avx512_vl512 [AVX, AVX2, AVX512BW, AVX512F, AVX512VL, PCLMULQDQ, VPCLMULQDQ]
deflate_decompress_bmi2 [BMI2]
# ----------------------------------------------------------------------------
# Rust memchr detect functions (via lolhtml deps).
# (3 symbols)
# ----------------------------------------------------------------------------
_RNvNvNtNtNt<rust-hash>6memchr4arch6x86_646memchr10memchr_raw6detect [AVX, AVX2]
_RNvNvNtNtNt<rust-hash>6memchr4arch6x86_646memchr11memchr2_raw6detect [AVX, AVX2]
_RNvNvNtNtNt<rust-hash>6memchr4arch6x86_646memchr11memchr3_raw6detect [AVX, AVX2]
# ----------------------------------------------------------------------------
# MSVC STL vectorized algorithms. Gate: __isa_available.
# (11 symbols)
# ----------------------------------------------------------------------------
__std_reverse_copy_trivially_copyable_1 [AVX, AVX2]
__std_reverse_trivially_swappable_1 [AVX, AVX2]
__std_reverse_trivially_swappable_2 [AVX, AVX2]
__std_reverse_trivially_swappable_4 [AVX, AVX2]
__std_reverse_trivially_swappable_8 [AVX, AVX2]
`anonymous namespace'::__std_find_last_trivial_impl<`anonymous namespace'::_Find_traits_1,unsigned char> [AVX, AVX2]
`anonymous namespace'::__std_find_trivial_impl<`anonymous namespace'::_Find_traits_1,unsigned char> [AVX, AVX2]
`anonymous namespace'::__std_find_trivial_impl<`anonymous namespace'::_Find_traits_2,unsigned short> [AVX, AVX2]
`anonymous namespace'::__std_find_trivial_impl<`anonymous namespace'::_Find_traits_4,unsigned int> [AVX, AVX2]
`anonymous namespace'::__std_find_trivial_impl<`anonymous namespace'::_Find_traits_8,unsigned __int64> [AVX, AVX2]
`anonymous namespace'::__std_minmax_impl<3,`anonymous namespace'::_Minmax_traits_8_avx,1> [AVX, AVX2]
# ----------------------------------------------------------------------------
# MSVC CRT libm + mem*/str* SIMD variants. Gate: __isa_available.
# (42 symbols)
# ----------------------------------------------------------------------------
__remainder_piby2_fma3 [AVX, FMA]
__remainder_piby2_fma3_bdl [AVX, FMA]
_handle_nan_fma [AVX]
_handle_nanf_fma [AVX]
acos_fma [AVX, FMA]
acosf_fma [AVX, FMA]
asin_fma [AVX, FMA]
asinf_fma [AVX, FMA]
atan2_fma [AVX, BMI2, FMA]
atan_fma [AVX, FMA]
atanf_fma [AVX, FMA]
cos [AVX, FMA]
cosf [AVX, FMA]
cosh_fma [AVX, FMA]
coshf_fma [AVX, FMA]
exp [AVX, FMA]
exp2_fma [AVX, FMA]
expf [AVX, FMA]
fma [FMA]
fmod [FMA]
log [AVX, FMA]
log10 [AVX, FMA]
log10f [AVX, FMA]
log2f_fma [AVX, FMA]
logf [AVX, FMA]
memcpy [AVX]
memcpy_avx_ermsb_Intel [AVX]
memcpy_avx_ermsb_amd [AVX]
memset [AVX]
pow_fma [AVX, BMI2, FMA]
powf [AVX, FMA]
sin [AVX, FMA]
sinf [AVX, FMA]
sinh_fma [AVX, FMA]
sinhf_fma [AVX, FMA]
strnlen [AVX, AVX2]
tan [AVX, FMA]
tanf [AVX, FMA]
tanh_fma [AVX, FMA]
tanhf_fma [AVX, FMA]
wcslen [AVX, AVX2]
wcsnlen [AVX, AVX2]
# ----------------------------------------------------------------------------
# Rust std memchr AVX2 kernel inlined into lolhtml. Gate: is_x86_feature_detected!.
# PDB attribution varies by toolchain — sometimes a hashbrown call-site symbol,
# sometimes no symbol at all (falls through to section-contribution <lib:> name).
# (2 symbols)
# ----------------------------------------------------------------------------
_RINvYNtNt<rust-hash>9hashbrown6hasher18DefaultHashBuilderNtNt<rust-hash>4core4hash11BuildHasher8hash_oneRNtNtNt<rust-hash>8lol_html4html10local_name9LocalNameEB1R_ [AVX, AVX2]
<lib:lolhtml.lib> [AVX, AVX2]

View File

@@ -0,0 +1,667 @@
# verify-baseline-static allowlist for x64 Nehalem baseline builds.
#
# Each symbol contains instructions beyond Nehalem but is runtime-dispatched
# behind a CPUID gate. A new symbol not on this list is either (a) a new
# dispatch target to add here, or (b) a -march leak to fix.
#
# Feature ceilings: [FEAT, ...] lists what the gate checks. A feature outside
# the brackets is a violation even for an allowlisted symbol.
#
# Shared by linux-x64-baseline and linux-x64-musl-baseline.
# ----------------------------------------------------------------------------
# simdutf AVX2 (Haswell). Gate: set_best() dispatcher — CPUID at first call, cached in atomic ptr.
# (89 symbols)
# ----------------------------------------------------------------------------
_ZN7simdutf7haswell12_GLOBAL__N_128convert_masked_utf8_to_utf16ILNS_10endiannessE0EEEmPKcmRPDs [AVX, AVX2]
_ZN7simdutf7haswell12_GLOBAL__N_128convert_masked_utf8_to_utf16ILNS_10endiannessE1EEEmPKcmRPDs [AVX, AVX2]
_ZN7simdutf7haswell12_GLOBAL__N_128convert_masked_utf8_to_utf32EPKcmRPDi [AVX, AVX2]
_ZN7simdutf7haswell12_GLOBAL__N_15utf1626validate_utf16_with_errorsILNS_10endiannessE0EEEKNS_6resultEPKDsm [AVX, AVX2, BMI1]
_ZN7simdutf7haswell12_GLOBAL__N_15utf1626validate_utf16_with_errorsILNS_10endiannessE1EEEKNS_6resultEPKDsm [AVX, AVX2, BMI1]
_ZN7simdutf7haswell12_GLOBAL__N_16base6422compress_decode_base64ILb0ELb0ELb0EDsEENS_11full_resultEPcPKT2_mNS_14base64_optionsENS_27last_chunk_handling_optionsE [AVX, AVX2, BMI1]
_ZN7simdutf7haswell12_GLOBAL__N_16base6422compress_decode_base64ILb0ELb0ELb0EcEENS_11full_resultEPcPKT2_mNS_14base64_optionsENS_27last_chunk_handling_optionsE [AVX, AVX2, BMI1]
_ZN7simdutf7haswell12_GLOBAL__N_16base6422compress_decode_base64ILb0ELb0ELb1EDsEENS_11full_resultEPcPKT2_mNS_14base64_optionsENS_27last_chunk_handling_optionsE [AVX, AVX2, BMI1]
_ZN7simdutf7haswell12_GLOBAL__N_16base6422compress_decode_base64ILb0ELb0ELb1EcEENS_11full_resultEPcPKT2_mNS_14base64_optionsENS_27last_chunk_handling_optionsE [AVX, AVX2, BMI1]
_ZN7simdutf7haswell12_GLOBAL__N_16base6422compress_decode_base64ILb0ELb1ELb0EDsEENS_11full_resultEPcPKT2_mNS_14base64_optionsENS_27last_chunk_handling_optionsE [AVX, AVX2, BMI1]
_ZN7simdutf7haswell12_GLOBAL__N_16base6422compress_decode_base64ILb0ELb1ELb0EcEENS_11full_resultEPcPKT2_mNS_14base64_optionsENS_27last_chunk_handling_optionsE [AVX, AVX2, BMI1]
_ZN7simdutf7haswell12_GLOBAL__N_16base6422compress_decode_base64ILb0ELb1ELb1EDsEENS_11full_resultEPcPKT2_mNS_14base64_optionsENS_27last_chunk_handling_optionsE [AVX, AVX2, BMI1]
_ZN7simdutf7haswell12_GLOBAL__N_16base6422compress_decode_base64ILb0ELb1ELb1EcEENS_11full_resultEPcPKT2_mNS_14base64_optionsENS_27last_chunk_handling_optionsE [AVX, AVX2, BMI1]
_ZN7simdutf7haswell12_GLOBAL__N_16base6422compress_decode_base64ILb1ELb0ELb0EDsEENS_11full_resultEPcPKT2_mNS_14base64_optionsENS_27last_chunk_handling_optionsE [AVX, AVX2, BMI1]
_ZN7simdutf7haswell12_GLOBAL__N_16base6422compress_decode_base64ILb1ELb0ELb0EcEENS_11full_resultEPcPKT2_mNS_14base64_optionsENS_27last_chunk_handling_optionsE [AVX, AVX2, BMI1]
_ZN7simdutf7haswell12_GLOBAL__N_16base6422compress_decode_base64ILb1ELb1ELb0EDsEENS_11full_resultEPcPKT2_mNS_14base64_optionsENS_27last_chunk_handling_optionsE [AVX, AVX2, BMI1]
_ZN7simdutf7haswell12_GLOBAL__N_16base6422compress_decode_base64ILb1ELb1ELb0EcEENS_11full_resultEPcPKT2_mNS_14base64_optionsENS_27last_chunk_handling_optionsE [AVX, AVX2, BMI1]
_ZNK7simdutf7haswell14implementation10count_utf8EPKcm [AVX, AVX2]
_ZNK7simdutf7haswell14implementation13count_utf16beEPKDsm [AVX, AVX2]
_ZNK7simdutf7haswell14implementation13count_utf16leEPKDsm [AVX, AVX2]
_ZNK7simdutf7haswell14implementation13validate_utf8EPKcm [AVX, AVX2]
_ZNK7simdutf7haswell14implementation14validate_asciiEPKcm [AVX, AVX2]
_ZNK7simdutf7haswell14implementation14validate_utf32EPKDim [AVX, AVX2]
_ZNK7simdutf7haswell14implementation16binary_to_base64EPKcmPcNS_14base64_optionsE [AVX, AVX2]
_ZNK7simdutf7haswell14implementation16detect_encodingsEPKcm [AVX, AVX2]
_ZNK7simdutf7haswell14implementation16validate_utf16beEPKDsm [AVX, AVX2, BMI1]
_ZNK7simdutf7haswell14implementation16validate_utf16leEPKDsm [AVX, AVX2, BMI1]
_ZNK7simdutf7haswell14implementation21convert_utf32_to_utf8EPKDimPc [AVX, AVX2]
_ZNK7simdutf7haswell14implementation21convert_utf8_to_utf32EPKcmPDi [AVX, AVX2]
_ZNK7simdutf7haswell14implementation22convert_latin1_to_utf8EPKcmPc [AVX, AVX2]
_ZNK7simdutf7haswell14implementation22convert_utf8_to_latin1EPKcmPc [AVX, AVX2]
_ZNK7simdutf7haswell14implementation22to_well_formed_utf16beEPKDsmPDs [AVX, AVX2, BMI1]
_ZNK7simdutf7haswell14implementation22to_well_formed_utf16leEPKDsmPDs [AVX, AVX2, BMI1]
_ZNK7simdutf7haswell14implementation22utf16_length_from_utf8EPKcm [AVX, AVX2]
_ZNK7simdutf7haswell14implementation22utf32_length_from_utf8EPKcm [AVX, AVX2]
_ZNK7simdutf7haswell14implementation22utf8_length_from_utf32EPKDim [AVX, AVX2]
_ZNK7simdutf7haswell14implementation23change_endianness_utf16EPKDsmPDs [AVX, AVX2]
_ZNK7simdutf7haswell14implementation23convert_latin1_to_utf32EPKcmPDi [AVX, AVX2]
_ZNK7simdutf7haswell14implementation23convert_utf16be_to_utf8EPKDsmPc [AVX, AVX2]
_ZNK7simdutf7haswell14implementation23convert_utf16le_to_utf8EPKDsmPc [AVX, AVX2]
_ZNK7simdutf7haswell14implementation23convert_utf32_to_latin1EPKDimPc [AVX, AVX2]
_ZNK7simdutf7haswell14implementation23convert_utf8_to_utf16beEPKcmPDs [AVX, AVX2]
_ZNK7simdutf7haswell14implementation23convert_utf8_to_utf16leEPKcmPDs [AVX, AVX2]
_ZNK7simdutf7haswell14implementation23latin1_length_from_utf8EPKcm [AVX, AVX2]
_ZNK7simdutf7haswell14implementation23utf16_length_from_utf32EPKDim [AVX, AVX2]
_ZNK7simdutf7haswell14implementation23utf8_length_from_latin1EPKcm [AVX, AVX2]
_ZNK7simdutf7haswell14implementation24convert_utf16be_to_utf32EPKDsmPDi [AVX, AVX2]
_ZNK7simdutf7haswell14implementation24convert_utf16le_to_utf32EPKDsmPDi [AVX, AVX2]
_ZNK7simdutf7haswell14implementation24convert_utf32_to_utf16beEPKDimPDs [AVX, AVX2]
_ZNK7simdutf7haswell14implementation24convert_utf32_to_utf16leEPKDimPDs [AVX, AVX2]
_ZNK7simdutf7haswell14implementation24utf8_length_from_utf16beEPKDsm [AVX, AVX2]
_ZNK7simdutf7haswell14implementation24utf8_length_from_utf16leEPKDsm [AVX, AVX2]
_ZNK7simdutf7haswell14implementation25convert_latin1_to_utf16beEPKcmPDs [AVX, AVX2]
_ZNK7simdutf7haswell14implementation25convert_latin1_to_utf16leEPKcmPDs [AVX, AVX2]
_ZNK7simdutf7haswell14implementation25convert_utf16be_to_latin1EPKDsmPc [AVX, AVX2]
_ZNK7simdutf7haswell14implementation25convert_utf16le_to_latin1EPKDsmPc [AVX, AVX2]
_ZNK7simdutf7haswell14implementation25utf32_length_from_utf16beEPKDsm [AVX, AVX2]
_ZNK7simdutf7haswell14implementation25utf32_length_from_utf16leEPKDsm [AVX, AVX2]
_ZNK7simdutf7haswell14implementation25validate_utf16be_as_asciiEPKDsm [AVX, AVX2]
_ZNK7simdutf7haswell14implementation25validate_utf16le_as_asciiEPKDsm [AVX, AVX2]
_ZNK7simdutf7haswell14implementation25validate_utf8_with_errorsEPKcm [AVX, AVX2]
_ZNK7simdutf7haswell14implementation26validate_ascii_with_errorsEPKcm [AVX, AVX2]
_ZNK7simdutf7haswell14implementation26validate_utf32_with_errorsEPKDim [AVX, AVX2]
_ZNK7simdutf7haswell14implementation27binary_to_base64_with_linesEPKcmPcmNS_14base64_optionsE [AVX, AVX2]
_ZNK7simdutf7haswell14implementation27convert_valid_utf8_to_utf32EPKcmPDi [AVX, AVX2]
_ZNK7simdutf7haswell14implementation28convert_valid_utf8_to_latin1EPKcmPc [AVX, AVX2]
_ZNK7simdutf7haswell14implementation28validate_utf16be_with_errorsEPKDsm [AVX, AVX2, BMI1]
_ZNK7simdutf7haswell14implementation28validate_utf16le_with_errorsEPKDsm [AVX, AVX2, BMI1]
_ZNK7simdutf7haswell14implementation29convert_valid_utf8_to_utf16beEPKcmPDs [AVX, AVX2]
_ZNK7simdutf7haswell14implementation29convert_valid_utf8_to_utf16leEPKcmPDs [AVX, AVX2]
_ZNK7simdutf7haswell14implementation30convert_valid_utf16be_to_utf32EPKDsmPDi [AVX, AVX2]
_ZNK7simdutf7haswell14implementation30convert_valid_utf16le_to_utf32EPKDsmPDi [AVX, AVX2]
_ZNK7simdutf7haswell14implementation31convert_valid_utf16le_to_latin1EPKDsmPc [AVX, AVX2]
_ZNK7simdutf7haswell14implementation33convert_utf32_to_utf8_with_errorsEPKDimPc [AVX, AVX2]
_ZNK7simdutf7haswell14implementation33convert_utf8_to_utf32_with_errorsEPKcmPDi [AVX, AVX2]
_ZNK7simdutf7haswell14implementation34convert_utf8_to_latin1_with_errorsEPKcmPc [AVX, AVX2]
_ZNK7simdutf7haswell14implementation35convert_utf16be_to_utf8_with_errorsEPKDsmPc [AVX, AVX2]
_ZNK7simdutf7haswell14implementation35convert_utf16le_to_utf8_with_errorsEPKDsmPc [AVX, AVX2]
_ZNK7simdutf7haswell14implementation35convert_utf32_to_latin1_with_errorsEPKDimPc [AVX, AVX2]
_ZNK7simdutf7haswell14implementation35convert_utf8_to_utf16be_with_errorsEPKcmPDs [AVX, AVX2]
_ZNK7simdutf7haswell14implementation35convert_utf8_to_utf16le_with_errorsEPKcmPDs [AVX, AVX2]
_ZNK7simdutf7haswell14implementation36convert_utf16be_to_utf32_with_errorsEPKDsmPDi [AVX, AVX2]
_ZNK7simdutf7haswell14implementation36convert_utf16le_to_utf32_with_errorsEPKDsmPDi [AVX, AVX2]
_ZNK7simdutf7haswell14implementation36convert_utf32_to_utf16be_with_errorsEPKDimPDs [AVX, AVX2]
_ZNK7simdutf7haswell14implementation36convert_utf32_to_utf16le_with_errorsEPKDimPDs [AVX, AVX2]
_ZNK7simdutf7haswell14implementation37convert_utf16be_to_latin1_with_errorsEPKDsmPc [AVX, AVX2]
_ZNK7simdutf7haswell14implementation37convert_utf16le_to_latin1_with_errorsEPKDsmPc [AVX, AVX2]
_ZNK7simdutf7haswell14implementation4findEPKDsS3_Ds [AVX, AVX2]
_ZNK7simdutf7haswell14implementation4findEPKcS3_c [AVX, AVX2]
# ----------------------------------------------------------------------------
# simdutf AVX-512 (Icelake). Same dispatcher.
# (91 symbols)
# ----------------------------------------------------------------------------
_ZN7simdutf7icelake12_GLOBAL__N_121utf16_to_utf8_avx512iILNS_10endiannessE0EEEmPKDsmPhPm [AVX, AVX512BW, AVX512F, AVX512_VBMI, AVX512_VBMI2, BMI1, BMI2]
_ZN7simdutf7icelake12_GLOBAL__N_121utf16_to_utf8_avx512iILNS_10endiannessE1EEEmPKDsmPhPm [AVX, AVX512BW, AVX512F, AVX512_VBMI, AVX512_VBMI2, BMI1, BMI2]
_ZN7simdutf7icelake12_GLOBAL__N_121utf8_to_latin1_avx512ERPKcmRPc [AVX, AVX512BW, AVX512F, AVX512_VBMI2, BMI1, BMI2]
_ZN7simdutf7icelake12_GLOBAL__N_122compress_decode_base64ILb0ELb0ELb0EDsEENS_11full_resultEPcPKT2_mNS_14base64_optionsENS_27last_chunk_handling_optionsE [AVX, AVX512BW, AVX512F, AVX512_VBMI, AVX512_VBMI2, BMI2]
_ZN7simdutf7icelake12_GLOBAL__N_122compress_decode_base64ILb0ELb0ELb0EcEENS_11full_resultEPcPKT2_mNS_14base64_optionsENS_27last_chunk_handling_optionsE [AVX, AVX512BW, AVX512F, AVX512_VBMI, AVX512_VBMI2, BMI2]
_ZN7simdutf7icelake12_GLOBAL__N_122compress_decode_base64ILb0ELb0ELb1EDsEENS_11full_resultEPcPKT2_mNS_14base64_optionsENS_27last_chunk_handling_optionsE [AVX, AVX512BW, AVX512F, AVX512_VBMI, AVX512_VBMI2, BMI2]
_ZN7simdutf7icelake12_GLOBAL__N_122compress_decode_base64ILb0ELb0ELb1EcEENS_11full_resultEPcPKT2_mNS_14base64_optionsENS_27last_chunk_handling_optionsE [AVX, AVX512BW, AVX512F, AVX512_VBMI, AVX512_VBMI2, BMI2]
_ZN7simdutf7icelake12_GLOBAL__N_122compress_decode_base64ILb0ELb1ELb0EDsEENS_11full_resultEPcPKT2_mNS_14base64_optionsENS_27last_chunk_handling_optionsE [AVX, AVX512BW, AVX512F, AVX512_VBMI, AVX512_VBMI2, BMI2]
_ZN7simdutf7icelake12_GLOBAL__N_122compress_decode_base64ILb0ELb1ELb0EcEENS_11full_resultEPcPKT2_mNS_14base64_optionsENS_27last_chunk_handling_optionsE [AVX, AVX512BW, AVX512F, AVX512_VBMI, AVX512_VBMI2, BMI2]
_ZN7simdutf7icelake12_GLOBAL__N_122compress_decode_base64ILb0ELb1ELb1EDsEENS_11full_resultEPcPKT2_mNS_14base64_optionsENS_27last_chunk_handling_optionsE [AVX, AVX512BW, AVX512F, AVX512_VBMI, AVX512_VBMI2, BMI2]
_ZN7simdutf7icelake12_GLOBAL__N_122compress_decode_base64ILb0ELb1ELb1EcEENS_11full_resultEPcPKT2_mNS_14base64_optionsENS_27last_chunk_handling_optionsE [AVX, AVX512BW, AVX512F, AVX512_VBMI, AVX512_VBMI2, BMI2]
_ZN7simdutf7icelake12_GLOBAL__N_122compress_decode_base64ILb1ELb0ELb0EDsEENS_11full_resultEPcPKT2_mNS_14base64_optionsENS_27last_chunk_handling_optionsE [AVX, AVX512BW, AVX512F, AVX512_VBMI, AVX512_VBMI2, BMI2]
_ZN7simdutf7icelake12_GLOBAL__N_122compress_decode_base64ILb1ELb0ELb0EcEENS_11full_resultEPcPKT2_mNS_14base64_optionsENS_27last_chunk_handling_optionsE [AVX, AVX512BW, AVX512F, AVX512_VBMI, AVX512_VBMI2, BMI2]
_ZN7simdutf7icelake12_GLOBAL__N_122compress_decode_base64ILb1ELb1ELb0EDsEENS_11full_resultEPcPKT2_mNS_14base64_optionsENS_27last_chunk_handling_optionsE [AVX, AVX512BW, AVX512F, AVX512_VBMI, AVX512_VBMI2, BMI2]
_ZN7simdutf7icelake12_GLOBAL__N_122compress_decode_base64ILb1ELb1ELb0EcEENS_11full_resultEPcPKT2_mNS_14base64_optionsENS_27last_chunk_handling_optionsE [AVX, AVX512BW, AVX512F, AVX512_VBMI, AVX512_VBMI2, BMI2]
_ZN7simdutf7icelake12_GLOBAL__N_122convert_utf16_to_utf32ILNS_10endiannessE0EEESt5tupleIJPKDsPDibEES6_mS7_ [AVX, AVX512BW, AVX512F, BMI2]
_ZN7simdutf7icelake12_GLOBAL__N_122convert_utf16_to_utf32ILNS_10endiannessE1EEESt5tupleIJPKDsPDibEES6_mS7_ [AVX, AVX512BW, AVX512F, BMI2]
_ZNK7simdutf7icelake14implementation10count_utf8EPKcm [AVX, AVX2, AVX512BW, AVX512DQ, AVX512F, AVX512VL, AVX512_VPOPCNTDQ]
_ZNK7simdutf7icelake14implementation13count_utf16beEPKDsm [AVX, AVX2, AVX512BW, AVX512DQ, AVX512F, AVX512VL]
_ZNK7simdutf7icelake14implementation13count_utf16leEPKDsm [AVX, AVX2, AVX512BW, AVX512DQ, AVX512F, AVX512VL]
_ZNK7simdutf7icelake14implementation13validate_utf8EPKcm [AVX, AVX512BW, AVX512F, BMI2]
_ZNK7simdutf7icelake14implementation14validate_asciiEPKcm [AVX, AVX512BW, AVX512F, BMI2]
_ZNK7simdutf7icelake14implementation14validate_utf32EPKDim [AVX, AVX512BW, AVX512F, BMI2]
_ZNK7simdutf7icelake14implementation16binary_to_base64EPKcmPcNS_14base64_optionsE [AVX, AVX512BW, AVX512F, AVX512_VBMI, BMI2]
_ZNK7simdutf7icelake14implementation16detect_encodingsEPKcm [AVX, AVX512BW, AVX512F, BMI2]
_ZNK7simdutf7icelake14implementation16validate_utf16beEPKDsm [AVX, AVX512BW, AVX512F, BMI2]
_ZNK7simdutf7icelake14implementation16validate_utf16leEPKDsm [AVX, AVX512BW, AVX512F, BMI2]
_ZNK7simdutf7icelake14implementation21convert_utf32_to_utf8EPKDimPc [AVX, AVX2, AVX512BW, AVX512F, AVX512VL]
_ZNK7simdutf7icelake14implementation21convert_utf8_to_utf32EPKcmPDi [AVX, AVX2, AVX512BW, AVX512F, AVX512VL, AVX512_VBMI, BMI2]
_ZNK7simdutf7icelake14implementation22convert_latin1_to_utf8EPKcmPc [AVX, AVX512BW, AVX512F, AVX512_VBMI, AVX512_VBMI2, BMI2]
_ZNK7simdutf7icelake14implementation22convert_utf8_to_latin1EPKcmPc [AVX, AVX512BW, AVX512F, AVX512_VBMI2, BMI1, BMI2]
_ZNK7simdutf7icelake14implementation22to_well_formed_utf16beEPKDsmPDs [AVX, AVX512BW, AVX512F, BMI2]
_ZNK7simdutf7icelake14implementation22to_well_formed_utf16leEPKDsmPDs [AVX, AVX512BW, AVX512F, BMI2]
_ZNK7simdutf7icelake14implementation22utf16_length_from_utf8EPKcm [AVX, AVX2, AVX512BW, AVX512DQ, AVX512F, AVX512VL]
_ZNK7simdutf7icelake14implementation22utf32_length_from_utf8EPKcm [AVX, AVX2, AVX512BW, AVX512DQ, AVX512F, AVX512VL, AVX512_VPOPCNTDQ]
_ZNK7simdutf7icelake14implementation22utf8_length_from_utf32EPKDim [AVX, AVX2, AVX512BW, AVX512DQ, AVX512F, AVX512VL]
_ZNK7simdutf7icelake14implementation23change_endianness_utf16EPKDsmPDs [AVX, AVX512BW, AVX512F, BMI2]
_ZNK7simdutf7icelake14implementation23convert_latin1_to_utf32EPKcmPDi [AVX, AVX512BW, AVX512F, AVX512VL, BMI2]
_ZNK7simdutf7icelake14implementation23convert_utf16be_to_utf8EPKDsmPc [AVX, AVX512BW, AVX512F, AVX512_VBMI, AVX512_VBMI2, BMI1, BMI2]
_ZNK7simdutf7icelake14implementation23convert_utf16le_to_utf8EPKDsmPc [AVX, AVX512BW, AVX512F, AVX512_VBMI, AVX512_VBMI2, BMI1, BMI2]
_ZNK7simdutf7icelake14implementation23convert_utf32_to_latin1EPKDimPc [AVX, AVX512BW, AVX512F, BMI2]
_ZNK7simdutf7icelake14implementation23convert_utf8_to_utf16beEPKcmPDs [AVX, AVX512BW, AVX512F, AVX512_VBMI, AVX512_VBMI2, BMI1, BMI2]
_ZNK7simdutf7icelake14implementation23convert_utf8_to_utf16leEPKcmPDs [AVX, AVX512BW, AVX512F, AVX512_VBMI, AVX512_VBMI2, BMI1, BMI2]
_ZNK7simdutf7icelake14implementation23latin1_length_from_utf8EPKcm [AVX, AVX2, AVX512BW, AVX512DQ, AVX512F, AVX512VL, AVX512_VPOPCNTDQ]
_ZNK7simdutf7icelake14implementation23utf16_length_from_utf32EPKDim [AVX, AVX2, AVX512DQ, AVX512F, AVX512VL]
_ZNK7simdutf7icelake14implementation23utf8_length_from_latin1EPKcm [AVX, AVX2, AVX512BW, AVX512F, AVX512VL]
_ZNK7simdutf7icelake14implementation24convert_utf16be_to_utf32EPKDsmPDi [AVX, AVX512BW, AVX512F, BMI2]
_ZNK7simdutf7icelake14implementation24convert_utf16le_to_utf32EPKDsmPDi [AVX, AVX512BW, AVX512F, BMI2]
_ZNK7simdutf7icelake14implementation24convert_utf32_to_utf16beEPKDimPDs [AVX, AVX2, AVX512BW, AVX512F, AVX512VL, AVX512_VBMI2, BMI2]
_ZNK7simdutf7icelake14implementation24convert_utf32_to_utf16leEPKDimPDs [AVX, AVX512BW, AVX512F, AVX512_VBMI2, BMI2]
_ZNK7simdutf7icelake14implementation24utf8_length_from_utf16beEPKDsm [AVX, AVX2, AVX512BW, AVX512DQ, AVX512F, AVX512VL]
_ZNK7simdutf7icelake14implementation24utf8_length_from_utf16leEPKDsm [AVX, AVX2, AVX512BW, AVX512DQ, AVX512F, AVX512VL]
_ZNK7simdutf7icelake14implementation25convert_latin1_to_utf16beEPKcmPDs [AVX, AVX512BW, AVX512F, AVX512VL, BMI2]
_ZNK7simdutf7icelake14implementation25convert_latin1_to_utf16leEPKcmPDs [AVX, AVX512BW, AVX512F, AVX512VL, BMI2]
_ZNK7simdutf7icelake14implementation25convert_utf16be_to_latin1EPKDsmPc [AVX, AVX512BW, AVX512F, AVX512_VBMI, BMI2]
_ZNK7simdutf7icelake14implementation25convert_utf16le_to_latin1EPKDsmPc [AVX, AVX512BW, AVX512F, BMI2]
_ZNK7simdutf7icelake14implementation25utf32_length_from_utf16beEPKDsm [AVX, AVX2, AVX512BW, AVX512DQ, AVX512F, AVX512VL]
_ZNK7simdutf7icelake14implementation25utf32_length_from_utf16leEPKDsm [AVX, AVX2, AVX512BW, AVX512DQ, AVX512F, AVX512VL]
_ZNK7simdutf7icelake14implementation25validate_utf16be_as_asciiEPKDsm [AVX, AVX512BW, AVX512F, BMI2]
_ZNK7simdutf7icelake14implementation25validate_utf16le_as_asciiEPKDsm [AVX, AVX512BW, AVX512F, BMI2]
_ZNK7simdutf7icelake14implementation25validate_utf8_with_errorsEPKcm [AVX, AVX512BW, AVX512F, BMI2]
_ZNK7simdutf7icelake14implementation26validate_ascii_with_errorsEPKcm [AVX, AVX512BW, BMI2]
_ZNK7simdutf7icelake14implementation26validate_utf32_with_errorsEPKDim [AVX, AVX512BW, AVX512F, BMI2]
_ZNK7simdutf7icelake14implementation27binary_to_base64_with_linesEPKcmPcmNS_14base64_optionsE [AVX, AVX512BW, AVX512F, AVX512_VBMI, AVX512_VBMI2, BMI2]
_ZNK7simdutf7icelake14implementation27convert_valid_utf8_to_utf32EPKcmPDi [AVX, AVX2, AVX512BW, AVX512F, AVX512VL, AVX512_VBMI, BMI2]
_ZNK7simdutf7icelake14implementation28convert_valid_utf8_to_latin1EPKcmPc [AVX, AVX512BW, AVX512F, AVX512_VBMI2, BMI2]
_ZNK7simdutf7icelake14implementation28validate_utf16be_with_errorsEPKDsm [AVX, AVX512BW, AVX512F, BMI1, BMI2]
_ZNK7simdutf7icelake14implementation28validate_utf16le_with_errorsEPKDsm [AVX, AVX512BW, AVX512F, BMI1, BMI2]
_ZNK7simdutf7icelake14implementation29convert_valid_utf8_to_utf16beEPKcmPDs [AVX, AVX2, AVX512BW, AVX512F, AVX512VL, AVX512_VBMI, AVX512_VBMI2, BMI2]
_ZNK7simdutf7icelake14implementation29convert_valid_utf8_to_utf16leEPKcmPDs [AVX, AVX512BW, AVX512F, AVX512_VBMI, AVX512_VBMI2, BMI2]
_ZNK7simdutf7icelake14implementation30convert_valid_utf16be_to_utf32EPKDsmPDi [AVX, AVX512BW, AVX512F, BMI2]
_ZNK7simdutf7icelake14implementation30convert_valid_utf16le_to_utf32EPKDsmPDi [AVX, AVX512BW, AVX512F, BMI2]
_ZNK7simdutf7icelake14implementation30convert_valid_utf32_to_utf16beEPKDimPDs [AVX, AVX2, AVX512BW, AVX512F, AVX512VL, AVX512_VBMI2, BMI2]
_ZNK7simdutf7icelake14implementation31convert_valid_utf16be_to_latin1EPKDsmPc [AVX, AVX512BW, AVX512F, AVX512_VBMI, BMI2]
_ZNK7simdutf7icelake14implementation31convert_valid_utf16le_to_latin1EPKDsmPc [AVX, AVX512BW, AVX512F, BMI2]
_ZNK7simdutf7icelake14implementation33convert_utf32_to_utf8_with_errorsEPKDimPc [AVX, AVX2, AVX512BW, AVX512F, AVX512VL]
_ZNK7simdutf7icelake14implementation33convert_utf8_to_utf32_with_errorsEPKcmPDi [AVX, AVX2, AVX512BW, AVX512F, AVX512VL, AVX512_VBMI, BMI2]
_ZNK7simdutf7icelake14implementation34convert_utf8_to_latin1_with_errorsEPKcmPc [AVX, AVX512BW, AVX512F, AVX512_VBMI2, BMI1, BMI2]
_ZNK7simdutf7icelake14implementation35convert_utf16be_to_utf8_with_errorsEPKDsmPc [AVX, AVX512BW, AVX512F, AVX512_VBMI, AVX512_VBMI2, BMI1, BMI2]
_ZNK7simdutf7icelake14implementation35convert_utf16le_to_utf8_with_errorsEPKDsmPc [AVX, AVX512BW, AVX512F, AVX512_VBMI, AVX512_VBMI2, BMI1, BMI2]
_ZNK7simdutf7icelake14implementation35convert_utf32_to_latin1_with_errorsEPKDimPc [AVX, AVX512BW, AVX512F, BMI2]
_ZNK7simdutf7icelake14implementation35convert_utf8_to_utf16be_with_errorsEPKcmPDs [AVX, AVX512BW, AVX512F, AVX512_VBMI, AVX512_VBMI2, BMI1, BMI2]
_ZNK7simdutf7icelake14implementation35convert_utf8_to_utf16le_with_errorsEPKcmPDs [AVX, AVX512BW, AVX512F, AVX512_VBMI, AVX512_VBMI2, BMI1, BMI2]
_ZNK7simdutf7icelake14implementation36convert_utf16be_to_utf32_with_errorsEPKDsmPDi [AVX, AVX512BW, AVX512F, BMI2]
_ZNK7simdutf7icelake14implementation36convert_utf16le_to_utf32_with_errorsEPKDsmPDi [AVX, AVX512BW, AVX512F, BMI2]
_ZNK7simdutf7icelake14implementation36convert_utf32_to_utf16be_with_errorsEPKDimPDs [AVX, AVX2, AVX512BW, AVX512F, AVX512VL, AVX512_VBMI2, BMI1, BMI2]
_ZNK7simdutf7icelake14implementation36convert_utf32_to_utf16le_with_errorsEPKDimPDs [AVX, AVX512BW, AVX512F, AVX512VL, AVX512_VBMI2, BMI1, BMI2]
_ZNK7simdutf7icelake14implementation37convert_utf16be_to_latin1_with_errorsEPKDsmPc [AVX, AVX512BW, AVX512F, BMI2]
_ZNK7simdutf7icelake14implementation37convert_utf16le_to_latin1_with_errorsEPKDsmPc [AVX, AVX512BW, AVX512F, BMI2]
_ZNK7simdutf7icelake14implementation4findEPKDsS3_Ds [AVX, AVX512BW, BMI2]
_ZNK7simdutf7icelake14implementation4findEPKcS3_c [AVX, AVX512BW, BMI2]
# ----------------------------------------------------------------------------
# JSC WebAssembly IPInt SIMD. VEX-encoded 128-bit (needs AVX to decode).
# Gated by JSC's WASM SIMD CPUID check.
# (196 symbols)
# ----------------------------------------------------------------------------
ipint_simd_f32x4_abs [AVX]
ipint_simd_f32x4_add [AVX]
ipint_simd_f32x4_ceil [AVX]
ipint_simd_f32x4_convert_i32x4_s [AVX]
ipint_simd_f32x4_convert_i32x4_u [AVX]
ipint_simd_f32x4_demote_f64x2_zero [AVX]
ipint_simd_f32x4_div [AVX]
ipint_simd_f32x4_eq [AVX]
ipint_simd_f32x4_floor [AVX]
ipint_simd_f32x4_ge [AVX]
ipint_simd_f32x4_gt [AVX]
ipint_simd_f32x4_le [AVX]
ipint_simd_f32x4_lt [AVX]
ipint_simd_f32x4_max [AVX]
ipint_simd_f32x4_min [AVX]
ipint_simd_f32x4_mul [AVX]
ipint_simd_f32x4_ne [AVX]
ipint_simd_f32x4_nearest [AVX]
ipint_simd_f32x4_neg [AVX]
ipint_simd_f32x4_pmax [AVX]
ipint_simd_f32x4_pmin [AVX]
ipint_simd_f32x4_splat [AVX]
ipint_simd_f32x4_sqrt [AVX]
ipint_simd_f32x4_sub [AVX]
ipint_simd_f32x4_trunc [AVX]
ipint_simd_f64x2_abs [AVX]
ipint_simd_f64x2_add [AVX]
ipint_simd_f64x2_ceil [AVX]
ipint_simd_f64x2_convert_low_i32x4_s [AVX]
ipint_simd_f64x2_convert_low_i32x4_u [AVX]
ipint_simd_f64x2_div [AVX]
ipint_simd_f64x2_eq [AVX]
ipint_simd_f64x2_floor [AVX]
ipint_simd_f64x2_ge [AVX]
ipint_simd_f64x2_gt [AVX]
ipint_simd_f64x2_le [AVX]
ipint_simd_f64x2_lt [AVX]
ipint_simd_f64x2_max [AVX]
ipint_simd_f64x2_min [AVX]
ipint_simd_f64x2_mul [AVX]
ipint_simd_f64x2_ne [AVX]
ipint_simd_f64x2_nearest [AVX]
ipint_simd_f64x2_neg [AVX]
ipint_simd_f64x2_pmax [AVX]
ipint_simd_f64x2_pmin [AVX]
ipint_simd_f64x2_promote_low_f32x4 [AVX]
ipint_simd_f64x2_splat [AVX]
ipint_simd_f64x2_sqrt [AVX]
ipint_simd_f64x2_sub [AVX]
ipint_simd_f64x2_trunc [AVX]
ipint_simd_i16x8_abs [AVX]
ipint_simd_i16x8_add [AVX]
ipint_simd_i16x8_add_sat_s [AVX]
ipint_simd_i16x8_add_sat_u [AVX]
ipint_simd_i16x8_all_true [AVX]
ipint_simd_i16x8_avgr_u [AVX]
ipint_simd_i16x8_eq [AVX]
ipint_simd_i16x8_extadd_pairwise_i8x16_s [AVX]
ipint_simd_i16x8_extadd_pairwise_i8x16_u [AVX]
ipint_simd_i16x8_extend_high_i8x16_s [AVX]
ipint_simd_i16x8_extend_high_i8x16_u [AVX]
ipint_simd_i16x8_extend_low_i8x16_s [AVX]
ipint_simd_i16x8_extend_low_i8x16_u [AVX]
ipint_simd_i16x8_extmul_high_i8x16_s [AVX]
ipint_simd_i16x8_extmul_high_i8x16_u [AVX]
ipint_simd_i16x8_extmul_low_i8x16_s [AVX]
ipint_simd_i16x8_extmul_low_i8x16_u [AVX]
ipint_simd_i16x8_ge_s [AVX]
ipint_simd_i16x8_ge_u [AVX]
ipint_simd_i16x8_gt_s [AVX]
ipint_simd_i16x8_gt_u [AVX]
ipint_simd_i16x8_le_s [AVX]
ipint_simd_i16x8_le_u [AVX]
ipint_simd_i16x8_lt_s [AVX]
ipint_simd_i16x8_lt_u [AVX]
ipint_simd_i16x8_max_s [AVX]
ipint_simd_i16x8_max_u [AVX]
ipint_simd_i16x8_min_s [AVX]
ipint_simd_i16x8_min_u [AVX]
ipint_simd_i16x8_mul [AVX]
ipint_simd_i16x8_narrow_i32x4_s [AVX]
ipint_simd_i16x8_narrow_i32x4_u [AVX]
ipint_simd_i16x8_ne [AVX]
ipint_simd_i16x8_neg [AVX]
ipint_simd_i16x8_q15mulr_sat_s [AVX]
ipint_simd_i16x8_shl [AVX]
ipint_simd_i16x8_shr_s [AVX]
ipint_simd_i16x8_shr_u [AVX]
ipint_simd_i16x8_splat [AVX]
ipint_simd_i16x8_sub [AVX]
ipint_simd_i16x8_sub_sat_s [AVX]
ipint_simd_i16x8_sub_sat_u [AVX]
ipint_simd_i32x4_abs [AVX]
ipint_simd_i32x4_add [AVX]
ipint_simd_i32x4_all_true [AVX]
ipint_simd_i32x4_dot_i16x8_s [AVX]
ipint_simd_i32x4_eq [AVX]
ipint_simd_i32x4_extadd_pairwise_i16x8_s [AVX]
ipint_simd_i32x4_extadd_pairwise_i16x8_u [AVX]
ipint_simd_i32x4_extend_high_i16x8_s [AVX]
ipint_simd_i32x4_extend_high_i16x8_u [AVX]
ipint_simd_i32x4_extend_low_i16x8_s [AVX]
ipint_simd_i32x4_extend_low_i16x8_u [AVX]
ipint_simd_i32x4_extmul_high_i16x8_s [AVX]
ipint_simd_i32x4_extmul_high_i16x8_u [AVX]
ipint_simd_i32x4_extmul_low_i16x8_s [AVX]
ipint_simd_i32x4_extmul_low_i16x8_u [AVX]
ipint_simd_i32x4_ge_s [AVX]
ipint_simd_i32x4_ge_u [AVX]
ipint_simd_i32x4_gt_s [AVX]
ipint_simd_i32x4_gt_u [AVX]
ipint_simd_i32x4_le_s [AVX]
ipint_simd_i32x4_le_u [AVX]
ipint_simd_i32x4_lt_s [AVX]
ipint_simd_i32x4_lt_u [AVX]
ipint_simd_i32x4_max_s [AVX]
ipint_simd_i32x4_max_u [AVX]
ipint_simd_i32x4_min_s [AVX]
ipint_simd_i32x4_min_u [AVX]
ipint_simd_i32x4_mul [AVX]
ipint_simd_i32x4_ne [AVX]
ipint_simd_i32x4_neg [AVX]
ipint_simd_i32x4_shl [AVX]
ipint_simd_i32x4_shr_s [AVX]
ipint_simd_i32x4_shr_u [AVX]
ipint_simd_i32x4_splat [AVX]
ipint_simd_i32x4_sub [AVX]
ipint_simd_i32x4_trunc_sat_f32x4_s [AVX]
ipint_simd_i32x4_trunc_sat_f32x4_u [AVX]
ipint_simd_i32x4_trunc_sat_f64x2_s_zero [AVX]
ipint_simd_i32x4_trunc_sat_f64x2_u_zero [AVX]
ipint_simd_i64x2_abs [AVX]
ipint_simd_i64x2_add [AVX]
ipint_simd_i64x2_all_true [AVX]
ipint_simd_i64x2_eq [AVX]
ipint_simd_i64x2_extend_high_i32x4_s [AVX]
ipint_simd_i64x2_extend_high_i32x4_u [AVX]
ipint_simd_i64x2_extend_low_i32x4_s [AVX]
ipint_simd_i64x2_extend_low_i32x4_u [AVX]
ipint_simd_i64x2_extmul_high_i32x4_s [AVX]
ipint_simd_i64x2_extmul_high_i32x4_u [AVX]
ipint_simd_i64x2_extmul_low_i32x4_s [AVX]
ipint_simd_i64x2_extmul_low_i32x4_u [AVX]
ipint_simd_i64x2_ge_s [AVX]
ipint_simd_i64x2_gt_s [AVX]
ipint_simd_i64x2_le_s [AVX]
ipint_simd_i64x2_lt_s [AVX]
ipint_simd_i64x2_ne [AVX]
ipint_simd_i64x2_neg [AVX]
ipint_simd_i64x2_shl [AVX]
ipint_simd_i64x2_shr_u [AVX]
ipint_simd_i64x2_splat [AVX]
ipint_simd_i64x2_sub [AVX]
ipint_simd_i8x16_abs [AVX]
ipint_simd_i8x16_add [AVX]
ipint_simd_i8x16_add_sat_s [AVX]
ipint_simd_i8x16_add_sat_u [AVX]
ipint_simd_i8x16_all_true [AVX]
ipint_simd_i8x16_avgr_u [AVX]
ipint_simd_i8x16_eq [AVX]
ipint_simd_i8x16_ge_s [AVX]
ipint_simd_i8x16_ge_u [AVX]
ipint_simd_i8x16_gt_s [AVX]
ipint_simd_i8x16_gt_u [AVX]
ipint_simd_i8x16_le_s [AVX]
ipint_simd_i8x16_le_u [AVX]
ipint_simd_i8x16_lt_s [AVX]
ipint_simd_i8x16_lt_u [AVX]
ipint_simd_i8x16_max_s [AVX]
ipint_simd_i8x16_max_u [AVX]
ipint_simd_i8x16_min_s [AVX]
ipint_simd_i8x16_min_u [AVX]
ipint_simd_i8x16_narrow_i16x8_s [AVX]
ipint_simd_i8x16_narrow_i16x8_u [AVX]
ipint_simd_i8x16_ne [AVX]
ipint_simd_i8x16_neg [AVX]
ipint_simd_i8x16_popcnt [AVX]
ipint_simd_i8x16_shl [AVX]
ipint_simd_i8x16_shr_s [AVX]
ipint_simd_i8x16_shr_u [AVX]
ipint_simd_i8x16_splat [AVX]
ipint_simd_i8x16_sub [AVX]
ipint_simd_i8x16_sub_sat_s [AVX]
ipint_simd_i8x16_sub_sat_u [AVX]
ipint_simd_i8x16_swizzle [AVX]
ipint_simd_v128_and [AVX]
ipint_simd_v128_andnot [AVX]
ipint_simd_v128_any_true [AVX]
ipint_simd_v128_bitselect [AVX]
ipint_simd_v128_load16_splat_mem [AVX]
ipint_simd_v128_load32_splat_mem [AVX]
ipint_simd_v128_load64_splat_mem [AVX]
ipint_simd_v128_load8_splat_mem [AVX]
ipint_simd_v128_not [AVX]
ipint_simd_v128_or [AVX]
ipint_simd_v128_xor [AVX]
# ----------------------------------------------------------------------------
# JSC MacroAssembler probe trampoline.
# (1 symbols)
# ----------------------------------------------------------------------------
ctiMasmProbeTrampolineAVX [AVX]
# ----------------------------------------------------------------------------
# Bun's Highway SIMD. Gate: HWY_DYNAMIC_DISPATCH via hwy::SupportedTargets.
# (72 symbols)
# ----------------------------------------------------------------------------
_ZN3bun10N_AVX3_SPR10MemMemImplEPKhmS2_m [AVX, AVX512BW, AVX512F, BMI1]
_ZN3bun10N_AVX3_SPR15CopyU16ToU8ImplEPKtmPh [AVX, AVX512BW, AVX512F, AVX512VL, AVX512_VBMI]
_ZN3bun10N_AVX3_SPR15IndexOfCharImplEPKhmh [AVX, AVX512BW, BMI2]
_ZN3bun10N_AVX3_SPR18IndexOfAnyCharImplEPKhmS2_m [AVX, AVX512BW, AVX512F, AVX512VL, AVX512_FP16]
_ZN3bun10N_AVX3_SPR20FillWithSkipMaskImplEPKhmPhS2_mb [AVX, AVX512DQ, AVX512F]
_ZN3bun10N_AVX3_SPR28IndexOfNewlineOrNonASCIIImplEPKhm [AVX, AVX512BW, AVX512F]
_ZN3bun10N_AVX3_SPR35IndexOfSpaceOrNewlineOrNonASCIIImplEPKhm [AVX, AVX512BW, AVX512F]
_ZN3bun10N_AVX3_SPR36ContainsNewlineOrNonASCIIOrQuoteImplEPKhm [AVX, AVX512BW, AVX512F]
_ZN3bun10N_AVX3_SPR38IndexOfNewlineOrNonASCIIOrHashOrAtImplEPKhm [AVX, AVX512BW, AVX512F]
_ZN3bun10N_AVX3_SPR46IndexOfInterestingCharacterInStringLiteralImplEPKhmh [AVX, AVX512BW, AVX512F]
_ZN3bun10N_AVX3_SPR46IndexOfNeedsEscapeForJavaScriptStringImplQuoteEPKhmh [AVX, AVX512BW, AVX512F]
_ZN3bun10N_AVX3_SPR49IndexOfNeedsEscapeForJavaScriptStringImplBacktickEPKhmh [AVX, AVX512BW, AVX512F]
_ZN3bun11N_AVX3_ZEN410MemMemImplEPKhmS2_m [AVX, AVX512BW, AVX512F, BMI1]
_ZN3bun11N_AVX3_ZEN415CopyU16ToU8ImplEPKtmPh [AVX, AVX512BW, AVX512F, AVX512VL, AVX512_VBMI]
_ZN3bun11N_AVX3_ZEN415IndexOfCharImplEPKhmh [AVX, AVX512BW, BMI2]
_ZN3bun11N_AVX3_ZEN418IndexOfAnyCharImplEPKhmS2_m [AVX, AVX512BW, AVX512F, AVX512VL]
_ZN3bun11N_AVX3_ZEN420FillWithSkipMaskImplEPKhmPhS2_mb [AVX, AVX512DQ, AVX512F]
_ZN3bun11N_AVX3_ZEN428IndexOfNewlineOrNonASCIIImplEPKhm [AVX, AVX512BW, AVX512F]
_ZN3bun11N_AVX3_ZEN435IndexOfSpaceOrNewlineOrNonASCIIImplEPKhm [AVX, AVX512BW, AVX512F]
_ZN3bun11N_AVX3_ZEN436ContainsNewlineOrNonASCIIOrQuoteImplEPKhm [AVX, AVX512BW, AVX512F]
_ZN3bun11N_AVX3_ZEN438IndexOfNewlineOrNonASCIIOrHashOrAtImplEPKhm [AVX, AVX512BW, AVX512F]
_ZN3bun11N_AVX3_ZEN446IndexOfInterestingCharacterInStringLiteralImplEPKhmh [AVX, AVX512BW, AVX512F]
_ZN3bun11N_AVX3_ZEN446IndexOfNeedsEscapeForJavaScriptStringImplQuoteEPKhmh [AVX, AVX512BW, AVX512F]
_ZN3bun11N_AVX3_ZEN449IndexOfNeedsEscapeForJavaScriptStringImplBacktickEPKhmh [AVX, AVX512BW, AVX512F]
_ZN3bun6N_AVX210MemMemImplEPKhmS2_m [AVX, AVX2]
_ZN3bun6N_AVX215CopyU16ToU8ImplEPKtmPh [AVX, AVX2]
_ZN3bun6N_AVX215IndexOfCharImplEPKhmh [AVX, AVX2]
_ZN3bun6N_AVX218IndexOfAnyCharImplEPKhmS2_m [AVX, AVX2]
_ZN3bun6N_AVX220FillWithSkipMaskImplEPKhmPhS2_mb [AVX]
_ZN3bun6N_AVX228IndexOfNewlineOrNonASCIIImplEPKhm [AVX, AVX2]
_ZN3bun6N_AVX235IndexOfSpaceOrNewlineOrNonASCIIImplEPKhm [AVX, AVX2]
_ZN3bun6N_AVX236ContainsNewlineOrNonASCIIOrQuoteImplEPKhm [AVX, AVX2]
_ZN3bun6N_AVX238IndexOfNewlineOrNonASCIIOrHashOrAtImplEPKhm [AVX, AVX2]
_ZN3bun6N_AVX246IndexOfInterestingCharacterInStringLiteralImplEPKhmh [AVX, AVX2]
_ZN3bun6N_AVX246IndexOfNeedsEscapeForJavaScriptStringImplQuoteEPKhmh [AVX, AVX2]
_ZN3bun6N_AVX249IndexOfNeedsEscapeForJavaScriptStringImplBacktickEPKhmh [AVX, AVX2]
_ZN3bun6N_AVX310MemMemImplEPKhmS2_m [AVX, AVX512BW, AVX512F, BMI1]
_ZN3bun6N_AVX315CopyU16ToU8ImplEPKtmPh [AVX, AVX512BW, AVX512F, AVX512VL]
_ZN3bun6N_AVX315IndexOfCharImplEPKhmh [AVX, AVX512BW, BMI2]
_ZN3bun6N_AVX318IndexOfAnyCharImplEPKhmS2_m [AVX, AVX512BW, AVX512F, AVX512VL]
_ZN3bun6N_AVX320FillWithSkipMaskImplEPKhmPhS2_mb [AVX, AVX512DQ, AVX512F]
_ZN3bun6N_AVX328IndexOfNewlineOrNonASCIIImplEPKhm [AVX, AVX512BW, AVX512F]
_ZN3bun6N_AVX335IndexOfSpaceOrNewlineOrNonASCIIImplEPKhm [AVX, AVX512BW, AVX512F]
_ZN3bun6N_AVX336ContainsNewlineOrNonASCIIOrQuoteImplEPKhm [AVX, AVX512BW, AVX512F]
_ZN3bun6N_AVX338IndexOfNewlineOrNonASCIIOrHashOrAtImplEPKhm [AVX, AVX512BW, AVX512F]
_ZN3bun6N_AVX346IndexOfInterestingCharacterInStringLiteralImplEPKhmh [AVX, AVX512BW, AVX512F]
_ZN3bun6N_AVX346IndexOfNeedsEscapeForJavaScriptStringImplQuoteEPKhmh [AVX, AVX512BW, AVX512F]
_ZN3bun6N_AVX349IndexOfNeedsEscapeForJavaScriptStringImplBacktickEPKhmh [AVX, AVX512BW, AVX512F]
_ZN3bun9N_AVX10_210MemMemImplEPKhmS2_m [AVX, AVX512BW, AVX512F, BMI1]
_ZN3bun9N_AVX10_215CopyU16ToU8ImplEPKtmPh [AVX, AVX512BW, AVX512F, AVX512VL, AVX512_VBMI]
_ZN3bun9N_AVX10_215IndexOfCharImplEPKhmh [AVX, AVX512BW, BMI2]
_ZN3bun9N_AVX10_218IndexOfAnyCharImplEPKhmS2_m [AVX, AVX512BW, AVX512F, AVX512VL, AVX512_FP16]
_ZN3bun9N_AVX10_220FillWithSkipMaskImplEPKhmPhS2_mb [AVX, AVX512DQ, AVX512F]
_ZN3bun9N_AVX10_228IndexOfNewlineOrNonASCIIImplEPKhm [AVX, AVX512BW, AVX512F]
_ZN3bun9N_AVX10_235IndexOfSpaceOrNewlineOrNonASCIIImplEPKhm [AVX, AVX512BW, AVX512F]
_ZN3bun9N_AVX10_236ContainsNewlineOrNonASCIIOrQuoteImplEPKhm [AVX, AVX512BW, AVX512F]
_ZN3bun9N_AVX10_238IndexOfNewlineOrNonASCIIOrHashOrAtImplEPKhm [AVX, AVX512BW, AVX512F]
_ZN3bun9N_AVX10_246IndexOfInterestingCharacterInStringLiteralImplEPKhmh [AVX, AVX512BW, AVX512F]
_ZN3bun9N_AVX10_246IndexOfNeedsEscapeForJavaScriptStringImplQuoteEPKhmh [AVX, AVX512BW, AVX512F]
_ZN3bun9N_AVX10_249IndexOfNeedsEscapeForJavaScriptStringImplBacktickEPKhmh [AVX, AVX512BW, AVX512F]
_ZN3bun9N_AVX3_DL10MemMemImplEPKhmS2_m [AVX, AVX512BW, AVX512F, BMI1]
_ZN3bun9N_AVX3_DL15CopyU16ToU8ImplEPKtmPh [AVX, AVX512BW, AVX512F, AVX512VL, AVX512_VBMI]
_ZN3bun9N_AVX3_DL15IndexOfCharImplEPKhmh [AVX, AVX512BW, BMI2]
_ZN3bun9N_AVX3_DL18IndexOfAnyCharImplEPKhmS2_m [AVX, AVX512BW, AVX512F, AVX512VL]
_ZN3bun9N_AVX3_DL20FillWithSkipMaskImplEPKhmPhS2_mb [AVX, AVX512DQ, AVX512F]
_ZN3bun9N_AVX3_DL28IndexOfNewlineOrNonASCIIImplEPKhm [AVX, AVX512BW, AVX512F]
_ZN3bun9N_AVX3_DL35IndexOfSpaceOrNewlineOrNonASCIIImplEPKhm [AVX, AVX512BW, AVX512F]
_ZN3bun9N_AVX3_DL36ContainsNewlineOrNonASCIIOrQuoteImplEPKhm [AVX, AVX512BW, AVX512F]
_ZN3bun9N_AVX3_DL38IndexOfNewlineOrNonASCIIOrHashOrAtImplEPKhm [AVX, AVX512BW, AVX512F]
_ZN3bun9N_AVX3_DL46IndexOfInterestingCharacterInStringLiteralImplEPKhmh [AVX, AVX512BW, AVX512F]
_ZN3bun9N_AVX3_DL46IndexOfNeedsEscapeForJavaScriptStringImplQuoteEPKhmh [AVX, AVX512BW, AVX512F]
_ZN3bun9N_AVX3_DL49IndexOfNeedsEscapeForJavaScriptStringImplBacktickEPKhmh [AVX, AVX512BW, AVX512F]
# ----------------------------------------------------------------------------
# BoringSSL AES. Gate: OPENSSL_ia32cap_P.
# (26 symbols)
# ----------------------------------------------------------------------------
_aesni_ctr32_6x [AES, AVX]
_aesni_ctr32_ghash_6x [AES, AVX, MOVBE, PCLMULQDQ]
_aesni_decrypt2 [AES]
_aesni_decrypt3 [AES]
_aesni_decrypt4 [AES]
_aesni_decrypt6 [AES]
_aesni_decrypt8 [AES]
_aesni_encrypt2 [AES]
_aesni_encrypt3 [AES]
_aesni_encrypt4 [AES]
_aesni_encrypt6 [AES]
_aesni_encrypt8 [AES]
aes_gcm_dec_update_vaes_avx2 [AVX, AVX2, PCLMULQDQ, VAES, VPCLMULQDQ]
aes_gcm_dec_update_vaes_avx512 [AVX, AVX512BW, AVX512F, AVX512VL, BMI2]
aes_gcm_enc_update_vaes_avx2 [AVX, AVX2, PCLMULQDQ, VAES, VPCLMULQDQ]
aes_gcm_enc_update_vaes_avx512 [AVX, AVX512BW, AVX512F, AVX512VL, BMI2]
aes_hw_cbc_encrypt [AES]
aes_hw_ctr32_encrypt_blocks [AES]
aes_hw_decrypt [AES]
aes_hw_ecb_encrypt [AES]
aes_hw_encrypt [AES]
aes_hw_encrypt_key_to_decrypt_key [AES]
aes_hw_set_encrypt_key_alt [AES]
aes_hw_set_encrypt_key_base [AES]
aesni_gcm_decrypt [AVX]
aesni_gcm_encrypt [AVX, PCLMULQDQ]
# ----------------------------------------------------------------------------
# BoringSSL SHA. Gate: OPENSSL_ia32cap_P.
# (6 symbols)
# ----------------------------------------------------------------------------
sha1_block_data_order_avx [AVX]
sha1_block_data_order_avx2 [AVX, AVX2, BMI1, BMI2]
sha1_block_data_order_hw [SHA]
sha256_block_data_order_avx [AVX]
sha256_block_data_order_hw [SHA]
sha512_block_data_order_avx [AVX]
# ----------------------------------------------------------------------------
# BoringSSL ChaCha20.
# (3 symbols)
# ----------------------------------------------------------------------------
ChaCha20_ctr32_avx2 [AVX, AVX2]
chacha20_poly1305_open_avx2 [AVX, AVX2, BMI2]
chacha20_poly1305_seal_avx2 [AVX, AVX2, BMI2]
# ----------------------------------------------------------------------------
# BoringSSL GCM ghash.
# (11 symbols)
# ----------------------------------------------------------------------------
gcm_ghash_avx [AVX, PCLMULQDQ]
gcm_ghash_clmul [PCLMULQDQ]
gcm_ghash_vpclmulqdq_avx2 [AVX, AVX2, PCLMULQDQ, VPCLMULQDQ]
gcm_ghash_vpclmulqdq_avx512 [AVX, AVX512BW, AVX512F, AVX512VL, PCLMULQDQ]
gcm_gmult_clmul [PCLMULQDQ]
gcm_gmult_vpclmulqdq_avx2 [AVX, PCLMULQDQ]
gcm_gmult_vpclmulqdq_avx512 [AVX, AVX512VL, PCLMULQDQ]
gcm_init_avx [AVX, PCLMULQDQ]
gcm_init_clmul [PCLMULQDQ]
gcm_init_vpclmulqdq_avx2 [AVX, AVX2, PCLMULQDQ, VPCLMULQDQ]
gcm_init_vpclmulqdq_avx512 [AVX, AVX2, AVX512BW, AVX512F, AVX512VL, PCLMULQDQ, VPCLMULQDQ]
# ----------------------------------------------------------------------------
# BoringSSL bignum (MULX/ADX).
# (16 symbols)
# ----------------------------------------------------------------------------
__bn_postx4x_internal [BMI1]
__bn_sqrx8x_reduction [ADX, BMI2]
__ecp_nistz256_mul_montx [ADX, BMI2]
__ecp_nistz256_sqr_montx [ADX, BMI2]
beeu_mod_inverse_vartime [AVX]
bn_mulx4x_mont [ADX, BMI2]
bn_sqrx8x_internal [ADX, BMI2]
ecp_nistz256_ord_mul_mont_adx [ADX, BMI2]
ecp_nistz256_ord_sqr_mont_adx [ADX, BMI2]
ecp_nistz256_select_w5_avx2 [AVX, AVX2]
ecp_nistz256_select_w7_avx2 [AVX, AVX2]
mulx4x_internal [ADX, BMI2]
rsaz_1024_gather5_avx2 [AVX, AVX2]
rsaz_1024_mul_avx2 [AVX, AVX2]
rsaz_1024_scatter5_avx2 [AVX, AVX2]
rsaz_1024_sqr_avx2 [AVX, AVX2]
# ----------------------------------------------------------------------------
# BoringSSL Curve25519.
# (3 symbols)
# ----------------------------------------------------------------------------
fiat_curve25519_adx_mul [ADX, BMI2]
fiat_curve25519_adx_square [ADX, BMI2]
x25519_scalar_mult_adx [BMI2]
# ----------------------------------------------------------------------------
# BoringSSL RDRAND.
# (2 symbols)
# ----------------------------------------------------------------------------
CRYPTO_rdrand [RDRAND]
CRYPTO_rdrand_multiple8_buf [RDRAND]
# ----------------------------------------------------------------------------
# zstd Huffman/FSE BMI2. Gate: ZSTD_cpuid().
# (19 symbols)
# ----------------------------------------------------------------------------
FSE_decompress_wksp_body_bmi2 [BMI2]
FSE_readNCount_body_bmi2 [BMI2]
HUF_compress1X_usingCTable_internal_bmi2 [BMI2]
HUF_decompress1X1_usingDTable_internal_bmi2 [BMI2]
HUF_decompress1X2_usingDTable_internal_bmi2 [BMI2]
HUF_decompress4X1_usingDTable_internal_bmi2 [BMI2]
HUF_decompress4X1_usingDTable_internal_fast [BMI2]
HUF_decompress4X1_usingDTable_internal_fast_asm_loop [BMI2]
HUF_decompress4X1_usingDTable_internal_fast_c_loop [BMI2]
HUF_decompress4X2_usingDTable_internal_bmi2 [BMI2]
HUF_decompress4X2_usingDTable_internal_fast [BMI2]
HUF_decompress4X2_usingDTable_internal_fast_asm_loop [BMI2]
HUF_decompress4X2_usingDTable_internal_fast_c_loop [BMI2]
HUF_readStats_body_bmi2 [BMI2]
ZSTD_buildFSETable_body_bmi2 [BMI2]
ZSTD_decompressSequencesLong_bmi2 [BMI1, BMI2]
ZSTD_decompressSequencesSplitLitBuffer_bmi2 [BMI1, BMI2]
ZSTD_decompressSequences_bmi2 [BMI1, BMI2]
ZSTD_encodeSequences_bmi2 [BMI2]
# ----------------------------------------------------------------------------
# libdeflate. Gate: libdeflate_init_x86_cpu_features.
# (10 symbols)
# ----------------------------------------------------------------------------
adler32_x86_avx2 [AVX, AVX2]
adler32_x86_avx2_vnni [AVX, AVX2, AVX_VNNI]
adler32_x86_avx512_vl256_vnni [AVX, AVX2, AVX512BW, AVX512VL]
adler32_x86_avx512_vl512_vnni [AVX, AVX2, AVX512BW, AVX512F, AVX512_VNNI]
crc32_x86_pclmulqdq [PCLMULQDQ]
crc32_x86_pclmulqdq_avx [AVX, PCLMULQDQ]
crc32_x86_vpclmulqdq_avx2 [AVX, AVX2, PCLMULQDQ, VPCLMULQDQ]
crc32_x86_vpclmulqdq_avx512_vl256 [AVX, AVX2, AVX512BW, AVX512VL, PCLMULQDQ, VPCLMULQDQ]
crc32_x86_vpclmulqdq_avx512_vl512 [AVX, AVX2, AVX512BW, AVX512F, AVX512VL, PCLMULQDQ, VPCLMULQDQ]
deflate_decompress_bmi2 [BMI2]
# ----------------------------------------------------------------------------
# zlib crc32 PCLMULQDQ.
# (1 symbols)
# ----------------------------------------------------------------------------
crc32 [PCLMULQDQ]
# ----------------------------------------------------------------------------
# Rust compiler-builtins libm FMA. ifunc-style dispatch.
# (2 symbols)
# ----------------------------------------------------------------------------
_RNvNtNtNtNtNt<rust-hash>17compiler_builtins4math9libm_math4arch3x863fma12fma_with_fma [FMA]
_RNvNtNtNtNtNt<rust-hash>17compiler_builtins4math9libm_math4arch3x863fma13fma_with_fma4 [FMA4]
# ----------------------------------------------------------------------------
# Rust memchr AVX2 (via lolhtml deps). Gate: is_x86_feature_detected!.
# (6 symbols)
# ----------------------------------------------------------------------------
_RNvMNtNtNtNt<rust-hash>6memchr4arch6x86_644avx26memchrNtB2_3One13find_raw_avx2 [AVX, AVX2]
_RNvMs2_NtNtNtNt<rust-hash>6memchr4arch6x86_644avx26memchrNtB5_3Two13find_raw_avx2 [AVX, AVX2]
_RNvMs6_NtNtNtNt<rust-hash>6memchr4arch6x86_644avx26memchrNtB5_5Three13find_raw_avx2 [AVX, AVX2]
_RNvNvNtNtNt<rust-hash>6memchr4arch6x86_646memchr10memchr_raw9find_avx2 [AVX, AVX2]
_RNvNvNtNtNt<rust-hash>6memchr4arch6x86_646memchr11memchr2_raw9find_avx2 [AVX, AVX2]
_RNvNvNtNtNt<rust-hash>6memchr4arch6x86_646memchr11memchr3_raw9find_avx2 [AVX, AVX2]

View File

@@ -0,0 +1,314 @@
//! AArch64 baseline verification by raw encoding-pattern matching.
//!
//! Unlike x64, ARM64 has fixed-width 32-bit instructions and a dense,
//! well-partitioned encoding space. We don't need a disassembler: iterating
//! u32 words over .text and checking a handful of bit-masks is exact.
//!
//! Target: `armv8-a+crc` (Cortex-A53), matching cmake/CompilerFlags.cmake:29
//! (`-march=armv8-a+crc`) and verify-baseline.ts's QEMU `-cpu cortex-a53`.
//!
//! All masks below were derived empirically by assembling a fixture with each
//! instruction class and cross-referencing the ARM Architecture Reference
//! Manual (DDI 0487). See the inline comments for the bit-field breakdown.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub enum Feature {
/// Large System Extensions (ARMv8.1-A). CAS, CASP, SWP, LDADD/LDCLR/LDEOR/
/// LDSET/LD{S,U}{MAX,MIN} and their ST* store-only variants. By far the
/// most likely accidental hit: compilers emit inline CAS for atomics when
/// `-march=armv8.1-a` or higher leaks through; with `-march=armv8-a` you
/// get `__aarch64_cas*` outline helpers (libgcc/compiler-rt) that dispatch
/// at runtime via AT_HWCAP.
Lse,
/// Scalable Vector Extension (ARMv8.2-A+). The entire op0=0010 encoding
/// space is reserved for SVE — one mask catches all of it.
Sve,
/// RCPC (ARMv8.3-A). LDAPR weak-acquire loads. Rare in practice; emitted
/// by Rust with `-C target-feature=+rcpc` or certain C++ atomics.
Rcpc,
/// DotProd (ARMv8.2-A optional). SDOT/UDOT i8→i32 accumulate. ML kernels.
DotProd,
/// JSCVT (ARMv8.3-A). FJCVTZS: JavaScript-semantics double-to-int32
/// truncation. Watch this one — JSC's JIT uses it when available and the
/// MacroAssembler may have a stub.
Jscvt,
/// RDM (ARMv8.1-A). SQRDMLAH/SQRDMLSH. DSP fixed-point stuff, unlikely.
Rdm,
/// Non-hint pointer authentication (ARMv8.3-A). LDRAA/LDRAB load with an
/// embedded PAC check. Unlike PACIASP/AUTIASP/BTI (which are HINT-space
/// and NOP on older CPUs by design), these *fault* on non-PAC hardware.
PacNonHint,
}
impl Feature {
pub fn name(self) -> &'static str {
match self {
Feature::Lse => "LSE",
Feature::Sve => "SVE",
Feature::Rcpc => "RCPC",
Feature::DotProd => "DotProd",
Feature::Jscvt => "JSCVT",
Feature::Rdm => "RDM",
Feature::PacNonHint => "PAC(non-hint)",
}
}
}
/// Classify one 32-bit instruction word. Returns None if it's within
/// armv8-a+crc, Some(feature) if it requires something newer.
///
/// Check order is roughly by expected frequency (most SVE words are bulk
/// data-plane code, so cheap to bail on early; LSE leaks are next most
/// likely).
pub fn classify(w: u32) -> Option<Feature> {
// ---- SVE ----
// ARM ARM top-level decode: op0[28:25]=0010 is the SVE encoding space.
// Nothing in ARMv8.0-A occupies it. One mask, exact.
// ptrue p0.b : 2518e3e0 & 1E000000 = 04000000 ✓
// ld1b {z0.b}, p0/z : a400a000 & 1E000000 = 04000000 ✓
// add z0.b,z0.b,z1.b: 04210000 & 1E000000 = 04000000 ✓
// ldxr (v8.0) : c85f7c20 & 1E000000 = 08000000 ✗
// addv (NEON, v8.0) : 4eb1b820 & 1E000000 = 0e000000 ✗
if w & 0x1E000000 == 0x04000000 {
return Some(Feature::Sve);
}
// ---- LSE: CAS / CASP family ----
// CAS: size[31:30] 001000[29:24] 1[23] L[22] 1[21] Rs 11111[14:10] Rn Rt
// CASP: 0[31] sz[30] 001000[29:24] L[23] 0[22] 1[21] Rs 11111[14:10] Rn Rt
//
// v8.0's STXP/STLXP/LDXP/LDAXP share [29:24]=001000, [21]=1, and when
// their Rt2 field is XZR (register 31) they also have [14:10]=11111.
// Observed colliding in the wild: `stxp w9, xzr, xzr, [x8]` = c8297d1f
// inside libpas. The disambiguator from the ARM ARM:
// - CAS has [23]=1 fixed (the L bit is at [22])
// - CASP has [31]=0 fixed (CASP is 32/64-bit only, no byte/half)
// - STXP/LDXP have [31]=1 AND [23]=0
// So: LSE iff NOT ([31]=1 AND [23]=0).
// cas : c8a07c41 [31]=1 [23]=1 ✓ casal : 88e0fc41 [31]=1 [23]=1 ✓
// casb : 08a07c41 [31]=0 ✓ casp : 48207c82 [31]=0 ✓
// stxp : c8297d1f [31]=1 [23]=0 ✗ (v8.0, correctly excluded)
// ldxr : c85f7c20 [21]=0, outer mask excludes
if w & 0x3F207C00 == 0x08207C00 {
let is_v80_exclusive_pair = (w & 0x80000000) != 0 && (w & 0x00800000) == 0;
if !is_v80_exclusive_pair {
return Some(Feature::Lse);
}
}
// ---- LSE: atomic memory ops (LDADD/LDCLR/LDEOR/LDSET/LD{S,U}{MAX,MIN}/SWP) ----
// Encoding: size[31:30] 111[29:27] V[26]=0 00[25:24] A[23] R[22] 1[21]
// Rs[20:16] o3[15] opc[14:12] 00[11:10] Rn Rt
// Fix [29:27]=111, [26]=0, [25:24]=00, [21]=1, [11:10]=00.
//
// RCPC's LDAPR lives in the *same* encoding group (it's the o3=1 opc=100
// Rs=11111 corner). Both are post-v8.0 so matching both is correct; we
// sub-classify for the report.
// swp : f8208041 ldadd : f8200041 stadd : f820003f ldapr : f8bfc020
// ldraa (PAC, must NOT match): f8200420 → [10]=1, excluded
// ldaprb: 38bfc020 → size differs but pattern holds
if w & 0x3B200C00 == 0x38200000 {
// RCPC sub-match: Rs=11111, o3=1, opc=100 (bits [20:12]=0xBFC >> 2).
if w & 0x001FFC00 == 0x001FC000 {
return Some(Feature::Rcpc);
}
return Some(Feature::Lse);
}
// ---- LDRAA / LDRAB (PAC non-hint loads) ----
// Encoding: 11111000[31:24] M[23] S[22] 1[21] imm9[20:12] W[11] 1[10] Rn Rt
// Fix [31:24], [21], [10]. M (key A/B), S, imm9, W free.
// ldraa : f8200420 ldrab (pre-index): f8a00c20
// ldadd (must NOT match): f8200041 → [10]=0, excluded
// Must come *after* the LSE atomic check because the LSE mask is strictly
// more specific on [11:10]=00 — they can't both match the same word.
if w & 0xFF200400 == 0xF8200400 {
return Some(Feature::PacNonHint);
}
// ---- DotProd: SDOT/UDOT (vector, by-vector form) ----
// Encoding: 0[31] Q[30] U[29] 01110[28:24] 10[23:22] 0[21] Rm 100101[15:10] Rn Rd
// Fix [28:24]=01110, [23:22]=10, [21]=0, [15:10]=100101. Q and U free.
// sdot : 4e829420 udot : 6e829420
// addv (NEON, must NOT match): 4eb1b820 → size and opc differ
// sqrdmlah (RDM, must NOT match): 6e828420 → [12]=0 here, [12]=1 for DOT
if w & 0x9FE0FC00 == 0x0E809400 {
return Some(Feature::DotProd);
}
// By-element form: 0 Q U 01111 size L M Rm 1110 H 0 Rn Rd with size=10.
// Only the size=10 variant is DotProd; other sizes are pre-existing SQDMLAL etc.
// (not in the fixture; derived from ARM ARM table C4-312)
if w & 0x9FC0F400 == 0x0F80E000 {
return Some(Feature::DotProd);
}
// ---- RDM: SQRDMLAH/SQRDMLSH (vector) ----
// Encoding: 0 Q 1 01110 size 0 Rm 1000 S 1 Rn Rd
// Fix [29]=1, [28:24]=01110, [21]=0, [15:12]=1000, [10]=1. Q, size, S free.
// sqrdmlah : 6e828420 sqrdmlsh : 6e828c20
if w & 0xBF20F400 == 0x2E008400 {
return Some(Feature::Rdm);
}
// ---- JSCVT: FJCVTZS ----
// Single encoding: 0001 1110 0111 1110 0000 00 Rn Rd.
// fjcvtzs : 1e7e0020
if w & 0xFFFFFC00 == 0x1E7E0000 {
return Some(Feature::Jscvt);
}
// Deliberately NOT matched:
// - PACIASP/AUTIASP/BTI and other hint-form PAC: HINT-space (d503xxxx),
// architecturally defined to NOP on CPUs that don't recognize the
// specific op2:CRm. Safe everywhere.
// - FP16 arithmetic: genuinely post-v8.0 but the encoding overlaps the
// NEON space in a way that requires tracking the `size` field across
// many opcode families. Deferred until it shows up in a real scan.
None
}
/// Best-effort mnemonic for the report. Not a disassembler — just enough to
/// let a developer recognize what they're looking at without reaching for
/// objdump. If unsure, fall back to the Feature name.
pub fn rough_mnemonic(w: u32, feat: Feature) -> &'static str {
match feat {
Feature::Sve => "<sve>",
Feature::Rcpc => "ldapr",
Feature::Jscvt => "fjcvtzs",
Feature::PacNonHint => {
if w & 0x00800000 != 0 { "ldrab" } else { "ldraa" }
}
Feature::DotProd => {
if w & 0x20000000 != 0 { "udot" } else { "sdot" }
}
Feature::Rdm => {
if w & 0x00000800 != 0 { "sqrdmlsh" } else { "sqrdmlah" }
}
Feature::Lse => {
// CAS family vs atomic-memory-op family.
if w & 0x3F207C00 == 0x08207C00 {
// CASP has [31]=0; CASB/CASH/CAS/CASX vary by size.
if w & 0x80000000 == 0 && w & 0x40000000 != 0 { "casp" } else { "cas" }
} else {
// Atomic memory ops: o3[15] + opc[14:12] picks the operation.
match (w >> 12) & 0xF {
0x0 => "ldadd",
0x1 => "ldclr",
0x2 => "ldeor",
0x3 => "ldset",
0x4 => "ldsmax",
0x5 => "ldsmin",
0x6 => "ldumax",
0x7 => "ldumin",
0x8 => "swp",
_ => "<lse-atomic>",
}
}
}
}
}
#[cfg(test)]
mod tests {
use super::*;
// Encodings lifted from the assembled fixture (see aarch64-fixture.s).
// Any change to the masks above must keep all of these green.
#[test]
fn flags_lse_cas() {
assert_eq!(classify(0xc8a07c41), Some(Feature::Lse)); // cas x
assert_eq!(classify(0x88e0fc41), Some(Feature::Lse)); // casal w
assert_eq!(classify(0x08a07c41), Some(Feature::Lse)); // casb
assert_eq!(classify(0x48207c82), Some(Feature::Lse)); // casp
assert_eq!(classify(0xc8e0fc41), Some(Feature::Lse)); // casal x
}
#[test]
fn flags_lse_atomic_ops() {
assert_eq!(classify(0xf8208041), Some(Feature::Lse)); // swp
assert_eq!(classify(0xf8200041), Some(Feature::Lse)); // ldadd
assert_eq!(classify(0xf8201041), Some(Feature::Lse)); // ldclr
assert_eq!(classify(0xf8202041), Some(Feature::Lse)); // ldeor
assert_eq!(classify(0xf8203041), Some(Feature::Lse)); // ldset
assert_eq!(classify(0xf8204041), Some(Feature::Lse)); // ldsmax
assert_eq!(classify(0xf8207041), Some(Feature::Lse)); // ldumin
assert_eq!(classify(0xf820003f), Some(Feature::Lse)); // stadd
}
#[test]
fn flags_sve() {
assert_eq!(classify(0x2518e3e0), Some(Feature::Sve)); // ptrue
assert_eq!(classify(0xa400a000), Some(Feature::Sve)); // ld1b
assert_eq!(classify(0x04210000), Some(Feature::Sve)); // add z
}
#[test]
fn flags_rcpc() {
assert_eq!(classify(0xf8bfc020), Some(Feature::Rcpc)); // ldapr x
assert_eq!(classify(0x38bfc020), Some(Feature::Rcpc)); // ldaprb
}
#[test]
fn flags_dotprod() {
assert_eq!(classify(0x4e829420), Some(Feature::DotProd)); // sdot
assert_eq!(classify(0x6e829420), Some(Feature::DotProd)); // udot
}
#[test]
fn flags_jscvt() {
assert_eq!(classify(0x1e7e0020), Some(Feature::Jscvt)); // fjcvtzs
}
#[test]
fn flags_rdm() {
assert_eq!(classify(0x6e828420), Some(Feature::Rdm)); // sqrdmlah
assert_eq!(classify(0x6e828c20), Some(Feature::Rdm)); // sqrdmlsh
}
#[test]
fn flags_pac_nonhint() {
assert_eq!(classify(0xf8200420), Some(Feature::PacNonHint)); // ldraa
assert_eq!(classify(0xf8a00c20), Some(Feature::PacNonHint)); // ldrab
}
#[test]
fn ignores_pac_hints() {
// These are HINT-space; NOP on pre-PAC CPUs by architectural guarantee.
assert_eq!(classify(0xd503233f), None); // paciasp
assert_eq!(classify(0xd50323bf), None); // autiasp
assert_eq!(classify(0xd503245f), None); // bti c
}
#[test]
fn ignores_v8_0_baseline() {
assert_eq!(classify(0xc85f7c20), None); // ldxr (v8.0 exclusive)
assert_eq!(classify(0xc8027c20), None); // stxr
assert_eq!(classify(0x9ac14c00), None); // crc32x (our +crc has this)
assert_eq!(classify(0x1f420c20), None); // fmadd
assert_eq!(classify(0x4eb1b820), None); // addv (NEON)
assert_eq!(classify(0xc8dffc20), None); // ldar (v8.0 acquire)
assert_eq!(classify(0xc89ffc20), None); // stlr (v8.0 release)
assert_eq!(classify(0xd65f03c0), None); // ret
// Regression: stxp with Rt2=xzr collided with CAS ([14:10]=11111).
// Found in libpas (pas_segregated_page_construct).
assert_eq!(classify(0xc8297d1f), None); // stxp w9, xzr, xzr, [x8]
assert_eq!(classify(0xc87f251f), None); // ldxp xzr, x9, [x8]
}
#[test]
fn mnemonics_are_sane() {
assert_eq!(rough_mnemonic(0xf8208041, Feature::Lse), "swp");
assert_eq!(rough_mnemonic(0xf8200041, Feature::Lse), "ldadd");
assert_eq!(rough_mnemonic(0xc8a07c41, Feature::Lse), "cas");
assert_eq!(rough_mnemonic(0x48207c82, Feature::Lse), "casp");
assert_eq!(rough_mnemonic(0xf8bfc020, Feature::Rcpc), "ldapr");
assert_eq!(rough_mnemonic(0x4e829420, Feature::DotProd), "sdot");
assert_eq!(rough_mnemonic(0x6e829420, Feature::DotProd), "udot");
assert_eq!(rough_mnemonic(0x6e828420, Feature::Rdm), "sqrdmlah");
assert_eq!(rough_mnemonic(0x6e828c20, Feature::Rdm), "sqrdmlsh");
assert_eq!(rough_mnemonic(0xf8200420, Feature::PacNonHint), "ldraa");
assert_eq!(rough_mnemonic(0xf8a00c20, Feature::PacNonHint), "ldrab");
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -164,6 +164,51 @@ async function runTest(label: string, binaryArgs: string[], options?: RunTestOpt
return false;
}
// Phase 0: Static instruction scan (no emulation — disassembles the binary).
// Catches instructions in code paths the emulator test below never executes.
// Soft-skipped if the checker isn't built (dev without cargo).
const staticCheckerExe = isWindows ? "verify-baseline-static.exe" : "verify-baseline-static";
const staticChecker = join(scriptDir, "verify-baseline-static", "target", "release", staticCheckerExe);
const staticAllowlistName = isWindows
? "allowlist-x64-windows.txt"
: isAarch64
? "allowlist-aarch64.txt"
: "allowlist-x64.txt";
const staticAllowlist = join(scriptDir, "verify-baseline-static", staticAllowlistName);
let staticViolations = "";
if (await Bun.file(staticChecker).exists()) {
console.log("+++ Static instruction scan");
const start = performance.now();
const proc = Bun.spawn([staticChecker, "--binary", binary, "--allowlist", staticAllowlist], {
stdout: "pipe",
stderr: "inherit",
});
const [stdout, code] = await Promise.all([new Response(proc.stdout).text(), proc.exited]);
const elapsed = ((performance.now() - start) / 1000).toFixed(1);
console.log(stdout);
if (code === 0) {
console.log(` PASS (${elapsed}s)`);
passed++;
} else if (code === 1) {
// Pull just the VIOLATIONS block for the annotation — full stdout is in the log.
const m = stdout.match(/^VIOLATIONS[^\n]*\n([\s\S]*?)\n(?:ALLOWLISTED|STALE|SUMMARY)/m);
staticViolations = m ? m[1].trimEnd() : stdout;
console.log(` FAIL: static scan found post-baseline instructions outside the allowlist (${elapsed}s)`);
instructionFailures++;
failedTests.push("Static instruction scan");
} else {
console.log(` WARN: checker exited ${code} (${elapsed}s, tool error)`);
otherFailures++;
}
console.log();
} else {
console.log("--- Skipping static instruction scan (not built)");
console.log(" cargo build --release --manifest-path scripts/verify-baseline-static/Cargo.toml");
console.log();
}
// Phase 1: SIMD code path verification (always runs)
const simdTestPath = join(repoRoot, "test", "js", "bun", "jsc-stress", "fixtures", "simd-baseline.test.ts");
await runTest("SIMD baseline tests", ["test", simdTestPath], { live: true });
@@ -217,13 +262,30 @@ if (instructionFailures > 0) {
: isAarch64
? "Linux aarch64"
: "Linux x64";
const annotation = [
`<details>`,
`<summary>CPU instruction violation on ${platform}${instructionFailures} failed</summary>`,
`<p>The baseline build uses instructions not available on <code>${config.cpuDesc}</code>.</p>`,
const parts = [
`<details open>`,
`<summary>CPU instruction violation on <b>${platform}</b>${instructionFailures} check(s) failed</summary>`,
`<p>The baseline build contains instructions not available on <code>${config.cpuDesc}</code>.</p>`,
`<ul>${failedTests.map(t => `<li><code>${t}</code></li>`).join("")}</ul>`,
`</details>`,
].join("\n");
];
if (staticViolations) {
// Cap the inline block so a -march= leak (thousands of symbols) doesn't
// produce a multi-MB annotation. Full output is in the step log.
const lines = staticViolations.split("\n");
const shown =
lines.length > 80 ? [...lines.slice(0, 80), `... ${lines.length - 80} more lines (see step log)`] : lines;
parts.push(
`<h4>Static scan violations</h4>`,
`<pre><code>${shown.join("\n").replace(/</g, "&lt;")}</code></pre>`,
`<p><b>If these are runtime-dispatched behind a CPUID gate:</b> add each symbol to`,
`<code>scripts/verify-baseline-static/${staticAllowlistName}</code> with a comment pointing at the gate.`,
`Feature ceilings (the <code>[FEAT, ...]</code> bracket) should list what the gate checks.</p>`,
`<p><b>If there's no gate:</b> this is a real bug — a <code>-march</code> leaked into a subbuild.`,
`Find the translation unit and fix its compile flags.</p>`,
);
}
parts.push(`</details>`);
const annotation = parts.join("\n");
Bun.spawnSync(["buildkite-agent", "annotate", "--append", "--style", "error", "--context", "verify-baseline"], {
stdin: new Blob([annotation]),

View File

@@ -207,7 +207,7 @@ WTF::String stopCPUProfilerAndGetJSON(JSC::VM& vm)
#if USE(BUN_JSC_ADDITIONS)
auto& fn = vm.computeLineColumnWithSourcemap();
if (fn) {
fn(vm, provider, sourceMappedLineColumn);
fn(vm, provider, sourceMappedLineColumn, url);
}
#endif
}
@@ -670,7 +670,7 @@ void stopCPUProfiler(JSC::VM& vm, WTF::String* outJSON, WTF::String* outText)
#if USE(BUN_JSC_ADDITIONS)
auto& fn = vm.computeLineColumnWithSourcemap();
if (fn)
fn(vm, provider, sourceMappedLineColumn);
fn(vm, provider, sourceMappedLineColumn, url);
#endif
}
lineNumber = static_cast<int>(sourceMappedLineColumn.line);
@@ -841,7 +841,7 @@ void stopCPUProfiler(JSC::VM& vm, WTF::String* outJSON, WTF::String* outText)
#if USE(BUN_JSC_ADDITIONS)
auto& fn = vm.computeLineColumnWithSourcemap();
if (fn)
fn(vm, provider, sourceMappedLineColumn);
fn(vm, provider, sourceMappedLineColumn, url);
#endif
}
lineNumber = static_cast<int>(sourceMappedLineColumn.line);

View File

@@ -541,7 +541,7 @@ WTF::String computeErrorInfoWrapperToString(JSC::VM& vm, Vector<StackFrame>& sta
return result;
}
void computeLineColumnWithSourcemap(JSC::VM& vm, JSC::SourceProvider* _Nonnull sourceProvider, JSC::LineColumn& lineColumn)
void computeLineColumnWithSourcemap(JSC::VM& vm, JSC::SourceProvider* _Nonnull sourceProvider, JSC::LineColumn& lineColumn, WTF::String& remappedSourceURL)
{
auto sourceURL = sourceProvider->sourceURL();
if (sourceURL.isEmpty()) {
@@ -561,6 +561,7 @@ void computeLineColumnWithSourcemap(JSC::VM& vm, JSC::SourceProvider* _Nonnull s
if (frame.remapped) {
lineColumn.line = frame.position.line().oneBasedInt();
lineColumn.column = frame.position.column().oneBasedInt();
remappedSourceURL = frame.source_url.toWTFString();
}
}

View File

@@ -82,7 +82,7 @@ JSC_DECLARE_CUSTOM_SETTER(errorInstanceLazyStackCustomSetter);
// Internal wrapper functions for JSC error info callbacks
WTF::String computeErrorInfoWrapperToString(JSC::VM& vm, WTF::Vector<JSC::StackFrame>& stackTrace, unsigned int& line_in, unsigned int& column_in, WTF::String& sourceURL, void* bunErrorData);
JSC::JSValue computeErrorInfoWrapperToJSValue(JSC::VM& vm, WTF::Vector<JSC::StackFrame>& stackTrace, unsigned int& line_in, unsigned int& column_in, WTF::String& sourceURL, JSC::JSObject* errorInstance, void* bunErrorData);
void computeLineColumnWithSourcemap(JSC::VM& vm, JSC::SourceProvider* _Nonnull sourceProvider, JSC::LineColumn& lineColumn);
void computeLineColumnWithSourcemap(JSC::VM& vm, JSC::SourceProvider* _Nonnull sourceProvider, JSC::LineColumn& lineColumn, WTF::String& remappedSourceURL);
} // namespace Bun
namespace Zig {