Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
115 changes: 115 additions & 0 deletions .claude/skills/extract-instructions-from-subsection/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
---
name: extract-instructions-from-subsection
description: Extract RISC-V instruction names from a named subsection of an AsciiDoc file and write them to /tmp/<subsection-title>.yaml.
argument-hint: <subsection-title> <adoc-file>
allowed-tools: Read, Bash, Write
---

Copyright (c) 2026 Qualcomm Technologies, Inc. and/or its subsidiaries.
SPDX-License-Identifier: BSD-3-Clause

Extract all RISC-V instruction names mentioned in the specified subsection of the given AsciiDoc file, then write them to `/tmp/<subsection-title>.yaml`, where `<subsection-title>` is argument 1 lowercased with spaces replaced by hyphens (e.g., `"Multiplication Operations"` → `/tmp/multiplication-operations.yaml`).

## Arguments

$ARGUMENTS

- **Argument 1**: The subsection title to search for (e.g., `"Multiplication Operations"` or `"Integer Register-Immediate Instructions"`).
- **Argument 2**: Path to the AsciiDoc file (e.g., `ext/riscv-isa-manual/src/m-st-ext.adoc`).

If either argument is missing, ask the user to provide it.

## Steps

### 1. Read the AsciiDoc file

Read the full content of the AsciiDoc file given as argument 2.

### 2. Locate the subsection

Find the subsection whose title matches argument 1. AsciiDoc section headings use `=` prefixes:
- `== Title` — level 1 (chapter)
- `=== Title` — level 2
- `==== Title` — level 3
- `===== Title` — level 4

Match the subsection title case-insensitively. The subsection's content starts on the line after the heading and ends just before the next heading of equal or higher level (i.e., same or fewer `=` characters).

### 3. Identify NOTE blocks to skip

Before scanning for instructions, mark all NOTE blocks in the subsection so they can be excluded. AsciiDoc NOTE blocks appear in two forms:

- **Delimited block**: starts with `[NOTE]` followed by `====` on the next line, and ends at the closing `====`.
- **Inline note**: a single line starting with `NOTE:` (no delimiter).

Any instruction name that appears **only** inside NOTE blocks — and nowhere else in the subsection — must be excluded from the output. If an instruction appears both inside and outside a NOTE block, include it.

### 4. Extract instruction names

Scan the non-NOTE text of the subsection for RISC-V instruction names. Instruction names appear as **uppercase tokens** in the prose. Use the following rules to identify them:

**Patterns that indicate an instruction name:**
- All-uppercase words of 2–10 characters that consist only of letters, digits, dots, and brackets (e.g., `ADD`, `ADDI`, `MULHSU`, `FENCE.TSO`, `LR.W`, `SC.D`, `C.ADD`)
- Uppercase tokens inside backticks: `` `ADD` ``, `` `JALR` ``
- Uppercase tokens in AsciiDoc index entries: `(((MUL, MULH)))` — extract each comma-separated token
- Uppercase tokens in AsciiDoc comment lines like `//.Integer register-register` — skip these (they are labels, not instructions)

**Exclude pseudoinstructions:**
The prose explicitly signals pseudoinstructions with the phrase "assembler pseudoinstruction" or "pseudoinstruction" adjacent to the name, e.g.:
- `assembler pseudoinstruction SNEZ _rd, rs_`
- `assembler pseudoinstruction MV _rd, rs1_`
- `assembler pseudoinstruction SEQZ _rd, rs_`
- `assembler pseudoinstruction NOT _rd, rs_`
- `assembler pseudoinstruction J`
- `assembler pseudoinstruction RET`
- `assembler pseudoinstruction JR`

Any token introduced by "pseudoinstruction" (with or without "assembler") must be excluded, even if it appears elsewhere in the subsection outside a pseudoinstruction context. Collect all pseudoinstruction names first, then exclude them from the final list.

**The following tokens should never be considered instruction names:**
`XLEN`, `RV32`, `RV64`, `RV32I`, `RV64I`, `RV128I`, `ISA`, `ABI`, `PC`, `CSR`, `IALIGN`, `BTB`, `RAS`, `FPGA`, `MIPS`, `RISC`, `RISCV`, `RISC-V`, `L`, `M`, `S`, `B`, `J`, `R`, `I`, `U`

