Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
453 lines (402 sloc) 18.7 KB
// Copyright (c) 2012 DotNetAnywhere
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
#if !defined(__JIT_OPCODES_H)
#define __JIT_OPCODES_H
#include "EvalStack.h"
// JIT opcodes may be up to 9 bits long
#define JIT_OPCODE_MAXBITS 9
#define JIT_OPCODE_MAXNUM (1 << JIT_OPCODE_MAXBITS)
//#define JIT_OPCODE_MASK ((1 << JIT_OPCODE_MAXBITS) - 1)
//#define JIT_OPCODE(opCode) ((opCode) & JIT_OPCODE_MASK)
//#define JIT_PARAM(opCode) ((opCode) >> JIT_OPCODE_MAXBITS)
// Note that the exact order of some of these op-codes matters.
// This is due to optimisations where groups of opcodes can be handled together
#define JIT_NOP 0x0
#define JIT_RETURN 0x1
#define JIT_LOAD_I32 0x2
#define JIT_BRANCH 0x3
#define JIT_LOAD_STRING 0x4
#define JIT_CALLVIRT_O 0x5
#define JIT_CALL_NATIVE 0x6
#define JIT_CALL_O 0x7
#define JIT_NEWOBJECT 0x8
#define JIT_LOAD_PARAMLOCAL_ADDR 0x9
#define JIT_CALL_PTR 0xa
#define JIT_BOX_CALLVIRT 0xb
#define JIT_INIT_VALUETYPE 0xc
#define JIT_NEW_VECTOR 0xd
#define JIT_NEWOBJECT_VALUETYPE 0xe
#define JIT_IS_INSTANCE 0xf
#define JIT_LOAD_NULL 0x10
#define JIT_UNBOX2VALUETYPE 0x11
#define JIT_UNBOX2OBJECT 0x12
#define JIT_LOAD_FIELD_ADDR 0x13
#define JIT_DUP_GENERAL 0x14
#define JIT_POP 0x15
#define JIT_STORE_OBJECT_VALUETYPE 0x16
#define JIT_DEREF_CALLVIRT 0x17
#define JIT_STORE_ELEMENT 0x18
#define JIT_LEAVE 0x19
#define JIT_END_FINALLY 0x1a
#define JIT_THROW 0x1b
#define JIT_RETHROW 0x1c
#define JIT_LOADOBJECT 0x1d
#define JIT_LOAD_VECTOR_LEN 0x1e
#define JIT_SWITCH 0x1f
#define JIT_LOAD_ELEMENT_ADDR 0x20
#define JIT_CALL_INTERFACE 0x21
#define JIT_CAST_CLASS 0x22
#define JIT_LOAD_ELEMENT 0x23
#define JIT_LOADFIELD_VALUETYPE 0x24
#define JIT_LOADFIELD 0x25
#define JIT_LOADFUNCTION 0x26
#define JIT_INVOKE_DELEGATE 0x27
#define JIT_CALL_PINVOKE 0x28
#define JIT_LOAD_I64 0x29
#define JIT_INIT_OBJECT 0x2a
#define JIT_DUP_4 0x2b
#define JIT_DUP_8 0x2c
#define JIT_LOADSTATICFIELDADDRESS_CHECKTYPEINIT 0x2d
#define JIT_POP_4 0x2e
#define JIT_LOAD_F32 0x2f
#define JIT_LOADPARAMLOCAL_TYPEID 0x30
#define JIT_LOADPARAMLOCAL_INT64 (JIT_LOADPARAMLOCAL_TYPEID + EVALSTACK_INT64)
#define JIT_LOADPARAMLOCAL_INT32 (JIT_LOADPARAMLOCAL_TYPEID + EVALSTACK_INT32)
#define JIT_LOADPARAMLOCAL_INTNATIVE (JIT_LOADPARAMLOCAL_TYPEID + EVALSTACK_INTNATIVE)
//#define JIT_LOADPARAMLOCAL_F (JIT_LOADPARAMLOCAL_TYPEID + EVALSTACK_F)
#define JIT_LOADPARAMLOCAL_F32 (JIT_LOADPARAMLOCAL_TYPEID + EVALSTACK_F32)
#define JIT_LOADPARAMLOCAL_PTR (JIT_LOADPARAMLOCAL_TYPEID + EVALSTACK_PTR)
#define JIT_LOADPARAMLOCAL_O (JIT_LOADPARAMLOCAL_TYPEID + EVALSTACK_O)
//#define JIT_LOADPARAMLOCAL_TRANSPTR (JIT_LOADPARAMLOCAL_TYPEID + EVALSTACK_TRANSPTR)
#define JIT_LOADPARAMLOCAL_F64 (JIT_LOADPARAMLOCAL_TYPEID + EVALSTACK_F64)
#define JIT_LOADPARAMLOCAL_VALUETYPE (JIT_LOADPARAMLOCAL_TYPEID + EVALSTACK_VALUETYPE)
#define JIT_STOREPARAMLOCAL_TYPEID 0x38
#define JIT_STOREPARAMLOCAL_INT64 (JIT_STOREPARAMLOCAL_TYPEID + EVALSTACK_INT64)
#define JIT_STOREPARAMLOCAL_INT32 (JIT_STOREPARAMLOCAL_TYPEID + EVALSTACK_INT32)
#define JIT_STOREPARAMLOCAL_INTNATIVE (JIT_STOREPARAMLOCAL_TYPEID + EVALSTACK_INTNATIVE)
//#define JIT_STOREPARAMLOCAL_F (JIT_STOREPARAMLOCAL_TYPEID + EVALSTACK_F)
#define JIT_STOREPARAMLOCAL_F32 (JIT_STOREPARAMLOCAL_TYPEID + EVALSTACK_F32)
#define JIT_STOREPARAMLOCAL_PTR (JIT_STOREPARAMLOCAL_TYPEID + EVALSTACK_PTR)
#define JIT_STOREPARAMLOCAL_O (JIT_STOREPARAMLOCAL_TYPEID + EVALSTACK_O)
//#define JIT_STOREPARAMLOCAL_TRANSPTR (JIT_STOREPARAMLOCAL_TYPEID + EVALSTACK_TRANSPTR)
#define JIT_STOREPARAMLOCAL_F64 (JIT_STOREPARAMLOCAL_TYPEID + EVALSTACK_F64)
#define JIT_STOREPARAMLOCAL_VALUETYPE (JIT_STOREPARAMLOCAL_TYPEID + EVALSTACK_VALUETYPE)
#define JIT_STOREFIELD_TYPEID 0x48
#define JIT_STOREFIELD_INT64 (JIT_STOREFIELD_TYPEID + EVALSTACK_INT64)
#define JIT_STOREFIELD_INT32 (JIT_STOREFIELD_TYPEID + EVALSTACK_INT32)
#define JIT_STOREFIELD_INTNATIVE (JIT_STOREFIELD_TYPEID + EVALSTACK_INTNATIVE)
//#define JIT_STOREFIELD_F (JIT_STOREFIELD_TYPEID + EVALSTACK_F)
#define JIT_STOREFIELD_F32 (JIT_STOREFIELD_TYPEID + EVALSTACK_F32)
#define JIT_STOREFIELD_PTR (JIT_STOREFIELD_TYPEID + EVALSTACK_PTR)
#define JIT_STOREFIELD_O (JIT_STOREFIELD_TYPEID + EVALSTACK_O)
//#define JIT_STOREFIELD_TRANSPTR (JIT_STOREFIELD_TYPEID + EVALSTACK_TRANSPTR)
#define JIT_STOREFIELD_F64 (JIT_STOREFIELD_TYPEID + EVALSTACK_F64)
#define JIT_STOREFIELD_VALUETYPE (JIT_STOREFIELD_TYPEID + EVALSTACK_VALUETYPE)
#define JIT_LOADSTATICFIELD_CHECKTYPEINIT_TYPEID 0x50
#define JIT_LOADSTATICFIELD_CHECKTYPEINIT_INT64 (JIT_LOADSTATICFIELD_CHECKTYPEINIT_TYPEID + EVALSTACK_INT64)
#define JIT_LOADSTATICFIELD_CHECKTYPEINIT_INT32 (JIT_LOADSTATICFIELD_CHECKTYPEINIT_TYPEID + EVALSTACK_INT32)
#define JIT_LOADSTATICFIELD_CHECKTYPEINIT_INTNATIVE (JIT_LOADSTATICFIELD_CHECKTYPEINIT_TYPEID + EVALSTACK_INTNATIVE)
//#define JIT_LOADSTATICFIELD_CHECKTYPEINIT_F (JIT_LOADSTATICFIELD_CHECKTYPEINIT_TYPEID + EVALSTACK_F)
#define JIT_LOADSTATICFIELD_CHECKTYPEINIT_F32 (JIT_LOADSTATICFIELD_CHECKTYPEINIT_TYPEID + EVALSTACK_F32)
#define JIT_LOADSTATICFIELD_CHECKTYPEINIT_PTR (JIT_LOADSTATICFIELD_CHECKTYPEINIT_TYPEID + EVALSTACK_PTR)
#define JIT_LOADSTATICFIELD_CHECKTYPEINIT_O (JIT_LOADSTATICFIELD_CHECKTYPEINIT_TYPEID + EVALSTACK_O)
//#define JIT_LOADSTATICFIELD_CHECKTYPEINIT_TRANSPTR (JIT_LOADSTATICFIELD_CHECKTYPEINIT_TYPEID + EVALSTACK_TRANSPTR)
#define JIT_LOADSTATICFIELD_CHECKTYPEINIT_F64 (JIT_LOADSTATICFIELD_CHECKTYPEINIT_TYPEID + EVALSTACK_F64)
#define JIT_LOADSTATICFIELD_CHECKTYPEINIT_VALUETYPE (JIT_LOADSTATICFIELD_CHECKTYPEINIT_TYPEID + EVALSTACK_VALUETYPE)
#define JIT_LOADSTATICFIELD_TYPEID 0x58
#define JIT_LOADSTATICFIELD_INT64 (JIT_LOADSTATICFIELD_TYPEID + EVALSTACK_INT64)
#define JIT_LOADSTATICFIELD_INT32 (JIT_LOADSTATICFIELD_TYPEID + EVALSTACK_INT32)
#define JIT_LOADSTATICFIELD_INTNATIVE (JIT_LOADSTATICFIELD_TYPEID + EVALSTACK_INTNATIVE)
//#define JIT_LOADSTATICFIELD_F (JIT_LOADSTATICFIELD_TYPEID + EVALSTACK_F)
#define JIT_LOADSTATICFIELD_F32 (JIT_LOADSTATICFIELD_TYPEID + EVALSTACK_F32)
#define JIT_LOADSTATICFIELD_PTR (JIT_LOADSTATICFIELD_TYPEID + EVALSTACK_PTR)
#define JIT_LOADSTATICFIELD_O (JIT_LOADSTATICFIELD_TYPEID + EVALSTACK_O)
//#define JIT_LOADSTATICFIELD_TRANSPTR (JIT_LOADSTATICFIELD_TYPEID + EVALSTACK_TRANSPTR)
#define JIT_LOADSTATICFIELD_F64 (JIT_LOADSTATICFIELD_TYPEID + EVALSTACK_F64)
#define JIT_LOADSTATICFIELD_VALUEPTYE (JIT_LOADSTATICFIELD_TYPEID + EVALSTACK_VALUETYPE)
#define JIT_STORESTATICFIELD_TYPEID 0x60
#define JIT_STORESTATICFIELD_INT64 (JIT_STORESTATICFIELD_TYPEID + EVALSTACK_INT64)
#define JIT_STORESTATICFIELD_INT32 (JIT_STORESTATICFIELD_TYPEID + EVALSTACK_INT32)
#define JIT_STORESTATICFIELD_INTNATIVE (JIT_STORESTATICFIELD_TYPEID + EVALSTACK_INTNATIVE)
//#define JIT_STORESTATICFIELD_F (JIT_STORESTATICFIELD_TYPEID + EVALSTACK_F)
#define JIT_STORESTATICFIELD_F32 (JIT_STORESTATICFIELD_TYPEID + EVALSTACK_F32)
#define JIT_STORESTATICFIELD_F64 (JIT_STORESTATICFIELD_TYPEID + EVALSTACK_F64)
#define JIT_STORESTATICFIELD_PTR (JIT_STORESTATICFIELD_TYPEID + EVALSTACK_PTR)
#define JIT_STORESTATICFIELD_O (JIT_STORESTATICFIELD_TYPEID + EVALSTACK_O)
//#define JIT_STORESTATICFIELD_TRANSPTR (JIT_STORESTATICFIELD_TYPEID + EVALSTACK_TRANSPTR)
#define JIT_STORESTATICFIELD_VALUETYPE (JIT_STORESTATICFIELD_TYPEID + EVALSTACK_VALUETYPE)
#define JIT_BOX_TYPEID 0x68
#define JIT_BOX_INT64 (JIT_BOX_TYPEID + EVALSTACK_INT64)
#define JIT_BOX_INT32 (JIT_BOX_TYPEID + EVALSTACK_INT32)
#define JIT_BOX_INTNATIVE (JIT_BOX_TYPEID + EVALSTACK_INTNATIVE)
//#define JIT_BOX_F (JIT_BOX_TYPEID + EVALSTACK_F)
#define JIT_BOX_F32 (JIT_BOX_TYPEID + EVALSTACK_F32)
#define JIT_BOX_PTR (JIT_BOX_TYPEID + EVALSTACK_PTR)
#define JIT_BOX_O (JIT_BOX_TYPEID + EVALSTACK_O)
//#define JIT_BOX_TRANSPTR (JIT_BOX_TYPEID + EVALSTACK_TRANSPTR)
#define JIT_BOX_F64 (JIT_BOX_TYPEID + EVALSTACK_F64)
#define JIT_BOX_VALUETYPE (JIT_BOX_TYPEID + EVALSTACK_VALUETYPE)
#define JIT_CEQ_I32I32 0x70
#define JIT_CGT_I32I32 0x71
#define JIT_CGT_UN_I32I32 0x72
#define JIT_CLT_I32I32 0x73
#define JIT_CLT_UN_I32I32 0x74
#define JIT_CEQ_I64I64 0x75
#define JIT_CGT_I64I64 0x76
#define JIT_CGT_UN_I64I64 0x77
#define JIT_CLT_I64I64 0x78
#define JIT_CLT_UN_I64I64 0x79
#define JIT_ADD_OVF_I32I32 0x7a
#define JIT_ADD_OVF_UN_I32I32 0x7b
#define JIT_MUL_OVF_I32I32 0x7c
#define JIT_MUL_OVF_UN_I32I32 0x7d
#define JIT_SUB_OVF_I32I32 0x7e
#define JIT_SUB_OVF_UN_I32I32 0x7f
#define JIT_ADD_I32I32 0x80
#define JIT_SUB_I32I32 0x81
#define JIT_MUL_I32I32 0x82
#define JIT_DIV_I32I32 0x83
#define JIT_DIV_UN_I32I32 0x84
#define JIT_REM_I32I32 0x85
#define JIT_REM_UN_I32I32 0x86
#define JIT_AND_I32I32 0x87
#define JIT_OR_I32I32 0x88
#define JIT_XOR_I32I32 0x89
#define JIT_NEG_I32 0x8a
#define JIT_NOT_I32 0x8b
#define JIT_NEG_I64 0x8c
#define JIT_NOT_I64 0x8d
#define JIT_BOX_NULLABLE 0x8e
#define JIT_LOAD_F64 0x8f
#define JIT_BEQ_I32I32 0x90
#define JIT_BGE_I32I32 0x91
#define JIT_BGT_I32I32 0x92
#define JIT_BLE_I32I32 0x93
#define JIT_BLT_I32I32 0x94
#define JIT_BNE_UN_I32I32 0x95
#define JIT_BGE_UN_I32I32 0x96
#define JIT_BGT_UN_I32I32 0x97
#define JIT_BLE_UN_I32I32 0x98
#define JIT_BLT_UN_I32I32 0x99
#define JIT_BEQ_I64I64 0x9a
#define JIT_BGE_I64I64 0x9b
#define JIT_BGT_I64I64 0x9c
#define JIT_BLE_I64I64 0x9d
#define JIT_BLT_I64I64 0x9e
#define JIT_BNE_UN_I64I64 0x9f
#define JIT_BGE_UN_I64I64 0xa0
#define JIT_BGT_UN_I64I64 0xa1
#define JIT_BLE_UN_I64I64 0xa2
#define JIT_BLT_UN_I64I64 0xa3
#define JIT_SHL_I32 0xa8
#define JIT_SHR_I32 0xa9
#define JIT_SHR_UN_I32 0xaa
#define JIT_SHL_I64 0xab
#define JIT_SHR_I64 0xac
#define JIT_SHR_UN_I64 0xad
#define JIT_BRANCH_FALSE 0xae
#define JIT_BRANCH_TRUE 0xaf
#define JIT_LOADTOKEN_BASE 0xb0
#define JIT_LOADTOKEN_TYPE (JIT_LOADTOKEN_BASE + 0)
#define JIT_LOADTOKEN_METHOD (JIT_LOADTOKEN_BASE + 1)
#define JIT_LOADTOKEN_FIELD (JIT_LOADTOKEN_BASE + 2)
#define JIT_LOADINDIRECT_I8 0xb3
#define JIT_LOADINDIRECT_U8 0xb4
#define JIT_LOADINDIRECT_I16 0xb5
#define JIT_LOADINDIRECT_U16 0xb6
#define JIT_LOADINDIRECT_I32 0xb7
#define JIT_LOADINDIRECT_U32 0xb8
#define JIT_LOADINDIRECT_I64 0xb9
#define JIT_LOADINDIRECT_I 0xba
#define JIT_LOADINDIRECT_R32 0xbb
#define JIT_LOADINDIRECT_R64 0xbc
#define JIT_LOADINDIRECT_REF 0xbd
#define JIT_STOREINDIRECT_REF 0xbe
#define JIT_STOREINDIRECT_U8 0xbf
#define JIT_STOREINDIRECT_U16 0xc0
#define JIT_STOREINDIRECT_U32 0xc1
#define JIT_STOREINDIRECT_U64 0xc2
#define JIT_STOREINDIRECT_R32 0xc3
#define JIT_STOREINDIRECT_R64 0xc4
//#define JIT_CONV_SIGNED32 0xc5
//#define JIT_CONV_UNSIGNED32 0xc6
//#define JIT_CONV_INT_I64 0xc7
//#define JIT_CONV_I1 0xc5
//#define JIT_CONV_I2 0xc6
//#define JIT_CONV_I4 0xc7
//#define JIT_CONV_I8 0xc8
//#define JIT_CONV_R4 0xc9
//#define JIT_CONV_R8 0xca
//#define JIT_CONV_U4 0xcb
//#define JIT_CONV_U8 0xcc
//#define JIT_CONV_U2 0xcd
//#define JIT_CONV_U1 0xce
//#define JIT_CONV_I_NATIVE 0xcf
//#define JIT_CONV_U_NATIVE 0xd0
//#define JIT_CONV_OVF_I1 0xd1
//#define JIT_CONV_OVF_U1 0xd2
//#define JIT_CONV_OVF_I2 0xd3
//#define JIT_CONV_OVF_U2 0xd4
//#define JIT_CONV_OVF_I4 0xd5
//#define JIT_CONV_OVF_U4 0xd6
//#define JIT_CONV_OVF_I8 0xd7
//#define JIT_CONV_OVF_U8 0xd8
#define JIT_UNBOX_NULLABLE 0xda
#define JIT_STORE_ELEMENT_32 0xde
#define JIT_STORE_ELEMENT_64 0xdf
#define JIT_LOAD_ELEMENT_I8 0xe0
#define JIT_LOAD_ELEMENT_U8 0xe1
#define JIT_LOAD_ELEMENT_I16 0xe2
#define JIT_LOAD_ELEMENT_U16 0xe3
#define JIT_LOAD_ELEMENT_I32 0xe4
#define JIT_LOAD_ELEMENT_U32 0xe5
#define JIT_LOAD_ELEMENT_I64 0xe6
#define JIT_LOAD_ELEMENT_R32 0xe7
#define JIT_LOAD_ELEMENT_R64 0xe8
#define JIT_ADD_OVF_I64I64 0xea
#define JIT_ADD_OVF_UN_I64I64 0xeb
#define JIT_MUL_OVF_I64I64 0xec
#define JIT_MUL_OVF_UN_I64I64 0xed
#define JIT_SUB_OVF_I64I64 0xee
#define JIT_SUB_OVF_UN_I64I64 0xef
#define JIT_ADD_I64I64 0xf0
#define JIT_SUB_I64I64 0xf1
#define JIT_MUL_I64I64 0xf2
#define JIT_DIV_I64I64 0xf3
#define JIT_DIV_UN_I64I64 0xf4
#define JIT_REM_I64I64 0xf5
#define JIT_REM_UN_I64I64 0xf6
#define JIT_AND_I64I64 0xf7
#define JIT_OR_I64I64 0xf8
#define JIT_XOR_I64I64 0xf9
#define JIT_CEQ_F32F32 0xfa
#define JIT_CGT_F32F32 0xfb
#define JIT_CGT_UN_F32F32 0xfc
#define JIT_CLT_F32F32 0xfd
#define JIT_CLT_UN_F32F32 0xfe
#define JIT_BEQ_F32F32 0xff
#define JIT_BGE_F32F32 0x100
#define JIT_BGT_F32F32 0x101
#define JIT_BLE_F32F32 0x102
#define JIT_BLT_F32F32 0x103
#define JIT_BNE_UN_F32F32 0x104
#define JIT_BGE_UN_F32F32 0x105
#define JIT_BGT_UN_F32F32 0x106
#define JIT_BLE_UN_F32F32 0x107
#define JIT_BLT_UN_F32F32 0x108
#define JIT_ADD_F32F32 0x109
#define JIT_SUB_F32F32 0x10a
#define JIT_MUL_F32F32 0x10b
#define JIT_DIV_F32F32 0x10c
#define JIT_DIV_UN_F32F32 0x10d // Never used
#define JIT_REM_F32F32 0x10e
#define JIT_REM_UN_F32F32 0x10f // Never used
#define JIT_CEQ_F64F64 0x110
#define JIT_CGT_F64F64 0x111
#define JIT_CGT_UN_F64F64 0x112
#define JIT_CLT_F64F64 0x113
#define JIT_CLT_UN_F64F64 0x114
#define JIT_BEQ_F64F64 0x115
#define JIT_BGE_F64F64 0x116
#define JIT_BGT_F64F64 0x117
#define JIT_BLE_F64F64 0x118
#define JIT_BLT_F64F64 0x119
#define JIT_BNE_UN_F64F64 0x11a
#define JIT_BGE_UN_F64F64 0x11b
#define JIT_BGT_UN_F64F64 0x11c
#define JIT_BLE_UN_F64F64 0x11d
#define JIT_BLT_UN_F64F64 0x11e
#define JIT_ADD_F64F64 0x11f
#define JIT_SUB_F64F64 0x120
#define JIT_MUL_F64F64 0x121
#define JIT_DIV_F64F64 0x122
#define JIT_DIV_UN_F64F64 0x123 // Never used
#define JIT_REM_F64F64 0x124
#define JIT_REM_UN_F64F64 0x125 // Never used
#define JIT_LOADPARAMLOCAL_0 0x127 // Load 4-byte param/local at offset 0
#define JIT_LOADPARAMLOCAL_1 0x128 // Load 4-byte param/local at offset 4
#define JIT_LOADPARAMLOCAL_2 0x129 // Load 4-byte param/local at offset 8
#define JIT_LOADPARAMLOCAL_3 0x12a // Load 4-byte param/local at offset 12
#define JIT_LOADPARAMLOCAL_4 0x12b // Load 4-byte param/local at offset 16
#define JIT_LOADPARAMLOCAL_5 0x12c // Load 4-byte param/local at offset 20
#define JIT_LOADPARAMLOCAL_6 0x12d // Load 4-byte param/local at offset 24
#define JIT_LOADPARAMLOCAL_7 0x12e // Load 4-byte param/local at offset 28
#define JIT_STOREPARAMLOCAL_0 0x12f // Store 4-byte param/local at offset 0
#define JIT_STOREPARAMLOCAL_1 0x130 // Store 4-byte param/local at offset 4
#define JIT_STOREPARAMLOCAL_2 0x131 // Store 4-byte param/local at offset 8
#define JIT_STOREPARAMLOCAL_3 0x132 // Store 4-byte param/local at offset 12
#define JIT_STOREPARAMLOCAL_4 0x133 // Store 4-byte param/local at offset 16
#define JIT_STOREPARAMLOCAL_5 0x134 // Store 4-byte param/local at offset 20
#define JIT_STOREPARAMLOCAL_6 0x135 // Store 4-byte param/local at offset 24
#define JIT_STOREPARAMLOCAL_7 0x136 // Store 4-byte param/local at offset 28
#define JIT_LOAD_I4_M1 0x137
#define JIT_LOAD_I4_0 0x138
#define JIT_LOAD_I4_1 0x139
#define JIT_LOAD_I4_2 0x13a
#define JIT_LOADFIELD_4 0x13b
#define JIT_CONV_OFFSET_I32 0
#define JIT_CONV_OFFSET_U32 1
#define JIT_CONV_OFFSET_I64 2
#define JIT_CONV_OFFSET_U64 3
#define JIT_CONV_OFFSET_R32 4
#define JIT_CONV_OFFSET_R64 5
#define JIT_CONV_FROM_I32 0x140
#define JIT_CONV_I32_I32 (JIT_CONV_FROM_I32 + JIT_CONV_OFFSET_I32)
#define JIT_CONV_I32_U32 (JIT_CONV_FROM_I32 + JIT_CONV_OFFSET_U32)
#define JIT_CONV_I32_I64 (JIT_CONV_FROM_I32 + JIT_CONV_OFFSET_I64)
#define JIT_CONV_I32_U64 (JIT_CONV_FROM_I32 + JIT_CONV_OFFSET_U64)
#define JIT_CONV_I32_R32 (JIT_CONV_FROM_I32 + JIT_CONV_OFFSET_R32)
#define JIT_CONV_I32_R64 (JIT_CONV_FROM_I32 + JIT_CONV_OFFSET_R64)
#define JIT_CONV_FROM_U32 0x146
#define JIT_CONV_U32_I32 (JIT_CONV_FROM_U32 + JIT_CONV_OFFSET_I32)
#define JIT_CONV_U32_U32 (JIT_CONV_FROM_U32 + JIT_CONV_OFFSET_U32)
#define JIT_CONV_U32_I64 (JIT_CONV_FROM_U32 + JIT_CONV_OFFSET_I64)
#define JIT_CONV_U32_U64 (JIT_CONV_FROM_U32 + JIT_CONV_OFFSET_U64)
#define JIT_CONV_U32_R32 (JIT_CONV_FROM_U32 + JIT_CONV_OFFSET_R32)
#define JIT_CONV_U32_R64 (JIT_CONV_FROM_U32 + JIT_CONV_OFFSET_R64)
#define JIT_CONV_FROM_I64 0x14c
#define JIT_CONV_I64_I32 (JIT_CONV_FROM_I64 + JIT_CONV_OFFSET_I32)
#define JIT_CONV_I64_U32 (JIT_CONV_FROM_I64 + JIT_CONV_OFFSET_U32)
#define JIT_CONV_I64_I64 (JIT_CONV_FROM_I64 + JIT_CONV_OFFSET_I64) // Not used
#define JIT_CONV_I64_U64 (JIT_CONV_FROM_I64 + JIT_CONV_OFFSET_U64) // Not used
#define JIT_CONV_I64_R32 (JIT_CONV_FROM_I64 + JIT_CONV_OFFSET_R32)
#define JIT_CONV_I64_R64 (JIT_CONV_FROM_I64 + JIT_CONV_OFFSET_R64)
#define JIT_CONV_FROM_U64 0x152
#define JIT_CONV_U64_I32 (JIT_CONV_FROM_U64 + JIT_CONV_OFFSET_I32)
#define JIT_CONV_U64_U32 (JIT_CONV_FROM_U64 + JIT_CONV_OFFSET_U32)
#define JIT_CONV_U64_I64 (JIT_CONV_FROM_U64 + JIT_CONV_OFFSET_I64) // Not used
#define JIT_CONV_U64_U64 (JIT_CONV_FROM_U64 + JIT_CONV_OFFSET_U64) // Not used
#define JIT_CONV_U64_R32 (JIT_CONV_FROM_U64 + JIT_CONV_OFFSET_R32)
#define JIT_CONV_U64_R64 (JIT_CONV_FROM_U64 + JIT_CONV_OFFSET_R64)
#define JIT_CONV_FROM_R32 0x158
#define JIT_CONV_R32_I32 (JIT_CONV_FROM_R32 + JIT_CONV_OFFSET_I32)
#define JIT_CONV_R32_U32 (JIT_CONV_FROM_R32 + JIT_CONV_OFFSET_U32)
#define JIT_CONV_R32_I64 (JIT_CONV_FROM_R32 + JIT_CONV_OFFSET_I64)
#define JIT_CONV_R32_U64 (JIT_CONV_FROM_R32 + JIT_CONV_OFFSET_U64)
#define JIT_CONV_R32_R32 (JIT_CONV_FROM_R32 + JIT_CONV_OFFSET_R32)
#define JIT_CONV_R32_R64 (JIT_CONV_FROM_R32 + JIT_CONV_OFFSET_R64)
#define JIT_CONV_FROM_R64 0x15e
#define JIT_CONV_R64_I32 (JIT_CONV_FROM_R64 + JIT_CONV_OFFSET_I32)
#define JIT_CONV_R64_U32 (JIT_CONV_FROM_R64 + JIT_CONV_OFFSET_U32)
#define JIT_CONV_R64_I64 (JIT_CONV_FROM_R64 + JIT_CONV_OFFSET_I64)
#define JIT_CONV_R64_U64 (JIT_CONV_FROM_R64 + JIT_CONV_OFFSET_U64)
#define JIT_CONV_R64_R32 (JIT_CONV_FROM_R64 + JIT_CONV_OFFSET_R32)
#define JIT_CONV_R64_R64 (JIT_CONV_FROM_R64 + JIT_CONV_OFFSET_R64)
#endif