org.jikesrvm.compilers.opt.runtimesupport.ia32
Class OptGCMapIterator

java.lang.Object
  extended by org.jikesrvm.mm.mminterface.GCMapIterator
      extended by org.jikesrvm.compilers.opt.runtimesupport.OptGenericGCMapIterator
          extended by org.jikesrvm.compilers.opt.runtimesupport.ia32.OptGCMapIterator
All Implemented Interfaces:
ArchitectureSpecificOpt.OptGCMapIteratorConstants, PhysicalRegisterConstants, OptGCMapIteratorConstants, Constants, HeapLayoutConstants, RegisterConstants, ThinLockConstants, TIBLayoutConstants, SizeConstants
Direct Known Subclasses:
ArchitectureSpecificOpt.OptGCMapIterator

public abstract class OptGCMapIterator
extends OptGenericGCMapIterator
implements SizeConstants

An instance of this class provides iteration across the references represented by a frame built by the OPT compiler.

The architecture-specific version of the GC Map iterator. It inherits its architecture-independent code from OptGenericGCMapIterator. This version is for IA32.


Nested Class Summary
 
Nested classes/interfaces inherited from interface org.jikesrvm.ia32.RegisterConstants
RegisterConstants.FloatingPointMachineRegister, RegisterConstants.FPR, RegisterConstants.GPR, RegisterConstants.MachineRegister, RegisterConstants.MM, RegisterConstants.XMM
 
Field Summary
private static boolean DEBUG
           
(package private) static int SAVE_VOL_SIZE
           
(package private) static int VOL_SIZE
           
 
Fields inherited from class org.jikesrvm.compilers.opt.runtimesupport.OptGenericGCMapIterator
compiledMethod
 
Fields inherited from class org.jikesrvm.mm.mminterface.GCMapIterator
framePtr, registerLocations, thread
 
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.compilers.opt.runtimesupport.ia32.OptGCMapIteratorConstants
FIRST_GCMAP_REG, LAST_GCMAP_REG
 
Fields inherited from interface org.jikesrvm.compilers.opt.regalloc.ia32.PhysicalRegisterConstants
AF, C0, C1, C2, C3, CF, CONDITION_VALUE, DOUBLE_REG, DOUBLE_VALUE, FIRST_DOUBLE, FIRST_INT, FIRST_SPECIAL, FLOAT_VALUE, INT_REG, INT_VALUE, NUM_SPECIALS, NUMBER_TYPE, OF, PF, SF, SPECIAL_REG, ST0, ST1, ZF
 
Fields inherited from interface org.jikesrvm.ia32.RegisterConstants
ALL_FPRS, ALL_GPRS, EAX, EBP, EBX, ECX, EDI, EDX, ESI, ESP, FP0, FP1, FP2, FP3, FP4, FP5, FP6, FP7, INSTRUCTION_WIDTH, LG_INSTRUCTION_WIDTH, MM0, MM1, MM10, MM11, MM12, MM13, MM14, MM15, MM2, MM3, MM4, MM5, MM6, MM7, MM8, MM9, NATIVE_NONVOLATILE_FPRS, NATIVE_NONVOLATILE_GPRS, NATIVE_PARAMETER_FPRS, NATIVE_PARAMETER_GPRS, NATIVE_VOLATILE_FPRS, NATIVE_VOLATILE_GPRS, NONVOLATILE_FPRS, NONVOLATILE_GPRS, NUM_FPRS, NUM_GPRS, NUM_NONVOLATILE_FPRS, NUM_NONVOLATILE_GPRS, NUM_PARAMETER_FPRS, NUM_PARAMETER_GPRS, NUM_RETURN_FPRS, NUM_RETURN_GPRS, NUM_VOLATILE_FPRS, NUM_VOLATILE_GPRS, PARAMETER_FPRS, PARAMETER_GPRS, R0, R1, R10, R11, R12, R13, R14, R15, R2, R3, R4, R5, R6, R7, R8, R9, RETURN_FPRS, RETURN_GPRS, STACK_POINTER, THREAD_REGISTER, VOLATILE_FPRS, VOLATILE_GPRS, XMM0, XMM1, XMM10, XMM11, XMM12, XMM13, XMM14, XMM15, XMM2, XMM3, XMM4, XMM5, XMM6, XMM7, XMM8, XMM9
 
Fields inherited from interface org.jikesrvm.Constants
NOT_REACHED, REFLECTION_FPRS_BITS, REFLECTION_FPRS_MASK, REFLECTION_GPRS_BITS, REFLECTION_GPRS_MASK
 