Single-letter tokens (`R`, `I`, `S`, `B`, `U`, `J`) are format names, not instructions — exclude them.

Tokens that are register names (`x0`–`x31`, `rd`, `rs1`, `rs2`) — exclude them.

### 5. Deduplicate and normalize

- Convert all extracted names to **lowercase** (matching the RISC-V Unified Database YAML file naming convention, e.g., `ADD` → `add`, `MULHSU` → `mulhsu`, `FENCE.TSO` → `fence.tso`, `LR.W` → `lr.w`)
- Remove duplicates
- Sort alphabetically

### 6. Write the output

Derive the output filename from argument 1: lowercase it and replace spaces with hyphens (e.g., `"Multiplication Operations"` → `multiplication-operations`). Write `/tmp/<derived-name>.yaml` with the following format:

```yaml
instructions:
- add
- addi
- mul
- mulh
```

Use the Write tool to create the file.

### 7. Report

Print a summary:
- The subsection title found
- The number of instructions extracted
- The path written (e.g., `/tmp/multiplication-operations.yaml`)
- The list of instructions

## Example

For subsection `"Multiplication Operations"` in `ext/riscv-isa-manual/src/m-st-ext.adoc`, the output file is `/tmp/multiplication-operations.yaml`:

```yaml
instructions:
- mul
- mulh
- mulhsu
- mulhu
- mulw
```
191 changes: 191 additions & 0 deletions .claude/skills/model-instruction-from-spec/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,191 @@
---
name: model-instruction-from-spec
description: Generate an IDL operation() model for a RISC-V instruction from its YAML spec file.
argument-hint: <instruction-name>
allowed-tools: Read, Glob, Grep, Write, Edit
---

Copyright (c) 2026 Qualcomm Technologies, Inc. and/or its subsidiaries.
SPDX-License-Identifier: BSD-3-Clause

Given a RISC-V instruction name, locate its YAML spec file under `spec/std/isa/inst/`, read the instruction's description and encoding, then generate a correct IDL `operation()` body using the IDL language defined by the Treetop grammar in `tools/ruby-gems/idlc/lib/idlc/idl.treetop`.

Write the generated IDL code into the `operation()` key of the spec YAML file **only if that key is currently empty**. If `operation()` already has content, write the new IDL code to `/tmp/$ARGUMENT[0].yaml` instead.

## Arguments

$ARGUMENTS

- **Argument 1**: The instruction name (e.g., `vmv.v.i`, `mul`, `jalr`). The name must match the `name:` field in the YAML spec file.

If the argument is missing, ask the user to provide it.

## Steps

### 1. Locate the instruction YAML file

Search for the instruction's YAML spec file under `spec/std/isa/inst/`. The file is named `<instruction-name>.yaml` and may be in any subdirectory. Use the Glob tool with the pattern `spec/std/isa/inst/**/<instruction-name>.yaml`.

If no file is found, report the error and stop.

### 2. Read the instruction spec

Read the full YAML file. Pay close attention to:

- **`description`**: Natural-language description of what the instruction does.
- **`encoding`**: The bit-field layout, including `match` pattern and `variables` (operand names and bit positions).
- **`assembly`**: The assembly syntax (operand names used in the instruction).
- **`definedBy`**: The extension(s) that define this instruction.
- **`access`**: Privilege levels at which the instruction is accessible.
- **`operation()`**: The current value — check whether it is empty (just `|` with no following content before the next key) or already populated.

### 3. Study IDL patterns from reference files

Before writing IDL, read the following reference files to understand IDL syntax and conventions:

- `spec/std/isa/inst/M/mul.yaml` — simple arithmetic with extension check
- `spec/std/isa/inst/M/div.yaml` — arithmetic with special-case handling
- `spec/std/isa/inst/I/jalr.yaml` — control flow with register read/write
- `spec/std/isa/inst/V/vmv.v.i.yaml` — vector instruction with loop and CSR access

Key IDL language rules (from `tools/ruby-gems/idlc/lib/idlc/idl.treetop`):

**Types:**
- `XReg` — XLEN-wide integer register value
- `Bits<N>` — N-bit value
- `U32`, `U64` — unsigned integers
- `Boolean` — boolean value
- Custom struct/enum types (e.g., `VectorState`, `VmaOrderType`)

