Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
128 commits
Select commit Hold shift + click to select a range
23fa85b
spec: initial spec commit
erik-3milabs Dec 17, 2025
27da436
spec: Basic chip data format and layout
RobinJadoul Dec 24, 2025
efd7868
spec: Fix some chip rendering pain points (#83)
RobinJadoul Dec 30, 2025
3084695
spec: support array-like types (#85)
erik-3milabs Dec 30, 2025
5e6a7d8
spec: Fixup wrong type sanity check for array types (#86)
RobinJadoul Dec 30, 2025
5157849
Make precedence a lookup table instead of hardcoding it
RobinJadoul Dec 30, 2025
9f9c2b9
Render type cast expressions
RobinJadoul Dec 30, 2025
9ad78c3
spec: Allow desc field on non-arith constraints as clarification
RobinJadoul Dec 30, 2025
03d3011
spec: Modify cast operator precedence
RobinJadoul Dec 31, 2025
f3f21bc
spec: improve definitions (#91)
erik-3milabs Jan 2, 2026
442e327
spec: update table rendering (#93)
erik-3milabs Jan 2, 2026
c271c93
spec: introduce "condition" column type
erik-3milabs Jan 3, 2026
a0801d9
spec: is_bit template
erik-3milabs Jan 3, 2026
37d4cc0
spec: CPU chip for RV64IMC (#88)
RobinJadoul Jan 5, 2026
4b8c801
spec: improve multi-poly definition rendering (#98)
erik-3milabs Jan 5, 2026
217d2d7
spec: BRANCH chip (#92)
RobinJadoul Jan 5, 2026
e53d2a8
spec: conditionally render constraint table headers (#94)
erik-3milabs Jan 5, 2026
1b83850
spec: do not print index in assumption/constraint ref (#96)
erik-3milabs Jan 5, 2026
52ba976
Merge branch 'main' into spec/main
RobinJadoul Jan 6, 2026
07000c7
spec: Make constraint numbering restart when displaying multiple chip…
RobinJadoul Jan 7, 2026
7e842e5
spec: Introduce LT chip (#90)
RobinJadoul Jan 8, 2026
4af29ef
spec: Fix constraint group lookup (#105)
RobinJadoul Jan 8, 2026
9d07e5d
spec: `SHIFT` chip (#84)
erik-3milabs Jan 9, 2026
795a722
spec: `ADD` template (#97)
erik-3milabs Jan 9, 2026
1ba9421
spec: have column table subheaders repeat on page wrap (#121)
erik-3milabs Jan 9, 2026
62fc94b
spec: drop `dot` when multiplying constant with one-letter variable. …
erik-3milabs Jan 9, 2026
bf9662f
spec: `MUL` chip (#122)
erik-3milabs Jan 13, 2026
11a0c64
spec: Add support for specifying padding values of columns (#133)
RobinJadoul Jan 13, 2026
eb3297a
spec: update range specifications to iters concept (#130)
RobinJadoul Jan 13, 2026
22fa781
spec: `BITWISE` chip (#138)
erik-3milabs Jan 14, 2026
52d1522
spec: Initial inefficient MEMW chip (#104)
RobinJadoul Jan 15, 2026
11cd790
spec: LOAD chip (#144)
RobinJadoul Jan 15, 2026
760f446
fix CPU-CA41 typo (#189)
ColoCarletti Jan 20, 2026
a358eed
spec: `DECODE` (#143)
erik-3milabs Jan 21, 2026
1be9a48
 spec: placeholder chapters for chips to come (#190)
RobinJadoul Jan 21, 2026
2d39c55
fix(spec): Use a better precedence value for "idx" (#197)
RobinJadoul Jan 21, 2026
9cb3aff
fix(spec): Missing `write_register` multiplicity. (#196)
RobinJadoul Jan 21, 2026
e68549f
spec: Initial version of memory argument (#164)
RobinJadoul Jan 21, 2026
4d9cba1
add script to create marckdown from spec
ColoCarletti Jan 21, 2026
4ca2a4e
fix(spec): Correct typo in spec README and align style (#210)
cdesaintguilhem Jan 22, 2026
5e6fdc3
spec: CPU padding (#195)
RobinJadoul Jan 23, 2026
5dbf6d0
Merge branch 'spec/main' into md_spec
ColoCarletti Jan 23, 2026
52bba07
update md docs
ColoCarletti Jan 23, 2026
335ea11
Add readme
MauroToscano Jan 26, 2026
a184f95
spec: update `ECALL` signature (#244)
erik-3milabs Jan 27, 2026
37a9a9f
spec: Allow for cross referencing between different chapters, both in…
RobinJadoul Jan 27, 2026
5084c80
spec: Update LT interaction signature so that it can be used properly…
RobinJadoul Jan 27, 2026
c72eefe
spec: `HALT` chip (#235)
erik-3milabs Jan 27, 2026
554604c
Merge branch 'spec/main' into md_spec
MauroToscano Jan 27, 2026
19c016e
update
ColoCarletti Jan 28, 2026
c902acd
spec: minor `MUL` fixes (#223)
erik-3milabs Jan 29, 2026
91587f4
Merge branch 'spec/main' into md_spec
ColoCarletti Jan 29, 2026
f85cc38
update spec md
ColoCarletti Jan 29, 2026
866c900
Merge branch 'md_spec' of github.com:yetanotherco/lambda_vm into md_spec
ColoCarletti Jan 29, 2026
6801f60
Full typst to markdown
MauroToscano Jan 30, 2026
25713fa
new typst to md
MauroToscano Jan 30, 2026
d5000f0
spec: `SIGN` (#279)
erik-3milabs Feb 3, 2026
485b93f
spec: drop `IsZero` template (#278)
erik-3milabs Feb 3, 2026
9bb2eed
spec: fix header levels (#264)
erik-3milabs Feb 3, 2026
ed3d883
spec: LOAD: fix LOAD-C9 signature (#284)
erik-3milabs Feb 5, 2026
76a008c
spec: `NEG` template (#270)
erik-3milabs Feb 5, 2026
f86e427
spec: Introduce DVRM chip
erik-3milabs Dec 24, 2025
8f0e8d3
spec: signatures (#280)
erik-3milabs Feb 5, 2026
1b2cfb9
spec: Leverage `NEG` in `DVRM` (#287)
erik-3milabs Feb 6, 2026
4ef8b2a
Merge branch 'spec/main' into md_spec
ColoCarletti Feb 6, 2026
39b1479
update docs
ColoCarletti Feb 6, 2026
278f932
update
ColoCarletti Feb 9, 2026
742a5bd
spec: Add initial tooling to check data formats, prepare for more ela…
RobinJadoul Feb 10, 2026
26ae833
spec: Introduce array expressions (#295)
RobinJadoul Feb 10, 2026
9fd3bf8
spec: separate ALU path for STORE to enable byte representation of rv…
RobinJadoul Feb 10, 2026
0e321e2
Merge branch 'spec/main' into md_spec
ColoCarletti Feb 11, 2026
f19e9a4
update_docs
ColoCarletti Feb 11, 2026
9deb62f
update scripot
ColoCarletti Feb 11, 2026
fd662fe
update
ColoCarletti Feb 11, 2026
172cf3e
spec: `COMMIT` chip (#283)
erik-3milabs Feb 12, 2026
8af2cb7
spec: Typecheck signatures and make all chips pass (#312)
RobinJadoul Feb 12, 2026
5b81913
spec: Variable category for constants (#327)
RobinJadoul Feb 12, 2026
68457ea
spec: Fix interaction signatures for COMMIT (#328)
RobinJadoul Feb 13, 2026
b0bdd60
spec: Cleanup, uniformize chapters, make colors work better on web. (…
RobinJadoul Feb 17, 2026
2a259a5
spec: LogUp: Vanilla protocol description (#243)
cdesaintguilhem Feb 23, 2026
017619c
Merge branch 'main' into md_spec
ColoCarletti Feb 25, 2026
a3cbdc9
update
ColoCarletti Feb 25, 2026
fa26492
spec: Add a version and title/front pages (#367)
RobinJadoul Feb 27, 2026
4a2ae1f
Merge branch 'spec/main' into md_spec
ColoCarletti Feb 27, 2026
4a2cba5
Merge branch 'md_spec' of github.com:yetanotherco/lambda_vm into md_spec
ColoCarletti Mar 3, 2026
b4cbb21
update
ColoCarletti Mar 3, 2026
0fbf927
fix constraint numbering
nicole-graus Mar 6, 2026
40c40ab
fix ecall.md
nicole-graus Mar 6, 2026
fa1b567
Merge branch 'main' into spec/main
diegokingston Mar 9, 2026
0b71ac2
update
ColoCarletti Mar 10, 2026
376a726
spec: Losing some MEMW weight (#398)
RobinJadoul Mar 13, 2026
42b4c9f
spec: Some fixes and improvements for SHIFT (#400)
RobinJadoul Mar 13, 2026
135f90a
Merge branch 'spec/main' into md_spec
nicole-graus Mar 13, 2026
268ac3b
update spec
nicole-graus Mar 13, 2026
5cf5369
Fix type checking for MEMW_A (#423)
RobinJadoul Mar 16, 2026
44fde6b
Merge branch 'spec/main' into md_spec
nicole-graus Mar 16, 2026
8f7ddea
Spec/memw update (#434)
erik-3milabs Mar 23, 2026
a9c073a
spec/MEMW(_A): minor update (#459)
erik-3milabs Mar 23, 2026
7d4518f
spec/MEMW_R: register access fast path (#457)
erik-3milabs Mar 24, 2026
1247426
spec: Fix CPU sign bit constraints for `word_instr` (#435)
RobinJadoul Mar 25, 2026
2095f65
Merge branch 'spec/main' into md_spec
nicole-graus Mar 25, 2026
3124c1a
update spec
nicole-graus Mar 25, 2026
caa053c
spec: SHA256 accelerator (#372)
RobinJadoul Apr 10, 2026
b39eb99
merge
ColoCarletti Apr 14, 2026
435c116
update_md
ColoCarletti Apr 14, 2026
82ae2dd
fix
ColoCarletti Apr 14, 2026
9819eac
update_script
ColoCarletti Apr 14, 2026
d23f806
spec: KECCAK accelerator (#474)
erik-3milabs Apr 22, 2026
0f90155
spec: Inline PC memory access into CPU (#501)
RobinJadoul Apr 24, 2026
7f96964
Merge branch 'spec/main' into md_spec
ColoCarletti Apr 24, 2026
b58514d
update
ColoCarletti Apr 24, 2026
6363f3e
spec: shiroa fixes (#533)
RobinJadoul Apr 28, 2026
b6478d6
spec: Enable heading numbering for section references in shiroa (#534)
RobinJadoul Apr 28, 2026
6872537
spec: `ARE_BYTES` (#532)
erik-3milabs Apr 28, 2026
2e05a25
spec: Fix `KECCAK` (#554)
erik-3milabs May 5, 2026
d386a30
Merge branch 'main' into spec/main
ColoCarletti May 22, 2026
89bef88
Merge branch 'main' into spec/main
ColoCarletti May 22, 2026
ec9f756
spec: Fix typographical errors in SHA256 and ROTXOR constraints (#635)
RobinJadoul Jun 1, 2026
2c604b1
Merge branch 'main' into spec/main
ColoCarletti Jun 1, 2026
502dfc3
Merge branch 'main' into spec/main
ColoCarletti Jun 1, 2026
f006292
spec: rework CPU for smaller footprint (#624)
RobinJadoul Jun 2, 2026
2df4f8b
Merge branch 'main' into spec/main
ColoCarletti Jun 8, 2026
5a09d70
Add extra constraints to prevent register side effects in CPU32 paddi…
RobinJadoul Jun 9, 2026
97dd4ae
Merge branch 'spec-main' into md-spec
MauroToscano Jun 10, 2026
af9b795
Regenerate markdown spec from latest spec/main
MauroToscano Jun 10, 2026
a6ef9d1
Add extra constraints to prevent register side effects in CPU32 paddi…
RobinJadoul Jun 9, 2026
63122c7
Merge remote-tracking branch 'origin/spec/main' into md_spec
MauroToscano Jun 12, 2026
4b60eac
Fix markdown spec extraction
MauroToscano Jun 12, 2026
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
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,12 @@
.vscode
.DS_Store

# Python
__pycache__/
*.pyc
*.pyo
.venv/

# Compiled ELF artifacts (built by CI/make)
executor/program_artifacts/

Expand Down
13 changes: 13 additions & 0 deletions docs/spec/about_ecalls.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# About ECALL

ECALLs provide system-level functionalities to the guest program.

When `ECALL` is executed, it is assumed that: - register `A7` contains the system call number

- the arguments are located in registers `A0`-`A6`, and - the return value is written to `A0`, where `A0`-`A7` are symbolic names for the registers `x10`-`x17`

## ECALL number overview

We provide a list of supported ECALL numbers. Negative numbers (represented as 2s complement 64-bit numbers), are used for our own custom accelerators/extensions.

/ 64: `write` ([commit]) / 93: `exit` ([halt]) / -1: `SHA256` ([sha256]) / -2: `KECCAK` ([keccak])
56 changes: 56 additions & 0 deletions docs/spec/add.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# ADD/SUB Template

For ease of notation, we moreover introduce the constraint template $

$ in both conditional and unconditional versions. It constrains that ``diff` equiv `lhs` - `rhs` (mod 2^64)` when the expression `cond` is non-zero.

## Variables

This template introduces interaction(s).

### Input

| Name | Type | Description |
|------|------|-------------|
| `lhs` | `DWordWL` | left-hand operator |
| `rhs` | `DWordWL` | right-hand operator |

### Output

| Name | Type | Description |
|------|------|-------------|
| `sum` | `DWordWL` | $`lhs` + `rhs`$ |

### Virtual

| Name | Type | Description |
|------|------|-------------|
| `carry` | `Bit[2]` | Carry values used to constrain the addition |

**Definition of `carry`:**
```
carry (when iter=0) := 2^-32 * (lhs[0] + rhs[0] - sum[0])
carry (when iter=1) := 2^-32 * (lhs[1] + rhs[1] + carry[0] - sum[1])
```

### Condition

| Name | Type | Description |
|------|------|-------------|
| `cond` | `BaseField` | Whether the relation should be enforced ($eq.not 0$) or not ($0$). |

## Assumptions

| Tag | Range | Description |
|-----|-------|-------------|
| `ADD-A1.i` | i ∈ [0, 1] | `IS_WORD[lhs[i]]` |
| `ADD-A2.i` | i ∈ [0, 1] | `IS_WORD[rhs[i]]` |
| `ADD-A3.i` | i ∈ [0, 1] | `IS_WORD[sum[i]]` |

## Constraints

This template introduces the following constraints

| Tag | Range | Description |
|-----|-------|-------------|
| `ADD-C1.i` | i ∈ [0, 1] | cond ⇒ `IS_BIT<carry[i]>` |
69 changes: 69 additions & 0 deletions docs/spec/bitwise.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# BITWISE Chips

The chips deal with precomputed lookup tables for bitwise boolean operations and convenience functionalities over small domains.

## Variables

The chip is comprised of variables that are expressed using columns. Of these, the _input_ and _output_ variables ( in total) are precomputed.

### Input

| Name | Type | Description |
|------|------|-------------|
| `X` | `Byte` | |
| `Y` | `Byte` | |
| `Z` | `B4` | |

### Output

| Name | Type | Description |
|------|------|-------------|
| `AND` | `Byte` | the binary AND of `X` and `Y` |
| `OR` | `Byte` | the binary OR of `X` and `Y` |
| `XOR` | `Byte` | the binary XOR of `X` and `Y` |
| `MSB8` | `Bit` | the most significant bit of `X` |
| `MSB16` | `Bit` | the most significant bit of `Y` |
| `ZERO` | `Bit` | whether $`X` = 0$, $`Y` = 0$ and $`Z` = 0$. |
| `SLL` | `Half` | `X\|\|Y` logically left-shifted by `Z`: $((`X` + 256`Y`) `<<` `Z`) mod 2^16$ |
| `SLLC` | `Half` | `X\|\|Y` logically right-shifted by `Z`: $(`X` + 256`Y`) `>>` (16 - `Z`)$ |

### Multiplicity

| Name | Type | Description |
|------|------|-------------|
| `μ_AND` | `BaseField` | |
| `μ_OR` | `BaseField` | |
| `μ_XOR` | `BaseField` | |
| `μ_MSB8` | `BaseField` | |
| `μ_MSB16` | `BaseField` | |
| `μ_ZERO` | `BaseField` | |
| `μ_IS_BYTE` | `BaseField` | |
| `μ_ARE_BYTES` | `BaseField` | |
| `μ_IS_HALF` | `BaseField` | |
| `μ_IS_B20` | `BaseField` | |
| `μ_HWSL` | `BaseField` | |

*Note*: This table contains one row for every possible value of `(X, Y, Z)`. As such, it has length `2^8 dot 2^8 dot 2^4 = 2^(20)`.

We use the ALU operation descriptors from [decode] to identify the operations in the `BYTE_ALU` interaction. Since each of the three columns is only `2^16` rows long, they can be combined in a single `2^20` column (with room to spare).

## Lookup

This chip adds the following interactions to the lookup:

| Tag | Description | Multiplicity |
|-----|-------------|--------------|
| `BITWISE-C1` | `BYTE_ALU[AND; ⧼AND⧽, X, Y]` | -μ_AND |
| `BITWISE-C2` | `BYTE_ALU[OR; ⧼OR⧽, X, Y]` | -μ_OR |
| `BITWISE-C3` | `BYTE_ALU[XOR; ⧼XOR⧽, X, Y]` | -μ_XOR |
| `BITWISE-C4` | `MSB8[MSB8; X]` | -μ_MSB8 |
| `BITWISE-C5` | `MSB16[MSB16; X + 256 * Y]` | -μ_MSB16 |
| `BITWISE-C6` | `ZERO[ZERO; X + 256 * Y + 65536 * Z]` | -μ_ZERO |
| `BITWISE-C7` | `ARE_BYTES[X, Y]` | -μ_ARE_BYTES |
| `BITWISE-C8` | `IS_HALF[X + 256 * Y]` | -μ_IS_HALF |
| `BITWISE-C9` | `IS_B20[X + 256 * Y + 65536 * Z]` | -μ_IS_B20 |
| `BITWISE-C10` | `HWSL[[SLL, SLLC]; X + 256 * Y, Z]` | -μ_HWSL |

## Notes/Optimizations

The following ideas may prove to be optimizations for the chip: + Drop `MSB8` column, and instead define the `MSB8` lookup as `MSB8<X> := MSB16[256X]`. Note: currently, `MSB8` also implicity range checks the input `X` (the lookup fails if `X` is not a `Byte`). This optimization should only be executed when all chips leveraging `MSB8` do _not_ need this implicit range check. + Place the 16-bit (`AND`, `OR`, `XOR`, `MSB16`, etc.) and 20-bit (`HWSL`, `IS_B20`, `ZERO`) lookups in separate tables.
104 changes: 104 additions & 0 deletions docs/spec/branch.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
# BRANCH Chip

The chip computes the target address of a branching instruction.

## Variables

The chip is comprised of variables that are expressed using columns and leverages interaction(s):

### Input

| Name | Type | Description |
|------|------|-------------|
| `pc` | `DWordWL` | The current pc, used as base address when `!JALR` |
| `offset` | `DWordWL` | The offset from the base address to jump to |
| `register` | `DWordWL` | The base address to use when `JALR` |
| `JALR` | `Bit` | Selects between `pc` and `register` as base address, needed for the `JALR` instruction |

### Output

| Name | Type | Description |
|------|------|-------------|
| `next_pc_high` | `Half[3]` | The upper part of the next pc |
| `next_pc_low` | `Byte[2]` | The lower part of the next pc |

### Auxiliary

| Name | Type | Description |
|------|------|-------------|
| `unmasked_low_byte` | `Byte` | The low byte of the next pc, before masking the LSB. Used to constraint the raw addition. |

### Virtual

| Name | Type | Description |
|------|------|-------------|
| `next_pc_unmasked` | `DWordWL` | The combination of `next_pc_high`, `next_pc_low[1]` and `unmasked_low_byte` to constrain the addition. This is the computed value for the next pc, before masking off the LSB as required by the ISA. |
| `next_pc` | `DWordWL` | The computed next pc, after masking off the LSB as required by the ISA. |

**Definition of `next_pc_unmasked`:**
```
next_pc_unmasked (when iter=0) := 2^16 * next_pc_high[0] + 2^8 * next_pc_low[1] + unmasked_low_byte
next_pc_unmasked (when iter=1) := 2^16 * next_pc_high[2] + next_pc_high[1]
```

**Definition of `next_pc`:**
```
next_pc (when iter=0) := 2^16 * next_pc_high[0] + 2^8 * next_pc_low[1] + next_pc_low[0]
next_pc (when iter=1) := 2^16 * next_pc_high[2] + next_pc_high[1]
```

### Multiplicity

| Name | Type | Description |
|------|------|-------------|
| `μ` | `Bit` | |

## Assumptions

| Tag | Range | Description |
|-----|-------|-------------|
| `BRANCH-A1.i` | i ∈ [0, 1] | `pc` is range checked, `IS_WORD[pc[i]]` |
| `BRANCH-A2` | | `offset` is range checked, `IS_WORD[offset]` |
| `BRANCH-A3.i` | i ∈ [0, 1] | `register` is range checked, `IS_WORD[register[i]]` |
| `BRANCH-A4` | | `IS_BIT<JALR>` |

Some of the assumptions can be checked with only arithmetic constraints, so we provide these below.

| Tag | Description |
|-----|-------------|
| `BRANCH-C1` | `IS_BIT<JALR>` |

## Constraints

We constrain `next_pc` to be ``base_address` + `offset``, where `base_address` equals `pc` when ``JALR` = 0` and `register` otherwise.

The range checks on `unmasked_low_byte` and `next_pc_low[0]` are performed implicitly by the `AND_BYTE` lookup.

| Tag | Range | Description | Multiplicity |
|-----|-------|-------------|--------------|
| `BRANCH-C2` | | 1 - JALR ⇒ `ADD<next_pc_unmasked; pc, offset::DWordWL>` | |
| `BRANCH-C3` | | JALR ⇒ `ADD<next_pc_unmasked; register, offset::DWordWL>` | |
| `BRANCH-C4` | | μ ⇒ `IS_BYTE<next_pc_low[1]>` | |
| `BRANCH-C5` | | `BYTE_ALU[next_pc_low[0]; ⧼AND⧽, unmasked_low_byte, 254]` | μ |
| `BRANCH-C6.i` | i ∈ [0, 2] | `IS_HALF[next_pc_high[i]]` | μ |

This chip contributes the following to the lookup argument.

| Tag | Description | Multiplicity |
|-----|-------------|--------------|
| `BRANCH-C7` | `BRANCH[next_pc; pc, offset, register, JALR]` | -μ |

## Padding

The table can be padded to the next power of two with the following value assignments:

| Column | Padding value |
|--------|---------------|
| `pc` | `0` |
| `offset` | `0` |
| `register` | `0` |
| `JALR` | `0` |
| `next_pc_high` | `[0, 0, 0]` |
| `next_pc_low` | `0` |
| `unmasked_low_byte` | `0` |
| `μ` | `0` |
46 changes: 46 additions & 0 deletions docs/spec/bytewise.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# BYTEWISE Chip

The chip is an ALU chip that decomposes the input `DWordWL` values into bytes and performs a `BITWISE` operation pairwise (AND, OR, XOR). The `BITWISE` lookup inherently performs a range check, so no further constraints are necessary.

## Variables

The chip is comprised of variables that are expressed using columns and leverages interaction(s):

### Input

| Name | Type | Description |
|------|------|-------------|
| `a` | `DWordBL` | The first input |
| `b` | `DWordBL` | The second input |
| `op` | `Byte` | The operation to perform |

### Output

| Name | Type | Description |
|------|------|-------------|
| `res` | `DWordBL` | The result |

### Multiplicity

| Name | Type | Description |
|------|------|-------------|
| `μ` | `BaseField` | |

## Constraints

| Tag | Range | Description | Multiplicity |
|-----|-------|-------------|--------------|
| `BYTEWISE-C1.i` | i ∈ [0, 7] | `BYTE_ALU[res[i]; op, a[i], b[i]]` | μ |
| `BYTEWISE-C2` | | `ALU[res::DWordWL; a::DWordWL, b::DWordWL, op]` | -μ |

## Padding

The chip can be padded with the following values:

| Column | Padding value |
|--------|---------------|
| `a` | `0` |
| `b` | `0` |
| `op` | `0` |
| `res` | `0` |
| `μ` | `0` |
Loading
Loading