Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
145 | halyavin | 1 | /* |
2 | * CIL opcode definition |
||
3 | * |
||
4 | * Copyright (c) 2002 Fabrice Bellard |
||
5 | * |
||
6 | * This program is free software; you can redistribute it and/or modify |
||
7 | * it under the terms of the GNU General Public License as published by |
||
8 | * the Free Software Foundation; either version 2 of the License, or |
||
9 | * (at your option) any later version. |
||
10 | * |
||
11 | * This program is distributed in the hope that it will be useful, |
||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||
14 | * GNU General Public License for more details. |
||
15 | * |
||
16 | * You should have received a copy of the GNU General Public License |
||
17 | * along with this program; if not, write to the Free Software |
||
18 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
||
19 | */ |
||
20 | OP(NOP, "nop", 0x00) |
||
21 | OP(BREAK, "break", 0x01) |
||
22 | OP(LDARG_0, "ldarg.0", 0x02) |
||
23 | OP(LDARG_1, "ldarg.1", 0x03) |
||
24 | OP(LDARG_2, "ldarg.2", 0x04) |
||
25 | OP(LDARG_3, "ldarg.3", 0x05) |
||
26 | OP(LDLOC_0, "ldloc.0", 0x06) |
||
27 | OP(LDLOC_1, "ldloc.1", 0x07) |
||
28 | OP(LDLOC_2, "ldloc.2", 0x08) |
||
29 | OP(LDLOC_3, "ldloc.3", 0x09) |
||
30 | OP(STLOC_0, "stloc.0", 0x0a) |
||
31 | OP(STLOC_1, "stloc.1", 0x0b) |
||
32 | OP(STLOC_2, "stloc.2", 0x0c) |
||
33 | OP(STLOC_3, "stloc.3", 0x0d) |
||
34 | OP(LDARG_S, "ldarg.s", 0x0e) |
||
35 | OP(LDARGA_S, "ldarga.s", 0x0f) |
||
36 | OP(STARG_S, "starg.s", 0x10) |
||
37 | OP(LDLOC_S, "ldloc.s", 0x11) |
||
38 | OP(LDLOCA_S, "ldloca.s", 0x12) |
||
39 | OP(STLOC_S, "stloc.s", 0x13) |
||
40 | OP(LDNULL, "ldnull", 0x14) |
||
41 | OP(LDC_I4_M1, "ldc.i4.m1", 0x15) |
||
42 | OP(LDC_I4_0, "ldc.i4.0", 0x16) |
||
43 | OP(LDC_I4_1, "ldc.i4.1", 0x17) |
||
44 | OP(LDC_I4_2, "ldc.i4.2", 0x18) |
||
45 | OP(LDC_I4_3, "ldc.i4.3", 0x19) |
||
46 | OP(LDC_I4_4, "ldc.i4.4", 0x1a) |
||
47 | OP(LDC_I4_5, "ldc.i4.5", 0x1b) |
||
48 | OP(LDC_I4_6, "ldc.i4.6", 0x1c) |
||
49 | OP(LDC_I4_7, "ldc.i4.7", 0x1d) |
||
50 | OP(LDC_I4_8, "ldc.i4.8", 0x1e) |
||
51 | OP(LDC_I4_S, "ldc.i4.s", 0x1f) |
||
52 | OP(LDC_I4, "ldc.i4", 0x20) |
||
53 | OP(LDC_I8, "ldc.i8", 0x21) |
||
54 | OP(LDC_R4, "ldc.r4", 0x22) |
||
55 | OP(LDC_R8, "ldc.r8", 0x23) |
||
56 | OP(LDPTR, "ldptr", 0x24) |
||
57 | OP(DUP, "dup", 0x25) |
||
58 | OP(POP, "pop", 0x26) |
||
59 | OP(JMP, "jmp", 0x27) |
||
60 | OP(CALL, "call", 0x28) |
||
61 | OP(CALLI, "calli", 0x29) |
||
62 | OP(RET, "ret", 0x2a) |
||
63 | OP(BR_S, "br.s", 0x2b) |
||
64 | OP(BRFALSE_S, "brfalse.s", 0x2c) |
||
65 | OP(BRTRUE_S, "brtrue.s", 0x2d) |
||
66 | OP(BEQ_S, "beq.s", 0x2e) |
||
67 | OP(BGE_S, "bge.s", 0x2f) |
||
68 | OP(BGT_S, "bgt.s", 0x30) |
||
69 | OP(BLE_S, "ble.s", 0x31) |
||
70 | OP(BLT_S, "blt.s", 0x32) |
||
71 | OP(BNE_UN_S, "bne.un.s", 0x33) |
||
72 | OP(BGE_UN_S, "bge.un.s", 0x34) |
||
73 | OP(BGT_UN_S, "bgt.un.s", 0x35) |
||
74 | OP(BLE_UN_S, "ble.un.s", 0x36) |
||
75 | OP(BLT_UN_S, "blt.un.s", 0x37) |
||
76 | OP(BR, "br", 0x38) |
||
77 | OP(BRFALSE, "brfalse", 0x39) |
||
78 | OP(BRTRUE, "brtrue", 0x3a) |
||
79 | OP(BEQ, "beq", 0x3b) |
||
80 | OP(BGE, "bge", 0x3c) |
||
81 | OP(BGT, "bgt", 0x3d) |
||
82 | OP(BLE, "ble", 0x3e) |
||
83 | OP(BLT, "blt", 0x3f) |
||
84 | OP(BNE_UN, "bne.un", 0x40) |
||
85 | OP(BGE_UN, "bge.un", 0x41) |
||
86 | OP(BGT_UN, "bgt.un", 0x42) |
||
87 | OP(BLE_UN, "ble.un", 0x43) |
||
88 | OP(BLT_UN, "blt.un", 0x44) |
||
89 | OP(SWITCH, "switch", 0x45) |
||
90 | OP(LDIND_I1, "ldind.i1", 0x46) |
||
91 | OP(LDIND_U1, "ldind.u1", 0x47) |
||
92 | OP(LDIND_I2, "ldind.i2", 0x48) |
||
93 | OP(LDIND_U2, "ldind.u2", 0x49) |
||
94 | OP(LDIND_I4, "ldind.i4", 0x4a) |
||
95 | OP(LDIND_U4, "ldind.u4", 0x4b) |
||
96 | OP(LDIND_I8, "ldind.i8", 0x4c) |
||
97 | OP(LDIND_I, "ldind.i", 0x4d) |
||
98 | OP(LDIND_R4, "ldind.r4", 0x4e) |
||
99 | OP(LDIND_R8, "ldind.r8", 0x4f) |
||
100 | OP(LDIND_REF, "ldind.ref", 0x50) |
||
101 | OP(STIND_REF, "stind.ref", 0x51) |
||
102 | OP(STIND_I1, "stind.i1", 0x52) |
||
103 | OP(STIND_I2, "stind.i2", 0x53) |
||
104 | OP(STIND_I4, "stind.i4", 0x54) |
||
105 | OP(STIND_I8, "stind.i8", 0x55) |
||
106 | OP(STIND_R4, "stind.r4", 0x56) |
||
107 | OP(STIND_R8, "stind.r8", 0x57) |
||
108 | OP(ADD, "add", 0x58) |
||
109 | OP(SUB, "sub", 0x59) |
||
110 | OP(MUL, "mul", 0x5a) |
||
111 | OP(DIV, "div", 0x5b) |
||
112 | OP(DIV_UN, "div.un", 0x5c) |
||
113 | OP(REM, "rem", 0x5d) |
||
114 | OP(REM_UN, "rem.un", 0x5e) |
||
115 | OP(AND, "and", 0x5f) |
||
116 | OP(OR, "or", 0x60) |
||
117 | OP(XOR, "xor", 0x61) |
||
118 | OP(SHL, "shl", 0x62) |
||
119 | OP(SHR, "shr", 0x63) |
||
120 | OP(SHR_UN, "shr.un", 0x64) |
||
121 | OP(NEG, "neg", 0x65) |
||
122 | OP(NOT, "not", 0x66) |
||
123 | OP(CONV_I1, "conv.i1", 0x67) |
||
124 | OP(CONV_I2, "conv.i2", 0x68) |
||
125 | OP(CONV_I4, "conv.i4", 0x69) |
||
126 | OP(CONV_I8, "conv.i8", 0x6a) |
||
127 | OP(CONV_R4, "conv.r4", 0x6b) |
||
128 | OP(CONV_R8, "conv.r8", 0x6c) |
||
129 | OP(CONV_U4, "conv.u4", 0x6d) |
||
130 | OP(CONV_U8, "conv.u8", 0x6e) |
||
131 | OP(CALLVIRT, "callvirt", 0x6f) |
||
132 | OP(CPOBJ, "cpobj", 0x70) |
||
133 | OP(LDOBJ, "ldobj", 0x71) |
||
134 | OP(LDSTR, "ldstr", 0x72) |
||
135 | OP(NEWOBJ, "newobj", 0x73) |
||
136 | OP(CASTCLASS, "castclass", 0x74) |
||
137 | OP(ISINST, "isinst", 0x75) |
||
138 | OP(CONV_R_UN, "conv.r.un", 0x76) |
||
139 | OP(ANN_DATA_S, "ann.data.s", 0x77) |
||
140 | OP(UNBOX, "unbox", 0x79) |
||
141 | OP(THROW, "throw", 0x7a) |
||
142 | OP(LDFLD, "ldfld", 0x7b) |
||
143 | OP(LDFLDA, "ldflda", 0x7c) |
||
144 | OP(STFLD, "stfld", 0x7d) |
||
145 | OP(LDSFLD, "ldsfld", 0x7e) |
||
146 | OP(LDSFLDA, "ldsflda", 0x7f) |
||
147 | OP(STSFLD, "stsfld", 0x80) |
||
148 | OP(STOBJ, "stobj", 0x81) |
||
149 | OP(CONV_OVF_I1_UN, "conv.ovf.i1.un", 0x82) |
||
150 | OP(CONV_OVF_I2_UN, "conv.ovf.i2.un", 0x83) |
||
151 | OP(CONV_OVF_I4_UN, "conv.ovf.i4.un", 0x84) |
||
152 | OP(CONV_OVF_I8_UN, "conv.ovf.i8.un", 0x85) |
||
153 | OP(CONV_OVF_U1_UN, "conv.ovf.u1.un", 0x86) |
||
154 | OP(CONV_OVF_U2_UN, "conv.ovf.u2.un", 0x87) |
||
155 | OP(CONV_OVF_U4_UN, "conv.ovf.u4.un", 0x88) |
||
156 | OP(CONV_OVF_U8_UN, "conv.ovf.u8.un", 0x89) |
||
157 | OP(CONV_OVF_I_UN, "conv.ovf.i.un", 0x8a) |
||
158 | OP(CONV_OVF_U_UN, "conv.ovf.u.un", 0x8b) |
||
159 | OP(BOX, "box", 0x8c) |
||
160 | OP(NEWARR, "newarr", 0x8d) |
||
161 | OP(LDLEN, "ldlen", 0x8e) |
||
162 | OP(LDELEMA, "ldelema", 0x8f) |
||
163 | OP(LDELEM_I1, "ldelem.i1", 0x90) |
||
164 | OP(LDELEM_U1, "ldelem.u1", 0x91) |
||
165 | OP(LDELEM_I2, "ldelem.i2", 0x92) |
||
166 | OP(LDELEM_U2, "ldelem.u2", 0x93) |
||
167 | OP(LDELEM_I4, "ldelem.i4", 0x94) |
||
168 | OP(LDELEM_U4, "ldelem.u4", 0x95) |
||
169 | OP(LDELEM_I8, "ldelem.i8", 0x96) |
||
170 | OP(LDELEM_I, "ldelem.i", 0x97) |
||
171 | OP(LDELEM_R4, "ldelem.r4", 0x98) |
||
172 | OP(LDELEM_R8, "ldelem.r8", 0x99) |
||
173 | OP(LDELEM_REF, "ldelem.ref", 0x9a) |
||
174 | OP(STELEM_I, "stelem.i", 0x9b) |
||
175 | OP(STELEM_I1, "stelem.i1", 0x9c) |
||
176 | OP(STELEM_I2, "stelem.i2", 0x9d) |
||
177 | OP(STELEM_I4, "stelem.i4", 0x9e) |
||
178 | OP(STELEM_I8, "stelem.i8", 0x9f) |
||
179 | OP(STELEM_R4, "stelem.r4", 0xa0) |
||
180 | OP(STELEM_R8, "stelem.r8", 0xa1) |
||
181 | OP(STELEM_REF, "stelem.ref", 0xa2) |
||
182 | OP(CONV_OVF_I1, "conv.ovf.i1", 0xb3) |
||
183 | OP(CONV_OVF_U1, "conv.ovf.u1", 0xb4) |
||
184 | OP(CONV_OVF_I2, "conv.ovf.i2", 0xb5) |
||
185 | OP(CONV_OVF_U2, "conv.ovf.u2", 0xb6) |
||
186 | OP(CONV_OVF_I4, "conv.ovf.i4", 0xb7) |
||
187 | OP(CONV_OVF_U4, "conv.ovf.u4", 0xb8) |
||
188 | OP(CONV_OVF_I8, "conv.ovf.i8", 0xb9) |
||
189 | OP(CONV_OVF_U8, "conv.ovf.u8", 0xba) |
||
190 | OP(REFANYVAL, "refanyval", 0xc2) |
||
191 | OP(CKFINITE, "ckfinite", 0xc3) |
||
192 | OP(MKREFANY, "mkrefany", 0xc6) |
||
193 | OP(ANN_CALL, "ann.call", 0xc7) |
||
194 | OP(ANN_CATCH, "ann.catch", 0xc8) |
||
195 | OP(ANN_DEAD, "ann.dead", 0xc9) |
||
196 | OP(ANN_HOISTED, "ann.hoisted", 0xca) |
||
197 | OP(ANN_HOISTED_CALL, "ann.hoisted.call", 0xcb) |
||
198 | OP(ANN_LAB, "ann.lab", 0xcc) |
||
199 | OP(ANN_DEF, "ann.def", 0xcd) |
||
200 | OP(ANN_REF_S, "ann.ref.s", 0xce) |
||
201 | OP(ANN_PHI, "ann.phi", 0xcf) |
||
202 | OP(LDTOKEN, "ldtoken", 0xd0) |
||
203 | OP(CONV_U2, "conv.u2", 0xd1) |
||
204 | OP(CONV_U1, "conv.u1", 0xd2) |
||
205 | OP(CONV_I, "conv.i", 0xd3) |
||
206 | OP(CONV_OVF_I, "conv.ovf.i", 0xd4) |
||
207 | OP(CONV_OVF_U, "conv.ovf.u", 0xd5) |
||
208 | OP(ADD_OVF, "add.ovf", 0xd6) |
||
209 | OP(ADD_OVF_UN, "add.ovf.un", 0xd7) |
||
210 | OP(MUL_OVF, "mul.ovf", 0xd8) |
||
211 | OP(MUL_OVF_UN, "mul.ovf.un", 0xd9) |
||
212 | OP(SUB_OVF, "sub.ovf", 0xda) |
||
213 | OP(SUB_OVF_UN, "sub.ovf.un", 0xdb) |
||
214 | OP(ENDFINALLY, "endfinally", 0xdc) |
||
215 | OP(LEAVE, "leave", 0xdd) |
||
216 | OP(LEAVE_S, "leave.s", 0xde) |
||
217 | OP(STIND_I, "stind.i", 0xdf) |
||
218 | OP(CONV_U, "conv.u", 0xe0) |
||
219 | |||
220 | /* prefix instructions. we use an opcode >= 256 to ease coding */ |
||
221 | |||
222 | OP(ARGLIST, "arglist", 0x100) |
||
223 | OP(CEQ, "ceq", 0x101) |
||
224 | OP(CGT, "cgt", 0x102) |
||
225 | OP(CGT_UN, "cgt.un", 0x103) |
||
226 | OP(CLT, "clt", 0x104) |
||
227 | OP(CLT_UN, "clt.un", 0x105) |
||
228 | OP(LDFTN, "ldftn", 0x106) |
||
229 | OP(LDVIRTFTN, "ldvirtftn", 0x107) |
||
230 | OP(JMPI, "jmpi", 0x108) |
||
231 | OP(LDARG, "ldarg", 0x109) |
||
232 | OP(LDARGA, "ldarga", 0x10a) |
||
233 | OP(STARG, "starg", 0x10b) |
||
234 | OP(LDLOC, "ldloc", 0x10c) |
||
235 | OP(LDLOCA, "ldloca", 0x10d) |
||
236 | OP(STLOC, "stloc", 0x10e) |
||
237 | OP(LOCALLOC, "localloc", 0x10f) |
||
238 | OP(ENDFILTER, "endfilter", 0x111) |
||
239 | OP(UNALIGNED, "unaligned", 0x112) |
||
240 | OP(VOLATILE, "volatile", 0x113) |
||
241 | OP(TAIL, "tail", 0x114) |
||
242 | OP(INITOBJ, "initobj", 0x115) |
||
243 | OP(ANN_LIVE, "ann.live", 0x116) |
||
244 | OP(CPBLK, "cpblk", 0x117) |
||
245 | OP(INITBLK, "initblk", 0x118) |
||
246 | OP(ANN_REF, "ann.ref", 0x119) |
||
247 | OP(RETHROW, "rethrow", 0x11a) |
||
248 | OP(SIZEOF, "sizeof", 0x11c) |
||
249 | OP(REFANYTYPE, "refanytype", 0x11d) |
||
250 | OP(ANN_DATA, "ann.data", 0x122) |
||
251 | OP(ANN_ARG, "ann.arg", 0x123) |