📄 opcodes.list
字号:
## @(#)opcodes.list 1.77 06/10/10## Copyright 1990-2008 Sun Microsystems, Inc. All Rights Reserved.# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER# # This program is free software; you can redistribute it and/or# modify it under the terms of the GNU General Public License version# 2 only, as published by the Free Software Foundation. # # 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 version 2 for more details (a copy is# included at /legal/license.txt). # # You should have received a copy of the GNU General Public License# version 2 along with this work; if not, write to the Free Software# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA# 02110-1301 USA # # Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa# Clara, CA 95054 or visit www.sun.com if you need additional# information or have any questions. ### Any line that doesn't have a-z in the 1st column is a comment.## The first column is the name of the opcode.## The second column is the opcode's number, or "-" to assign the# next available sequential number.## The third column is the total length of the instruction. We use 0# for opcodes of variable length, as well as unrecognized/unused# opcodes.## The fourth and fifth column give what the opcode pops off the stack, and# what it then pushes back onto the stack# - <no effect on stack> # I integer# L long integer# F float# D double float# A address [array or object]# O object only# R return address (for jsr)# a integer, array, or object# ? unknown# [I], [L], [F], [D], [A], [B], [C], [?]# array of integer, long, float, double, address, bytes, # chars, or anything# 1,2,3,4,+ used by stack duplicating/popping routines. # # 1,2,3,4 represent >>any<< stack type except long or double. Two numbers# separated by a + (in the third column) indicate that the two, together, can# be used for a double or long. (Or they can represent two non-long items).## The sixth column has a comma-separated list of attributes of the# opcode. These are necessary in the stackmap computation dataflow # analysis.## GC -- a GC point# CGC -- a conditional GC point; only if the thread is at a quickening point# BR -- a branch# EXC -- May throw exception# INV -- A method invocation# NFLW -- An instruction that doesn't let control flow through# (returns, athrow, switches, goto, ret)# QUICK -- A quick instruction, re-written by the interpreter.# RET -- A return opcode.# FP -- A floating point opcode# - -- No special attributes to speak of# # The seventh column is a "simplification" of the opcode, for opcode# sequence measurements (see CVM_INSTRUCTION_COUNTING in executejava.c).## The eigth column has the attribute of CVMJITIROpcodeTag.# The ninth column has the attribute of type tag listed in typeid.h.# The tenth column has the attribute of value representing constant value,# local variable number, etc.nop - 1 - - - nop 0 0 0 /* nop */aconst_null - 1 - A - iconst_0 CVMJIT_CONST_JAVA_NUMERIC32 CVM_TYPEID_OBJ 0 /* push null object */iconst_m1 - 1 - I - iconst_0 CVMJIT_CONST_JAVA_NUMERIC32 CVM_TYPEID_INT -1 /* push integer constant -1 */iconst_0 - 1 - I - iconst_0 CVMJIT_CONST_JAVA_NUMERIC32 CVM_TYPEID_INT 0 /* push integer constant 0 */iconst_1 - 1 - I - iconst_0 CVMJIT_CONST_JAVA_NUMERIC32 CVM_TYPEID_INT 1 /* push integer constant 1 */iconst_2 - 1 - I - iconst_0 CVMJIT_CONST_JAVA_NUMERIC32 CVM_TYPEID_INT 2 /* push integer constant 2 */iconst_3 - 1 - I - iconst_0 CVMJIT_CONST_JAVA_NUMERIC32 CVM_TYPEID_INT 3 /* push integer constant 3 */iconst_4 - 1 - I - iconst_0 CVMJIT_CONST_JAVA_NUMERIC32 CVM_TYPEID_INT 4 /* push integer constant 4 */iconst_5 - 1 - I - iconst_0 CVMJIT_CONST_JAVA_NUMERIC32 CVM_TYPEID_INT 5 /* push integer constant 5 */lconst_0 - 1 - L - iconst_0 CVMJIT_CONST_JAVA_NUMERIC64 CVM_TYPEID_LONG 0 /* push long 0L */lconst_1 - 1 - L - iconst_0 CVMJIT_CONST_JAVA_NUMERIC64 CVM_TYPEID_LONG 1 /* push long 1L */fconst_0 - 1 - F - iconst_0 CVMJIT_CONST_JAVA_NUMERIC32 CVM_TYPEID_FLOAT 0 /* push float constant 0.0 */fconst_1 - 1 - F - iconst_0 CVMJIT_CONST_JAVA_NUMERIC32 CVM_TYPEID_FLOAT 1 /* push float constant 1.0 */fconst_2 - 1 - F - iconst_0 CVMJIT_CONST_JAVA_NUMERIC32 CVM_TYPEID_FLOAT 2 /* push float constant 2.0 */dconst_0 - 1 - D - iconst_0 CVMJIT_CONST_JAVA_NUMERIC64 CVM_TYPEID_DOUBLE 0 /* push double float constant 0.0d */dconst_1 - 1 - D - iconst_0 CVMJIT_CONST_JAVA_NUMERIC64 CVM_TYPEID_DOUBLE 1 /* push double float constant 1.0d */bipush - 2 - I - iconst_0 CVMJIT_CONST_JAVA_NUMERIC32 CVM_TYPEID_INT 0 /* push byte-sized value */sipush - 3 - I - iconst_0 CVMJIT_CONST_JAVA_NUMERIC32 CVM_TYPEID_INT 0 /* push two-byte value */ldc - 2 - ? GC,EXC ldc 0 0 0 /* load a const from constant table */ldc_w - 3 - ? GC,EXC ldc 0 0 0ldc2_w - 3 - ? GC,EXC ldc 0 0 0 /* load a 2-word constant . . . */iload - 2 - I - iload CVMJIT_LOCAL CVM_TYPEID_INT 0 /* load local integer variable */lload - 2 - L - iload CVMJIT_LOCAL CVM_TYPEID_LONG 0 /* load local long variable */fload - 2 - F - iload CVMJIT_LOCAL CVM_TYPEID_FLOAT 0 /* load local floating variable */dload - 2 - D - iload CVMJIT_LOCAL CVM_TYPEID_DOUBLE 0 /* load local double variable */aload - 2 - A - aload CVMJIT_LOCAL CVM_TYPEID_OBJ 0 /* load local object variable */iload_0 - 1 - I - iload CVMJIT_LOCAL CVM_TYPEID_INT 0 /* load local integer variable #0 */iload_1 - 1 - I - iload CVMJIT_LOCAL CVM_TYPEID_INT 1 /* load local integer variable #1 */iload_2 - 1 - I - iload CVMJIT_LOCAL CVM_TYPEID_INT 2 /* load local integer variable #2 */iload_3 - 1 - I - iload CVMJIT_LOCAL CVM_TYPEID_INT 3 /* load local integer variable #3 */lload_0 - 1 - L - iload CVMJIT_LOCAL CVM_TYPEID_LONG 0 /* load local long variable #0 */lload_1 - 1 - L - iload CVMJIT_LOCAL CVM_TYPEID_LONG 1 /* load local long variable #1 */lload_2 - 1 - L - iload CVMJIT_LOCAL CVM_TYPEID_LONG 2 /* load local long variable #2 */lload_3 - 1 - L - iload CVMJIT_LOCAL CVM_TYPEID_LONG 3 /* load local long variable #3 */fload_0 - 1 - F - iload CVMJIT_LOCAL CVM_TYPEID_FLOAT 0 /* load local float variable #0 */fload_1 - 1 - F - iload CVMJIT_LOCAL CVM_TYPEID_FLOAT 1 /* load local float variable #1 */fload_2 - 1 - F - iload CVMJIT_LOCAL CVM_TYPEID_FLOAT 2 /* load local float variable #2 */fload_3 - 1 - F - iload CVMJIT_LOCAL CVM_TYPEID_FLOAT 3 /* load local float variable #3 */dload_0 - 1 - D - iload CVMJIT_LOCAL CVM_TYPEID_DOUBLE 0 /* load local double variable #0 */dload_1 - 1 - D - iload CVMJIT_LOCAL CVM_TYPEID_DOUBLE 1 /* load lcl double float variable #1 */dload_2 - 1 - D - iload CVMJIT_LOCAL CVM_TYPEID_DOUBLE 2 /* load lcl double float variable #2 */dload_3 - 1 - D - iload CVMJIT_LOCAL CVM_TYPEID_DOUBLE 3 /* load lcl double float variable #3 */aload_0 - 1 - A - aload_0 CVMJIT_LOCAL CVM_TYPEID_OBJ 0 /* load local object variable #0 */aload_1 - 1 - A - aload CVMJIT_LOCAL CVM_TYPEID_OBJ 1 /* load local object variable #1 */aload_2 - 1 - A - aload CVMJIT_LOCAL CVM_TYPEID_OBJ 2 /* load local object variable #2 */aload_3 - 1 - A - aload CVMJIT_LOCAL CVM_TYPEID_OBJ 3 /* load local object variable #3 */iaload - 1 [I]I I EXC iaload CVMJIT_INDEX CVM_TYPEID_INT 0 /* load from array of integer */laload - 1 [L]I L EXC iaload CVMJIT_INDEX CVM_TYPEID_LONG 0 /* load from array of long */faload - 1 [F]I F EXC iaload CVMJIT_INDEX CVM_TYPEID_FLOAT 0 /* load from array of float */daload - 1 [D]I D EXC iaload CVMJIT_INDEX CVM_TYPEID_DOUBLE 0 /* load from array of double */aaload - 1 [A]I A EXC iaload CVMJIT_INDEX CVM_TYPEID_OBJ 0 /* load from array of object */baload - 1 [B]I I EXC iaload CVMJIT_INDEX CVM_TYPEID_BYTE 0 /* load from array of (signed) bytes */caload - 1 [C]I I EXC iaload CVMJIT_INDEX CVM_TYPEID_CHAR 0 /* load from array of chars */saload - 1 [S]I I EXC iaload CVMJIT_INDEX CVM_TYPEID_SHORT 0 /* load from array of (signed) shorts */istore - 2 I - - istore CVMJIT_ASSIGN CVM_TYPEID_INT 0 /* store local integer variable */lstore - 2 L - - istore CVMJIT_ASSIGN CVM_TYPEID_LONG 0 /* store local long variable */fstore - 2 F - - istore CVMJIT_ASSIGN CVM_TYPEID_FLOAT 0 /* store local float variable */dstore - 2 D - - istore CVMJIT_ASSIGN CVM_TYPEID_DOUBLE 0 /* store local double variable */astore - 2 A - - istore CVMJIT_ASSIGN CVM_TYPEID_OBJ 0 /* store local object variable */istore_0 - 1 I - - istore CVMJIT_ASSIGN CVM_TYPEID_INT 0 /* store local integer variable #0 */istore_1 - 1 I - - istore CVMJIT_ASSIGN CVM_TYPEID_INT 1 /* store local integer variable #1 */istore_2 - 1 I - - istore CVMJIT_ASSIGN CVM_TYPEID_INT 2 /* store local integer variable #2 */istore_3 - 1 I - - istore CVMJIT_ASSIGN CVM_TYPEID_INT 3 /* store local integer variable #3 */lstore_0 - 1 L - - istore CVMJIT_ASSIGN CVM_TYPEID_LONG 0 /* store local long variable #0 */lstore_1 - 1 L - - istore CVMJIT_ASSIGN CVM_TYPEID_LONG 1 /* store local long variable #1 */lstore_2 - 1 L - - istore CVMJIT_ASSIGN CVM_TYPEID_LONG 2 /* store local long variable #2 */lstore_3 - 1 L - - istore CVMJIT_ASSIGN CVM_TYPEID_LONG 3 /* store local long variable #3 */fstore_0 - 1 F - - istore CVMJIT_ASSIGN CVM_TYPEID_FLOAT 0 /* store local float variable #0 */fstore_1 - 1 F - - istore CVMJIT_ASSIGN CVM_TYPEID_FLOAT 1 /* store local float variable #1 */fstore_2 - 1 F - - istore CVMJIT_ASSIGN CVM_TYPEID_FLOAT 2 /* store local float variable #2 */fstore_3 - 1 F - - istore CVMJIT_ASSIGN CVM_TYPEID_FLOAT 3 /* store local float variable #3 */dstore_0 - 1 D - - istore CVMJIT_ASSIGN CVM_TYPEID_DOUBLE 0 /* store lcl double float variable #0 */dstore_1 - 1 D - - istore CVMJIT_ASSIGN CVM_TYPEID_DOUBLE 1 /* store lcl double float variable #1 */dstore_2 - 1 D - - istore CVMJIT_ASSIGN CVM_TYPEID_DOUBLE 2 /* store lcl double float variable #2 */dstore_3 - 1 D - - istore CVMJIT_ASSIGN CVM_TYPEID_DOUBLE 3 /* store lcl double float variable #3 */astore_0 - 1 A - - istore CVMJIT_ASSIGN CVM_TYPEID_OBJ 0 /* store local object variable #0 */astore_1 - 1 A - - istore CVMJIT_ASSIGN CVM_TYPEID_OBJ 1 /* store local object variable #1 */astore_2 - 1 A - - istore CVMJIT_ASSIGN CVM_TYPEID_OBJ 2 /* store local object variable #2 */astore_3 - 1 A - - istore CVMJIT_ASSIGN CVM_TYPEID_OBJ 3 /* store local object variable #3 */iastore - 1 [I]II - EXC iastore CVMJIT_INDEX CVM_TYPEID_INT 0 /* store into array of int */lastore - 1 [L]IL - EXC iastore CVMJIT_INDEX CVM_TYPEID_LONG 0 /* store into array of long */fastore - 1 [F]IF - EXC iastore CVMJIT_INDEX CVM_TYPEID_FLOAT 0 /* store into array of float */dastore - 1 [D]ID - EXC iastore CVMJIT_INDEX CVM_TYPEID_DOUBLE 0 /* store into array of double float */aastore - 1 [A]IA - EXC iastore CVMJIT_INDEX CVM_TYPEID_OBJ 0 /* store into array of object */bastore - 1 [B]II - EXC iastore CVMJIT_INDEX CVM_TYPEID_BYTE 0 /* store into array of (signed) bytes */castore - 1 [C]II - EXC iastore CVMJIT_INDEX CVM_TYPEID_CHAR 0 /* store into array of chars */sastore - 1 [S]II - EXC iastore CVMJIT_INDEX CVM_TYPEID_SHORT 0 /* store into array of (signed) shorts*/pop - 1 1 - - pop 0 0 0 /* pop top element */pop2 - 1 2+1 - - pop 0 0 0 /* pop top two elements */dup - 1 1 11 - dup 0 0 0 /* dup top element */dup_x1 - 1 21 121 - dup 0 0 0 /* dup top element. Skip one */dup_x2 - 1 3+21 1321 - dup 0 0 0 /* dup top element. Skip two */dup2 - 1 2+1 2121 - dup 0 0 0 /* dup top two elements. */dup2_x1 - 1 32+1 21321 - dup 0 0 0 /* dup top two elements. Skip one */dup2_x2 - 1 4+32+1 214321 - dup 0 0 0 /* dup top two elements. Skip two */swap - 1 21 12 - dup 0 0 0 /* swap top two elements of stack. */iadd - 1 II I - iadd CVMJIT_ADD CVM_TYPEID_INT 0 /* integer add */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -