simdref 0.0.5__tar.gz → 0.0.7__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.7}/PKG-INFO +32 -106
- {simdref-0.0.5 → simdref-0.0.7}/README.md +18 -94
- {simdref-0.0.5 → simdref-0.0.7}/pyproject.toml +20 -17
- {simdref-0.0.5 → simdref-0.0.7}/src/simdref/annotate.py +12 -4
- {simdref-0.0.5 → simdref-0.0.7}/src/simdref/cli.py +383 -316
- simdref-0.0.5/src/simdref/web.py → simdref-0.0.7/src/simdref/export.py +148 -48
- {simdref-0.0.5 → simdref-0.0.7}/src/simdref/ingest_sources.py +3 -3
- {simdref-0.0.5 → simdref-0.0.7}/src/simdref/queries.py +8 -2
- {simdref-0.0.5 → simdref-0.0.7}/src/simdref/storage.py +99 -11
- {simdref-0.0.5 → simdref-0.0.7}/src/simdref/ui_labels.py +7 -6
- {simdref-0.0.5 → simdref-0.0.7/src/simdref.egg-info}/PKG-INFO +32 -106
- {simdref-0.0.5 → simdref-0.0.7}/src/simdref.egg-info/SOURCES.txt +4 -22
- simdref-0.0.7/src/simdref.egg-info/requires.txt +10 -0
- simdref-0.0.7/tests/test_annotate_positions.py +146 -0
- {simdref-0.0.5 → simdref-0.0.7}/tests/test_auto_update_on_version_change.py +6 -6
- simdref-0.0.7/tests/test_cli_bare_query.py +232 -0
- {simdref-0.0.5 → simdref-0.0.7}/tests/test_coverage_live.py +4 -1
- {simdref-0.0.5 → simdref-0.0.7}/tests/test_coverage_parity.py +5 -1
- simdref-0.0.7/tests/test_export.py +214 -0
- {simdref-0.0.5 → simdref-0.0.7}/tests/test_issue2_fixes.py +92 -2
- simdref-0.0.7/tests/test_issues_23_24_25.py +384 -0
- {simdref-0.0.5 → simdref-0.0.7}/tests/test_lsp_web.py +14 -43
- {simdref-0.0.5 → simdref-0.0.7}/tests/test_presentation.py +14 -25
- {simdref-0.0.5 → simdref-0.0.7}/tests/test_preset_persistence.py +0 -28
- simdref-0.0.7/tests/test_storage_payload.py +273 -0
- {simdref-0.0.5 → simdref-0.0.7}/tests/test_storage_schema.py +26 -0
- {simdref-0.0.5 → simdref-0.0.7}/tests/test_ui_labels_parity.py +4 -39
- {simdref-0.0.5 → simdref-0.0.7}/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_cli_bare_query.py +0 -90
- simdref-0.0.5/tests/test_search_index_js.py +0 -34
- simdref-0.0.5/tests/test_storage_payload.py +0 -56
- simdref-0.0.5/tests/test_web_e2e.py +0 -202
- {simdref-0.0.5 → simdref-0.0.7}/LICENSE +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/setup.cfg +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/src/simdref/__init__.py +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/src/simdref/__main__.py +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/src/simdref/arm_instructions.py +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/src/simdref/display.py +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/src/simdref/filters.py +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/src/simdref/ingest.py +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/src/simdref/ingest_catalog.py +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/src/simdref/ingest_pdf.py +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/src/simdref/lsp.py +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/src/simdref/manpages.py +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/src/simdref/models.py +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/src/simdref/pdfparse/__init__.py +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/src/simdref/pdfparse/base.py +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/src/simdref/pdfparse/intel.py +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/src/simdref/pdfparse/registry.py +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/src/simdref/pdfparse/types.py +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/src/simdref/pdfrefs.py +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/src/simdref/perf.py +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/src/simdref/perf_sources/__init__.py +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/src/simdref/perf_sources/cores.py +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/src/simdref/perf_sources/llvm_mca.py +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/src/simdref/perf_sources/llvm_scheduling.py +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/src/simdref/perf_sources/merge.py +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/src/simdref/riscv.py +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/src/simdref/search.py +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/src/simdref/tui.py +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/src/simdref.egg-info/dependency_links.txt +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/src/simdref.egg-info/entry_points.txt +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/src/simdref.egg-info/top_level.txt +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/tests/test_annotate.py +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/tests/test_audit_coverage.py +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/tests/test_cli_bootstrap_progress.py +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/tests/test_cli_help.py +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/tests/test_cli_llm.py +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/tests/test_display.py +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/tests/test_filters.py +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/tests/test_ingest_sources.py +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/tests/test_intel_operation_and_url.py +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/tests/test_models.py +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/tests/test_pdfparse.py +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/tests/test_perf.py +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/tests/test_perf_sources.py +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/tests/test_riscv_docs_pages.py +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/tests/test_search.py +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/tests/test_search_pushdown.py +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/tests/test_source_kind_filter.py +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/tests/test_source_validation.py +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/tests/test_tui.py +0 -0
- {simdref-0.0.5 → simdref-0.0.7}/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.7
|
|
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
|
|
|
@@ -40,90 +42,28 @@ A single searchable reference for SIMD intrinsics and instructions across
|
|
|
40
42
|
**x86 (Intel + uops.info)**, **Arm (ACLE / AARCHMRS)**, and **RISC-V
|
|
41
43
|
(RVV + unified-db)**. Runs as a CLI, a Textual TUI, an LSP server,
|
|
42
44
|
on-demand manpages (`simdref man` — or run `simdref install-manpages`
|
|
43
|
-
so plain `man vpaddd` works), a
|
|
44
|
-
|
|
45
|
+
so plain `man vpaddd` works), a JSON site-data export for
|
|
46
|
+
[simdref-web](https://github.com/simd-labs/simdref-web), and a
|
|
47
|
+
structured JSON interface for LLM skills.
|
|
45
48
|
|
|
46
|
-
[Web App](https://diamondinoia.
|
|
49
|
+
[Web App](https://simdref.diamondinoia.com/) ·
|
|
47
50
|
[TestPyPI](https://test.pypi.org/project/simdref/) ·
|
|
48
|
-
[GitHub](https://github.com/
|
|
51
|
+
[GitHub](https://github.com/simd-labs/simdref) ·
|
|
49
52
|
[Contributing](CONTRIBUTING.md)
|
|
50
53
|
|
|
51
54
|
<!-- Screenshots are hosted on the `docs-assets` branch so the main
|
|
52
55
|
branch stays lightweight to clone. -->
|
|
53
56
|
|
|
54
57
|
<p align="center">
|
|
55
|
-
<img alt="simdref TUI" src="https://raw.githubusercontent.com/
|
|
58
|
+
<img alt="simdref TUI" src="https://raw.githubusercontent.com/simd-labs/simdref/docs-assets/img/tui.svg" width="720">
|
|
56
59
|
<br><em>Interactive TUI with ISA filters, ranked results, and measured/modeled performance tables.</em>
|
|
57
60
|
</p>
|
|
58
61
|
|
|
59
|
-
## Install the Claude Code skill
|
|
62
|
+
## Install the Claude Code and Codex skill
|
|
60
63
|
|
|
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.
|
|
64
|
+
The `asm-analysis` skill for Claude Code and OpenAI Codex lives in
|
|
65
|
+
[simd-labs/simdref-skill](https://github.com/simd-labs/simdref-skill).
|
|
66
|
+
Follow the install steps in that repo.
|
|
127
67
|
|
|
128
68
|
## Install
|
|
129
69
|
|
|
@@ -134,15 +74,6 @@ isa doctor # confirm everything is wired up
|
|
|
134
74
|
isa # open the TUI
|
|
135
75
|
```
|
|
136
76
|
|
|
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
77
|
The package installs two equivalent executables, **`isa`** (short) and
|
|
147
78
|
**`simdref`** (explicit). The rest of this README uses `isa`.
|
|
148
79
|
|
|
@@ -174,15 +105,15 @@ isa # open the interactive TUI
|
|
|
174
105
|
|
|
175
106
|
**Web app** — a self-contained static SPA with filters and performance
|
|
176
107
|
tables, published to GitHub Pages at
|
|
177
|
-
[diamondinoia.
|
|
178
|
-
|
|
108
|
+
[simdref.diamondinoia.com](https://simdref.diamondinoia.com/) and
|
|
109
|
+
built from the `simdref-web` repo. This repo exports the
|
|
110
|
+
JSON data it consumes:
|
|
179
111
|
|
|
180
112
|
```bash
|
|
181
|
-
isa
|
|
182
|
-
isa serve --web-dir ./web # gzip-aware local server
|
|
113
|
+
isa export --out-dir ./site-data
|
|
183
114
|
```
|
|
184
115
|
|
|
185
|
-
The [live demo](https://diamondinoia.
|
|
116
|
+
The [live demo](https://simdref.diamondinoia.com/) hosts the same
|
|
186
117
|
build — search across ~122k entries with ISA filters and per-uarch perf
|
|
187
118
|
tables.
|
|
188
119
|
|
|
@@ -258,10 +189,6 @@ and `ld` still consume it.
|
|
|
258
189
|
| `isa doctor` | Check the installation — pass/fail per component, non-zero exit on failure |
|
|
259
190
|
| `isa update` | Download the pre-built release catalog (no `llvm-mca` required); `--from-release` for the GitHub Release artifact |
|
|
260
191
|
| `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
192
|
| `isa llm query <q>` | Strict lookup → JSON/NDJSON/Markdown (see [docs/LLM.md](docs/LLM.md)) |
|
|
266
193
|
| `isa llm batch` | Resolve many queries from stdin in one invocation (NDJSON out) |
|
|
267
194
|
| `isa llm list` | Dump the `FilterSpec` or stream matching catalog entries |
|
|
@@ -272,8 +199,7 @@ and `ld` still consume it.
|
|
|
272
199
|
| Command | Description |
|
|
273
200
|
| -------------------------------- | ----------------------------------------------------------------------------------------------- |
|
|
274
201
|
| `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) |
|
|
202
|
+
| `isa export` | Export site data (JSON only) — the release contract for the `simdref-web` repo |
|
|
277
203
|
| `isa completion install [SHELL]` | Install shell completion into the user's profile |
|
|
278
204
|
| `isa completion show [SHELL]` | Print the completion script for a shell |
|
|
279
205
|
|
|
@@ -308,7 +234,7 @@ mixed.
|
|
|
308
234
|
## Development
|
|
309
235
|
|
|
310
236
|
```bash
|
|
311
|
-
git clone https://github.com/
|
|
237
|
+
git clone https://github.com/simd-labs/simdref.git
|
|
312
238
|
cd simdref
|
|
313
239
|
python3 -m venv .venv
|
|
314
240
|
.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
|
|
|
@@ -8,90 +8,28 @@ A single searchable reference for SIMD intrinsics and instructions across
|
|
|
8
8
|
**x86 (Intel + uops.info)**, **Arm (ACLE / AARCHMRS)**, and **RISC-V
|
|
9
9
|
(RVV + unified-db)**. Runs as a CLI, a Textual TUI, an LSP server,
|
|
10
10
|
on-demand manpages (`simdref man` — or run `simdref install-manpages`
|
|
11
|
-
so plain `man vpaddd` works), a
|
|
12
|
-
|
|
11
|
+
so plain `man vpaddd` works), a JSON site-data export for
|
|
12
|
+
[simdref-web](https://github.com/simd-labs/simdref-web), and a
|
|
13
|
+
structured JSON interface for LLM skills.
|
|
13
14
|
|
|
14
|
-
[Web App](https://diamondinoia.
|
|
15
|
+
[Web App](https://simdref.diamondinoia.com/) ·
|
|
15
16
|
[TestPyPI](https://test.pypi.org/project/simdref/) ·
|
|
16
|
-
[GitHub](https://github.com/
|
|
17
|
+
[GitHub](https://github.com/simd-labs/simdref) ·
|
|
17
18
|
[Contributing](CONTRIBUTING.md)
|
|
18
19
|
|
|
19
20
|
<!-- Screenshots are hosted on the `docs-assets` branch so the main
|
|
20
21
|
branch stays lightweight to clone. -->
|
|
21
22
|
|
|
22
23
|
<p align="center">
|
|
23
|
-
<img alt="simdref TUI" src="https://raw.githubusercontent.com/
|
|
24
|
+
<img alt="simdref TUI" src="https://raw.githubusercontent.com/simd-labs/simdref/docs-assets/img/tui.svg" width="720">
|
|
24
25
|
<br><em>Interactive TUI with ISA filters, ranked results, and measured/modeled performance tables.</em>
|
|
25
26
|
</p>
|
|
26
27
|
|
|
27
|
-
## Install the Claude Code skill
|
|
28
|
+
## Install the Claude Code and Codex skill
|
|
28
29
|
|
|
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.
|
|
30
|
+
The `asm-analysis` skill for Claude Code and OpenAI Codex lives in
|
|
31
|
+
[simd-labs/simdref-skill](https://github.com/simd-labs/simdref-skill).
|
|
32
|
+
Follow the install steps in that repo.
|
|
95
33
|
|
|
96
34
|
## Install
|
|
97
35
|
|
|
@@ -102,15 +40,6 @@ isa doctor # confirm everything is wired up
|
|
|
102
40
|
isa # open the TUI
|
|
103
41
|
```
|
|
104
42
|
|
|
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
43
|
The package installs two equivalent executables, **`isa`** (short) and
|
|
115
44
|
**`simdref`** (explicit). The rest of this README uses `isa`.
|
|
116
45
|
|
|
@@ -142,15 +71,15 @@ isa # open the interactive TUI
|
|
|
142
71
|
|
|
143
72
|
**Web app** — a self-contained static SPA with filters and performance
|
|
144
73
|
tables, published to GitHub Pages at
|
|
145
|
-
[diamondinoia.
|
|
146
|
-
|
|
74
|
+
[simdref.diamondinoia.com](https://simdref.diamondinoia.com/) and
|
|
75
|
+
built from the `simdref-web` repo. This repo exports the
|
|
76
|
+
JSON data it consumes:
|
|
147
77
|
|
|
148
78
|
```bash
|
|
149
|
-
isa
|
|
150
|
-
isa serve --web-dir ./web # gzip-aware local server
|
|
79
|
+
isa export --out-dir ./site-data
|
|
151
80
|
```
|
|
152
81
|
|
|
153
|
-
The [live demo](https://diamondinoia.
|
|
82
|
+
The [live demo](https://simdref.diamondinoia.com/) hosts the same
|
|
154
83
|
build — search across ~122k entries with ISA filters and per-uarch perf
|
|
155
84
|
tables.
|
|
156
85
|
|
|
@@ -226,10 +155,6 @@ and `ld` still consume it.
|
|
|
226
155
|
| `isa doctor` | Check the installation — pass/fail per component, non-zero exit on failure |
|
|
227
156
|
| `isa update` | Download the pre-built release catalog (no `llvm-mca` required); `--from-release` for the GitHub Release artifact |
|
|
228
157
|
| `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
158
|
| `isa llm query <q>` | Strict lookup → JSON/NDJSON/Markdown (see [docs/LLM.md](docs/LLM.md)) |
|
|
234
159
|
| `isa llm batch` | Resolve many queries from stdin in one invocation (NDJSON out) |
|
|
235
160
|
| `isa llm list` | Dump the `FilterSpec` or stream matching catalog entries |
|
|
@@ -240,8 +165,7 @@ and `ld` still consume it.
|
|
|
240
165
|
| Command | Description |
|
|
241
166
|
| -------------------------------- | ----------------------------------------------------------------------------------------------- |
|
|
242
167
|
| `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) |
|
|
168
|
+
| `isa export` | Export site data (JSON only) — the release contract for the `simdref-web` repo |
|
|
245
169
|
| `isa completion install [SHELL]` | Install shell completion into the user's profile |
|
|
246
170
|
| `isa completion show [SHELL]` | Print the completion script for a shell |
|
|
247
171
|
|
|
@@ -276,7 +200,7 @@ mixed.
|
|
|
276
200
|
## Development
|
|
277
201
|
|
|
278
202
|
```bash
|
|
279
|
-
git clone https://github.com/
|
|
203
|
+
git clone https://github.com/simd-labs/simdref.git
|
|
280
204
|
cd simdref
|
|
281
205
|
python3 -m venv .venv
|
|
282
206
|
.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.7"
|
|
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
|