Skip to main content

Module nnil

Module nnil 

Source
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.
NnilInstruction
Represents guest semantics in a form that the JIT can emit directly.