Mono Intermediate Representation Documentation Operation: OP_ADDCC_IMM Add immediate that will set the carry flag. dreg: Destination register inst_imm Immediate value to add. sreg1: Source register to add. Operation: OP_CALL_HANDLER. cil_code: Points to the CIL where the LEAVE or LEAVE_S instruction was found. inst_target_bb: The target basic block for this invocation. This instruction must call the target basic block. Operation: OP_CISINST Implements the CEE_MONO_CISINST opcode that is decoded from the CIL stream. This opcode takes as input an object reference and a class, and leaves on the assigned register: 0. if the object is an instance of the class, 1. if the object is not instance of the class, 2. if the object is a proxy whose type cannot be determined. Operation: OP_CCASTCLASS Implements the CEE_MONO_CCASTCLASS opcode that is decoded from the CIL stream. This opcode takes as input an object reference and a class, and leaves on the assigned register: 0. if the object is an instance of the class, 1. if the object is a proxy whose type cannot be determined throws an InvalidCastException exception otherwise. Operation: OP_LOCALLOC inst_left: The value ins->inst_left = *sp; ins->cil_code = ip; This is the equivalent of alloca() in a C implementation: it allocates a bunch of bytes on the stack dynamically. Local variables are allocated statically in the stack instead. It is implemented by moving the stack pointer according to the platform ABI: you may need to keep a specific frame register to address local variables when LOCALLOC is used (the PPC code does this, for example: ifyou're doing the s390 port I suggest starting from that) Operation: OP_SUBCC_IMM Substract immediate that will set the borrow flag. dreg: Destination register inst_imm Immediate value to add. sreg1: Source register to add.