From 32fff6a905f3518c8e3152f5ff2cd1d01f8a60d3 Mon Sep 17 00:00:00 2001 From: Timothy Place Date: Mon, 28 Sep 2026 02:01:05 +0000 Subject: [PATCH] bench: fill the #44 provenance cells from the push-to-main run on d9c1e33 The rows #44 recorded left the main SHA pending until the squash. The push-to-main bench run on d9c1e33 (run 36367784465, compare mode) confirms them: - The eight Cortex-M float rows reproduce to the instruction. - The six hexagon rows read +22 packets on every scenario, fixed point included. That is the process-environment offset bench/README.md describes, inside the band, and the baselines are not re-recorded. The cells now name d9c1e33 and the run. No baseline or ceiling changes. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_019ZPTzNxo5Fe4EtpXXKf7Sy --- bench/README.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/bench/README.md b/bench/README.md index c5d38f4..f6cb111 100644 --- a/bench/README.md +++ b/bench/README.md @@ -225,20 +225,20 @@ shape is fixed so the record stays greppable: | m33 | rfft_f32_512 | 100,945,841 | 92,979,212 | −7.89 % | **re-recorded at the srdif replacement** (tap/DspTap#42): the floating engine behind `basic_real_fft` on these keys is now `fft/srdif.h` (a split-radix DIF kernel of length N/2 written from the literature), which replaced the port of Ooura's `rdft` (`fft/split_radix.h`, deleted at #42); every float output bit changes (new checksums) and the counts fall on every key, beyond the −3 % band on every key but m4-softfp, so the exact new counts are recorded (Part 11 / D11). The counts are those of the fix pass for review A of #42 (the bit-reversal permutation without an index table, GCC's SLP vectorizer off for the engine; output bits unchanged), 0.04 … 2.62 % below the first srdif record (1,815,063,718 / 2,244,317,934 m4-softfp, 94,003,130 / 108,030,219 m4f, 94,382,323 / 108,470,414 m33, 86,188,216 / 100,091,803 m55-ooura at 512 / 2048). Fixed-point scenarios and the `m55` (CMSIS) key are not re-recorded: measured inside the band (fixed point +0.49 … +1.15 %, CMSIS +0.00 %) with no change to that code. `docs/fft-design.md`, "The floating engine (srdif)" | measured locally with `scripts/icount.py` exactly as `bench.yml` runs it (fresh Release build per key, TAP_DSP_BUILD_TESTS=OFF, the pinned plugin header), 2026-09-27; confirmed to the instruction by the push-to-`main` [run 36348787347](https://github.com/tap/DspTap/actions/runs/36348787347) (compare mode, +0.00 %) | `72977aa` (the #42 squash) | 13.2.1 (15:13.2.rel1-2) | 8.2.2 (1:8.2.2+ds-0ubuntu1.18) | | m55-ooura | rfft_f32_2048 | 102,784,096 | 97,602,563 | −5.04 % | **re-recorded at the srdif replacement** (tap/DspTap#42): the floating engine behind `basic_real_fft` on these keys is now `fft/srdif.h` (a split-radix DIF kernel of length N/2 written from the literature), which replaced the port of Ooura's `rdft` (`fft/split_radix.h`, deleted at #42); every float output bit changes (new checksums) and the counts fall on every key, beyond the −3 % band on every key but m4-softfp, so the exact new counts are recorded (Part 11 / D11). The counts are those of the fix pass for review A of #42 (the bit-reversal permutation without an index table, GCC's SLP vectorizer off for the engine; output bits unchanged), 0.04 … 2.62 % below the first srdif record (1,815,063,718 / 2,244,317,934 m4-softfp, 94,003,130 / 108,030,219 m4f, 94,382,323 / 108,470,414 m33, 86,188,216 / 100,091,803 m55-ooura at 512 / 2048). Fixed-point scenarios and the `m55` (CMSIS) key are not re-recorded: measured inside the band (fixed point +0.49 … +1.15 %, CMSIS +0.00 %) with no change to that code. `docs/fft-design.md`, "The floating engine (srdif)" | measured locally with `scripts/icount.py` exactly as `bench.yml` runs it (fresh Release build per key, TAP_DSP_BUILD_TESTS=OFF, the pinned plugin header), 2026-09-27; confirmed to the instruction by the push-to-`main` [run 36348787347](https://github.com/tap/DspTap/actions/runs/36348787347) (compare mode, +0.00 %) | `72977aa` (the #42 squash) | 13.2.1 (15:13.2.rel1-2) | 8.2.2 (1:8.2.2+ds-0ubuntu1.18) | | m55-ooura | rfft_f32_512 | 89,276,321 | 83,933,381 | −5.98 % | **re-recorded at the srdif replacement** (tap/DspTap#42): the floating engine behind `basic_real_fft` on these keys is now `fft/srdif.h` (a split-radix DIF kernel of length N/2 written from the literature), which replaced the port of Ooura's `rdft` (`fft/split_radix.h`, deleted at #42); every float output bit changes (new checksums) and the counts fall on every key, beyond the −3 % band on every key but m4-softfp, so the exact new counts are recorded (Part 11 / D11). The counts are those of the fix pass for review A of #42 (the bit-reversal permutation without an index table, GCC's SLP vectorizer off for the engine; output bits unchanged), 0.04 … 2.62 % below the first srdif record (1,815,063,718 / 2,244,317,934 m4-softfp, 94,003,130 / 108,030,219 m4f, 94,382,323 / 108,470,414 m33, 86,188,216 / 100,091,803 m55-ooura at 512 / 2048). Fixed-point scenarios and the `m55` (CMSIS) key are not re-recorded: measured inside the band (fixed point +0.49 … +1.15 %, CMSIS +0.00 %) with no change to that code. `docs/fft-design.md`, "The floating engine (srdif)" | measured locally with `scripts/icount.py` exactly as `bench.yml` runs it (fresh Release build per key, TAP_DSP_BUILD_TESTS=OFF, the pinned plugin header), 2026-09-27; confirmed to the instruction by the push-to-`main` [run 36348787347](https://github.com/tap/DspTap/actions/runs/36348787347) (compare mode, +0.00 %) | `72977aa` (the #42 squash) | 13.2.1 (15:13.2.rel1-2) | 8.2.2 (1:8.2.2+ds-0ubuntu1.18) | -| m4-softfp | rfft_f32_2048 | 2,243,212,021 | 2,241,935,605 | −0.06 % | **re-recorded at the Hexagon tuning of the srdif engine**: `fft/srdif.h` was tuned for the `hexagon` key (clang 19; forced inlining under clang, the post-pass's two bin pairs loaded before either is stored, the small blocks' split-radix levels in memory down to pairs instead of register leaves, one run-time group per loop step in double, a multiply-subtract spelling for clang's contraction), and the float count falls on every key that runs the engine, −0.06 … −1.11 %, inside the band; the exact new counts are recorded (bench/README.md policy: the winning commit re-records). No output bit moves at `-ffp-contract=off` (the srdif fingerprints pass unchanged on the host, the four QEMU legs and Hexagon); at the bench's default flags the FPU keys' checksums move (GCC contracts across the former leaves differently), `m4-softfp`'s do not. Fixed-point scenarios and the `m55` (CMSIS) key are not re-recorded: unchanged to the instruction. `docs/fft-design.md`, "Hexagon (clang) tuning" | measured locally with `scripts/icount.py` exactly as `bench.yml` runs it (fresh Release build per key, TAP_DSP_BUILD_TESTS=OFF, the pinned plugin header), 2026-09-28; confirmed to the instruction by the `workflow_dispatch` [run 36363710480](https://github.com/tap/DspTap/actions/runs/36363710480) on the branch (`2a5fc69`, compare mode, +0.00 %) | **pending** (the squash) | 13.2.1 (15:13.2.rel1-2) | 8.2.2 (1:8.2.2+ds-0ubuntu1.18) | -| m4-softfp | rfft_f32_512 | 1,814,303,702 | 1,813,126,102 | −0.06 % | **re-recorded at the Hexagon tuning of the srdif engine**: `fft/srdif.h` was tuned for the `hexagon` key (clang 19; forced inlining under clang, the post-pass's two bin pairs loaded before either is stored, the small blocks' split-radix levels in memory down to pairs instead of register leaves, one run-time group per loop step in double, a multiply-subtract spelling for clang's contraction), and the float count falls on every key that runs the engine, −0.06 … −1.11 %, inside the band; the exact new counts are recorded (bench/README.md policy: the winning commit re-records). No output bit moves at `-ffp-contract=off` (the srdif fingerprints pass unchanged on the host, the four QEMU legs and Hexagon); at the bench's default flags the FPU keys' checksums move (GCC contracts across the former leaves differently), `m4-softfp`'s do not. Fixed-point scenarios and the `m55` (CMSIS) key are not re-recorded: unchanged to the instruction. `docs/fft-design.md`, "Hexagon (clang) tuning" | measured locally with `scripts/icount.py` exactly as `bench.yml` runs it (fresh Release build per key, TAP_DSP_BUILD_TESTS=OFF, the pinned plugin header), 2026-09-28; confirmed to the instruction by the `workflow_dispatch` [run 36363710480](https://github.com/tap/DspTap/actions/runs/36363710480) on the branch (`2a5fc69`, compare mode, +0.00 %) | **pending** (the squash) | 13.2.1 (15:13.2.rel1-2) | 8.2.2 (1:8.2.2+ds-0ubuntu1.18) | -| m4f | rfft_f32_2048 | 106,282,752 | 105,151,232 | −1.06 % | **re-recorded at the Hexagon tuning of the srdif engine**: `fft/srdif.h` was tuned for the `hexagon` key (clang 19; forced inlining under clang, the post-pass's two bin pairs loaded before either is stored, the small blocks' split-radix levels in memory down to pairs instead of register leaves, one run-time group per loop step in double, a multiply-subtract spelling for clang's contraction), and the float count falls on every key that runs the engine, −0.06 … −1.11 %, inside the band; the exact new counts are recorded (bench/README.md policy: the winning commit re-records). No output bit moves at `-ffp-contract=off` (the srdif fingerprints pass unchanged on the host, the four QEMU legs and Hexagon); at the bench's default flags the FPU keys' checksums move (GCC contracts across the former leaves differently), `m4-softfp`'s do not. Fixed-point scenarios and the `m55` (CMSIS) key are not re-recorded: unchanged to the instruction. `docs/fft-design.md`, "Hexagon (clang) tuning" | measured locally with `scripts/icount.py` exactly as `bench.yml` runs it (fresh Release build per key, TAP_DSP_BUILD_TESTS=OFF, the pinned plugin header), 2026-09-28; confirmed to the instruction by the `workflow_dispatch` [run 36363710480](https://github.com/tap/DspTap/actions/runs/36363710480) on the branch (`2a5fc69`, compare mode, +0.00 %) | **pending** (the squash) | 13.2.1 (15:13.2.rel1-2) | 8.2.2 (1:8.2.2+ds-0ubuntu1.18) | -| m4f | rfft_f32_512 | 92,575,609 | 91,545,465 | −1.11 % | **re-recorded at the Hexagon tuning of the srdif engine**: `fft/srdif.h` was tuned for the `hexagon` key (clang 19; forced inlining under clang, the post-pass's two bin pairs loaded before either is stored, the small blocks' split-radix levels in memory down to pairs instead of register leaves, one run-time group per loop step in double, a multiply-subtract spelling for clang's contraction), and the float count falls on every key that runs the engine, −0.06 … −1.11 %, inside the band; the exact new counts are recorded (bench/README.md policy: the winning commit re-records). No output bit moves at `-ffp-contract=off` (the srdif fingerprints pass unchanged on the host, the four QEMU legs and Hexagon); at the bench's default flags the FPU keys' checksums move (GCC contracts across the former leaves differently), `m4-softfp`'s do not. Fixed-point scenarios and the `m55` (CMSIS) key are not re-recorded: unchanged to the instruction. `docs/fft-design.md`, "Hexagon (clang) tuning" | measured locally with `scripts/icount.py` exactly as `bench.yml` runs it (fresh Release build per key, TAP_DSP_BUILD_TESTS=OFF, the pinned plugin header), 2026-09-28; confirmed to the instruction by the `workflow_dispatch` [run 36363710480](https://github.com/tap/DspTap/actions/runs/36363710480) on the branch (`2a5fc69`, compare mode, +0.00 %) | **pending** (the squash) | 13.2.1 (15:13.2.rel1-2) | 8.2.2 (1:8.2.2+ds-0ubuntu1.18) | -| m33 | rfft_f32_2048 | 106,773,786 | 106,248,986 | −0.49 % | **re-recorded at the Hexagon tuning of the srdif engine**: `fft/srdif.h` was tuned for the `hexagon` key (clang 19; forced inlining under clang, the post-pass's two bin pairs loaded before either is stored, the small blocks' split-radix levels in memory down to pairs instead of register leaves, one run-time group per loop step in double, a multiply-subtract spelling for clang's contraction), and the float count falls on every key that runs the engine, −0.06 … −1.11 %, inside the band; the exact new counts are recorded (bench/README.md policy: the winning commit re-records). No output bit moves at `-ffp-contract=off` (the srdif fingerprints pass unchanged on the host, the four QEMU legs and Hexagon); at the bench's default flags the FPU keys' checksums move (GCC contracts across the former leaves differently), `m4-softfp`'s do not. Fixed-point scenarios and the `m55` (CMSIS) key are not re-recorded: unchanged to the instruction. `docs/fft-design.md`, "Hexagon (clang) tuning" | measured locally with `scripts/icount.py` exactly as `bench.yml` runs it (fresh Release build per key, TAP_DSP_BUILD_TESTS=OFF, the pinned plugin header), 2026-09-28; confirmed to the instruction by the `workflow_dispatch` [run 36363710480](https://github.com/tap/DspTap/actions/runs/36363710480) on the branch (`2a5fc69`, compare mode, +0.00 %) | **pending** (the squash) | 13.2.1 (15:13.2.rel1-2) | 8.2.2 (1:8.2.2+ds-0ubuntu1.18) | -| m33 | rfft_f32_512 | 92,979,212 | 92,624,908 | −0.38 % | **re-recorded at the Hexagon tuning of the srdif engine**: `fft/srdif.h` was tuned for the `hexagon` key (clang 19; forced inlining under clang, the post-pass's two bin pairs loaded before either is stored, the small blocks' split-radix levels in memory down to pairs instead of register leaves, one run-time group per loop step in double, a multiply-subtract spelling for clang's contraction), and the float count falls on every key that runs the engine, −0.06 … −1.11 %, inside the band; the exact new counts are recorded (bench/README.md policy: the winning commit re-records). No output bit moves at `-ffp-contract=off` (the srdif fingerprints pass unchanged on the host, the four QEMU legs and Hexagon); at the bench's default flags the FPU keys' checksums move (GCC contracts across the former leaves differently), `m4-softfp`'s do not. Fixed-point scenarios and the `m55` (CMSIS) key are not re-recorded: unchanged to the instruction. `docs/fft-design.md`, "Hexagon (clang) tuning" | measured locally with `scripts/icount.py` exactly as `bench.yml` runs it (fresh Release build per key, TAP_DSP_BUILD_TESTS=OFF, the pinned plugin header), 2026-09-28; confirmed to the instruction by the `workflow_dispatch` [run 36363710480](https://github.com/tap/DspTap/actions/runs/36363710480) on the branch (`2a5fc69`, compare mode, +0.00 %) | **pending** (the squash) | 13.2.1 (15:13.2.rel1-2) | 8.2.2 (1:8.2.2+ds-0ubuntu1.18) | -| m55-ooura | rfft_f32_2048 | 97,602,563 | 97,109,507 | −0.51 % | **re-recorded at the Hexagon tuning of the srdif engine**: `fft/srdif.h` was tuned for the `hexagon` key (clang 19; forced inlining under clang, the post-pass's two bin pairs loaded before either is stored, the small blocks' split-radix levels in memory down to pairs instead of register leaves, one run-time group per loop step in double, a multiply-subtract spelling for clang's contraction), and the float count falls on every key that runs the engine, −0.06 … −1.11 %, inside the band; the exact new counts are recorded (bench/README.md policy: the winning commit re-records). No output bit moves at `-ffp-contract=off` (the srdif fingerprints pass unchanged on the host, the four QEMU legs and Hexagon); at the bench's default flags the FPU keys' checksums move (GCC contracts across the former leaves differently), `m4-softfp`'s do not. Fixed-point scenarios and the `m55` (CMSIS) key are not re-recorded: unchanged to the instruction. `docs/fft-design.md`, "Hexagon (clang) tuning" | measured locally with `scripts/icount.py` exactly as `bench.yml` runs it (fresh Release build per key, TAP_DSP_BUILD_TESTS=OFF, the pinned plugin header), 2026-09-28; confirmed to the instruction by the `workflow_dispatch` [run 36363710480](https://github.com/tap/DspTap/actions/runs/36363710480) on the branch (`2a5fc69`, compare mode, +0.00 %) | **pending** (the squash) | 13.2.1 (15:13.2.rel1-2) | 8.2.2 (1:8.2.2+ds-0ubuntu1.18) | -| m55-ooura | rfft_f32_512 | 83,933,381 | 83,628,229 | −0.36 % | **re-recorded at the Hexagon tuning of the srdif engine**: `fft/srdif.h` was tuned for the `hexagon` key (clang 19; forced inlining under clang, the post-pass's two bin pairs loaded before either is stored, the small blocks' split-radix levels in memory down to pairs instead of register leaves, one run-time group per loop step in double, a multiply-subtract spelling for clang's contraction), and the float count falls on every key that runs the engine, −0.06 … −1.11 %, inside the band; the exact new counts are recorded (bench/README.md policy: the winning commit re-records). No output bit moves at `-ffp-contract=off` (the srdif fingerprints pass unchanged on the host, the four QEMU legs and Hexagon); at the bench's default flags the FPU keys' checksums move (GCC contracts across the former leaves differently), `m4-softfp`'s do not. Fixed-point scenarios and the `m55` (CMSIS) key are not re-recorded: unchanged to the instruction. `docs/fft-design.md`, "Hexagon (clang) tuning" | measured locally with `scripts/icount.py` exactly as `bench.yml` runs it (fresh Release build per key, TAP_DSP_BUILD_TESTS=OFF, the pinned plugin header), 2026-09-28; confirmed to the instruction by the `workflow_dispatch` [run 36363710480](https://github.com/tap/DspTap/actions/runs/36363710480) on the branch (`2a5fc69`, compare mode, +0.00 %) | **pending** (the squash) | 13.2.1 (15:13.2.rel1-2) | 8.2.2 (1:8.2.2+ds-0ubuntu1.18) | -| hexagon | rfft_f32_2048 | — | 51,608,903 | — | **seeded** (the `hexagon` key is new): Hexagon v68 + HVX-128, CodeLinaro clang 19.1.5, static musl, under qemu-hexagon user mode; the key counts packets, not instructions (above). Seeded on the tuned srdif engine; the engine as #42 shipped it read 65,684,295 on the first seeding run ([run 36357132506](https://github.com/tap/DspTap/actions/runs/36357132506), `28befbd`), and the engine it replaced 54,834,714 (local, the same harness, converted to the runner's offset; float ±28). `docs/fft-design.md`, "Hexagon (clang) tuning" | `workflow_dispatch` [run 36363710480](https://github.com/tap/DspTap/actions/runs/36363710480) on the branch (`2a5fc69`, seed mode) | **pending** (the squash) | clang 19.1.5 (CodeLinaro, hexagon-unknown-linux-musl) | qemu-hexagon 8.2.2 (built from the release with `--enable-plugins`) | -| hexagon | rfft_f32_512 | — | 45,934,423 | — | **seeded** (the `hexagon` key is new): Hexagon v68 + HVX-128, CodeLinaro clang 19.1.5, static musl, under qemu-hexagon user mode; the key counts packets, not instructions (above). Seeded on the tuned srdif engine; the engine as #42 shipped it read 57,659,223 on the first seeding run ([run 36357132506](https://github.com/tap/DspTap/actions/runs/36357132506), `28befbd`), and the engine it replaced 49,732,931 (local, the same harness, converted to the runner's offset; float ±28). `docs/fft-design.md`, "Hexagon (clang) tuning" | `workflow_dispatch` [run 36363710480](https://github.com/tap/DspTap/actions/runs/36363710480) on the branch (`2a5fc69`, seed mode) | **pending** (the squash) | clang 19.1.5 (CodeLinaro, hexagon-unknown-linux-musl) | qemu-hexagon 8.2.2 (built from the release with `--enable-plugins`) | -| hexagon | rfft_f64_512 | — | 99,939,789 | — | **seeded** (the `hexagon` key is new): Hexagon v68 + HVX-128, CodeLinaro clang 19.1.5, static musl, under qemu-hexagon user mode; the key counts packets, not instructions (above). Seeded on the tuned srdif engine; the engine as #42 shipped it read 110,683,597 on the first seeding run ([run 36357132506](https://github.com/tap/DspTap/actions/runs/36357132506), `28befbd`), and the engine it replaced 103,239,537 (local, the same harness, converted to the runner's offset; float ±28). `docs/fft-design.md`, "Hexagon (clang) tuning" | `workflow_dispatch` [run 36363710480](https://github.com/tap/DspTap/actions/runs/36363710480) on the branch (`2a5fc69`, seed mode) | **pending** (the squash) | clang 19.1.5 (CodeLinaro, hexagon-unknown-linux-musl) | qemu-hexagon 8.2.2 (built from the release with `--enable-plugins`) | -| hexagon | rfft_q15_512 | — | 159,976,886 | — | **seeded** (the `hexagon` key is new): Hexagon v68 + HVX-128, CodeLinaro clang 19.1.5, static musl, under qemu-hexagon user mode; the key counts packets, not instructions (above). Seeded on the tuned srdif engine; the engine as #42 shipped it read 159,976,886 on the first seeding run ([run 36357132506](https://github.com/tap/DspTap/actions/runs/36357132506), `28befbd`), and the engine it replaced 159,976,886, the same code (local, the same harness, converted to the runner's offset; float ±28). `docs/fft-design.md`, "Hexagon (clang) tuning" | `workflow_dispatch` [run 36363710480](https://github.com/tap/DspTap/actions/runs/36363710480) on the branch (`2a5fc69`, seed mode) | **pending** (the squash) | clang 19.1.5 (CodeLinaro, hexagon-unknown-linux-musl) | qemu-hexagon 8.2.2 (built from the release with `--enable-plugins`) | -| hexagon | rfft_q31_2048 | — | 184,890,581 | — | **seeded** (the `hexagon` key is new): Hexagon v68 + HVX-128, CodeLinaro clang 19.1.5, static musl, under qemu-hexagon user mode; the key counts packets, not instructions (above). Seeded on the tuned srdif engine; the engine as #42 shipped it read 184,890,581 on the first seeding run ([run 36357132506](https://github.com/tap/DspTap/actions/runs/36357132506), `28befbd`), and the engine it replaced 184,890,581, the same code (local, the same harness, converted to the runner's offset; float ±28). `docs/fft-design.md`, "Hexagon (clang) tuning" | `workflow_dispatch` [run 36363710480](https://github.com/tap/DspTap/actions/runs/36363710480) on the branch (`2a5fc69`, seed mode) | **pending** (the squash) | clang 19.1.5 (CodeLinaro, hexagon-unknown-linux-musl) | qemu-hexagon 8.2.2 (built from the release with `--enable-plugins`) | -| hexagon | rfft_q31_512 | — | 157,303,237 | — | **seeded** (the `hexagon` key is new): Hexagon v68 + HVX-128, CodeLinaro clang 19.1.5, static musl, under qemu-hexagon user mode; the key counts packets, not instructions (above). Seeded on the tuned srdif engine; the engine as #42 shipped it read 157,303,237 on the first seeding run ([run 36357132506](https://github.com/tap/DspTap/actions/runs/36357132506), `28befbd`), and the engine it replaced 157,303,237, the same code (local, the same harness, converted to the runner's offset; float ±28). `docs/fft-design.md`, "Hexagon (clang) tuning" | `workflow_dispatch` [run 36363710480](https://github.com/tap/DspTap/actions/runs/36363710480) on the branch (`2a5fc69`, seed mode) | **pending** (the squash) | clang 19.1.5 (CodeLinaro, hexagon-unknown-linux-musl) | qemu-hexagon 8.2.2 (built from the release with `--enable-plugins`) | +| m4-softfp | rfft_f32_2048 | 2,243,212,021 | 2,241,935,605 | −0.06 % | **re-recorded at the Hexagon tuning of the srdif engine**: `fft/srdif.h` was tuned for the `hexagon` key (clang 19; forced inlining under clang, the post-pass's two bin pairs loaded before either is stored, the small blocks' split-radix levels in memory down to pairs instead of register leaves, one run-time group per loop step in double, a multiply-subtract spelling for clang's contraction), and the float count falls on every key that runs the engine, −0.06 … −1.11 %, inside the band; the exact new counts are recorded (bench/README.md policy: the winning commit re-records). No output bit moves at `-ffp-contract=off` (the srdif fingerprints pass unchanged on the host, the four QEMU legs and Hexagon); at the bench's default flags the FPU keys' checksums move (GCC contracts across the former leaves differently), `m4-softfp`'s do not. Fixed-point scenarios and the `m55` (CMSIS) key are not re-recorded: unchanged to the instruction. `docs/fft-design.md`, "Hexagon (clang) tuning" | measured locally with `scripts/icount.py` exactly as `bench.yml` runs it (fresh Release build per key, TAP_DSP_BUILD_TESTS=OFF, the pinned plugin header), 2026-09-28; confirmed to the instruction by the `workflow_dispatch` [run 36363710480](https://github.com/tap/DspTap/actions/runs/36363710480) on the branch (`2a5fc69`, compare mode, +0.00 %) ; confirmed again by the push-to-`main` [run 36367784465](https://github.com/tap/DspTap/actions/runs/36367784465) (compare mode, +0.00 %) | `d9c1e33` (the #44 squash) | 13.2.1 (15:13.2.rel1-2) | 8.2.2 (1:8.2.2+ds-0ubuntu1.18) | +| m4-softfp | rfft_f32_512 | 1,814,303,702 | 1,813,126,102 | −0.06 % | **re-recorded at the Hexagon tuning of the srdif engine**: `fft/srdif.h` was tuned for the `hexagon` key (clang 19; forced inlining under clang, the post-pass's two bin pairs loaded before either is stored, the small blocks' split-radix levels in memory down to pairs instead of register leaves, one run-time group per loop step in double, a multiply-subtract spelling for clang's contraction), and the float count falls on every key that runs the engine, −0.06 … −1.11 %, inside the band; the exact new counts are recorded (bench/README.md policy: the winning commit re-records). No output bit moves at `-ffp-contract=off` (the srdif fingerprints pass unchanged on the host, the four QEMU legs and Hexagon); at the bench's default flags the FPU keys' checksums move (GCC contracts across the former leaves differently), `m4-softfp`'s do not. Fixed-point scenarios and the `m55` (CMSIS) key are not re-recorded: unchanged to the instruction. `docs/fft-design.md`, "Hexagon (clang) tuning" | measured locally with `scripts/icount.py` exactly as `bench.yml` runs it (fresh Release build per key, TAP_DSP_BUILD_TESTS=OFF, the pinned plugin header), 2026-09-28; confirmed to the instruction by the `workflow_dispatch` [run 36363710480](https://github.com/tap/DspTap/actions/runs/36363710480) on the branch (`2a5fc69`, compare mode, +0.00 %) ; confirmed again by the push-to-`main` [run 36367784465](https://github.com/tap/DspTap/actions/runs/36367784465) (compare mode, +0.00 %) | `d9c1e33` (the #44 squash) | 13.2.1 (15:13.2.rel1-2) | 8.2.2 (1:8.2.2+ds-0ubuntu1.18) | +| m4f | rfft_f32_2048 | 106,282,752 | 105,151,232 | −1.06 % | **re-recorded at the Hexagon tuning of the srdif engine**: `fft/srdif.h` was tuned for the `hexagon` key (clang 19; forced inlining under clang, the post-pass's two bin pairs loaded before either is stored, the small blocks' split-radix levels in memory down to pairs instead of register leaves, one run-time group per loop step in double, a multiply-subtract spelling for clang's contraction), and the float count falls on every key that runs the engine, −0.06 … −1.11 %, inside the band; the exact new counts are recorded (bench/README.md policy: the winning commit re-records). No output bit moves at `-ffp-contract=off` (the srdif fingerprints pass unchanged on the host, the four QEMU legs and Hexagon); at the bench's default flags the FPU keys' checksums move (GCC contracts across the former leaves differently), `m4-softfp`'s do not. Fixed-point scenarios and the `m55` (CMSIS) key are not re-recorded: unchanged to the instruction. `docs/fft-design.md`, "Hexagon (clang) tuning" | measured locally with `scripts/icount.py` exactly as `bench.yml` runs it (fresh Release build per key, TAP_DSP_BUILD_TESTS=OFF, the pinned plugin header), 2026-09-28; confirmed to the instruction by the `workflow_dispatch` [run 36363710480](https://github.com/tap/DspTap/actions/runs/36363710480) on the branch (`2a5fc69`, compare mode, +0.00 %) ; confirmed again by the push-to-`main` [run 36367784465](https://github.com/tap/DspTap/actions/runs/36367784465) (compare mode, +0.00 %) | `d9c1e33` (the #44 squash) | 13.2.1 (15:13.2.rel1-2) | 8.2.2 (1:8.2.2+ds-0ubuntu1.18) | +| m4f | rfft_f32_512 | 92,575,609 | 91,545,465 | −1.11 % | **re-recorded at the Hexagon tuning of the srdif engine**: `fft/srdif.h` was tuned for the `hexagon` key (clang 19; forced inlining under clang, the post-pass's two bin pairs loaded before either is stored, the small blocks' split-radix levels in memory down to pairs instead of register leaves, one run-time group per loop step in double, a multiply-subtract spelling for clang's contraction), and the float count falls on every key that runs the engine, −0.06 … −1.11 %, inside the band; the exact new counts are recorded (bench/README.md policy: the winning commit re-records). No output bit moves at `-ffp-contract=off` (the srdif fingerprints pass unchanged on the host, the four QEMU legs and Hexagon); at the bench's default flags the FPU keys' checksums move (GCC contracts across the former leaves differently), `m4-softfp`'s do not. Fixed-point scenarios and the `m55` (CMSIS) key are not re-recorded: unchanged to the instruction. `docs/fft-design.md`, "Hexagon (clang) tuning" | measured locally with `scripts/icount.py` exactly as `bench.yml` runs it (fresh Release build per key, TAP_DSP_BUILD_TESTS=OFF, the pinned plugin header), 2026-09-28; confirmed to the instruction by the `workflow_dispatch` [run 36363710480](https://github.com/tap/DspTap/actions/runs/36363710480) on the branch (`2a5fc69`, compare mode, +0.00 %) ; confirmed again by the push-to-`main` [run 36367784465](https://github.com/tap/DspTap/actions/runs/36367784465) (compare mode, +0.00 %) | `d9c1e33` (the #44 squash) | 13.2.1 (15:13.2.rel1-2) | 8.2.2 (1:8.2.2+ds-0ubuntu1.18) | +| m33 | rfft_f32_2048 | 106,773,786 | 106,248,986 | −0.49 % | **re-recorded at the Hexagon tuning of the srdif engine**: `fft/srdif.h` was tuned for the `hexagon` key (clang 19; forced inlining under clang, the post-pass's two bin pairs loaded before either is stored, the small blocks' split-radix levels in memory down to pairs instead of register leaves, one run-time group per loop step in double, a multiply-subtract spelling for clang's contraction), and the float count falls on every key that runs the engine, −0.06 … −1.11 %, inside the band; the exact new counts are recorded (bench/README.md policy: the winning commit re-records). No output bit moves at `-ffp-contract=off` (the srdif fingerprints pass unchanged on the host, the four QEMU legs and Hexagon); at the bench's default flags the FPU keys' checksums move (GCC contracts across the former leaves differently), `m4-softfp`'s do not. Fixed-point scenarios and the `m55` (CMSIS) key are not re-recorded: unchanged to the instruction. `docs/fft-design.md`, "Hexagon (clang) tuning" | measured locally with `scripts/icount.py` exactly as `bench.yml` runs it (fresh Release build per key, TAP_DSP_BUILD_TESTS=OFF, the pinned plugin header), 2026-09-28; confirmed to the instruction by the `workflow_dispatch` [run 36363710480](https://github.com/tap/DspTap/actions/runs/36363710480) on the branch (`2a5fc69`, compare mode, +0.00 %) ; confirmed again by the push-to-`main` [run 36367784465](https://github.com/tap/DspTap/actions/runs/36367784465) (compare mode, +0.00 %) | `d9c1e33` (the #44 squash) | 13.2.1 (15:13.2.rel1-2) | 8.2.2 (1:8.2.2+ds-0ubuntu1.18) | +| m33 | rfft_f32_512 | 92,979,212 | 92,624,908 | −0.38 % | **re-recorded at the Hexagon tuning of the srdif engine**: `fft/srdif.h` was tuned for the `hexagon` key (clang 19; forced inlining under clang, the post-pass's two bin pairs loaded before either is stored, the small blocks' split-radix levels in memory down to pairs instead of register leaves, one run-time group per loop step in double, a multiply-subtract spelling for clang's contraction), and the float count falls on every key that runs the engine, −0.06 … −1.11 %, inside the band; the exact new counts are recorded (bench/README.md policy: the winning commit re-records). No output bit moves at `-ffp-contract=off` (the srdif fingerprints pass unchanged on the host, the four QEMU legs and Hexagon); at the bench's default flags the FPU keys' checksums move (GCC contracts across the former leaves differently), `m4-softfp`'s do not. Fixed-point scenarios and the `m55` (CMSIS) key are not re-recorded: unchanged to the instruction. `docs/fft-design.md`, "Hexagon (clang) tuning" | measured locally with `scripts/icount.py` exactly as `bench.yml` runs it (fresh Release build per key, TAP_DSP_BUILD_TESTS=OFF, the pinned plugin header), 2026-09-28; confirmed to the instruction by the `workflow_dispatch` [run 36363710480](https://github.com/tap/DspTap/actions/runs/36363710480) on the branch (`2a5fc69`, compare mode, +0.00 %) ; confirmed again by the push-to-`main` [run 36367784465](https://github.com/tap/DspTap/actions/runs/36367784465) (compare mode, +0.00 %) | `d9c1e33` (the #44 squash) | 13.2.1 (15:13.2.rel1-2) | 8.2.2 (1:8.2.2+ds-0ubuntu1.18) | +| m55-ooura | rfft_f32_2048 | 97,602,563 | 97,109,507 | −0.51 % | **re-recorded at the Hexagon tuning of the srdif engine**: `fft/srdif.h` was tuned for the `hexagon` key (clang 19; forced inlining under clang, the post-pass's two bin pairs loaded before either is stored, the small blocks' split-radix levels in memory down to pairs instead of register leaves, one run-time group per loop step in double, a multiply-subtract spelling for clang's contraction), and the float count falls on every key that runs the engine, −0.06 … −1.11 %, inside the band; the exact new counts are recorded (bench/README.md policy: the winning commit re-records). No output bit moves at `-ffp-contract=off` (the srdif fingerprints pass unchanged on the host, the four QEMU legs and Hexagon); at the bench's default flags the FPU keys' checksums move (GCC contracts across the former leaves differently), `m4-softfp`'s do not. Fixed-point scenarios and the `m55` (CMSIS) key are not re-recorded: unchanged to the instruction. `docs/fft-design.md`, "Hexagon (clang) tuning" | measured locally with `scripts/icount.py` exactly as `bench.yml` runs it (fresh Release build per key, TAP_DSP_BUILD_TESTS=OFF, the pinned plugin header), 2026-09-28; confirmed to the instruction by the `workflow_dispatch` [run 36363710480](https://github.com/tap/DspTap/actions/runs/36363710480) on the branch (`2a5fc69`, compare mode, +0.00 %) ; confirmed again by the push-to-`main` [run 36367784465](https://github.com/tap/DspTap/actions/runs/36367784465) (compare mode, +0.00 %) | `d9c1e33` (the #44 squash) | 13.2.1 (15:13.2.rel1-2) | 8.2.2 (1:8.2.2+ds-0ubuntu1.18) | +| m55-ooura | rfft_f32_512 | 83,933,381 | 83,628,229 | −0.36 % | **re-recorded at the Hexagon tuning of the srdif engine**: `fft/srdif.h` was tuned for the `hexagon` key (clang 19; forced inlining under clang, the post-pass's two bin pairs loaded before either is stored, the small blocks' split-radix levels in memory down to pairs instead of register leaves, one run-time group per loop step in double, a multiply-subtract spelling for clang's contraction), and the float count falls on every key that runs the engine, −0.06 … −1.11 %, inside the band; the exact new counts are recorded (bench/README.md policy: the winning commit re-records). No output bit moves at `-ffp-contract=off` (the srdif fingerprints pass unchanged on the host, the four QEMU legs and Hexagon); at the bench's default flags the FPU keys' checksums move (GCC contracts across the former leaves differently), `m4-softfp`'s do not. Fixed-point scenarios and the `m55` (CMSIS) key are not re-recorded: unchanged to the instruction. `docs/fft-design.md`, "Hexagon (clang) tuning" | measured locally with `scripts/icount.py` exactly as `bench.yml` runs it (fresh Release build per key, TAP_DSP_BUILD_TESTS=OFF, the pinned plugin header), 2026-09-28; confirmed to the instruction by the `workflow_dispatch` [run 36363710480](https://github.com/tap/DspTap/actions/runs/36363710480) on the branch (`2a5fc69`, compare mode, +0.00 %) ; confirmed again by the push-to-`main` [run 36367784465](https://github.com/tap/DspTap/actions/runs/36367784465) (compare mode, +0.00 %) | `d9c1e33` (the #44 squash) | 13.2.1 (15:13.2.rel1-2) | 8.2.2 (1:8.2.2+ds-0ubuntu1.18) | +| hexagon | rfft_f32_2048 | — | 51,608,903 | — | **seeded** (the `hexagon` key is new): Hexagon v68 + HVX-128, CodeLinaro clang 19.1.5, static musl, under qemu-hexagon user mode; the key counts packets, not instructions (above). Seeded on the tuned srdif engine; the engine as #42 shipped it read 65,684,295 on the first seeding run ([run 36357132506](https://github.com/tap/DspTap/actions/runs/36357132506), `28befbd`), and the engine it replaced 54,834,714 (local, the same harness, converted to the runner's offset; float ±28). `docs/fft-design.md`, "Hexagon (clang) tuning" | `workflow_dispatch` [run 36363710480](https://github.com/tap/DspTap/actions/runs/36363710480) on the branch (`2a5fc69`, seed mode); the push-to-`main` [run 36367784465](https://github.com/tap/DspTap/actions/runs/36367784465) reads +22 packets on every scenario, fixed point included (the process-environment offset, `bench/README.md` above; inside the band, not re-recorded) | `d9c1e33` (the #44 squash) | clang 19.1.5 (CodeLinaro, hexagon-unknown-linux-musl) | qemu-hexagon 8.2.2 (built from the release with `--enable-plugins`) | +| hexagon | rfft_f32_512 | — | 45,934,423 | — | **seeded** (the `hexagon` key is new): Hexagon v68 + HVX-128, CodeLinaro clang 19.1.5, static musl, under qemu-hexagon user mode; the key counts packets, not instructions (above). Seeded on the tuned srdif engine; the engine as #42 shipped it read 57,659,223 on the first seeding run ([run 36357132506](https://github.com/tap/DspTap/actions/runs/36357132506), `28befbd`), and the engine it replaced 49,732,931 (local, the same harness, converted to the runner's offset; float ±28). `docs/fft-design.md`, "Hexagon (clang) tuning" | `workflow_dispatch` [run 36363710480](https://github.com/tap/DspTap/actions/runs/36363710480) on the branch (`2a5fc69`, seed mode); the push-to-`main` [run 36367784465](https://github.com/tap/DspTap/actions/runs/36367784465) reads +22 packets on every scenario, fixed point included (the process-environment offset, `bench/README.md` above; inside the band, not re-recorded) | `d9c1e33` (the #44 squash) | clang 19.1.5 (CodeLinaro, hexagon-unknown-linux-musl) | qemu-hexagon 8.2.2 (built from the release with `--enable-plugins`) | +| hexagon | rfft_f64_512 | — | 99,939,789 | — | **seeded** (the `hexagon` key is new): Hexagon v68 + HVX-128, CodeLinaro clang 19.1.5, static musl, under qemu-hexagon user mode; the key counts packets, not instructions (above). Seeded on the tuned srdif engine; the engine as #42 shipped it read 110,683,597 on the first seeding run ([run 36357132506](https://github.com/tap/DspTap/actions/runs/36357132506), `28befbd`), and the engine it replaced 103,239,537 (local, the same harness, converted to the runner's offset; float ±28). `docs/fft-design.md`, "Hexagon (clang) tuning" | `workflow_dispatch` [run 36363710480](https://github.com/tap/DspTap/actions/runs/36363710480) on the branch (`2a5fc69`, seed mode); the push-to-`main` [run 36367784465](https://github.com/tap/DspTap/actions/runs/36367784465) reads +22 packets on every scenario, fixed point included (the process-environment offset, `bench/README.md` above; inside the band, not re-recorded) | `d9c1e33` (the #44 squash) | clang 19.1.5 (CodeLinaro, hexagon-unknown-linux-musl) | qemu-hexagon 8.2.2 (built from the release with `--enable-plugins`) | +| hexagon | rfft_q15_512 | — | 159,976,886 | — | **seeded** (the `hexagon` key is new): Hexagon v68 + HVX-128, CodeLinaro clang 19.1.5, static musl, under qemu-hexagon user mode; the key counts packets, not instructions (above). Seeded on the tuned srdif engine; the engine as #42 shipped it read 159,976,886 on the first seeding run ([run 36357132506](https://github.com/tap/DspTap/actions/runs/36357132506), `28befbd`), and the engine it replaced 159,976,886, the same code (local, the same harness, converted to the runner's offset; float ±28). `docs/fft-design.md`, "Hexagon (clang) tuning" | `workflow_dispatch` [run 36363710480](https://github.com/tap/DspTap/actions/runs/36363710480) on the branch (`2a5fc69`, seed mode); the push-to-`main` [run 36367784465](https://github.com/tap/DspTap/actions/runs/36367784465) reads +22 packets on every scenario, fixed point included (the process-environment offset, `bench/README.md` above; inside the band, not re-recorded) | `d9c1e33` (the #44 squash) | clang 19.1.5 (CodeLinaro, hexagon-unknown-linux-musl) | qemu-hexagon 8.2.2 (built from the release with `--enable-plugins`) | +| hexagon | rfft_q31_2048 | — | 184,890,581 | — | **seeded** (the `hexagon` key is new): Hexagon v68 + HVX-128, CodeLinaro clang 19.1.5, static musl, under qemu-hexagon user mode; the key counts packets, not instructions (above). Seeded on the tuned srdif engine; the engine as #42 shipped it read 184,890,581 on the first seeding run ([run 36357132506](https://github.com/tap/DspTap/actions/runs/36357132506), `28befbd`), and the engine it replaced 184,890,581, the same code (local, the same harness, converted to the runner's offset; float ±28). `docs/fft-design.md`, "Hexagon (clang) tuning" | `workflow_dispatch` [run 36363710480](https://github.com/tap/DspTap/actions/runs/36363710480) on the branch (`2a5fc69`, seed mode); the push-to-`main` [run 36367784465](https://github.com/tap/DspTap/actions/runs/36367784465) reads +22 packets on every scenario, fixed point included (the process-environment offset, `bench/README.md` above; inside the band, not re-recorded) | `d9c1e33` (the #44 squash) | clang 19.1.5 (CodeLinaro, hexagon-unknown-linux-musl) | qemu-hexagon 8.2.2 (built from the release with `--enable-plugins`) | +| hexagon | rfft_q31_512 | — | 157,303,237 | — | **seeded** (the `hexagon` key is new): Hexagon v68 + HVX-128, CodeLinaro clang 19.1.5, static musl, under qemu-hexagon user mode; the key counts packets, not instructions (above). Seeded on the tuned srdif engine; the engine as #42 shipped it read 157,303,237 on the first seeding run ([run 36357132506](https://github.com/tap/DspTap/actions/runs/36357132506), `28befbd`), and the engine it replaced 157,303,237, the same code (local, the same harness, converted to the runner's offset; float ±28). `docs/fft-design.md`, "Hexagon (clang) tuning" | `workflow_dispatch` [run 36363710480](https://github.com/tap/DspTap/actions/runs/36363710480) on the branch (`2a5fc69`, seed mode); the push-to-`main` [run 36367784465](https://github.com/tap/DspTap/actions/runs/36367784465) reads +22 packets on every scenario, fixed point included (the process-environment offset, `bench/README.md` above; inside the band, not re-recorded) | `d9c1e33` (the #44 squash) | clang 19.1.5 (CodeLinaro, hexagon-unknown-linux-musl) | qemu-hexagon 8.2.2 (built from the release with `--enable-plugins`) | `before` is `—` for a seed. `main SHA` is the commit on `main` whose push run measured the numbers: a pull-request head SHA stops resolving after