Skip to content

Commit d7d5b60

Browse files
committed
v1.0.1 cleaned up docs and pages
1 parent 153e419 commit d7d5b60

121 files changed

Lines changed: 13490 additions & 837 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Makefile

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,12 @@ help:
4848
@echo ""
4949
@echo "Build targets:"
5050
@echo " lib Build qf_math object file → $(BUILD)/"
51-
@echo " lib-lean Build qf_math_lean.o (-DQF_MATH_LEAN, peer-comparable size)"
51+
@echo " lib-lean Build qf_math_lean.o (-DQF_MATH_LEAN, minimal float core)"
5252
@echo " test Build and run unit tests"
53+
@echo " test-lean-cpp Build/run C++ wrapper smoke test with QF_MATH_LEAN"
5354
@echo " bench Build and run qf_math vs libm benchmark"
54-
@echo " docs-pages Inject fresh bench sweep into pages/index.html"
55+
@echo " pages-version Sync pages/version.json from src/qf_math.h"
56+
@echo " docs-pages Sync version into pages/ site"
5557
@echo ""
5658
@echo "Comparison (see compare/README.md):"
5759
@echo " compare-deps Fetch libfixmath + fr_math into $(COMP_THIRD)/"
@@ -63,18 +65,19 @@ help:
6365
@echo " compare-fr-tests Run fr_math upstream makefile test suite"
6466
@echo " mcu-benchmark-snapshot Flash MCU bench → compare/MCU_BENCHMARK_SNAPSHOT*.md (USB)"
6567
@echo " benchmark-crossplatform Merge host + MCU snapshots → compare/BENCHMARK_CROSSPLATFORM.md"
66-
@echo " benchmark-arch-speed Build qf_math architecture speed matrix"
68+
@echo " benchmark-arch-speed qf_math & fr_math speed-vs-libm matrix"
6769
@echo ""
6870
@echo "Analysis:"
6971
@echo " size Show compiled object size"
7072
@echo " coverage Build with coverage and run tests (prints gcov summary)"
7173
@echo " coverage-check Build coverage and fail if src/qf_math.c is not 100% lines"
7274
@echo ""
7375
@echo "Docker (cross-compile sizes — see docker/README.md):"
74-
@echo " docker-sizes docker/run.sh → build/docker_size_table.md"
76+
@echo " docker-sizes docker/run.sh → build/docker_sizes.csv + docs summary"
7577
@echo " docker-sizes-rebuild Rebuild toolchain image, then run report"
7678
@echo ""
7779
@echo "Maintenance:"
80+
@echo " make-release VERSION=x.y.z release prep (optional RELEASE_ARGS=...)"
7881
@echo " clean Remove $(BUILD) and coverage artifacts"
7982

8083
.PHONY: dirs
@@ -89,7 +92,7 @@ lib-lean: dirs $(BUILD)/qf_math_lean.o
8992
$(BUILD)/qf_math.o: $(SRC) $(HDR)
9093
$(CC) $(CFLAGS) -c $(SRC) -o $@
9194

92-
# Peer-comparable subset for fair ROM sizing vs compare/ harness (no audio helpers).
95+
# Minimal float core for fair ROM sizing vs compare/ harness peers.
9396
$(BUILD)/qf_math_lean.o: $(SRC) $(HDR)
9497
$(CC) $(CFLAGS) -DQF_MATH_LEAN -c $(SRC) -o $@
9598

@@ -100,6 +103,12 @@ test: dirs $(BUILD)/qf_math_test $(BUILD)/qf_math_cpp_test
100103
@$(BUILD)/qf_math_test
101104
@$(BUILD)/qf_math_cpp_test
102105

106+
.PHONY: test-lean-cpp
107+
test-lean-cpp: dirs
108+
$(CC) $(CFLAGS) -DQF_MATH_LEAN -c $(SRC) -o $(BUILD)/qf_math_cpp_test_qf_math_lean.o
109+
$(CXX) $(CXXFLAGS) -DQF_MATH_LEAN -I$(SRCDIR) $(CPP_TEST_SRC) $(BUILD)/qf_math_cpp_test_qf_math_lean.o $(LDFLAGS) -o $(BUILD)/qf_math_cpp_test_lean
110+
@$(BUILD)/qf_math_cpp_test_lean
111+
103112
$(BUILD)/qf_math_test: $(TEST_SRC) $(SRC) $(HDR)
104113
$(CC) $(CFLAGS_WARN) -Os -std=c99 -I$(SRCDIR) $(CFLAGS_TEST) $(TEST_SRC) $(SRC) $(LDFLAGS) -o $@
105114

