org.jikesrvm.ia32
Class InterfaceMethodConflictResolver

java.lang.Object
  extended by org.jikesrvm.ia32.InterfaceMethodConflictResolver
All Implemented Interfaces:
RegisterConstants
Direct Known Subclasses:
ArchitectureSpecific.InterfaceMethodConflictResolver

public abstract class InterfaceMethodConflictResolver
extends Object
implements RegisterConstants

An interface conflict resolution stub uses a hidden parameter to distinguish among multiple interface methods of a class that map to the same slot in the class's IMT.

Assumption: Register EAX contains the "this" parameter of the method being called invoked.

Assumption: Register ECX is available as a scratch register (we need one!)


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
 
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
 
Constructor Summary
InterfaceMethodConflictResolver()
           
 
Method Summary
private static int assignBytecodeIndices(int bcIndex, int[] bcIndices, int low, int high)
           
static ArchitectureSpecific.CodeArray createStub(int[] sigIds, RVMMethod[] targets)
           
private static void insertStubCase(Assembler asm, int[] sigIds, RVMMethod[] targets, int[] bcIndices, int low, int high)
           
private static void insertStubPrologue(Assembler asm)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

InterfaceMethodConflictResolver

public InterfaceMethodConflictResolver()
Method Detail

createStub

public static ArchitectureSpecific.CodeArray createStub(int[] sigIds,
                                                        RVMMethod[] targets)

assignBytecodeIndices

private static int assignBytecodeIndices(int bcIndex,
                                         int[] bcIndices,
                                         int low,
                                         int high)

insertStubPrologue

private static void insertStubPrologue(Assembler asm)

insertStubCase

private static void insertStubCase(Assembler asm,
                                   int[] sigIds,
                                   RVMMethod[] targets,
                                   int[] bcIndices,
                                   int low,
                                   int high)