Package-level declarations

Types

Link copied to clipboard

HiddenVariableShift provides the amount to shift 1 to the left to get the mask for a L2Operation.HiddenVariable subclass.

Link copied to clipboard
class L1InstructionStepper(val interpreter: Interpreter)

This class is used to simulate the effect of level one nybblecodes during execution of the L2_INTERPRET_LEVEL_ONE instruction, on behalf of an Interpreter.

Link copied to clipboard
abstract class L2AbstractInstruction

L2AbstractInstruction is the common ancestor of L2Instruction and L2SimpleInstruction, generated by the L2Generator and L2SimpleTranslator, respectively.

Link copied to clipboard
abstract class L2Chunk

A Level Two chunk represents an optimized implementation of a compiled code object.

Link copied to clipboard
class L2Instruction(basicBlock: L2BasicBlock?, val operation: L2Operation, theOperands: L2Operand) : L2AbstractInstruction

L2Instruction is the foundation for all instructions understood by the level two Avail interpreter. These instructions are model objects generated and manipulated by the L2Generator.

Link copied to clipboard

A Level Two chunk represents an optimized implementation of a compiled code object.

Link copied to clipboard

An L2NamedOperandType is used to specify both an L2OperandType and a String naming its purpose with respect to some L2Operation. This effectively allows operations to declare named operands, increasing the descriptiveness of the level two instruction set. The names are not used in any way at runtime.

Link copied to clipboard

An L2OperandDispatcher acts as a visitor for the actual operands of level two instructions.

Link copied to clipboard

An L2OperandType specifies the nature of a level two operand. It doesn't fully specify how the operand is used, but it does say whether the associated register is being read or written or both.

Link copied to clipboard
abstract class L2Operation

The instruction set for the Level Two Avail interpreter. Avail programs can only see as far down as the level one nybblecode representation. Level two translations are invisibly created as necessary to boost performance of frequently executed code. Technically level two is an optional part of an Avail implementation, but modern hardware has enough memory that this should really always be present.

Link copied to clipboard

A Level Two chunk represents a simply optimized implementation of an A_RawFunction. It's composed of L2SimpleInstructions, and doesn't have any deep optimizations. It does, however, attempt to eliminate dispatches for monomorphic call sites, as well as return type checks, whenever possible.

Link copied to clipboard

ReadsHiddenVariable indicates that an L2Instruction using the annotated L2Operation will begin by reading from a particular kind of s. This annotation is used to restrict code motion by the L2Optimizer.

Link copied to clipboard

WritesHiddenVariable indicates that an L2Instruction using the annotated L2Operation will finish by writing to a particular kind of s. This annotation is used to restrict code motion by the L2Optimizer.