@@ -114,9 +123,15 @@ $(BUILD)/qf_math_bench: $(TOOLSDIR)/qf_math_bench.c $(SRC) $(HDR)
114123
bench: dirs $(BUILD)/qf_math_bench
115124
@$(BUILD)/qf_math_bench
116125

126+
.PHONY: pages-version
127+
pages-version:
128+
@v=$$(sed -n 's/^#define QF_MATH_VERSION *"\([^"]*\)"/\1/p' src/qf_math.h) && \
129+
printf '{"version": "%s"}\n' "$$v" > pages/version.json && \
130+
echo "pages/version.json → v$$v"
131+
117132
.PHONY: docs-pages
118-
docs-pages: dirs $(BUILD)/qf_math_bench
119-
python3 tools/inject_docs_bench_table.py
133+
docs-pages: pages-version
134+
@echo "pages/ updated (version synced from src/qf_math.h)"
120135

121136
# --- compare suite ---
122137
.PHONY: compare-deps
@@ -198,10 +213,16 @@ coverage-check:
198213
.PHONY: docker-sizes
199214
docker-sizes:
200215
@bash docker/run.sh
216+
@python3 tools/update_cross_target_size_docs.py
201217

202218
.PHONY: docker-sizes-rebuild
203219
docker-sizes-rebuild:
204220
@bash docker/run.sh --rebuild
221+
@python3 tools/update_cross_target_size_docs.py
222+
223+
.PHONY: make-release
224+
make-release:
225+
@python3 tools/make_release.py $(VERSION) $(RELEASE_ARGS)
205226

206227
.PHONY: clean
207228
clean:

README.md

