simdref 0.0.5__tar.gz → 0.0.6__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {simdref-0.0.5/src/simdref.egg-info → simdref-0.0.6}/PKG-INFO +29 -104
- {simdref-0.0.5 → simdref-0.0.6}/README.md +15 -92
- {simdref-0.0.5 → simdref-0.0.6}/pyproject.toml +20 -17
- {simdref-0.0.5 → simdref-0.0.6}/src/simdref/annotate.py +12 -4
- {simdref-0.0.5 → simdref-0.0.6}/src/simdref/cli.py +290 -276
- simdref-0.0.5/src/simdref/web.py → simdref-0.0.6/src/simdref/export.py +140 -48
- {simdref-0.0.5 → simdref-0.0.6}/src/simdref/ingest_sources.py +3 -3
- {simdref-0.0.5 → simdref-0.0.6}/src/simdref/queries.py +8 -2
- {simdref-0.0.5 → simdref-0.0.6}/src/simdref/storage.py +42 -10
- {simdref-0.0.5 → simdref-0.0.6}/src/simdref/ui_labels.py +7 -6
- {simdref-0.0.5 → simdref-0.0.6/src/simdref.egg-info}/PKG-INFO +29 -104
- {simdref-0.0.5 → simdref-0.0.6}/src/simdref.egg-info/SOURCES.txt +4 -22
- simdref-0.0.6/src/simdref.egg-info/requires.txt +10 -0
- simdref-0.0.6/tests/test_annotate_positions.py +146 -0
- {simdref-0.0.5 → simdref-0.0.6}/tests/test_auto_update_on_version_change.py +6 -6
- {simdref-0.0.5 → simdref-0.0.6}/tests/test_coverage_live.py +4 -1
- {simdref-0.0.5 → simdref-0.0.6}/tests/test_coverage_parity.py +5 -1
- simdref-0.0.6/tests/test_export.py +214 -0
- {simdref-0.0.5 → simdref-0.0.6}/tests/test_issue2_fixes.py +1 -1
- simdref-0.0.6/tests/test_issues_23_24_25.py +384 -0
- {simdref-0.0.5 → simdref-0.0.6}/tests/test_lsp_web.py +14 -43
- {simdref-0.0.5 → simdref-0.0.6}/tests/test_presentation.py +14 -25
- {simdref-0.0.5 → simdref-0.0.6}/tests/test_preset_persistence.py +0 -28
- {simdref-0.0.5 → simdref-0.0.6}/tests/test_storage_schema.py +26 -0
- {simdref-0.0.5 → simdref-0.0.6}/tests/test_ui_labels_parity.py +4 -39
- {simdref-0.0.5 → simdref-0.0.6}/tests/test_version_matches_pyproject.py +5 -1
- simdref-0.0.5/src/simdref/profile/__init__.py +0 -25
- simdref-0.0.5/src/simdref/profile/adapters/__init__.py +0 -1
- simdref-0.0.5/src/simdref/profile/adapters/exegesis.py +0 -65
- simdref-0.0.5/src/simdref/profile/adapters/mca.py +0 -84
- simdref-0.0.5/src/simdref/profile/adapters/perf.py +0 -284
- simdref-0.0.5/src/simdref/profile/adapters/uprof.py +0 -89
- simdref-0.0.5/src/simdref/profile/adapters/vtune.py +0 -83
- simdref-0.0.5/src/simdref/profile/adapters/xctrace.py +0 -66
- simdref-0.0.5/src/simdref/profile/hotloop.py +0 -356
- simdref-0.0.5/src/simdref/profile/merge.py +0 -215
- simdref-0.0.5/src/simdref/profile/model.py +0 -129
- simdref-0.0.5/src/simdref/profile/orchestrate.py +0 -325
- simdref-0.0.5/src/simdref/profile/registry.py +0 -62
- simdref-0.0.5/src/simdref/templates/__init__.py +0 -0
- simdref-0.0.5/src/simdref/templates/app.js +0 -2358
- simdref-0.0.5/src/simdref/templates/favicon.svg +0 -5
- simdref-0.0.5/src/simdref/templates/index.html +0 -164
- simdref-0.0.5/src/simdref/templates/logo.svg +0 -12
- simdref-0.0.5/src/simdref/templates/style.css +0 -917
- simdref-0.0.5/src/simdref.egg-info/requires.txt +0 -10
- simdref-0.0.5/tests/test_search_index_js.py +0 -34
- simdref-0.0.5/tests/test_web_e2e.py +0 -202
- {simdref-0.0.5 → simdref-0.0.6}/LICENSE +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/setup.cfg +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/src/simdref/__init__.py +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/src/simdref/__main__.py +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/src/simdref/arm_instructions.py +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/src/simdref/display.py +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/src/simdref/filters.py +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/src/simdref/ingest.py +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/src/simdref/ingest_catalog.py +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/src/simdref/ingest_pdf.py +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/src/simdref/lsp.py +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/src/simdref/manpages.py +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/src/simdref/models.py +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/src/simdref/pdfparse/__init__.py +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/src/simdref/pdfparse/base.py +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/src/simdref/pdfparse/intel.py +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/src/simdref/pdfparse/registry.py +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/src/simdref/pdfparse/types.py +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/src/simdref/pdfrefs.py +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/src/simdref/perf.py +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/src/simdref/perf_sources/__init__.py +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/src/simdref/perf_sources/cores.py +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/src/simdref/perf_sources/llvm_mca.py +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/src/simdref/perf_sources/llvm_scheduling.py +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/src/simdref/perf_sources/merge.py +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/src/simdref/riscv.py +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/src/simdref/search.py +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/src/simdref/tui.py +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/src/simdref.egg-info/dependency_links.txt +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/src/simdref.egg-info/entry_points.txt +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/src/simdref.egg-info/top_level.txt +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/tests/test_annotate.py +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/tests/test_audit_coverage.py +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/tests/test_cli_bare_query.py +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/tests/test_cli_bootstrap_progress.py +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/tests/test_cli_help.py +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/tests/test_cli_llm.py +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/tests/test_display.py +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/tests/test_filters.py +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/tests/test_ingest_sources.py +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/tests/test_intel_operation_and_url.py +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/tests/test_models.py +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/tests/test_pdfparse.py +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/tests/test_perf.py +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/tests/test_perf_sources.py +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/tests/test_riscv_docs_pages.py +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/tests/test_search.py +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/tests/test_search_pushdown.py +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/tests/test_source_kind_filter.py +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/tests/test_source_validation.py +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/tests/test_storage_payload.py +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/tests/test_tui.py +0 -0
- {simdref-0.0.5 → simdref-0.0.6}/tests/test_x86_linking.py +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: simdref
|
|
3
|
-
Version: 0.0.
|
|
4
|
-
Summary: Searchable SIMD intrinsic and instruction reference with CLI, manpages, TUI,
|
|
3
|
+
Version: 0.0.6
|
|
4
|
+
Summary: Searchable SIMD intrinsic and instruction reference with CLI, manpages, TUI, and LSP.
|
|
5
5
|
Author: Marco
|
|
6
6
|
License: GPL-3.0-or-later
|
|
7
7
|
Classifier: Development Status :: 3 - Alpha
|
|
@@ -10,29 +10,31 @@ Classifier: Intended Audience :: Developers
|
|
|
10
10
|
Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
|
|
11
11
|
Classifier: Operating System :: OS Independent
|
|
12
12
|
Classifier: Programming Language :: Python :: 3
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
13
14
|
Classifier: Programming Language :: Python :: 3.11
|
|
14
15
|
Classifier: Programming Language :: Python :: 3.12
|
|
15
16
|
Classifier: Programming Language :: Python :: 3.13
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
16
18
|
Classifier: Topic :: Software Development :: Documentation
|
|
17
19
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
18
|
-
Requires-Python: >=3.
|
|
20
|
+
Requires-Python: >=3.10
|
|
19
21
|
Description-Content-Type: text/markdown
|
|
20
22
|
License-File: LICENSE
|
|
21
|
-
Requires-Dist: click<
|
|
23
|
+
Requires-Dist: click<9,>=8.5
|
|
22
24
|
Requires-Dist: httpx<1,>=0.28
|
|
23
|
-
Requires-Dist: msgpack<2,>=1.
|
|
24
|
-
Requires-Dist: pdfplumber<1,>=0.11
|
|
25
|
-
Requires-Dist: PyMuPDF<2,>=1.
|
|
26
|
-
Requires-Dist: PyYAML<7,>=6
|
|
27
|
-
Requires-Dist: rapidfuzz<4,>=3.
|
|
28
|
-
Requires-Dist: rich<15
|
|
29
|
-
Requires-Dist: textual<
|
|
30
|
-
Requires-Dist: typer<1,>=0.
|
|
25
|
+
Requires-Dist: msgpack<2,>=1.2.1
|
|
26
|
+
Requires-Dist: pdfplumber<1,>=0.11.10
|
|
27
|
+
Requires-Dist: PyMuPDF<2,>=1.28
|
|
28
|
+
Requires-Dist: PyYAML<7,>=6.0.3
|
|
29
|
+
Requires-Dist: rapidfuzz<4,>=3.14
|
|
30
|
+
Requires-Dist: rich<16,>=15
|
|
31
|
+
Requires-Dist: textual<9,>=8.2
|
|
32
|
+
Requires-Dist: typer<1,>=0.27
|
|
31
33
|
Dynamic: license-file
|
|
32
34
|
|
|
33
35
|
# simdref
|
|
34
36
|
|
|
35
|
-
[](https://github.com/simd-labs/simdref/actions/workflows/ci.yml)
|
|
36
38
|
[](https://test.pypi.org/project/simdref/)
|
|
37
39
|
[](https://pypi.org/project/simdref/)
|
|
38
40
|
|
|
@@ -43,87 +45,24 @@ on-demand manpages (`simdref man` — or run `simdref install-manpages`
|
|
|
43
45
|
so plain `man vpaddd` works), a static web app, and a structured JSON
|
|
44
46
|
interface for LLM skills.
|
|
45
47
|
|
|
46
|
-
[Web App](https://diamondinoia.
|
|
48
|
+
[Web App](https://simdref.diamondinoia.com/) ·
|
|
47
49
|
[TestPyPI](https://test.pypi.org/project/simdref/) ·
|
|
48
|
-
[GitHub](https://github.com/
|
|
50
|
+
[GitHub](https://github.com/simd-labs/simdref) ·
|
|
49
51
|
[Contributing](CONTRIBUTING.md)
|
|
50
52
|
|
|
51
53
|
<!-- Screenshots are hosted on the `docs-assets` branch so the main
|
|
52
54
|
branch stays lightweight to clone. -->
|
|
53
55
|
|
|
54
56
|
<p align="center">
|
|
55
|
-
<img alt="simdref TUI" src="https://raw.githubusercontent.com/
|
|
57
|
+
<img alt="simdref TUI" src="https://raw.githubusercontent.com/simd-labs/simdref/docs-assets/img/tui.svg" width="720">
|
|
56
58
|
<br><em>Interactive TUI with ISA filters, ranked results, and measured/modeled performance tables.</em>
|
|
57
59
|
</p>
|
|
58
60
|
|
|
59
|
-
## Install the Claude Code skill
|
|
61
|
+
## Install the Claude Code and Codex skill
|
|
60
62
|
|
|
61
|
-
`
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
so the one-liner install is:
|
|
65
|
-
|
|
66
|
-
```
|
|
67
|
-
/plugin marketplace add DiamonDinoia/simdref
|
|
68
|
-
/plugin install asm-analysis@simdref
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
Run those at the Claude Code prompt. The marketplace add fetches this
|
|
72
|
-
repo; the install wires up the skill so Claude picks it up automatically
|
|
73
|
-
on performance-oriented prompts like *"why is this loop slow"*,
|
|
74
|
-
*"vectorise this"*, *"look at the asm"*.
|
|
75
|
-
|
|
76
|
-
### Manual install (no marketplace)
|
|
77
|
-
|
|
78
|
-
If you prefer a hand-managed copy:
|
|
79
|
-
|
|
80
|
-
```bash
|
|
81
|
-
# symlink from a checkout — always current with main:
|
|
82
|
-
git clone https://github.com/DiamonDinoia/simdref.git ~/src/simdref
|
|
83
|
-
mkdir -p ~/.claude/skills
|
|
84
|
-
ln -sf ~/src/simdref/skills/asm-analysis ~/.claude/skills/asm-analysis
|
|
85
|
-
|
|
86
|
-
# or pull a one-off snapshot:
|
|
87
|
-
mkdir -p ~/.claude/skills/asm-analysis && \
|
|
88
|
-
curl -fsSL https://raw.githubusercontent.com/DiamonDinoia/simdref/main/skills/asm-analysis/SKILL.md \
|
|
89
|
-
-o ~/.claude/skills/asm-analysis/SKILL.md
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
See [`skills/asm-analysis/SKILL.md`](skills/asm-analysis/SKILL.md) for
|
|
93
|
-
the full trigger list and pipeline stages.
|
|
94
|
-
|
|
95
|
-
## Install the Codex skill
|
|
96
|
-
|
|
97
|
-
This repo also ships the same pipeline as an OpenAI Codex plugin, so
|
|
98
|
-
the one-liner install from a Codex CLI prompt is:
|
|
99
|
-
|
|
100
|
-
```
|
|
101
|
-
codex plugin marketplace add DiamonDinoia/simdref
|
|
102
|
-
/plugins
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
Pick `asm-analysis` in the browser and enable it. Codex picks up the
|
|
106
|
-
skill automatically on performance-oriented prompts (*"why is this
|
|
107
|
-
loop slow"*, *"vectorise this"*, *"look at the asm"*).
|
|
108
|
-
|
|
109
|
-
### Manual install (no marketplace)
|
|
110
|
-
|
|
111
|
-
```bash
|
|
112
|
-
# user-scoped symlink — applies to every repo, always current with main:
|
|
113
|
-
git clone https://github.com/DiamonDinoia/simdref.git ~/src/simdref
|
|
114
|
-
mkdir -p ~/.agents/skills
|
|
115
|
-
ln -sf ~/src/simdref/codex-skills/asm-analysis/skills/asm-analysis \
|
|
116
|
-
~/.agents/skills/asm-analysis
|
|
117
|
-
|
|
118
|
-
# or scope the skill to a single repo:
|
|
119
|
-
mkdir -p .agents/skills
|
|
120
|
-
ln -sf ~/src/simdref/codex-skills/asm-analysis/skills/asm-analysis \
|
|
121
|
-
.agents/skills/asm-analysis
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
See
|
|
125
|
-
[`codex-skills/asm-analysis/skills/asm-analysis/SKILL.md`](codex-skills/asm-analysis/skills/asm-analysis/SKILL.md)
|
|
126
|
-
for the trigger list and pipeline stages.
|
|
63
|
+
The `asm-analysis` skill for Claude Code and OpenAI Codex lives in
|
|
64
|
+
[simd-labs/simdref-skill](https://github.com/simd-labs/simdref-skill).
|
|
65
|
+
Follow the install steps in that repo.
|
|
127
66
|
|
|
128
67
|
## Install
|
|
129
68
|
|
|
@@ -134,15 +73,6 @@ isa doctor # confirm everything is wired up
|
|
|
134
73
|
isa # open the TUI
|
|
135
74
|
```
|
|
136
75
|
|
|
137
|
-
For the bleeding-edge version with the `simdref profile` subcommand
|
|
138
|
-
(runtime-profile → asm-annotation pipeline, Stage 2b of the skill),
|
|
139
|
-
install from `main`:
|
|
140
|
-
|
|
141
|
-
```bash
|
|
142
|
-
pipx install git+https://github.com/DiamonDinoia/simdref.git@main
|
|
143
|
-
# or editable: pip install -e git+https://github.com/DiamonDinoia/simdref.git@main#egg=simdref
|
|
144
|
-
```
|
|
145
|
-
|
|
146
76
|
The package installs two equivalent executables, **`isa`** (short) and
|
|
147
77
|
**`simdref`** (explicit). The rest of this README uses `isa`.
|
|
148
78
|
|
|
@@ -174,15 +104,15 @@ isa # open the interactive TUI
|
|
|
174
104
|
|
|
175
105
|
**Web app** — a self-contained static SPA with filters and performance
|
|
176
106
|
tables, published to GitHub Pages at
|
|
177
|
-
[diamondinoia.
|
|
178
|
-
|
|
107
|
+
[simdref.diamondinoia.com](https://simdref.diamondinoia.com/) and
|
|
108
|
+
built from the `simdref-web` repo. This repo (`simdref-core`) exports the
|
|
109
|
+
JSON data it consumes:
|
|
179
110
|
|
|
180
111
|
```bash
|
|
181
|
-
isa
|
|
182
|
-
isa serve --web-dir ./web # gzip-aware local server
|
|
112
|
+
isa export --out-dir ./site-data
|
|
183
113
|
```
|
|
184
114
|
|
|
185
|
-
The [live demo](https://diamondinoia.
|
|
115
|
+
The [live demo](https://simdref.diamondinoia.com/) hosts the same
|
|
186
116
|
build — search across ~122k entries with ISA filters and per-uarch perf
|
|
187
117
|
tables.
|
|
188
118
|
|
|
@@ -258,10 +188,6 @@ and `ld` still consume it.
|
|
|
258
188
|
| `isa doctor` | Check the installation — pass/fail per component, non-zero exit on failure |
|
|
259
189
|
| `isa update` | Download the pre-built release catalog (no `llvm-mca` required); `--from-release` for the GitHub Release artifact |
|
|
260
190
|
| `isa annotate <file.s>` | Annotate a `.s` assembly file with per-instruction summaries and latency/CPI — writes `<file>.sa` |
|
|
261
|
-
| `isa profile run` | Compile→record→disassemble→annotate→merge in one shot (perf or llvm-mca) |
|
|
262
|
-
| `isa profile ingest` | Convert profiler output (perf / VTune / uProf / xctrace / llvm-mca / exegesis) to normalized samples |
|
|
263
|
-
| `isa profile hotloops` | Detect natural loops in a disassembly and rank them by sample weight |
|
|
264
|
-
| `isa profile merge` | Attach hotness data to the annotated instruction stream |
|
|
265
191
|
| `isa llm query <q>` | Strict lookup → JSON/NDJSON/Markdown (see [docs/LLM.md](docs/LLM.md)) |
|
|
266
192
|
| `isa llm batch` | Resolve many queries from stdin in one invocation (NDJSON out) |
|
|
267
193
|
| `isa llm list` | Dump the `FilterSpec` or stream matching catalog entries |
|
|
@@ -272,8 +198,7 @@ and `ld` still consume it.
|
|
|
272
198
|
| Command | Description |
|
|
273
199
|
| -------------------------------- | ----------------------------------------------------------------------------------------------- |
|
|
274
200
|
| `isa build` | Full local rebuild from upstream sources, including Intel SDM parsing (`llvm-mca` 18+ required) |
|
|
275
|
-
| `isa
|
|
276
|
-
| `isa serve` | Serve the exported web app locally (gzip-aware) |
|
|
201
|
+
| `isa export` | Export site data (JSON only) — the release contract for the `simdref-web` repo |
|
|
277
202
|
| `isa completion install [SHELL]` | Install shell completion into the user's profile |
|
|
278
203
|
| `isa completion show [SHELL]` | Print the completion script for a shell |
|
|
279
204
|
|
|
@@ -308,7 +233,7 @@ mixed.
|
|
|
308
233
|
## Development
|
|
309
234
|
|
|
310
235
|
```bash
|
|
311
|
-
git clone https://github.com/
|
|
236
|
+
git clone https://github.com/simd-labs/simdref.git
|
|
312
237
|
cd simdref
|
|
313
238
|
python3 -m venv .venv
|
|
314
239
|
.venv/bin/pip install -e .
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# simdref
|
|
2
2
|
|
|
3
|
-
[](https://github.com/simd-labs/simdref/actions/workflows/ci.yml)
|
|
4
4
|
[](https://test.pypi.org/project/simdref/)
|
|
5
5
|
[](https://pypi.org/project/simdref/)
|
|
6
6
|
|
|
@@ -11,87 +11,24 @@ on-demand manpages (`simdref man` — or run `simdref install-manpages`
|
|
|
11
11
|
so plain `man vpaddd` works), a static web app, and a structured JSON
|
|
12
12
|
interface for LLM skills.
|
|
13
13
|
|
|
14
|
-
[Web App](https://diamondinoia.
|
|
14
|
+
[Web App](https://simdref.diamondinoia.com/) ·
|
|
15
15
|
[TestPyPI](https://test.pypi.org/project/simdref/) ·
|
|
16
|
-
[GitHub](https://github.com/
|
|
16
|
+
[GitHub](https://github.com/simd-labs/simdref) ·
|
|
17
17
|
[Contributing](CONTRIBUTING.md)
|
|
18
18
|
|
|
19
19
|
<!-- Screenshots are hosted on the `docs-assets` branch so the main
|
|
20
20
|
branch stays lightweight to clone. -->
|
|
21
21
|
|
|
22
22
|
<p align="center">
|
|
23
|
-
<img alt="simdref TUI" src="https://raw.githubusercontent.com/
|
|
23
|
+
<img alt="simdref TUI" src="https://raw.githubusercontent.com/simd-labs/simdref/docs-assets/img/tui.svg" width="720">
|
|
24
24
|
<br><em>Interactive TUI with ISA filters, ranked results, and measured/modeled performance tables.</em>
|
|
25
25
|
</p>
|
|
26
26
|
|
|
27
|
-
## Install the Claude Code skill
|
|
27
|
+
## Install the Claude Code and Codex skill
|
|
28
28
|
|
|
29
|
-
`
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
so the one-liner install is:
|
|
33
|
-
|
|
34
|
-
```
|
|
35
|
-
/plugin marketplace add DiamonDinoia/simdref
|
|
36
|
-
/plugin install asm-analysis@simdref
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
Run those at the Claude Code prompt. The marketplace add fetches this
|
|
40
|
-
repo; the install wires up the skill so Claude picks it up automatically
|
|
41
|
-
on performance-oriented prompts like *"why is this loop slow"*,
|
|
42
|
-
*"vectorise this"*, *"look at the asm"*.
|
|
43
|
-
|
|
44
|
-
### Manual install (no marketplace)
|
|
45
|
-
|
|
46
|
-
If you prefer a hand-managed copy:
|
|
47
|
-
|
|
48
|
-
```bash
|
|
49
|
-
# symlink from a checkout — always current with main:
|
|
50
|
-
git clone https://github.com/DiamonDinoia/simdref.git ~/src/simdref
|
|
51
|
-
mkdir -p ~/.claude/skills
|
|
52
|
-
ln -sf ~/src/simdref/skills/asm-analysis ~/.claude/skills/asm-analysis
|
|
53
|
-
|
|
54
|
-
# or pull a one-off snapshot:
|
|
55
|
-
mkdir -p ~/.claude/skills/asm-analysis && \
|
|
56
|
-
curl -fsSL https://raw.githubusercontent.com/DiamonDinoia/simdref/main/skills/asm-analysis/SKILL.md \
|
|
57
|
-
-o ~/.claude/skills/asm-analysis/SKILL.md
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
See [`skills/asm-analysis/SKILL.md`](skills/asm-analysis/SKILL.md) for
|
|
61
|
-
the full trigger list and pipeline stages.
|
|
62
|
-
|
|
63
|
-
## Install the Codex skill
|
|
64
|
-
|
|
65
|
-
This repo also ships the same pipeline as an OpenAI Codex plugin, so
|
|
66
|
-
the one-liner install from a Codex CLI prompt is:
|
|
67
|
-
|
|
68
|
-
```
|
|
69
|
-
codex plugin marketplace add DiamonDinoia/simdref
|
|
70
|
-
/plugins
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
Pick `asm-analysis` in the browser and enable it. Codex picks up the
|
|
74
|
-
skill automatically on performance-oriented prompts (*"why is this
|
|
75
|
-
loop slow"*, *"vectorise this"*, *"look at the asm"*).
|
|
76
|
-
|
|
77
|
-
### Manual install (no marketplace)
|
|
78
|
-
|
|
79
|
-
```bash
|
|
80
|
-
# user-scoped symlink — applies to every repo, always current with main:
|
|
81
|
-
git clone https://github.com/DiamonDinoia/simdref.git ~/src/simdref
|
|
82
|
-
mkdir -p ~/.agents/skills
|
|
83
|
-
ln -sf ~/src/simdref/codex-skills/asm-analysis/skills/asm-analysis \
|
|
84
|
-
~/.agents/skills/asm-analysis
|
|
85
|
-
|
|
86
|
-
# or scope the skill to a single repo:
|
|
87
|
-
mkdir -p .agents/skills
|
|
88
|
-
ln -sf ~/src/simdref/codex-skills/asm-analysis/skills/asm-analysis \
|
|
89
|
-
.agents/skills/asm-analysis
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
See
|
|
93
|
-
[`codex-skills/asm-analysis/skills/asm-analysis/SKILL.md`](codex-skills/asm-analysis/skills/asm-analysis/SKILL.md)
|
|
94
|
-
for the trigger list and pipeline stages.
|
|
29
|
+
The `asm-analysis` skill for Claude Code and OpenAI Codex lives in
|
|
30
|
+
[simd-labs/simdref-skill](https://github.com/simd-labs/simdref-skill).
|
|
31
|
+
Follow the install steps in that repo.
|
|
95
32
|
|
|
96
33
|
## Install
|
|
97
34
|
|
|
@@ -102,15 +39,6 @@ isa doctor # confirm everything is wired up
|
|
|
102
39
|
isa # open the TUI
|
|
103
40
|
```
|
|
104
41
|
|
|
105
|
-
For the bleeding-edge version with the `simdref profile` subcommand
|
|
106
|
-
(runtime-profile → asm-annotation pipeline, Stage 2b of the skill),
|
|
107
|
-
install from `main`:
|
|
108
|
-
|
|
109
|
-
```bash
|
|
110
|
-
pipx install git+https://github.com/DiamonDinoia/simdref.git@main
|
|
111
|
-
# or editable: pip install -e git+https://github.com/DiamonDinoia/simdref.git@main#egg=simdref
|
|
112
|
-
```
|
|
113
|
-
|
|
114
42
|
The package installs two equivalent executables, **`isa`** (short) and
|
|
115
43
|
**`simdref`** (explicit). The rest of this README uses `isa`.
|
|
116
44
|
|
|
@@ -142,15 +70,15 @@ isa # open the interactive TUI
|
|
|
142
70
|
|
|
143
71
|
**Web app** — a self-contained static SPA with filters and performance
|
|
144
72
|
tables, published to GitHub Pages at
|
|
145
|
-
[diamondinoia.
|
|
146
|
-
|
|
73
|
+
[simdref.diamondinoia.com](https://simdref.diamondinoia.com/) and
|
|
74
|
+
built from the `simdref-web` repo. This repo (`simdref-core`) exports the
|
|
75
|
+
JSON data it consumes:
|
|
147
76
|
|
|
148
77
|
```bash
|
|
149
|
-
isa
|
|
150
|
-
isa serve --web-dir ./web # gzip-aware local server
|
|
78
|
+
isa export --out-dir ./site-data
|
|
151
79
|
```
|
|
152
80
|
|
|
153
|
-
The [live demo](https://diamondinoia.
|
|
81
|
+
The [live demo](https://simdref.diamondinoia.com/) hosts the same
|
|
154
82
|
build — search across ~122k entries with ISA filters and per-uarch perf
|
|
155
83
|
tables.
|
|
156
84
|
|
|
@@ -226,10 +154,6 @@ and `ld` still consume it.
|
|
|
226
154
|
| `isa doctor` | Check the installation — pass/fail per component, non-zero exit on failure |
|
|
227
155
|
| `isa update` | Download the pre-built release catalog (no `llvm-mca` required); `--from-release` for the GitHub Release artifact |
|
|
228
156
|
| `isa annotate <file.s>` | Annotate a `.s` assembly file with per-instruction summaries and latency/CPI — writes `<file>.sa` |
|
|
229
|
-
| `isa profile run` | Compile→record→disassemble→annotate→merge in one shot (perf or llvm-mca) |
|
|
230
|
-
| `isa profile ingest` | Convert profiler output (perf / VTune / uProf / xctrace / llvm-mca / exegesis) to normalized samples |
|
|
231
|
-
| `isa profile hotloops` | Detect natural loops in a disassembly and rank them by sample weight |
|
|
232
|
-
| `isa profile merge` | Attach hotness data to the annotated instruction stream |
|
|
233
157
|
| `isa llm query <q>` | Strict lookup → JSON/NDJSON/Markdown (see [docs/LLM.md](docs/LLM.md)) |
|
|
234
158
|
| `isa llm batch` | Resolve many queries from stdin in one invocation (NDJSON out) |
|
|
235
159
|
| `isa llm list` | Dump the `FilterSpec` or stream matching catalog entries |
|
|
@@ -240,8 +164,7 @@ and `ld` still consume it.
|
|
|
240
164
|
| Command | Description |
|
|
241
165
|
| -------------------------------- | ----------------------------------------------------------------------------------------------- |
|
|
242
166
|
| `isa build` | Full local rebuild from upstream sources, including Intel SDM parsing (`llvm-mca` 18+ required) |
|
|
243
|
-
| `isa
|
|
244
|
-
| `isa serve` | Serve the exported web app locally (gzip-aware) |
|
|
167
|
+
| `isa export` | Export site data (JSON only) — the release contract for the `simdref-web` repo |
|
|
245
168
|
| `isa completion install [SHELL]` | Install shell completion into the user's profile |
|
|
246
169
|
| `isa completion show [SHELL]` | Print the completion script for a shell |
|
|
247
170
|
|
|
@@ -276,7 +199,7 @@ mixed.
|
|
|
276
199
|
## Development
|
|
277
200
|
|
|
278
201
|
```bash
|
|
279
|
-
git clone https://github.com/
|
|
202
|
+
git clone https://github.com/simd-labs/simdref.git
|
|
280
203
|
cd simdref
|
|
281
204
|
python3 -m venv .venv
|
|
282
205
|
.venv/bin/pip install -e .
|
|
@@ -4,10 +4,10 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "simdref"
|
|
7
|
-
version = "0.0.
|
|
8
|
-
description = "Searchable SIMD intrinsic and instruction reference with CLI, manpages, TUI,
|
|
7
|
+
version = "0.0.6"
|
|
8
|
+
description = "Searchable SIMD intrinsic and instruction reference with CLI, manpages, TUI, and LSP."
|
|
9
9
|
readme = "README.md"
|
|
10
|
-
requires-python = ">=3.
|
|
10
|
+
requires-python = ">=3.10"
|
|
11
11
|
license = {text = "GPL-3.0-or-later"}
|
|
12
12
|
authors = [
|
|
13
13
|
{name = "Marco"}
|
|
@@ -19,23 +19,30 @@ classifiers = [
|
|
|
19
19
|
"License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)",
|
|
20
20
|
"Operating System :: OS Independent",
|
|
21
21
|
"Programming Language :: Python :: 3",
|
|
22
|
+
"Programming Language :: Python :: 3.10",
|
|
22
23
|
"Programming Language :: Python :: 3.11",
|
|
23
24
|
"Programming Language :: Python :: 3.12",
|
|
24
25
|
"Programming Language :: Python :: 3.13",
|
|
26
|
+
"Programming Language :: Python :: 3.14",
|
|
25
27
|
"Topic :: Software Development :: Documentation",
|
|
26
28
|
"Topic :: Software Development :: Libraries :: Python Modules",
|
|
27
29
|
]
|
|
30
|
+
# `requires-python` tracks the non-EOL CPython range; 3.10 goes EOL 2026-10-31.
|
|
31
|
+
# Lower dependency bound is the version CI resolves and tests; anything older is
|
|
32
|
+
# an untested compatibility claim. Upper bound is the next major (next minor for
|
|
33
|
+
# 0.x, where that is the compatibility unit). msgpack floors above its own
|
|
34
|
+
# advisory: 1.2.0 and earlier carry GHSA-6v7p-g79w-8964.
|
|
28
35
|
dependencies = [
|
|
29
|
-
"click>=8.
|
|
36
|
+
"click>=8.5,<9",
|
|
30
37
|
"httpx>=0.28,<1",
|
|
31
|
-
"msgpack>=1.
|
|
32
|
-
"pdfplumber>=0.11,<1",
|
|
33
|
-
"PyMuPDF>=1.
|
|
34
|
-
"PyYAML>=6,<7",
|
|
35
|
-
"rapidfuzz>=3.
|
|
36
|
-
"rich>=
|
|
37
|
-
"textual>=
|
|
38
|
-
"typer>=0.
|
|
38
|
+
"msgpack>=1.2.1,<2",
|
|
39
|
+
"pdfplumber>=0.11.10,<1",
|
|
40
|
+
"PyMuPDF>=1.28,<2",
|
|
41
|
+
"PyYAML>=6.0.3,<7",
|
|
42
|
+
"rapidfuzz>=3.14,<4",
|
|
43
|
+
"rich>=15,<16",
|
|
44
|
+
"textual>=8.2,<9",
|
|
45
|
+
"typer>=0.27,<1",
|
|
39
46
|
]
|
|
40
47
|
|
|
41
48
|
[project.scripts]
|
|
@@ -45,14 +52,10 @@ simdref-lsp = "simdref.lsp:main"
|
|
|
45
52
|
|
|
46
53
|
[tool.setuptools]
|
|
47
54
|
package-dir = {"" = "src"}
|
|
48
|
-
include-package-data = true
|
|
49
55
|
|
|
50
56
|
[tool.setuptools.packages.find]
|
|
51
57
|
where = ["src"]
|
|
52
58
|
|
|
53
|
-
[tool.setuptools.package-data]
|
|
54
|
-
simdref = ["templates/*"]
|
|
55
|
-
|
|
56
59
|
[tool.ruff]
|
|
57
60
|
line-length = 100
|
|
58
|
-
target-version = "
|
|
61
|
+
target-version = "py310"
|
|
@@ -556,6 +556,17 @@ def arch_perf(record: InstructionRecord, arch: str) -> tuple[float | None, float
|
|
|
556
556
|
return lat, cpi, kind
|
|
557
557
|
|
|
558
558
|
|
|
559
|
+
def arch_perf_tag(arch: str, lat: float | None, cpi: float | None, kind: str) -> str:
|
|
560
|
+
"""Provenance label for a perf row pinned to *arch*.
|
|
561
|
+
|
|
562
|
+
``[missing:<arch>]`` when the catalog holds no latency and no CPI for
|
|
563
|
+
*arch*, so an empty row never reads as "measured to cost nothing".
|
|
564
|
+
"""
|
|
565
|
+
if lat is None and cpi is None:
|
|
566
|
+
return f"[missing:{arch}]"
|
|
567
|
+
return f"[{arch}, {kind}]"
|
|
568
|
+
|
|
569
|
+
|
|
559
570
|
def _ports_for(details: dict[str, Any]) -> str | None:
|
|
560
571
|
measurement = details.get("measurement") or {}
|
|
561
572
|
ports = measurement.get("ports") or measurement.get("TP_ports")
|
|
@@ -629,10 +640,7 @@ def format_annotation(
|
|
|
629
640
|
if performance:
|
|
630
641
|
if arch is not None:
|
|
631
642
|
lat, cpi, kind = arch_perf(record, arch)
|
|
632
|
-
|
|
633
|
-
tag = f"[missing:{arch}]"
|
|
634
|
-
else:
|
|
635
|
-
tag = f"[{arch}, {kind}]"
|
|
643
|
+
tag = arch_perf_tag(arch, lat, cpi, kind)
|
|
636
644
|
else:
|
|
637
645
|
summary = aggregate_perf(record, mode=agg, include_modeled=include_modeled)
|
|
638
646
|
lat, cpi = summary.latency, summary.cpi
|