Jasml Syntax
|
Java Macro Instruction Index The following are index of Java Macro Instruction Index, copied from The Java Virtual Machine Specification. Name : nop Opcode : 0(0x0) Operation : Do nothing Format : nop Operand Stack : No change Description : Do nothing. Name : aconst_null Opcode : 1(0x1) Operation : Push null Format : aconst_null Operand Stack : ... ..., null Description : Push the null object reference onto the operand stack. Notes : The Java virtual machine does not mandate a concrete value for null. Name : iconst_m1 Opcode : 2(0x2) Operation : Push int constant -1 Format : iconst_0 Operand Stack : ... ..., -1 Description : Push the int constant -1 onto the operand stack. Notes : This instructions is equivalent to bipush -1 , except that the operand -1 is implicit. Name : iconst_0 Opcode : 3(0x3) Operation : Push int constant 0 Format : iconst_0 Operand Stack : ... ..., 0 Description : Push the int constant 0 onto the operand stack. Notes : This instructions is equivalent to bipush 0 , except that the operand 0 is implicit. Name : iconst_1 Opcode : 4(0x4) Operation : Push int constant 1 Format : iconst_1 Operand Stack : ... ..., 1 Description : Push the int constant 1 onto the operand stack. Notes : This instructions is equivalent to bipush 1 , except that the operand 1 is implicit. Name : iconst_2 Opcode : 5(0x5) Operation : Push int constant 2 Format : iconst_2 Operand Stack : ... ..., 2 Description : Push the int constant 2 onto the operand stack. Notes : This instructions is equivalent to bipush 2 , except that the operand 2 is implicit. Name : iconst_3 Opcode : 6(0x6) Operation : Push int constant 3 Format : iconst_3 Operand Stack : ... ..., 3 Description : Push the int constant 3 onto the operand stack. Notes : This instructions is equivalent to bipush 3 , except that the operand 3 is implicit. Name : iconst_4 Opcode : 7(0x7) Operation : Push int constant 4 Format : iconst_4 Operand Stack : ... ..., 4 Description : Push the int constant 4 onto the operand stack. Notes : This instructions is equivalent to bipush 4 , except that the operand 4 is implicit. Name : iconst_5 Opcode : 8(0x8) Operation : Push int constant 5 Format : iconst_5 Operand Stack : ... ..., 5 Description : Push the int constant 5 onto the operand stack. Notes : This instructions is equivalent to bipush 5 , except that the operand 5 is implicit. Name : lconst_0 Opcode : 9(0x9) Operation : Push long constant Format : lconst_0 Operand Stack : ... ..., 0 Description : Push the long constant0 onto the operand stack. Name : lconst_1 Opcode : 10(0xa) Operation : Push long constant Format : lconst_1 Operand Stack : ... ..., 1 Description : Push the long constant 1 onto the operand stack. Name : fconst_0 Opcode : 11(0xb) Operation : Push float Format : fconst_0 Operand Stack : ... ..., 0 Description : Push the float constant 0.0 onto the operand stack. Name : fconst_1 Opcode : 12(0xc) Operation : Push float Format : fconst_1 Operand Stack : ... ..., 1 Description : Push the float constant 1.0 onto the operand stack. Name : fconst_2 Opcode : 13(0xd) Operation : Push float Format : fconst_2 Operand Stack : ... ..., 2 Description : Push the float constant 2.0 onto the operand stack. Name : dconst_0 Opcode : 14(0xe) Operation : Push double Format : dconst_0 Operand Stack : ... ..., 0 Description : Push the double constant 0.0 onto the operand stack. Name : dconst_1 Opcode : 15(0xf) Operation : Push double Format : dconst_1 Operand Stack : ... ..., 1 Description : Push the double constant 1.0 onto the operand stack. Name : bipush Opcode : 16(0x10) Operation : Push byte Format : bipush Operand Stack : ... ..., value Description : The immediate byte is sign-extended to an int value. That value is pushed onto the operand stack. Name : sipush Opcode : 17(0x11) Operation : Push short Format : sipush Operand Stack : ... ..., value Description : 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. Name : ldc Opcode : 18(0x12) Operation : Push item from runtime constant pool Format : ldc Operand Stack : ... ..., value Description : The index is an unsigned byte that must be a valid index into the runtime constant pool of the current class. The runtime constant pool entry at index either must be a runtime constant of type int or float, or must be a symbolic reference to a string literal. Notes : The ldc instruction can only be used to push a value of type float taken from the float value set because a constant of type float in the constant pool must be taken from the float value set. Name : ldc_w Opcode : 19(0x13) Operation : Push item from runtime constant pool (wide index) Format : ldc_w Operand Stack : ... ..., value Description : The unsigned indexbyte1 and indexbyte2 are assembled into an unsigned 16-bit index into the runtime constant pool of the current class, where the value of the index is calculated as (indexbyte1 << 8) | indexbyte2. The index must be a valid index into the runtime constant pool of the current class. The runtime constant pool entry at the index either must be a runtime constant of type int or float, or must be a symbolic reference to a string literal. Notes : The ldc_w instruction is identical to the ldc instruction except for its wider runtime constant pool index. Name : ldc2_w Opcode : 20(0x14) Operation : Push long or double from runtime constant pool (wide index) Format : ldc2_w Operand Stack : ... ..., value Description : The unsigned indexbyte1 and indexbyte2 are assembled into an unsigned 16-bit index into the runtime constant pool of the current class, where the value of the index is calculated as (indexbyte1 << 8) | indexbyte2. The index must be a valid index into the runtime constant pool of the current class. The runtime constant pool entry at the index must be a runtime constant of type long or double. The numeric value of that runtime constant is pushed onto the operand stack as a long or double, respectively. Notes : Only a wide-index version of the ldc2_w instruction exists; there is no ldc2 instruction that pushes a long or double with a single-byte index. Name : iload Opcode : 21(0x15) Operation : Load int from local variable Format : iload Operand Stack : ... ..., value Description : The index is an unsigned byte that must be an index into the local variable array of the current frame. The local variable at index must contain an int. The value of the local variable at index is pushed onto the operand stack. Notes : The iload opcode can be used in conjunction with the wide instruction to access a local variable using a two-byte unsigned index. Name : lload Opcode : 22(0x16) Operation : Load long from local variable Format : lload Operand Stack : ... ..., value Description : The index is an unsigned byte. Both index and index + 1 must be indices into the local variable array of the current frame. The local variable at index must contain a long. The value of the local variable at index is pushed onto the operand stack. Notes : The lload opcode can be used in conjunction with the wide instruction to access a local variable using a two-byte unsigned index. Name : fload Opcode : 23(0x17) Operation : Load float from local variable Format : fload Operand Stack : ... ..., value Description : The index is an unsigned byte that must be an index into the local variable array of the current frame. The local variable at index must contain a float. The value of the local variable at index is pushed onto the operand stack. Notes : The fload opcode can be used in conjunction with the wide instruction to access a local variable using a two-byte unsigned index. Name : dload Opcode : 24(0x18) Operation : Load double from local variable Format : dload Operand Stack : ... ..., value Description : The index is an unsigned byte. Both index and index + 1 must be indices into the local variable array of the current frame. The local variable at index must contain a double. The value of the local variable at index is pushed onto the operand stack. Notes : The dload opcode can be used in conjunction with the wide instruction to access a local variable using a two-byte unsigned index. Name : aload Opcode : 25(0x19) Operation : Load reference from local variable Format : aload Operand Stack : ... ..., objectref Description : The index is an unsigned byte that must be an index into the local variable array of the current frame. The local variable at index must contain a reference. The objectref in the local variable at index is pushed onto the operand stack. Notes : The aload instruction cannot be used to load a value of type returnAddress from a local variable onto the operand stack. This asymmetry with the astore instruction is intentional. Name : iload_0 Opcode : 26(0x1a) Operation : Load int from local variable Format : iload_0 Operand Stack : ... ..., value Description : 0 must be an index into the local variable array of the current frame. The local variable at index 0 must contain an int. The value of the local variable at 0 is pushed onto the operand stack. Notes : The iload_0 instructions is the same as iload with an index of 0, except that the operand 0 is implicit. Name : iload_1 Opcode : 27(0x1b) Operation : Load int from local variable Format : iload_1 Operand Stack : ... ..., value Description : 1 must be an index into the local variable array of the current frame. The local variable at index 1 must contain an int. The value of the local variable at 1 is pushed onto the operand stack. Notes : The iload_1 instructions is the same as iload with an index of 1, except that the operand 1 is implicit. Name : iload_2 Opcode : 28(0x1c) Operation : Load int from local variable Format : iload_2 Operand Stack : ... ..., value Description : 2 must be an index into the local variable array of the current frame. The local variable at index 2 must contain an int. The value of the local variable at 2 is pushed onto the operand stack. Notes : The iload_2 instructions is the same as iload with an index of 2, except that the operand 2 is implicit. Name : iload_3 Opcode : 29(0x1d) Operation : Load int from local variable Format : iload_3 Operand Stack : ... ..., value Description : 3 must be an index into the local variable array of the current frame. The local variable at index 3 must contain an int. The value of the local variable at 3 is pushed onto the operand stack. Notes : The iload_3 instructions is the same as iload with an index of 3, except that the operand 3 is implicit. Name : lload_0 Opcode : 30(0x1e) Operation : Load long from local variable Format : lload_0 Operand Stack : ... ..., value Description : Both 0 and 1 must be indices into the local variable array of the current frame. The local variable at 0 must contain a long. The value of the local variable at 0 is pushed onto the operand stack. Notes : The lload_0 instructions is the same as lload with an index of 0, except that the operand 0 is implicit. Name : lload_1 Opcode : 31(0x1f) Operation : Load long from local variable Format : lload_1 Operand Stack : ... ..., value Description : Both 1 and 2 must be indices into the local variable array of the current frame. The local variable at 1 must contain a long. The value of the local variable at 1 is pushed onto the operand stack. Notes : The lload_1 instructions is the same as lload with an index of 1, except that the operand 1 is implicit. Name : lload_2 Opcode : 32(0x20) Operation : Load long from local variable Format : lload_2 Operand Stack : ... ..., value Description : Both 2 and 3 must be indices into the local variable array of the current frame. The local variable at 2 must contain a long. The value of the local variable at 2 is pushed onto the operand stack. Notes : The lload_2 instructions is the same as lload with an index of 2, except that the operand 2 is implicit. Name : lload_3 Opcode : 33(0x21) Operation : Load long from local variable Format : lload_3 Operand Stack : ... ..., value Description : Both 3 and 4 must be indices into the local variable array of the current frame. The local variable at 3 must contain a long. The value of the local variable at 3 is pushed onto the operand stack. Notes : The lload_3 instructions is the same as lload with an index of 3, except that the operand 3 is implicit. Name : fload_0 Opcode : 34(0x22) Operation : Load float from local variable Format : fload_0 Operand Stack : ... ..., value Description : 0 must be an index into the local variable array of the current frame. The local variable at 0 must contain a float. The value of the local variable at 0 is pushed onto the operand stack. Notes : The fload_0 instructions is the same as fload with an index of 0, except that the operand 0 is implicit. Name : fload_1 Opcode : 35(0x23) Operation : Load float from local variable Format : fload_1 Operand Stack : ... ..., value Description : 1 must be an index into the local variable array of the current frame. The local variable at 1 must contain a float. The value of the local variable at 1 is pushed onto the operand stack. Notes : The fload_1 instructions is the same as fload with an index of 1, except that the operand 1 is implicit. Name : fload_2 Opcode : 36(0x24) Operation : Load float from local variable Format : fload_2 Operand Stack : ... ..., value Description : 2 must be an index into the local variable array of the current frame. The local variable at 2 must contain a float. The value of the local variable at 2 is pushed onto the operand stack. Notes : The fload_2 instructions is the same as fload with an index of 2, except that the operand 2 is implicit. Name : fload_3 Opcode : 37(0x25) Operation : Load float from local variable Format : fload_3 Operand Stack : ... ..., value Description : 3 must be an index into the local variable array of the current frame. The local variable at 3 must contain a float. The value of the local variable at 3 is pushed onto the operand stack. Notes : The fload_3 instructions is the same as fload with an index of 3, except that the operand 3 is implicit. Name : dload_0 Opcode : 38(0x26) Operation : Load double from local variable Format : dload_0 Operand Stack : ... ..., value Description : Both 0 and 1 must be indices into the local variable array of the current frame. The local variable at 0 must contain a double. The value of the local variable at 0 is pushed onto the operand stack. Notes : The dload_0 instructions is the same as dload with an index of 0, except that the operand 0 is implicit. Name : dload_1 Opcode : 39(0x27) Operation : Load double from local variable Format : dload_1 Operand Stack : ... ..., value Description : Both 1 and 2 must be indices into the local variable array of the current frame. The local variable at 1 must contain a double. The value of the local variable at 1 is pushed onto the operand stack. Notes : The dload_1 instructions is the same as dload with an index of 1, except that the operand 1 is implicit. Name : dload_2 Opcode : 40(0x28) Operation : Load double from local variable Format : dload_2 Operand Stack : ... ..., value Description : Both 2 and 3 must be indices into the local variable array of the current frame. The local variable at 2 must contain a double. The value of the local variable at 2 is pushed onto the operand stack. Notes : The dload_2 instructions is the same as dload with an index of 2, except that the operand 2 is implicit. Name : dload_3 Opcode : 41(0x29) Operation : Load double from local variable Format : dload_3 Operand Stack : ... ..., value Description : Both 3 and 4 must be indices into the local variable array of the current frame. The local variable at 3 must contain a double. The value of the local variable at 3 is pushed onto the operand stack. Notes : The dload_3 instructions is the same as dload with an index of 3, except that the operand 3 is implicit. Name : aload_0 Opcode : 42(0x2a) Operation : Load reference from local variable Format : aload_0 Operand Stack : ... ..., objectref Description : Load the item in the local variable array of the current frame with index 0. The local variable at that index must contain a reference. The objectref in the local variable at that index is pushed onto the operand stack. Notes : An aload_0 instruction cannot be used to load a value of type returnAddress from a local variable onto the operand stack. This asymmetry with the corresponding astore_0 instruction is intentional. The aload_0 instructions is the same as aload with an index of 0, except that the operand 0 is implicit. Name : aload_1 Opcode : 43(0x2b) Operation : Load reference from local variable Format : aload_1 Operand Stack : ... ..., objectref Description : Load the item in the local variable array of the current frame with index 1. The local variable at that index must contain a reference. The objectref in the local variable at that index is pushed onto the operand stack. Notes : An aload_1 instruction cannot be used to load a value of type returnAddress from a local variable onto the operand stack. This asymmetry with the corresponding astore_1 instruction is intentional. The aload_1 instructions is the same as aload with an index of 1, except that the operand 1 is implicit. Name : aload_2 Opcode : 44(0x2c) Operation : Load reference from local variable Format : aload_2 Operand Stack : ... ..., objectref Description : Load the item in the local variable array of the current frame with index 2. The local variable at that index must contain a reference. The objectref in the local variable at that index is pushed onto the operand stack. Notes : An aload_2 instruction cannot be used to load a value of type returnAddress from a local variable onto the operand stack. This asymmetry with the corresponding astore_2 instruction is intentional. The aload_2 instructions is the same as aload with an index of 2, except that the operand 2 is implicit. Name : aload_3 Opcode : 45(0x2d) Operation : Load reference from local variable Format : aload_3 Operand Stack : ... ..., objectref Description : Load the item in the local variable array of the current frame with index 3. The local variable at that index must contain a reference. The objectref in the local variable at that index is pushed onto the operand stack. Notes : An aload_3 instruction cannot be used to load a value of type returnAddress from a local variable onto the operand stack. This asymmetry with the corresponding astore_3 instruction is intentional. The aload_3 instructions is the same as aload with an index of 3, except that the operand 3 is implicit. Name : iaload Opcode : 46(0x2e) Operation : Load int from array Format : iaload Operand Stack : ..., arrayref, index ..., value Description : 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. Runtime Exceptions : If arrayref is null, iaload throws a NullPointerException. Name : laload Opcode : 47(0x2f) Operation : Load long from array Format : laload Operand Stack : ..., arrayref, index ..., value Description : 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. Runtime Exceptions : If arrayref is null, laload throws a NullPointerException. Name : faload Opcode : 48(0x30) Operation : Load float from array Format : faload Operand Stack : ..., arrayref, index ..., value Description : 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. Runtime Exceptions : If arrayref is null, faload throws a NullPointerException. Name : daload Opcode : 49(0x31) Operation : Load double from array Format : daload Operand Stack : ..., arrayref, index ..., value Description : 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. Runtime Exceptions : If arrayref is null, daload throws a NullPointerException. Name : aaload Opcode : 50(0x32) Operation : Load reference from array Format : aaload Operand Stack : ..., arrayref, index ..., value Description : The arrayref must be Runtime Exceptions : If arrayref is null, aaload throws a NullPointerException. Name : baload Opcode : 51(0x33) Operation : Load byte or boolean from array Format : baload Operand Stack : ..., arrayref, index ..., value Description : 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. If the components of the array are of type byte, the component of the array at index is retrieved and sign-extended to an int value. If the components of the array are of type boolean, the component of the array at index is retrieved and zero-extended to an int value. In either case the resulting value is pushed onto the operand stack. Runtime Exceptions : If arrayref is null, baload throws a NullPointerException. Name : caload Opcode : 52(0x34) Operation : Load char from array Format : caload Operand Stack : ..., arrayref, index ..., value Description : 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. Runtime Exceptions : If arrayref is null, caload throws a NullPointerException. Name : saload Opcode : 53(0x35) Operation : Load short from array Format : saload Operand Stack : ..., arrayref, index ..., value Description : 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. Runtime Exceptions : If arrayref is null, saload throws a NullPointerException. Name : istore Opcode : 54(0x36) Operation : Store int into local variable Format : istore Operand Stack : ..., value ... Description : The index is an unsigned byte that must be an index into the local variable array of the current frame. 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. Notes : The istore opcode can be used in conjunction with the wide instruction to access a local variable using a two-byte unsigned index. Name : lstore Opcode : 55(0x37) Operation : Store long into local variable Format : lstore Operand Stack : ..., value ... Description : The index is an unsigned byte. Both index and index + 1 must be indices into the local variable array of the current frame. 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. Notes : The lstore opcode can be used in conjunction with the wide instruction to access a local variable using a two-byte unsigned index. Name : fstore Opcode : 56(0x38) Operation : Store float into local variable Format : fstore Operand Stack : ..., value ... Description : The index is an unsigned byte that must be an index into the local variable array of the current frame. The value on the top of the operand stack must be of type float. It is popped from the operand stack and undergoes value set conversion, resulting in value. The value of the local variable at index is set to value. Notes : The fstore opcode can be used in conjunction with the wide instruction to access a local variable using a two-byte unsigned index. Name : dstore Opcode : 57(0x39) Operation : Store double into local variable Format : dstore Operand Stack : ..., value ... Description : The index is an unsigned byte. Both index and index + 1 must be indices into the local variable array of the current frame. The value on the top of the operand stack must be of type double. It is popped from the operand stack and undergoes value set conversion, resulting in value. The local variables at index and index + 1 are set to value. Notes : The dstore opcode can be used in conjunction with the wide instruction to access a local variable using a two-byte unsigned index. Name : astore Opcode : 58(0x3a) Operation : Store reference into local variable Format : astore Operand Stack : ..., objectref ... Description : The index is an unsigned byte that must be an index into the local variable array of the current frame. 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. Notes : The astore instruction is used with an objectref of type returnAddress when implementing the finally clauses of the Java programming language. The aload instruction cannot be used to load a value of type returnAddress from a local variable onto the operand stack. This asymmetry with the astore instruction is intentional. Name : istore_0 Opcode : 59(0x3b) Operation : Store int into local variable Format : istore_0 Operand Stack : ..., value ... Description : 0 must be an index into the local variable array of the current frame. 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 0 is set to value. Notes : The istore_0 instructions is the same as istore with an index of 0, except that the operand 0 is implicit. Name : istore_1 Opcode : 60(0x3c) Operation : Store int into local variable Format : istore_1 Operand Stack : ..., value ... Description : 1 must be an index into the local variable array of the current frame. 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 1 is set to value. Notes : The istore_1 instructions is the same as istore with an index of 1, except that the operand 1 is implicit. Name : istore_2 Opcode : 61(0x3d) Operation : Store int into local variable Format : istore_2 Operand Stack : ..., value ... Description : 2 must be an index into the local variable array of the current frame. 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 2 is set to value. Notes : The istore_2 instructions is the same as istore with an index of 2, except that the operand 2 is implicit. Name : istore_3 Opcode : 62(0x3e) Operation : Store int into local variable Format : istore_3 Operand Stack : ..., value ... Description : 3 must be an index into the local variable array of the current frame. 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 3 is set to value. Notes : The istore_3 instructions is the same as istore with an index of 3, except that the operand 3 is implicit. Name : lstore_0 Opcode : 63(0x3f) Operation : Store long into local variable Format : lstore_0 Operand Stack : ..., value ... Description : Both 0 and 1 must be indices into the local variable array of the current frame. 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 0 and 1 are set to value. Notes : The lstore_0 instructions is the same as lstore with an index of 0, except that the operand 0 is implicit. Name : lstore_1 Opcode : 64(0x40) Operation : Store long into local variable Format : lstore_1 Operand Stack : ..., value ... Description : Both 1 and 2 must be indices into the local variable array of the current frame. 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 1 and 2 are set to value. Notes : The lstore_1 instructions is the same as lstore with an index of 1, except that the operand 1 is implicit. Name : lstore_2 Opcode : 65(0x41) Operation : Store long into local variable Format : lstore_2 Operand Stack : ..., value ... Description : Both 2 and 3 must be indices into the local variable array of the current frame. 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 2 and 3 are set to value. Notes : The lstore_2 instructions is the same as lstore with an index of 2, except that the operand 2 is implicit. Name : lstore_3 Opcode : 66(0x42) Operation : Store long into local variable Format : lstore_3 Operand Stack : ..., value ... Description : Both 3 and 4 must be indices into the local variable array of the current frame. 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 3 and 4 are set to value. Notes : The lstore_3 instructions is the same as lstore with an index of 3, except that the operand 3 is implicit. Name : fstore_0 Opcode : 67(0x43) Operation : Store float into local variable Format : fstore_0 Operand Stack : ..., value ... Description : 0 must be an index into the local variable array of the current frame. The value on the top of the operand stack must be of type float. It is popped from the operand stack and undergoes value set conversion, resulting value1. The value of the local variable at 0 is set to value1. Notes : The fstore_0 is the same as fstore with an index of 0, except that the operand 0 is implicit. Name : fstore_1 Opcode : 68(0x44) Operation : Store float into local variable Format : fstore_1 Operand Stack : ..., value ... Description : 1 must be an index into the local variable array of the current frame. The value on the top of the operand stack must be of type float. It is popped from the operand stack and undergoes value set conversion, resulting value1. The value of the local variable at 1 is set to value1. Notes : The fstore_1 is the same as fstore with an index of 1, except that the operand 1 is implicit. Name : fstore_2 Opcode : 69(0x45) Operation : Store float into local variable Format : fstore_2 Operand Stack : ..., value ... Description : 2 must be an index into the local variable array of the current frame. The value on the top of the operand stack must be of type float. It is popped from the operand stack and undergoes value set conversion, resulting value1. The value of the local variable at 2 is set to value1. Notes : The fstore_2 is the same as fstore with an index of 2, except that the operand 2 is implicit. Name : fstore_3 Opcode : 70(0x46) Operation : Store float into local variable Format : fstore_3 Operand Stack : ..., value ... Description : 3 must be an index into the local variable array of the current frame. The value on the top of the operand stack must be of type float. It is popped from the operand stack and undergoes value set conversion, resulting value1. The value of the local variable at 3 is set to value1. Notes : The fstore_3 is the same as fstore with an index of 3, except that the operand 3 is implicit. Name : dstore_0 Opcode : 71(0x47) Operation : Store double into local variable Format : dstore_0 Operand Stack : ..., value ... Description : Both 0 and 1 must be indices into the local variable array of the current frame. The value on the top of the operand stack must be of type double. It is popped from the operand stack and undergoes value set conversion, resulting in value1. The local variables at 0 and 1 are set to value1. Notes : The dstore_0 instructions is the same as dstore with an index of 0, except that the operand 0 is implicit. Name : dstore_1 Opcode : 72(0x48) Operation : Store double into local variable Format : dstore_1 Operand Stack : ..., value ... Description : Both 1 and 2 must be indices into the local variable array of the current frame. The value on the top of the operand stack must be of type double. It is popped from the operand stack and undergoes value set conversion, resulting in new value. The local variables at 1 and 2 are set to new value. Notes : The dstore_1 instructions is the same as dstore with an index of 1, except that the operand 1 is implicit. Name : dstore_2 Opcode : 73(0x49) Operation : Store double into local variable Format : dstore_2 Operand Stack : ..., value ... Description : Both 2 and 3 must be indices into the local variable array of the current frame. The value on the top of the operand stack must be of type double. It is popped from the operand stack and undergoes value set conversion, resulting in new value. The local variables at 2 and 3 are set to new value. Notes : The dstore_2 instructions is the same as dstore with an index of 2, except that the operand 2 is implicit. Name : dstore_3 Opcode : 74(0x4a) Operation : Store double into local variable Format : dstore_3 Operand Stack : ..., value ... Description : Both 3 and 4 must be indices into the local variable array of the current frame. The value on the top of the operand stack must be of type double. It is popped from the operand stack and undergoes value set conversion, resulting in new value. The local variables at 3 and 4 are set to new value. Notes : The dstore_3 instructions is the same as dstore with an index of 3, except that the operand 3 is implicit. Name : astore_0 Opcode : 75(0x4b) Operation : Store reference into local variable Format : astore_0 Operand Stack : ..., objectref ... Description : 0 is the index into the local variable array of the current frame. 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 0 is set to objectref. Notes : The astore_ Name : astore_1 Opcode : 76(0x4c) Operation : Store reference into local variable Format : astore_1 Operand Stack : ..., objectref ... Description : 1 is the index into the local variable array of the current frame. 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 1 is set to objectref. Notes : The astore_ Name : astore_2 Opcode : 77(0x4d) Operation : Store reference into local variable Format : astore_2 Operand Stack : ..., objectref ... Description : 2 is the index into the local variable array of the current frame. 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 2 is set to objectref. Notes : The astore_ Name : astore_3 Opcode : 78(0x4e) Operation : Store reference into local variable Format : astore_3 Operand Stack : ..., objectref ... Description : 3 is the index into the local variable array of the current frame. 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 3 is set to objectref. Notes : The astore_ Name : iastore Opcode : 79(0x4f) Operation : Store into int array Format : iastore Operand Stack : ..., arrayref, index, value ... Description : 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. Runtime Exceptions : If arrayref is null, iastore throws a NullPointerException. Name : lastore Opcode : 80(0x50) Operation : Store into long array Format : lastore Operand Stack : ..., arrayref, index, value ... Description : 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. Runtime Exceptions : If arrayref is null, lastore throws a NullPointerException. Name : fastore Opcode : 81(0x51) Operation : Store into float array Format : fastore Operand Stack : ..., arrayref, index, value ... Description : 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 undergoes value set conversion, resulting in value, and value is stored as the component of the array indexed by index. Runtime Exceptions : If arrayref is null, fastore throws a NullPointerException. Name : dastore Opcode : 82(0x52) Operation : Store into double array Format : dastore Operand Stack : ..., arrayref, index, value ... Description : 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 undergoes value set conversion, resulting in value, which is stored as the component of the array indexed by index. Runtime Exceptions : If arrayref is null, dastore throws a NullPointerException. Name : aastore Opcode : 83(0x53) Operation : Store into reference array Format : aastore Operand Stack : ..., arrayref, index, value ... Description : 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. The reference value is stored as the component of the array at index. Runtime Exceptions : If arrayref is null, aastore throws a NullPointerException. Name : bastore Opcode : 84(0x54) Operation : Store into byte or boolean array Format : bastore Operand Stack : ..., arrayref, index, value ... Description : 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. If the components of the array are of type byte, the int value is truncated to a byte and stored as the component of the array indexed by index. If the components of the array are of type boolean, the int value is truncated to its low order bit then zero-extended to the storage size for components of boolean arrays used by the implementation. The result is stored as the component of the array indexed by index. Runtime Exceptions : If arrayref is null, bastore throws a NullPointerException. Name : castore Opcode : 85(0x55) Operation : Store into char array Format : castore Operand Stack : ..., arrayref, index, value ... Description : 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. Runtime Exceptions : If arrayref is null, castore throws a NullPointerException. Name : sastore Opcode : 86(0x56) Operation : Store into short array Format : sastore Operand Stack : ..., array, index, value ... Description : 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. Runtime Exceptions : If arrayref is null, sastore throws a NullPointerException. Name : pop Opcode : 87(0x57) Operation : Pop the top operand stack value Format : pop Operand Stack : ..., value ... Description : Pop the top value from the operand stack. Name : pop2 Opcode : 88(0x58) Operation : Pop the top one or two operand stack values Format : pop2 Operand Stack : Form 1: ..., value2, value1 ... where each of value1 and value2 is a value of a category 1 computational type. Form 2: ..., value ... where value is a value of a category 2 computational type. Description : Pop the top one or two values from the operand stack. Name : dup Opcode : 89(0x59) Operation : Duplicate the top operand stack value Format : dup Operand Stack : ..., value ..., value, value Description : Duplicate the top value on the operand stack and push the duplicated value onto the operand stack. Name : dup_x1 Opcode : 90(0x5a) Operation : Duplicate the top operand stack value and insert two values down Format : dup_x1 Operand Stack : ..., value2, value1 ..., value1, value2, value1 Description : Duplicate the top value on the operand stack and insert the duplicated value two values down in the operand stack. Name : dup_x2 Opcode : 91(0x5b) Operation : Duplicate the top operand stack value and insert two or three values down Format : dup_x2 Operand Stack : Form 1: ..., value3, value2, value1 ..., value1, value3, value2, value1 where value1, value2, and value3 are all values of a category 1 computational type. Form 2: ..., value2, value1 ..., value1, value2, value1 where value1 is a value of a category 1 computational type and value2 is a value of a category 2 computational type. Description : Duplicate the top value on the operand stack and insert the duplicated value two or three values down in the operand stack. Name : dup2 Opcode : 92(0x5c) Operation : Duplicate the top one or two operand stack values Format : dup2 Operand Stack : Form 1: ..., value2, value1 ..., value2, value1, value2, value1 where both value1 and value2 are values of a category 1 computational type. Form 2: ..., value ..., value, value where value is a value of a category 2 computational type. Description : 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. Name : dup2_x1 Opcode : 93(0x5d) Operation : 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 ..., value2, value1, value3, value2, value1 where value1, value2, and value3 are all values of a category 1 computational type. Form 2: ..., value2, value1 ..., value1, value2, value1 where value1 is a value of a category 2 computational type and value2 is a value of a category 1 computational type. Description : 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. Name : dup2_x2 Opcode : 94(0x5e) Operation : 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 ..., value2, value1, value4, value3, value2, value1 where value1, value2, value3, and value4 are all values of a category 1 computational type. Form 2: ..., value3, value2, value1 ..., value1, value3, value2, value1 where value1 is a value of a category 2 computational type and value2 and value3 are both values of a category 1 computational type. Form 3: ..., value3, value2, value1 ..., value2, value1, value3, value2, value1 where value1 and value2 are both values of a category 1 computational type and value3 is a value of a category 2 computational type. Form 4: ..., value2, value1 ..., value1, value2, value1 where value1 and value2 are both values of a category 2 computational type. Description : Duplicate the top one or two values on the operand stack and insert the duplicated values, in the original order, into the operand stack. Name : swap Opcode : 95(0x5f) Operation : Swap the top two operand stack values Format : swap Operand Stack : ..., value2, value1 ..., value1, value2 Description : Swap the top two values on the operand stack. Notes : The Java virtual machine does not provide an instruction implementing a swap on operands of category 2 computational types. Name : iadd Opcode : 96(0x60) Operation : Add int Format : iadd Operand Stack : ..., value1, value2 ..., result Description : 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. Name : ladd Opcode : 97(0x61) Operation : Add long Format : ladd Operand Stack : ..., value1, value2 ..., result Description : 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. Name : fadd Opcode : 98(0x62) Operation : Add float Format : fadd Operand Stack : ..., value1, value2 ..., result Description : Both value1 and value2 must be of type float. The values are popped from the operand stack and undergo value set conversion, resulting in value1 and value2. The float result is value1 + value2. The result is pushed onto the operand stack. Name : dadd Opcode : 99(0x63) Operation : Add double Format : dadd Operand Stack : ..., value1, value2 ..., result Description : Both value1 and value2 must be of type double. The values are popped from the operand stack and undergo value set conversion, resulting in value1 and value2. The double result is value1 + value2. The result is pushed onto the operand stack. Name : isub Opcode : 100(0x64) Operation : Subtract int Format : isub Operand Stack : ..., value1, value2 ..., result Description : 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. Name : lsub Opcode : 101(0x65) Operation : Subtract long Format : lsub Operand Stack : ..., value1, value2 ..., result Description : 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. Name : fsub Opcode : 102(0x66) Operation : Subtract float Format : fsub Operand Stack : ..., value1, value2 ..., result Description : Both value1 and value2 must be of type float. The values are popped from the operand stack and undergo value set conversion, resulting in value1 and value2. The float result is value1 - value2. The result is pushed onto the operand stack. Name : dsub Opcode : 103(0x67) Operation : Subtract double Format : dsub Operand Stack : ..., value1, value2 ..., result Description : Both value1 and value2 must be of type double. The values are popped from the operand stack and undergo value set conversion, resulting in value1 and value2. The double result is value1 - value2. The result is pushed onto the operand stack. Name : imul Opcode : 104(0x68) Operation : Multiply int Format : imul Operand Stack : ..., value1, value2 ..., result Description : 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. Name : lmul Opcode : 105(0x69) Operation : Multiply long Format : lmul Operand Stack : ..., value1, value2 ..., result Description : 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. Name : fmul Opcode : 106(0x6a) Operation : Multiply float Format : fmul Operand Stack : ..., value1, value2 ..., result Description : Both value1 and value2 must be of type float. The values are popped from the operand stack and undergo value set conversion, resulting in value1 and value2. The float result is value1 * value2. The result is pushed onto the operand stack. Name : dmul Opcode : 107(0x6b) Operation : Multiply double Format : dmul Operand Stack : ..., value1, value2 ..., result Description : Both value1 and value2 must be of type double. The values are popped from the operand stack and undergo value set conversion, resulting in value1 and value2. The double result is value1 * value2. The result is pushed onto the operand stack. Name : idiv Opcode : 108(0x6c) Operation : Divide int Format : idiv Operand Stack : ..., value1, value2 ..., result Description : 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. The result is pushed onto the operand stack. Runtime Exceptions : If the value of the divisor in an int division is 0, idiv throws an ArithmeticException. Name : ldiv Opcode : 109(0x6d) Operation : Divide long Format : ldiv Operand Stack : ..., value1, value2 ..., result Description : 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. Runtime Exceptions : If the value of the divisor in a long division is 0, ldiv throws an ArithmeticException. Name : fdiv Opcode : 110(0x6e) Operation : Divide float Format : fdiv Operand Stack : ..., value1, value2 ..., result Description : Both value1 and value2 must be of type float. The values are popped from the operand stack and undergo value set conversion, resulting in value1 and value2. The float result is value1 / value2. The result is pushed onto the operand stack. Name : ddiv Opcode : 111(0x6f) Operation : Divide double Format : ddiv Operand Stack : ..., value1, value2 ..., result Description : Both value1 and value2 must be of type double. The values are popped from the operand stack and undergo value set conversion, resulting in value1 and value2. The double result is value1 / value2. The result is pushed onto the operand stack. Name : irem Opcode : 112(0x70) Operation : Remainder int Format : irem Operand Stack : ..., value1, value2 ..., result Description : 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. Runtime Exceptions : If the value of the divisor for an int remainder operator is 0, irem throws an ArithmeticException. Name : lrem Opcode : 113(0x71) Operation : Remainder long Format : lrem Operand Stack : ..., value1, value2 ..., result Description : 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. Runtime Exceptions : If the value of the divisor for a long remainder operator is 0, lrem throws an ArithmeticException. Name : frem Opcode : 114(0x72) Operation : Remainder float Format : frem Operand Stack : ..., value1, value2 ..., result Description : Both value1 and value2 must be of type float. The values are popped from the operand stack and undergo value set conversion, resulting in value1 and value2. The result is calculated and pushed onto the operand stack as a float. Notes : The IEEE 754 remainder operation may be computed by the library routine Math.IEEEremainder. Name : drem Opcode : 115(0x73) Operation : Remainder double Format : drem Operand Stack : ..., value1, value2 ..., result Description : Both value1 and value2 must be of type double. The values are popped from the operand stack and undergo value set conversion, resulting in value1 and value2. The result is calculated and pushed onto the operand stack as a double. Notes : The IEEE 754 remainder operation may be computed by the library routine Math.IEEEremainder. Name : ineg Opcode : 116(0x74) Operation : Negate int Format : ineg Operand Stack : ..., value ..., result Description : 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. Name : lneg Opcode : 117(0x75) Operation : Negate long Format : lneg Operand Stack : ..., value ..., result Description : 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. Name : fneg Opcode : 118(0x76) Operation : Negate float Format : fneg Operand Stack : ..., value ..., result Description : The value must be of type float. It is popped from the operand stack and undergoes value set conversion, resulting in value. The float result is the arithmetic negation of value. This result is pushed onto the operand stack. Name : dneg Opcode : 119(0x77) Operation : Negate double Format : dneg Operand Stack : ..., value ..., result Description : The value must be of type double. It is popped from the operand stack and undergoes value set conversion, resulting in value. The double result is the arithmetic negation of value. The result is pushed onto the operand stack. Name : ishl Opcode : 120(0x78) Operation : Shift left int Format : ishl Operand Stack : ..., value1, value2 ..., result Description : 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. Notes : This is equivalent (even if overflow occurs) to multiplication by 2 to the power s. The shift distance actually used is always in the range 0 to 31, inclusive, as if value2 were subjected to a bitwise logical AND with the mask value 0x1f. Name : lshl Opcode : 121(0x79) Operation : Shift left Format : lshl Operand Stack : ..., value1, value2 ..., result Description : 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. Notes : This is equivalent (even if overflow occurs) to multiplication by 2 to the power s. The shift distance actually used is therefore always in the range 0 to 63, inclusive, as if value2 were subjected to a bitwise logical AND with the mask value 0x3f. Name : ishr Opcode : 122(0x7a) Operation : Arithmetic shift right int Format : ishr Operand Stack : ..., value1, value2 ..., result Description : 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. Notes : The resulting value is , where s is value2 & 0x1f. For nonnegative value1, this is equivalent to truncating int division by 2 to the power s. The shift distance actually used is always in the range 0 to 31, inclusive, as if value2 were subjected to a bitwise logical AND with the mask value 0x1f. Name : lshr Opcode : 123(0x7b) Operation : Arithmetic shift right long Format : lshr Operand Stack : ..., value1, value2 ..., result Description : 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. Notes : The resulting value is , where s is value2 & 0x3f. For nonnegative value1, this is equivalent to truncating long division by 2 to the power s. The shift distance actually used is therefore always in the range 0 to 63, inclusive, as if value2 were subjected to a bitwise logical AND with the mask value 0x3f. Name : iushr Opcode : 124(0x7c) Operation : Logical shift right int Format : iushr Operand Stack : ..., value1, value2 ..., result Description : 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. Notes : If value1 is positive and s is value2 & 0x1f, the result is the same as that of value1 >> s; if value1 is negative, the result is equal to the value of the expression (value1 >> s) + (2 << ~s). The addition of the (2 << ~s) term cancels out the propagated sign bit. The shift distance actually used is always in the range 0 to 31, inclusive. Name : lushr Opcode : 125(0x7d) Operation : Logical shift right long Format : lushr Operand Stack : ..., value1, value2 ..., result Description : 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 (with zero extension) by the amount indicated by the low 6 bits of value2. The result is pushed onto the operand stack. Notes : If value1 is positive and s is value2 & 0x3f, the result is the same as that of value1 >> s; if value1 is negative, the result is equal to the value of the expression (value1 >> s) + (2L << ~s). The addition of the (2L << ~s) term cancels out the propagated sign bit. The shift distance actually used is always in the range 0 to 63, inclusive. Name : iand Opcode : 126(0x7e) Operation : Boolean AND int Format : iand Operand Stack : ..., value1, value2 ..., result Description : 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. Name : land Opcode : 127(0x7f) Operation : Boolean AND long Format : land Operand Stack : ..., value1, value2 ..., result Description : 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. Name : ior Opcode : 128(0x80) Operation : Boolean OR int Format : ior Operand Stack : ..., value1, value2 ..., result Description : 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. Name : lor Opcode : 129(0x81) Operation : Boolean OR long Format : lor Operand Stack : ..., value1, value2 ..., result Description : 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. Name : ixor Opcode : 130(0x82) Operation : Boolean XOR int Format : ixor Operand Stack : ..., value1, value2 ..., result Description : 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. Name : lxor Opcode : 131(0x83) Operation : Boolean XOR long Format : lxor Operand Stack : ..., value1, value2 ..., result Description : 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. Name : iinc Opcode : 132(0x84) Operation : Increment local variable by constant Format : iinc Operand Stack : No change Description : The index is an unsigned byte that must be an index into the local variable array of the current frame. 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. Notes : The iinc opcode can be used in conjunction with the wide instruction to access a local variable using a two-byte unsigned index and to increment it by a two-byte immediate value. Name : i2l Opcode : 133(0x85) Operation : Convert int to long Format : i2l Operand Stack : ..., value ..., result Description : 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. That result is pushed onto the operand stack. Notes : The i2l instruction performs a widening primitive conversion. Because all values of type int are exactly representable by type long, the conversion is exact. Name : i2f Opcode : 134(0x86) Operation : Convert int to float Format : i2f Operand Stack : ..., value ..., result Description : The value on the top of the operand stack must be of type int. It is popped from the operand stack and converted to the float result using IEEE 754 round to nearest mode. The result is pushed onto the operand stack. Notes : The i2f instruction performs a widening primitive conversion, but may result in a loss of precision because values of type float have only 24 significand bits. Name : i2d Opcode : 135(0x87) Operation : Convert int to double Format : i2d Operand Stack : ..., value ..., result Description : 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. Notes : The i2d instruction performs a widening primitive conversion. Because all values of type int are exactly representable by type double, the conversion is exact. Name : l2i Opcode : 136(0x88) Operation : Convert long to int Format : l2i Operand Stack : ..., value ..., result Description : 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. Notes : The l2i instruction performs a narrowing primitive conversion. It may lose information about the overall magnitude of value. The result may also not have the same sign as value. Name : l2f Opcode : 137(0x89) Operation : Convert long to float Format : l2f Operand Stack : ..., value ..., result Description : 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 IEEE 754 round to nearest mode. The result is pushed onto the operand stack. Notes : The l2f instruction performs a widening primitive conversion that may lose precision because values of type float have only 24 significand bits. Name : l2d Opcode : 138(0x8a) Operation : Convert long to double Format : l2d Operand Stack : ..., value ..., result Description : 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 IEEE 754 round to nearest mode. The result is pushed onto the operand stack. Notes : The l2d instruction performs a widening primitive conversion that may lose precision because values of type double have only 53 significand bits. Name : f2i Opcode : 139(0x8b) Operation : Convert float to int Format : f2i Operand Stack : ..., value ..., result Description : The value on the top of the operand stack must be of type float. It is popped from the operand stack and undergoes value set conversion, resulting in value. Then value is converted to an int result. This result is pushed onto the operand stack: Notes : The f2i instruction performs a narrowing primitive conversion. It may lose information about the overall magnitude of value and may also lose precision. Name : f2l Opcode : 140(0x8c) Operation : Convert float to long Format : f2l Operand Stack : ..., value ..., result Description : The value on the top of the operand stack must be of type float. It is popped from the operand stack and undergoes value set conversion, resulting in value. Then value is converted to a long result. This result is pushed onto the operand stack: Notes : The f2l instruction performs a narrowing primitive conversion. It may lose information about the overall magnitude of value and may also lose precision. Name : f2d Opcode : 141(0x8d) Operation : Convert float to double Format : f2d Operand Stack : ..., value ..., result Description : The value on the top of the operand stack must be of type float. It is popped from the operand stack and undergoes value set conversion, resulting in value. Then value is converted to a double result. This result is pushed onto the operand stack. Notes : Where an f2d instruction is FP-strict it performs a widening primitive conversion. Because all values of the float value set are exactly representable by values of the double value set, such a conversion is exact. Name : d2i Opcode : 142(0x8e) Operation : Convert double to int Format : d2i Operand Stack : ..., value ..., result Description : The value on the top of the operand stack must be of type double. It is popped from the operand stack and undergoes value set conversion resulting in value. Then value is converted to an int. The result is pushed onto the operand stack: Notes : The d2i instruction performs a narrowing primitive conversion. It may lose information about the overall magnitude of value and may also lose precision. Name : d2l Opcode : 143(0x8f) Operation : Convert double to long Format : d2l Operand Stack : ..., value ..., result Description : The value on the top of the operand stack must be of type double. It is popped from the operand stack and undergoes value set conversion resulting in value. Then value is converted to a long. The result is pushed onto the operand stack: Notes : The d2l instruction performs a narrowing primitive conversion. It may lose information about the overall magnitude of value and may also lose precision. Name : d2f Opcode : 144(0x90) Operation : Convert double to float Format : d2f Operand Stack : ..., value ..., result Description : The value on the top of the operand stack must be of type double. It is popped from the operand stack and undergoes value set conversion resulting in value. Then value is converted to a float result using IEEE 754 round to nearest mode. The result is pushed onto the operand stack. Notes : The d2f instruction performs a narrowing primitive conversion. It may lose information about the overall magnitude of value and may also lose precision. Name : i2b Opcode : 145(0x91) Operation : Convert int to byte Format : i2b Operand Stack : ..., value ..., result Description : 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. That result is pushed onto the operand stack. Notes : The i2b instruction performs a narrowing primitive conversion. It may lose information about the overall magnitude of value. The result may also not have the same sign as value. Name : i2c Opcode : 146(0x92) Operation : Convert int to char Format : i2c Operand Stack : ..., value ..., result Description : 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. That result is pushed onto the operand stack. Notes : The i2c instruction performs a narrowing primitive conversion. It may lose information about the overall magnitude of value. The result (which is always positive) may also not have the same sign as value. Name : i2s Opcode : 147(0x93) Operation : Convert int to short Format : i2s Operand Stack : ..., value ..., result Description : 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. That result is pushed onto the operand stack. Notes : The i2s instruction performs a narrowing primitive conversion. It may lose information about the overall magnitude of value. The result may also not have the same sign as value. Name : lcmp Opcode : 148(0x94) Operation : Compare long Format : lcmp Operand Stack : ..., value1, value2 ..., result Description : 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. Name : fcmpl Opcode : 149(0x95) Operation : Compare float Format : fcmp Operand Stack : ..., value1, value2 ..., result Description : Both value1 and value2 must be of type float. The values are popped from the operand stack and undergo value set conversion, resulting in value1 and value2. A floating-point comparison is performed: Notes : The fcmpg and fcmpl instructions differ only in their treatment of a comparison involving NaN. NaN is unordered, so any float comparison fails if either or both of its operands are NaN. With both fcmpg and fcmpl available, any float comparison may be compiled to push the same result onto the operand stack whether the comparison fails on non-NaN values or fails because it encountered a NaN. Name : fcmpg Opcode : 150(0x96) Operation : Compare float Format : fcmpg Operand Stack : ..., value1, value2 ..., result Description : Both value1 and value2 must be of type float. The values are popped from the operand stack and undergo value set conversion, resulting in value1 and value2. A floating-point comparison is performed: Notes : The fcmpg and fcmpl instructions differ only in their treatment of a comparison involving NaN. NaN is unordered, so any float comparison fails if either or both of its operands are NaN. With both fcmpg and fcmpl available, any float comparison may be compiled to push the same result onto the operand stack whether the comparison fails on non-NaN values or fails because it encountered a NaN. Name : dcmpl Opcode : 151(0x97) Operation : Compare double Format : dcmpl Operand Stack : ..., value1, value2 ..., result Description : Both value1 and value2 must be of type double. The values are popped from the operand stack and undergo value set conversion, resulting in value1 and value2. A floating-point comparison is performed: Notes : The dcmpg and dcmpl instructions differ only in their treatment of a comparison involving NaN. NaN is unordered, so any double comparison fails if either or both of its operands are NaN. With both dcmpg and dcmpl available, any double comparison may be compiled to push the same result onto the operand stack whether the comparison fails on non-NaN values or fails because it encountered a NaN. Name : dcmpg Opcode : 152(0x98) Operation : Compare double Format : dcmpg Operand Stack : ..., value1, value2 ..., result Description : Both value1 and value2 must be of type double. The values are popped from the operand stack and undergo value set conversion, resulting in value1 and value2. A floating-point comparison is performed: Notes : The dcmpg and dcmpl instructions differ only in their treatment of a comparison involving NaN. NaN is unordered, so any double comparison fails if either or both of its operands are NaN. With both dcmpg and dcmpl available, any double comparison may be compiled to push the same result onto the operand stack whether the comparison fails on non-NaN values or fails because it encountered a NaN. Name : ifeq Opcode : 153(0x99) Operation : Branch if int comparison with zero succeeds Format : ifeq Operand Stack : ..., value ... Description : 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: Name : ifne Opcode : 154(0x9a) Operation : Branch if int comparison with zero succeeds Format : ifne Operand Stack : ..., value ... Description : 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: Name : iflt Opcode : 155(0x9b) Operation : Branch if int comparison with zero succeeds Format : iflt Operand Stack : ..., value ... Description : 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: Name : ifge Opcode : 156(0x9c) Operation : Branch if int comparison with zero succeeds Format : ifge Operand Stack : ..., value ... Description : 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: Name : ifgt Opcode : 157(0x9d) Operation : Branch if int comparison with zero succeeds Format : ifgt Operand Stack : ..., value ... Description : 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: Name : ifle Opcode : 158(0x9e) Operation : Branch if int comparison with zero succeeds Format : ifle Operand Stack : ..., value ... Description : 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: Name : if_icmpeq Opcode : 159(0x9f) Operation : Branch if int comparison succeeds Format : if_icmpne Operand Stack : ..., value1, value2 ... Description : 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: Name : if_icmpne Opcode : 160(0xa0) Operation : Branch if int comparison succeeds Format : if_icmpne Operand Stack : ..., value1, value2 ... Description : 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: Name : if_icmplt Opcode : 161(0xa1) Operation : Branch if int comparison succeeds Format : if_icmplt Operand Stack : ..., value1, value2 ... Description : 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: Name : if_icmpge Opcode : 162(0xa2) Operation : Branch if int comparison succeeds Format : if_icmpge Operand Stack : ..., value1, value2 ... Description : 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: Name : if_icmpgt Opcode : 163(0xa3) Operation : Branch if int comparison succeeds Format : if_icmpgt> Operand Stack : ..., value1, value2 ... Description : 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: Name : if_icmple Opcode : 164(0xa4) Operation : Branch if int comparison succeeds Format : if_icmple Operand Stack : ..., value1, value2 ... Description : 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: Name : if_acmpeq Opcode : 165(0xa5) Operation : Branch if reference comparison succeeds Format : if_acmpeq Operand Stack : ..., value1, value2 ... Description : 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: Name : if_acmpne Opcode : 166(0xa6) Operation : Branch if reference comparison succeeds Format : if_acmpne Operand Stack : ..., value1, value2 ... Description : 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: Name : goto Opcode : 167(0xa7) Operation : Branch always Format : goto Operand Stack : No change Description : 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. Name : jsr Opcode : 168(0xa8) Operation : Jump subroutine Format : jsr Operand Stack : ... ..., address Description : 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. Notes : The jsr instruction is used with the ret instruction in the implementation of the finally clauses of the Java programming language. Note that jsr pushes the address onto the operand stack and ret gets it out of a local variable. This asymmetry is intentional. Name : ret Opcode : 169(0xa9) Operation : Return from subroutine Format : ret Operand Stack : No change Description : The index is an unsigned byte between 0 and 255, inclusive. The local variable at index in the current frame must contain a value of type returnAddress. The contents of the local variable are written into the Java virtual machines pc register, and execution continues there. Notes : The ret instruction is used with jsr or jsr_w instructions in the implementation of the finally clauses of the Java programming language. Note that jsr pushes the address onto the operand stack and ret gets it out of a local variable. This asymmetry is intentional. Name : tableswitch Opcode : 170(0xaa) Operation : Access jump table by index and jump Format : tableswitch Operand Stack : ..., index ... Description : A tableswitch is a variable-length instruction. Immediately after the tableswitch opcode, between 0 and 3 null bytes (zeroed bytes, not the null object) are inserted as padding. The number of null bytes is chosen so that the following byte begins at an address that is a multiple of 4 bytes from the start of the current method (the opcode of its first instruction). Immediately after the padding follow bytes constituting three signed 32-bit values: default, low, and high. Immediately following those bytes 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. Notes : The alignment required of the 4-byte operands of the tableswitch instruction guarantees 4-byte alignment of those operands if and only if the method that contains the tableswitch starts on a 4-byte boundary. Name : lookupswitch Opcode : 171(0xab) Operation : Access jump table by key match and jump Format : lookupswitch Operand Stack : ..., key ... Description : A lookupswitch is a variable-length instruction. Immediately after the lookupswitch opcode, between zero and three null bytes (zeroed bytes, not the null object) are inserted as padding. The number of null bytes is chosen so that the 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. Notes : The alignment required of the 4-byte operands of the lookupswitch instruction guarantees 4-byte alignment of those operands if and only if the method that contains the lookupswitch is positioned on a 4-byte boundary. Name : ireturn Opcode : 172(0xac) Operation : Return int from method Format : ireturn Operand Stack : ..., value [empty] Description : The current method must have return type boolean, byte, short, char, or int. The value must be of type int. If the current method is a synchronized method, the monitor acquired or reentered on invocation of the method is released or exited (respectively) as if by execution of a monitorexit instruction. If no exception is thrown, value is popped from the operand stack of the current frame 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. Runtime Exceptions : If the current method is a synchronized method and the current thread is not the owner of the monitor acquired or reentered on invocation of the method, ireturn throws an IllegalMonitorStateException. This can happen, for example, if a synchronized method contains a monitorexit instruction, but no monitorenter instruction, on the object on which the method is synchronized. Name : lreturn Opcode : 173(0xad) Operation : Return long from method Format : lreturn Operand Stack : ..., value [empty] Description : 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 acquired or reentered on invocation of the method is released or exited (respectively) as if by execution of a monitorexit instruction. If no exception is thrown, value is popped from the operand stack of the current frame 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. Runtime Exceptions : If the current method is a synchronized method and the current thread is not the owner of the monitor acquired or reentered on invocation of the method, lreturn throws an IllegalMonitorStateException. This can happen, for example, if a synchronized method contains a monitorexit instruction, but no monitorenter instruction, on the object on which the method is synchronized. Name : freturn Opcode : 174(0xae) Operation : Return float from method Format : freturn Operand Stack : ..., value [empty] Description : 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 acquired or reentered on invocation of the method is released or exited (respectively) as if by execution of a monitorexit instruction. If no exception is thrown, value is popped from the operand stack of the current frame and undergoes value set conversion, resulting in value. The value is pushed onto the operand stack of the frame of the invoker. Any other values on the operand stack of the current method are discarded. Runtime Exceptions : If the current method is a synchronized method and the current thread is not the owner of the monitor acquired or reentered on invocation of the method, freturn throws an IllegalMonitorStateException. This can happen, for example, if a synchronized method contains a monitorexit instruction, but no monitorenter instruction, on the object on which the method is synchronized. Name : dreturn Opcode : 175(0xaf) Operation : Return double from method Format : dreturn Operand Stack : ..., value [empty] Description : 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 acquired or reentered on invocation of the method is released or exited (respectively) as if by execution of a monitorexit instruction. If no exception is thrown, value is popped from the operand stack of the current frame and undergoes value set conversion, resulting in value. The value is pushed onto the operand stack of the frame of the invoker. Any other values on the operand stack of the current method are discarded. Runtime Exceptions : If the current method is a synchronized method and the current thread is not the owner of the monitor acquired or reentered on invocation of the method, dreturn throws an IllegalMonitorStateException. This can happen, for example, if a synchronized method contains a monitorexit instruction, but no monitorenter instruction, on the object on which the method is synchronized. Name : areturn Opcode : 176(0xb0) Operation : Return reference from method Format : areturn Operand Stack : ..., objectref [empty] Description : The objectref must be of type reference and must refer to an object of a type that is assignment compatible with the type represented by the return descriptor of the current method. If the current method is a synchronized method, the monitor acquired or reentered on invocation of the method is released or exited (respectively) as if by execution of a monitorexit instruction. If no exception is thrown, objectref is popped from the operand stack of the current frame 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. Runtime Exceptions : If the current method is a synchronized method and the current thread is not the owner of the monitor acquired or reentered on invocation of the method, areturn throws an IllegalMonitorStateException. This can happen, for example, if a synchronized method contains a monitorexit instruction, but no monitorenter instruction, on the object on which the method is synchronized. Name : return Opcode : 177(0xb1) Operation : Return void from method Format : return Operand Stack : ... [empty] Description : The current method must have return type void. If the current method is a synchronized method, the monitor acquired or reentered on invocation of the method is released or exited (respectively) as if by execution of a monitorexit instruction. If no exception is thrown, any values on the operand stack of the current frame are discarded. Runtime Exceptions : If the current method is a synchronized method and the current thread is not the owner of the monitor acquired or reentered on invocation of the method, return throws an IllegalMonitorStateException. This can happen, for example, if a synchronized method contains a monitorexit instruction, but no monitorenter instruction, on the object on which the method is synchronized. Name : getstatic Opcode : 178(0xb2) Operation : Get static field from class Format : getstatic Operand Stack : ..., ..., value Description : The unsigned indexbyte1 and indexbyte2 are used to construct an index into the runtime constant pool of the current class, where the value of the index is (indexbyte1 << 8) | indexbyte2. The runtime constant pool item at that index must be a symbolic reference to a field, 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. Linking Exceptions : During resolution of the symbolic reference to the class or interface field, any of the exceptions pertaining to field resolution documented in Section 5.4.3.2 of Java Virtual Machine Specification can be thrown. Runtime Exceptions : Otherwise, if execution of this getstatic instruction causes initialization of the referenced class or interface, getstatic may throw an Error as detailed in Section 2.17.5 of Java Virtual Machine Specification. Name : putstatic Opcode : 179(0xb3) Operation : Set static field in class Format : putstatic Operand Stack : ..., value ... Description : The unsigned indexbyte1 and indexbyte2 are used to construct an index into the runtime constant pool of the current class, where the value of the index is (indexbyte1 << 8) | indexbyte2. The runtime constant pool item at that index must be a symbolic reference to a field, 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. Linking Exceptions : During resolution of the symbolic reference to the class or interface field, any of the exceptions pertaining to field resolution documented in Section 5.4.3.2 of Java Virtual Machine Specification can be thrown. Runtime Exceptions : Otherwise, if execution of this putstatic instruction causes initialization of the referenced class or interface, putstatic may throw an Error as detailed in Section 2.17.5 of Java Virtual Machine Specification. Notes : A putstatic instruction may be used only to set the value of an interface field on the initialization of that field. Interface fields may be assigned to only once, on execution of an interface variable initialization expression when the interface is initialized. Name : getfield Opcode : 180(0xb4) Operation : Fetch field from object Format : getfield Operand Stack : ..., objectref ..., value Description : 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 runtime constant pool of the current class, where the value of the index is (indexbyte1 << 8) | indexbyte2. The runtime constant pool item at that index must be a symbolic reference to a field, 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. The value of the referenced field in objectref is fetched and pushed onto the operand stack. Linking Exceptions : During resolution of the symbolic reference to the field, any of the errors pertaining to field resolution documented in Section 5.4.3.2 of Java Virtual Machine Specification can be thrown. Runtime Exceptions : Otherwise, if objectref is null, the getfield instruction throws a NullPointerException. Notes : The getfield instruction cannot be used to access the length field of an array. The arraylength instruction is used instead. Name : putfield Opcode : 181(0xb5) Operation : Set field in object Format : putfield Operand Stack : ..., objectref, value ... Description : The unsigned indexbyte1 and indexbyte2 are used to construct an index into the runtime constant pool of the current class, where the value of the index is (indexbyte1 << 8) | indexbyte2. The runtime constant pool item at that index must be a symbolic reference to a field, 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 class of objectref must not be an array. If the field is protected, and it is either a member of the current class or a member of a superclass of the current class, then the class of objectref must be either the current class or a subclass of the current class. Linking Exceptions : During resolution of the symbolic reference to the field, any of the exceptions pertaining to field resolution documented in Section 5.4.3.2 of Java Virtual Machine Specification can be thrown. Runtime Exceptions : Otherwise, if objectref is null, the putfield instruction throws a NullPointerException. Name : invokevirtual Opcode : 182(0xb6) Operation : Invoke instance method; dispatch based on class Format : invokevirtual Operand Stack : ..., objectref, [arg1, [arg2 ...]] ... Description : The unsigned indexbyte1 and indexbyte2 are used to construct an index into the runtime constant pool of the current class, where the value of the index is (indexbyte1 << 8) | indexbyte2. The runtime constant pool item at that index must be a symbolic reference to a method, which gives the name and descriptor 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. The method must not be an instance initialization method or the class or interface initialization method. Finally, if the resolved method is protected, and it is either a member of the current class or a member of a superclass of the current class, then the class of objectref must be either the current class or a subclass of the current class. Linking Exceptions : During resolution of the symbolic reference to the method, any of the exceptions pertaining to method resolution documented in Section 5.4.3.3 of Java Virtual Machine Specification can be thrown. Runtime Exceptions : Otherwise, if objectref is null, the invokevirtual instruction throws a NullPointerException. Name : invokespecial Opcode : 183(0xb7) Operation : Invoke instance method; special handling for superclass, private, and instance initialization method invocations Format : invokespecial Operand Stack : ..., objectref, [arg1, [arg2 ...]] ... Description : The unsigned indexbyte1 and indexbyte2 are used to construct an index into the runtime constant pool of the current class, where the value of the index is (indexbyte1 << 8) | indexbyte2. The runtime constant pool item at that index must be a symbolic reference to a method, which gives the name and descriptor 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. Finally, if the resolved method is protected, and it is either a member of the current class or a member of a superclass of the current class, then the class of objectref must be either the current class or a subclass of the current class. Linking Exceptions : During resolution of the symbolic reference to the method, any of the exceptions pertaining to method resolution documented in Section 5.4.3.3 of Java Virtual Machine Specification can be thrown. Runtime Exceptions : Otherwise, if objectref is null, the invokespecial instruction throws a NullPointerException. Name : invokestatic Opcode : 184(0xb8) Operation : Invoke a class (static) method Format : invokestatic Operand Stack : ..., [arg1, [arg2 ...]] ... Description : The unsigned indexbyte1 and indexbyte2 are used to construct an index into the runtime constant pool of the current class, where the value of the index is (indexbyte1 << 8) | indexbyte2. The runtime constant pool item at that index must be a symbolic reference to a method, which gives the name and descriptor 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. The method must not be the class or interface initialization method. It must be static, and therefore cannot be abstract. Linking Exceptions : During resolution of the symbolic reference to the method, any of the exceptions pertaining to method resolution documented in Section 5.4.3.3 of Java Virtual Machine Specification can be thrown. Runtime Exceptions : Otherwise, if execution of this invokestatic instruction causes initialization of the referenced class, invokestatic may throw an Error as detailed in Section 2.17.5 of Java Virtual Machine Specification. Name : invokeinterface Opcode : 185(0xb9) Operation : Invoke interface method Format : invokeinterface Operand Stack : ..., objectref, [arg1, [arg2 ...]] ... Description : The unsigned indexbyte1 and indexbyte2 are used to construct an index into the runtime constant pool of the current class, where the value of the index is (indexbyte1 << 8) | indexbyte2. The runtime constant pool item at that index must be a symbolic reference to an interface method, which gives the name and descriptor 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. The interface method must not be an instance initialization method or the class or interface initialization method. Linking Exceptions : During resolution of the symbolic reference to the interface method, any of the exceptions documented in Section 5.4.3.4 of Java Virtual Machine Specification can be thrown. Runtime Exceptions : Otherwise, if objectref is null, the invokeinterface instruction throws a NullPointerException. Name : new Opcode : 187(0xbb) Operation : Create new object Format : new Operand Stack : ... ..., objectref Description : The unsigned indexbyte1 and indexbyte2 are used to construct an index into the runtime constant pool of the current class, where the value of the index is (indexbyte1 << 8) | indexbyte2. The runtime constant pool item at the index must be a symbolic reference to a class, array, or interface type. The named class, array, or interface type is resolved and should result in a class type (it should not result in an array or interface 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. The objectref, a reference to the instance, is pushed onto the operand stack. Linking Exceptions : During resolution of the symbolic reference to the class, array, or interface type, any of the exceptions documented in Section 5.4.3.1 of Java Virtual Machine Specification can be thrown. Runtime Exceptions : Otherwise, if execution of this new instruction causes initialization of the referenced class, new may throw an Error as detailed in Section 2.17.5 of Java Virtual Machine Specification. Notes : The new instruction does not completely create a new instance; instance creation is not completed until an instance initialization method has been invoked on the uninitialized instance. Name : newarray Opcode : 188(0xbc) Operation : Create new array Format : newarray Operand Stack : ..., count ..., arrayref Description : 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. Runtime Exceptions : If count is less than zero, newarray throws a NegativeArraySizeException. Notes : In Suns implementation of the Java virtual machine, arrays of type boolean (atype is T_BOOLEAN) are stored as arrays of 8-bit values and are manipulated using the baload and bastore instructions, instructions that also access arrays of type byte. Other implementations may implement packed boolean arrays; the baload and bastore instructions must still be used to access those arrays. Name : anewarray Opcode : 189(0xbd) Operation : Create new array of reference Format : anewarray Operand Stack : ..., count ..., arrayref Description : 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 runtime constant pool of the current class, where the value of the index is (indexbyte1 << 8) | indexbyte2. The runtime constant pool item at that index must be a symbolic reference to a class, array, or interface type. The named class, array, or interface type is resolved. 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. Linking Exceptions : During resolution of the symbolic reference to the class, array, or interface type, any of the exceptions documented in Section 5.4.3.1 of Java Virtual Machine Specification can be thrown. Runtime Exceptions : Otherwise, if count is less than zero, the anewarray instruction throws a NegativeArraySizeException. Notes : The anewarray instruction is used to create a single dimension of an array of object references or part of a multidimensional array. Name : arraylength Opcode : 190(0xbe) Operation : Get length of array Format : arraylength Operand Stack : ..., arrayref ..., length Description : 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. Runtime Exceptions : If the arrayref is null, the arraylength instruction throws a NullPointerException. Name : athrow Opcode : 191(0xbf) Operation : Throw exception or error Format : athrow Operand Stack : ..., objectref objectref Description : 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 for the first exception handler that matches the class of objectref, as given by the algorithm in Section 3.10 of Java Virtual Machine Specification. Runtime Exceptions : If objectref is null, athrow throws a NullPointerException instead of objectref. Name : checkcast Opcode : 192(0xc0) Operation : Check whether object is of given type Format : checkcast Operand Stack : ..., objectref ..., objectref Description : The objectref must be of type reference. The unsigned indexbyte1 and indexbyte2 are used to construct an index into the runtime constant pool of the current class, where the value of the index is (indexbyte1 << 8) | indexbyte2. The runtime constant pool item at the index must be a symbolic reference to a class, array, or interface type. The named class, array, or interface type is resolved. Linking Exceptions : During resolution of the symbolic reference to the class, array, or interface type, any of the exceptions documented in Section 5.4.3.1 of Java Virtual Machine Specification can be thrown. Runtime Exceptions : Otherwise, if objectref cannot be cast to the resolved class, array, or interface type, the checkcast instruction throws a ClassCastException. Notes : The checkcast instruction is very similar to the instanceof instruction. It differs in its treatment of null, its behavior when its test fails (checkcast throws an exception, instanceof pushes a result code), and its effect on the operand stack. Name : instanceof Opcode : 193(0xc1) Operation : Determine if object is of given type Format : instanceof Operand Stack : ..., objectref ..., result Description : 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 runtime constant pool of the current class, where the value of the index is (indexbyte1 << 8) | indexbyte2. The runtime constant pool item at the index must be a symbolic reference to a class, array, or interface type. The named class, array, or interface type is resolved. Linking Exceptions : During resolution of symbolic reference to the class, array, or interface type, any of the exceptions documented in Section 5.4.3.1 of Java Virtual Machine Specification can be thrown. Notes : The instanceof instruction is very similar to the checkcast instruction. It differs in its treatment of null, its behavior when its test fails (checkcast throws an exception, instanceof pushes a result code), and its effect on the operand stack. Name : monitorenter Opcode : 194(0xc2) Operation : Enter monitor for object Format : monitorenter Operand Stack : ..., objectref ... Description : The objectref must be of type reference. Runtime Exceptions : If objectref is null, monitorenter throws a NullPointerException. Notes : For detailed information about threads and monitors in the Java virtual machine, see Chapter 8 of the Java Virtual Machine Specification, "Threads and Locks." Name : monitorexit Opcode : 195(0xc3) Operation : Exit monitor for object Format : monitorexit Operand Stack : ..., objectref ... Description : The objectref must be of type reference. Runtime Exceptions : If objectref is null, monitorexit throws a NullPointerException. Name : wide Opcode : 196(0xc4) Operation : Extend local variable index by additional bytes Format : Format 1 Operand Stack : Same as modified instruction Description : The wide instruction modifies the behavior of another instruction. It takes one of two formats, depending on the instruction being modified. The first form of the wide instruction modifies one of the instructions iload, fload, aload, lload, dload, istore, fstore, astore, lstore, dstore, or ret. The second form applies only to the iinc instruction. Notes : Although we say that wide "modifies the behavior of another instruction," the wide instruction effectively treats the bytes constituting the modified instruction as operands, denaturing the embedded instruction in the process. In the case of a modified iinc instruction, one of the logical operands of the iinc is not even at the normal offset from the opcode. The embedded instruction must never be executed directly; its opcode must never be the target of any control transfer instruction. Name : multianewarray Opcode : 197(0xc5) Operation : Create new multidimensional array Format : multianewarray Operand Stack : ..., count1, [count2, ...] ..., arrayref Description : 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 nonnegative. The count1 is the desired length in the first dimension, count2 in the second, etc. Linking Exceptions : During resolution of the symbolic reference to the class, array, or interface type, any of the exceptions documented in Section 5.4.3.1 of Java Virtual Machine Specification can be thrown. Runtime Exceptions : Otherwise, if any of the dimensions values on the operand stack are less than zero, the multianewarray instruction throws a NegativeArraySizeException. Notes : It may be more efficient to use newarray or anewarray when creating an array of a single dimension. Name : ifnull Opcode : 198(0xc6) Operation : Branch if reference is null Format : ifnull Operand Stack : ..., value ... Description : 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. Name : ifnonnull Opcode : 199(0xc7) Operation : Branch if reference not null Format : ifnonnull Operand Stack : ..., value ... Description : 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. Name : goto_w Opcode : 200(0xc8) Operation : Branch always (wide index) Format : goto_w Operand Stack : No change Description : 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. Notes : Although the goto_w instruction takes a 4-byte branch offset, other factors limit the size of a method to 65535 bytes. This limit may be raised in a future release of the Java virtual machine. Name : jsr_w Opcode : 201(0xc9) Operation : Jump subroutine (wide index) Format : jsr_w Operand Stack : ... ..., address Description : 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. Notes : The jsr_w instruction is used with the ret instruction in the implementation of the finally clauses of the Java programming language. Note that jsr_w pushes the address onto the operand stack and ret gets it out of a local variable. This asymmetry is intentional. |
Copyright 2006 - Jiang Yang , All Rights Reserved |