Skip to main content

Builtins

IDL provides several builtins to access implicit machine state or query data structure properties.

Implicit Machine State​

Two special variables give access to the current instruction's context. They are available in Instruction and CSR scope only — not in function scope or global scope.

NameTypeScopeDescription
$pcBits<MXLEN>Instruction, CSRThe virtual address of the instruction currently executing.
$encodingBits<N> (N = length of the last fetched instruction)Instruction, CSRThe binary encoding of the instruction currently executing.
# $pc: use the current PC to compute a branch target
jump($pc + $signed(imm));

# $encoding: pass the current instruction encoding to a memory access
X[xd] = read_memory(32, virtual_address, $encoding);

# raise() uses $encoding as the tval for illegal instruction exceptions
raise(ExceptionCode::IllegalInstruction, mode(), $encoding);

Data Type Queries​

$enum_size​

Returns the number of members in an enum:

$enum_size(RoundingMode) # => 5

$enum_element_size​

Returns the number of bits needed to represent the largest value in an enum:

$enum_element_size(RoundingMode) # => 3

$array_size​

Returns the number of elements in an array:

Bits<32> array [13];
$array_size(array) # => 13