Fields inherited from interface org.jikesrvm.objectmodel.ThinLockConstants
TL_DEDICATED_U16_OFFSET, TL_DEDICATED_U16_SHIFT, TL_LOCK_COUNT_MASK, TL_LOCK_COUNT_SHIFT, TL_LOCK_COUNT_UNIT, TL_LOCK_ID_MASK, TL_LOCK_ID_SHIFT, TL_NUM_BITS_RC, TL_NUM_BITS_STAT, TL_NUM_BITS_TID, TL_STAT_BIASABLE, TL_STAT_FAT, TL_STAT_MASK, TL_STAT_SHIFT, TL_STAT_THIN, TL_THREAD_ID_MASK, TL_THREAD_ID_SHIFT, TL_UNLOCK_MASK
 
Fields inherited from interface org.jikesrvm.objectmodel.TIBLayoutConstants
IMT_METHOD_SLOTS, NEEDS_DYNAMIC_LINK, TIB_ARRAY_ELEMENT_TIB_INDEX, TIB_DOES_IMPLEMENT_INDEX, TIB_FIRST_SPECIALIZED_METHOD_INDEX, TIB_FIRST_VIRTUAL_METHOD_INDEX, TIB_INTERFACE_DISPATCH_TABLE_INDEX, TIB_SUPERCLASS_IDS_INDEX, TIB_TYPE_INDEX
 
Fields inherited from interface org.jikesrvm.HeapLayoutConstants
BAD_MAP_COMPRESSION, BOOT_IMAGE_CODE_END, BOOT_IMAGE_CODE_SIZE, BOOT_IMAGE_CODE_START, BOOT_IMAGE_DATA_END, BOOT_IMAGE_DATA_SIZE, BOOT_IMAGE_DATA_START, BOOT_IMAGE_END, BOOT_IMAGE_RMAP_END, BOOT_IMAGE_RMAP_START, MAX_BOOT_IMAGE_RMAP_SIZE, MAXIMUM_MAPPABLE
 
Constructor Summary
OptGCMapIterator(WordArray registerLocations)
           
 
Method Summary
 Address getFirstSpillLoc()
          Get address of the first spill location for the given frame ptr
 Address getLastSpillLoc()
          Get address of the last spill location for the given frame ptr
 Address getStackLocation(Address framePtr, int offset)
          Determine the stack location given the frame ptr and spill offset.
protected  void updateLocateRegisters()
          If any non-volatile GPRs were saved by the method being processed then update the registerLocations array with the locations where the registers were saved.
 
Methods inherited from class org.jikesrvm.compilers.opt.runtimesupport.OptGenericGCMapIterator
cleanupPointers, currentRegisterIsValid, getCurrentRegister, getNextReferenceAddress, getNextReturnAddressAddress, getType, reset, setupIterator, updateCurrentRegister
 
Methods inherited from class org.jikesrvm.mm.mminterface.GCMapIterator
newStackWalk
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

DEBUG

private static final boolean DEBUG
See Also:
Constant Field Values

VOL_SIZE

static final int VOL_SIZE

SAVE_VOL_SIZE

static final int SAVE_VOL_SIZE
Constructor Detail

OptGCMapIterator

public OptGCMapIterator(WordArray registerLocations)
Method Detail

updateLocateRegisters

protected void updateLocateRegisters()
If any non-volatile GPRs were saved by the method being processed then update the registerLocations array with the locations where the registers were saved. Also, check for special methods that also save the volatile GPRs.

Specified by:
updateLocateRegisters in class OptGenericGCMapIterator

getStackLocation

public Address getStackLocation(Address framePtr,
                                int offset)
Description copied from class: OptGenericGCMapIterator
Determine the stack location given the frame ptr and spill offset. (The offset direction varies among architectures.)

Specified by:
getStackLocation in class OptGenericGCMapIterator
Parameters:
framePtr - the frame pointer
offset - the offset
Returns:
the resulting stack location

getFirstSpillLoc

public Address getFirstSpillLoc()
Get address of the first spill location for the given frame ptr

Specified by:
getFirstSpillLoc in class OptGenericGCMapIterator
Returns:
the first spill location

getLastSpillLoc

public Address getLastSpillLoc()
Get address of the last spill location for the given frame ptr

Specified by:
getLastSpillLoc in class OptGenericGCMapIterator
Returns:
the last spill location