2 * CIL opcode definition
4 * Copyright (c) 2002 Fabrice Bellard
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.
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.
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.
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)
60 OP(CALL
, "call", 0x28)
61 OP(CALLI
, "calli", 0x29)
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)
77 OP(BRFALSE
, "brfalse", 0x39)
78 OP(BRTRUE
, "brtrue", 0x3a)
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)
112 OP(DIV_UN
, "div.un", 0x5c)
114 OP(REM_UN
, "rem.un", 0x5e)
120 OP(SHR_UN
, "shr.un", 0x64)
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)
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)
220 /* prefix instructions. we use an opcode >= 256 to ease coding */
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)