/*
 * Copyright (C) 2018-2020 Western Digital Corporation or its affiliates
 * Copyright (C) 2017-2018 Wearable, Inc.
 * Copyright (C) 2000-2012 leJOS Contributors
 * Copyright (C) 2000 Jose H. Solorzano and TinyVM Contributors
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at https://mozilla.org/MPL/2.0/.
 * 
 * This Source Code Form is “Incompatible With Secondary Licenses”,
 * as defined by the Mozilla Public License, v. 2.0.
 */

#ifndef _OPCODES_H
#define _OPCODES_H

#define OP_NOP	0
#define OP_ACONST_NULL	1
#define OP_ICONST_M1	2
#define OP_ICONST_0	3
#define OP_ICONST_1	4
#define OP_ICONST_2	5
#define OP_ICONST_3	6
#define OP_ICONST_4	7
#define OP_ICONST_5	8
#define OP_LCONST_0	9
#define OP_LCONST_1	10
#define OP_FCONST_0	11
#define OP_FCONST_1	12
#define OP_FCONST_2	13
#define OP_DCONST_0	14
#define OP_DCONST_1	15
#define OP_BIPUSH	16
#define OP_SIPUSH	17
#define OP_LDC	18
#define OP_LDC_W	19
#define OP_LDC2_W	20
#define OP_ILOAD	21
#define OP_LLOAD	22
#define OP_FLOAD	23
#define OP_DLOAD	24
#define OP_ALOAD	25
#define OP_ILOAD_0	26
#define OP_ILOAD_1	27
#define OP_ILOAD_2	28
#define OP_ILOAD_3	29
#define OP_LLOAD_0	30
#define OP_LLOAD_1	31
#define OP_LLOAD_2	32
#define OP_LLOAD_3	33
#define OP_FLOAD_0	34
#define OP_FLOAD_1	35
#define OP_FLOAD_2	36
#define OP_FLOAD_3	37
#define OP_DLOAD_0	38
#define OP_DLOAD_1	39
#define OP_DLOAD_2	40
#define OP_DLOAD_3	41
#define OP_ALOAD_0	42
#define OP_ALOAD_1	43
#define OP_ALOAD_2	44
#define OP_ALOAD_3	45
#define OP_IALOAD	46
#define OP_LALOAD	47
#define OP_FALOAD	48
#define OP_DALOAD	49
#define OP_AALOAD	50
#define OP_BALOAD	51
#define OP_CALOAD	52
#define OP_SALOAD	53
#define OP_ISTORE	54
#define OP_LSTORE	55
#define OP_FSTORE	56
#define OP_DSTORE	57
#define OP_ASTORE	58
#define OP_ISTORE_0	59
#define OP_ISTORE_1	60
#define OP_ISTORE_2	61
#define OP_ISTORE_3	62
#define OP_LSTORE_0	63
#define OP_LSTORE_1	64
#define OP_LSTORE_2	65
#define OP_LSTORE_3	66
#define OP_FSTORE_0	67
#define OP_FSTORE_1	68
#define OP_FSTORE_2	69
#define OP_FSTORE_3	70
#define OP_DSTORE_0	71
#define OP_DSTORE_1	72
#define OP_DSTORE_2	73
#define OP_DSTORE_3	74
#define OP_ASTORE_0	75
#define OP_ASTORE_1	76
#define OP_ASTORE_2	77
#define OP_ASTORE_3	78
#define OP_IASTORE	79
#define OP_LASTORE	80
#define OP_FASTORE	81
#define OP_DASTORE	82
#define OP_AASTORE	83
#define OP_BASTORE	84
#define OP_CASTORE	85
#define OP_SASTORE	86
#define OP_POP	87
#define OP_POP2	88
#define OP_DUP	89
#define OP_DUP_X1	90
#define OP_DUP_X2	91
#define OP_DUP2	92
#define OP_DUP2_X1	93
#define OP_DUP2_X2	94
#define OP_SWAP	95
#define OP_IADD	96
#define OP_LADD	97
#define OP_FADD	98
#define OP_DADD	99
#define OP_ISUB	100
#define OP_LSUB	101
#define OP_FSUB	102
#define OP_DSUB	103
#define OP_IMUL	104
#define OP_LMUL	105
#define OP_FMUL	106
#define OP_DMUL	107
#define OP_IDIV	108
#define OP_LDIV	109
#define OP_FDIV	110
#define OP_DDIV	111
#define OP_IREM	112
#define OP_LREM	113
#define OP_FREM	114
#define OP_DREM	115
#define OP_INEG	116
#define OP_LNEG	117
#define OP_FNEG	118
#define OP_DNEG	119
#define OP_ISHL	120
#define OP_LSHL	121
#define OP_ISHR	122
#define OP_LSHR	123
#define OP_IUSHR	124
#define OP_LUSHR	125
#define OP_IAND	126
#define OP_LAND	127
#define OP_IOR	128
#define OP_LOR	129
#define OP_IXOR	130
#define OP_LXOR	131
#define OP_IINC	132
#define OP_I2L	133
#define OP_I2F	134
#define OP_I2D	135
#define OP_L2I	136
#define OP_L2F	137
#define OP_L2D	138
#define OP_F2I	139
#define OP_F2L	140
#define OP_F2D	141
#define OP_D2I	142
#define OP_D2L	143
#define OP_D2F	144
#define OP_I2B	145
#define OP_I2C	146
#define OP_I2S	147
#define OP_LCMP	148
#define OP_FCMPL	149
#define OP_FCMPG	150
#define OP_DCMPL	151
#define OP_DCMPG	152
#define OP_IFEQ	153
#define OP_IFNE	154
#define OP_IFLT	155
#define OP_IFGE	156
#define OP_IFGT	157
#define OP_IFLE	158
#define OP_IF_ICMPEQ	159
#define OP_IF_ICMPNE	160
#define OP_IF_ICMPLT	161
#define OP_IF_ICMPGE	162
#define OP_IF_ICMPGT	163
#define OP_IF_ICMPLE	164
#define OP_IF_ACMPEQ	165
#define OP_IF_ACMPNE	166
#define OP_GOTO	167
#define OP_JSR	168
#define OP_RET	169
#define OP_TABLESWITCH	170
#define OP_LOOKUPSWITCH	171
#define OP_IRETURN	172
#define OP_LRETURN	173
#define OP_FRETURN	174
#define OP_DRETURN	175
#define OP_ARETURN	176
#define OP_RETURN	177
#define OP_GETSTATIC	178
#define OP_PUTSTATIC	179
#define OP_GETFIELD	180
#define OP_PUTFIELD	181
#define OP_INVOKEVIRTUAL	182
#define OP_INVOKESPECIAL	183
#define OP_INVOKESTATIC	184
#define OP_INVOKEVIRTUAL2	185
#define OP_XXXUNUSEDXXX	186
#define OP_NEW	187
#define OP_NEWARRAY	188
#define OP_ANEWARRAY	189
#define OP_ARRAYLENGTH	190
#define OP_ATHROW	191
#define OP_CHECKCAST	192
#define OP_INSTANCEOF	193
#define OP_MONITORENTER	194
#define OP_MONITOREXIT	195
#define OP_WIDE	196
#define OP_MULTIANEWARRAY	197
#define OP_IFNULL	198
#define OP_IFNONNULL	199
#define OP_GOTO_W	200
#define OP_JSR_W	201
#define OP_BREAKPOINT	202
///////////////////////////////////
#define OP_GETSTATIC_1  203
#define OP_GETSTATIC_2  204
#define OP_GETSTATIC_3  205
#define OP_GETSTATIC_4  206
#define OP_PUTSTATIC_1  207
#define OP_PUTSTATIC_2  208
#define OP_PUTSTATIC_3  209
#define OP_PUTSTATIC_4  210
// extended value get constant opcodes
#define OP_LDC_1 211
#define OP_LDC_2 212
#define OP_LDC_3 213
#define OP_LDC_4 214
#define OP_LDC_5 215
#define OP_LDC_6 216
#define OP_LDC_7 217
#define OP_LDC_8 218
#define OP_LDC_9 219
#define OP_LDC_10 220
#define OP_LDC_11 221
#define OP_LDC_12 222
#define OP_LDC_13 223
#define OP_LDC_14 224
#define OP_LDC_15 225
#define OP_LDC_16 226
#define OP_GETFIELD_1 227
#define OP_PUTFIELD_1 228
// special method used to call out to java
#define OP_INVOKEJAVA 229
#endif
