import {AssemblyInstructionInfo} from '../base.js'; export function getAsmOpcode(opcode: string | undefined): AssemblyInstructionInfo | undefined { if (!opcode) return; switch (opcode.toUpperCase()) { case 'AALOAD': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.aaload`, html: `

Instruction aaload: Load reference from array

Format: aaload

Operand Stack: ..., arrayref, index ..., value

The arrayref must be of type reference and must refer to an array whose components are of type reference. The index must be of type int. Both arrayref and index are popped from the operand stack. The reference value in the component of the array at index is retrieved and pushed onto the operand stack.

`, tooltip: `Load reference from array `, }; case 'AASTORE': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.aastore`, html: `

Instruction aastore: Store into reference array

Format: aastore

Operand Stack: ..., arrayref, index, value ...

The arrayref must be of type reference and must refer to an array whose components are of type reference. The index must be of type int, and value must be of type reference. The arrayref, index, and value are popped from the operand stack.

`, tooltip: `Store into reference array `, }; case 'ACONST_NULL': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.aconst_null`, html: `

Instruction aconst_null: Push null

Format: aconst_null

Operand Stack: ... ..., null

Push the null object reference onto the operand stack.

`, tooltip: `Push null`, }; case 'ALOAD': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.aload`, html: `

Instruction aload: Load reference from local variable

Format: aload index

Operand Stack: ... ..., objectref

The index is an unsigned byte that must be an index into the local variable array of the current frame (§2.6). The local variable at index must contain a reference. The objectref in the local variable at index is pushed onto the operand stack.

`, tooltip: `Load reference from local variable `, }; case 'ALOAD_0': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.aload_n`, html: `

Instruction aload_0: Load reference from local variable

Format: aload_[n]

Operand Stack: ... ..., objectref

The <n> must be an index into the local variable array of the current frame (§2.6). The local variable at <n> must contain a reference. The objectref in the local variable at <n> is pushed onto the operand stack.

`, tooltip: `Load reference from local variable `, }; case 'ALOAD_1': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.aload_n`, html: `

Instruction aload_1: Load reference from local variable

Format: aload_[n]

Operand Stack: ... ..., objectref

The <n> must be an index into the local variable array of the current frame (§2.6). The local variable at <n> must contain a reference. The objectref in the local variable at <n> is pushed onto the operand stack.

`, tooltip: `Load reference from local variable `, }; case 'ALOAD_2': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.aload_n`, html: `

Instruction aload_2: Load reference from local variable

Format: aload_[n]

Operand Stack: ... ..., objectref

The <n> must be an index into the local variable array of the current frame (§2.6). The local variable at <n> must contain a reference. The objectref in the local variable at <n> is pushed onto the operand stack.

`, tooltip: `Load reference from local variable `, }; case 'ALOAD_3': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.aload_n`, html: `

Instruction aload_3: Load reference from local variable

Format: aload_[n]

Operand Stack: ... ..., objectref

The <n> must be an index into the local variable array of the current frame (§2.6). The local variable at <n> must contain a reference. The objectref in the local variable at <n> is pushed onto the operand stack.

`, tooltip: `Load reference from local variable `, }; case 'ANEWARRAY': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.anewarray`, html: `

Instruction anewarray: Create new array of reference

Format: anewarray indexbyte1 indexbyte2

Operand Stack: ..., count ..., arrayref

The count must be of type int. It is popped off the operand stack. The count represents the number of components of the array to be created. The unsigned indexbyte1 and indexbyte2 are used to construct an index into the run-time constant pool of the current class (§2.6), where the value of the index is (indexbyte1 << 8) | indexbyte2. The run-time constant pool entry at the index must be a symbolic reference to a class, array, or interface type. The named class, array, or interface type is resolved (§5.4.3.1). A new array with components of that type, of length count, is allocated from the garbage-collected heap, and a reference arrayref to this new array object is pushed onto the operand stack. All components of the new array are initialized to null, the default value for reference types (§2.4).

`, tooltip: `Create new array of reference`, }; case 'ARETURN': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.areturn`, html: `

Instruction areturn: Return reference from method

Format: areturn

Operand Stack: ..., objectref [empty]

The objectref must be of type reference and must refer to an object of a type that is assignment compatible (JLS §5.2) with the type represented by the return descriptor (§4.3.3) of the current method. If the current method is a synchronized method, the monitor entered or reentered on invocation of the method is updated and possibly exited as if by execution of a monitorexit instruction (§monitorexit) in the current thread. If no exception is thrown, objectref is popped from the operand stack of the current frame (§2.6) and pushed onto the operand stack of the frame of the invoker. Any other values on the operand stack of the current method are discarded.

`, tooltip: `Return reference from method `, }; case 'ARRAYLENGTH': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.arraylength`, html: `

Instruction arraylength: Get length of array

Format: arraylength

Operand Stack: ..., arrayref ..., length

The arrayref must be of type reference and must refer to an array. It is popped from the operand stack. The length of the array it references is determined. That length is pushed onto the operand stack as an int.

`, tooltip: `Get length of array`, }; case 'ASTORE': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.astore`, html: `

Instruction astore: Store reference into local variable

Format: astore index

Operand Stack: ..., objectref ...

The index is an unsigned byte that must be an index into the local variable array of the current frame (§2.6). The objectref on the top of the operand stack must be of type returnAddress or of type reference. It is popped from the operand stack, and the value of the local variable at index is set to objectref.

`, tooltip: `Store reference into local variable `, }; case 'ASTORE_0': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.astore_n`, html: `

Instruction astore_0: Store reference into local variable

Format: astore_[n]

Operand Stack: ..., objectref ...

The <n> must be an index into the local variable array of the current frame (§2.6). The objectref on the top of the operand stack must be of type returnAddress or of type reference. It is popped from the operand stack, and the value of the local variable at <n> is set to objectref.

`, tooltip: `Store reference into local variable `, }; case 'ASTORE_1': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.astore_n`, html: `

Instruction astore_1: Store reference into local variable

Format: astore_[n]

Operand Stack: ..., objectref ...

The <n> must be an index into the local variable array of the current frame (§2.6). The objectref on the top of the operand stack must be of type returnAddress or of type reference. It is popped from the operand stack, and the value of the local variable at <n> is set to objectref.

`, tooltip: `Store reference into local variable `, }; case 'ASTORE_2': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.astore_n`, html: `

Instruction astore_2: Store reference into local variable

Format: astore_[n]

Operand Stack: ..., objectref ...

The <n> must be an index into the local variable array of the current frame (§2.6). The objectref on the top of the operand stack must be of type returnAddress or of type reference. It is popped from the operand stack, and the value of the local variable at <n> is set to objectref.

`, tooltip: `Store reference into local variable `, }; case 'ASTORE_3': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.astore_n`, html: `

Instruction astore_3: Store reference into local variable

Format: astore_[n]

Operand Stack: ..., objectref ...

The <n> must be an index into the local variable array of the current frame (§2.6). The objectref on the top of the operand stack must be of type returnAddress or of type reference. It is popped from the operand stack, and the value of the local variable at <n> is set to objectref.

`, tooltip: `Store reference into local variable `, }; case 'ATHROW': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.athrow`, html: `

Instruction athrow: Throw exception or error

Format: athrow

Operand Stack: ..., objectref objectref

The objectref must be of type reference and must refer to an object that is an instance of class Throwable or of a subclass of Throwable. It is popped from the operand stack. The objectref is then thrown by searching the current method (§2.6) for the first exception handler that matches the class of objectref, as given by the algorithm in §2.10.

`, tooltip: `Throw exception or error`, }; case 'BALOAD': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.baload`, html: `

Instruction baload: Load byte or boolean from array

Format: baload

Operand Stack: ..., arrayref, index ..., value

The arrayref must be of type reference and must refer to an array whose components are of type byte or of type boolean. The index must be of type int. Both arrayref and index are popped from the operand stack. The byte value in the component of the array at index is retrieved, sign-extended to an int value, and pushed onto the top of the operand stack.

`, tooltip: `Load byte or boolean from array `, }; case 'BASTORE': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.bastore`, html: `

Instruction bastore: Store into byte or boolean array

Format: bastore

Operand Stack: ..., arrayref, index, value ...

The arrayref must be of type reference and must refer to an array whose components are of type byte or of type boolean. The index and the value must both be of type int. The arrayref, index, and value are popped from the operand stack.

`, tooltip: `Store into byte or boolean array `, }; case 'BIPUSH': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.bipush`, html: `

Instruction bipush: Push byte

Format: bipush byte

Operand Stack: ... ..., value

The immediate byte is sign-extended to an int value. That value is pushed onto the operand stack.

`, tooltip: `Push byte`, }; case 'CALOAD': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.caload`, html: `

Instruction caload: Load char from array

Format: caload

Operand Stack: ..., arrayref, index ..., value

The arrayref must be of type reference and must refer to an array whose components are of type char. The index must be of type int. Both arrayref and index are popped from the operand stack. The component of the array at index is retrieved and zero-extended to an int value. That value is pushed onto the operand stack.

`, tooltip: `Load char from array `, }; case 'CASTORE': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.castore`, html: `

Instruction castore: Store into char array

Format: castore

Operand Stack: ..., arrayref, index, value ...

The arrayref must be of type reference and must refer to an array whose components are of type char. The index and the value must both be of type int. The arrayref, index, and value are popped from the operand stack. The int value is truncated to a char and stored as the component of the array indexed by index.

`, tooltip: `Store into char array `, }; case 'CHECKCAST': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.checkcast`, html: `

Instruction checkcast: Check whether object is of given type

Format: checkcast indexbyte1 indexbyte2

Operand Stack: ..., objectref ..., objectref

The objectref must be of type reference. The unsigned indexbyte1 and indexbyte2 are used to construct an index into the run-time constant pool of the current class (§2.6), where the value of the index is (indexbyte1 << 8) | indexbyte2. The run-time constant pool entry at the index must be a symbolic reference to a class, array, or interface type.

