java.rs/src/vm/opcodes.rs
2023-11-27 22:12:31 +01:00

168 lines
2.4 KiB
Rust

use crate::classloader::io::{Lookupswitch, Tableswitch};
#[allow(non_camel_case_types)]
#[derive(Clone, Debug)]
pub(crate) enum Opcode {
NOP,
ACONST_NULL,
ICONST(i16),
LCONST(u8),
FCONST(u8),
DCONST(u8),
BIPUSH(u8),
SIPUSH(u16),
LDC(u16),
LDC_W(u16),
LDC2_W(u16),
ILOAD(u8),
WIDE_ILOAD(u16),
LLOAD(u8),
WIDE_LLOAD(u16),
FLOAD(u8),
WIDE_FLOAD(u16),
DLOAD(u8),
WIDE_DLOAD(u16),
ALOAD(u8),
WIDE_ALOAD(u16),
IALOAD,
LALOAD,
FALOAD,
DALOAD,
AALOAD,
BALOAD,
CALOAD,
SALOAD,
ISTORE(u8),
WIDE_ISTORE(u16),
LSTORE(u8),
WIDE_LSTORE(u16),
FSTORE(u8),
WIDE_FSTORE(u16),
DSTORE(u8),
WIDE_DSTORE(u16),
ASTORE(u8),
WIDE_ASTORE(u16),
IASTORE,
LASTORE,
FASTORE,
DASTORE,
AASTORE,
BASTORE,
CASTORE,
SASTORE,
POP,
DUP,
DUP_X1,
DUP_X2,
DUP2,
DUP2_X1,
DUP2_X2,
IADD,
LADD,
FADD,
DADD,
ISUB,
LSUB,
FSUB,
DSUB,
IMUL,
LMUL,
FMUL,
DMUL,
IDIV,
LDIV,
FDIV,
DDIV,
IREM,
LREM,
FREM,
DREM,
INEG,
LNEG,
FNEG,
DNEG,
ISHL,
LSHL,
ISHR,
LSHR,
IUSHR,
LUSHR,
IAND,
LAND,
IOR,
LOR,
IXOR,
LXOR,
IINC(u8, u8),
I2L,
I2F,
I2D,
L2I,
L2F,
L2D,
WIDE_IINC(u16, u16),
F2I,
F2L,
F2D,
D2I,
D2L,
D2F,
I2B,
I2C,
I2S,
LCMP,
FCMPL,
FCMPG,
DCMPL,
DCMPG,
IFEQ(u16),
IFNE(u16),
IFLT(u16),
IFGE(u16),
IFGT(u16),
IFLE(u16),
IF_ICMPEQ(u16),
IF_ICMPNE(u16),
IF_ICMPLT(u16),
IF_ICMPGE(u16),
IF_ICMPGT(u16),
IF_ICMPLE(u16),
IF_ACMPEQ(u16),
IF_ACMPNE(u16),
GOTO(u16),
JSR(u16),
RET(u8),
WIDE_RET(u16),
TABLESWITCH(Tableswitch),
LOOKUPSWITCH(Lookupswitch),
IRETURN,
LRETURN,
FRETURN,
DRETURN,
ARETURN,
RETURN_VOID,
GETSTATIC(u16),
PUTSTATIC(u16),
GETFIELD(u16),
PUTFIELD(u16),
INVOKEVIRTUAL(u16),
INVOKESPECIAL(u16),
INVOKESTATIC(u16),
INVOKEINTERFACE(u16, u8),
INVOKEDYNAMIC(u16),
NEW(u16),
NEWARRAY(u8),
ANEWARRAY(u16),
ARRAYLENGTH,
ATHROW,
CHECKCAST(u16),
INSTANCEOF(u16),
MONITORENTER,
MONITOREXIT,
WIDE(Box<Opcode>),
MULTIANEWARRAY(u16, u8),
IFNULL(u16),
IFNONNULL(u16),
GOTOW(i32),
JSR_W(i32),
}