**Register access:**
- `X[reg_name]` — read/write integer register (e.g., `X[xs1]`, `X[xd]`)
- `f[reg_name]` — read/write floating-point register (e.g., `f[fs1]`, `f[fs2]`, `f[fd]`)
- `CSR[csr_name].FIELD` — read/write CSR field (e.g., `CSR[misa].M`, `CSR[vstart].VALUE`)
- `v[vd]` — vector register access

**Bit operations:**
- Bit slice: `expr[msb:lsb]` (e.g., `src1[MXLEN-1:0]`)
- Concatenation: `{a, b, c}` (Verilog-style)
- Replication: `{N{expr}}` (e.g., `{MXLEN{1'b1}}`)
- Sign cast: `$signed(expr)`
- Widening multiply: `` `* `` operator

**Integer literals:**
- Verilog-style: `32'h0`, `1'b1`, `MXLEN'1`
- C-style: `0`, `0xFF`, `0b1010`

**Control flow:**
- `if (cond) { ... } else if (cond) { ... } else { ... }`
- `for (Type i = start; i < end; i++) { ... }`

**Exception raising:**
- `raise(ExceptionCode::IllegalInstruction, mode(), $encoding);`
- `raise(ExceptionCode::VirtualInstruction, mode(), $encoding);`

**Extension check:**
- `implemented?(ExtensionName::M)` — check if extension is implemented

**Special variables:**
- `$pc` — program counter
- `$encoding` — current instruction encoding
- `MXLEN` — machine XLEN
- `VLEN` — vector register length

**Comments:** Use `#` for line comments.

### 4. Generate the IDL operation() body

Using the instruction's description and encoding variables, write the IDL `operation()` body. Follow these guidelines:

1. **Extension check first**: If the instruction is defined by an optional extension (not base I), add a check at the top:
```
if (implemented?(ExtensionName::X) && (CSR[misa].X == 1'b0)) {
raise (ExceptionCode::IllegalInstruction, mode(), $encoding);
}
```

2. **Privilege checks**: If `access` restricts the instruction to certain modes, raise `IllegalInstruction` for unauthorized modes.

3. **Read operands**: Declare local variables for register operands before using them:
```
XReg src1 = X[xs1];
XReg src2 = X[xs2];
```

4. **Implement the behavior**: Translate the description into IDL statements. Use bit operations, arithmetic, and control flow as needed.

5. **Write results**: Assign to destination registers last:
```
X[xd] = result;
```

6. **Vector instructions**: For vector instructions, iterate over elements using `CSR[vstart].VALUE` to `CSR[vl].VALUE`, access vector state via `vector_state()`, and reset `CSR[vstart].VALUE = 0` at the end.

7. **Comments**: Add `#` comments to explain non-obvious logic, special cases, and edge conditions.

The IDL body must be syntactically valid per the grammar in `tools/ruby-gems/idlc/lib/idlc/idl.treetop`. Do not use constructs not present in the grammar (e.g., no `switch`, no `while`, no `return` in operation bodies).

### 5. Determine where to write the output

Check the `operation()` key in the YAML file:

- **Empty** (the key exists but has no content — just `operation(): |` followed immediately by the next key or end of file): write the generated IDL directly into the YAML file using the Edit tool, replacing the empty `operation(): |` line with `operation(): |` followed by the indented IDL body (2-space indent per line).

- **Already populated** (the key has existing IDL content): do **not** modify the spec file. Instead, write the generated IDL to `/tmp/<instruction-name>.yaml` with the format:

```yaml
operation(): |
<generated IDL body, 2-space indented>
```

### 6. Write the output

**If writing to the spec YAML file:**

Use the Edit tool to replace the empty `operation(): |` block. The replacement must preserve the YAML structure — the IDL lines must be indented with 2 spaces, and the next top-level key must remain at column 0.

Example — replacing an empty operation():
```
operation(): |
# IDL code here
XReg src = X[xs1];
X[xd] = src + 1;

```
(Leave a blank line before the next key to match YAML block scalar conventions.)

**If writing to /tmp:**