`, tooltip: `Check whether object is of given type`, }; case 'D2F': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.d2f`, html: `

Instruction d2f: Convert double to float

Format: d2f

Operand Stack: ..., value ..., result

The value on the top of the operand stack must be of type double. It is popped from the operand stack and converted to a float result using the round to nearest rounding policy (§2.8). The result is pushed onto the operand stack.

`, tooltip: `Convert double to float`, }; case 'D2I': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.d2i`, html: `

Instruction d2i: Convert double to int

Format: d2i

Operand Stack: ..., value ..., result

The value on the top of the operand stack must be of type double. It is popped from the operand stack and converted to an int result. The result is pushed onto the operand stack:

`, tooltip: `Convert double to int`, }; case 'D2L': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.d2l`, html: `

Instruction d2l: Convert double to long

Format: d2l

Operand Stack: ..., value ..., result

The value on the top of the operand stack must be of type double. It is popped from the operand stack and converted to a long. The result is pushed onto the operand stack:

`, tooltip: `Convert double to long`, }; case 'DADD': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.dadd`, html: `

Instruction dadd: Add double

Format: dadd

Operand Stack: ..., value1, value2 ..., result

Both value1 and value2 must be of type double. The values are popped from the operand stack. The double result is value1 + value2. The result is pushed onto the operand stack.

`, tooltip: `Add double`, }; case 'DALOAD': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.daload`, html: `

Instruction daload: Load double from array

Format: daload

Operand Stack: ..., arrayref, index ..., value

The arrayref must be of type reference and must refer to an array whose components are of type double. The index must be of type int. Both arrayref and index are popped from the operand stack. The double value in the component of the array at index is retrieved and pushed onto the operand stack.

`, tooltip: `Load double from array `, }; case 'DASTORE': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.dastore`, html: `

Instruction dastore: Store into double array

Format: dastore

Operand Stack: ..., arrayref, index, value ...

The arrayref must be of type reference and must refer to an array whose components are of type double. The index must be of type int, and value must be of type double. The arrayref, index, and value are popped from the operand stack. The double value is stored as the component of the array indexed by index.

`, tooltip: `Store into double array `, }; case 'DCMPG': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.dcmp_op`, html: `

Instruction dcmpg: Compare double

Format: dcmp[op]

Operand Stack: ..., value1, value2 ..., result

Both value1 and value2 must be of type double. The values are popped from the operand stack and a floating-point comparison is performed:

`, tooltip: `Compare double`, }; case 'DCMPL': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.dcmp_op`, html: `

Instruction dcmpl: Compare double

Format: dcmp[op]

Operand Stack: ..., value1, value2 ..., result

Both value1 and value2 must be of type double. The values are popped from the operand stack and a floating-point comparison is performed:

`, tooltip: `Compare double`, }; case 'DCONST_0': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.dconst_d`, html: `

Instruction dconst_0: Push double

Format: dconst_[d]

Operand Stack: ... ..., <d>

Push the double constant <d> (0.0 or 1.0) onto the operand stack.

`, tooltip: `Push double`, }; case 'DCONST_1': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.dconst_d`, html: `

Instruction dconst_1: Push double

Format: dconst_[d]

Operand Stack: ... ..., <d>

Push the double constant <d> (0.0 or 1.0) onto the operand stack.

`, tooltip: `Push double`, }; case 'DDIV': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.ddiv`, html: `

Instruction ddiv: Divide double

Format: ddiv

Operand Stack: ..., value1, value2 ..., result

Both value1 and value2 must be of type double. The values are popped from the operand stack. The double result is value1 / value2. The result is pushed onto the operand stack.

`, tooltip: `Divide double`, }; case 'DLOAD': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.dload`, html: `

Instruction dload: Load double from local variable

Format: dload index

Operand Stack: ... ..., value

The index is an unsigned byte. Both index and index+1 must be indices into the local variable array of the current frame (§2.6). The local variable at index must contain a double. The value of the local variable at index is pushed onto the operand stack.

`, tooltip: `Load double from local variable `, }; case 'DLOAD_0': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.dload_n`, html: `

Instruction dload_0: Load double from local variable

Format: dload_[n]

Operand Stack: ... ..., value

Both <n> and <n>+1 must be indices into the local variable array of the current frame (§2.6). The local variable at <n> must contain a double. The value of the local variable at <n> is pushed onto the operand stack.

`, tooltip: `Load double from local variable `, }; case 'DLOAD_1': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.dload_n`, html: `

Instruction dload_1: Load double from local variable

Format: dload_[n]

Operand Stack: ... ..., value

Both <n> and <n>+1 must be indices into the local variable array of the current frame (§2.6). The local variable at <n> must contain a double. The value of the local variable at <n> is pushed onto the operand stack.

`, tooltip: `Load double from local variable `, }; case 'DLOAD_2': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.dload_n`, html: `

Instruction dload_2: Load double from local variable

Format: dload_[n]

Operand Stack: ... ..., value

Both <n> and <n>+1 must be indices into the local variable array of the current frame (§2.6). The local variable at <n> must contain a double. The value of the local variable at <n> is pushed onto the operand stack.

`, tooltip: `Load double from local variable `, }; case 'DLOAD_3': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.dload_n`, html: `

Instruction dload_3: Load double from local variable

Format: dload_[n]

Operand Stack: ... ..., value

Both <n> and <n>+1 must be indices into the local variable array of the current frame (§2.6). The local variable at <n> must contain a double. The value of the local variable at <n> is pushed onto the operand stack.

`, tooltip: `Load double from local variable `, }; case 'DMUL': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.dmul`, html: `

Instruction dmul: Multiply double

Format: dmul

Operand Stack: ..., value1, value2 ..., result

Both value1 and value2 must be of type double. The values are popped from the operand stack. The double result is value1 * value2. The result is pushed onto the operand stack.

`, tooltip: `Multiply double`, }; case 'DNEG': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.dneg`, html: `

Instruction dneg: Negate double

Format: dneg

Operand Stack: ..., value ..., result

The value must be of type double. It is popped from the operand stack. The double result is the arithmetic negation of value. The result is pushed onto the operand stack.

`, tooltip: `Negate double`, }; case 'DREM': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.drem`, html: `

Instruction drem: Remainder double

Format: drem

Operand Stack: ..., value1, value2 ..., result

Both value1 and value2 must be of type double. The values are popped from the operand stack. The double result is calculated and pushed onto the operand stack.

`, tooltip: `Remainder double`, }; case 'DRETURN': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.dreturn`, html: `

Instruction dreturn: Return double from method

Format: dreturn

Operand Stack: ..., value [empty]

The current method must have return type double. The value must be of type double. If the current method is a synchronized method, the monitor entered or reentered on invocation of the method is updated and possibly exited as if by execution of a monitorexit instruction (§monitorexit) in the current thread. If no exception is thrown, value is popped from the operand stack of the current frame (§2.6) and pushed onto the operand stack of the frame of the invoker. Any other values on the operand stack of the current method are discarded.

`, tooltip: `Return double from method `, }; case 'DSTORE': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.dstore`, html: `

Instruction dstore: Store double into local variable

Format: dstore index

Operand Stack: ..., value ...

The index is an unsigned byte. Both index and index+1 must be indices into the local variable array of the current frame (§2.6). The value on the top of the operand stack must be of type double. It is popped from the operand stack. The local variables at index and index+1 are set to value.

`, tooltip: `Store double into local variable `, }; case 'DSTORE_0': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.dstore_n`, html: `

Instruction dstore_0: Store double into local variable

Format: dstore_[n]

Operand Stack: ..., value ...

Both <n> and <n>+1 must be indices into the local variable array of the current frame (§2.6). The value on the top of the operand stack must be of type double. It is popped from the operand stack. The local variables at <n> and <n>+1 are set to value.

`, tooltip: `Store double into local variable `, }; case 'DSTORE_1': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.dstore_n`, html: `

Instruction dstore_1: Store double into local variable

Format: dstore_[n]

Operand Stack: ..., value ...

Both <n> and <n>+1 must be indices into the local variable array of the current frame (§2.6). The value on the top of the operand stack must be of type double. It is popped from the operand stack. The local variables at <n> and <n>+1 are set to value.

`, tooltip: `Store double into local variable `, }; case 'DSTORE_2': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.dstore_n`, html: `

Instruction dstore_2: Store double into local variable

Format: dstore_[n]

Operand Stack: ..., value ...

Both <n> and <n>+1 must be indices into the local variable array of the current frame (§2.6). The value on the top of the operand stack must be of type double. It is popped from the operand stack. The local variables at <n> and <n>+1 are set to value.

`, tooltip: `Store double into local variable `, }; case 'DSTORE_3': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.dstore_n`, html: `

Instruction dstore_3: Store double into local variable

Format: dstore_[n]

Operand Stack: ..., value ...

Both <n> and <n>+1 must be indices into the local variable array of the current frame (§2.6). The value on the top of the operand stack must be of type double. It is popped from the operand stack. The local variables at <n> and <n>+1 are set to value.

`, tooltip: `Store double into local variable `, }; case 'DSUB': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.dsub`, html: `

Instruction dsub: Subtract double

Format: dsub

Operand Stack: ..., value1, value2 ..., result

Both value1 and value2 must be of type double. The values are popped from the operand stack. The double result is value1 - value2. The result is pushed onto the operand stack.

`, tooltip: `Subtract double`, }; case 'DUP': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.dup`, html: `

Instruction dup: Duplicate the top operand stack value

Format: dup

Operand Stack: ..., value ..., value, value

Duplicate the top value on the operand stack and push the duplicated value onto the operand stack.

`, tooltip: `Duplicate the top operand stack value`, }; case 'DUP_X1': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.dup_x1`, html: `

Instruction dup_x1: Duplicate the top operand stack value and insert two values down

