Expand description
The lifter stores guest operations here so that backends do not have to decode RISC-V.
NNIL is a linear, append-only intermediate representation. Each operation gets an Insn
handle. A later operation uses that handle to refer to the earlier result. This design is
similar to a value graph, but explicit Reg, Set, load, store, and control-flow operations
keep guest state visible.
NNIL stores integer and address bits in one backend value width. Signed and Unsigned
operations add interpretation information when the same bits need different arithmetic.
Memory and extension sizes are byte counts. For example, size 4 means 32 bits.
Structs§
- Address
- Keeps guest addresses distinct from instruction and label identifiers.
- Insn
- Identifies an NNIL value by its stable position in the instruction list.
- Label
- Identifies a branch target without storing a temporary instruction index.
- Nnil
- Owns one lifted region so its value handles and address maps stay valid together.
Enums§
- AmoOp
- Selects an atomic operation while one instruction form supplies the common operands.
- Nnil
Instruction - Represents guest semantics in a form that the JIT can emit directly.