/* * jit-opcode.h - List of primitive opcodes for JIT instructions. * * Copyright (C) 2004 Southern Storm Software, Pty Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _JIT_OPCODE_H #define _JIT_OPCODE_H #include #ifdef __cplusplus extern "C" { #endif /* * Simple opcodes. */ #define JIT_OP_NOP 0x0000 /* * Conversion opcodes. */ #define JIT_OP_TRUNC_SBYTE 0x0001 #define JIT_OP_TRUNC_UBYTE 0x0002 #define JIT_OP_TRUNC_SHORT 0x0003 #define JIT_OP_TRUNC_USHORT 0x0004 #define JIT_OP_TRUNC_INT 0x0005 #define JIT_OP_TRUNC_UINT 0x0006 #define JIT_OP_CHECK_SBYTE 0x0007 #define JIT_OP_CHECK_UBYTE 0x0008 #define JIT_OP_CHECK_SHORT 0x0009 #define JIT_OP_CHECK_USHORT 0x000A #define JIT_OP_CHECK_INT 0x000B #define JIT_OP_CHECK_UINT 0x000C #define JIT_OP_LOW_WORD 0x000D #define JIT_OP_EXPAND_INT 0x000E #define JIT_OP_EXPAND_UINT 0x000F #define JIT_OP_CHECK_LOW_WORD 0x0010 #define JIT_OP_CHECK_SIGNED_LOW_WORD 0x0011 #define JIT_OP_CHECK_LONG 0x0012 #define JIT_OP_CHECK_ULONG 0x0013 #define JIT_OP_NFLOAT_TO_INT 0x0014 #define JIT_OP_NFLOAT_TO_UINT 0x0015 #define JIT_OP_NFLOAT_TO_LONG 0x0016 #define JIT_OP_NFLOAT_TO_ULONG 0x0017 #define JIT_OP_CHECK_NFLOAT_TO_INT 0x0018 #define JIT_OP_CHECK_NFLOAT_TO_UINT 0x0019 #define JIT_OP_CHECK_NFLOAT_TO_LONG 0x001A #define JIT_OP_CHECK_NFLOAT_TO_ULONG 0x001B #define JIT_OP_INT_TO_NFLOAT 0x001C #define JIT_OP_UINT_TO_NFLOAT 0x001D #define JIT_OP_LONG_TO_NFLOAT 0x001E #define JIT_OP_ULONG_TO_NFLOAT 0x001F #define JIT_OP_NFLOAT_TO_FLOAT32 0x0020 #define JIT_OP_NFLOAT_TO_FLOAT64 0x0021 #define JIT_OP_FLOAT32_TO_NFLOAT 0x0022 #define JIT_OP_FLOAT64_TO_NFLOAT 0x0023 /* * Arithmetic opcodes. */ #define JIT_OP_IADD 0x0024 #define JIT_OP_IADD_OVF 0x0025 #define JIT_OP_IADD_OVF_UN 0x0026 #define JIT_OP_ISUB 0x0027 #define JIT_OP_ISUB_OVF 0x0028 #define JIT_OP_ISUB_OVF_UN 0x0029 #define JIT_OP_IMUL 0x002A #define JIT_OP_IMUL_OVF 0x002B #define JIT_OP_IMUL_OVF_UN 0x002C #define JIT_OP_IDIV 0x002D #define JIT_OP_IDIV_UN 0x002E #define JIT_OP_IREM 0x002F #define JIT_OP_IREM_UN 0x0030 #define JIT_OP_INEG 0x0031 #define JIT_OP_LADD 0x0032 #define JIT_OP_LADD_OVF 0x0033 #define JIT_OP_LADD_OVF_UN 0x0034 #define JIT_OP_LSUB 0x0035 #define JIT_OP_LSUB_OVF 0x0036 #define JIT_OP_LSUB_OVF_UN 0x0037 #define JIT_OP_LMUL 0x0038 #define JIT_OP_LMUL_OVF 0x0039 #define JIT_OP_LMUL_OVF_UN 0x003A #define JIT_OP_LDIV 0x003B #define JIT_OP_LDIV_UN 0x003C #define JIT_OP_LREM 0x003D #define JIT_OP_LREM_UN 0x003E #define JIT_OP_LNEG 0x003F #define JIT_OP_FADD 0x0040 #define JIT_OP_FSUB 0x0041 #define JIT_OP_FMUL 0x0042 #define JIT_OP_FDIV 0x0043 #define JIT_OP_FREM 0x0044 #define JIT_OP_FREM_IEEE 0x0045 #define JIT_OP_FNEG 0x0046 #define JIT_OP_DADD 0x0047 #define JIT_OP_DSUB 0x0048 #define JIT_OP_DMUL 0x0049 #define JIT_OP_DDIV 0x004A #define JIT_OP_DREM 0x004B #define JIT_OP_DREM_IEEE 0x004C #define JIT_OP_DNEG 0x004D #define JIT_OP_NFADD 0x004E #define JIT_OP_NFSUB 0x004F #define JIT_OP_NFMUL 0x0050 #define JIT_OP_NFDIV 0x0051 #define JIT_OP_NFREM 0x0052 #define JIT_OP_NFREM_IEEE 0x0053 #define JIT_OP_NFNEG 0x0054 /* * Bitwise opcodes. */ #define JIT_OP_IAND 0x0055 #define JIT_OP_IOR 0x0056 #define JIT_OP_IXOR 0x0057 #define JIT_OP_INOT 0x0058 #define JIT_OP_ISHL 0x0059 #define JIT_OP_ISHR 0x005A #define JIT_OP_ISHR_UN 0x005B #define JIT_OP_LAND 0x005C #define JIT_OP_LOR 0x005D #define JIT_OP_LXOR 0x005E #define JIT_OP_LNOT 0x005F #define JIT_OP_LSHL 0x0060 #define JIT_OP_LSHR 0x0061 #define JIT_OP_LSHR_UN 0x0062 /* * Branch opcodes. */ #define JIT_OP_BR 0x0063 #define JIT_OP_BR_IFALSE 0x0064 #define JIT_OP_BR_ITRUE 0x0065 #define JIT_OP_BR_IEQ 0x0066 #define JIT_OP_BR_INE 0x0067 #define JIT_OP_BR_ILT 0x0068 #define JIT_OP_BR_ILT_UN 0x0069 #define JIT_OP_BR_ILE 0x006A #define JIT_OP_BR_ILE_UN 0x006B #define JIT_OP_BR_IGT 0x006C #define JIT_OP_BR_IGT_UN 0x006D #define JIT_OP_BR_IGE 0x006E #define JIT_OP_BR_IGE_UN 0x006F #define JIT_OP_BR_LFALSE 0x0070 #define JIT_OP_BR_LTRUE 0x0071 #define JIT_OP_BR_LEQ 0x0072 #define JIT_OP_BR_LNE 0x0073 #define JIT_OP_BR_LLT 0x0074 #define JIT_OP_BR_LLT_UN 0x0075 #define JIT_OP_BR_LLE 0x0076 #define JIT_OP_BR_LLE_UN 0x0077 #define JIT_OP_BR_LGT 0x0078 #define JIT_OP_BR_LGT_UN 0x0079 #define JIT_OP_BR_LGE 0x007A #define JIT_OP_BR_LGE_UN 0x007B #define JIT_OP_BR_FEQ 0x007C #define JIT_OP_BR_FNE 0x007D #define JIT_OP_BR_FLT 0x007E #define JIT_OP_BR_FLE 0x007F #define JIT_OP_BR_FGT 0x0080 #define JIT_OP_BR_FGE 0x0081 #define JIT_OP_BR_FEQ_INV 0x0082 #define JIT_OP_BR_FNE_INV 0x0083 #define JIT_OP_BR_FLT_INV 0x0084 #define JIT_OP_BR_FLE_INV 0x0085 #define JIT_OP_BR_FGT_INV 0x0086 #define JIT_OP_BR_FGE_INV 0x0087 #define JIT_OP_BR_DEQ 0x0088 #define JIT_OP_BR_DNE 0x0089 #define JIT_OP_BR_DLT 0x008A #define JIT_OP_BR_DLE 0x008B #define JIT_OP_BR_DGT 0x008C #define JIT_OP_BR_DGE 0x008D #define JIT_OP_BR_DEQ_INV 0x008E #define JIT_OP_BR_DNE_INV 0x008F #define JIT_OP_BR_DLT_INV 0x0090 #define JIT_OP_BR_DLE_INV 0x0091 #define JIT_OP_BR_DGT_INV 0x0092 #define JIT_OP_BR_DGE_INV 0x0093 #define JIT_OP_BR_NFEQ 0x0094 #define JIT_OP_BR_NFNE 0x0095 #define JIT_OP_BR_NFLT 0x0096 #define JIT_OP_BR_NFLE 0x0097 #define JIT_OP_BR_NFGT 0x0098 #define JIT_OP_BR_NFGE 0x0099 #define JIT_OP_BR_NFEQ_INV 0x009A #define JIT_OP_BR_NFNE_INV 0x009B #define JIT_OP_BR_NFLT_INV 0x009C #define JIT_OP_BR_NFLE_INV 0x009D #define JIT_OP_BR_NFGT_INV 0x009E #define JIT_OP_BR_NFGE_INV 0x009F /* * Comparison opcodes. */ #define JIT_OP_ICMP 0x00A0 #define JIT_OP_ICMP_UN 0x00A1 #define JIT_OP_LCMP 0x00A2 #define JIT_OP_LCMP_UN 0x00A3 #define JIT_OP_FCMPL 0x00A4 #define JIT_OP_FCMPG 0x00A5 #define JIT_OP_DCMPL 0x00A6 #define JIT_OP_DCMPG 0x00A7 #define JIT_OP_NFCMPL 0x00A8 #define JIT_OP_NFCMPG 0x00A9 #define JIT_OP_IEQ 0x00AA #define JIT_OP_INE 0x00AB #define JIT_OP_ILT 0x00AC #define JIT_OP_ILT_UN 0x00AD #define JIT_OP_ILE 0x00AE #define JIT_OP_ILE_UN 0x00AF #define JIT_OP_IGT 0x00B0 #define JIT_OP_IGT_UN 0x00B1 #define JIT_OP_IGE 0x00B2 #define JIT_OP_IGE_UN 0x00B3 #define JIT_OP_LEQ 0x00B4 #define JIT_OP_LNE 0x00B5 #define JIT_OP_LLT 0x00B6 #define JIT_OP_LLT_UN 0x00B7 #define JIT_OP_LLE 0x00B8 #define JIT_OP_LLE_UN 0x00B9 #define JIT_OP_LGT 0x00BA #define JIT_OP_LGT_UN 0x00BB #define JIT_OP_LGE 0x00BC #define JIT_OP_LGE_UN 0x00BD #define JIT_OP_FEQ 0x00BE #define JIT_OP_FNE 0x00BF #define JIT_OP_FLT 0x00C0 #define JIT_OP_FLE 0x00C1 #define JIT_OP_FGT 0x00C2 #define JIT_OP_FGE 0x00C3 #define JIT_OP_FEQ_INV 0x00C4 #define JIT_OP_FNE_INV 0x00C5 #define JIT_OP_FLT_INV 0x00C6 #define JIT_OP_FLE_INV 0x00C7 #define JIT_OP_FGT_INV 0x00C8 #define JIT_OP_FGE_INV 0x00C9 #define JIT_OP_DEQ 0x00CA #define JIT_OP_DNE 0x00CB #define JIT_OP_DLT 0x00CC #define JIT_OP_DLE 0x00CD #define JIT_OP_DGT 0x00CE #define JIT_OP_DGE 0x00CF #define JIT_OP_DEQ_INV 0x00D0 #define JIT_OP_DNE_INV 0x00D1 #define JIT_OP_DLT_INV 0x00D2 #define JIT_OP_DLE_INV 0x00D3 #define JIT_OP_DGT_INV 0x00D4 #define JIT_OP_DGE_INV 0x00D5 #define JIT_OP_NFEQ 0x00D6 #define JIT_OP_NFNE 0x00D7 #define JIT_OP_NFLT 0x00D8 #define JIT_OP_NFLE 0x00D9 #define JIT_OP_NFGT 0x00DA #define JIT_OP_NFGE 0x00DB #define JIT_OP_NFEQ_INV 0x00DC #define JIT_OP_NFNE_INV 0x00DD #define JIT_OP_NFLT_INV 0x00DE #define JIT_OP_NFLE_INV 0x00DF #define JIT_OP_NFGT_INV 0x00E0 #define JIT_OP_NFGE_INV 0x00E1 #define JIT_OP_IS_FNAN 0x00E2 #define JIT_OP_IS_FINF 0x00E3 #define JIT_OP_IS_FFINITE 0x00E4 #define JIT_OP_IS_DNAN 0x00E5 #define JIT_OP_IS_DINF 0x00E6 #define JIT_OP_IS_DFINITE 0x00E7 #define JIT_OP_IS_NFNAN 0x00E8 #define JIT_OP_IS_NFINF 0x00E9 #define JIT_OP_IS_NFFINITE 0x00EA /* * Mathematical functions. */ #define JIT_OP_FACOS 0x00EB #define JIT_OP_FASIN 0x00EC #define JIT_OP_FATAN 0x00ED #define JIT_OP_FATAN2 0x00EE #define JIT_OP_FCEIL 0x00EF #define JIT_OP_FCOS 0x00F0 #define JIT_OP_FCOSH 0x00F1 #define JIT_OP_FEXP 0x00F2 #define JIT_OP_FFLOOR 0x00F3 #define JIT_OP_FLOG 0x00F4 #define JIT_OP_FLOG10 0x00F5 #define JIT_OP_FPOW 0x00F6 #define JIT_OP_FRINT 0x00F7 #define JIT_OP_FROUND 0x00F8 #define JIT_OP_FSIN 0x00F9 #define JIT_OP_FSINH 0x00FA #define JIT_OP_FSQRT 0x00FB #define JIT_OP_FTAN 0x00FC #define JIT_OP_FTANH 0x00FD #define JIT_OP_DACOS 0x00FE #define JIT_OP_DASIN 0x00FF #define JIT_OP_DATAN 0x0100 #define JIT_OP_DATAN2 0x0101 #define JIT_OP_DCEIL 0x0102 #define JIT_OP_DCOS 0x0103 #define JIT_OP_DCOSH 0x0104 #define JIT_OP_DEXP 0x0105 #define JIT_OP_DFLOOR 0x0106 #define JIT_OP_DLOG 0x0107 #define JIT_OP_DLOG10 0x0108 #define JIT_OP_DPOW 0x0109 #define JIT_OP_DRINT 0x010A #define JIT_OP_DROUND 0x010B #define JIT_OP_DSIN 0x010C #define JIT_OP_DSINH 0x010D #define JIT_OP_DSQRT 0x010E #define JIT_OP_DTAN 0x010F #define JIT_OP_DTANH 0x0110 #define JIT_OP_NFACOS 0x0111 #define JIT_OP_NFASIN 0x0112 #define JIT_OP_NFATAN 0x0113 #define JIT_OP_NFATAN2 0x0114 #define JIT_OP_NFCEIL 0x0115 #define JIT_OP_NFCOS 0x0116 #define JIT_OP_NFCOSH 0x0117 #define JIT_OP_NFEXP 0x0118 #define JIT_OP_NFFLOOR 0x0119 #define JIT_OP_NFLOG 0x011A #define JIT_OP_NFLOG10 0x011B #define JIT_OP_NFPOW 0x011C #define JIT_OP_NFRINT 0x011D #define JIT_OP_NFROUND 0x011E #define JIT_OP_NFSIN 0x011F #define JIT_OP_NFSINH 0x0120 #define JIT_OP_NFSQRT 0x0121 #define JIT_OP_NFTAN 0x0122 #define JIT_OP_NFTANH 0x0123 /* * Absolute, minimum, maximum, and sign. */ #define JIT_OP_IABS 0x0124 #define JIT_OP_LABS 0x0125 #define JIT_OP_FABS 0x0126 #define JIT_OP_DABS 0x0127 #define JIT_OP_NFABS 0x0128 #define JIT_OP_IMIN 0x0129 #define JIT_OP_IMIN_UN 0x012A #define JIT_OP_LMIN 0x012B #define JIT_OP_LMIN_UN 0x012C #define JIT_OP_FMIN 0x012D #define JIT_OP_DMIN 0x012E #define JIT_OP_NFMIN 0x012F #define JIT_OP_IMAX 0x0130 #define JIT_OP_IMAX_UN 0x0131 #define JIT_OP_LMAX 0x0132 #define JIT_OP_LMAX_UN 0x0133 #define JIT_OP_FMAX 0x0134 #define JIT_OP_DMAX 0x0135 #define JIT_OP_NFMAX 0x0136 #define JIT_OP_ISIGN 0x0137 #define JIT_OP_LSIGN 0x0138 #define JIT_OP_FSIGN 0x0139 #define JIT_OP_DSIGN 0x013A #define JIT_OP_NFSIGN 0x013B /* * Pointer check opcodes. */ #define JIT_OP_CHECK_NULL 0x013C /* * Function calls. */ #define JIT_OP_CALL 0x013D #define JIT_OP_CALL_TAIL 0x013E #define JIT_OP_CALL_INDIRECT 0x013F #define JIT_OP_CALL_INDIRECT_TAIL 0x0140 #define JIT_OP_CALL_VTABLE_PTR 0x0141 #define JIT_OP_CALL_VTABLE_PTR_TAIL 0x0142 #define JIT_OP_CALL_EXTERNAL 0x0143 #define JIT_OP_CALL_EXTERNAL_TAIL 0x0144 #define JIT_OP_RETURN 0x0145 #define JIT_OP_RETURN_INT 0x0146 #define JIT_OP_RETURN_LONG 0x0147 #define JIT_OP_RETURN_FLOAT32 0x0148 #define JIT_OP_RETURN_FLOAT64 0x0149 #define JIT_OP_RETURN_NFLOAT 0x014A #define JIT_OP_RETURN_SMALL_STRUCT 0x014B #define JIT_OP_SETUP_FOR_NESTED 0x014C #define JIT_OP_SETUP_FOR_SIBLING 0x014D #define JIT_OP_IMPORT 0x014E /* * Exception handling. */ #define JIT_OP_THROW 0x014F #define JIT_OP_RETHROW 0x0150 #define JIT_OP_LOAD_PC 0x0151 #define JIT_OP_LOAD_EXCEPTION_PC 0x0152 #define JIT_OP_ENTER_FINALLY 0x0153 #define JIT_OP_LEAVE_FINALLY 0x0154 #define JIT_OP_CALL_FINALLY 0x0155 #define JIT_OP_ENTER_FILTER 0x0156 #define JIT_OP_LEAVE_FILTER 0x0157 #define JIT_OP_CALL_FILTER 0x0158 #define JIT_OP_CALL_FILTER_RETURN 0x0159 #define JIT_OP_ADDRESS_OF_LABEL 0x015A /* * Data manipulation. */ #define JIT_OP_COPY_LOAD_SBYTE 0x015B #define JIT_OP_COPY_LOAD_UBYTE 0x015C #define JIT_OP_COPY_LOAD_SHORT 0x015D #define JIT_OP_COPY_LOAD_USHORT 0x015E #define JIT_OP_COPY_INT 0x015F #define JIT_OP_COPY_LONG 0x0160 #define JIT_OP_COPY_FLOAT32 0x0161 #define JIT_OP_COPY_FLOAT64 0x0162 #define JIT_OP_COPY_NFLOAT 0x0163 #define JIT_OP_COPY_STRUCT 0x0164 #define JIT_OP_COPY_STORE_BYTE 0x0165 #define JIT_OP_COPY_STORE_SHORT 0x0166 #define JIT_OP_ADDRESS_OF 0x0167 /* * Incoming registers, outgoing registers, and stack pushes. */ #define JIT_OP_INCOMING_REG 0x0168 #define JIT_OP_INCOMING_FRAME_POSN 0x0169 #define JIT_OP_OUTGOING_REG 0x016A #define JIT_OP_OUTGOING_FRAME_POSN 0x016B #define JIT_OP_RETURN_REG 0x016C #define JIT_OP_PUSH_INT 0x016D #define JIT_OP_PUSH_LONG 0x016E #define JIT_OP_PUSH_FLOAT32 0x016F #define JIT_OP_PUSH_FLOAT64 0x0170 #define JIT_OP_PUSH_NFLOAT 0x0171 #define JIT_OP_PUSH_STRUCT 0x0172 #define JIT_OP_POP_STACK 0x0173 #define JIT_OP_FLUSH_SMALL_STRUCT 0x0174 #define JIT_OP_SET_PARAM_INT 0x0175 #define JIT_OP_SET_PARAM_LONG 0x0176 #define JIT_OP_SET_PARAM_FLOAT32 0x0177 #define JIT_OP_SET_PARAM_FLOAT64 0x0178 #define JIT_OP_SET_PARAM_NFLOAT 0x0179 #define JIT_OP_SET_PARAM_STRUCT 0x017A #define JIT_OP_PUSH_RETURN_AREA_PTR 0x017B /* * Pointer-relative loads and stores. */ #define JIT_OP_LOAD_RELATIVE_SBYTE 0x017C #define JIT_OP_LOAD_RELATIVE_UBYTE 0x017D #define JIT_OP_LOAD_RELATIVE_SHORT 0x017E #define JIT_OP_LOAD_RELATIVE_USHORT 0x017F #define JIT_OP_LOAD_RELATIVE_INT 0x0180 #define JIT_OP_LOAD_RELATIVE_LONG 0x0181 #define JIT_OP_LOAD_RELATIVE_FLOAT32 0x0182 #define JIT_OP_LOAD_RELATIVE_FLOAT64 0x0183 #define JIT_OP_LOAD_RELATIVE_NFLOAT 0x0184 #define JIT_OP_LOAD_RELATIVE_STRUCT 0x0185 #define JIT_OP_STORE_RELATIVE_BYTE 0x0186 #define JIT_OP_STORE_RELATIVE_SHORT 0x0187 #define JIT_OP_STORE_RELATIVE_INT 0x0188 #define JIT_OP_STORE_RELATIVE_LONG 0x0189 #define JIT_OP_STORE_RELATIVE_FLOAT32 0x018A #define JIT_OP_STORE_RELATIVE_FLOAT64 0x018B #define JIT_OP_STORE_RELATIVE_NFLOAT 0x018C #define JIT_OP_STORE_RELATIVE_STRUCT 0x018D #define JIT_OP_ADD_RELATIVE 0x018E /* * Array element loads and stores. */ #define JIT_OP_LOAD_ELEMENT_SBYTE 0x018F #define JIT_OP_LOAD_ELEMENT_UBYTE 0x0190 #define JIT_OP_LOAD_ELEMENT_SHORT 0x0191 #define JIT_OP_LOAD_ELEMENT_USHORT 0x0192 #define JIT_OP_LOAD_ELEMENT_INT 0x0193 #define JIT_OP_LOAD_ELEMENT_LONG 0x0194 #define JIT_OP_LOAD_ELEMENT_FLOAT32 0x0195 #define JIT_OP_LOAD_ELEMENT_FLOAT64 0x0196 #define JIT_OP_LOAD_ELEMENT_NFLOAT 0x0197 #define JIT_OP_STORE_ELEMENT_BYTE 0x0198 #define JIT_OP_STORE_ELEMENT_SHORT 0x0199 #define JIT_OP_STORE_ELEMENT_INT 0x019A #define JIT_OP_STORE_ELEMENT_LONG 0x019B #define JIT_OP_STORE_ELEMENT_FLOAT32 0x019C #define JIT_OP_STORE_ELEMENT_FLOAT64 0x019D #define JIT_OP_STORE_ELEMENT_NFLOAT 0x019E /* * Block operations. */ #define JIT_OP_MEMCPY 0x019F #define JIT_OP_MEMMOVE 0x01A0 #define JIT_OP_MEMSET 0x01A1 /* * Allocate memory from the stack. */ #define JIT_OP_ALLOCA 0x01A2 /* * Debugging support. */ #define JIT_OP_MARK_OFFSET 0x01A3 #define JIT_OP_MARK_BREAKPOINT 0x01A4 /* * Switch statement support. */ #define JIT_OP_JUMP_TABLE 0x01A5 /* * The number of opcodes in the above list. */ #define JIT_OP_NUM_OPCODES 0x01A6 /* * Opcode information. */ typedef struct jit_opcode_info jit_opcode_info_t; struct jit_opcode_info { const char *name; int flags; }; #define JIT_OPCODE_DEST_MASK 0x0000000F #define JIT_OPCODE_DEST_EMPTY 0x00000000 #define JIT_OPCODE_DEST_INT 0x00000001 #define JIT_OPCODE_DEST_LONG 0x00000002 #define JIT_OPCODE_DEST_FLOAT32 0x00000003 #define JIT_OPCODE_DEST_FLOAT64 0x00000004 #define JIT_OPCODE_DEST_NFLOAT 0x00000005 #define JIT_OPCODE_DEST_ANY 0x00000006 #define JIT_OPCODE_SRC1_MASK 0x000000F0 #define JIT_OPCODE_SRC1_EMPTY 0x00000000 #define JIT_OPCODE_SRC1_INT 0x00000010 #define JIT_OPCODE_SRC1_LONG 0x00000020 #define JIT_OPCODE_SRC1_FLOAT32 0x00000030 #define JIT_OPCODE_SRC1_FLOAT64 0x00000040 #define JIT_OPCODE_SRC1_NFLOAT 0x00000050 #define JIT_OPCODE_SRC1_ANY 0x00000060 #define JIT_OPCODE_SRC2_MASK 0x00000F00 #define JIT_OPCODE_SRC2_EMPTY 0x00000000 #define JIT_OPCODE_SRC2_INT 0x00000100 #define JIT_OPCODE_SRC2_LONG 0x00000200 #define JIT_OPCODE_SRC2_FLOAT32 0x00000300 #define JIT_OPCODE_SRC2_FLOAT64 0x00000400 #define JIT_OPCODE_SRC2_NFLOAT 0x00000500 #define JIT_OPCODE_SRC2_ANY 0x00000600 #define JIT_OPCODE_IS_BRANCH 0x00001000 #define JIT_OPCODE_IS_CALL 0x00002000 #define JIT_OPCODE_IS_CALL_EXTERNAL 0x00004000 #define JIT_OPCODE_IS_REG 0x00008000 #define JIT_OPCODE_IS_ADDROF_LABEL 0x00010000 #define JIT_OPCODE_OPER_MASK 0x01F00000 #define JIT_OPCODE_OPER_NONE 0x00000000 #define JIT_OPCODE_OPER_ADD 0x00100000 #define JIT_OPCODE_OPER_SUB 0x00200000 #define JIT_OPCODE_OPER_MUL 0x00300000 #define JIT_OPCODE_OPER_DIV 0x00400000 #define JIT_OPCODE_OPER_REM 0x00500000 #define JIT_OPCODE_OPER_NEG 0x00600000 #define JIT_OPCODE_OPER_AND 0x00700000 #define JIT_OPCODE_OPER_OR 0x00800000 #define JIT_OPCODE_OPER_XOR 0x00900000 #define JIT_OPCODE_OPER_NOT 0x00A00000 #define JIT_OPCODE_OPER_EQ 0x00B00000 #define JIT_OPCODE_OPER_NE 0x00C00000 #define JIT_OPCODE_OPER_LT 0x00D00000 #define JIT_OPCODE_OPER_LE 0x00E00000 #define JIT_OPCODE_OPER_GT 0x00F00000 #define JIT_OPCODE_OPER_GE 0x01000000 #define JIT_OPCODE_OPER_SHL 0x01100000 #define JIT_OPCODE_OPER_SHR 0x01200000 #define JIT_OPCODE_OPER_SHR_UN 0x01300000 #define JIT_OPCODE_OPER_COPY 0x01400000 #define JIT_OPCODE_OPER_ADDRESS_OF 0x01500000 #ifdef JIT_NATIVE_INT32 #define JIT_OPCODE_DEST_PTR JIT_OPCODE_DEST_INT #define JIT_OPCODE_SRC1_PTR JIT_OPCODE_SRC1_INT #define JIT_OPCODE_SRC2_PTR JIT_OPCODE_SRC2_INT #else #define JIT_OPCODE_DEST_PTR JIT_OPCODE_DEST_LONG #define JIT_OPCODE_SRC1_PTR JIT_OPCODE_SRC1_LONG #define JIT_OPCODE_SRC2_PTR JIT_OPCODE_SRC2_LONG #endif extern jit_opcode_info_t const jit_opcodes[JIT_OP_NUM_OPCODES]; #ifdef __cplusplus }; #endif #endif /* _JIT_OPCODE_H */