Format: dup_x1

Operand Stack: ..., value2, value1 ..., value1, value2, value1

Duplicate the top value on the operand stack and insert the duplicated value two values down in the operand stack.

`, tooltip: `Duplicate the top operand stack value and insert two values down`, }; case 'DUP_X2': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.dup_x2`, html: `

Instruction dup_x2: Duplicate the top operand stack value and insert two or three values down

Format: dup_x2

Operand Stack: Form 1: ..., value3, value2, value1

Duplicate the top value on the operand stack and insert the duplicated value two or three values down in the operand stack.

`, tooltip: `Duplicate the top operand stack value and insert two or three values down`, }; case 'DUP2': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.dup2`, html: `

Instruction dup2: Duplicate the top one or two operand stack values

Format: dup2

Operand Stack: Form 1: ..., value2, value1

Duplicate the top one or two values on the operand stack and push the duplicated value or values back onto the operand stack in the original order.

`, tooltip: `Duplicate the top one or two operand stack values`, }; case 'DUP2_X1': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.dup2_x1`, html: `

Instruction dup2_x1: Duplicate the top one or two operand stack values and insert two or three values down

Format: dup2_x1

Operand Stack: Form 1: ..., value3, value2, value1

Duplicate the top one or two values on the operand stack and insert the duplicated values, in the original order, one value beneath the original value or values in the operand stack.

`, tooltip: `Duplicate the top one or two operand stack values and insert two or three values down`, }; case 'DUP2_X2': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.dup2_x2`, html: `

Instruction dup2_x2: Duplicate the top one or two operand stack values and insert two, three, or four values down

Format: dup2_x2

Operand Stack: Form 1: ..., value4, value3, value2, value1

Duplicate the top one or two values on the operand stack and insert the duplicated values, in the original order, into the operand stack.

`, tooltip: `Duplicate the top one or two operand stack values and insert two, three, or four values down`, }; case 'F2D': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.f2d`, html: `

Instruction f2d: Convert float to double

Format: f2d

Operand Stack: ..., value ..., result

The value on the top of the operand stack must be of type float. It is popped from the operand stack and converted to a double result. The result is pushed onto the operand stack.

`, tooltip: `Convert float to double`, }; case 'F2I': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.f2i`, html: `

Instruction f2i: Convert float to int

Format: f2i

Operand Stack: ..., value ..., result

The value on the top of the operand stack must be of type float. It is popped from the operand stack and converted to an int result. The result is pushed onto the operand stack:

`, tooltip: `Convert float to int`, }; case 'F2L': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.f2l`, html: `

Instruction f2l: Convert float to long

Format: f2l

Operand Stack: ..., value ..., result

The value on the top of the operand stack must be of type float. It is popped from the operand stack and converted to a long result. The result is pushed onto the operand stack:

`, tooltip: `Convert float to long`, }; case 'FADD': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.fadd`, html: `

Instruction fadd: Add float

Format: fadd

Operand Stack: ..., value1, value2 ..., result

Both value1 and value2 must be of type float. The values are popped from the operand stack. The float result is value1 + value2. The result is pushed onto the operand stack.

`, tooltip: `Add float`, }; case 'FALOAD': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.faload`, html: `

Instruction faload: Load float from array

Format: faload

Operand Stack: ..., arrayref, index ..., value

The arrayref must be of type reference and must refer to an array whose components are of type float. The index must be of type int. Both arrayref and index are popped from the operand stack. The float value in the component of the array at index is retrieved and pushed onto the operand stack.

`, tooltip: `Load float from array `, }; case 'FASTORE': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.fastore`, html: `

Instruction fastore: Store into float array

Format: fastore

Operand Stack: ..., arrayref, index, value ...

The arrayref must be of type reference and must refer to an array whose components are of type float. The index must be of type int, and the value must be of type float. The arrayref, index, and value are popped from the operand stack. The float value is stored as the component of the array indexed by index.

`, tooltip: `Store into float array `, }; case 'FCMPG': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.fcmp_op`, html: `

Instruction fcmpg: Compare float

Format: fcmp[op]

Operand Stack: ..., value1, value2 ..., result

Both value1 and value2 must be of type float. The values are popped from the operand stack and a floating-point comparison is performed:

`, tooltip: `Compare float`, }; case 'FCMPL': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.fcmp_op`, html: `

Instruction fcmpl: Compare float

Format: fcmp[op]

Operand Stack: ..., value1, value2 ..., result

Both value1 and value2 must be of type float. The values are popped from the operand stack and a floating-point comparison is performed:

`, tooltip: `Compare float`, }; case 'FCONST_0, 1': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.fconst_f`, html: `

Instruction fconst_0, 1: Push float

Format: fconst_[f]

Operand Stack: ... ..., <f>

Push the float constant <f> (0.0, 1.0, or 2.0) onto the operand stack.

`, tooltip: `Push float`, }; case 'FCONST_2': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.fconst_f`, html: `

Instruction fconst_2: Push float

Format: fconst_[f]

Operand Stack: ... ..., <f>

Push the float constant <f> (0.0, 1.0, or 2.0) onto the operand stack.

`, tooltip: `Push float`, }; case 'FDIV': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.fdiv`, html: `

Instruction fdiv: Divide float

Format: fdiv

Operand Stack: ..., value1, value2 ..., result

Both value1 and value2 must be of type float. The values are popped from the operand stack. The float result is value1 / value2. The result is pushed onto the operand stack.

`, tooltip: `Divide float`, }; case 'FLOAD': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.fload`, html: `

Instruction fload: Load float from local variable

Format: fload index

Operand Stack: ... ..., value

The index is an unsigned byte that must be an index into the local variable array of the current frame (§2.6). The local variable at index must contain a float. The value of the local variable at index is pushed onto the operand stack.

`, tooltip: `Load float from local variable `, }; case 'FLOAD_0': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.fload_n`, html: `

Instruction fload_0: Load float from local variable

Format: fload_[n]

Operand Stack: ... ..., value

The <n> must be an index into the local variable array of the current frame (§2.6). The local variable at <n> must contain a float. The value of the local variable at <n> is pushed onto the operand stack.

`, tooltip: `Load float from local variable `, }; case 'FLOAD_1': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.fload_n`, html: `

Instruction fload_1: Load float from local variable

Format: fload_[n]

Operand Stack: ... ..., value

The <n> must be an index into the local variable array of the current frame (§2.6). The local variable at <n> must contain a float. The value of the local variable at <n> is pushed onto the operand stack.

`, tooltip: `Load float from local variable `, }; case 'FLOAD_2': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.fload_n`, html: `

Instruction fload_2: Load float from local variable

Format: fload_[n]

Operand Stack: ... ..., value

The <n> must be an index into the local variable array of the current frame (§2.6). The local variable at <n> must contain a float. The value of the local variable at <n> is pushed onto the operand stack.

`, tooltip: `Load float from local variable `, }; case 'FLOAD_3': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.fload_n`, html: `

Instruction fload_3: Load float from local variable

Format: fload_[n]

Operand Stack: ... ..., value

The <n> must be an index into the local variable array of the current frame (§2.6). The local variable at <n> must contain a float. The value of the local variable at <n> is pushed onto the operand stack.

`, tooltip: `Load float from local variable `, }; case 'FMUL': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.fmul`, html: `

Instruction fmul: Multiply float

Format: fmul

Operand Stack: ..., value1, value2 ..., result

Both value1 and value2 must be of type float. The values are popped from the operand stack. The float result is value1 * value2. The result is pushed onto the operand stack.

`, tooltip: `Multiply float`, }; case 'FNEG': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.fneg`, html: `

Instruction fneg: Negate float

Format: fneg

Operand Stack: ..., value ..., result

The value must be of type float. It is popped from the operand stack. The float result is the arithmetic negation of value. The result is pushed onto the operand stack.

`, tooltip: `Negate float`, }; case 'FREM': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.frem`, html: `

Instruction frem: Remainder float

Format: frem

Operand Stack: ..., value1, value2 ..., result

Both value1 and value2 must be of type float. The values are popped from the operand stack. The float result is calculated and pushed onto the operand stack.

`, tooltip: `Remainder float`, }; case 'FRETURN': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.freturn`, html: `

Instruction freturn: Return float from method

Format: freturn

Operand Stack: ..., value [empty]

The current method must have return type float. The value must be of type float. If the current method is a synchronized method, the monitor entered or reentered on invocation of the method is updated and possibly exited as if by execution of a monitorexit instruction (§monitorexit) in the current thread. If no exception is thrown, value is popped from the operand stack of the current frame (§2.6) and pushed onto the operand stack of the frame of the invoker. Any other values on the operand stack of the current method are discarded.

`, tooltip: `Return float from method `, }; case 'FSTORE': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.fstore`, html: `

Instruction fstore: Store float into local variable

Format: fstore index

Operand Stack: ..., value ...

The index is an unsigned byte that must be an index into the local variable array of the current frame (§2.6). The value on the top of the operand stack must be of type float. It is popped from the operand stack, and the value of the local variable at index is set to value.

`, tooltip: `Store float into local variable `, }; case 'FSTORE_0': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.fstore_n`, html: `

Instruction fstore_0: Store float into local variable

Format: fstore_[n]

Operand Stack: ..., value ...

The <n> must be an index into the local variable array of the current frame (§2.6). The value on the top of the operand stack must be of type float. It is popped from the operand stack, and the value of the local variable at <n> is set to value.

`, tooltip: `Store float into local variable `, }; case 'FSTORE_1': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.fstore_n`, html: `

Instruction fstore_1: Store float into local variable

Format: fstore_[n]

Operand Stack: ..., value ...

The <n> must be an index into the local variable array of the current frame (§2.6). The value on the top of the operand stack must be of type float. It is popped from the operand stack, and the value of the local variable at <n> is set to value.

`, tooltip: `Store float into local variable `, }; case 'FSTORE_2': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.fstore_n`, html: `

Instruction fstore_2: Store float into local variable

Format: fstore_[n]

Operand Stack: ..., value ...

The <n> must be an index into the local variable array of the current frame (§2.6). The value on the top of the operand stack must be of type float. It is popped from the operand stack, and the value of the local variable at <n> is set to value.

`, tooltip: `Store float into local variable `, }; case 'FSTORE_3': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.fstore_n`, html: `

Instruction fstore_3: Store float into local variable

Format: fstore_[n]

Operand Stack: ..., value ...

The <n> must be an index into the local variable array of the current frame (§2.6). The value on the top of the operand stack must be of type float. It is popped from the operand stack, and the value of the local variable at <n> is set to value.

`, tooltip: `Store float into local variable `, }; case 'FSUB': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.fsub`, html: `

Instruction fsub: Subtract float

Format: fsub

Operand Stack: ..., value1, value2 ..., result

Both value1 and value2 must be of type float. The values are popped from the operand stack. The float result is value1 - value2. The result is pushed onto the operand stack.

`, tooltip: `Subtract float`, }; case 'GETFIELD': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.getfield`, html: `

Instruction getfield: Fetch field from object

Format: getfield indexbyte1 indexbyte2

Operand Stack: ..., objectref ..., value

The unsigned indexbyte1 and indexbyte2 are used to construct an index into the run-time constant pool of the current class (§2.6), where the value of the index is (indexbyte1 << 8) | indexbyte2. The run-time constant pool entry at the index must be a symbolic reference to a field (§5.1), which gives the name and descriptor of the field as well as a symbolic reference to the class in which the field is to be found. The referenced field is resolved (§5.4.3.2).

`, tooltip: `Fetch field from object`, }; case 'GETSTATIC': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.getstatic`, html: `

Instruction getstatic: Get static field from class

Format: getstatic indexbyte1 indexbyte2

Operand Stack: ..., ..., value

The unsigned indexbyte1 and indexbyte2 are used to construct an index into the run-time constant pool of the current class (§2.6), where the value of the index is (indexbyte1 << 8) | indexbyte2. The run-time constant pool entry at the index must be a symbolic reference to a field (§5.1), which gives the name and descriptor of the field as well as a symbolic reference to the class or interface in which the field is to be found. The referenced field is resolved (§5.4.3.2).

`, tooltip: `Get static field from class `, }; case 'GOTO': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.goto`, html: `

Instruction goto: Branch always

Format: goto branchbyte1 branchbyte2

Operand Stack: No change undefined

The unsigned bytes branchbyte1 and branchbyte2 are used to construct a signed 16-bit branchoffset, where branchoffset is (branchbyte1 << 8) | branchbyte2. Execution proceeds at that offset from the address of the opcode of this goto instruction. The target address must be that of an opcode of an instruction within the method that contains this goto instruction.

`, tooltip: `Branch always`, }; case 'GOTO_W': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.goto_w`, html: `

Instruction goto_w: Branch always (wide index)

Format: goto_w branchbyte1 branchbyte2 branchbyte3 branchbyte4

Operand Stack: No change undefined

The unsigned bytes branchbyte1, branchbyte2, branchbyte3, and branchbyte4 are used to construct a signed 32-bit branchoffset, where branchoffset is (branchbyte1 << 24) | (branchbyte2 << 16) | (branchbyte3 << 8) | branchbyte4. Execution proceeds at that offset from the address of the opcode of this goto_w instruction. The target address must be that of an opcode of an instruction within the method that contains this goto_w instruction.

`, tooltip: `Branch always (wide index)`, }; case 'I2B': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.i2b`, html: `

Instruction i2b: Convert int to byte

Format: i2b

Operand Stack: ..., value ..., result

The value on the top of the operand stack must be of type int. It is popped from the operand stack, truncated to a byte, then sign-extended to an int result. The result is pushed onto the operand stack.

`, tooltip: `Convert int to byte`, }; case 'I2C': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.i2c`, html: `

Instruction i2c: Convert int to char

Format: i2c

Operand Stack: ..., value ..., result

The value on the top of the operand stack must be of type int. It is popped from the operand stack, truncated to char, then zero-extended to an int result. The result is pushed onto the operand stack.

`, tooltip: `Convert int to char`, }; case 'I2D': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.i2d`, html: `

Instruction i2d: Convert int to double

Format: i2d

Operand Stack: ..., value ..., result

The value on the top of the operand stack must be of type int. It is popped from the operand stack and converted to a double result. The result is pushed onto the operand stack.

`, tooltip: `Convert int to double`, }; case 'I2F': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.i2f`, html: `

Instruction i2f: Convert int to float

Format: i2f

Operand Stack: ..., value ..., result

The value on the top of the operand stack must be of type int. It is popped from the operand stack and converted to a float result using the round to nearest rounding policy (§2.8). The result is pushed onto the operand stack.

`, tooltip: `Convert int to float`, }; case 'I2L': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.i2l`, html: `

Instruction i2l: Convert int to long

Format: i2l

Operand Stack: ..., value ..., result

The value on the top of the operand stack must be of type int. It is popped from the operand stack and sign-extended to a long result. The result is pushed onto the operand stack.

`, tooltip: `Convert int to long`, }; case 'I2S': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.i2s`, html: `

Instruction i2s: Convert int to short

Format: i2s

Operand Stack: ..., value ..., result

The value on the top of the operand stack must be of type int. It is popped from the operand stack, truncated to a short, then sign-extended to an int result. The result is pushed onto the operand stack.

`, tooltip: `Convert int to short`, }; case 'IADD': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.iadd`, html: `

Instruction iadd: Add int

Format: iadd

Operand Stack: ..., value1, value2 ..., result

Both value1 and value2 must be of type int. The values are popped from the operand stack. The int result is value1 + value2. The result is pushed onto the operand stack.

`, tooltip: `Add int`, }; case 'IALOAD': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.iaload`, html: `

Instruction iaload: Load int from array

Format: iaload

Operand Stack: ..., arrayref, index ..., value

The arrayref must be of type reference and must refer to an array whose components are of type int. The index must be of type int. Both arrayref and index are popped from the operand stack. The int value in the component of the array at index is retrieved and pushed onto the operand stack.

`, tooltip: `Load int from array `, }; case 'IAND': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.iand`, html: `

Instruction iand: Boolean AND int

Format: iand

Operand Stack: ..., value1, value2 ..., result

Both value1 and value2 must be of type int. They are popped from the operand stack. An int result is calculated by taking the bitwise AND (conjunction) of value1 and value2. The result is pushed onto the operand stack.

`, tooltip: `Boolean AND int`, }; case 'IASTORE': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.iastore`, html: `

Instruction iastore: Store into int array

Format: iastore

Operand Stack: ..., arrayref, index, value ...

The arrayref must be of type reference and must refer to an array whose components are of type int. Both index and value must be of type int. The arrayref, index, and value are popped from the operand stack. The int value is stored as the component of the array indexed by index.

`, tooltip: `Store into int array `, }; case 'ICONST_M1': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.iconst_i`, html: `

Instruction iconst_m1: Push int constant

Format: iconst_[i]

Operand Stack: ... ..., <i>

Push the int constant <i> (-1, 0, 1, 2, 3, 4 or 5) onto the operand stack.

`, tooltip: `Push int constant `, }; case 'ICONST_0': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.iconst_i`, html: `

Instruction iconst_0: Push int constant

Format: iconst_[i]

Operand Stack: ... ..., <i>

Push the int constant <i> (-1, 0, 1, 2, 3, 4 or 5) onto the operand stack.

`, tooltip: `Push int constant `, }; case 'ICONST_1': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.iconst_i`, html: `

Instruction iconst_1: Push int constant

Format: iconst_[i]

Operand Stack: ... ..., <i>

Push the int constant <i> (-1, 0, 1, 2, 3, 4 or 5) onto the operand stack.

`, tooltip: `Push int constant `, }; case 'ICONST_2': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.iconst_i`, html: `

Instruction iconst_2: Push int constant

Format: iconst_[i]

Operand Stack: ... ..., <i>

Push the int constant <i> (-1, 0, 1, 2, 3, 4 or 5) onto the operand stack.

`, tooltip: `Push int constant `, }; case 'ICONST_3': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.iconst_i`, html: `

Instruction iconst_3: Push int constant

Format: iconst_[i]

Operand Stack: ... ..., <i>

Push the int constant <i> (-1, 0, 1, 2, 3, 4 or 5) onto the operand stack.

`, tooltip: `Push int constant `, }; case 'ICONST_4': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.iconst_i`, html: `

Instruction iconst_4: Push int constant

Format: iconst_[i]

Operand Stack: ... ..., <i>

Push the int constant <i> (-1, 0, 1, 2, 3, 4 or 5) onto the operand stack.

`, tooltip: `Push int constant `, }; case 'ICONST_5': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.iconst_i`, html: `

Instruction iconst_5: Push int constant

Format: iconst_[i]

Operand Stack: ... ..., <i>

Push the int constant <i> (-1, 0, 1, 2, 3, 4 or 5) onto the operand stack.

`, tooltip: `Push int constant `, }; case 'IDIV': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.idiv`, html: `

Instruction idiv: Divide int

Format: idiv

Operand Stack: ..., value1, value2 ..., result

Both value1 and value2 must be of type int. The values are popped from the operand stack. The int result is the value of the Java programming language expression value1 / value2 (JLS §15.17.2). The result is pushed onto the operand stack.

`, tooltip: `Divide int`, }; case 'IF_ACMPEQ': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.if_acmp_cond`, html: `

Instruction if_acmpeq: Branch if reference comparison succeeds

Format: if_acmp[cond] branchbyte1 branchbyte2

Operand Stack: ..., value1, value2 ...

Both value1 and value2 must be of type reference. They are both popped from the operand stack and compared. The results of the comparison are as follows:

`, tooltip: `Branch if reference comparison succeeds `, }; case 'IF_ACMPNE': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.if_acmp_cond`, html: `

Instruction if_acmpne: Branch if reference comparison succeeds

Format: if_acmp[cond] branchbyte1 branchbyte2

Operand Stack: ..., value1, value2 ...

Both value1 and value2 must be of type reference. They are both popped from the operand stack and compared. The results of the comparison are as follows:

`, tooltip: `Branch if reference comparison succeeds `, }; case 'IF_ICMPEQ': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.if_icmp_cond`, html: `

Instruction if_icmpeq: Branch if int comparison succeeds

Format: if_icmp[cond] branchbyte1 branchbyte2

Operand Stack: ..., value1, value2 ...

Both value1 and value2 must be of type int. They are both popped from the operand stack and compared. All comparisons are signed. The results of the comparison are as follows:

`, tooltip: `Branch if int comparison succeeds `, }; case 'IF_ICMPNE': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.if_icmp_cond`, html: `

Instruction if_icmpne: Branch if int comparison succeeds

Format: if_icmp[cond] branchbyte1 branchbyte2

Operand Stack: ..., value1, value2 ...

Both value1 and value2 must be of type int. They are both popped from the operand stack and compared. All comparisons are signed. The results of the comparison are as follows:

`, tooltip: `Branch if int comparison succeeds `, }; case 'IFEQ': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.if_cond`, html: `

Instruction ifeq: Branch if int comparison with zero succeeds

Format: if[cond] branchbyte1 branchbyte2

Operand Stack: ..., value ...

The value must be of type int. It is popped from the operand stack and compared against zero. All comparisons are signed. The results of the comparisons are as follows:

`, tooltip: `Branch if int comparison with zero succeeds `, }; case 'IFNE': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.if_cond`, html: `

Instruction ifne: Branch if int comparison with zero succeeds

Format: if[cond] branchbyte1 branchbyte2

Operand Stack: ..., value ...

The value must be of type int. It is popped from the operand stack and compared against zero. All comparisons are signed. The results of the comparisons are as follows:

`, tooltip: `Branch if int comparison with zero succeeds `, }; case 'IFNONNULL': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.ifnonnull`, html: `

Instruction ifnonnull: Branch if reference not null

Format: ifnonnull branchbyte1 branchbyte2

Operand Stack: ..., value ...

The value must be of type reference. It is popped from the operand stack. If value is not null, the unsigned branchbyte1 and branchbyte2 are used to construct a signed 16-bit offset, where the offset is calculated to be (branchbyte1 << 8) | branchbyte2. Execution then proceeds at that offset from the address of the opcode of this ifnonnull instruction. The target address must be that of an opcode of an instruction within the method that contains this ifnonnull instruction.

`, tooltip: `Branch if reference not null`, }; case 'IFNULL': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.ifnull`, html: `

Instruction ifnull: Branch if reference is null

Format: ifnull branchbyte1 branchbyte2

Operand Stack: ..., value ...

The value must of type reference. It is popped from the operand stack. If value is null, the unsigned branchbyte1 and branchbyte2 are used to construct a signed 16-bit offset, where the offset is calculated to be (branchbyte1 << 8) | branchbyte2. Execution then proceeds at that offset from the address of the opcode of this ifnull instruction. The target address must be that of an opcode of an instruction within the method that contains this ifnull instruction.

`, tooltip: `Branch if reference is null`, }; case 'IINC': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.iinc`, html: `

Instruction iinc: Increment local variable by constant

Format: iinc index const

Operand Stack: No change undefined

The index is an unsigned byte that must be an index into the local variable array of the current frame (§2.6). The const is an immediate signed byte. The local variable at index must contain an int. The value const is first sign-extended to an int, and then the local variable at index is incremented by that amount.

`, tooltip: `Increment local variable by constant`, }; case 'ILOAD': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.iload`, html: `

Instruction iload: Load int from local variable

Format: iload index

Operand Stack: ... ..., value

The index is an unsigned byte that must be an index into the local variable array of the current frame (§2.6). The local variable at index must contain an int. The value of the local variable at index is pushed onto the operand stack.

`, tooltip: `Load int from local variable `, }; case 'ILOAD_0': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.iload_n`, html: `

Instruction iload_0: Load int from local variable

Format: iload_[n]

Operand Stack: ... ..., value

The <n> must be an index into the local variable array of the current frame (§2.6). The local variable at <n> must contain an int. The value of the local variable at <n> is pushed onto the operand stack.

`, tooltip: `Load int from local variable `, }; case 'ILOAD_1': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.iload_n`, html: `

Instruction iload_1: Load int from local variable

Format: iload_[n]

Operand Stack: ... ..., value

The <n> must be an index into the local variable array of the current frame (§2.6). The local variable at <n> must contain an int. The value of the local variable at <n> is pushed onto the operand stack.

`, tooltip: `Load int from local variable `, }; case 'ILOAD_2': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.iload_n`, html: `

Instruction iload_2: Load int from local variable

Format: iload_[n]

Operand Stack: ... ..., value

The <n> must be an index into the local variable array of the current frame (§2.6). The local variable at <n> must contain an int. The value of the local variable at <n> is pushed onto the operand stack.

`, tooltip: `Load int from local variable `, }; case 'ILOAD_3': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.iload_n`, html: `

Instruction iload_3: Load int from local variable

Format: iload_[n]

Operand Stack: ... ..., value

The <n> must be an index into the local variable array of the current frame (§2.6). The local variable at <n> must contain an int. The value of the local variable at <n> is pushed onto the operand stack.

`, tooltip: `Load int from local variable `, }; case 'IMUL': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.imul`, html: `

Instruction imul: Multiply int

Format: imul

Operand Stack: ..., value1, value2 ..., result

Both value1 and value2 must be of type int. The values are popped from the operand stack. The int result is value1 * value2. The result is pushed onto the operand stack.

`, tooltip: `Multiply int`, }; case 'INEG': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.ineg`, html: `

Instruction ineg: Negate int

Format: ineg

Operand Stack: ..., value ..., result

The value must be of type int. It is popped from the operand stack. The int result is the arithmetic negation of value, -value. The result is pushed onto the operand stack.

`, tooltip: `Negate int`, }; case 'INSTANCEOF': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.instanceof`, html: `

Instruction instanceof: Determine if object is of given type

Format: instanceof indexbyte1 indexbyte2

Operand Stack: ..., objectref ..., result

The objectref, which must be of type reference, is popped from the operand stack. The unsigned indexbyte1 and indexbyte2 are used to construct an index into the run-time constant pool of the current class (§2.6), where the value of the index is (indexbyte1 << 8) | indexbyte2. The run-time constant pool entry at the index must be a symbolic reference to a class, array, or interface type.

`, tooltip: `Determine if object is of given type`, }; case 'INVOKEDYNAMIC': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.invokedynamic`, html: `

Instruction invokedynamic: Invoke a dynamically-computed call site

Format: invokedynamic indexbyte1 indexbyte2 0 0

Operand Stack: ..., [arg1, [arg2 ...]] ...

First, the unsigned indexbyte1 and indexbyte2 are used to construct an index into the run-time constant pool of the current class (§2.6), where the value of the index is (indexbyte1 << 8) | indexbyte2. The run-time constant pool entry at the index must be a symbolic reference to a dynamically-computed call site (§5.1). The values of the third and fourth operand bytes must always be zero.

`, tooltip: `Invoke a dynamically-computed call site`, }; case 'INVOKEINTERFACE': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.invokeinterface`, html: `

Instruction invokeinterface: Invoke interface method

Format: invokeinterface indexbyte1 indexbyte2 count 0

Operand Stack: ..., objectref, [arg1, [arg2 ...]] ...

The unsigned indexbyte1 and indexbyte2 are used to construct an index into the run-time constant pool of the current class (§2.6), where the value of the index is (indexbyte1 << 8) | indexbyte2. The run-time constant pool entry at the index must be a symbolic reference to an interface method (§5.1), which gives the name and descriptor (§4.3.3) of the interface method as well as a symbolic reference to the interface in which the interface method is to be found. The named interface method is resolved (§5.4.3.4).

`, tooltip: `Invoke interface method`, }; case 'INVOKESPECIAL': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.invokespecial`, html: `

Instruction invokespecial: Invoke instance method; direct invocation of instance initialization methods and methods of the current class and its supertypes

Format: invokespecial indexbyte1 indexbyte2

Operand Stack: ..., objectref, [arg1, [arg2 ...]] ...

The unsigned indexbyte1 and indexbyte2 are used to construct an index into the run-time constant pool of the current class (§2.6), where the value of the index is (indexbyte1 << 8) | indexbyte2. The run-time constant pool entry at the index must be a symbolic reference to a method or an interface method (§5.1), which gives the name and descriptor (§4.3.3) of the method or interface method as well as a symbolic reference to the class or interface in which the method or interface method is to be found. The named method is resolved (§5.4.3.3, §5.4.3.4).

`, tooltip: `Invoke instance method; direct invocation of instance initialization methods and methods of the current class and its supertypes `, }; case 'INVOKESTATIC': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.invokestatic`, html: `

Instruction invokestatic: Invoke a class (static) method

Format: invokestatic indexbyte1 indexbyte2

Operand Stack: ..., [arg1, [arg2 ...]] ...

The unsigned indexbyte1 and indexbyte2 are used to construct an index into the run-time constant pool of the current class (§2.6), where the value of the index is (indexbyte1 << 8) | indexbyte2. The run-time constant pool entry at the index must be a symbolic reference to a method or an interface method (§5.1), which gives the name and descriptor (§4.3.3) of the method or interface method as well as a symbolic reference to the class or interface in which the method or interface method is to be found. The named method is resolved (§5.4.3.3, §5.4.3.4).

`, tooltip: `Invoke a class (static) method `, }; case 'INVOKEVIRTUAL': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.invokevirtual`, html: `

Instruction invokevirtual: Invoke instance method; dispatch based on class

Format: invokevirtual indexbyte1 indexbyte2

Operand Stack: ..., objectref, [arg1, [arg2 ...]] ...

The unsigned indexbyte1 and indexbyte2 are used to construct an index into the run-time constant pool of the current class (§2.6), where the value of the index is (indexbyte1 << 8) | indexbyte2. The run-time constant pool entry at the index must be a symbolic reference to a method (§5.1), which gives the name and descriptor (§4.3.3) of the method as well as a symbolic reference to the class in which the method is to be found. The named method is resolved (§5.4.3.3).

`, tooltip: `Invoke instance method; dispatch based on class`, }; case 'IOR': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.ior`, html: `

Instruction ior: Boolean OR int

Format: ior

Operand Stack: ..., value1, value2 ..., result

Both value1 and value2 must be of type int. They are popped from the operand stack. An int result is calculated by taking the bitwise inclusive OR of value1 and value2. The result is pushed onto the operand stack.

`, tooltip: `Boolean OR int`, }; case 'IREM': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.irem`, html: `

Instruction irem: Remainder int

Format: irem

Operand Stack: ..., value1, value2 ..., result

Both value1 and value2 must be of type int. The values are popped from the operand stack. The int result is value1 - (value1 / value2) * value2. The result is pushed onto the operand stack.

`, tooltip: `Remainder int`, }; case 'IRETURN': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.ireturn`, html: `

Instruction ireturn: Return int from method

Format: ireturn

Operand Stack: ..., value [empty]

The current method must have return type boolean, byte, char, short, or int. The value must be of type int. If the current method is a synchronized method, the monitor entered or reentered on invocation of the method is updated and possibly exited as if by execution of a monitorexit instruction (§monitorexit) in the current thread. If no exception is thrown, value is popped from the operand stack of the current frame (§2.6) and pushed onto the operand stack of the frame of the invoker. Any other values on the operand stack of the current method are discarded.

`, tooltip: `Return int from method `, }; case 'ISHL': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.ishl`, html: `

Instruction ishl: Shift left int

Format: ishl

Operand Stack: ..., value1, value2 ..., result

Both value1 and value2 must be of type int. The values are popped from the operand stack. An int result is calculated by shifting value1 left by s bit positions, where s is the value of the low 5 bits of value2. The result is pushed onto the operand stack.

`, tooltip: `Shift left int`, }; case 'ISHR': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.ishr`, html: `

Instruction ishr: Arithmetic shift right int

Format: ishr

Operand Stack: ..., value1, value2 ..., result

Both value1 and value2 must be of type int. The values are popped from the operand stack. An int result is calculated by shifting value1 right by s bit positions, with sign extension, where s is the value of the low 5 bits of value2. The result is pushed onto the operand stack.

`, tooltip: `Arithmetic shift right int`, }; case 'ISTORE': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.istore`, html: `

Instruction istore: Store int into local variable

Format: istore index

Operand Stack: ..., value ...

The index is an unsigned byte that must be an index into the local variable array of the current frame (§2.6). The value on the top of the operand stack must be of type int. It is popped from the operand stack, and the value of the local variable at index is set to value.

`, tooltip: `Store int into local variable `, }; case 'ISTORE_0': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.istore_n`, html: `

Instruction istore_0: Store int into local variable

Format: istore_[n]

Operand Stack: ..., value ...

The <n> must be an index into the local variable array of the current frame (§2.6). The value on the top of the operand stack must be of type int. It is popped from the operand stack, and the value of the local variable at <n> is set to value.

`, tooltip: `Store int into local variable `, }; case 'ISTORE_1': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.istore_n`, html: `

Instruction istore_1: Store int into local variable

Format: istore_[n]

Operand Stack: ..., value ...

The <n> must be an index into the local variable array of the current frame (§2.6). The value on the top of the operand stack must be of type int. It is popped from the operand stack, and the value of the local variable at <n> is set to value.

`, tooltip: `Store int into local variable `, }; case 'ISTORE_2': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.istore_n`, html: `

Instruction istore_2: Store int into local variable

Format: istore_[n]

Operand Stack: ..., value ...

The <n> must be an index into the local variable array of the current frame (§2.6). The value on the top of the operand stack must be of type int. It is popped from the operand stack, and the value of the local variable at <n> is set to value.

`, tooltip: `Store int into local variable `, }; case 'ISTORE_3': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.istore_n`, html: `

Instruction istore_3: Store int into local variable

Format: istore_[n]

Operand Stack: ..., value ...

The <n> must be an index into the local variable array of the current frame (§2.6). The value on the top of the operand stack must be of type int. It is popped from the operand stack, and the value of the local variable at <n> is set to value.

`, tooltip: `Store int into local variable `, }; case 'ISUB': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.isub`, html: `

Instruction isub: Subtract int

Format: isub

Operand Stack: ..., value1, value2 ..., result

Both value1 and value2 must be of type int. The values are popped from the operand stack. The int result is value1 - value2. The result is pushed onto the operand stack.

`, tooltip: `Subtract int`, }; case 'IUSHR': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.iushr`, html: `

Instruction iushr: Logical shift right int

Format: iushr

Operand Stack: ..., value1, value2 ..., result

Both value1 and value2 must be of type int. The values are popped from the operand stack. An int result is calculated by shifting value1 right by s bit positions, with zero extension, where s is the value of the low 5 bits of value2. The result is pushed onto the operand stack.

`, tooltip: `Logical shift right int`, }; case 'IXOR': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.ixor`, html: `

Instruction ixor: Boolean XOR int

Format: ixor

Operand Stack: ..., value1, value2 ..., result

Both value1 and value2 must be of type int. They are popped from the operand stack. An int result is calculated by taking the bitwise exclusive OR of value1 and value2. The result is pushed onto the operand stack.

`, tooltip: `Boolean XOR int`, }; case 'JSR': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.jsr`, html: `

Instruction jsr: Jump subroutine

Format: jsr branchbyte1 branchbyte2

Operand Stack: ... ..., address

The address of the opcode of the instruction immediately following this jsr instruction is pushed onto the operand stack as a value of type returnAddress. The unsigned branchbyte1 and branchbyte2 are used to construct a signed 16-bit offset, where the offset is (branchbyte1 << 8) | branchbyte2. Execution proceeds at that offset from the address of this jsr instruction. The target address must be that of an opcode of an instruction within the method that contains this jsr instruction.

`, tooltip: `Jump subroutine`, }; case 'JSR_W': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.jsr_w`, html: `

Instruction jsr_w: Jump subroutine (wide index)

Format: jsr_w branchbyte1 branchbyte2 branchbyte3 branchbyte4

Operand Stack: ... ..., address

The address of the opcode of the instruction immediately following this jsr_w instruction is pushed onto the operand stack as a value of type returnAddress. The unsigned branchbyte1, branchbyte2, branchbyte3, and branchbyte4 are used to construct a signed 32-bit offset, where the offset is (branchbyte1 << 24) | (branchbyte2 << 16) | (branchbyte3 << 8) | branchbyte4. Execution proceeds at that offset from the address of this jsr_w instruction. The target address must be that of an opcode of an instruction within the method that contains this jsr_w instruction.

`, tooltip: `Jump subroutine (wide index)`, }; case 'L2D': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.l2d`, html: `

Instruction l2d: Convert long to double

Format: l2d

Operand Stack: ..., value ..., result

The value on the top of the operand stack must be of type long. It is popped from the operand stack and converted to a double result using the round to nearest rounding policy (§2.8). The result is pushed onto the operand stack.

`, tooltip: `Convert long to double`, }; case 'L2F': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.l2f`, html: `

Instruction l2f: Convert long to float

Format: l2f

Operand Stack: ..., value ..., result

The value on the top of the operand stack must be of type long. It is popped from the operand stack and converted to a float result using the round to nearest rounding policy (§2.8). The result is pushed onto the operand stack.

`, tooltip: `Convert long to float`, }; case 'L2I': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.l2i`, html: `

Instruction l2i: Convert long to int

Format: l2i

Operand Stack: ..., value ..., result

The value on the top of the operand stack must be of type long. It is popped from the operand stack and converted to an int result by taking the low-order 32 bits of the long value and discarding the high-order 32 bits. The result is pushed onto the operand stack.

`, tooltip: `Convert long to int`, }; case 'LADD': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.ladd`, html: `

Instruction ladd: Add long

Format: ladd

Operand Stack: ..., value1, value2 ..., result

Both value1 and value2 must be of type long. The values are popped from the operand stack. The long result is value1 + value2. The result is pushed onto the operand stack.

`, tooltip: `Add long`, }; case 'LALOAD': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.laload`, html: `

Instruction laload: Load long from array

Format: laload

Operand Stack: ..., arrayref, index ..., value

The arrayref must be of type reference and must refer to an array whose components are of type long. The index must be of type int. Both arrayref and index are popped from the operand stack. The long value in the component of the array at index is retrieved and pushed onto the operand stack.

`, tooltip: `Load long from array `, }; case 'LAND': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.land`, html: `

Instruction land: Boolean AND long

Format: land

Operand Stack: ..., value1, value2 ..., result

Both value1 and value2 must be of type long. They are popped from the operand stack. A long result is calculated by taking the bitwise AND of value1 and value2. The result is pushed onto the operand stack.

`, tooltip: `Boolean AND long`, }; case 'LASTORE': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.lastore`, html: `

Instruction lastore: Store into long array

Format: lastore

Operand Stack: ..., arrayref, index, value ...

The arrayref must be of type reference and must refer to an array whose components are of type long. The index must be of type int, and value must be of type long. The arrayref, index, and value are popped from the operand stack. The long value is stored as the component of the array indexed by index.

