architecture independent marshaling code
[mono.git] / mono / metadata / opcodes.c
1 /*
2  * opcodes.c: CIL instruction information
3  *
4  * Author:
5  *   Paolo Molaro (lupus@ximian.com)
6  *
7  * (C) 2002 Ximian, Inc.
8  */
9 #include <mono/metadata/opcodes.h>
10 #include <stddef.h> /* for NULL */
11
12 #define MONO_PREFIX1_OFFSET MONO_CEE_ARGLIST
13 #define MONO_CUSTOM_PREFIX_OFFSET MONO_CEE_MONO_FUNC1
14
15 #define OPDEF(a,b,c,d,e,f,g,h,i,j) \
16         { Mono ## e, MONO_FLOW_ ## j, MONO_ ## a },
17
18 const MonoOpcode
19 mono_opcodes [MONO_CEE_LAST + 1] = {
20 #include "mono/cil/opcode.def"
21         {0}
22 };
23
24 #undef OPDEF
25
26 #define OPDEF(a,b,c,d,e,f,g,h,i,j) b,
27
28 const char* const
29 mono_opcode_names [MONO_CEE_LAST + 1] = {
30 #include "mono/cil/opcode.def"
31         NULL
32 };
33
34 MonoOpcodeEnum
35 mono_opcode_value (const guint8 **ip)
36 {
37         MonoOpcodeEnum res;
38
39         if (**ip == 0xfe) {
40                 ++*ip;
41                 res = **ip + MONO_PREFIX1_OFFSET;
42         } else if (**ip == MONO_CUSTOM_PREFIX) {
43                 ++*ip;
44                 res = **ip + MONO_CUSTOM_PREFIX_OFFSET;
45         } else {
46                 res = **ip;
47         }
48         
49         return res;
50 }
51