summaryrefslogtreecommitdiff
path: root/java/openjdk6/files/icedtea/openjdk/6819246-javap_instruction_decoding.patch
diff options
context:
space:
mode:
Diffstat (limited to 'java/openjdk6/files/icedtea/openjdk/6819246-javap_instruction_decoding.patch')
-rw-r--r--java/openjdk6/files/icedtea/openjdk/6819246-javap_instruction_decoding.patch2065
1 files changed, 2065 insertions, 0 deletions
diff --git a/java/openjdk6/files/icedtea/openjdk/6819246-javap_instruction_decoding.patch b/java/openjdk6/files/icedtea/openjdk/6819246-javap_instruction_decoding.patch
new file mode 100644
index 000000000000..70b7d6cc2eae
--- /dev/null
+++ b/java/openjdk6/files/icedtea/openjdk/6819246-javap_instruction_decoding.patch
@@ -0,0 +1,2065 @@
+# HG changeset patch
+# User jjg
+# Date 1382578806 -3600
+# Thu Oct 24 02:40:06 2013 +0100
+# Node ID 3cbaa3d49584846d4fd8459edeb696b02de5499b
+# Parent bfd7bb4218253bac4f57abbc90b987f16e4b7f6c
+6819246: improve support for decoding instructions in classfile library
+Reviewed-by: ksrini
+
+diff -r bfd7bb421825 -r 3cbaa3d49584 src/share/classes/com/sun/tools/classfile/Code_attribute.java
+--- langtools/src/share/classes/com/sun/tools/classfile/Code_attribute.java Tue Oct 22 01:03:49 2013 +0100
++++ langtools/src/share/classes/com/sun/tools/classfile/Code_attribute.java Thu Oct 24 02:40:06 2013 +0100
+@@ -26,6 +26,8 @@
+ package com.sun.tools.classfile;
+
+ import java.io.IOException;
++import java.util.Iterator;
++import java.util.NoSuchElementException;
+
+ /**
+ * See JVMS3, section 4.8.3.
+@@ -99,6 +101,39 @@
+ return visitor.visitCode(this, data);
+ }
+
++ public Iterable<Instruction> getInstructions() {
++ return new Iterable<Instruction>() {
++ public Iterator<Instruction> iterator() {
++ return new Iterator<Instruction>() {
++
++ public boolean hasNext() {
++ return (next != null);
++ }
++
++ public Instruction next() {
++ if (next == null)
++ throw new NoSuchElementException();
++
++ current = next;
++ pc += current.length();
++ next = (pc < code.length ? new Instruction(code, pc) : null);
++ return current;
++ }
++
++ public void remove() {
++ throw new UnsupportedOperationException("Not supported.");
++ }
++
++ Instruction current = null;
++ int pc = 0;
++ Instruction next = new Instruction(code, pc);
++
++ };
++ }
++
++ };
++ }
++
+ public final int max_stack;
+ public final int max_locals;
+ public final int code_length;
+diff -r bfd7bb421825 -r 3cbaa3d49584 src/share/classes/com/sun/tools/classfile/Instruction.java
+--- /dev/null Thu Jan 01 00:00:00 1970 +0000
++++ langtools/src/share/classes/com/sun/tools/classfile/Instruction.java Thu Oct 24 02:40:06 2013 +0100
+@@ -0,0 +1,339 @@
++/*
++ * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
++ *
++ * This code is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License version 2 only, as
++ * published by the Free Software Foundation. Sun designates this
++ * particular file as subject to the "Classpath" exception as provided
++ * by Sun in the LICENSE file that accompanied this code.
++ *
++ * This code is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ * version 2 for more details (a copy is included in the LICENSE file that
++ * accompanied this code).
++ *
++ * You should have received a copy of the GNU General Public License version
++ * 2 along with this work; if not, write to the Free Software Foundation,
++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
++ *
++ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
++ * CA 95054 USA or visit www.sun.com if you need additional information or
++ * have any questions.
++ */
++
++package com.sun.tools.classfile;
++
++/**
++ * See JVMS3, chapter 6.
++ *
++ * <p><b>This is NOT part of any API supported by Sun Microsystems. If
++ * you write code that depends on this, you do so at your own risk.
++ * This code and its internal interfaces are subject to change or
++ * deletion without notice.</b>
++ *
++ * @see Code_attribute#getInstructions
++ */
++public class Instruction {
++ /** The kind of an instruction, as determined by the position, size and
++ * types of its operands. */
++ public static enum Kind {
++ /** Opcode is not followed by any operands. */
++ NO_OPERANDS(1),
++ /** Opcode is followed by a byte indicating a type. */
++ ATYPE(2),
++ /** Opcode is followed by a 2-byte branch offset. */
++ BRANCH(3),
++ /** Opcode is followed by a 4-byte branch offset. */
++ BRANCH_W(5),
++ /** Opcode is followed by a signed byte value. */
++ BYTE(2),
++ /** Opcode is followed by a 1-byte index into the constant pool. */
++ CPREF(2),
++ /** Opcode is followed by a 2-byte index into the constant pool. */
++ CPREF_W(3),
++ /** Opcode is followed by a 2-byte index into the constant pool,
++ * an unsigned byte value. */
++ CPREF_W_UBYTE(4),
++ /** Opcode is followed by a 2-byte index into the constant pool.,
++ * an unsigned byte value, and a zero byte. */
++ CPREF_W_UBYTE_ZERO(5),
++ /** Opcode is followed by variable number of operands, depending
++ * on the instruction.*/
++ DYNAMIC(-1),
++ /** Opcode is followed by a 1-byte reference to a local variable. */
++ LOCAL(2),
++ /** Opcode is followed by a 1-byte reference to a local variable,
++ * and a signed byte value. */
++ LOCAL_BYTE(3),
++ /** Opcode is followed by a signed short value. */
++ SHORT(3),
++ /** Wide opcode is not followed by any operands. */
++ WIDE_NO_OPERANDS(2),
++ /** Wide opcode is followed by a 2-byte index into the constant pool. */
++ WIDE_CPREF_W(4),
++ /** Wide opcode is followed by a 2-byte index into the constant pool,
++ * and a signed short value. */
++ WIDE_CPREF_W_SHORT(6),
++ /** Opcode was not recognized. */
++ UNKNOWN(1);
++
++ Kind(int length) {
++ this.length = length;
++ }
++
++ /** The length, in bytes, of this kind of instruction, or -1 is the
++ * length depends on the specific instruction. */
++ public final int length;
++ };
++
++ /** A utility visitor to help decode the operands of an instruction.
++ * @see Instruction#accept */
++ public interface KindVisitor<R,P> {
++ /** See {@link Kind#NO_OPERANDS}, {@link Kind#WIDE_NO_OPERANDS}. */
++ R visitNoOperands(Instruction instr, P p);
++ /** See {@link Kind#ATYPE}. */
++ R visitArrayType(Instruction instr, TypeKind kind, P p);
++ /** See {@link Kind#BRANCH}, {@link Kind#BRANCH_W}. */
++ R visitBranch(Instruction instr, int offset, P p);
++ /** See {@link Kind#CPREF}, {@link Kind#CPREF_W}, {@link Kind#WIDE_CPREF_W}. */
++ R visitConstantPoolRef(Instruction instr, int index, P p);
++ /** See {@link Kind#CPREF_W_UBYTE}, {@link Kind#CPREF_W_UBYTE_ZERO}, {@link Kind#WIDE_CPREF_W_SHORT}. */
++ R visitConstantPoolRefAndValue(Instruction instr, int index, int value, P p);
++ /** See {@link Kind#LOCAL}. */
++ R visitLocal(Instruction instr, int index, P p);
++ /** See {@link Kind#LOCAL_UBYTE}. */
++ R visitLocalAndValue(Instruction instr, int index, int value, P p);
++ /** See {@link Kind#DYNAMIC}. */
++ R visitLookupSwitch(Instruction instr, int default_, int npairs, int[] matches, int[] offsets);
++ /** See {@link Kind#DYNAMIC}. */
++ R visitTableSwitch(Instruction instr, int default_, int low, int high, int[] offsets);
++ /** See {@link Kind#BYTE}, {@link Kind#SHORT}. */
++ R visitValue(Instruction instr, int value, P p);
++ /** Instruction is unrecognized. */
++ R visitUnknown(Instruction instr, P p);
++
++ }
++
++ /** The kind of primitive array type to create.
++ * See JVMS chapter 6, newarray. */
++ public static enum TypeKind {
++ T_BOOLEAN(4, "boolean"),
++ T_CHAR(5, "char"),
++ T_FLOAT(6, "float"),
++ T_DOUBLE(7, "double"),
++ T_BYTE(8, "byte"),
++ T_SHORT(9, "short"),
++ T_INT (10, "int"),
++ T_LONG (11, "long");
++ TypeKind(int value, String name) {
++ this.value = value;
++ this.name = name;
++ }
++
++ public static TypeKind get(int value) {
++ switch (value) {
++ case 4: return T_BOOLEAN;
++ case 5: return T_CHAR;
++ case 6: return T_FLOAT;
++ case 7: return T_DOUBLE;
++ case 8: return T_BYTE;
++ case 9: return T_SHORT;
++ case 10: return T_INT;
++ case 11: return T_LONG;
++ default: return null;
++ }
++ }
++
++ public final int value;
++ public final String name;
++ }
++
++ /** An instruction is defined by its position in a bytecode array. */
++ public Instruction(byte[] bytes, int pc) {
++ this.bytes = bytes;
++ this.pc = pc;
++ }
++
++ /** Get the position of the instruction within the bytecode array. */
++ public int getPC() {
++ return pc;
++ }
++
++ /** Get a byte value, relative to the start of this instruction. */
++ public int getByte(int offset) {
++ return bytes[pc + offset];
++ }
++
++ /** Get an unsigned byte value, relative to the start of this instruction. */
++ public int getUnsignedByte(int offset) {
++ return getByte(offset) & 0xff;
++ }
++
++ /** Get a 2-byte value, relative to the start of this instruction. */
++ public int getShort(int offset) {
++ return (getByte(offset) << 8) | getUnsignedByte(offset + 1);
++ }
++
++ /** Get a unsigned 2-byte value, relative to the start of this instruction. */
++ public int getUnsignedShort(int offset) {
++ return getShort(offset) & 0xFFFF;
++ }
++
++ /** Get a 4-byte value, relative to the start of this instruction. */
++ public int getInt(int offset) {
++ return (getShort(offset) << 16) | (getUnsignedShort(offset + 2));
++ }
++
++ /** Get the Opcode for this instruction, or null if the instruction is
++ * unrecognized. */
++ public Opcode getOpcode() {
++ int b = getUnsignedByte(0);
++ switch (b) {
++ case Opcode.NONPRIV:
++ case Opcode.PRIV:
++ case Opcode.WIDE:
++ return Opcode.get(b, getUnsignedByte(1));
++ }
++ return Opcode.get(b);
++ }
++
++ /** Get the mnemonic for this instruction, or a default string if the
++ * instruction is unrecognized. */
++ public String getMnemonic() {
++ Opcode opcode = getOpcode();
++ if (opcode == null)
++ return "bytecode " + getUnsignedByte(0);
++ else
++ return opcode.toString().toLowerCase();
++ }
++
++ /** Get the length, in bytes, of this instruction, including the opcode
++ * and all its operands. */
++ public int length() {
++ Opcode opcode = getOpcode();
++ if (opcode == null)
++ return 1;
++
++ switch (opcode) {
++ case TABLESWITCH: {
++ int pad = align(pc + 1) - pc;
++ int low = getInt(pad + 4);
++ int high = getInt(pad + 8);
++ return pad + 12 + 4 * (high - low + 1);
++ }
++ case LOOKUPSWITCH: {
++ int pad = align(pc + 1) - pc;
++ int npairs = getInt(pad + 4);
++ return pad + 8 + 8 * npairs;
++
++ }
++ default:
++ return opcode.kind.length;
++ }
++ }
++
++ /** Get the {@link Kind} of this instruction. */
++ public Kind getKind() {
++ Opcode opcode = getOpcode();
++ return (opcode != null ? opcode.kind : Kind.UNKNOWN);
++ }
++
++ /** Invoke a method on the visitor according to the kind of this
++ * instruction, passing in the decoded operands for the instruction. */
++ public <R,P> R accept(KindVisitor<R,P> visitor, P p) {
++ switch (getKind()) {
++ case NO_OPERANDS:
++ return visitor.visitNoOperands(this, p);
++
++ case ATYPE:
++ return visitor.visitArrayType(
++ this, TypeKind.get(getUnsignedByte(1)), p);
++
++ case BRANCH:
++ return visitor.visitBranch(this, getShort(1), p);
++
++ case BRANCH_W:
++ return visitor.visitBranch(this, getInt(1), p);
++
++ case BYTE:
++ return visitor.visitValue(this, getByte(1), p);
++
++ case CPREF:
++ return visitor.visitConstantPoolRef(this, getUnsignedByte(1), p);
++
++ case CPREF_W:
++ return visitor.visitConstantPoolRef(this, getUnsignedShort(1), p);
++
++ case CPREF_W_UBYTE:
++ case CPREF_W_UBYTE_ZERO:
++ return visitor.visitConstantPoolRefAndValue(
++ this, getUnsignedShort(1), getUnsignedByte(3), p);
++
++ case DYNAMIC: {
++ switch (getOpcode()) {
++ case TABLESWITCH: {
++ int pad = align(pc + 1) - pc;
++ int default_ = getInt(pad);
++ int low = getInt(pad + 4);
++ int high = getInt(pad + 8);
++ int[] values = new int[high - low + 1];
++ for (int i = 0; i < values.length; i++)
++ values[i] = getInt(pad + 12 + 4 * i);
++ return visitor.visitTableSwitch(
++ this, default_, low, high, values);
++ }
++ case LOOKUPSWITCH: {
++ int pad = align(pc + 1) - pc;
++ int default_ = getInt(pad);
++ int npairs = getInt(pad + 4);
++ int[] matches = new int[npairs];
++ int[] offsets = new int[npairs];
++ for (int i = 0; i < npairs; i++) {
++ matches[i] = getInt(pad + 8 + i * 8);
++ offsets[i] = getInt(pad + 12 + i * 8);
++ }
++ return visitor.visitLookupSwitch(
++ this, default_, npairs, matches, offsets);
++ }
++ default:
++ throw new IllegalStateException();
++ }
++ }
++
++ case LOCAL:
++ return visitor.visitLocal(this, getUnsignedByte(1), p);
++
++ case LOCAL_BYTE:
++ return visitor.visitLocalAndValue(
++ this, getUnsignedByte(1), getByte(2), p);
++
++ case SHORT:
++ return visitor.visitValue(this, getShort(1), p);
++
++ case WIDE_NO_OPERANDS:
++ return visitor.visitNoOperands(this, p);
++
++ case WIDE_CPREF_W:
++ return visitor.visitConstantPoolRef(this, getUnsignedShort(2), p);
++
++ case WIDE_CPREF_W_SHORT:
++ return visitor.visitConstantPoolRefAndValue(
++ this, getUnsignedShort(2), getUnsignedByte(4), p);
++
++ case UNKNOWN:
++ return visitor.visitUnknown(this, p);
++
++ default:
++ throw new IllegalStateException();
++ }
++ }
++
++ private static int align(int n) {
++ return (n + 3) & ~3;
++ }
++
++ private byte[] bytes;
++ private int pc;
++}
+diff -r bfd7bb421825 -r 3cbaa3d49584 src/share/classes/com/sun/tools/classfile/OpCodes.java
+--- langtools/src/share/classes/com/sun/tools/classfile/OpCodes.java Tue Oct 22 01:03:49 2013 +0100
++++ /dev/null Thu Jan 01 00:00:00 1970 +0000
+@@ -1,868 +0,0 @@
+-/*
+- * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved.
+- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+- *
+- * This code is free software; you can redistribute it and/or modify it
+- * under the terms of the GNU General Public License version 2 only, as
+- * published by the Free Software Foundation. Sun designates this
+- * particular file as subject to the "Classpath" exception as provided
+- * by Sun in the LICENSE file that accompanied this code.
+- *
+- * This code is distributed in the hope that it will be useful, but WITHOUT
+- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+- * version 2 for more details (a copy is included in the LICENSE file that
+- * accompanied this code).
+- *
+- * You should have received a copy of the GNU General Public License version
+- * 2 along with this work; if not, write to the Free Software Foundation,
+- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+- *
+- * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+- * CA 95054 USA or visit www.sun.com if you need additional information or
+- * have any questions.
+- */
+-
+-package com.sun.tools.classfile;
+-
+-import java.util.HashMap;
+-
+-/**
+- * See JVMS3, section 6.
+- *
+- * <p><b>This is NOT part of any API supported by Sun Microsystems. If
+- * you write code that depends on this, you do so at your own risk.
+- * This code and its internal interfaces are subject to change or
+- * deletion without notice.</b>
+- */
+-public class OpCodes {
+-
+- public static int opcLength(int opc) throws IllegalArgumentException {
+- switch (opc >> 8) {
+- case 0:
+- return opcLengthsTab[opc];
+- case opc_wide:
+- switch (opc & 0xFF) {
+- case opc_aload:
+- case opc_astore:
+- case opc_fload:
+- case opc_fstore:
+- case opc_iload:
+- case opc_istore:
+- case opc_lload:
+- case opc_lstore:
+- case opc_dload:
+- case opc_dstore:
+- case opc_ret:
+- return 4;
+- case opc_iinc:
+- return 6;
+- default:
+- throw new IllegalArgumentException();
+- }
+- case opc_nonpriv:
+- case opc_priv:
+- return 2;
+- default:
+- throw new IllegalArgumentException();
+- }
+- }
+-
+- public static String opcName(int opc) {
+- try {
+- switch (opc >> 8) {
+- case 0:
+- return opcNamesTab[opc];
+- case opc_wide:
+- {
+- String mnem = opcNamesTab[opc & 0xFF] + "_w";
+- if (mnemocodes.get(mnem) == null) {
+- return null; // non-existent opcode
+- }
+- return mnem;
+- }
+- case opc_nonpriv:
+- return opcExtNamesTab[opc & 0xFF];
+- case opc_priv:
+- return opcPrivExtNamesTab[opc & 0xFF];
+- default:
+- return null;
+- }
+- } catch (ArrayIndexOutOfBoundsException e) {
+- switch (opc) {
+- case opc_nonpriv:
+- return "nonpriv";
+- case opc_priv:
+- return "priv";
+- default:
+- return null;
+- }
+- }
+- }
+-
+- /* Opcodes */
+- public static final int opc_dead = -2;
+- public static final int opc_label = -1;
+- public static final int opc_nop = 0;
+- public static final int opc_aconst_null = 1;
+- public static final int opc_iconst_m1 = 2;
+- public static final int opc_iconst_0 = 3;
+- public static final int opc_iconst_1 = 4;
+- public static final int opc_iconst_2 = 5;
+- public static final int opc_iconst_3 = 6;
+- public static final int opc_iconst_4 = 7;
+- public static final int opc_iconst_5 = 8;
+- public static final int opc_lconst_0 = 9;
+- public static final int opc_lconst_1 = 10;
+- public static final int opc_fconst_0 = 11;
+- public static final int opc_fconst_1 = 12;
+- public static final int opc_fconst_2 = 13;
+- public static final int opc_dconst_0 = 14;
+- public static final int opc_dconst_1 = 15;
+- public static final int opc_bipush = 16;
+- public static final int opc_sipush = 17;
+- public static final int opc_ldc = 18;
+- public static final int opc_ldc_w = 19;
+- public static final int opc_ldc2_w = 20;
+- public static final int opc_iload = 21;
+- public static final int opc_lload = 22;
+- public static final int opc_fload = 23;
+- public static final int opc_dload = 24;
+- public static final int opc_aload = 25;
+- public static final int opc_iload_0 = 26;
+- public static final int opc_iload_1 = 27;
+- public static final int opc_iload_2 = 28;
+- public static final int opc_iload_3 = 29;
+- public static final int opc_lload_0 = 30;
+- public static final int opc_lload_1 = 31;
+- public static final int opc_lload_2 = 32;
+- public static final int opc_lload_3 = 33;
+- public static final int opc_fload_0 = 34;
+- public static final int opc_fload_1 = 35;
+- public static final int opc_fload_2 = 36;
+- public static final int opc_fload_3 = 37;
+- public static final int opc_dload_0 = 38;
+- public static final int opc_dload_1 = 39;
+- public static final int opc_dload_2 = 40;
+- public static final int opc_dload_3 = 41;
+- public static final int opc_aload_0 = 42;
+- public static final int opc_aload_1 = 43;
+- public static final int opc_aload_2 = 44;
+- public static final int opc_aload_3 = 45;
+- public static final int opc_iaload = 46;
+- public static final int opc_laload = 47;
+- public static final int opc_faload = 48;
+- public static final int opc_daload = 49;
+- public static final int opc_aaload = 50;
+- public static final int opc_baload = 51;
+- public static final int opc_caload = 52;
+- public static final int opc_saload = 53;
+- public static final int opc_istore = 54;
+- public static final int opc_lstore = 55;
+- public static final int opc_fstore = 56;
+- public static final int opc_dstore = 57;
+- public static final int opc_astore = 58;
+- public static final int opc_istore_0 = 59;
+- public static final int opc_istore_1 = 60;
+- public static final int opc_istore_2 = 61;
+- public static final int opc_istore_3 = 62;
+- public static final int opc_lstore_0 = 63;
+- public static final int opc_lstore_1 = 64;
+- public static final int opc_lstore_2 = 65;
+- public static final int opc_lstore_3 = 66;
+- public static final int opc_fstore_0 = 67;
+- public static final int opc_fstore_1 = 68;
+- public static final int opc_fstore_2 = 69;
+- public static final int opc_fstore_3 = 70;
+- public static final int opc_dstore_0 = 71;
+- public static final int opc_dstore_1 = 72;
+- public static final int opc_dstore_2 = 73;
+- public static final int opc_dstore_3 = 74;
+- public static final int opc_astore_0 = 75;
+- public static final int opc_astore_1 = 76;
+- public static final int opc_astore_2 = 77;
+- public static final int opc_astore_3 = 78;
+- public static final int opc_iastore = 79;
+- public static final int opc_lastore = 80;
+- public static final int opc_fastore = 81;
+- public static final int opc_dastore = 82;
+- public static final int opc_aastore = 83;
+- public static final int opc_bastore = 84;
+- public static final int opc_castore = 85;
+- public static final int opc_sastore = 86;
+- public static final int opc_pop = 87;
+- public static final int opc_pop2 = 88;
+- public static final int opc_dup = 89;
+- public static final int opc_dup_x1 = 90;
+- public static final int opc_dup_x2 = 91;
+- public static final int opc_dup2 = 92;
+- public static final int opc_dup2_x1 = 93;
+- public static final int opc_dup2_x2 = 94;
+- public static final int opc_swap = 95;
+- public static final int opc_iadd = 96;
+- public static final int opc_ladd = 97;
+- public static final int opc_fadd = 98;
+- public static final int opc_dadd = 99;
+- public static final int opc_isub = 100;
+- public static final int opc_lsub = 101;
+- public static final int opc_fsub = 102;
+- public static final int opc_dsub = 103;
+- public static final int opc_imul = 104;
+- public static final int opc_lmul = 105;
+- public static final int opc_fmul = 106;
+- public static final int opc_dmul = 107;
+- public static final int opc_idiv = 108;
+- public static final int opc_ldiv = 109;
+- public static final int opc_fdiv = 110;
+- public static final int opc_ddiv = 111;
+- public static final int opc_irem = 112;
+- public static final int opc_lrem = 113;
+- public static final int opc_frem = 114;
+- public static final int opc_drem = 115;
+- public static final int opc_ineg = 116;
+- public static final int opc_lneg = 117;
+- public static final int opc_fneg = 118;
+- public static final int opc_dneg = 119;
+- public static final int opc_ishl = 120;
+- public static final int opc_lshl = 121;
+- public static final int opc_ishr = 122;
+- public static final int opc_lshr = 123;
+- public static final int opc_iushr = 124;
+- public static final int opc_lushr = 125;
+- public static final int opc_iand = 126;
+- public static final int opc_land = 127;
+- public static final int opc_ior = 128;
+- public static final int opc_lor = 129;
+- public static final int opc_ixor = 130;
+- public static final int opc_lxor = 131;
+- public static final int opc_iinc = 132;
+- public static final int opc_i2l = 133;
+- public static final int opc_i2f = 134;
+- public static final int opc_i2d = 135;
+- public static final int opc_l2i = 136;
+- public static final int opc_l2f = 137;
+- public static final int opc_l2d = 138;
+- public static final int opc_f2i = 139;
+- public static final int opc_f2l = 140;
+- public static final int opc_f2d = 141;
+- public static final int opc_d2i = 142;
+- public static final int opc_d2l = 143;
+- public static final int opc_d2f = 144;
+- public static final int opc_i2b = 145;
+- public static final int opc_int2byte = 145;
+- public static final int opc_i2c = 146;
+- public static final int opc_int2char = 146;
+- public static final int opc_i2s = 147;
+- public static final int opc_int2short = 147;
+- public static final int opc_lcmp = 148;
+- public static final int opc_fcmpl = 149;
+- public static final int opc_fcmpg = 150;
+- public static final int opc_dcmpl = 151;
+- public static final int opc_dcmpg = 152;
+- public static final int opc_ifeq = 153;
+- public static final int opc_ifne = 154;
+- public static final int opc_iflt = 155;
+- public static final int opc_ifge = 156;
+- public static final int opc_ifgt = 157;
+- public static final int opc_ifle = 158;
+- public static final int opc_if_icmpeq = 159;
+- public static final int opc_if_icmpne = 160;
+- public static final int opc_if_icmplt = 161;
+- public static final int opc_if_icmpge = 162;
+- public static final int opc_if_icmpgt = 163;
+- public static final int opc_if_icmple = 164;
+- public static final int opc_if_acmpeq = 165;
+- public static final int opc_if_acmpne = 166;
+- public static final int opc_goto = 167;
+- public static final int opc_jsr = 168;
+- public static final int opc_ret = 169;
+- public static final int opc_tableswitch = 170;
+- public static final int opc_lookupswitch = 171;
+- public static final int opc_ireturn = 172;
+- public static final int opc_lreturn = 173;
+- public static final int opc_freturn = 174;
+- public static final int opc_dreturn = 175;
+- public static final int opc_areturn = 176;
+- public static final int opc_return = 177;
+- public static final int opc_getstatic = 178;
+- public static final int opc_putstatic = 179;
+- public static final int opc_getfield = 180;
+- public static final int opc_putfield = 181;
+- public static final int opc_invokevirtual = 182;
+- public static final int opc_invokenonvirtual = 183;
+- public static final int opc_invokespecial = 183;
+- public static final int opc_invokestatic = 184;
+- public static final int opc_invokeinterface = 185;
+-// public static final int opc_xxxunusedxxx = 186;
+- public static final int opc_new = 187;
+- public static final int opc_newarray = 188;
+- public static final int opc_anewarray = 189;
+- public static final int opc_arraylength = 190;
+- public static final int opc_athrow = 191;
+- public static final int opc_checkcast = 192;
+- public static final int opc_instanceof = 193;
+- public static final int opc_monitorenter = 194;
+- public static final int opc_monitorexit = 195;
+- public static final int opc_wide = 196;
+- public static final int opc_multianewarray = 197;
+- public static final int opc_ifnull = 198;
+- public static final int opc_ifnonnull = 199;
+- public static final int opc_goto_w = 200;
+- public static final int opc_jsr_w = 201;
+-
+- /* Pseudo-instructions */
+- public static final int opc_bytecode = 203;
+- public static final int opc_try = 204;
+- public static final int opc_endtry = 205;
+- public static final int opc_catch = 206;
+- public static final int opc_var = 207;
+- public static final int opc_endvar = 208;
+- public static final int opc_localsmap = 209;
+- public static final int opc_stackmap = 210;
+-
+- /* PicoJava prefixes */
+- public static final int opc_nonpriv = 254;
+- public static final int opc_priv = 255;
+-
+- /* Wide instructions */
+- public static final int opc_iload_w = (opc_wide << 8 ) | opc_iload;
+- public static final int opc_lload_w = (opc_wide << 8 ) | opc_lload;
+- public static final int opc_fload_w = (opc_wide << 8 ) | opc_fload;
+- public static final int opc_dload_w = (opc_wide << 8 ) | opc_dload;
+- public static final int opc_aload_w = (opc_wide << 8 ) | opc_aload;
+- public static final int opc_istore_w = (opc_wide << 8 ) | opc_istore;
+- public static final int opc_lstore_w = (opc_wide << 8 ) | opc_lstore;
+- public static final int opc_fstore_w = (opc_wide << 8 ) | opc_fstore;
+- public static final int opc_dstore_w = (opc_wide << 8 ) | opc_dstore;
+- public static final int opc_astore_w = (opc_wide << 8 ) | opc_astore;
+- public static final int opc_ret_w = (opc_wide << 8 ) | opc_ret;
+- public static final int opc_iinc_w = (opc_wide << 8 ) | opc_iinc;
+-
+- /* Opcode Names */
+- private static final String opcNamesTab[] = {
+- "nop",
+- "aconst_null",
+- "iconst_m1",
+- "iconst_0",
+- "iconst_1",
+- "iconst_2",
+- "iconst_3",
+- "iconst_4",
+- "iconst_5",
+- "lconst_0",
+- "lconst_1",
+- "fconst_0",
+- "fconst_1",
+- "fconst_2",
+- "dconst_0",
+- "dconst_1",
+- "bipush",
+- "sipush",
+- "ldc",
+- "ldc_w",
+- "ldc2_w",
+- "iload",
+- "lload",
+- "fload",
+- "dload",
+- "aload",
+- "iload_0",
+- "iload_1",
+- "iload_2",
+- "iload_3",
+- "lload_0",
+- "lload_1",
+- "lload_2",
+- "lload_3",
+- "fload_0",
+- "fload_1",
+- "fload_2",
+- "fload_3",
+- "dload_0",
+- "dload_1",
+- "dload_2",
+- "dload_3",
+- "aload_0",
+- "aload_1",
+- "aload_2",
+- "aload_3",
+- "iaload",
+- "laload",
+- "faload",
+- "daload",
+- "aaload",
+- "baload",
+- "caload",
+- "saload",
+- "istore",
+- "lstore",
+- "fstore",
+- "dstore",
+- "astore",
+- "istore_0",
+- "istore_1",
+- "istore_2",
+- "istore_3",
+- "lstore_0",
+- "lstore_1",
+- "lstore_2",
+- "lstore_3",
+- "fstore_0",
+- "fstore_1",
+- "fstore_2",
+- "fstore_3",
+- "dstore_0",
+- "dstore_1",
+- "dstore_2",
+- "dstore_3",
+- "astore_0",
+- "astore_1",
+- "astore_2",
+- "astore_3",
+- "iastore",
+- "lastore",
+- "fastore",
+- "dastore",
+- "aastore",
+- "bastore",
+- "castore",
+- "sastore",
+- "pop",
+- "pop2",
+- "dup",
+- "dup_x1",
+- "dup_x2",
+- "dup2",
+- "dup2_x1",
+- "dup2_x2",
+- "swap",
+- "iadd",
+- "ladd",
+- "fadd",
+- "dadd",
+- "isub",
+- "lsub",
+- "fsub",
+- "dsub",
+- "imul",
+- "lmul",
+- "fmul",
+- "dmul",
+- "idiv",
+- "ldiv",
+- "fdiv",
+- "ddiv",
+- "irem",
+- "lrem",
+- "frem",
+- "drem",
+- "ineg",
+- "lneg",
+- "fneg",
+- "dneg",
+- "ishl",
+- "lshl",
+- "ishr",
+- "lshr",
+- "iushr",
+- "lushr",
+- "iand",
+- "land",
+- "ior",
+- "lor",
+- "ixor",
+- "lxor",
+- "iinc",
+- "i2l",
+- "i2f",
+- "i2d",
+- "l2i",
+- "l2f",
+- "l2d",
+- "f2i",
+- "f2l",
+- "f2d",
+- "d2i",
+- "d2l",
+- "d2f",
+- "i2b",
+- "i2c",
+- "i2s",
+- "lcmp",
+- "fcmpl",
+- "fcmpg",
+- "dcmpl",
+- "dcmpg",
+- "ifeq",
+- "ifne",
+- "iflt",
+- "ifge",
+- "ifgt",
+- "ifle",
+- "if_icmpeq",
+- "if_icmpne",
+- "if_icmplt",
+- "if_icmpge",
+- "if_icmpgt",
+- "if_icmple",
+- "if_acmpeq",
+- "if_acmpne",
+- "goto",
+- "jsr",
+- "ret",
+- "tableswitch",
+- "lookupswitch",
+- "ireturn",
+- "lreturn",
+- "freturn",
+- "dreturn",
+- "areturn",
+- "return",
+- "getstatic",
+- "putstatic",
+- "getfield",
+- "putfield",
+- "invokevirtual",
+- "invokespecial", // was "invokenonvirtual",
+- "invokestatic",
+- "invokeinterface",
+- "bytecode 186", //"xxxunusedxxx",
+- "new",
+- "newarray",
+- "anewarray",
+- "arraylength",
+- "athrow",
+- "checkcast",
+- "instanceof",
+- "monitorenter",
+- "monitorexit",
+- null, // "wide",
+- "multianewarray",
+- "ifnull",
+- "ifnonnull",
+- "goto_w",
+- "jsr_w",
+- "bytecode 202", // "breakpoint",
+- "bytecode",
+- "try",
+- "endtry",
+- "catch",
+- "var",
+- "endvar",
+- "locals_map",
+- "stack_map"
+- };
+-
+- /* Opcode Lengths */
+- private static final int opcLengthsTab[] = {
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 2,
+- 3,
+- 2,
+- 3,
+- 3,
+- 2,
+- 2,
+- 2,
+- 2,
+- 2,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 2,
+- 2,
+- 2,
+- 2,
+- 2,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 3,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 3,
+- 3,
+- 3,
+- 3,
+- 3,
+- 3,
+- 3,
+- 3,
+- 3,
+- 3,
+- 3,
+- 3,
+- 3,
+- 3,
+- 3,
+- 3,
+- 2,
+- 99,
+- 99,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 1,
+- 3,
+- 3,
+- 3,
+- 3,
+- 3,
+- 3,
+- 3,
+- 5,
+- 0,
+- 3,
+- 2,
+- 3,
+- 1,
+- 1,
+- 3,
+- 3,
+- 1,
+- 1,
+- 0, // wide
+- 4,
+- 3,
+- 3,
+- 5,
+- 5,
+- 1,
+- 1, 0, 0, 0, 0, 0 // pseudo
+- };
+-
+- /* Type codes, used in newarray opcode */
+- public static final int T_CLASS = 0x00000002;
+- public static final int T_BOOLEAN = 0x00000004;
+- public static final int T_CHAR = 0x00000005;
+- public static final int T_FLOAT = 0x00000006;
+- public static final int T_DOUBLE = 0x00000007;
+- public static final int T_BYTE = 0x00000008;
+- public static final int T_SHORT = 0x00000009;
+- public static final int T_INT = 0x0000000a;
+- public static final int T_LONG = 0x0000000b;
+-
+- private static HashMap<String,Integer> mnemocodes = new HashMap<String,Integer>(301, 0.5f);
+- private static String opcExtNamesTab[]=new String[128];
+- private static String opcPrivExtNamesTab[]=new String[128];
+-
+- private static void defineNonPriv(int opc, String mnem) {
+- mnemocodes.put(opcExtNamesTab[opc] = mnem, opc_nonpriv * 256 + opc);
+- }
+-
+- private static void definePriv(int opc, String mnem) {
+- mnemocodes.put(opcPrivExtNamesTab[opc] = "priv_" + mnem, opc_priv * 256 + opc);
+- }
+-
+- private static void defineExt(int opc, String mnem) {
+- defineNonPriv(opc, mnem);
+- definePriv(opc, mnem);
+- }
+-
+- static {
+- for (int i = 0; i < opc_wide; i++) {
+- mnemocodes.put(opcNamesTab[i], i);
+- }
+- for (int i = opc_wide + 1; i < opcNamesTab.length; i++) {
+- mnemocodes.put(opcNamesTab[i], i);
+- }
+- mnemocodes.put("invokenonvirtual", opc_invokespecial);
+-
+- mnemocodes.put("iload_w", opc_iload_w);
+- mnemocodes.put("lload_w", opc_lload_w);
+- mnemocodes.put("fload_w", opc_fload_w);
+- mnemocodes.put("dload_w", opc_dload_w);
+- mnemocodes.put("aload_w", opc_aload_w);
+- mnemocodes.put("istore_w", opc_istore_w);
+- mnemocodes.put("lstore_w", opc_lstore_w);
+- mnemocodes.put("fstore_w", opc_fstore_w);
+- mnemocodes.put("dstore_w", opc_dstore_w);
+- mnemocodes.put("astore_w", opc_astore_w);
+- mnemocodes.put("ret_w", opc_ret_w);
+- mnemocodes.put("iinc_w", opc_iinc_w);
+-
+- mnemocodes.put("nonpriv", opc_nonpriv);
+- mnemocodes.put("priv", opc_priv);
+-
+- defineExt(0, "load_ubyte");
+- defineExt(1, "load_byte");
+- defineExt(2, "load_char");
+- defineExt(3, "load_short");
+- defineExt(4, "load_word");
+- defineExt(10, "load_char_oe");
+- defineExt(11, "load_short_oe");
+- defineExt(12, "load_word_oe");
+- defineExt(16, "ncload_ubyte");
+- defineExt(17, "ncload_byte");
+- defineExt(18, "ncload_char");
+- defineExt(19, "ncload_short");
+- defineExt(20, "ncload_word");
+- defineExt(26, "ncload_char_oe");
+- defineExt(27, "ncload_short_oe");
+- defineExt(28, "ncload_word_oe");
+- defineExt(30, "cache_flush");
+- defineExt(32, "store_byte");
+- defineExt(34, "store_short");
+- defineExt(36, "store_word");
+- defineExt(42, "store_short_oe");
+- defineExt(44, "store_word_oe");
+- defineExt(48, "ncstore_byte");
+- defineExt(50, "ncstore_short");
+- defineExt(52, "ncstore_word");
+- defineExt(58, "ncstore_short_oe");
+- defineExt(60, "ncstore_word_oe");
+- defineExt(62, "zero_line");
+- defineNonPriv(5, "ret_from_sub");
+- defineNonPriv(63, "enter_sync_method");
+- definePriv(5, "ret_from_trap");
+- definePriv(6, "read_dcache_tag");
+- definePriv(7, "read_dcache_data");
+- definePriv(14, "read_icache_tag");
+- definePriv(15, "read_icache_data");
+- definePriv(22, "powerdown");
+- definePriv(23, "read_scache_data");
+- definePriv(31, "cache_index_flush");
+- definePriv(38, "write_dcache_tag");
+- definePriv(39, "write_dcache_data");
+- definePriv(46, "write_icache_tag");
+- definePriv(47, "write_icache_data");
+- definePriv(54, "reset");
+- definePriv(55, "write_scache_data");
+- for (int i = 0; i < 32; i++) {
+- definePriv(i + 64, "read_reg_" + i);
+- }
+- for (int i = 0; i < 32; i++) {
+- definePriv(i + 96, "write_reg_" + i);
+- }
+- }
+-}
+diff -r bfd7bb421825 -r 3cbaa3d49584 src/share/classes/com/sun/tools/classfile/Opcode.java
+--- /dev/null Thu Jan 01 00:00:00 1970 +0000
++++ langtools/src/share/classes/com/sun/tools/classfile/Opcode.java Thu Oct 24 02:40:06 2013 +0100
+@@ -0,0 +1,472 @@
++/*
++ * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved.
++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
++ *
++ * This code is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License version 2 only, as
++ * published by the Free Software Foundation. Sun designates this
++ * particular file as subject to the "Classpath" exception as provided
++ * by Sun in the LICENSE file that accompanied this code.
++ *
++ * This code is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ * version 2 for more details (a copy is included in the LICENSE file that
++ * accompanied this code).
++ *
++ * You should have received a copy of the GNU General Public License version
++ * 2 along with this work; if not, write to the Free Software Foundation,
++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
++ *
++ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
++ * CA 95054 USA or visit www.sun.com if you need additional information or
++ * have any questions.
++ */
++
++package com.sun.tools.classfile;
++
++import static com.sun.tools.classfile.Instruction.Kind.*;
++import static com.sun.tools.classfile.Opcode.Set.*;
++
++/**
++ * See JVMS3, chapter 6.
++ *
++ * <p>In addition to providing all the standard opcodes defined in JVMS,
++ * this class also provides legacy support for the PicoJava extensions.
++ *
++ * <p><b>This is NOT part of any API supported by Sun Microsystems. If
++ * you write code that depends on this, you do so at your own risk.
++ * This code and its internal interfaces are subject to change or
++ * deletion without notice.</b>
++ */
++public enum Opcode {
++ NOP(0x0),
++ ACONST_NULL(0x1),
++ ICONST_M1(0x2),
++ ICONST_0(0x3),
++ ICONST_1(0x4),
++ ICONST_2(0x5),
++ ICONST_3(0x6),
++ ICONST_4(0x7),
++ ICONST_5(0x8),
++ LCONST_0(0x9),
++ LCONST_1(0xa),
++ FCONST_0(0xb),
++ FCONST_1(0xc),
++ FCONST_2(0xd),
++ DCONST_0(0xe),
++ DCONST_1(0xf),
++ BIPUSH(0x10, BYTE),
++ SIPUSH(0x11, SHORT),
++ LDC(0x12, CPREF),
++ LDC_W(0x13, CPREF_W),
++ LDC2_W(0x14, CPREF_W),
++ ILOAD(0x15, LOCAL),
++ LLOAD(0x16, LOCAL),
++ FLOAD(0x17, LOCAL),
++ DLOAD(0x18, LOCAL),
++ ALOAD(0x19, LOCAL),
++ ILOAD_0(0x1a),
++ ILOAD_1(0x1b),
++ ILOAD_2(0x1c),
++ ILOAD_3(0x1d),
++ LLOAD_0(0x1e),
++ LLOAD_1(0x1f),
++ LLOAD_2(0x20),
++ LLOAD_3(0x21),
++ FLOAD_0(0x22),
++ FLOAD_1(0x23),
++ FLOAD_2(0x24),
++ FLOAD_3(0x25),
++ DLOAD_0(0x26),
++ DLOAD_1(0x27),
++ DLOAD_2(0x28),
++ DLOAD_3(0x29),
++ ALOAD_0(0x2a),
++ ALOAD_1(0x2b),
++ ALOAD_2(0x2c),
++ ALOAD_3(0x2d),
++ IALOAD(0x2e),
++ LALOAD(0x2f),
++ FALOAD(0x30),
++ DALOAD(0x31),
++ AALOAD(0x32),
++ BALOAD(0x33),
++ CALOAD(0x34),
++ SALOAD(0x35),
++ ISTORE(0x36, LOCAL),
++ LSTORE(0x37, LOCAL),
++ FSTORE(0x38, LOCAL),
++ DSTORE(0x39, LOCAL),
++ ASTORE(0x3a, LOCAL),
++ ISTORE_0(0x3b),
++ ISTORE_1(0x3c),
++ ISTORE_2(0x3d),
++ ISTORE_3(0x3e),
++ LSTORE_0(0x3f),
++ LSTORE_1(0x40),
++ LSTORE_2(0x41),
++ LSTORE_3(0x42),
++ FSTORE_0(0x43),
++ FSTORE_1(0x44),
++ FSTORE_2(0x45),
++ FSTORE_3(0x46),
++ DSTORE_0(0x47),
++ DSTORE_1(0x48),
++ DSTORE_2(0x49),
++ DSTORE_3(0x4a),
++ ASTORE_0(0x4b),
++ ASTORE_1(0x4c),
++ ASTORE_2(0x4d),
++ ASTORE_3(0x4e),
++ IASTORE(0x4f),
++ LASTORE(0x50),
++ FASTORE(0x51),
++ DASTORE(0x52),
++ AASTORE(0x53),
++ BASTORE(0x54),
++ CASTORE(0x55),
++ SASTORE(0x56),
++ POP(0x57),
++ POP2(0x58),
++ DUP(0x59),
++ DUP_X1(0x5a),
++ DUP_X2(0x5b),
++ DUP2(0x5c),
++ DUP2_X1(0x5d),
++ DUP2_X2(0x5e),
++ SWAP(0x5f),
++ IADD(0x60),
++ LADD(0x61),
++ FADD(0x62),
++ DADD(0x63),
++ ISUB(0x64),
++ LSUB(0x65),
++ FSUB(0x66),
++ DSUB(0x67),
++ IMUL(0x68),
++ LMUL(0x69),
++ FMUL(0x6a),
++ DMUL(0x6b),
++ IDIV(0x6c),
++ LDIV(0x6d),
++ FDIV(0x6e),
++ DDIV(0x6f),
++ IREM(0x70),
++ LREM(0x71),
++ FREM(0x72),
++ DREM(0x73),
++ INEG(0x74),
++ LNEG(0x75),
++ FNEG(0x76),
++ DNEG(0x77),
++ ISHL(0x78),
++ LSHL(0x79),
++ ISHR(0x7a),
++ LSHR(0x7b),
++ IUSHR(0x7c),
++ LUSHR(0x7d),
++ IAND(0x7e),
++ LAND(0x7f),
++ IOR(0x80),
++ LOR(0x81),
++ IXOR(0x82),
++ LXOR(0x83),
++ IINC(0x84, LOCAL_BYTE),
++ I2L(0x85),
++ I2F(0x86),
++ I2D(0x87),
++ L2I(0x88),
++ L2F(0x89),
++ L2D(0x8a),
++ F2I(0x8b),
++ F2L(0x8c),
++ F2D(0x8d),
++ D2I(0x8e),
++ D2L(0x8f),
++ D2F(0x90),
++ I2B(0x91),
++ I2C(0x92),
++ I2S(0x93),
++ LCMP(0x94),
++ FCMPL(0x95),
++ FCMPG(0x96),
++ DCMPL(0x97),
++ DCMPG(0x98),
++ IFEQ(0x99, BRANCH),
++ IFNE(0x9a, BRANCH),
++ IFLT(0x9b, BRANCH),
++ IFGE(0x9c, BRANCH),
++ IFGT(0x9d, BRANCH),
++ IFLE(0x9e, BRANCH),
++ IF_ICMPEQ(0x9f, BRANCH),
++ IF_ICMPNE(0xa0, BRANCH),
++ IF_ICMPLT(0xa1, BRANCH),
++ IF_ICMPGE(0xa2, BRANCH),
++ IF_ICMPGT(0xa3, BRANCH),
++ IF_ICMPLE(0xa4, BRANCH),
++ IF_ACMPEQ(0xa5, BRANCH),
++ IF_ACMPNE(0xa6, BRANCH),
++ GOTO(0xa7, BRANCH),
++ JSR(0xa8, BRANCH),
++ RET(0xa9, LOCAL),
++ TABLESWITCH(0xaa, DYNAMIC),
++ LOOKUPSWITCH(0xab, DYNAMIC),
++ IRETURN(0xac),
++ LRETURN(0xad),
++ FRETURN(0xae),
++ DRETURN(0xaf),
++ ARETURN(0xb0),
++ RETURN(0xb1),
++ GETSTATIC(0xb2, CPREF_W),
++ PUTSTATIC(0xb3, CPREF_W),
++ GETFIELD(0xb4, CPREF_W),
++ PUTFIELD(0xb5, CPREF_W),
++ INVOKEVIRTUAL(0xb6, CPREF_W),
++ INVOKESPECIAL(0xb7, CPREF_W),
++ INVOKESTATIC(0xb8, CPREF_W),
++ INVOKEINTERFACE(0xb9, CPREF_W_UBYTE_ZERO),
++ // unused 0xba
++ NEW(0xbb, CPREF_W),
++ NEWARRAY(0xbc, ATYPE),
++ ANEWARRAY(0xbd, CPREF_W),
++ ARRAYLENGTH(0xbe),
++ ATHROW(0xbf),
++ CHECKCAST(0xc0, CPREF_W),
++ INSTANCEOF(0xc1, CPREF_W),
++ MONITORENTER(0xc2),
++ MONITOREXIT(0xc3),
++ // wide 0xc4
++ MULTIANEWARRAY(0xc5, CPREF_W_UBYTE),
++ IFNULL(0xc6, BRANCH),
++ IFNONNULL(0xc7, BRANCH),
++ GOTO_W(0xc8, BRANCH_W),
++ JSR_W(0xc9, BRANCH_W),
++ // impdep 0xfe: PicoJava nonpriv
++ // impdep 0xff: Picojava priv
++
++ // wide opcodes
++ ILOAD_W(0xc415, WIDE_CPREF_W),
++ LLOAD_W(0xc416, WIDE_CPREF_W),
++ FLOAD_W(0xc417, WIDE_CPREF_W),
++ DLOAD_W(0xc418, WIDE_CPREF_W),
++ ALOAD_W(0xc419, WIDE_CPREF_W),
++ ISTORE_W(0xc436, WIDE_CPREF_W),
++ LSTORE_W(0xc437, WIDE_CPREF_W),
++ FSTORE_W(0xc438, WIDE_CPREF_W),
++ DSTORE_W(0xc439, WIDE_CPREF_W),
++ ASTORE_W(0xc43a, WIDE_CPREF_W),
++ IINC_W(0xc484, WIDE_CPREF_W_SHORT),
++ RET_W(0xc4a9, WIDE_CPREF_W),
++
++ // PicoJava nonpriv instructions
++ LOAD_UBYTE(PICOJAVA, 0xfe00),
++ LOAD_BYTE(PICOJAVA, 0xfe01),
++ LOAD_CHAR(PICOJAVA, 0xfe02),
++ LOAD_SHORT(PICOJAVA, 0xfe03),
++ LOAD_WORD(PICOJAVA, 0xfe04),
++ RET_FROM_SUB(PICOJAVA, 0xfe05),
++ LOAD_CHAR_OE(PICOJAVA, 0xfe0a),
++ LOAD_SHORT_OE(PICOJAVA, 0xfe0b),
++ LOAD_WORD_OE(PICOJAVA, 0xfe0c),
++ NCLOAD_UBYTE(PICOJAVA, 0xfe10),
++ NCLOAD_BYTE(PICOJAVA, 0xfe11),
++ NCLOAD_CHAR(PICOJAVA, 0xfe12),
++ NCLOAD_SHORT(PICOJAVA, 0xfe13),
++ NCLOAD_WORD(PICOJAVA, 0xfe14),
++ NCLOAD_CHAR_OE(PICOJAVA, 0xfe1a),
++ NCLOAD_SHORT_OE(PICOJAVA, 0xfe1b),
++ NCLOAD_WORD_OE(PICOJAVA, 0xfe1c),
++ CACHE_FLUSH(PICOJAVA, 0xfe1e),
++ STORE_BYTE(PICOJAVA, 0xfe20),
++ STORE_SHORT(PICOJAVA, 0xfe22),
++ STORE_WORD(PICOJAVA, 0xfe24),
++ STORE_SHORT_OE(PICOJAVA, 0xfe2a),
++ STORE_WORD_OE(PICOJAVA, 0xfe2c),
++ NCSTORE_BYTE(PICOJAVA, 0xfe30),
++ NCSTORE_SHORT(PICOJAVA, 0xfe32),
++ NCSTORE_WORD(PICOJAVA, 0xfe34),
++ NCSTORE_SHORT_OE(PICOJAVA, 0xfe3a),
++ NCSTORE_WORD_OE(PICOJAVA, 0xfe3c),
++ ZERO_LINE(PICOJAVA, 0xfe3e),
++ ENTER_SYNC_METHOD(PICOJAVA, 0xfe3f),
++
++ // PicoJava priv instructions
++ PRIV_LOAD_UBYTE(PICOJAVA, 0xff00),
++ PRIV_LOAD_BYTE(PICOJAVA, 0xff01),
++ PRIV_LOAD_CHAR(PICOJAVA, 0xff02),
++ PRIV_LOAD_SHORT(PICOJAVA, 0xff03),
++ PRIV_LOAD_WORD(PICOJAVA, 0xff04),
++ PRIV_RET_FROM_TRAP(PICOJAVA, 0xff05),
++ PRIV_READ_DCACHE_TAG(PICOJAVA, 0xff06),
++ PRIV_READ_DCACHE_DATA(PICOJAVA, 0xff07),
++ PRIV_LOAD_CHAR_OE(PICOJAVA, 0xff0a),
++ PRIV_LOAD_SHORT_OE(PICOJAVA, 0xff0b),
++ PRIV_LOAD_WORD_OE(PICOJAVA, 0xff0c),
++ PRIV_READ_ICACHE_TAG(PICOJAVA, 0xff0e),
++ PRIV_READ_ICACHE_DATA(PICOJAVA, 0xff0f),
++ PRIV_NCLOAD_UBYTE(PICOJAVA, 0xff10),
++ PRIV_NCLOAD_BYTE(PICOJAVA, 0xff11),
++ PRIV_NCLOAD_CHAR(PICOJAVA, 0xff12),
++ PRIV_NCLOAD_SHORT(PICOJAVA, 0xff13),
++ PRIV_NCLOAD_WORD(PICOJAVA, 0xff14),
++ PRIV_POWERDOWN(PICOJAVA, 0xff16),
++ PRIV_READ_SCACHE_DATA(PICOJAVA, 0xff17),
++ PRIV_NCLOAD_CHAR_OE(PICOJAVA, 0xff1a),
++ PRIV_NCLOAD_SHORT_OE(PICOJAVA, 0xff1b),
++ PRIV_NCLOAD_WORD_OE(PICOJAVA, 0xff1c),
++ PRIV_CACHE_FLUSH(PICOJAVA, 0xff1e),
++ PRIV_CACHE_INDEX_FLUSH(PICOJAVA, 0xff1f),
++ PRIV_STORE_BYTE(PICOJAVA, 0xff20),
++ PRIV_STORE_SHORT(PICOJAVA, 0xff22),
++ PRIV_STORE_WORD(PICOJAVA, 0xff24),
++ PRIV_WRITE_DCACHE_TAG(PICOJAVA, 0xff26),
++ PRIV_WRITE_DCACHE_DATA(PICOJAVA, 0xff27),
++ PRIV_STORE_SHORT_OE(PICOJAVA, 0xff2a),
++ PRIV_STORE_WORD_OE(PICOJAVA, 0xff2c),
++ PRIV_WRITE_ICACHE_TAG(PICOJAVA, 0xff2e),
++ PRIV_WRITE_ICACHE_DATA(PICOJAVA, 0xff2f),
++ PRIV_NCSTORE_BYTE(PICOJAVA, 0xff30),
++ PRIV_NCSTORE_SHORT(PICOJAVA, 0xff32),
++ PRIV_NCSTORE_WORD(PICOJAVA, 0xff34),
++ PRIV_RESET(PICOJAVA, 0xff36),
++ PRIV_WRITE_SCACHE_DATA(PICOJAVA, 0xff37),
++ PRIV_NCSTORE_SHORT_OE(PICOJAVA, 0xff3a),
++ PRIV_NCSTORE_WORD_OE(PICOJAVA, 0xff3c),
++ PRIV_ZERO_LINE(PICOJAVA, 0xff3e),
++ PRIV_READ_REG_0(PICOJAVA, 0xff40),
++ PRIV_READ_REG_1(PICOJAVA, 0xff41),
++ PRIV_READ_REG_2(PICOJAVA, 0xff42),
++ PRIV_READ_REG_3(PICOJAVA, 0xff43),
++ PRIV_READ_REG_4(PICOJAVA, 0xff44),
++ PRIV_READ_REG_5(PICOJAVA, 0xff45),
++ PRIV_READ_REG_6(PICOJAVA, 0xff46),
++ PRIV_READ_REG_7(PICOJAVA, 0xff47),
++ PRIV_READ_REG_8(PICOJAVA, 0xff48),
++ PRIV_READ_REG_9(PICOJAVA, 0xff49),
++ PRIV_READ_REG_10(PICOJAVA, 0xff4a),
++ PRIV_READ_REG_11(PICOJAVA, 0xff4b),
++ PRIV_READ_REG_12(PICOJAVA, 0xff4c),
++ PRIV_READ_REG_13(PICOJAVA, 0xff4d),
++ PRIV_READ_REG_14(PICOJAVA, 0xff4e),
++ PRIV_READ_REG_15(PICOJAVA, 0xff4f),
++ PRIV_READ_REG_16(PICOJAVA, 0xff50),
++ PRIV_READ_REG_17(PICOJAVA, 0xff51),
++ PRIV_READ_REG_18(PICOJAVA, 0xff52),
++ PRIV_READ_REG_19(PICOJAVA, 0xff53),
++ PRIV_READ_REG_20(PICOJAVA, 0xff54),
++ PRIV_READ_REG_21(PICOJAVA, 0xff55),
++ PRIV_READ_REG_22(PICOJAVA, 0xff56),
++ PRIV_READ_REG_23(PICOJAVA, 0xff57),
++ PRIV_READ_REG_24(PICOJAVA, 0xff58),
++ PRIV_READ_REG_25(PICOJAVA, 0xff59),
++ PRIV_READ_REG_26(PICOJAVA, 0xff5a),
++ PRIV_READ_REG_27(PICOJAVA, 0xff5b),
++ PRIV_READ_REG_28(PICOJAVA, 0xff5c),
++ PRIV_READ_REG_29(PICOJAVA, 0xff5d),
++ PRIV_READ_REG_30(PICOJAVA, 0xff5e),
++ PRIV_READ_REG_31(PICOJAVA, 0xff5f),
++ PRIV_WRITE_REG_0(PICOJAVA, 0xff60),
++ PRIV_WRITE_REG_1(PICOJAVA, 0xff61),
++ PRIV_WRITE_REG_2(PICOJAVA, 0xff62),
++ PRIV_WRITE_REG_3(PICOJAVA, 0xff63),
++ PRIV_WRITE_REG_4(PICOJAVA, 0xff64),
++ PRIV_WRITE_REG_5(PICOJAVA, 0xff65),
++ PRIV_WRITE_REG_6(PICOJAVA, 0xff66),
++ PRIV_WRITE_REG_7(PICOJAVA, 0xff67),
++ PRIV_WRITE_REG_8(PICOJAVA, 0xff68),
++ PRIV_WRITE_REG_9(PICOJAVA, 0xff69),
++ PRIV_WRITE_REG_10(PICOJAVA, 0xff6a),
++ PRIV_WRITE_REG_11(PICOJAVA, 0xff6b),
++ PRIV_WRITE_REG_12(PICOJAVA, 0xff6c),
++ PRIV_WRITE_REG_13(PICOJAVA, 0xff6d),
++ PRIV_WRITE_REG_14(PICOJAVA, 0xff6e),
++ PRIV_WRITE_REG_15(PICOJAVA, 0xff6f),
++ PRIV_WRITE_REG_16(PICOJAVA, 0xff70),
++ PRIV_WRITE_REG_17(PICOJAVA, 0xff71),
++ PRIV_WRITE_REG_18(PICOJAVA, 0xff72),
++ PRIV_WRITE_REG_19(PICOJAVA, 0xff73),
++ PRIV_WRITE_REG_20(PICOJAVA, 0xff74),
++ PRIV_WRITE_REG_21(PICOJAVA, 0xff75),
++ PRIV_WRITE_REG_22(PICOJAVA, 0xff76),
++ PRIV_WRITE_REG_23(PICOJAVA, 0xff77),
++ PRIV_WRITE_REG_24(PICOJAVA, 0xff78),
++ PRIV_WRITE_REG_25(PICOJAVA, 0xff79),
++ PRIV_WRITE_REG_26(PICOJAVA, 0xff7a),
++ PRIV_WRITE_REG_27(PICOJAVA, 0xff7b),
++ PRIV_WRITE_REG_28(PICOJAVA, 0xff7c),
++ PRIV_WRITE_REG_29(PICOJAVA, 0xff7d),
++ PRIV_WRITE_REG_30(PICOJAVA, 0xff7e),
++ PRIV_WRITE_REG_31(PICOJAVA, 0xff7f);
++
++ Opcode(int opcode) {
++ this(STANDARD, opcode, NO_OPERANDS);
++ }
++
++ Opcode(int opcode, Instruction.Kind kind) {
++ this(STANDARD, opcode, kind);
++ }
++
++ Opcode(Set set, int opcode) {
++ this(set, opcode, (set == STANDARD ? NO_OPERANDS : WIDE_NO_OPERANDS));
++ }
++
++ Opcode(Set set, int opcode, Instruction.Kind kind) {
++ this.set = set;
++ this.opcode = opcode;
++ this.kind = kind;
++ }
++
++ public final Set set;
++ public final int opcode;
++ public final Instruction.Kind kind;
++
++ /** Get the Opcode for a simple standard 1-byte opcode. */
++ public static Opcode get(int opcode) {
++ return stdOpcodes[opcode];
++ }
++
++ /** Get the Opcode for 1- or 2-byte opcode. */
++ public static Opcode get(int opcodePrefix, int opcode) {
++ Opcode[] block = getOpcodeBlock(opcodePrefix);
++ return (block == null ? null : block[opcode]);
++ }
++
++ private static Opcode[] getOpcodeBlock(int opcodePrefix) {
++ switch (opcodePrefix) {
++ case 0:
++ return stdOpcodes;
++ case WIDE:
++ return wideOpcodes;
++ case NONPRIV:
++ return nonPrivOpcodes;
++ case PRIV:
++ return privOpcodes;
++ default:
++ return null;
++ }
++
++ }
++
++ private static Opcode[] stdOpcodes = new Opcode[256];
++ private static Opcode[] wideOpcodes = new Opcode[256];
++ private static Opcode[] nonPrivOpcodes = new Opcode[256];
++ private static Opcode[] privOpcodes = new Opcode[256];
++ static {
++ for (Opcode o: values())
++ getOpcodeBlock(o.opcode >> 8)[o.opcode & 0xff] = o;
++ }
++
++ /** The byte prefix for the wide instructions. */
++ public static final int WIDE = 0xc4;
++ /** The byte prefix for the PicoJava nonpriv instructions. */
++ public static final int NONPRIV = 0xfe;
++ /** The byte prefix for the PicoJava priv instructions. */
++ public static final int PRIV = 0xff;
++
++ public enum Set {
++ /** Standard opcodes. */
++ STANDARD,
++ /** Legacy support for PicoJava opcodes. */
++ PICOJAVA };
++}
+diff -r bfd7bb421825 -r 3cbaa3d49584 src/share/classes/com/sun/tools/javap/CodeWriter.java
+--- langtools/src/share/classes/com/sun/tools/javap/CodeWriter.java Tue Oct 22 01:03:49 2013 +0100
++++ langtools/src/share/classes/com/sun/tools/javap/CodeWriter.java Thu Oct 24 02:40:06 2013 +0100
+@@ -30,9 +30,12 @@
+ import com.sun.tools.classfile.ConstantPool;
+ import com.sun.tools.classfile.ConstantPoolException;
+ import com.sun.tools.classfile.DescriptorException;
++import com.sun.tools.classfile.Instruction;
++import com.sun.tools.classfile.Instruction.TypeKind;
+ import com.sun.tools.classfile.Method;
++import com.sun.tools.classfile.Opcode;
+
+-import static com.sun.tools.classfile.OpCodes.*;
++//import static com.sun.tools.classfile.OpCodes.*;
+
+ /*
+ * Write the contents of a Code attribute.
+@@ -87,218 +90,92 @@
+ }
+
+ public void writeInstrs(Code_attribute attr) {
+- try {
+- for (int pc = 0; pc < attr.code_length;) {
+- print(" " + pc + ":\t");
+- pc += writeInstr(attr, pc);
+- println();
++ for (Instruction instr: attr.getInstructions()) {
++ try {
++ writeInstr(instr);
++ } catch (ArrayIndexOutOfBoundsException e) {
++ println(report("error at or after byte " + instr.getPC()));
++ break;
+ }
+- } catch (Code_attribute.InvalidIndex e) {
+- println(report(e));
+ }
+ }
+
+- public int writeInstr(Code_attribute attr, int pc)
+- throws Code_attribute.InvalidIndex {
+- String lP = "";
+- int opcode = attr.getUnsignedByte(pc);
+- int opcode2;
+- String mnem;
+- switch (opcode) {
+- case opc_nonpriv:
+- case opc_priv: {
+- opcode2 = attr.getUnsignedByte(pc + 1);
+- mnem = opcName((opcode << 8) + opcode2);
+- if (mnem == null) {
+- mnem = opcName(opcode) + " " + opcode2;
+- }
+- print(mnem);
+- return 2;
++ public void writeInstr(Instruction instr) {
++ print(" " + instr.getPC() + ":\t");
++ print(instr.getMnemonic());
++ instr.accept(instructionPrinter, null);
++ println();
++ }
++ // where
++ Instruction.KindVisitor<Void,Void> instructionPrinter =
++ new Instruction.KindVisitor<Void,Void>() {
++
++ public Void visitNoOperands(Instruction instr, Void p) {
++ return null;
++ }
++
++ public Void visitArrayType(Instruction instr, TypeKind kind, Void p) {
++ print(" " + kind.name);
++ return null;
++ }
++
++ public Void visitBranch(Instruction instr, int offset, Void p) {
++ print("\t" + (instr.getPC() + offset));
++ return null;
++ }
++
++ public Void visitConstantPoolRef(Instruction instr, int index, Void p) {
++ print("\t#" + index + "; //");
++ printConstant(index);
++ return null;
++ }
++
++ public Void visitConstantPoolRefAndValue(Instruction instr, int index, int value, Void p) {
++ print("\t#" + index + ", " + value + "; //");
++ printConstant(index);
++ return null;
++ }
++
++ public Void visitLocal(Instruction instr, int index, Void p) {
++ print("\t" + index);
++ return null;
++ }
++
++ public Void visitLocalAndValue(Instruction instr, int index, int value, Void p) {
++ print("\t" + index + ", " + value);
++ return null;
++ }
++
++ public Void visitLookupSwitch(Instruction instr, int default_, int npairs, int[] matches, int[] offsets) {
++ int pc = instr.getPC();
++ print("{ //" + npairs);
++ for (int i = 0; i < npairs; i++) {
++ print("\n\t\t" + matches[i] + ": " + (pc + offsets[i]) + ";");
+ }
+- case opc_wide: {
+- opcode2 = attr.getUnsignedByte(pc + 1);
+- mnem = opcName((opcode << 8) + opcode2);
+- if (mnem == null) {
+- print("bytecode " + opcode);
+- return 1;
+- }
+- print(mnem + " " + attr.getUnsignedShort(pc + 2));
+- if (opcode2 == opc_iinc) {
+- print(", " + attr.getShort(pc + 4));
+- return 6;
+- }
+- return 4;
++ print("\n\t\tdefault: " + (pc + default_) + " }");
++ return null;
++ }
++
++ public Void visitTableSwitch(Instruction instr, int default_, int low, int high, int[] offsets) {
++ int pc = instr.getPC();
++ print("{ //" + low + " to " + high);
++ for (int i = 0; i < offsets.length; i++) {
++ print("\n\t\t" + (low + i) + ": " + (pc + offsets[i]) + ";");
+ }
++ print("\n\t\tdefault: " + (pc + default_) + " }");
++ return null;
+ }
+- mnem = opcName(opcode);
+- if (mnem == null) {
+- print("bytecode " + opcode);
+- return 1;
++
++ public Void visitValue(Instruction instr, int value, Void p) {
++ print("\t" + value);
++ return null;
+ }
+- if (opcode > opc_jsr_w) {
+- print("bytecode " + opcode);
+- return 1;
++
++ public Void visitUnknown(Instruction instr, Void p) {
++ return null;
+ }
+- print(opcName(opcode));
+- switch (opcode) {
+- case opc_aload:
+- case opc_astore:
+- case opc_fload:
+- case opc_fstore:
+- case opc_iload:
+- case opc_istore:
+- case opc_lload:
+- case opc_lstore:
+- case opc_dload:
+- case opc_dstore:
+- case opc_ret:
+- print("\t" + attr.getUnsignedByte(pc + 1));
+- return 2;
+- case opc_iinc:
+- print("\t" + attr.getUnsignedByte(pc + 1) + ", " + attr.getByte(pc + 2));
+- return 3;
+- case opc_tableswitch:
+- {
+- int tb = align(pc + 1);
+- int default_skip = attr.getInt(tb);
+- int low = attr.getInt(tb + 4);
+- int high = attr.getInt(tb + 8);
+- int count = high - low;
+- print("{ //" + low + " to " + high);
+- for (int i = 0; i <= count; i++) {
+- print("\n\t\t" + (i + low) + ": " + lP + (pc + attr.getInt(tb + 12 + 4 * i)) + ";");
+- }
+- print("\n\t\tdefault: " + lP + (default_skip + pc) + " }");
+- return tb - pc + 16 + count * 4;
+- }
+- case opc_lookupswitch:
+- {
+- int tb = align(pc + 1);
+- int default_skip = attr.getInt(tb);
+- int npairs = attr.getInt(tb + 4);
+- print("{ //" + npairs);
+- for (int i = 1; i <= npairs; i++) {
+- print("\n\t\t" + attr.getInt(tb + i * 8) + ": " + lP + (pc + attr.getInt(tb + 4 + i * 8)) + ";");
+- }
+- print("\n\t\tdefault: " + lP + (default_skip + pc) + " }");
+- return tb - pc + (npairs + 1) * 8;
+- }
+- case opc_newarray:
+- int type = attr.getUnsignedByte(pc + 1);
+- switch (type) {
+- case T_BOOLEAN:
+- print(" boolean");
+- break;
+- case T_BYTE:
+- print(" byte");
+- break;
+- case T_CHAR:
+- print(" char");
+- break;
+- case T_SHORT:
+- print(" short");
+- break;
+- case T_INT:
+- print(" int");
+- break;
+- case T_LONG:
+- print(" long");
+- break;
+- case T_FLOAT:
+- print(" float");
+- break;
+- case T_DOUBLE:
+- print(" double");
+- break;
+- case T_CLASS:
+- print(" class");
+- break;
+- default:
+- print(" BOGUS TYPE:" + type);
+- }
+- return 2;
+- case opc_anewarray:
+- {
+- int index = attr.getUnsignedShort(pc + 1);
+- print("\t#" + index + "; //");
+- printConstant(index);
+- return 3;
+- }
+- case opc_sipush:
+- print("\t" + attr.getShort(pc + 1));
+- return 3;
+- case opc_bipush:
+- print("\t" + attr.getByte(pc + 1));
+- return 2;
+- case opc_ldc:
+- {
+- int index = attr.getUnsignedByte(pc + 1);
+- print("\t#" + index + "; //");
+- printConstant(index);
+- return 2;
+- }
+- case opc_ldc_w:
+- case opc_ldc2_w:
+- case opc_instanceof:
+- case opc_checkcast:
+- case opc_new:
+- case opc_putstatic:
+- case opc_getstatic:
+- case opc_putfield:
+- case opc_getfield:
+- case opc_invokevirtual:
+- case opc_invokespecial:
+- case opc_invokestatic:
+- {
+- int index = attr.getUnsignedShort(pc + 1);
+- print("\t#" + index + "; //");
+- printConstant(index);
+- return 3;
+- }
+- case opc_invokeinterface:
+- {
+- int index = attr.getUnsignedShort(pc + 1);
+- int nargs = attr.getUnsignedByte(pc + 3);
+- print("\t#" + index + ", " + nargs + "; //");
+- printConstant(index);
+- return 5;
+- }
+- case opc_multianewarray:
+- {
+- int index = attr.getUnsignedShort(pc + 1);
+- int dimensions = attr.getUnsignedByte(pc + 3);
+- print("\t#" + index + ", " + dimensions + "; //");
+- printConstant(index);
+- return 4;
+- }
+- case opc_jsr:
+- case opc_goto:
+- case opc_ifeq:
+- case opc_ifge:
+- case opc_ifgt:
+- case opc_ifle:
+- case opc_iflt:
+- case opc_ifne:
+- case opc_if_icmpeq:
+- case opc_if_icmpne:
+- case opc_if_icmpge:
+- case opc_if_icmpgt:
+- case opc_if_icmple:
+- case opc_if_icmplt:
+- case opc_if_acmpeq:
+- case opc_if_acmpne:
+- case opc_ifnull:
+- case opc_ifnonnull:
+- print("\t" + lP + (pc + attr.getShort(pc + 1)));
+- return 3;
+- case opc_jsr_w:
+- case opc_goto_w:
+- print("\t" + lP + (pc + attr.getInt(pc + 1)));
+- return 5;
+- default:
+- return 1;
+- }
+- }
++ };
++
+
+ public void writeExceptionTable(Code_attribute attr) {
+ if (attr.exception_table_langth > 0) {