`, tooltip: `Store into long array `, }; case 'LCMP': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.lcmp`, html: `

Instruction lcmp: Compare long

Format: lcmp

Operand Stack: ..., value1, value2 ..., result

Both value1 and value2 must be of type long. They are both popped from the operand stack, and a signed integer comparison is performed. If value1 is greater than value2, the int value 1 is pushed onto the operand stack. If value1 is equal to value2, the int value 0 is pushed onto the operand stack. If value1 is less than value2, the int value -1 is pushed onto the operand stack.

`, tooltip: `Compare long`, }; case 'LCONST_0': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.lconst_l`, html: `

Instruction lconst_0: Push long constant

Format: lconst_[l]

Operand Stack: ... ..., <l>

Push the long constant <l> (0 or 1) onto the operand stack.

`, tooltip: `Push long constant `, }; case 'LCONST_1': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.lconst_l`, html: `

Instruction lconst_1: Push long constant

Format: lconst_[l]

Operand Stack: ... ..., <l>

Push the long constant <l> (0 or 1) onto the operand stack.

`, tooltip: `Push long constant `, }; case 'LDC': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.ldc`, html: `

Instruction ldc: Push item from run-time constant pool

Format: ldc index

Operand Stack: ... ..., value

The index is an unsigned byte that must be a valid index into the run-time constant pool of the current class (§2.5.5). The run-time constant pool entry at index must be loadable (§5.1), and not any of the following:

`, tooltip: `Push item from run-time constant pool`, }; case 'LDC_W': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.ldc_w`, html: `

Instruction ldc_w: Push item from run-time constant pool (wide index)

Format: ldc_w indexbyte1 indexbyte2

Operand Stack: ... ..., value

The unsigned indexbyte1 and indexbyte2 are assembled into an unsigned 16-bit index into the run-time constant pool of the current class (§2.5.5), where the value of the index is calculated as (indexbyte1 << 8) | indexbyte2. The index must be a valid index into the run-time constant pool of the current class. The run-time constant pool entry at the index must be loadable (§5.1), and not any of the following:

`, tooltip: `Push item from run-time constant pool (wide index)`, }; case 'LDC2_W': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.ldc2_w`, html: `

Instruction ldc2_w: Push long or double from run-time constant pool (wide index)

Format: ldc2_w indexbyte1 indexbyte2

Operand Stack: ... ..., value

The unsigned indexbyte1 and indexbyte2 are assembled into an unsigned 16-bit index into the run-time constant pool of the current class (§2.5.5), where the value of the index is calculated as (indexbyte1 << 8) | indexbyte2. The index must be a valid index into the run-time constant pool of the current class. The run-time constant pool entry at the index must be loadable (§5.1), and in particular one of the following:

`, tooltip: `Push long or double from run-time constant pool (wide index) `, }; case 'LDIV': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.ldiv`, html: `

Instruction ldiv: Divide long

Format: ldiv

Operand Stack: ..., value1, value2 ..., result

Both value1 and value2 must be of type long. The values are popped from the operand stack. The long result is the value of the Java programming language expression value1 / value2. The result is pushed onto the operand stack.

`, tooltip: `Divide long`, }; case 'LLOAD': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.lload`, html: `

Instruction lload: Load long from local variable

Format: lload index

Operand Stack: ... ..., value

The index is an unsigned byte. Both index and index+1 must be indices into the local variable array of the current frame (§2.6). The local variable at index must contain a long. The value of the local variable at index is pushed onto the operand stack.

`, tooltip: `Load long from local variable `, }; case 'LLOAD_0': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.lload_n`, html: `

Instruction lload_0: Load long from local variable

Format: lload_[n]

Operand Stack: ... ..., value

Both <n> and <n>+1 must be indices into the local variable array of the current frame (§2.6). The local variable at <n> must contain a long. The value of the local variable at <n> is pushed onto the operand stack.

`, tooltip: `Load long from local variable `, }; case 'LLOAD_1': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.lload_n`, html: `

Instruction lload_1: Load long from local variable

Format: lload_[n]

Operand Stack: ... ..., value

Both <n> and <n>+1 must be indices into the local variable array of the current frame (§2.6). The local variable at <n> must contain a long. The value of the local variable at <n> is pushed onto the operand stack.

`, tooltip: `Load long from local variable `, }; case 'LLOAD_2': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.lload_n`, html: `

Instruction lload_2: Load long from local variable

Format: lload_[n]

Operand Stack: ... ..., value

Both <n> and <n>+1 must be indices into the local variable array of the current frame (§2.6). The local variable at <n> must contain a long. The value of the local variable at <n> is pushed onto the operand stack.

`, tooltip: `Load long from local variable `, }; case 'LLOAD_3': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.lload_n`, html: `

Instruction lload_3: Load long from local variable

Format: lload_[n]

Operand Stack: ... ..., value

Both <n> and <n>+1 must be indices into the local variable array of the current frame (§2.6). The local variable at <n> must contain a long. The value of the local variable at <n> is pushed onto the operand stack.

`, tooltip: `Load long from local variable `, }; case 'LMUL': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.lmul`, html: `

Instruction lmul: Multiply long

Format: lmul

Operand Stack: ..., value1, value2 ..., result

Both value1 and value2 must be of type long. The values are popped from the operand stack. The long result is value1 * value2. The result is pushed onto the operand stack.

`, tooltip: `Multiply long`, }; case 'LNEG': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.lneg`, html: `

Instruction lneg: Negate long

Format: lneg

Operand Stack: ..., value ..., result

The value must be of type long. It is popped from the operand stack. The long result is the arithmetic negation of value, -value. The result is pushed onto the operand stack.

`, tooltip: `Negate long`, }; case 'LOOKUPSWITCH': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.lookupswitch`, html: `

Instruction lookupswitch: Access jump table by key match and jump

Format: lookupswitch <0-3 byte pad> defaultbyte1 defaultbyte2 defaultbyte3 defaultbyte4 npairs1 npairs2 npairs3 npairs4 match-offset pairs...

Operand Stack: ..., key ...

A lookupswitch is a variable-length instruction. Immediately after the lookupswitch opcode, between zero and three bytes must act as padding, such that defaultbyte1 begins at an address that is a multiple of four bytes from the start of the current method (the opcode of its first instruction). Immediately after the padding follow a series of signed 32-bit values: default, npairs, and then npairs pairs of signed 32-bit values. The npairs must be greater than or equal to 0. Each of the npairs pairs consists of an int match and a signed 32-bit offset. Each of these signed 32-bit values is constructed from four unsigned bytes as (byte1 << 24) | (byte2 << 16) | (byte3 << 8) | byte4.

`, tooltip: `Access jump table by key match and jump`, }; case 'LOR': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.lor`, html: `

Instruction lor: Boolean OR long

Format: lor

Operand Stack: ..., value1, value2 ..., result

Both value1 and value2 must be of type long. They are popped from the operand stack. A long result is calculated by taking the bitwise inclusive OR of value1 and value2. The result is pushed onto the operand stack.

`, tooltip: `Boolean OR long`, }; case 'LREM': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.lrem`, html: `

Instruction lrem: Remainder long

Format: lrem

Operand Stack: ..., value1, value2 ..., result

Both value1 and value2 must be of type long. The values are popped from the operand stack. The long result is value1 - (value1 / value2) * value2. The result is pushed onto the operand stack.

`, tooltip: `Remainder long`, }; case 'LRETURN': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.lreturn`, html: `

Instruction lreturn: Return long from method

Format: lreturn

Operand Stack: ..., value [empty]

The current method must have return type long. The value must be of type long. If the current method is a synchronized method, the monitor entered or reentered on invocation of the method is updated and possibly exited as if by execution of a monitorexit instruction (§monitorexit) in the current thread. If no exception is thrown, value is popped from the operand stack of the current frame (§2.6) and pushed onto the operand stack of the frame of the invoker. Any other values on the operand stack of the current method are discarded.

`, tooltip: `Return long from method `, }; case 'LSHL': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.lshl`, html: `

Instruction lshl: Shift left long

Format: lshl

Operand Stack: ..., value1, value2 ..., result

The value1 must be of type long, and value2 must be of type int. The values are popped from the operand stack. A long result is calculated by shifting value1 left by s bit positions, where s is the low 6 bits of value2. The result is pushed onto the operand stack.

`, tooltip: `Shift left long`, }; case 'LSHR': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.lshr`, html: `

Instruction lshr: Arithmetic shift right long

Format: lshr

Operand Stack: ..., value1, value2 ..., result

The value1 must be of type long, and value2 must be of type int. The values are popped from the operand stack. A long result is calculated by shifting value1 right by s bit positions, with sign extension, where s is the value of the low 6 bits of value2. The result is pushed onto the operand stack.

`, tooltip: `Arithmetic shift right long`, }; case 'LSTORE': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.lstore`, html: `

Instruction lstore: Store long into local variable

Format: lstore index

Operand Stack: ..., value ...

The index is an unsigned byte. Both index and index+1 must be indices into the local variable array of the current frame (§2.6). The value on the top of the operand stack must be of type long. It is popped from the operand stack, and the local variables at index and index+1 are set to value.

`, tooltip: `Store long into local variable `, }; case 'LSTORE_0': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.lstore_n`, html: `

Instruction lstore_0: Store long into local variable

Format: lstore_[n]

Operand Stack: ..., value ...

Both <n> and <n>+1 must be indices into the local variable array of the current frame (§2.6). The value on the top of the operand stack must be of type long. It is popped from the operand stack, and the local variables at <n> and <n>+1 are set to value.

`, tooltip: `Store long into local variable `, }; case 'LSTORE_1': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.lstore_n`, html: `

Instruction lstore_1: Store long into local variable

Format: lstore_[n]

Operand Stack: ..., value ...

Both <n> and <n>+1 must be indices into the local variable array of the current frame (§2.6). The value on the top of the operand stack must be of type long. It is popped from the operand stack, and the local variables at <n> and <n>+1 are set to value.

`, tooltip: `Store long into local variable `, }; case 'LSTORE_2': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.lstore_n`, html: `