Use the Write tool to create `/tmp/<instruction-name>.yaml` with:
```yaml
operation(): |
# IDL code here
XReg src = X[xs1];
X[xd] = src + 1;
```

### 7. Report

Print a summary:
- The instruction name
- The YAML file found
- Whether the IDL was written to the spec file or to `/tmp/<instruction-name>.yaml`
- The generated IDL code

## Example

For instruction `mul`:

The file `spec/std/isa/inst/M/mul.yaml` already has a populated `operation()` key, so the output goes to `/tmp/mul.yaml`:

```yaml
operation(): |
if (implemented?(ExtensionName::M) && (CSR[misa].M == 1'b0)) {
raise (ExceptionCode::IllegalInstruction, mode(), $encoding);
}

XReg src1 = X[xs1];
XReg src2 = X[xs2];

X[xd] = (src1 * src2)[MXLEN-1:0];
```
2 changes: 1 addition & 1 deletion ext/docs-resources
Submodule docs-resources updated 70 files
+0 −3 .gitignore
+2 −2 .pre-commit-config.yaml
+0 −58 CONTRIBUTING.md
+0 −319 Makefile
+17 −11 README.md
+0 −166 converters/tags.rb
+48 −0 fira_code.css
+2,300 −0 fonts/Atkinson-Hyperlegible-Bold-102.svg
+ fonts/Atkinson-Hyperlegible-Bold-102.ttf
+ fonts/Atkinson-Hyperlegible-Bold-102.woff
+ fonts/Atkinson-Hyperlegible-Bold-102a.woff2
+2,303 −0 fonts/Atkinson-Hyperlegible-BoldItalic-102.svg
+ fonts/Atkinson-Hyperlegible-BoldItalic-102.ttf
+ fonts/Atkinson-Hyperlegible-BoldItalic-102.woff
+ fonts/Atkinson-Hyperlegible-BoldItalic-102a.woff2
+ fonts/Atkinson-Hyperlegible-Font-License-2020-1104.pdf
+1,912 −0 fonts/Atkinson-Hyperlegible-Italic-102.svg
+ fonts/Atkinson-Hyperlegible-Italic-102.ttf
+ fonts/Atkinson-Hyperlegible-Italic-102.woff
+ fonts/Atkinson-Hyperlegible-Italic-102a.woff2
+1,895 −0 fonts/Atkinson-Hyperlegible-Regular-102.svg
+ fonts/Atkinson-Hyperlegible-Regular-102.ttf
+ fonts/Atkinson-Hyperlegible-Regular-102.woff
+ fonts/Atkinson-Hyperlegible-Regular-102a.woff2
+ fonts/FiraCode-Bold.ttf
+ fonts/FiraCode-Bold.woff
+ fonts/FiraCode-Bold.woff2
+ fonts/FiraCode-Light.ttf
+ fonts/FiraCode-Light.woff
+ fonts/FiraCode-Light.woff2
+ fonts/FiraCode-Medium.ttf
+ fonts/FiraCode-Medium.woff
+ fonts/FiraCode-Medium.woff2
+ fonts/FiraCode-Regular.ttf
+ fonts/FiraCode-Regular.woff
+ fonts/FiraCode-Regular.woff2
+ fonts/FiraCode-Retina.ttf
+ fonts/FiraCode-SemiBold.ttf
+ fonts/FiraCode-SemiBold.woff
+ fonts/FiraCode-SemiBold.woff2
+ fonts/FiraCode-VF.woff
+ fonts/FiraCode-VF.woff2
+93 −0 fonts/LICENSE-FiraCode.txt
+ fonts/droid-sans-fallback.ttf
+0 −155 normative-rules.md
+0 −107 schemas/common-schema.json
+0 −142 schemas/defs-schema.json
+0 −142 schemas/norm-rules-schema.json
+0 −169 tests/norm-rule/expected/test-ch1-norm-tags.json
+0 −65 tests/norm-rule/expected/test-ch2-norm-tags.json
+0 −802 tests/norm-rule/expected/test-norm-rules.html
+0 −1,077 tests/norm-rule/expected/test-norm-rules.json
+0 −72 tests/norm-rule/missing_tag_refs.yaml
+0 −266 tests/norm-rule/test-ch1.adoc
+0 −163 tests/norm-rule/test-ch1.yaml
+0 −68 tests/norm-rule/test-ch2.adoc
+0 −46 tests/norm-rule/test-ch2.yaml
+0 −60 tests/tag-changes/additions-only.json
+0 −59 tests/tag-changes/current.json
+0 −59 tests/tag-changes/formatting-only.json
+0 −59 tests/tag-changes/modifications-only.json
+0 −59 tests/tag-changes/reference.json
+0 −59 tests/tag-changes/whitespace-only.json
+0 −7 tests/tags/duplicate.adoc
+25 −27 themes/riscv-pdf.yml
+0 −204 tools/README_detect_tag_changes.md
+0 −1,777 tools/archive/create_normative_rules.rb
+0 −327 tools/archive/detect_tag_changes.rb
+0 −1,662 tools/create_normative_rules.py
+0 −356 tools/detect_tag_changes.py
2 changes: 1 addition & 1 deletion ext/rbi-central
Submodule rbi-central updated 69 files
+1 −1 .github/workflows/ci.yml
+1 −1 .github/workflows/dependabot_automerge.yml
+26 −0 .github/workflows/team_ruby_dx.yml
+1 −1 .ruby-version
+40 −44 Gemfile.lock
+50 −52 gem/Gemfile.lock
+0 −7 gem/lib/rbi-central.rb
+2 −6 gem/lib/rbi-central/gem.rb
+0 −9 gem/lib/rbi-central/repo.rb
+2 −6 gem/lib/rbi-central/static/context.rb
+2 −2 gem/rbi-central.gemspec
+28 −30 gem/sorbet/rbi/gems/addressable@2.8.7.rbi
+7 −7 gem/sorbet/rbi/gems/ansi@1.5.0.rbi
+9 −10 gem/sorbet/rbi/gems/ast@2.4.2.rbi
+49 −68 gem/sorbet/rbi/gems/benchmark@0.4.0.rbi
+9 −0 gem/sorbet/rbi/gems/bigdecimal@3.1.9.rbi
+0 −332 gem/sorbet/rbi/gems/bigdecimal@4.0.1.rbi
+75 −0 gem/sorbet/rbi/gems/date@3.4.1.rbi
+0 −403 gem/sorbet/rbi/gems/date@3.5.1.rbi
+0 −816 gem/sorbet/rbi/gems/erb@6.0.1.rbi
+0 −2 gem/sorbet/rbi/gems/erubi@1.13.1.rbi
+0 −0 gem/sorbet/rbi/gems/io-console@0.8.0.rbi
+95 −132 gem/sorbet/rbi/gems/json-schema@5.1.1.rbi
+206 −581 gem/sorbet/rbi/gems/json@2.9.1.rbi
+0 −0 gem/sorbet/rbi/gems/language_server-protocol@3.17.0.4.rbi
+0 −9 gem/sorbet/rbi/gems/lint_roller@1.1.0.rbi
+0 −963 gem/sorbet/rbi/gems/logger@1.7.0.rbi
+93 −10 gem/sorbet/rbi/gems/minitest-reporters@1.7.1.rbi
+207 −210 gem/sorbet/rbi/gems/minitest@5.25.4.rbi
+0 −18 gem/sorbet/rbi/gems/netrc@0.11.0.rbi
+0 −0 gem/sorbet/rbi/gems/parallel@1.26.3.rbi
+321 −333 gem/sorbet/rbi/gems/parser@3.3.7.0.rbi
+0 −376 gem/sorbet/rbi/gems/pp@0.6.3.rbi
+0 −477 gem/sorbet/rbi/gems/prettyprint@0.2.0.rbi
+6,794 −7,581 gem/sorbet/rbi/gems/prism@1.3.0.rbi
+109 −866 gem/sorbet/rbi/gems/psych@5.2.2.rbi
+35 −56 gem/sorbet/rbi/gems/public_suffix@6.0.1.rbi
+6 −18 gem/sorbet/rbi/gems/racc@1.8.1.rbi
+232 −240 gem/sorbet/rbi/gems/rake@13.2.1.rbi
+1,080 −1,776 gem/sorbet/rbi/gems/rbi@0.2.4.rbi
+0 −8,393 gem/sorbet/rbi/gems/rbs@4.0.0.dev.5.rbi
+1,253 −1,916 gem/sorbet/rbi/gems/rdoc@6.10.0.rbi
+0 −0 gem/sorbet/rbi/gems/regexp_parser@2.10.0.rbi
+0 −0 gem/sorbet/rbi/gems/reline@0.6.0.rbi
+0 −110 gem/sorbet/rbi/gems/require-hooks@0.2.2.rbi
+0 −5,258 gem/sorbet/rbi/gems/rexml@3.4.4.rbi
+0 −0 gem/sorbet/rbi/gems/rubocop-ast@1.38.0.rbi
+0 −0 gem/sorbet/rbi/gems/rubocop-shopify@2.15.1.rbi
+0 −0 gem/sorbet/rbi/gems/rubocop-sorbet@0.8.7.rbi
+0 −0 gem/sorbet/rbi/gems/rubocop@1.71.1.rbi
+8 −8 gem/sorbet/rbi/gems/ruby-progressbar@1.13.0.rbi
+1,076 −1,928 gem/sorbet/rbi/gems/spoom@1.5.3.rbi
+0 −0 gem/sorbet/rbi/gems/stringio@3.1.2.rbi
+866 −752 gem/sorbet/rbi/gems/tapioca@0.16.10.rbi
+199 −297 gem/sorbet/rbi/gems/thor@1.3.2.rbi
+0 −393 gem/sorbet/rbi/gems/tsort@0.2.0.rbi
+0 −0 gem/sorbet/rbi/gems/unicode-display_width@3.1.4.rbi
+0 −0 gem/sorbet/rbi/gems/unicode-emoji@4.0.4.rbi
+5 −0 gem/sorbet/rbi/gems/yard-sorbet@0.9.0.rbi
+658 −704 gem/sorbet/rbi/gems/yard@0.9.37.rbi
+0 −26 gem/test/rbi-central/cli/check_runtime_test.rb
+1 −1 gem/test/rbi-central/context_test.rb
+1 −3 index.json
+6 −6 rbi/annotations/actionpack.rbi
+0 −5 rbi/annotations/activerecord.rbi
+0 −49 rbi/annotations/activesupport.rbi
+24 −230 rbi/annotations/devise.rbi
+0 −12 rbi/annotations/graphql.rbi
+0 −1 rbi/annotations/minitest.rbi
2 changes: 1 addition & 1 deletion ext/riscv-isa-manual
Submodule riscv-isa-manual updated 240 files
2 changes: 1 addition & 1 deletion ext/riscv-opcodes
Submodule riscv-opcodes updated 61 files
+5 −25 .github/workflows/python-app.yml
+12 −5 .github/workflows/tests.yml
+0 −7 .gitignore
+0 −5 .pylintrc
+9 −18 Makefile
+18 −14 README.md
+4 −4 c_utils.py
+18 −20 chisel_utils.py
+2 −4 constants.py
+311 −340 encoding.h
+1 −1 extensions/rv32_zbb
+3 −3 extensions/rv32_zbkb
+4 −4 extensions/rv32_zk
+4 −4 extensions/rv32_zkn
+4 −4 extensions/rv32_zks
+1 −1 extensions/rv64_zbb
+1 −1 extensions/rv64_zbkb
+1 −1 extensions/rv64_zk
+1 −1 extensions/rv64_zkn
+1 −1 extensions/rv64_zks
+0 −0 extensions/rv_d_zfh
+0 −0 extensions/rv_q_zfh
+12 −12 extensions/rv_v
+2 −0 extensions/rv_zabha
+0 −5 extensions/rv_zabha_zacas
+1 −1 extensions/rv_zbb
+1 −1 extensions/rv_zbkb
+6 −0 extensions/rv_zfh
+0 −8 extensions/rv_zfhmin
+1 −1 extensions/rv_zk
+1 −1 extensions/rv_zkn
+1 −1 extensions/rv_zks
+4 −4 extensions/unratified/rv64_zbp
+0 −3 extensions/unratified/rv_zibi
+0 −6 extensions/unratified/rv_zvabd
+0 −7 extensions/unratified/rv_zvdot4a
+0 −1 extensions/unratified/rv_zvfbdot32f
+0 −1 extensions/unratified/rv_zvfofp4min
+2 −2 extensions/unratified/rv_zvfofp8min
+0 −2 extensions/unratified/rv_zvfqbdot8f
+0 −2 extensions/unratified/rv_zvfqldot8f
+0 −1 extensions/unratified/rv_zvfwbdot16bf
+0 −1 extensions/unratified/rv_zvfwldot16bf
+0 −2 extensions/unratified/rv_zvqbdot8i
+7 −0 extensions/unratified/rv_zvqdotq
+0 −2 extensions/unratified/rv_zvqldot8i
+0 −5 extensions/unratified/rv_zvzip
+2 −2 go_utils.py
+2 −2 latex_utils.py
+15 −9 parse.py
+0 −30 pyproject.toml
+2 −2 rust_utils.py
+0 −0 rv_colors.py
+53 −71 shared_utils.py
+0 −2 src/riscv_opcodes/__init__.py
+0 −10 src/riscv_opcodes/__main__.py
+0 −39 src/riscv_opcodes/resources.py
+2 −2 sverilog_utils.py
+6 −6 svg_utils.py
+28 −20 test.py
+0 −1,180 uv.lock
2 changes: 1 addition & 1 deletion ext/riscv-tests
Submodule riscv-tests updated 51 files
+1 −1 benchmarks/Makefile
+9 −2 benchmarks/common/crt.S
+13 −10 benchmarks/common/syscalls.c
+2 −7 benchmarks/common/test.ld
+7 −39 debug/gdbserver.py
+3 −7 debug/programs/trigger.S
+1 −16 debug/targets.py
+1 −1 debug/targets/SiFive/Freedom/U500Sim.py
+20 −20 debug/testlib.py
+20 −41 isa/Makefile
+0 −18 isa/macros/scalar/test_macros.h
+1 −1 isa/rv32um/mulh.S
+0 −12 isa/rv32uzbkb/Makefrag
+0 −7 isa/rv32uzbkb/brev8.S
+0 −68 isa/rv32uzbkb/pack.S
+0 −68 isa/rv32uzbkb/packh.S
+0 −61 isa/rv32uzbkb/unzip.S
+0 −61 isa/rv32uzbkb/zip.S
+0 −9 isa/rv32uzbkx/Makefrag
+0 −74 isa/rv32uzbkx/xperm4.S
+0 −72 isa/rv32uzbkx/xperm8.S
+1 −2 isa/rv64mi/illegal.S
+0 −9 isa/rv64mi/instret_overflow.S
+1 −1 isa/rv64ud/fadd.S
+4 −4 isa/rv64ud/fclass.S
+3 −3 isa/rv64ud/fcmp.S
+2 −2 isa/rv64ud/fcvt.S
+4 −4 isa/rv64ud/fcvt_w.S
+2 −2 isa/rv64ud/fmin.S
+6 −6 isa/rv64ud/move.S
+1 −1 isa/rv64uf/fadd.S
+4 −4 isa/rv64uf/fclass.S
+3 −3 isa/rv64uf/fcmp.S
+4 −4 isa/rv64uf/fcvt_w.S
+2 −2 isa/rv64uf/fmin.S
+0 −2 isa/rv64um/div.S
+0 −2 isa/rv64um/divw.S
+0 −11 isa/rv64uzbkb/Makefrag
+0 −56 isa/rv64uzbkb/brev8.S
+0 −76 isa/rv64uzbkb/pack.S
+0 −68 isa/rv64uzbkb/packh.S
+0 −68 isa/rv64uzbkb/packw.S
+0 −9 isa/rv64uzbkx/Makefrag
+0 −72 isa/rv64uzbkx/xperm4.S
+0 −71 isa/rv64uzbkx/xperm8.S
+1 −1 isa/rv64uzfh/fadd.S
+3 −3 isa/rv64uzfh/fclass.S
+2 −2 isa/rv64uzfh/fcvt_w.S
+1 −1 isa/rv64uzfh/fmin.S
+0 −9 isa/rv64uziccid/Makefrag
+0 −104 isa/rv64uziccid/ziccid.S
27 changes: 0 additions & 27 deletions sorbet/rbi/annotations/activesupport.rbi

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions sorbet/rbi/annotations/minitest.rbi

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading