The mnemonic of the instruction as defined by the JVM specification.
The mnemonic of the instruction as defined by the JVM specification.
The opcode of the instruction as defined by the JVM specification.
The opcode of the instruction as defined by the JVM specification. The opcode is a value in the range [0..255].
The comparison operator (incl.
The comparison operator (incl. the constant) underlying the if instruction.
E.g., <
, < 0
or != null
.
Returns the location – Stack, Register or NoExpression – where the value computed by this instruction is stored.
Returns the location – Stack, Register or NoExpression – where the value computed by this instruction is stored. In this case an instruction is only considered to be an expression if a puts a value on the stack or in a register that is the result of some kind of computation; i.e., just copying, duplicating or moving a value between the stack and the registers is not considered to be an expression.
The CHECKCAST instruction is special in the sense that it just inspects the top-most value.
The index of the next instruction in the code array.
The index of the next instruction in the code array.
The index of the next instruction in the code array.
The index of the next instruction in the code array.
This is primarily a convenience method that delegates to the method
indexOfNextInstrution(PC,Boolean)
. However, given that this is also the
standard method called by clients, it is often meaningful to directly implement
this. In particular since most instructions cannot be modified by wide.
The index of the local (variable)/register that is read is returned.
The index of the local (variable)/register that is read is returned. This
method is only defined if readsLocal returns true
.
The index of the local (variable)/register that is written.
The index of the local (variable)/register that is written. This
method is only defined if writesLocal returns true
.
Determines if this instruction is isomorphic to the given instruction.
Determines if this instruction is isomorphic to the given instruction.
Two instructions are isomporphic if they access the same operand and register values and if the instructions have the same bytecode representation, except of (A) (potential) padding bytes and (B) the branch offset of JSR(_W) instructions. In the first case the branch offsets are corrected by the number of padding bytes and in the second case the absolute addresses are compared (i.e., whether both instructions call the same subroutine.
For example, an aload_0
instruction is only
isomorphic to another aload_0
instruction and is not isomorphic to an aload(0)
instruction – though the runtime effect is the same. However, a LOOKUPSWITCH
(TABLESWITCH) instruction is considered isomorphic to another respective
instruction if the only difference is the number of padding bytes. Furthermore,
two JSR(_W) instructions are isomorphic if and only if they jump to the same
subroutine.
this.isIsomorphic(thisPC
,thisPC
) is always true
The number of padding bytes is generally calculated by (otherPC % 4) -
(thisPC %4)
(=== "padding other" - "padding this"
)
and should be added to the branch offsets of this (XYZ)switch
instruction
when the branch targets are compared to the other instructions branchoffsets.
// "padding b" - "padding a" // === (3 - (bPC % 4)) - (3 - (aPC % 4)) // === (aPC % 4) - (bPC %4)
The exceptions that may be thrown by the JVM at runtime if the execution of this instruction fails.
The exceptions that may be thrown by the JVM at runtime if the execution of
this instruction fails.
I.e., these are neither exceptions that are explicitly created and then thrown
by user code nor errors that may arise due to an invalid code base (e.g.
LinkageError
s). However, OutOfMemoryErrors are possible.
The number of bytes (in the Code array) used by the instruction.
The number of bytes (in the Code array) used by the instruction.
Returns the pcs of the instructions that may be executed next at runtime.
Returns the pcs of the instructions that may be executed next at runtime.
The absolute addresses of all instructions that may be executed next at runtime.
Returns the pcs of the instructions that may be executed next at runtime.
Returns the pcs of the instructions that may be executed next at runtime. This method takes potentially thrown exceptions into account. I.e., every instruction that may throw an exception checks if it occurs within a catch block and – if so – checks if an appropriate handler exists and – if so – also returns the first instruction of the handler.
The absolute addresses of all instructions that may be executed next at runtime.
The number of values that are popped from the operand stack.
The number of values that are popped from the operand stack. Here, long and double values are also counted as one value though they use two stack slots. E.g., IADD (integer add) and LADD (long add) both pop two values and push one value.
A function that returns the computational type category of the value on the operand stack with a given index. E.g., The top value on the operand stack has index '0' and may occupy one (for category 1 values) or two stack slots (for category 2 values.)
In case of some of the StackManagementInstruction this number is
not fixed. In that case the number depends on the concrete layout of the
operand stack. E.g., the POP2 instruction may just pop one
categeory 2 value (of type long
or double
) or two category 1
values.
The number of values that are put onto the operand stack.
The number of values that are put onto the operand stack. Here, long and double values are also counted as one value though they use two stack slots. E.g., IADD (integer add) and LADD (long add) both pop two values and push one value.
A function that returns the computational type category of the value on the operand stack with a given index. The top value on the operand stack has index '0' and may occupy one (for category 1 values) or two stack slots (for category 2 values.)
In case of some of the StackManagementInstruction this number is not fixed. In that case the number depends on the concrete layout of the operand stack. E.g., the DUP2 instruction may just duplicate one categeory 2 value (result is 1) (of type long or double) or two category 1 values (result is 2).
The number of operand values popped from the operand stack.
The number of operand values popped from the operand stack.
Returns true
if this instruction reads/uses a local variable.
Returns true
if this instruction reads/uses a local variable.
Returns a string representation of this instruction.
Returns a string representation of this instruction. If this instruction is a (conditional) jump instruction then the PCs of the target instructions are given absolute address.
The program counter of this instruction. Used to resolve relative jump targets.
Returns true
if this instruction writes/updates a local variable.
Returns true
if this instruction writes/updates a local variable.
Common superclass of all instructions that perform a conditional jump based on the comparison of reference values.