Instruction lstore_2: Store long into local variable

Format: lstore_[n]

Operand Stack: ..., value ...

Both <n> and <n>+1 must be indices into the local variable array of the current frame (§2.6). The value on the top of the operand stack must be of type long. It is popped from the operand stack, and the local variables at <n> and <n>+1 are set to value.

`, tooltip: `Store long into local variable `, }; case 'LSTORE_3': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.lstore_n`, html: `

Instruction lstore_3: Store long into local variable

Format: lstore_[n]

Operand Stack: ..., value ...

Both <n> and <n>+1 must be indices into the local variable array of the current frame (§2.6). The value on the top of the operand stack must be of type long. It is popped from the operand stack, and the local variables at <n> and <n>+1 are set to value.

`, tooltip: `Store long into local variable `, }; case 'LSUB': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.lsub`, html: `

Instruction lsub: Subtract long

Format: lsub

Operand Stack: ..., value1, value2 ..., result

Both value1 and value2 must be of type long. The values are popped from the operand stack. The long result is value1 - value2. The result is pushed onto the operand stack.

`, tooltip: `Subtract long`, }; case 'LUSHR': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.lushr`, html: `

Instruction lushr: Logical shift right long

Format: lushr

Operand Stack: ..., value1, value2 ..., result

The value1 must be of type long, and value2 must be of type int. The values are popped from the operand stack. A long result is calculated by shifting value1 right logically by s bit positions, with zero extension, where s is the value of the low 6 bits of value2. The result is pushed onto the operand stack.

`, tooltip: `Logical shift right long`, }; case 'LXOR': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.lxor`, html: `

Instruction lxor: Boolean XOR long

Format: lxor

Operand Stack: ..., value1, value2 ..., result

Both value1 and value2 must be of type long. They are popped from the operand stack. A long result is calculated by taking the bitwise exclusive OR of value1 and value2. The result is pushed onto the operand stack.

`, tooltip: `Boolean XOR long`, }; case 'MONITORENTER': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.monitorenter`, html: `

Instruction monitorenter: Enter monitor for object

Format: monitorenter

Operand Stack: ..., objectref ...

The objectref must be of type reference.

`, tooltip: `Enter monitor for object`, }; case 'MONITOREXIT': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.monitorexit`, html: `

Instruction monitorexit: Exit monitor for object

Format: monitorexit

Operand Stack: ..., objectref ...

The objectref must be of type reference.

`, tooltip: `Exit monitor for object`, }; case 'MULTIANEWARRAY': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.multianewarray`, html: `

Instruction multianewarray: Create new multidimensional array

Format: multianewarray indexbyte1 indexbyte2 dimensions

Operand Stack: ..., count1, [count2, ...] ..., arrayref

The dimensions operand is an unsigned byte that must be greater than or equal to 1. It represents the number of dimensions of the array to be created. The operand stack must contain dimensions values. Each such value represents the number of components in a dimension of the array to be created, must be of type int, and must be non-negative. The count1 is the desired length in the first dimension, count2 in the second, etc.

`, tooltip: `Create new multidimensional array`, }; case 'NEW': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.new`, html: `

Instruction new: Create new object

Format: new indexbyte1 indexbyte2

Operand Stack: ... ..., objectref

The unsigned indexbyte1 and indexbyte2 are used to construct an index into the run-time constant pool of the current class (§2.6), where the value of the index is (indexbyte1 << 8) | indexbyte2. The run-time constant pool entry at the index must be a symbolic reference to a class or interface type. The named class or interface type is resolved (§5.4.3.1) and should result in a class type. Memory for a new instance of that class is allocated from the garbage-collected heap, and the instance variables of the new object are initialized to their default initial values (§2.3, §2.4). The objectref, a reference to the instance, is pushed onto the operand stack.

`, tooltip: `Create new object`, }; case 'NEWARRAY': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.newarray`, html: `

Instruction newarray: Create new array

Format: newarray atype

Operand Stack: ..., count ..., arrayref

The count must be of type int. It is popped off the operand stack. The count represents the number of elements in the array to be created.

`, tooltip: `Create new array`, }; case 'NOP': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.nop`, html: `

Instruction nop: Do nothing

Format: nop

Operand Stack: No change undefined

Do nothing.

`, tooltip: `Do nothing`, }; case 'POP': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.pop`, html: `

Instruction pop: Pop the top operand stack value

Format: pop

Operand Stack: ..., value ...

Pop the top value from the operand stack.

`, tooltip: `Pop the top operand stack value`, }; case 'POP2': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.pop2`, html: `

Instruction pop2: Pop the top one or two operand stack values

Format: pop2

Operand Stack: Form 1: ..., value2, value1

Pop the top one or two values from the operand stack.

`, tooltip: `Pop the top one or two operand stack values`, }; case 'PUTFIELD': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.putfield`, html: `

Instruction putfield: Set field in object

Format: putfield indexbyte1 indexbyte2

Operand Stack: ..., objectref, value ...

The unsigned indexbyte1 and indexbyte2 are used to construct an index into the run-time constant pool of the current class (§2.6), where the value of the index is (indexbyte1 << 8) | indexbyte2. The run-time constant pool entry at the index must be a symbolic reference to a field (§5.1), which gives the name and descriptor of the field as well as a symbolic reference to the class in which the field is to be found. The referenced field is resolved (§5.4.3.2).

`, tooltip: `Set field in object`, }; case 'PUTSTATIC': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.putstatic`, html: `

Instruction putstatic: Set static field in class

Format: putstatic indexbyte1 indexbyte2

Operand Stack: ..., value ...

The unsigned indexbyte1 and indexbyte2 are used to construct an index into the run-time constant pool of the current class (§2.6), where the value of the index is (indexbyte1 << 8) | indexbyte2. The run-time constant pool entry at the index must be a symbolic reference to a field (§5.1), which gives the name and descriptor of the field as well as a symbolic reference to the class or interface in which the field is to be found. The referenced field is resolved (§5.4.3.2).

`, tooltip: `Set static field in class`, }; case 'RET': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.ret`, html: `

Instruction ret: Return from subroutine

Format: ret index

Operand Stack: No change undefined

The index is an unsigned byte between 0 and 255, inclusive. The local variable at index in the current frame (§2.6) must contain a value of type returnAddress. The contents of the local variable are written into the Java Virtual Machine's pc register, and execution continues there.

`, tooltip: `Return from subroutine`, }; case 'RETURN': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.return`, html: `

Instruction return: Return void from method

Format: return

Operand Stack: ... [empty]

The current method must have return type void. If the current method is a synchronized method, the monitor entered or reentered on invocation of the method is updated and possibly exited as if by execution of a monitorexit instruction (§monitorexit) in the current thread. If no exception is thrown, any values on the operand stack of the current frame (§2.6) are discarded.

`, tooltip: `Return void from method `, }; case 'SALOAD': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.saload`, html: `

Instruction saload: Load short from array

Format: saload

Operand Stack: ..., arrayref, index ..., value

The arrayref must be of type reference and must refer to an array whose components are of type short. The index must be of type int. Both arrayref and index are popped from the operand stack. The component of the array at index is retrieved and sign-extended to an int value. That value is pushed onto the operand stack.

`, tooltip: `Load short from array `, }; case 'SASTORE': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.sastore`, html: `

Instruction sastore: Store into short array

Format: sastore

Operand Stack: ..., arrayref, index, value ...

The arrayref must be of type reference and must refer to an array whose components are of type short. Both index and value must be of type int. The arrayref, index, and value are popped from the operand stack. The int value is truncated to a short and stored as the component of the array indexed by index.

`, tooltip: `Store into short array `, }; case 'SIPUSH': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.sipush`, html: `

Instruction sipush: Push short

Format: sipush byte1 byte2

Operand Stack: ... ..., value

The immediate unsigned byte1 and byte2 values are assembled into an intermediate short, where the value of the short is (byte1 << 8) | byte2. The intermediate value is then sign-extended to an int value. That value is pushed onto the operand stack.

`, tooltip: `Push short`, }; case 'SWAP': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.swap`, html: `

Instruction swap: Swap the top two operand stack values

Format: swap

Operand Stack: ..., value2, value1 ..., value1, value2

Swap the top two values on the operand stack.

`, tooltip: `Swap the top two operand stack values`, }; case 'TABLESWITCH': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.tableswitch`, html: `

Instruction tableswitch: Access jump table by index and jump

Format: tableswitch <0-3 byte pad> defaultbyte1 defaultbyte2 defaultbyte3 defaultbyte4 lowbyte1 lowbyte2 lowbyte3 lowbyte4 highbyte1 highbyte2 highbyte3 highbyte4 jump offsets...

Operand Stack: ..., index ...

A tableswitch is a variable-length instruction. Immediately after the tableswitch opcode, between zero and three bytes must act as padding, such that defaultbyte1 begins at an address that is a multiple of four bytes from the start of the current method (the opcode of its first instruction). Immediately after the padding are bytes constituting three signed 32-bit values: default, low, and high. Immediately following are bytes constituting a series of high - low + 1 signed 32-bit offsets. The value low must be less than or equal to high. The high - low + 1 signed 32-bit offsets are treated as a 0-based jump table. Each of these signed 32-bit values is constructed as (byte1 << 24) | (byte2 << 16) | (byte3 << 8) | byte4.

`, tooltip: `Access jump table by index and jump`, }; case 'WIDE': return { url: `https://docs.oracle.com/javase/specs/jvms/se18/html/jvms-6.html#jvms-6.5.wide`, html: `

Instruction wide: Extend local variable index by additional bytes

Format: wide indexbyte1 indexbyte2

Operand Stack: wide = 196 (0xc4) undefined

null

`, tooltip: `Extend local variable index by additional bytes`, }; } }