hotspot/agent/src/share/classes/sun/jvm/hotspot/interpreter/Bytecode.java
changeset 10251 71b8938a2821
parent 5547 f4b087cbb361
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/interpreter/Bytecode.java	Wed Jul 20 18:04:17 2011 -0700
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/interpreter/Bytecode.java	Thu Jul 21 08:38:25 2011 -0700
@@ -26,6 +26,7 @@
 
 import sun.jvm.hotspot.oops.*;
 import sun.jvm.hotspot.utilities.*;
+import sun.jvm.hotspot.runtime.VM;
 
 public class Bytecode {
   Method method;
@@ -45,6 +46,23 @@
     return Bits.roundTo(bci + offset, jintSize) - bci;
   }
 
+  public int     getIndexU1()               { return method.getBytecodeOrBPAt(bci() + 1) & 0xFF; }
+  public int     getIndexU2(int bc, boolean isWide) {
+    if (can_use_native_byte_order(bc, isWide)) {
+      return method.getNativeShortArg(bci() + (isWide ? 2 : 1)) & 0xFFFF;
+    }
+    return method.getBytecodeShortArg(bci() + (isWide ? 2 : 1)) & 0xFFFF;
+  }
+  public int     getIndexU4()               { return method.getNativeIntArg(bci() + 1); }
+  public boolean hasIndexU4()               { return code() == Bytecodes._invokedynamic; }
+
+  public int     getIndexU1Cpcache()        { return method.getBytecodeOrBPAt(bci() + 1) & 0xFF; }
+  public int     getIndexU2Cpcache()        { return method.getNativeShortArg(bci() + 1) & 0xFFFF; }
+
+  static boolean can_use_native_byte_order(int bc, boolean is_wide) {
+    return (VM.getVM().isBigEndian() || Bytecodes.native_byte_order(bc /*, is_wide*/));
+  }
+
   int javaSignedWordAt(int offset) {
     return method.getBytecodeIntArg(bci + offset);
   }