simdref 0.0.10__tar.gz → 0.0.12__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.12/PKG-INFO +208 -0
- simdref-0.0.12/README.md +174 -0
- {simdref-0.0.10 → simdref-0.0.12}/pyproject.toml +1 -1
- {simdref-0.0.10 → simdref-0.0.12}/src/simdref/lsp.py +35 -7
- simdref-0.0.12/src/simdref.egg-info/PKG-INFO +208 -0
- {simdref-0.0.10 → simdref-0.0.12}/tests/test_lsp_stdio.py +49 -0
- simdref-0.0.10/PKG-INFO +0 -251
- simdref-0.0.10/README.md +0 -217
- simdref-0.0.10/src/simdref.egg-info/PKG-INFO +0 -251
- {simdref-0.0.10 → simdref-0.0.12}/LICENSE +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/setup.cfg +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/src/simdref/__init__.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/src/simdref/__main__.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/src/simdref/annotate.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/src/simdref/arm_instructions.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/src/simdref/cli.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/src/simdref/display.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/src/simdref/export.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/src/simdref/filters.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/src/simdref/ingest.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/src/simdref/ingest_catalog.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/src/simdref/ingest_pdf.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/src/simdref/ingest_sources.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/src/simdref/manpages.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/src/simdref/models.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/src/simdref/pdfparse/__init__.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/src/simdref/pdfparse/base.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/src/simdref/pdfparse/intel.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/src/simdref/pdfparse/registry.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/src/simdref/pdfparse/types.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/src/simdref/pdfrefs.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/src/simdref/perf.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/src/simdref/perf_sources/__init__.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/src/simdref/perf_sources/cores.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/src/simdref/perf_sources/llvm_mca.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/src/simdref/perf_sources/llvm_scheduling.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/src/simdref/perf_sources/merge.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/src/simdref/queries.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/src/simdref/riscv.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/src/simdref/search.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/src/simdref/storage.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/src/simdref/tui.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/src/simdref/ui_labels.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/src/simdref.egg-info/SOURCES.txt +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/src/simdref.egg-info/dependency_links.txt +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/src/simdref.egg-info/entry_points.txt +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/src/simdref.egg-info/requires.txt +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/src/simdref.egg-info/top_level.txt +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/tests/test_annotate.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/tests/test_annotate_positions.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/tests/test_audit_coverage.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/tests/test_auto_update_on_version_change.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/tests/test_cli_bare_query.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/tests/test_cli_bootstrap_progress.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/tests/test_cli_help.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/tests/test_cli_llm.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/tests/test_coverage_live.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/tests/test_coverage_parity.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/tests/test_display.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/tests/test_export.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/tests/test_filters.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/tests/test_ingest_sources.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/tests/test_intel_operation_and_url.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/tests/test_issue2_fixes.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/tests/test_issues_23_24_25.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/tests/test_lsp_web.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/tests/test_models.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/tests/test_pdfparse.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/tests/test_perf.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/tests/test_perf_sources.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/tests/test_presentation.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/tests/test_preset_persistence.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/tests/test_riscv_docs_pages.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/tests/test_search.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/tests/test_search_pushdown.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/tests/test_source_kind_filter.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/tests/test_source_validation.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/tests/test_storage_payload.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/tests/test_storage_schema.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/tests/test_tui.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/tests/test_ui_labels_parity.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/tests/test_version_matches_pyproject.py +0 -0
- {simdref-0.0.10 → simdref-0.0.12}/tests/test_x86_linking.py +0 -0
simdref-0.0.12/PKG-INFO
ADDED
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: simdref
|
|
3
|
+
Version: 0.0.12
|
|
4
|
+
Summary: Searchable SIMD intrinsic and instruction reference with CLI, manpages, TUI, and LSP.
|
|
5
|
+
Author: Marco
|
|
6
|
+
License: GPL-3.0-or-later
|
|
7
|
+
Classifier: Development Status :: 3 - Alpha
|
|
8
|
+
Classifier: Environment :: Console
|
|
9
|
+
Classifier: Intended Audience :: Developers
|
|
10
|
+
Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
|
|
11
|
+
Classifier: Operating System :: OS Independent
|
|
12
|
+
Classifier: Programming Language :: Python :: 3
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
18
|
+
Classifier: Topic :: Software Development :: Documentation
|
|
19
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
20
|
+
Requires-Python: >=3.10
|
|
21
|
+
Description-Content-Type: text/markdown
|
|
22
|
+
License-File: LICENSE
|
|
23
|
+
Requires-Dist: click<9,>=8.5
|
|
24
|
+
Requires-Dist: httpx<1,>=0.28
|
|
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
|
|
33
|
+
Dynamic: license-file
|
|
34
|
+
|
|
35
|
+
# simdref
|
|
36
|
+
|
|
37
|
+
[](https://github.com/simd-labs/simdref/actions/workflows/ci.yml)
|
|
38
|
+
[](https://test.pypi.org/project/simdref/)
|
|
39
|
+
[](https://pypi.org/project/simdref/)
|
|
40
|
+
|
|
41
|
+
simdref is a SIMD intrinsic and instruction reference for x86 (Intel +
|
|
42
|
+
uops.info), Arm (ACLE, AARCHMRS), and RISC-V (RVV + unified-db). It runs as
|
|
43
|
+
a CLI, a TUI, an LSP server, and an on-demand manpage renderer.
|
|
44
|
+
|
|
45
|
+
[Web app](https://simdref.diamondinoia.com/) ·
|
|
46
|
+
[TestPyPI](https://test.pypi.org/project/simdref/) ·
|
|
47
|
+
[GitHub](https://github.com/simd-labs/simdref) ·
|
|
48
|
+
[Contributing](CONTRIBUTING.md)
|
|
49
|
+
|
|
50
|
+
<p align="center">
|
|
51
|
+
<img alt="simdref TUI" src="https://raw.githubusercontent.com/simd-labs/simdref/refs/assets/docs/img/tui.svg" width="720">
|
|
52
|
+
</p>
|
|
53
|
+
|
|
54
|
+
## Install the Claude Code and Codex skill
|
|
55
|
+
|
|
56
|
+
The `asm-analysis` skill lives in
|
|
57
|
+
[simd-labs/simdref-skill](https://github.com/simd-labs/simdref-skill). Follow
|
|
58
|
+
the install steps in that repo.
|
|
59
|
+
|
|
60
|
+
## Install
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
pip install simdref
|
|
64
|
+
isa update # download the pre-built catalog
|
|
65
|
+
isa doctor # check the install
|
|
66
|
+
isa # open the TUI
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
The package installs two equivalent executables, `isa` and `simdref`. The
|
|
70
|
+
catalog download does not need `llvm-mca`. Only `isa build` needs
|
|
71
|
+
`llvm-mca` 18+ on `PATH`.
|
|
72
|
+
|
|
73
|
+
Pre-release builds live on TestPyPI:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
pip install -i https://test.pypi.org/simple/ \
|
|
77
|
+
--extra-index-url https://pypi.org/simple/ simdref
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Quickstart
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
isa _mm_add_ps # exact intrinsic -> detailed view
|
|
84
|
+
isa VPADDD # exact instruction -> detailed view
|
|
85
|
+
isa _mm_add # fuzzy -> ranked search results
|
|
86
|
+
isa mm add # tokenized query -> intrinsic-biased search
|
|
87
|
+
isa ADD # mnemonic-like -> instruction-biased search
|
|
88
|
+
isa VADDPS 2 # pick variant #2 from the last result list
|
|
89
|
+
isa # open the TUI
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Interfaces
|
|
93
|
+
|
|
94
|
+
The web app at [simdref.diamondinoia.com](https://simdref.diamondinoia.com/)
|
|
95
|
+
reads the JSON site data this repo exports:
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
isa export --out-dir ./site-data
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
The LSP server speaks JSON-RPC over stdio:
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
simdref-lsp
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
Editor clients, one for each editor:
|
|
108
|
+
|
|
109
|
+
- Zed: [zed-simdref](https://github.com/simd-labs/zed-simdref)
|
|
110
|
+
- VS Code: [vscode-simdref](https://github.com/simd-labs/vscode-simdref)
|
|
111
|
+
- JetBrains: [jetbrains-simdref](https://github.com/simd-labs/jetbrains-simdref)
|
|
112
|
+
- Neovim: [nvim-simdref](https://github.com/simd-labs/nvim-simdref)
|
|
113
|
+
|
|
114
|
+
Each client shows a one-line brief at the end of each instruction line and
|
|
115
|
+
the full manpage on hover, from the local catalog.
|
|
116
|
+
|
|
117
|
+
The LLM interface emits JSON and NDJSON with exit codes 0 (match), 1 (bad
|
|
118
|
+
flag), 2 (no match), 3 (ambiguous):
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
isa llm query _mm_add_ps --source-kind measured
|
|
122
|
+
echo -e "_mm_add_ps\nVPADDD" | isa llm batch
|
|
123
|
+
isa llm list --pattern "*gather*" --isa Intel
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
See [docs/LLM.md](docs/LLM.md) for the payload shape.
|
|
127
|
+
|
|
128
|
+
The annotator turns compiler `.s` output into an annotated `.sa` file.
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
isa annotate hello_simd.s # writes hello_simd.sa
|
|
132
|
+
isa annotate hello_simd.s --arch skylake-x -o - # stdout, skylake-x only
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
The annotator adds a trailing comment with the summary, latency, and CPI to
|
|
136
|
+
each instruction line. The output stays valid assembly.
|
|
137
|
+
|
|
138
|
+
## Commands
|
|
139
|
+
|
|
140
|
+
`isa --help` groups commands into Commands and Dev commands.
|
|
141
|
+
|
|
142
|
+
Commands
|
|
143
|
+
|
|
144
|
+
| Command | Description |
|
|
145
|
+
| ----------------------- | ------------------------------------------------------------------------- |
|
|
146
|
+
| `isa` | Open the TUI |
|
|
147
|
+
| `isa <query>` | Open the TUI with the query in a TTY, else print ranked results to stdout |
|
|
148
|
+
| `isa doctor` | Check the install, non-zero exit on failure |
|
|
149
|
+
| `isa update` | Download the pre-built catalog, `--from-release` for the GitHub Release |
|
|
150
|
+
| `isa annotate <file.s>` | Annotate a `.s` file with summaries and latency/CPI, writes `<file>.sa` |
|
|
151
|
+
| `isa man <name>` | Show a manpage, rendered on demand |
|
|
152
|
+
| `isa install-manpages` | Pre-generate man7 pages so plain `man vpaddd` works |
|
|
153
|
+
| `isa llm query <q>` | Strict lookup to JSON, NDJSON, or Markdown |
|
|
154
|
+
| `isa llm batch` | Resolve many queries from stdin in one invocation |
|
|
155
|
+
| `isa llm list` | Emit the FilterSpec or stream matching catalog entries |
|
|
156
|
+
| `isa llm schema` | Print the JSON schema for `llm` payloads |
|
|
157
|
+
|
|
158
|
+
Dev commands
|
|
159
|
+
|
|
160
|
+
| Command | Description |
|
|
161
|
+
| -------------------------------- | ------------------------------------------------------- |
|
|
162
|
+
| `isa build` | Rebuild the catalog from upstream, needs `llvm-mca` 18+ |
|
|
163
|
+
| `isa export` | Export the site-data JSON for the `simdref-web` repo |
|
|
164
|
+
| `isa completion install [SHELL]` | Install shell completion into the user profile |
|
|
165
|
+
| `isa completion show [SHELL]` | Print the completion script |
|
|
166
|
+
|
|
167
|
+
## Data sources
|
|
168
|
+
|
|
169
|
+
| Source | What | Entries¹ |
|
|
170
|
+
| ----------------------- | ------------------------------------------------------- | ------------------ |
|
|
171
|
+
| Intel Intrinsics Guide | Signatures, descriptions, ISA, categories | 7,381 intrinsics |
|
|
172
|
+
| uops.info | Instructions, operands, latency, throughput, ports | 2,558 instructions |
|
|
173
|
+
| Arm ACLE (NEON, SVE) | Intrinsic signatures and descriptions | 10,791 intrinsics |
|
|
174
|
+
| Arm AARCHMRS (A64) | Base instruction forms and operand tables | live-only² |
|
|
175
|
+
| riscv-rvv-intrinsic-doc | RVV intrinsics with deterministic instruction refs | 74,289 intrinsics |
|
|
176
|
+
| RISC-V unified-db | RVV instruction forms, ISA tags, description, operation | 672 instructions |
|
|
177
|
+
|
|
178
|
+
¹ Counts from the vendored snapshot. See
|
|
179
|
+
[`docs/coverage/summary.json`](docs/coverage/summary.json) for parity
|
|
180
|
+
against upstream and [`docs/SOURCES.md`](docs/SOURCES.md) for licenses.
|
|
181
|
+
|
|
182
|
+
² The full AARCHMRS A64 spec needs a live fetch or a tarball under
|
|
183
|
+
`vendor/arm/`.
|
|
184
|
+
|
|
185
|
+
Each perf row carries a `(measured, <core>)` or `(modeled, <core>)` tag.
|
|
186
|
+
|
|
187
|
+
### Scope
|
|
188
|
+
|
|
189
|
+
- Performance data is x86-only.
|
|
190
|
+
- RISC-V coverage is RVV only, not scalar or privileged ISA.
|
|
191
|
+
|
|
192
|
+
## Development
|
|
193
|
+
|
|
194
|
+
```bash
|
|
195
|
+
git clone https://github.com/simd-labs/simdref.git
|
|
196
|
+
cd simdref
|
|
197
|
+
python3 -m venv .venv
|
|
198
|
+
.venv/bin/pip install -e .
|
|
199
|
+
.venv/bin/isa build # needs llvm-mca 18+
|
|
200
|
+
.venv/bin/python -m pytest tests/ -v
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) and
|
|
204
|
+
[ARCHITECTURE.md](ARCHITECTURE.md).
|
|
205
|
+
|
|
206
|
+
## License
|
|
207
|
+
|
|
208
|
+
[GNU General Public License v3.0](LICENSE).
|
simdref-0.0.12/README.md
ADDED
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
# simdref
|
|
2
|
+
|
|
3
|
+
[](https://github.com/simd-labs/simdref/actions/workflows/ci.yml)
|
|
4
|
+
[](https://test.pypi.org/project/simdref/)
|
|
5
|
+
[](https://pypi.org/project/simdref/)
|
|
6
|
+
|
|
7
|
+
simdref is a SIMD intrinsic and instruction reference for x86 (Intel +
|
|
8
|
+
uops.info), Arm (ACLE, AARCHMRS), and RISC-V (RVV + unified-db). It runs as
|
|
9
|
+
a CLI, a TUI, an LSP server, and an on-demand manpage renderer.
|
|
10
|
+
|
|
11
|
+
[Web app](https://simdref.diamondinoia.com/) ·
|
|
12
|
+
[TestPyPI](https://test.pypi.org/project/simdref/) ·
|
|
13
|
+
[GitHub](https://github.com/simd-labs/simdref) ·
|
|
14
|
+
[Contributing](CONTRIBUTING.md)
|
|
15
|
+
|
|
16
|
+
<p align="center">
|
|
17
|
+
<img alt="simdref TUI" src="https://raw.githubusercontent.com/simd-labs/simdref/refs/assets/docs/img/tui.svg" width="720">
|
|
18
|
+
</p>
|
|
19
|
+
|
|
20
|
+
## Install the Claude Code and Codex skill
|
|
21
|
+
|
|
22
|
+
The `asm-analysis` skill lives in
|
|
23
|
+
[simd-labs/simdref-skill](https://github.com/simd-labs/simdref-skill). Follow
|
|
24
|
+
the install steps in that repo.
|
|
25
|
+
|
|
26
|
+
## Install
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
pip install simdref
|
|
30
|
+
isa update # download the pre-built catalog
|
|
31
|
+
isa doctor # check the install
|
|
32
|
+
isa # open the TUI
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
The package installs two equivalent executables, `isa` and `simdref`. The
|
|
36
|
+
catalog download does not need `llvm-mca`. Only `isa build` needs
|
|
37
|
+
`llvm-mca` 18+ on `PATH`.
|
|
38
|
+
|
|
39
|
+
Pre-release builds live on TestPyPI:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
pip install -i https://test.pypi.org/simple/ \
|
|
43
|
+
--extra-index-url https://pypi.org/simple/ simdref
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Quickstart
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
isa _mm_add_ps # exact intrinsic -> detailed view
|
|
50
|
+
isa VPADDD # exact instruction -> detailed view
|
|
51
|
+
isa _mm_add # fuzzy -> ranked search results
|
|
52
|
+
isa mm add # tokenized query -> intrinsic-biased search
|
|
53
|
+
isa ADD # mnemonic-like -> instruction-biased search
|
|
54
|
+
isa VADDPS 2 # pick variant #2 from the last result list
|
|
55
|
+
isa # open the TUI
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Interfaces
|
|
59
|
+
|
|
60
|
+
The web app at [simdref.diamondinoia.com](https://simdref.diamondinoia.com/)
|
|
61
|
+
reads the JSON site data this repo exports:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
isa export --out-dir ./site-data
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
The LSP server speaks JSON-RPC over stdio:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
simdref-lsp
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Editor clients, one for each editor:
|
|
74
|
+
|
|
75
|
+
- Zed: [zed-simdref](https://github.com/simd-labs/zed-simdref)
|
|
76
|
+
- VS Code: [vscode-simdref](https://github.com/simd-labs/vscode-simdref)
|
|
77
|
+
- JetBrains: [jetbrains-simdref](https://github.com/simd-labs/jetbrains-simdref)
|
|
78
|
+
- Neovim: [nvim-simdref](https://github.com/simd-labs/nvim-simdref)
|
|
79
|
+
|
|
80
|
+
Each client shows a one-line brief at the end of each instruction line and
|
|
81
|
+
the full manpage on hover, from the local catalog.
|
|
82
|
+
|
|
83
|
+
The LLM interface emits JSON and NDJSON with exit codes 0 (match), 1 (bad
|
|
84
|
+
flag), 2 (no match), 3 (ambiguous):
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
isa llm query _mm_add_ps --source-kind measured
|
|
88
|
+
echo -e "_mm_add_ps\nVPADDD" | isa llm batch
|
|
89
|
+
isa llm list --pattern "*gather*" --isa Intel
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
See [docs/LLM.md](docs/LLM.md) for the payload shape.
|
|
93
|
+
|
|
94
|
+
The annotator turns compiler `.s` output into an annotated `.sa` file.
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
isa annotate hello_simd.s # writes hello_simd.sa
|
|
98
|
+
isa annotate hello_simd.s --arch skylake-x -o - # stdout, skylake-x only
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
The annotator adds a trailing comment with the summary, latency, and CPI to
|
|
102
|
+
each instruction line. The output stays valid assembly.
|
|
103
|
+
|
|
104
|
+
## Commands
|
|
105
|
+
|
|
106
|
+
`isa --help` groups commands into Commands and Dev commands.
|
|
107
|
+
|
|
108
|
+
Commands
|
|
109
|
+
|
|
110
|
+
| Command | Description |
|
|
111
|
+
| ----------------------- | ------------------------------------------------------------------------- |
|
|
112
|
+
| `isa` | Open the TUI |
|
|
113
|
+
| `isa <query>` | Open the TUI with the query in a TTY, else print ranked results to stdout |
|
|
114
|
+
| `isa doctor` | Check the install, non-zero exit on failure |
|
|
115
|
+
| `isa update` | Download the pre-built catalog, `--from-release` for the GitHub Release |
|
|
116
|
+
| `isa annotate <file.s>` | Annotate a `.s` file with summaries and latency/CPI, writes `<file>.sa` |
|
|
117
|
+
| `isa man <name>` | Show a manpage, rendered on demand |
|
|
118
|
+
| `isa install-manpages` | Pre-generate man7 pages so plain `man vpaddd` works |
|
|
119
|
+
| `isa llm query <q>` | Strict lookup to JSON, NDJSON, or Markdown |
|
|
120
|
+
| `isa llm batch` | Resolve many queries from stdin in one invocation |
|
|
121
|
+
| `isa llm list` | Emit the FilterSpec or stream matching catalog entries |
|
|
122
|
+
| `isa llm schema` | Print the JSON schema for `llm` payloads |
|
|
123
|
+
|
|
124
|
+
Dev commands
|
|
125
|
+
|
|
126
|
+
| Command | Description |
|
|
127
|
+
| -------------------------------- | ------------------------------------------------------- |
|
|
128
|
+
| `isa build` | Rebuild the catalog from upstream, needs `llvm-mca` 18+ |
|
|
129
|
+
| `isa export` | Export the site-data JSON for the `simdref-web` repo |
|
|
130
|
+
| `isa completion install [SHELL]` | Install shell completion into the user profile |
|
|
131
|
+
| `isa completion show [SHELL]` | Print the completion script |
|
|
132
|
+
|
|
133
|
+
## Data sources
|
|
134
|
+
|
|
135
|
+
| Source | What | Entries¹ |
|
|
136
|
+
| ----------------------- | ------------------------------------------------------- | ------------------ |
|
|
137
|
+
| Intel Intrinsics Guide | Signatures, descriptions, ISA, categories | 7,381 intrinsics |
|
|
138
|
+
| uops.info | Instructions, operands, latency, throughput, ports | 2,558 instructions |
|
|
139
|
+
| Arm ACLE (NEON, SVE) | Intrinsic signatures and descriptions | 10,791 intrinsics |
|
|
140
|
+
| Arm AARCHMRS (A64) | Base instruction forms and operand tables | live-only² |
|
|
141
|
+
| riscv-rvv-intrinsic-doc | RVV intrinsics with deterministic instruction refs | 74,289 intrinsics |
|
|
142
|
+
| RISC-V unified-db | RVV instruction forms, ISA tags, description, operation | 672 instructions |
|
|
143
|
+
|
|
144
|
+
¹ Counts from the vendored snapshot. See
|
|
145
|
+
[`docs/coverage/summary.json`](docs/coverage/summary.json) for parity
|
|
146
|
+
against upstream and [`docs/SOURCES.md`](docs/SOURCES.md) for licenses.
|
|
147
|
+
|
|
148
|
+
² The full AARCHMRS A64 spec needs a live fetch or a tarball under
|
|
149
|
+
`vendor/arm/`.
|
|
150
|
+
|
|
151
|
+
Each perf row carries a `(measured, <core>)` or `(modeled, <core>)` tag.
|
|
152
|
+
|
|
153
|
+
### Scope
|
|
154
|
+
|
|
155
|
+
- Performance data is x86-only.
|
|
156
|
+
- RISC-V coverage is RVV only, not scalar or privileged ISA.
|
|
157
|
+
|
|
158
|
+
## Development
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
git clone https://github.com/simd-labs/simdref.git
|
|
162
|
+
cd simdref
|
|
163
|
+
python3 -m venv .venv
|
|
164
|
+
.venv/bin/pip install -e .
|
|
165
|
+
.venv/bin/isa build # needs llvm-mca 18+
|
|
166
|
+
.venv/bin/python -m pytest tests/ -v
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) and
|
|
170
|
+
[ARCHITECTURE.md](ARCHITECTURE.md).
|
|
171
|
+
|
|
172
|
+
## License
|
|
173
|
+
|
|
174
|
+
[GNU General Public License v3.0](LICENSE).
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "simdref"
|
|
7
|
-
version = "0.0.
|
|
7
|
+
version = "0.0.12"
|
|
8
8
|
description = "Searchable SIMD intrinsic and instruction reference with CLI, manpages, TUI, and LSP."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -83,17 +83,32 @@ def _word_at(text: str, line: int, character: int) -> str | None:
|
|
|
83
83
|
if line >= len(lines):
|
|
84
84
|
return None
|
|
85
85
|
current = lines[line]
|
|
86
|
+
character = _code_point_index(current, character)
|
|
86
87
|
for match in WORD_RE.finditer(current):
|
|
87
88
|
if match.start() <= character <= match.end():
|
|
88
89
|
return match.group(0)
|
|
89
90
|
return None
|
|
90
91
|
|
|
91
92
|
|
|
93
|
+
def _code_point_index(line: str, character: int) -> int:
|
|
94
|
+
# LSP columns count UTF-16 code units; Python indexes code points.
|
|
95
|
+
units, index = 0, 0
|
|
96
|
+
while index < len(line) and units < character:
|
|
97
|
+
units += 2 if ord(line[index]) > 0xFFFF else 1
|
|
98
|
+
index += 1
|
|
99
|
+
return index
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def _utf16_column(line: str, index: int) -> int:
|
|
103
|
+
# The reverse of _code_point_index: a code-point index to a UTF-16 column.
|
|
104
|
+
return sum(2 if ord(c) > 0xFFFF else 1 for c in line[:index])
|
|
105
|
+
|
|
106
|
+
|
|
92
107
|
def _line_prefix(text: str, line: int, character: int) -> str:
|
|
93
108
|
lines = text.splitlines()
|
|
94
109
|
if line >= len(lines):
|
|
95
110
|
return ""
|
|
96
|
-
current = lines[line][:character]
|
|
111
|
+
current = lines[line][: _code_point_index(lines[line], character)]
|
|
97
112
|
match = re.search(WORD_RE.pattern + r"$", current)
|
|
98
113
|
return match.group(0) if match else ""
|
|
99
114
|
|
|
@@ -267,7 +282,9 @@ def _asm_literals(text: str) -> list[tuple[int, str]]:
|
|
|
267
282
|
|
|
268
283
|
|
|
269
284
|
def _in_asm_string(text: str, line: int, character: int) -> bool:
|
|
270
|
-
offset = sum(len(item) + 1 for item in text.split("\n")[:line]) +
|
|
285
|
+
offset = sum(len(item) + 1 for item in text.split("\n")[:line]) + _code_point_index(
|
|
286
|
+
text.split("\n")[line], character
|
|
287
|
+
)
|
|
271
288
|
return any(start <= offset <= start + len(body) for start, body in _asm_literals(text))
|
|
272
289
|
|
|
273
290
|
|
|
@@ -362,7 +379,7 @@ def _inlay_hints(conn, text: str, language_id: str, uri: str, start: int, end: i
|
|
|
362
379
|
# LSP columns count UTF-16 code units.
|
|
363
380
|
"position": {
|
|
364
381
|
"line": line,
|
|
365
|
-
"character": len(source_lines[line]
|
|
382
|
+
"character": _utf16_column(source_lines[line], len(source_lines[line])),
|
|
366
383
|
},
|
|
367
384
|
"label": _cut_label("; ".join(hints[line])),
|
|
368
385
|
"paddingLeft": True,
|
|
@@ -442,16 +459,27 @@ def main() -> int:
|
|
|
442
459
|
operand_count = None
|
|
443
460
|
operand_text = ""
|
|
444
461
|
if word and allow_instruction:
|
|
445
|
-
offset = sum(len(item) + 1 for item in text.split("\n")[:line]) +
|
|
462
|
+
offset = sum(len(item) + 1 for item in text.split("\n")[:line]) + _code_point_index(
|
|
463
|
+
text.split("\n")[line], character
|
|
464
|
+
)
|
|
446
465
|
language_id = session.languages.get(uri, "")
|
|
447
466
|
segment = _asm_line_at(text, language_id, uri, offset)
|
|
448
467
|
if segment:
|
|
449
468
|
operand_text = segment
|
|
469
|
+
# The C-escape pair "\t" starts a segment in asm("...\n\t...").
|
|
470
|
+
# Strip the backslash so the mnemonic survives.
|
|
450
471
|
parsed = _mnemonic_from_asm_line(
|
|
451
|
-
segment, _semicolon_is_comment(language_id, uri)
|
|
472
|
+
segment.lstrip("\\"), _semicolon_is_comment(language_id, uri)
|
|
452
473
|
)
|
|
453
|
-
if parsed
|
|
454
|
-
|
|
474
|
+
if parsed:
|
|
475
|
+
if parsed[0].casefold() == word.casefold():
|
|
476
|
+
operand_count = parsed[1]
|
|
477
|
+
elif word.casefold().endswith(parsed[0].casefold()):
|
|
478
|
+
# The raw word can swallow a preceding escape character:
|
|
479
|
+
# on "\tvmulps" _word_at reads "tvmulps", but the parsed
|
|
480
|
+
# segment names the real mnemonic.
|
|
481
|
+
word = parsed[0]
|
|
482
|
+
operand_count = parsed[1]
|
|
455
483
|
body = (
|
|
456
484
|
_hover_markdown(
|
|
457
485
|
conn,
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: simdref
|
|
3
|
+
Version: 0.0.12
|
|
4
|
+
Summary: Searchable SIMD intrinsic and instruction reference with CLI, manpages, TUI, and LSP.
|
|
5
|
+
Author: Marco
|
|
6
|
+
License: GPL-3.0-or-later
|
|
7
|
+
Classifier: Development Status :: 3 - Alpha
|
|
8
|
+
Classifier: Environment :: Console
|
|
9
|
+
Classifier: Intended Audience :: Developers
|
|
10
|
+
Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
|
|
11
|
+
Classifier: Operating System :: OS Independent
|
|
12
|
+
Classifier: Programming Language :: Python :: 3
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
18
|
+
Classifier: Topic :: Software Development :: Documentation
|
|
19
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
20
|
+
Requires-Python: >=3.10
|
|
21
|
+
Description-Content-Type: text/markdown
|
|
22
|
+
License-File: LICENSE
|
|
23
|
+
Requires-Dist: click<9,>=8.5
|
|
24
|
+
Requires-Dist: httpx<1,>=0.28
|
|
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
|
|
33
|
+
Dynamic: license-file
|
|
34
|
+
|
|
35
|
+
# simdref
|
|
36
|
+
|
|
37
|
+
[](https://github.com/simd-labs/simdref/actions/workflows/ci.yml)
|
|
38
|
+
[](https://test.pypi.org/project/simdref/)
|
|
39
|
+
[](https://pypi.org/project/simdref/)
|
|
40
|
+
|
|
41
|
+
simdref is a SIMD intrinsic and instruction reference for x86 (Intel +
|
|
42
|
+
uops.info), Arm (ACLE, AARCHMRS), and RISC-V (RVV + unified-db). It runs as
|
|
43
|
+
a CLI, a TUI, an LSP server, and an on-demand manpage renderer.
|
|
44
|
+
|
|
45
|
+
[Web app](https://simdref.diamondinoia.com/) ·
|
|
46
|
+
[TestPyPI](https://test.pypi.org/project/simdref/) ·
|
|
47
|
+
[GitHub](https://github.com/simd-labs/simdref) ·
|
|
48
|
+
[Contributing](CONTRIBUTING.md)
|
|
49
|
+
|
|
50
|
+
<p align="center">
|
|
51
|
+
<img alt="simdref TUI" src="https://raw.githubusercontent.com/simd-labs/simdref/refs/assets/docs/img/tui.svg" width="720">
|
|
52
|
+
</p>
|
|
53
|
+
|
|
54
|
+
## Install the Claude Code and Codex skill
|
|
55
|
+
|
|
56
|
+
The `asm-analysis` skill lives in
|
|
57
|
+
[simd-labs/simdref-skill](https://github.com/simd-labs/simdref-skill). Follow
|
|
58
|
+
the install steps in that repo.
|
|
59
|
+
|
|
60
|
+
## Install
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
pip install simdref
|
|
64
|
+
isa update # download the pre-built catalog
|
|
65
|
+
isa doctor # check the install
|
|
66
|
+
isa # open the TUI
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
The package installs two equivalent executables, `isa` and `simdref`. The
|
|
70
|
+
catalog download does not need `llvm-mca`. Only `isa build` needs
|
|
71
|
+
`llvm-mca` 18+ on `PATH`.
|
|
72
|
+
|
|
73
|
+
Pre-release builds live on TestPyPI:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
pip install -i https://test.pypi.org/simple/ \
|
|
77
|
+
--extra-index-url https://pypi.org/simple/ simdref
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Quickstart
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
isa _mm_add_ps # exact intrinsic -> detailed view
|
|
84
|
+
isa VPADDD # exact instruction -> detailed view
|
|
85
|
+
isa _mm_add # fuzzy -> ranked search results
|
|
86
|
+
isa mm add # tokenized query -> intrinsic-biased search
|
|
87
|
+
isa ADD # mnemonic-like -> instruction-biased search
|
|
88
|
+
isa VADDPS 2 # pick variant #2 from the last result list
|
|
89
|
+
isa # open the TUI
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Interfaces
|
|
93
|
+
|
|
94
|
+
The web app at [simdref.diamondinoia.com](https://simdref.diamondinoia.com/)
|
|
95
|
+
reads the JSON site data this repo exports:
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
isa export --out-dir ./site-data
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
The LSP server speaks JSON-RPC over stdio:
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
simdref-lsp
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
Editor clients, one for each editor:
|
|
108
|
+
|
|
109
|
+
- Zed: [zed-simdref](https://github.com/simd-labs/zed-simdref)
|
|
110
|
+
- VS Code: [vscode-simdref](https://github.com/simd-labs/vscode-simdref)
|
|
111
|
+
- JetBrains: [jetbrains-simdref](https://github.com/simd-labs/jetbrains-simdref)
|
|
112
|
+
- Neovim: [nvim-simdref](https://github.com/simd-labs/nvim-simdref)
|
|
113
|
+
|
|
114
|
+
Each client shows a one-line brief at the end of each instruction line and
|
|
115
|
+
the full manpage on hover, from the local catalog.
|
|
116
|
+
|
|
117
|
+
The LLM interface emits JSON and NDJSON with exit codes 0 (match), 1 (bad
|
|
118
|
+
flag), 2 (no match), 3 (ambiguous):
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
isa llm query _mm_add_ps --source-kind measured
|
|
122
|
+
echo -e "_mm_add_ps\nVPADDD" | isa llm batch
|
|
123
|
+
isa llm list --pattern "*gather*" --isa Intel
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
See [docs/LLM.md](docs/LLM.md) for the payload shape.
|
|
127
|
+
|
|
128
|
+
The annotator turns compiler `.s` output into an annotated `.sa` file.
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
isa annotate hello_simd.s # writes hello_simd.sa
|
|
132
|
+
isa annotate hello_simd.s --arch skylake-x -o - # stdout, skylake-x only
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
The annotator adds a trailing comment with the summary, latency, and CPI to
|
|
136
|
+
each instruction line. The output stays valid assembly.
|
|
137
|
+
|
|
138
|
+
## Commands
|
|
139
|
+
|
|
140
|
+
`isa --help` groups commands into Commands and Dev commands.
|
|
141
|
+
|
|
142
|
+
Commands
|
|
143
|
+
|
|
144
|
+
| Command | Description |
|
|
145
|
+
| ----------------------- | ------------------------------------------------------------------------- |
|
|
146
|
+
| `isa` | Open the TUI |
|
|
147
|
+
| `isa <query>` | Open the TUI with the query in a TTY, else print ranked results to stdout |
|
|
148
|
+
| `isa doctor` | Check the install, non-zero exit on failure |
|
|
149
|
+
| `isa update` | Download the pre-built catalog, `--from-release` for the GitHub Release |
|
|
150
|
+
| `isa annotate <file.s>` | Annotate a `.s` file with summaries and latency/CPI, writes `<file>.sa` |
|
|
151
|
+
| `isa man <name>` | Show a manpage, rendered on demand |
|
|
152
|
+
| `isa install-manpages` | Pre-generate man7 pages so plain `man vpaddd` works |
|
|
153
|
+
| `isa llm query <q>` | Strict lookup to JSON, NDJSON, or Markdown |
|
|
154
|
+
| `isa llm batch` | Resolve many queries from stdin in one invocation |
|
|
155
|
+
| `isa llm list` | Emit the FilterSpec or stream matching catalog entries |
|
|
156
|
+
| `isa llm schema` | Print the JSON schema for `llm` payloads |
|
|
157
|
+
|
|
158
|
+
Dev commands
|
|
159
|
+
|
|
160
|
+
| Command | Description |
|
|
161
|
+
| -------------------------------- | ------------------------------------------------------- |
|
|
162
|
+
| `isa build` | Rebuild the catalog from upstream, needs `llvm-mca` 18+ |
|
|
163
|
+
| `isa export` | Export the site-data JSON for the `simdref-web` repo |
|
|
164
|
+
| `isa completion install [SHELL]` | Install shell completion into the user profile |
|
|
165
|
+
| `isa completion show [SHELL]` | Print the completion script |
|
|
166
|
+
|
|
167
|
+
## Data sources
|
|
168
|
+
|
|
169
|
+
| Source | What | Entries¹ |
|
|
170
|
+
| ----------------------- | ------------------------------------------------------- | ------------------ |
|
|
171
|
+
| Intel Intrinsics Guide | Signatures, descriptions, ISA, categories | 7,381 intrinsics |
|
|
172
|
+
| uops.info | Instructions, operands, latency, throughput, ports | 2,558 instructions |
|
|
173
|
+
| Arm ACLE (NEON, SVE) | Intrinsic signatures and descriptions | 10,791 intrinsics |
|
|
174
|
+
| Arm AARCHMRS (A64) | Base instruction forms and operand tables | live-only² |
|
|
175
|
+
| riscv-rvv-intrinsic-doc | RVV intrinsics with deterministic instruction refs | 74,289 intrinsics |
|
|
176
|
+
| RISC-V unified-db | RVV instruction forms, ISA tags, description, operation | 672 instructions |
|
|
177
|
+
|
|
178
|
+
¹ Counts from the vendored snapshot. See
|
|
179
|
+
[`docs/coverage/summary.json`](docs/coverage/summary.json) for parity
|
|
180
|
+
against upstream and [`docs/SOURCES.md`](docs/SOURCES.md) for licenses.
|
|
181
|
+
|
|
182
|
+
² The full AARCHMRS A64 spec needs a live fetch or a tarball under
|
|
183
|
+
`vendor/arm/`.
|
|
184
|
+
|
|
185
|
+
Each perf row carries a `(measured, <core>)` or `(modeled, <core>)` tag.
|
|
186
|
+
|
|
187
|
+
### Scope
|
|
188
|
+
|
|
189
|
+
- Performance data is x86-only.
|
|
190
|
+
- RISC-V coverage is RVV only, not scalar or privileged ISA.
|
|
191
|
+
|
|
192
|
+
## Development
|
|
193
|
+
|
|
194
|
+
```bash
|
|
195
|
+
git clone https://github.com/simd-labs/simdref.git
|
|
196
|
+
cd simdref
|
|
197
|
+
python3 -m venv .venv
|
|
198
|
+
.venv/bin/pip install -e .
|
|
199
|
+
.venv/bin/isa build # needs llvm-mca 18+
|
|
200
|
+
.venv/bin/python -m pytest tests/ -v
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) and
|
|
204
|
+
[ARCHITECTURE.md](ARCHITECTURE.md).
|
|
205
|
+
|
|
206
|
+
## License
|
|
207
|
+
|
|
208
|
+
[GNU General Public License v3.0](LICENSE).
|