org.jikesrvm.osr
Class ExecutionState

java.lang.Object
  extended by org.jikesrvm.osr.ExecutionState
All Implemented Interfaces:
BytecodeConstants, ClassLoaderConstants, OSRConstants, SizeConstants

public class ExecutionState
extends Object
implements OSRConstants, BytecodeConstants


Field Summary
 int bcIndex
          the program pointer (bytecode index)
 int callee_cmid
          callee's compiled method id
 ExecutionState callerState
          the caller's state if this method is an inlinee
 int cmid
          the compiled method id of the activation (a Java method may have multiple version of compiled method
 Offset fpOffset
          the offset of frame pointer of the activation.
private  short maxStackHeight
           
 NormalMethod meth
          the method of which the execution state belongs to
private  int objnum
           
private  Object[] objs
           
private  int rid
           
 RVMThread thread
          the thread on which the activation is running
 Offset tsFPOffset
          the callee (threadSwitch)'s frame pointer of this activation.
 LinkedList<VariableElement> varElms
          runtime values of locals and stack expressions at the bytecode index Each element is an object of VariableElement.
 
Fields inherited from interface org.jikesrvm.osr.OSRConstants
ACONST, BCI_MASK, BCI_SHIFT, CLEANREFS, DOUBLE, FLOAT, GETREFAT, HIGH_64BIT, ICONST, IEI_MASK, IEI_SHIFT, INT, INVALID_BCI, INVALID_IEI, KIND_MASK, KIND_SHIFT, LCONST, LOCAL, LONG, NEXT_BIT, NO_OSR_ENTRY, NUM_MASK, NUM_SHIFT, OFFSET_MASK, OFFSET_SHIFT, OSRI_MASK, OSRI_SHIFT, PHYREG, PSEUDO_CheckCast, PSEUDO_InvokeCompiledMethod, PSEUDO_InvokeStatic, PSEUDO_LoadDoubleConst, PSEUDO_LoadFloatConst, PSEUDO_LoadIntConst, PSEUDO_LoadLongConst, PSEUDO_LoadRetAddrConst, PSEUDO_LoadWordConst, PSEUDO_ParamInitEnd, REF, RET_ADDR, ReturnAddressTypeCode, SPILL, STACK, TCODE_MASK, TCODE_SHIFT, VTYPE_MASK, VTYPE_SHIFT, WORD, WordTypeCode
 
Fields inherited from interface org.jikesrvm.SizeConstants
BITS_IN_ADDRESS, BITS_IN_BOOLEAN, BITS_IN_BYTE, BITS_IN_CHAR, BITS_IN_DOUBLE, BITS_IN_EXTENT, BITS_IN_FLOAT, BITS_IN_INT, BITS_IN_LONG, BITS_IN_OFFSET, BITS_IN_PAGE, BITS_IN_SHORT, BITS_IN_WORD, BYTES_IN_ADDRESS, BYTES_IN_BOOLEAN, BYTES_IN_BYTE, BYTES_IN_CHAR, BYTES_IN_DOUBLE, BYTES_IN_EXTENT, BYTES_IN_FLOAT, BYTES_IN_INT, BYTES_IN_LONG, BYTES_IN_OFFSET, BYTES_IN_PAGE, BYTES_IN_SHORT, BYTES_IN_WORD, LOG_BITS_IN_ADDRESS, LOG_BITS_IN_BOOLEAN, LOG_BITS_IN_BYTE, LOG_BITS_IN_CHAR, LOG_BITS_IN_DOUBLE, LOG_BITS_IN_EXTENT, LOG_BITS_IN_FLOAT, LOG_BITS_IN_INT, LOG_BITS_IN_LONG, LOG_BITS_IN_OFFSET, LOG_BITS_IN_PAGE, LOG_BITS_IN_SHORT, LOG_BITS_IN_WORD, LOG_BYTES_IN_ADDRESS, LOG_BYTES_IN_BOOLEAN, LOG_BYTES_IN_BYTE, LOG_BYTES_IN_CHAR, LOG_BYTES_IN_DOUBLE, LOG_BYTES_IN_EXTENT, LOG_BYTES_IN_FLOAT, LOG_BYTES_IN_INT, LOG_BYTES_IN_LONG, LOG_BYTES_IN_OFFSET, LOG_BYTES_IN_PAGE, LOG_BYTES_IN_SHORT, LOG_BYTES_IN_WORD
 
Fields inherited from interface org.jikesrvm.classloader.ClassLoaderConstants
ACC_ABSTRACT, ACC_ANNOTATION, ACC_ENUM, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_VOLATILE, APPLICABLE_TO_CLASSES, APPLICABLE_TO_FIELDS, APPLICABLE_TO_METHODS, ArrayTypeCode, BooleanTypeCode, BRIDGE, ByteTypeCode, CharTypeCode, CLASS_INITIALIZED, CLASS_INITIALIZER_FAILED, CLASS_INITIALIZING, CLASS_INSTANTIATED, CLASS_LOADED, CLASS_RESOLVED, CLASS_VACANT, ClassTypeCode, CP_CLASS, CP_DOUBLE, CP_FLOAT, CP_INT, CP_LONG, CP_MEMBER, CP_STRING, CP_UTF, DoubleTypeCode, FloatTypeCode, IntTypeCode, LongTypeCode, ShortTypeCode, TAG_DOUBLE, TAG_FIELDREF, TAG_FLOAT, TAG_INT, TAG_INTERFACE_METHODREF, TAG_LONG, TAG_MEMBERNAME_AND_DESCRIPTOR, TAG_METHODREF, TAG_STRING, TAG_TYPEREF, TAG_UNUSED, TAG_UTF, VARARGS, VoidTypeCode
 
Fields inherited from interface org.jikesrvm.classloader.BytecodeConstants
JBC_aaload, JBC_aastore, JBC_aconst_null, JBC_aload, JBC_aload_0, JBC_aload_1, JBC_aload_2, JBC_aload_3, JBC_anewarray, JBC_areturn, JBC_arraylength, JBC_astore, JBC_astore_0, JBC_astore_1, JBC_astore_2, JBC_astore_3, JBC_athrow, JBC_baload, JBC_bastore, JBC_bipush, JBC_caload, JBC_castore, JBC_checkcast, JBC_d2f, JBC_d2i, JBC_d2l, JBC_dadd, JBC_daload, JBC_dastore, JBC_dcmpg, JBC_dcmpl, JBC_dconst_0, JBC_dconst_1, JBC_ddiv, JBC_dload, JBC_dload_0, JBC_dload_1, JBC_dload_2, JBC_dload_3, JBC_dmul, JBC_dneg, JBC_drem, JBC_dreturn, JBC_dstore, JBC_dstore_0, JBC_dstore_1, JBC_dstore_2, JBC_dstore_3, JBC_dsub, JBC_dup, JBC_dup_x1, JBC_dup_x2, JBC_dup2, JBC_dup2_x1, JBC_dup2_x2, JBC_f2d, JBC_f2i, JBC_f2l, JBC_fadd, JBC_faload, JBC_fastore, JBC_fcmpg, JBC_fcmpl, JBC_fconst_0, JBC_fconst_1, JBC_fconst_2, JBC_fdiv, JBC_fload, JBC_fload_0, JBC_fload_1, JBC_fload_2, JBC_fload_3, JBC_fmul, JBC_fneg, JBC_frem, JBC_freturn, JBC_fstore, JBC_fstore_0, JBC_fstore_1, JBC_fstore_2, JBC_fstore_3, JBC_fsub, JBC_getfield, JBC_getstatic, JBC_goto, JBC_goto_w, JBC_i2d, JBC_i2f, JBC_i2l, JBC_iadd, JBC_iaload, JBC_iand, JBC_iastore, JBC_iconst_0, JBC_iconst_1, JBC_iconst_2, JBC_iconst_3, JBC_iconst_4, JBC_iconst_5, JBC_iconst_m1, JBC_idiv, JBC_if_acmpeq, JBC_if_acmpne, JBC_if_icmpeq, JBC_if_icmpge, JBC_if_icmpgt, JBC_if_icmple, JBC_if_icmplt, JBC_if_icmpne, JBC_ifeq, JBC_ifge, JBC_ifgt, JBC_ifle, JBC_iflt, JBC_ifne, JBC_ifnonnull, JBC_ifnull, JBC_iinc, JBC_iload, JBC_iload_0, JBC_iload_1, JBC_iload_2, JBC_iload_3, JBC_impdep1, JBC_impdep2, JBC_imul, JBC_ineg, JBC_instanceof, JBC_int2byte, JBC_int2char, JBC_int2short, JBC_invokeinterface, JBC_invokespecial, JBC_invokestatic, JBC_invokevirtual, JBC_ior, JBC_irem, JBC_ireturn, JBC_ishl, JBC_ishr, JBC_istore, JBC_istore_0, JBC_istore_1, JBC_istore_2, JBC_istore_3, JBC_isub, JBC_iushr, JBC_ixor, JBC_jsr, JBC_jsr_w, JBC_l2d, JBC_l2f, JBC_l2i, JBC_ladd, JBC_laload, JBC_land, JBC_lastore, JBC_lcmp, JBC_lconst_0, JBC_lconst_1, JBC_ldc, JBC_ldc_w, JBC_ldc2_w, JBC_ldiv, JBC_length, JBC_lload, JBC_lload_0, JBC_lload_1, JBC_lload_2, JBC_lload_3, JBC_lmul, JBC_lneg, JBC_lookupswitch, JBC_lor, JBC_lrem, JBC_lreturn, JBC_lshl, JBC_lshr, JBC_lstore, JBC_lstore_0, JBC_lstore_1, JBC_lstore_2, JBC_lstore_3, JBC_lsub, JBC_lushr, JBC_lxor, JBC_monitorenter, JBC_monitorexit, JBC_multianewarray, JBC_name, JBC_new, JBC_newarray, JBC_nop, JBC_pop, JBC_pop2, JBC_putfield, JBC_putstatic, JBC_ret, JBC_return, JBC_saload, JBC_sastore, JBC_sipush, JBC_swap, JBC_tableswitch, JBC_wide, JBC_xxxunusedxxx
 
Constructor Summary
ExecutionState(RVMThread whichThread, Offset framePointerOffset, int compiledMethodID, int pc, Offset tsFPOffset)
          Initializer
 
Method Summary
 void add(VariableElement elm)
          add a VariableElement
 void addFirst(VariableElement elm)
          insert as the first element, for convinience.
private static PseudoBytecode adjustStackHeight(PseudoBytecode last, int height)
           
private  int computeStackHeight(PseudoBytecode head)
           
private static byte[] generateBinaries(PseudoBytecode bhead, int bsize)
           
 byte[] generatePrologue()
          Goes through variable elements and produces specialized prologue using pseudo-bytecode.
 Offset getFPOffset()
           
 short getMaxStackHeight()
           
 NormalMethod getMethod()
           
 RVMThread getThread()
          returns thread.
 Offset getTSFPOffset()
           
private static int paddingBytecode(PseudoBytecode head)
          Adds padding (NOP) at the beginning of pseudo bytecode to make the new bytecode size dividable by 4, then no branch target adjustment is needed in the original code.
 void printState()
          print the current state for debugging
private  PseudoBytecode processElement(VariableElement var, PseudoBytecode tail, int i)
           
 void setMethod(NormalMethod m)
           
 String toString()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

callerState

public ExecutionState callerState
the caller's state if this method is an inlinee


callee_cmid

public int callee_cmid
callee's compiled method id


meth

public NormalMethod meth
the method of which the execution state belongs to


bcIndex

public int bcIndex
the program pointer (bytecode index)


varElms

public LinkedList<VariableElement> varElms
runtime values of locals and stack expressions at the bytecode index Each element is an object of VariableElement.


thread

public RVMThread thread
the thread on which the activation is running


fpOffset

public Offset fpOffset
the offset of frame pointer of the activation.


tsFPOffset

public Offset tsFPOffset
the callee (threadSwitch)'s frame pointer of this activation.


cmid

public int cmid
the compiled method id of the activation (a Java method may have multiple version of compiled method


objs

private Object[] objs

objnum

private int objnum

rid

private int rid

maxStackHeight

private short maxStackHeight
Constructor Detail

ExecutionState

public ExecutionState(RVMThread whichThread,
                      Offset framePointerOffset,
                      int compiledMethodID,
                      int pc,
                      Offset tsFPOffset)
Initializer

Parameters:
whichThread -
framePointerOffset -
compiledMethodID -
pc -
tsFPOffset -
Method Detail

add

public void add(VariableElement elm)
add a VariableElement


addFirst

public void addFirst(VariableElement elm)
insert as the first element, for convinience.


getThread

public RVMThread getThread()
returns thread.


getFPOffset

public Offset getFPOffset()

setMethod

public void setMethod(NormalMethod m)

getMethod

public NormalMethod getMethod()

getTSFPOffset

public Offset getTSFPOffset()

printState

public void printState()
print the current state for debugging


generatePrologue

public byte[] generatePrologue()
Goes through variable elements and produces specialized prologue using pseudo-bytecode.


processElement

private PseudoBytecode processElement(VariableElement var,
                                      PseudoBytecode tail,
                                      int i)

getMaxStackHeight

public short getMaxStackHeight()

computeStackHeight

private int computeStackHeight(PseudoBytecode head)

adjustStackHeight

private static PseudoBytecode adjustStackHeight(PseudoBytecode last,
                                                int height)

paddingBytecode

private static int paddingBytecode(PseudoBytecode head)
Adds padding (NOP) at the beginning of pseudo bytecode to make the new bytecode size dividable by 4, then no branch target adjustment is needed in the original code.

Parameters:
head -
Returns:
the new bytecode size

generateBinaries

private static byte[] generateBinaries(PseudoBytecode bhead,
                                       int bsize)

toString

public String toString()
Overrides:
toString in class Object