/** * \file */ #ifndef __INTERPRETER_MINTOPS_H #define __INTERPRETER_MINTOPS_H #include typedef enum { MintOpNoArgs, MintOpShortInt, MintOpUShortInt, MintOpInt, MintOpLongInt, MintOpFloat, MintOpDouble, MintOpBranch, MintOpShortBranch, MintOpSwitch, MintOpMethodToken, MintOpFieldToken, MintOpClassToken, MintOpTwoShorts, MintOpShortAndInt } MintOpArgType; #define OPDEF(a,b,c,d) \ a, enum { #include "mintops.def" MINT_LASTOP }; #undef OPDEF #if NO_UNALIGNED_ACCESS # if G_BYTE_ORDER == G_LITTLE_ENDIAN #define READ32(x) (((guint16 *)(x)) [0] | ((guint16 *)(x)) [1] << 16) #define READ64(x) ((guint64)((guint16 *)(x)) [0] | \ (guint64)((guint16 *)(x)) [1] << 16 | \ (guint64)((guint16 *)(x)) [2] << 32 | \ (guint64)((guint16 *)(x)) [3] << 48) # else #define READ32(x) (((guint16 *)(x)) [0] << 16 | ((guint16 *)(x)) [1]) #define READ64(x) ((guint64)((guint16 *)(x)) [0] << 48 | \ (guint64)((guint16 *)(x)) [1] << 32 | \ (guint64)((guint16 *)(x)) [2] << 16 | \ (guint64)((guint16 *)(x)) [3]) # endif #else /* unaligned access OK */ #define READ32(x) (*(guint32 *)(x)) #define READ64(x) (*(guint64 *)(x)) #endif extern const char *mono_interp_opname[]; extern unsigned char mono_interp_oplen[]; extern MintOpArgType mono_interp_opargtype[]; extern const guint16 *mono_interp_dis_mintop(const unsigned short *base, const guint16 *ip); #endif