1 /**
2  * \file
3  */
4 
5 #ifndef __MONO_METADATA_OPCODES_H__
6 #define __MONO_METADATA_OPCODES_H__
7 
8 /*
9  * opcodes.h: CIL instruction information
10  *
11  * Author:
12  *   Paolo Molaro (lupus@ximian.com)
13  *
14  * (C) 2002 Ximian, Inc.
15  */
16 
17 #include <mono/utils/mono-publib.h>
18 
19 MONO_BEGIN_DECLS
20 
21 #define MONO_CUSTOM_PREFIX 0xf0
22 
23 #define OPDEF(a,b,c,d,e,f,g,h,i,j) \
24 	MONO_ ## a,
25 
26 typedef enum {
27 #include "mono/cil/opcode.def"
28 	MONO_CEE_LAST
29 } MonoOpcodeEnum;
30 
31 #undef OPDEF
32 
33 enum {
34 	MONO_FLOW_NEXT,
35 	MONO_FLOW_BRANCH,
36 	MONO_FLOW_COND_BRANCH,
37 	MONO_FLOW_ERROR,
38 	MONO_FLOW_CALL,
39 	MONO_FLOW_RETURN,
40 	MONO_FLOW_META
41 };
42 
43 enum {
44 	MonoInlineNone,
45 	MonoInlineType,
46 	MonoInlineField,
47 	MonoInlineMethod,
48 	MonoInlineTok,
49 	MonoInlineString,
50 	MonoInlineSig,
51 	MonoInlineVar,
52 	MonoShortInlineVar,
53 	MonoInlineBrTarget,
54 	MonoShortInlineBrTarget,
55 	MonoInlineSwitch,
56 	MonoInlineR,
57 	MonoShortInlineR,
58 	MonoInlineI,
59 	MonoShortInlineI,
60 	MonoInlineI8
61 };
62 
63 typedef struct {
64 	unsigned char argument;
65 	unsigned char flow_type;
66 	unsigned short opval;
67 } MonoOpcode;
68 
69 MONO_API extern const MonoOpcode mono_opcodes [];
70 
71 MONO_API const char*
72 mono_opcode_name (int opcode);
73 
74 MONO_API MonoOpcodeEnum
75 mono_opcode_value (const mono_byte **ip, const mono_byte *end);
76 
77 MONO_END_DECLS
78 
79 #endif /* __MONO_METADATA_OPCODES_H__ */
80 
81