2009-09-22 Gonzalo Paniagua Javier <gonzalo@novell.com>
[mono/afaerber.git] / docs / ir-desc
blob0c1ab531f0b03c94e7e2bfd72f867193753312c8
1 Mono Intermediate Representation Documentation
3 Operation: OP_ADDCC_IMM
5         Add immediate that will set the carry flag.  
7         dreg:
8                 Destination register
9         inst_imm
10                 Immediate value to add.
11         sreg1:
12                 Source register to add.
14 Operation: OP_CALL_HANDLER.
16         cil_code: 
17                 Points to the CIL where the LEAVE or LEAVE_S
18                 instruction was found.
20         inst_target_bb:
21                 The target basic block for this invocation.
23         This instruction must call the target basic block.
24         
25 Operation: OP_CISINST
27         Implements the CEE_MONO_CISINST opcode that is decoded from
28         the CIL stream.
30         This opcode takes as input an object reference and a class,
31         and leaves on the assigned register:
33                 0. if the object is an instance of the class,
34                 1. if the object is not instance of the class,
35                 2. if the object is a proxy whose type cannot be determined.
37 Operation: OP_CCASTCLASS
39         Implements the CEE_MONO_CCASTCLASS opcode that is decoded from
40         the CIL stream.
42         This opcode takes as input an object reference and a class,
43         and leaves on the assigned register:
45                 0. if the object is an instance of the class,
46                 1. if the object is a proxy whose type cannot be determined
48                 throws an InvalidCastException exception otherwise.
50 Operation: OP_LOCALLOC
51         inst_left:
52                 The value 
53                                 ins->inst_left = *sp;
54                                 ins->cil_code = ip;
56         This is the equivalent of alloca() in a C implementation: it
57         allocates a bunch of bytes on the stack dynamically. Local
58         variables are allocated statically in the stack instead.
59         
60         It is implemented by moving the stack pointer according to the
61         platform ABI: you may need to keep a specific frame register
62         to address local variables when LOCALLOC is used (the PPC code
63         does this, for example: ifyou're doing the s390 port I suggest
64         starting from that)
66 Operation: OP_SUBCC_IMM
68         Substract immediate that will set the borrow flag.
70         dreg:
71                 Destination register
72         inst_imm
73                 Immediate value to add.
74         sreg1:
75                 Source register to add.