Merge pull request #5714 from alexischr/update_bockbuild
[mono.git] / mono / mini / interp / mintops.h
1 /**
2  * \file
3  */
4
5 #ifndef __INTERPRETER_MINTOPS_H
6 #define __INTERPRETER_MINTOPS_H
7
8 #include <glib.h>
9
10 typedef enum
11 {
12         MintOpNoArgs,
13         MintOpShortInt,
14         MintOpUShortInt,
15         MintOpInt,
16         MintOpLongInt,
17         MintOpFloat,
18         MintOpDouble,
19         MintOpBranch,
20         MintOpShortBranch,
21         MintOpSwitch,
22         MintOpMethodToken,
23         MintOpFieldToken,
24         MintOpClassToken,
25         MintOpTwoShorts,
26         MintOpShortAndInt
27 } MintOpArgType;
28
29 #define OPDEF(a,b,c,d) \
30         a,
31 enum {
32 #include "mintops.def"
33         MINT_LASTOP
34 };
35 #undef OPDEF
36
37 #if NO_UNALIGNED_ACCESS
38 #  if G_BYTE_ORDER == G_LITTLE_ENDIAN
39 #define READ32(x) (((guint16 *)(x)) [0] | ((guint16 *)(x)) [1] << 16)
40 #define READ64(x) ((guint64)((guint16 *)(x)) [0] | \
41                    (guint64)((guint16 *)(x)) [1] << 16 | \
42                    (guint64)((guint16 *)(x)) [2] << 32 | \
43                    (guint64)((guint16 *)(x)) [3] << 48)
44 #  else
45 #define READ32(x) (((guint16 *)(x)) [0] << 16 | ((guint16 *)(x)) [1])
46 #define READ64(x) ((guint64)((guint16 *)(x)) [0] << 48 | \
47                    (guint64)((guint16 *)(x)) [1] << 32 | \
48                    (guint64)((guint16 *)(x)) [2] << 16 | \
49                    (guint64)((guint16 *)(x)) [3])
50 #  endif
51 #else /* unaligned access OK */
52 #define READ32(x) (*(guint32 *)(x))
53 #define READ64(x) (*(guint64 *)(x))
54 #endif
55
56 extern const char *mono_interp_opname[];
57 extern unsigned char mono_interp_oplen[];
58 extern MintOpArgType mono_interp_opargtype[];
59 extern const guint16 *mono_interp_dis_mintop(const unsigned short *base, const guint16 *ip);
60
61 #endif
62