| Module | Ruva::VM |
| In: |
lib/ruva/class.rb
lib/ruva/stack.rb lib/ruva/opcodes.rb lib/ruva/class_loader.rb lib/ruva/vm.rb lib/ruva/types.rb lib/ruva/class_pool.rb lib/ruva/vmerrors.rb |
| OPMAP | = | { # byte => [mnemonic, argc] 0x00 => ['NOP', 0], 0x01 => ['ACONST_NULL', 0], 0x02 => ['ICONST_M1', 0], 0x03 => ['ICONST_0', 0], 0x04 => ['ICONST_1', 0], 0x05 => ['ICONST_2', 0], 0x06 => ['ICONST_3', 0], 0x07 => ['ICONST_4', 0], 0x08 => ['ICONST_5', 0], 0x09 => ['LCONST_0', 0], 0x0a => ['LCONST_1', 0], 0x0b => ['FCONST_0', 0], 0x0c => ['FCONST_1', 0], 0x0d => ['FCONST_2', 0], 0x0e => ['DCONST_0', 0], 0x0f => ['DCONST_1', 0], 0x10 => ['BIPUSH', 1], 0x11 => ['SIPUSH', 2], 0x12 => ['LDC', 1], 0x13 => ['LDCW', 2], 0x14 => ['LDC2W', 2], 0x15 => ['ILOAD', 1], 0x16 => ['LLOAD', 1], 0x17 => ['FLOAD', 1], 0x18 => ['DLOAD', 1], 0x19 => ['ALOAD', 1], 0x1a => ['ILOAD_0', 0], 0x1b => ['ILOAD_1', 0], 0x1c => ['ILOAD_2', 0], 0x1d => ['ILOAD_3', 0], 0x1e => ['LLOAD_0', 0], 0x1f => ['LLOAD_1', 0], 0x20 => ['LLOAD_2', 0], 0x21 => ['LLOAD_3', 0], 0x22 => ['FLOAD_0', 0], 0x23 => ['FLOAD_1', 0], 0x24 => ['FLOAD_2', 0], 0x25 => ['FLOAD_3', 0], 0x26 => ['DLOAD_0', 0], 0x27 => ['DLOAD_1', 0], 0x28 => ['DLOAD_2', 0], 0x29 => ['DLOAD_3', 0], 0x2a => ['ALOAD_0', 0], 0x2b => ['ALOAD_1', 0], 0x2c => ['ALOAD_2', 0], 0x2d => ['ALOAD_3', 0], 0x2e => ['IALOAD', 0], 0x2f => ['LALOAD', 0], 0x30 => ['FALOAD', 0], 0x31 => ['DALOAD', 0], 0x32 => ['AALOAD', 0], 0x33 => ['BALOAD', 0], 0x34 => ['CALOAD', 0], 0x35 => ['SALOAD', 0], 0x36 => ['ISTORE', 1], 0x37 => ['LSTORE', 1], 0x38 => ['FSTORE', 1], 0x39 => ['DSTORE', 1], 0x3a => ['ASTORE', 1], 0x3b => ['ISTORE_0', 0], 0x3c => ['ISTORE_1', 0], 0x3d => ['ISTORE_2', 0], 0x3e => ['ISTORE_3', 0], 0x3f => ['LSTORE_0', 0], 0x40 => ['LSTORE_1', 0], 0x41 => ['LSTORE_2', 0], 0x42 => ['LSTORE_3', 0], 0x43 => ['FSTORE_0', 0], 0x44 => ['FSTORE_1', 0], 0x45 => ['FSTORE_2', 0], 0x46 => ['FSTORE_3', 0], 0x47 => ['DSTORE_0', 0], 0x48 => ['DSTORE_1', 0], 0x49 => ['DSTORE_2', 0], 0x50 => ['DSTORE_3', 0], 0x4b => ['ASTORE_0', 0], 0x4c => ['ASTORE_1', 0], 0x4d => ['ASTORE_2', 0], 0x4e => ['ASTORE_3', 0], 0x4f => ['IASTORE', 0], 0x50 => ['LASTORE', 0], 0x51 => ['FASTORE', 0], 0x52 => ['DASTORE', 0], 0x53 => ['AASTORE', 0], 0x54 => ['BASTORE', 0], 0x55 => ['CASTORE', 0], 0x56 => ['SASTORE', 0], 0x57 => ['POP', 0], 0x58 => ['POP2', 0], 0x59 => ['DUP', 0], 0x5a => ['DUPX1', 0], 0x5b => ['DUPX2', 0], 0x5c => ['DUP2', 0], 0x5d => ['DUP2X1', [ 0]], 0x5e => ['DUP2X2', [ 0]], 0x5f => ['SWAP', 0], 0x60 => ['IADD', 0], 0x61 => ['LADD', 0], 0x62 => ['FADD', 0], 0x63 => ['DADD', 0], 0x64 => ['ISUB', 0], 0x65 => ['LSUB', 0], 0x66 => ['FSUB', 0], 0x67 => ['DSUB', 0], 0x68 => ['IMUL', 0], 0x69 => ['LMUL', 0], 0x6a => ['FMUL', 0], 0x6b => ['DMUL', 0], 0x6c => ['IDIV', 0], 0x6d => ['LDIV', 0], 0x6e => ['FDIV', 0], 0x6f => ['DDIV', 0], 0x70 => ['IREM', 0], 0x71 => ['LREM', 0], 0x72 => ['FREM', 0], 0x73 => ['DREM', 0], 0x74 => ['INEG', 0], 0x75 => ['LNEG', 0], 0x76 => ['FNEG', 0], 0x77 => ['DNEG', 0], 0x78 => ['ISHL', 0], 0x79 => ['LSHL', 0], 0x7a => ['ISHR', 0], 0x7b => ['LSHR', 0], 0x7c => ['IUSHR', 0], 0x7d => ['LUSHR', 0], 0x7e => ['IAND', 0], 0x7f => ['LAND', 0], 0x80 => ['IOR', 0], 0x82 => ['IXOR', 0], 0x81 => ['LOR', 0], 0x83 => ['LXOR', 0], 0x84 => ['IINC', 2], 0x85 => ['I2L', 0], 0x86 => ['I2F', 0], 0x87 => ['I2D', 0], 0x88 => ['L2I', 0], 0x89 => ['L2F', 0], 0x8a => ['L2D', 0], 0x8b => ['F2I', 0], 0x8c => ['F2L', 0], 0x8d => ['F2D', 0], 0x8e => ['D2I', 0], 0x8f => ['D2L', 0], 0x90 => ['D2F', 0], 0x91 => ['I2B', 0], 0x92 => ['I2C', 0], 0x93 => ['I2S', 0], 0x94 => ['LCMP', 0], 0x95 => ['FCMPL', 0], 0x96 => ['FCMPG', 0], 0x97 => ['DCMPL', 0], 0x98 => ['DCMPG', 0], 0x99 => ['IFEQ', 2], 0x9a => ['IFNE', 2], 0x9b => ['IFLT', 2], 0x9c => ['IFGE', 2], 0x9d => ['IFGT', 2], 0x9e => ['IFLE', 2], 0x9f => ['IFICMPEQ', 2], 0xa0 => ['IFICMPNE', 2], 0xa1 => ['IFICMPLT', 2], 0xa2 => ['IFICMPGE', 2], 0xa3 => ['IFICMPGT', 2], 0xa4 => ['IFICMPLE', 2], 0xa5 => ['IFACMPEQ', 2], 0xa6 => ['IFACMPNE', 2], 0xa7 => ['GOTO', 2], 0xa8 => ['JSR', 2], 0xa9 => ['RET', 1], 0xaa => ['TABLESWITCH', 0], 0xab => ['LOOKUPSWITCH', 0], 0xac => ['IRETURN', 0], 0xad => ['LRETURN', 0], 0xae => ['FRETURN', 0], 0xaf => ['DRETURN', 0], 0xb1 => ['RETURN', 0], 0xb2 => ['GETSTATIC', 2], 0xb4 => ['GETFIELD', 2], 0xb0 => ['ARETURN', 0], 0xb3 => ['PUTSTATIC', 2], 0xb5 => ['PUTFIELD', 2], 0xb6 => ['INVOKEVIRTUAL', 2], 0xb7 => ['INVOKESPECIAL', 2], 0xb8 => ['INVOKESTATIC', 2], 0xb9 => ['INVOKEINTERFACE', 4], 0xba => ['INVOKEDYNAMIC', [ 2]], 0xbb => ['NEW', 2], 0xbc => ['NEWARRAY', 1], 0xbd => ['ANEWARRAY', 2], 0xbe => ['ARRAYLENGTH', 0], 0xbf => ['ATHROW', 0], 0xc8 => ['GOTO_W', 4], 0xc0 => ['CHECKCAST', 2], 0xc1 => ['INSTANCEOF', 2], 0xc2 => ['MONITORENTER', 0], 0xc3 => ['MONITOREXIT', 0], 0xc4 => ['WIDE', 0], 0xc5 => ['MULTIANEWARRAY', 3], 0xc6 => ['IFNULL', 2], 0xc7 => ['IFNONNULL', 2], 0xc9 => ['JSRW', 4], 0xca => ['BREAKPOINT', 0], 0xfe => ['IMPDEP1', 0], 0xff => ['NATIVERETURN', 0] | Mapping of opcodes to mnemonics and arg counts. This is useful for e.g. printing stuff out. The counts are mapped into an array (See below) for use at runtime, so the VM knows how many args to pass to the implementation. | |
| OP_ARGC | = | OPMAP.sort_by { |k,v| k }.inject([]) { |ary, (idx, (name, argc))| ary[idx] = argc and ary } | Array mapping opcode to arg count (bytes) for that opcode |