org.jikesrvm.compilers.opt.runtimesupport
Class OptLinker

java.lang.Object
  extended by org.jikesrvm.compilers.opt.runtimesupport.OptLinker
All Implemented Interfaces:
BytecodeConstants

public final class OptLinker
extends Object
implements BytecodeConstants

Routines for dynamic linking and other misc hooks from opt-compiled code to runtime services.

See Also:
ArchitectureSpecificOpt.FinalMIRExpansion, (transitions from compiled code to resolveDynamicLink), TableBasedDynamicLinker

Field Summary
 
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
OptLinker()
           
 
Method Summary
static Object new2DArray(int methodId, int dim0, int dim1, int typeId)
           
static Object newArrayArray(int methodId, int[] dimensions, int typeId)
           
static void resolveDynamicLink(OptCompiledMethod cm, Offset offset)
          Given an opt compiler info and a machine code offset in that method's instruction array, perform the dynamic linking required by that instruction.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

OptLinker

public OptLinker()
Method Detail

resolveDynamicLink

public static void resolveDynamicLink(OptCompiledMethod cm,
                                      Offset offset)
                               throws NoClassDefFoundError
Given an opt compiler info and a machine code offset in that method's instruction array, perform the dynamic linking required by that instruction.

We do this by mapping back to the source RVMMethod and bytecode offset, then examining the bytecodes to see what field/method was being referenced, then calling TableBasedDynamicLinker to do the real work.

Throws:
NoClassDefFoundError

newArrayArray

public static Object newArrayArray(int methodId,
                                   int[] dimensions,
                                   int typeId)
                            throws NoClassDefFoundError,
                                   NegativeArraySizeException,
                                   OutOfMemoryError
Throws:
NoClassDefFoundError
NegativeArraySizeException
OutOfMemoryError

new2DArray

public static Object new2DArray(int methodId,
                                int dim0,
                                int dim1,
                                int typeId)
                         throws NoClassDefFoundError,
                                NegativeArraySizeException,
                                OutOfMemoryError
Throws:
NoClassDefFoundError
NegativeArraySizeException
OutOfMemoryError