Lines changed: 103 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,100 @@
11
[![License](https://img.shields.io/badge/License-BSD%202--Clause-blue.svg)](https://opensource.org/licenses/BSD-2-Clause)
22
[![CI](https://github.com/deftio/qf_math/actions/workflows/ci.yml/badge.svg)](https://github.com/deftio/qf_math/actions/workflows/ci.yml)
33
[![Coverage](https://img.shields.io/badge/coverage-100%25-brightgreen.svg)](#coverage-gate)
4-
[![Docs](https://img.shields.io/badge/docs-compare%20%26%20bench-blue.svg)](compare/README.md)
5-
[![Version](https://img.shields.io/badge/version-1.0.0-blue.svg)](src/qf_math.h)
4+
[![Version](https://img.shields.io/badge/version-1.0.1-blue.svg)](src/qf_math.h)
65
[![GitHub](https://img.shields.io/badge/GitHub-repo-181717.svg?logo=github)](https://github.com/deftio/qf_math)
7-
6+
87
[![PlatformIO](https://img.shields.io/badge/PlatformIO-library-teal.svg)](https://registry.platformio.org/libraries/deftio/qf_math)
98
[![Arduino](https://img.shields.io/badge/Arduino-from%20source-teal.svg)](https://github.com/deftio/qf_math)
109
[![ESP-IDF](https://img.shields.io/badge/ESP--IDF-component-teal.svg)](https://components.espressif.com/components/deftio/qf_math)
1110

1211
# Quick Float Math (`qf_math`)
1312

14-
**qf_math** is a compact, dependency-free C99 library for **fast approximate math on IEEE-754 `float`**. It targets embedded firmware where you want predictable cost and small flash footprint: table-driven trig, logarithms, exponentials, `sqrt`, `hypot`, waveform helpers, and a floating-point ADSR envelope—without pulling in full libm semantics on platforms where that matters.
13+
**qf_math** is a lightweight library for **fast approximate math on IEEE-754 `float`** — built for ARM Cortex-M, RISC-V, Xtensa/ESP32, and any 32-bit target. One translation unit, no heap, no dependencies, no FPU required (but benefits from one). Drop it into firmware for predictable-cost trig, log, exp, sqrt, hypot, waveforms, and ADSR — without pulling in full libm.
14+
15+
**[fr_math](https://github.com/deftio/fr_math)** is the **fixed-point (pure integer)** cousin with the same API family.
16+
17+
18+
## Float or fixed-point?
19+
20+
| | **qf_math** (this library) | **[fr_math](https://github.com/deftio/fr_math)** |
21+
|---|---|---|
22+
| **Representation** | IEEE-754 `float` (32-bit) | Q16.16 fixed-point (`int32_t`) |
23+
| **Best on** | Cortex-M4F/M7, ESP32, RP2040/RP2350 with FPU | Cortex-M0/M3, 8/16-bit MCUs, no-FPU targets |
24+
| **Soft-float cost** | High (compiler inserts sw multiply/add) | Zero (integer ALU only) |
25+
| **Dynamic range** | ~1e-38 to ~3e+38 | ~-32768 to ~+32767.9999 |
26+
| **Typical accuracy** | < 0.002% FS (trig), < 0.001% rel (log/exp) | < 0.008% FS (trig), < 0.4% rel (log/exp) |
27+
| **Code size** | ~10 KB (full), ~9 KB (lean) | ~10 KB (full), ~5 KB (lean) |
28+
29+
30+
## Accuracy — qf_math vs fr_math vs libm
31+
32+
Peak error from identical benchmark grids. Both libraries use the same approximation strategies (BAM phase, sub-step interpolation, piecewise hypot) — the accuracy difference comes from float vs fixed-point arithmetic.
33+
34+
| Function | Metric | libm | **qf_math** | **fr_math** |
35+
|:---------|:-------|-----:|------------:|------------:|
36+
| sin (rad) | %FS | 0 | **0.0019** | 0.0078 |
37+
| cos (rad) | %FS | 0 | **0.0019** | 0.0087 |
38+
| tan (rad) | abs | 0 | 0.30 | **0.051** |
39+
| asin | abs rad | 0 | 0.00047 | **0.00036** |
40+
| acos | abs rad | 0 | 0.00047 | **0.00036** |
41+
| atan2 | abs rad | 0 | 0.0013 | **0.00094** |
42+
| sqrt | rel % | 0 | **0.00047** | 1.19 |
43+
| log2 | rel % | 0 | **0.0016** | 0.32 |
44+
| exp | rel % | 0 | **0.00034** | 0.57 |
45+
| pow | rel % | 0 | **0.00038** | 0.087 |
46+
| hypot | rel % | 0 | **0.00047** | 0.000007 |
47+
48+
> **%FS** = % of full-scale (±1 output for trig). **rel %** = relative error vs `double` reference. **abs rad** = absolute radians. Bold = closer to libm. `libm` column is the `*f` reference (effectively 0 error at this precision).
49+
50+
51+
## Speed vs libm — ESP32-S3 (with FPU)
52+
53+
Ratio of libm wall-clock time to library time for the same loop. **> 1.0** = faster than `sinf`/`sqrtf`/etc. on that platform. ESP32-S3 has a single-precision FPU, so both `qf_math` and `libm` use hardware float — the advantage comes from simpler approximations with fewer branches.
1554

16-
[fr_math](github.com/deftio/fr_math) is the fixed point (pure integer) cousin of this library with identical apis.
55+
| Function | **qf_math** | **fr_math** | Notes |
56+
|:---------|------------:|------------:|:------|
57+
| sin (rad) | **4.30**× | 1.32× | qf_math: table + lerp; fr_math: integer table via float bridge |
58+
| cos (rad) | **4.39**× | 0.90× | |
59+
| tan (rad) | **3.56**× | 1.31× | |
60+
| asin | 1.10× | 0.77× | |
61+
| acos | 1.11× | 0.77× | |
62+
| atan2 | **1.41**× | 0.70× | |
63+
| sqrt | 1.07× | 0.08× | libm sqrtf is hard to beat (HW instruction on many cores) |
64+
| exp | **2.63**× | 1.88× | |
65+
| ln | **2.20**× | 0.92× | |
66+
| hypot | **2.51**× | 0.21× | fr_math hypot goes through float bridge overhead |
67+
68+
> **fr_math** numbers include **float↔fixed bridge overhead** — native `s32` / `fix16_t` calls in a pure-integer pipeline are faster. See [`compare/BENCHMARK_CROSSPLATFORM.md`](compare/BENCHMARK_CROSSPLATFORM.md) for full matrices including libfixmath, FastTrig, and ESP-DSP.
69+
70+
71+
## Quick start
72+
73+
```c
74+
#include "qf_math.h"
75+
76+
qf y = qf_sin(1.0f); /* radians */
77+
qf len = qf_hypot(dx, dy);
78+
qf dB = 20.0f * qf_log10(v / ref);
79+
```
1780
1881
| | |
1982
|---|---|
2083
| **Language** | C99 (`float` API, `qf` typedef), plus optional C++ header wrapper |
2184
| **Dependencies** | None at compile time for the library itself |
2285
| **License** | BSD-2-Clause — see `LICENSE.txt` |
23-
| **Layout** | `src/` library · `test/` unit tests · `build/` all binaries & fetched third-party sources |
2486
2587
Version macros live in [`qf_math.h`](src/qf_math.h): `QF_MATH_VERSION` / `QF_MATH_VERSION_HEX`. When you bump the version string, update the **Version** badge at the top of this README to match.
2688
89+
For releases, prefer the version/release helpers so manifests, docs, badges, pages, and generated reports stay in sync:
90+
91+
```bash
92+
python3 tools/qf_version.py show --format markdown
93+
python3 tools/qf_version.py update 1.0.2
94+
make make-release VERSION=1.0.2
95+
make make-release RELEASE_ARGS="--dry-run --skip-docker --skip-peer-tests"
96+
```
97+
2798

2899
## Why use this?
29100

@@ -33,9 +104,19 @@ Version macros live in [`qf_math.h`](src/qf_math.h): `QF_MATH_VERSION` / `QF_MAT
33104
- **No heap**, minimal stack depth in normal use, integer-friendly helpers (`QF_*` macros, BAM phase, fixed-radix bridges).
34105

35106

36-
## FPU-less alternative: [`fr_math`](https://github.com/deftio/fr_math)
107+
## API overview
108+
109+
Public surface is declared in `src/qf_math.h`:
110+
111+
- **Macros**: clamps, interpolation, deg/rad/BAM, radix bridges (`QF_TO_FR`, …).
112+
- **Trig**: `qf_sin`, `qf_cos`, `qf_tan`, BAM-native variants, inverse trig.
113+
- **Log/exp/pow**: `qf_log2`, `qf_ln`, `qf_log10`, `qf_pow2`, `qf_exp`, `qf_pow10`, `qf_pow`.
114+
- **Length**: `qf_sqrt`, `qf_hypot`, `qf_hypot_fast2`, `qf_hypot_fast8` (piecewise-linear magnitude).
115+
- **Audio-ish**: LFSR noise, PWM/square/saw/triangle waves, `qf_adsr_*` envelope.
37116

38-
For targets **without a hardware FPU** (or when you want to avoid soft-float cost), use **[fr_math](https://github.com/deftio/fr_math)**—a **battle-tested** sister library that exposes the **same API** using **pure fixed-point** math, with **16-bit** platform support when that is a requirement.
117+
Domain violations (`sqrt` of negative, `log` of non-positive) return `QF_DOMAIN_ERROR`.
118+
119+
Full reference: [`docs/API.md`](docs/API.md) — Algorithms: [`docs/ALGORITHMS.md`](docs/ALGORITHMS.md)[Float math tradeoffs](https://deftio.github.io/qf_math/float-math-tradeoffs.html) (libm vs qf_math vs fixed-point vs DSP)
39120

40121

41122
## Repository layout
@@ -45,15 +126,13 @@ src/ qf_math.c, qf_math.h/.hpp — drop-in C library + C++ wrapper
45126
test/ qf_math_test.c — correctness vs libm on host
46127
docs/ Markdown documentation (algorithms, API, fr_math, integration)
47128
pages/ GitHub Pages site (compact HTML + CSS; deploy via Actions)
48-
examples/ optional demos — ESP-IDF (`esp32s3_benchmark`), LilyGO T-Display-S3 PlatformIO (`lilygo_t_display_s3_bench`), Raspberry Pi Pico 2 Arduino (`pico2_benchmark`)
49-
docker/ multi-arch toolchain image + cross size report (fr_math-style)
129+
examples/ optional demos — ESP-IDF, LilyGO T-Display-S3, Raspberry Pi Pico 2
130+
docker/ multi-arch toolchain image + cross size report
50131
compare/ matrices vs other math libs + benchmark harness (see below)
51132
tools/ extra shell helpers & qf_math vs libm micro-benchmark
52133
build/ compiled binaries, CMake outputs, cloned deps (gitignored)
53134
```
54135

55-
Everything that resembles an artifact—including vendored comparison libraries—stays under **`build/`** (for example `build/compare/third_party/`) so your tree stays clean.
56-
57136

58137
## Build & test (host)
59138

@@ -77,11 +156,11 @@ make clean
77156

78157
## Cross-compile code sizes (Docker)
79158

80-
Like **[fr_math](https://github.com/deftio/fr_math)**, this repo ships a **`docker/`** image (Ubuntu + common cross-compilers + Espressif Xtensa) to compile **`src/qf_math.c`** for several CPUs and emit **`.text`** sizes (`build/docker_size_table.md`).
159+
Like **[fr_math](https://github.com/deftio/fr_math)**, this repo ships a **`docker/`** image (Ubuntu + common 32/64-bit cross-compilers + Espressif Xtensa) to compile **`src/qf_math.c`** for several CPUs and emit the source-of-truth size matrix (`build/docker_sizes.csv`).
81160

82161
```bash
83-
make docker-sizes # same as ./docker/run.sh
84-
make docker-sizes-rebuild # force docker image rebuild first
162+
make docker-sizes # CSV + compact compare/README.md summary
163+
make docker-sizes-rebuild # rebuild image, then CSV + summary
85164
```
86165

87166
Details: **[docker/README.md](docker/README.md)**.
@@ -94,19 +173,12 @@ Documentation tables live under **`compare/`** (`LIBRARIES.md` for platforms/rep
94173
| Target | What it does |
95174
|--------|----------------|
96175
| `make compare-deps` | Shallow-clones **[libfixmath](https://github.com/PetteriAimonen/libfixmath)** (MIT) and **[fr_math](https://github.com/deftio/fr_math)** into `build/compare/third_party/`. |
97-
| `make compare` (alias `make compare-matrix`) | Builds `build/compare/benchmark_suite` — accuracy + wall-clock for **qf_math**, **libm**, **libfixmath** (float bridge), **fr_math** (Q16.16 bridge), and a **Taylor poly** baseline. |
98-
| `make compare-report` | Prints a Markdown **size table** (`size(1)` totals) for `qf_math.o`, the libfixmath object subset, and `FR_math.o`. |
99-
| `make compare-github-report` | Regenerates **[`compare/BENCHMARK_REPORT.md`](compare/BENCHMARK_REPORT.md)** for GitHub (embedded bench tables + sizes). |
100-
| `make compare-tests` | CMake-builds libfixmath `tests_ro64` under `build/compare/third_party/libfixmath-build` and runs it. |
101-
| `make compare-fr-tests` | Runs **fr_math**’s upstream `make test` against the shallow clone (`compare/run_fr_math_tests.sh`). |
102-
| `make mcu-benchmark-snapshot` | Flash MCU bench and rewrite **`compare/MCU_BENCHMARK_SNAPSHOT*.md`** via UART (**pio** / Arduino, **pyserial**). Supports LilyGO T-Display-S3, ESP32-S3, and Raspberry Pi Pico 2. |
103-
| `make benchmark-crossplatform` | Rewrite **`compare/BENCHMARK_CROSSPLATFORM.md`** — Host \| MCU **Speed vs libm** ratios from the committed snapshots (no hardware). |
176+
| `make compare` | Builds `build/compare/benchmark_suite` — accuracy + wall-clock for **qf_math**, **libm**, **libfixmath** (float bridge), **fr_math** (Q16.16 bridge), and a **Taylor poly** baseline. |
177+
| `make compare-github-report` | Regenerates **[`compare/BENCHMARK_REPORT.md`](compare/BENCHMARK_REPORT.md)** for GitHub. |
178+
| `make mcu-benchmark-snapshot` | Flash MCU bench and rewrite **`compare/MCU_BENCHMARK_SNAPSHOT*.md`** via UART. |
179+
| `make benchmark-crossplatform` | Rewrite **[`compare/BENCHMARK_CROSSPLATFORM.md`](compare/BENCHMARK_CROSSPLATFORM.md)** — Host + MCU ratios from committed snapshots. |
104180

105-
**Interpretation:** Desktop timings are *not* MCU timings. Bridged benchmarks include float↔fixed overhead that disappears when you stay natively in `fix16_t` / fixed-radix `s32`. The automated `s32` peer row is **fr_math**; other fast libraries are surveyed in [`compare/PEERS.md`](compare/PEERS.md) but are not wired into the reproducible host/ESP32-S3 harness yet. Use these numbers for intuition and regression tracking, not as a substitute for profiling on your silicon.
106-
107-
**On silicon:** **[examples/lilygo_t_display_s3_bench](examples/lilygo_t_display_s3_bench/README.md)** (PlatformIO, **LilyGO T-Display-S3**), **[examples/esp32s3_benchmark](examples/esp32s3_benchmark/README.md)** (ESP-IDF), or **[examples/pico2_benchmark](examples/pico2_benchmark/)** (Arduino, **Raspberry Pi Pico 2** ARM / RISC-V) run the **same** [`benchmark_core.c`](compare/benchmark_core.c) loops so UART / USB serial captures wall-clock on real hardware.
108-
109-
**Host vs MCU (relative only):** **[compare/BENCHMARK_CROSSPLATFORM.md](compare/BENCHMARK_CROSSPLATFORM.md)** merges **Speed vs libm** tables from [`compare/BENCHMARK_REPORT.md`](compare/BENCHMARK_REPORT.md) (POSIX snapshot) and the MCU snapshots (`MCU_BENCHMARK_SNAPSHOT*.md` — ESP32-S3, Pico 2 ARM, Pico 2 RISC-V); regenerate with **`make benchmark-crossplatform`** after refreshing those files.
181+
**On silicon:** **[examples/lilygo_t_display_s3_bench](examples/lilygo_t_display_s3_bench/README.md)** (PlatformIO), **[examples/esp32s3_benchmark](examples/esp32s3_benchmark/README.md)** (ESP-IDF), or **[examples/pico2_benchmark](examples/pico2_benchmark/)** (Arduino, Pico 2 ARM/RISC-V) run the **same** [`benchmark_core.c`](compare/benchmark_core.c) loops on real hardware.
110182

111183

112184
## Packaging & integration
@@ -119,31 +191,16 @@ Use `library.json` at the repo root: add this folder as a local library or publi
119191

120192
`idf_component.yml` registers the component for the ESP-IDF Component Manager. `CMakeLists.txt` wraps `idf_component_register` for `src/qf_math.c` with include path `src/`.
121193

122-
Add as a dependency (path or git URL) per Espressif docs; then `#include "qf_math.h"` from application components.
123-
124-
125-
## API overview
126-
127-
Public surface is declared in `src/qf_math.h`:
128-
129-
- **Macros**: clamps, interpolation, deg/rad/BAM, radix bridges (`QF_TO_FR`, …).
130-
- **Trig**: `qf_sin`, `qf_cos`, `qf_tan`, BAM-native variants, inverse trig.
131-
- **Log/exp/pow**: `qf_log2`, `qf_ln`, `qf_log10`, `qf_pow2`, `qf_exp`, `qf_pow10`, `qf_pow`.
132-
- **Length**: `qf_sqrt`, `qf_hypot`, `qf_hypot_fast2`, `qf_hypot_fast8` (piecewise-linear magnitude).
133-
- **Audio-ish**: LFSR noise, PWM/square/saw/triangle waves, `qf_adsr_*` envelope.
134-
135-
Domain violations (`sqrt` of negative, `log` of non-positive) return `QF_DOMAIN_ERROR`.
194+
Full guide: [`docs/INTEGRATION.md`](docs/INTEGRATION.md)
136195

137196

138-
## Documentation for automation
197+
## Documentation
139198

140199
| File | Purpose |
141200
|------|---------|
142201
| [`docs/`](docs/) | **Markdown documentation** — algorithms, API reference, fr_math relationship, integration guide |
143-
| [`pages/`](pages/) | **GitHub Pages** site (enable *Settings → Pages → GitHub Actions*; live at `https://deftio.github.io/qf_math/` after first deploy) |
144-
| [`compare/README.md`](compare/README.md) | Compare harness docs (`make compare`, sizes, upstream suites, GitHub report) |
145-
| [`compare/BENCHMARK_REPORT.md`](compare/BENCHMARK_REPORT.md) | Last checked-in **host benchmark + size snapshot** (run `make compare-github-report` to refresh) |
146-
| [`compare/BENCHMARK_CROSSPLATFORM.md`](compare/BENCHMARK_CROSSPLATFORM.md) | Host vs MCU **relative** ratios (`make benchmark-crossplatform`; refresh snapshots first) |
202+
| [`pages/`](pages/) | **GitHub Pages** site (live at `https://deftio.github.io/qf_math/`) |
203+
| [`compare/`](compare/) | Compare harness docs, benchmark reports, cross-platform matrices |
147204
| `llms.txt` | Compact index for LLM tooling / crawling |
148205
| `agents.md` | Conventions for coding agents working in this repo |
149206

0 commit comments

Comments
 (0)