/* * This file is part of the Jikes RVM project (http://jikesrvm.org). * * This file is licensed to You under the Common Public License (CPL); * You may not use this file except in compliance with the License. You * may obtain a copy of the License at * * http://www.opensource.org/licenses/cpl1.0.php * * See the COPYRIGHT.txt file distributed with this work for information * regarding copyright ownership. */ package org.jikesrvm.runtime; import org.jikesrvm.VM; import org.jikesrvm.classloader.VM_Field; import org.jikesrvm.classloader.VM_Method; import org.jikesrvm.classloader.VM_NormalMethod; import static org.jikesrvm.runtime.VM_EntrypointHelper.getField; import static org.jikesrvm.runtime.VM_EntrypointHelper.getMethod; /** * Fields and methods of the virtual machine that are needed by * compiler-generated machine code or C runtime code. */ public class VM_Entrypoints { // The usual causes for getField/Method() to fail are: // 1. you mispelled the class name, member name, or member signature // 2. the class containing the specified member didn't get compiled // public static final VM_NormalMethod bootMethod = VM_EntrypointHelper.getMethod(org.jikesrvm.VM.class, "boot", "()V"); public static final VM_Method java_lang_reflect_Method_invokeMethod = getMethod(java.lang.reflect.Method.class, "invoke", "(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;"); public static final VM_Field magicObjectRemapperField = getField(org.jikesrvm.runtime.VM_Magic.class, "objectAddressRemapper", org.jikesrvm.runtime.VM_ObjectAddressRemapper.class); public static final VM_NormalMethod instanceOfMethod = getMethod(org.jikesrvm.runtime.VM_Runtime.class, "instanceOf", "(Ljava/lang/Object;I)Z"); public static final VM_NormalMethod instanceOfResolvedClassMethod = getMethod(org.jikesrvm.runtime.VM_Runtime.class, "instanceOfResolvedClass", "(Ljava/lang/Object;I)Z"); public static final VM_NormalMethod instanceOfFinalMethod = getMethod(org.jikesrvm.runtime.VM_Runtime.class, "instanceOfFinal", "(Ljava/lang/Object;Lorg/vmmagic/unboxed/Offset;)Z"); public static final VM_NormalMethod checkcastMethod = getMethod(org.jikesrvm.runtime.VM_Runtime.class, "checkcast", "(Ljava/lang/Object;I)V"); public static final VM_NormalMethod checkcastResolvedClassMethod = getMethod(org.jikesrvm.runtime.VM_Runtime.class, "checkcastResolvedClass", "(Ljava/lang/Object;I)V"); public static final VM_NormalMethod checkcastFinalMethod = getMethod(org.jikesrvm.runtime.VM_Runtime.class, "checkcastFinal", "(Ljava/lang/Object;Lorg/vmmagic/unboxed/Offset;)V"); public static final VM_NormalMethod checkstoreMethod = getMethod(org.jikesrvm.runtime.VM_Runtime.class, "checkstore", "(Ljava/lang/Object;Ljava/lang/Object;)V"); public static final VM_NormalMethod athrowMethod = getMethod(org.jikesrvm.runtime.VM_Runtime.class, "athrow", "(Ljava/lang/Throwable;)V"); // Allocation-related entry points // public static final VM_NormalMethod resolvedNewScalarMethod = getMethod(org.jikesrvm.runtime.VM_Runtime.class, "resolvedNewScalar", "(I[Ljava/lang/Object;ZIIII)Ljava/lang/Object;"); public static final VM_NormalMethod unresolvedNewScalarMethod = getMethod(org.jikesrvm.runtime.VM_Runtime.class, "unresolvedNewScalar", "(II)Ljava/lang/Object;"); public static final VM_NormalMethod unresolvedNewArrayMethod = getMethod(org.jikesrvm.runtime.VM_Runtime.class, "unresolvedNewArray", "(III)Ljava/lang/Object;"); public static final VM_NormalMethod resolvedNewArrayMethod = getMethod(org.jikesrvm.runtime.VM_Runtime.class, "resolvedNewArray", "(III[Ljava/lang/Object;IIII)Ljava/lang/Object;"); public static final VM_Field gcLockField = getField(java.lang.VMRuntime.class, "gcLock", int.class); public static final VM_Field sysWriteLockField = getField(org.jikesrvm.VM.class, "sysWriteLock", int.class); public static final VM_Field intBufferLockField = getField(org.jikesrvm.VM_Services.class, "intBufferLock", int.class); public static final VM_Field dumpBufferLockField = getField(org.jikesrvm.VM_Services.class, "dumpBufferLock", int.class); public static final VM_NormalMethod unexpectedAbstractMethodCallMethod = getMethod(org.jikesrvm.runtime.VM_Runtime.class, "unexpectedAbstractMethodCall", "()V"); public static final VM_NormalMethod raiseNullPointerException = getMethod(org.jikesrvm.runtime.VM_Runtime.class, "raiseNullPointerException", "()V"); public static final VM_NormalMethod raiseArrayBoundsException = getMethod(org.jikesrvm.runtime.VM_Runtime.class, "raiseArrayIndexOutOfBoundsException", "(I)V"); public static final VM_NormalMethod raiseArithmeticException = getMethod(org.jikesrvm.runtime.VM_Runtime.class, "raiseArithmeticException", "()V"); public static final VM_NormalMethod raiseAbstractMethodError = getMethod(org.jikesrvm.runtime.VM_Runtime.class, "raiseAbstractMethodError", "()V"); public static final VM_NormalMethod raiseIllegalAccessError = getMethod(org.jikesrvm.runtime.VM_Runtime.class, "raiseIllegalAccessError", "()V"); public static final VM_NormalMethod deliverHardwareExceptionMethod = getMethod(org.jikesrvm.runtime.VM_Runtime.class, "deliverHardwareException", "(II)V"); public static final VM_NormalMethod unlockAndThrowMethod = getMethod(org.jikesrvm.runtime.VM_Runtime.class, "unlockAndThrow", "(Ljava/lang/Object;Ljava/lang/Throwable;)V"); public static final VM_NormalMethod invokeInterfaceMethod = getMethod(org.jikesrvm.classloader.VM_InterfaceInvocation.class, "invokeInterface", "(Ljava/lang/Object;I)Lorg/jikesrvm/ArchitectureSpecific$VM_CodeArray;"); public static final VM_NormalMethod findItableMethod = getMethod(org.jikesrvm.classloader.VM_InterfaceInvocation.class, "findITable", "([Ljava/lang/Object;I)[Ljava/lang/Object;"); public static final VM_NormalMethod invokeinterfaceImplementsTestMethod = getMethod(org.jikesrvm.classloader.VM_InterfaceInvocation.class, "invokeinterfaceImplementsTest", "(Lorg/jikesrvm/classloader/VM_Class;[Ljava/lang/Object;)V"); public static final VM_NormalMethod unresolvedInvokeinterfaceImplementsTestMethod = getMethod(org.jikesrvm.classloader.VM_InterfaceInvocation.class, "unresolvedInvokeinterfaceImplementsTest", "(I[Ljava/lang/Object;)V"); public static final VM_NormalMethod lockMethod = getMethod(org.jikesrvm.objectmodel.VM_ObjectModel.class, "genericLock", "(Ljava/lang/Object;)V"); public static final VM_NormalMethod unlockMethod = getMethod(org.jikesrvm.objectmodel.VM_ObjectModel.class, "genericUnlock", "(Ljava/lang/Object;)V"); public static final VM_NormalMethod inlineLockMethod = getMethod(org.jikesrvm.scheduler.VM_ThinLock.class, "inlineLock", "(Ljava/lang/Object;Lorg/vmmagic/unboxed/Offset;)V"); public static final VM_NormalMethod inlineUnlockMethod = getMethod(org.jikesrvm.scheduler.VM_ThinLock.class, "inlineUnlock", "(Ljava/lang/Object;Lorg/vmmagic/unboxed/Offset;)V"); public static final VM_NormalMethod lazyMethodInvokerMethod = getMethod(org.jikesrvm.runtime.VM_DynamicLinker.class, "lazyMethodInvoker", "()V"); public static final VM_NormalMethod unimplementedNativeMethodMethod = getMethod(org.jikesrvm.runtime.VM_DynamicLinker.class, "unimplementedNativeMethod", "()V"); public static final VM_NormalMethod sysCallMethod = getMethod(org.jikesrvm.runtime.VM_DynamicLinker.class, "sysCallMethod", "()V"); public static final VM_NormalMethod resolveMemberMethod = getMethod(org.jikesrvm.classloader.VM_TableBasedDynamicLinker.class, "resolveMember", "(IZ)I"); public static final VM_Field memberOffsetsField = getField(org.jikesrvm.classloader.VM_TableBasedDynamicLinker.class, "memberOffsets", int[].class); /** 1L */ public static final VM_Field longOneField = getField(org.jikesrvm.runtime.VM_Math.class, "longOne", long.class); /** -1.0F */ public static final VM_Field minusOneField = getField(org.jikesrvm.runtime.VM_Math.class, "minusOne", float.class); /** 0.0F */ public static final VM_Field zeroFloatField = getField(org.jikesrvm.runtime.VM_Math.class, "zero", float.class); /**0.5F */ public static final VM_Field halfFloatField = getField(org.jikesrvm.runtime.VM_Math.class, "half", float.class); /** 1.0F */ public static final VM_Field oneFloatField = getField(org.jikesrvm.runtime.VM_Math.class, "one", float.class); /** 2.0F */ public static final VM_Field twoFloatField = getField(org.jikesrvm.runtime.VM_Math.class, "two", float.class); /** 2.0F^32 */ public static final VM_Field two32Field = getField(org.jikesrvm.runtime.VM_Math.class, "two32", float.class); /** 0.5F^32 */ public static final VM_Field half32Field = getField(org.jikesrvm.runtime.VM_Math.class, "half32", float.class); // FIXME - ensure these are aligned /** 1e-9 */ public static final VM_Field billionthField = getField(org.jikesrvm.runtime.VM_Math.class, "billionth", double.class); /** 0.0 */ public static final VM_Field zeroDoubleField = getField(org.jikesrvm.runtime.VM_Math.class, "zeroD", double.class); /** 1.0 */ public static final VM_Field oneDoubleField = getField(org.jikesrvm.runtime.VM_Math.class, "oneD", double.class); /** largest double that can be rounded to an int */ public static final VM_Field maxintField = getField(org.jikesrvm.runtime.VM_Math.class, "maxint", double.class); /** largest double that can be rounded to a long */ public static final VM_Field maxlongField = getField(org.jikesrvm.runtime.VM_Math.class, "maxlong", double.class); /** smallest double that can be rounded to an int */ public static final VM_Field minintField = getField(org.jikesrvm.runtime.VM_Math.class, "minint", double.class); /** IEEEmagic constant */ public static final VM_Field IEEEmagicField = getField(org.jikesrvm.runtime.VM_Math.class, "IEEEmagic", double.class); /** special double value for use in int <--> double conversions */ public static final VM_Field I2DconstantField = getField(org.jikesrvm.runtime.VM_Math.class, "I2Dconstant", double.class); public static final VM_Field Long2DoubleExpDef = getField(org.jikesrvm.runtime.VM_Math.class, "Long2DoubleExpDef", double.class); public static final VM_Field Long2DoubleShfCtrl = getField(org.jikesrvm.runtime.VM_Math.class, "Long2DoubleShfCtrl", long.class); public static final VM_Field Long2DoubleShfCtrl2 = getField(org.jikesrvm.runtime.VM_Math.class, "Long2DoubleShfCtrl2", long.class); /** largest float that can be rounded to an int */ public static final VM_Field maxintFloatField = getField(org.jikesrvm.runtime.VM_Math.class, "maxintF", float.class); /** largest float that can be rounded to a long */ public static final VM_Field maxlongFloatField = getField(org.jikesrvm.runtime.VM_Math.class, "maxlongF", float.class); public static final VM_Field suspendPendingField = getField(org.jikesrvm.scheduler.greenthreads.VM_GreenThread.class, "suspendPending", int.class); public static final VM_Field scratchStorageField = getField(org.jikesrvm.scheduler.VM_Processor.class, "scratchStorage", double.class); public static final VM_Field timeSliceExpiredField = getField(org.jikesrvm.scheduler.VM_Processor.class, "timeSliceExpired", int.class); public static final VM_Field takeYieldpointField = getField(org.jikesrvm.scheduler.VM_Processor.class, "takeYieldpoint", int.class); public static final VM_Field activeThreadField = getField(org.jikesrvm.scheduler.VM_Processor.class, "activeThread", org.jikesrvm.scheduler.VM_Thread.class); public static final VM_Field activeThreadStackLimitField = getField(org.jikesrvm.scheduler.VM_Processor.class, "activeThreadStackLimit", org.vmmagic.unboxed.LocalAddress.class); public static final VM_Field pthreadIDField = getField(org.jikesrvm.scheduler.VM_Processor.class, "pthread_id", int.class); public static final VM_Field timerTicksField = getField(org.jikesrvm.scheduler.greenthreads.VM_GreenProcessor.class, "timerTicks", int.class); public static final VM_Field reportedTimerTicksField = getField(org.jikesrvm.scheduler.greenthreads.VM_GreenProcessor.class, "reportedTimerTicks", int.class); public static final VM_Field vpStatusField = getField(org.jikesrvm.scheduler.VM_Processor.class, "vpStatus", int.class); public static final VM_Field threadIdField = getField(org.jikesrvm.scheduler.VM_Processor.class, "threadId", int.class); public static final VM_Field referenceReferentField = getField(java.lang.ref.Reference.class, "referent", org.vmmagic.unboxed.Address.class); /** Used in deciding which stack frames we can elide when printing. */ public static final VM_NormalMethod mainThreadRunMethod = getMethod(org.jikesrvm.scheduler.VM_MainThread.class, "run", "()V"); public static final VM_NormalMethod yieldpointFromPrologueMethod = getMethod(org.jikesrvm.scheduler.VM_Thread.class, "yieldpointFromPrologue", "()V"); public static final VM_NormalMethod yieldpointFromBackedgeMethod = getMethod(org.jikesrvm.scheduler.VM_Thread.class, "yieldpointFromBackedge", "()V"); public static final VM_NormalMethod yieldpointFromEpilogueMethod = getMethod(org.jikesrvm.scheduler.VM_Thread.class, "yieldpointFromEpilogue", "()V"); public static final VM_NormalMethod threadRunMethod = getMethod(org.jikesrvm.scheduler.VM_Thread.class, "run", "()V"); public static final VM_NormalMethod threadStartoffMethod = getMethod(org.jikesrvm.scheduler.VM_Thread.class, "startoff", "()V"); public static final VM_Field threadStackField = getField(org.jikesrvm.scheduler.VM_Thread.class, "stack", byte[].class); public static final VM_Field stackLimitField = getField(org.jikesrvm.scheduler.VM_Thread.class, "stackLimit", org.vmmagic.unboxed.LocalAddress.class); public static final VM_Field beingDispatchedField = getField(org.jikesrvm.scheduler.VM_Thread.class, "beingDispatched", boolean.class); public static final VM_Field threadSlotField = getField(org.jikesrvm.scheduler.VM_Thread.class, "threadSlot", int.class); public static final VM_Field jniEnvField = getField(org.jikesrvm.scheduler.VM_Thread.class, "jniEnv", org.jikesrvm.jni.VM_JNIEnvironment.class); public static final VM_Field threadContextRegistersField = getField(org.jikesrvm.scheduler.VM_Thread.class, "contextRegisters", org.jikesrvm.VM_Registers.class); public static final VM_Field threadHardwareExceptionRegistersField = getField(org.jikesrvm.scheduler.VM_Thread.class, "hardwareExceptionRegisters", org.jikesrvm.VM_Registers.class); public static final VM_Field tracePrevAddressField = getField(org.jikesrvm.objectmodel.VM_MiscHeader.class, "prevAddress", org.vmmagic.unboxed.Word.class); public static final VM_Field traceOIDField = getField(org.jikesrvm.objectmodel.VM_MiscHeader.class, "oid", org.vmmagic.unboxed.Word.class); public static final VM_Field dispenserField = getField(org.jikesrvm.mm.mmtk.Lock.class, "dispenser", int.class); public static final VM_Field servingField = getField(org.jikesrvm.mm.mmtk.Lock.class, "serving", int.class); public static final VM_Field lockThreadField = getField(org.jikesrvm.mm.mmtk.Lock.class, "thread", org.jikesrvm.scheduler.VM_Thread.class); public static final VM_Field gcStatusField = getField(org.mmtk.plan.Plan.class, "gcStatus", int.class); public static final VM_Field SQCFField = getField(org.mmtk.utility.deque.SharedDeque.class, "completionFlag", int.class); public static final VM_Field SQNCField = getField(org.mmtk.utility.deque.SharedDeque.class, "numConsumers", int.class); public static final VM_Field SQNCWField = getField(org.mmtk.utility.deque.SharedDeque.class, "numConsumersWaiting", int.class); public static final VM_Field SQheadField = getField(org.mmtk.utility.deque.SharedDeque.class, "head", org.vmmagic.unboxed.Address.class); public static final VM_Field SQtailField = getField(org.mmtk.utility.deque.SharedDeque.class, "tail", org.vmmagic.unboxed.Address.class); public static final VM_Field SQBEField = getField(org.mmtk.utility.deque.SharedDeque.class, "bufsenqueued", int.class); public static final VM_Field synchronizedCounterField = getField(org.jikesrvm.mm.mmtk.SynchronizedCounter.class, "count", int.class); public static final VM_NormalMethod arrayStoreWriteBarrierMethod = getMethod(org.jikesrvm.memorymanagers.mminterface.MM_Interface.class, "arrayStoreWriteBarrier", "(Ljava/lang/Object;ILjava/lang/Object;)V"); public static final VM_NormalMethod putfieldWriteBarrierMethod = getMethod(org.jikesrvm.memorymanagers.mminterface.MM_Interface.class, "putfieldWriteBarrier", "(Ljava/lang/Object;Lorg/vmmagic/unboxed/Offset;Ljava/lang/Object;I)V"); public static final VM_NormalMethod putstaticWriteBarrierMethod = getMethod(org.jikesrvm.memorymanagers.mminterface.MM_Interface.class, "putstaticWriteBarrier", "(Lorg/vmmagic/unboxed/Offset;Ljava/lang/Object;I)V"); public static final VM_NormalMethod modifyCheckMethod = getMethod(org.jikesrvm.memorymanagers.mminterface.MM_Interface.class, "modifyCheck", "(Ljava/lang/Object;)V"); public static final VM_Field outputLockField = getField(org.jikesrvm.scheduler.VM_Scheduler.class, "outputLock", int.class); // used in boot image writer public static final VM_Field greenProcessorsField = getField(org.jikesrvm.scheduler.greenthreads.VM_GreenScheduler.class, "processors", org.jikesrvm.scheduler.greenthreads.VM_GreenProcessor[].class); public static final VM_Field debugRequestedField = getField(org.jikesrvm.scheduler.VM_Scheduler.class, "debugRequested", boolean.class); public static final VM_NormalMethod dumpStackAndDieMethod = getMethod(org.jikesrvm.scheduler.VM_Scheduler.class, "dumpStackAndDie", "(Lorg/vmmagic/unboxed/LocalAddress;)V"); public static final VM_Field latestContenderField = getField(org.jikesrvm.scheduler.VM_ProcessorLock.class, "latestContender", org.jikesrvm.scheduler.VM_Processor.class); public static final VM_Field classForTypeField = getField(org.jikesrvm.classloader.VM_Type.class, "classForType", java.lang.Class.class); public static final VM_Field depthField = getField(org.jikesrvm.classloader.VM_Type.class, "depth", int.class); public static final VM_Field idField = getField(org.jikesrvm.classloader.VM_Type.class, "id", int.class); public static final VM_Field dimensionField = getField(org.jikesrvm.classloader.VM_Type.class, "dimension", int.class); public static final VM_Field innermostElementTypeField = getField(org.jikesrvm.classloader.VM_Array.class, "innermostElementType", org.jikesrvm.classloader.VM_Type.class); public static final VM_Field JNIEnvSavedPRField = getField(org.jikesrvm.jni.VM_JNIEnvironment.class, "savedPRreg", org.jikesrvm.scheduler.VM_Processor.class); public static final VM_Field JNIGlobalRefsField = getField(org.jikesrvm.jni.VM_JNIGlobalRefTable.class, "refs", java.lang.Object[].class); public static final VM_Field JNIRefsField = getField(org.jikesrvm.jni.VM_JNIEnvironment.class, "JNIRefs", org.vmmagic.unboxed.AddressArray.class); public static final VM_Field JNIRefsTopField = getField(org.jikesrvm.jni.VM_JNIEnvironment.class, "JNIRefsTop", int.class); public static final VM_Field JNIRefsMaxField = getField(org.jikesrvm.jni.VM_JNIEnvironment.class, "JNIRefsMax", int.class); public static final VM_Field JNIRefsSavedFPField = getField(org.jikesrvm.jni.VM_JNIEnvironment.class, "JNIRefsSavedFP", int.class); public static final VM_Field JNITopJavaFPField = getField(org.jikesrvm.jni.VM_JNIEnvironment.class, "JNITopJavaFP", org.vmmagic.unboxed.LocalAddress.class); public static final VM_Field JNIPendingExceptionField = getField(org.jikesrvm.jni.VM_JNIEnvironment.class, "pendingException", java.lang.Throwable.class); public static final VM_Field JNIExternalFunctionsField = getField(org.jikesrvm.jni.VM_JNIEnvironment.class, "externalJNIFunctions", org.vmmagic.unboxed.Address.class); public static final VM_Field JNIEnvSavedJTOCField = (VM.BuildForPowerPC) ? getField(org.jikesrvm.jni.VM_JNIEnvironment.class, "savedJTOC", org.vmmagic.unboxed.Address.class) : null; public static final VM_Field the_boot_recordField = getField(org.jikesrvm.runtime.VM_BootRecord.class, "the_boot_record", org.jikesrvm.runtime.VM_BootRecord.class); public static final VM_Field sysVirtualProcessorYieldIPField = getField(org.jikesrvm.runtime.VM_BootRecord.class, "sysVirtualProcessorYieldIP", org.vmmagic.unboxed.Address.class); public static final VM_Field externalSignalFlagField = getField(org.jikesrvm.runtime.VM_BootRecord.class, "externalSignalFlag", int.class); public static final VM_Field sysLongDivideIPField = getField(org.jikesrvm.runtime.VM_BootRecord.class, "sysLongDivideIP", org.vmmagic.unboxed.Address.class); public static final VM_Field sysLongRemainderIPField = getField(org.jikesrvm.runtime.VM_BootRecord.class, "sysLongRemainderIP", org.vmmagic.unboxed.Address.class); public static final VM_Field sysLongToFloatIPField = getField(org.jikesrvm.runtime.VM_BootRecord.class, "sysLongToFloatIP", org.vmmagic.unboxed.Address.class); public static final VM_Field sysLongToDoubleIPField = getField(org.jikesrvm.runtime.VM_BootRecord.class, "sysLongToDoubleIP", org.vmmagic.unboxed.Address.class); public static final VM_Field sysFloatToIntIPField = getField(org.jikesrvm.runtime.VM_BootRecord.class, "sysFloatToIntIP", org.vmmagic.unboxed.Address.class); public static final VM_Field sysDoubleToIntIPField = getField(org.jikesrvm.runtime.VM_BootRecord.class, "sysDoubleToIntIP", org.vmmagic.unboxed.Address.class); public static final VM_Field sysFloatToLongIPField = getField(org.jikesrvm.runtime.VM_BootRecord.class, "sysFloatToLongIP", org.vmmagic.unboxed.Address.class); public static final VM_Field sysDoubleToLongIPField = getField(org.jikesrvm.runtime.VM_BootRecord.class, "sysDoubleToLongIP", org.vmmagic.unboxed.Address.class); public static final VM_Field sysDoubleRemainderIPField = getField(org.jikesrvm.runtime.VM_BootRecord.class, "sysDoubleRemainderIP", org.vmmagic.unboxed.Address.class); public static final VM_Field edgeCountersField = getField(org.jikesrvm.compilers.baseline.VM_EdgeCounts.class, "data", int[][].class); public static final VM_Field inetAddressAddressField = getField(java.net.InetAddress.class, "address", int.class); public static final VM_Field inetAddressFamilyField = getField(java.net.InetAddress.class, "family", int.class); public static final VM_Field socketImplAddressField = getField(java.net.SocketImpl.class, "address", java.net.InetAddress.class); public static final VM_Field socketImplPortField = getField(java.net.SocketImpl.class, "port", int.class); public static final VM_Field sysVirtualSubArchProcessorBindIPField = getField(org.jikesrvm.runtime.VM_BootRecord.class, "sysVirtualSubArchProcessorBindIP", org.vmmagic.unboxed.Address.class); public static final VM_Field migrateToSubArchIPField = getField(org.jikesrvm.runtime.VM_BootRecord.class, "migrateToSubArchIP", org.vmmagic.unboxed.Address.class); public static final VM_Field subArchCheckStatusIPField = getField(org.jikesrvm.runtime.VM_BootRecord.class, "subArchCheckStatusIP", org.vmmagic.unboxed.Address.class); public static final VM_Field subArchGetIntReturnIPField = getField(org.jikesrvm.runtime.VM_BootRecord.class, "subArchGetIntReturnIP", org.vmmagic.unboxed.Address.class); public static final VM_Field subArchGetFloatReturnIPField = getField(org.jikesrvm.runtime.VM_BootRecord.class, "subArchGetFloatReturnIP", org.vmmagic.unboxed.Address.class); public static final VM_Field subArchGetLongReturnIPField = getField(org.jikesrvm.runtime.VM_BootRecord.class, "subArchGetLongReturnIP", org.vmmagic.unboxed.Address.class); public static final VM_Field subArchGetDoubleReturnIPField = getField(org.jikesrvm.runtime.VM_BootRecord.class, "subArchGetDoubleReturnIP", org.vmmagic.unboxed.Address.class); public static final VM_Field subArchGetRefReturnIPField = getField(org.jikesrvm.runtime.VM_BootRecord.class, "subArchGetRefReturnIP", org.vmmagic.unboxed.Address.class); public static final VM_Method subArchMigrateMethodReturningVoid = getMethod(org.jikesrvm.scheduler.greenthreads.VM_SubArchMigration.class, "migrateMethodReturningVoid", "(Lorg/jikesrvm/classloader/VM_Method;Lorg/vmmagic/unboxed/Address;I)V"); public static final VM_Method subArchMigrateMethodReturningInt = getMethod(org.jikesrvm.scheduler.greenthreads.VM_SubArchMigration.class, "migrateMethodReturningInt", "(Lorg/jikesrvm/classloader/VM_Method;Lorg/vmmagic/unboxed/Address;I)I"); public static final VM_Method subArchMigrateMethodReturningFloat = getMethod(org.jikesrvm.scheduler.greenthreads.VM_SubArchMigration.class, "migrateMethodReturningFloat", "(Lorg/jikesrvm/classloader/VM_Method;Lorg/vmmagic/unboxed/Address;I)F"); public static final VM_Method subArchMigrateMethodReturningLong = getMethod(org.jikesrvm.scheduler.greenthreads.VM_SubArchMigration.class, "migrateMethodReturningLong", "(Lorg/jikesrvm/classloader/VM_Method;Lorg/vmmagic/unboxed/Address;I)J"); public static final VM_Method subArchMigrateMethodReturningDouble = getMethod(org.jikesrvm.scheduler.greenthreads.VM_SubArchMigration.class, "migrateMethodReturningDouble", "(Lorg/jikesrvm/classloader/VM_Method;Lorg/vmmagic/unboxed/Address;I)D"); public static final VM_Method subArchMigrateMethodReturningRef = getMethod(org.jikesrvm.scheduler.greenthreads.VM_SubArchMigration.class, "migrateMethodReturningRef", "(Lorg/jikesrvm/classloader/VM_Method;Lorg/vmmagic/unboxed/Address;I)Lorg/vmmagic/unboxed/Address;"); ////////////////// // Entrypoints that are valid only when the opt compiler is included in the build ////////////////// public static final VM_Field specializedMethodsField; public static final VM_Field osrOrganizerQueueLockField; public static final VM_NormalMethod optThreadSwitchFromOsrOptMethod; public static final VM_NormalMethod optThreadSwitchFromPrologueMethod; public static final VM_NormalMethod optThreadSwitchFromBackedgeMethod; public static final VM_NormalMethod optThreadSwitchFromEpilogueMethod; public static final VM_NormalMethod yieldpointFromNativePrologueMethod; public static final VM_NormalMethod yieldpointFromNativeEpilogueMethod; public static final VM_NormalMethod optResolveMethod; public static final VM_NormalMethod optNewArrayArrayMethod; public static final VM_NormalMethod sysArrayCopy; static { if (VM.BuildForOptCompiler) { specializedMethodsField = getField(org.jikesrvm.compilers.opt.OPT_SpecializedMethodPool.class, "specializedMethods", org.jikesrvm.ArchitectureSpecific.VM_CodeArray[].class); osrOrganizerQueueLockField = getField(org.jikesrvm.adaptive.OSR_OrganizerThread.class, "queueLock", int.class); optThreadSwitchFromOsrOptMethod = getMethod(org.jikesrvm.compilers.opt.VM_OptSaveVolatile.class, "OPT_yieldpointFromOsrOpt", "()V"); optThreadSwitchFromPrologueMethod = getMethod(org.jikesrvm.compilers.opt.VM_OptSaveVolatile.class, "OPT_yieldpointFromPrologue", "()V"); optThreadSwitchFromBackedgeMethod = getMethod(org.jikesrvm.compilers.opt.VM_OptSaveVolatile.class, "OPT_yieldpointFromBackedge", "()V"); optThreadSwitchFromEpilogueMethod = getMethod(org.jikesrvm.compilers.opt.VM_OptSaveVolatile.class, "OPT_yieldpointFromEpilogue", "()V"); yieldpointFromNativePrologueMethod = getMethod(org.jikesrvm.compilers.opt.VM_OptSaveVolatile.class, "OPT_yieldpointFromNativePrologue", "()V"); yieldpointFromNativeEpilogueMethod = getMethod(org.jikesrvm.compilers.opt.VM_OptSaveVolatile.class, "OPT_yieldpointFromNativeEpilogue", "()V"); optResolveMethod = getMethod(org.jikesrvm.compilers.opt.VM_OptSaveVolatile.class, "OPT_resolve", "()V"); optNewArrayArrayMethod = getMethod(org.jikesrvm.compilers.opt.VM_OptLinker.class, "newArrayArray", "(I[II)Ljava/lang/Object;"); sysArrayCopy = getMethod(java.lang.VMSystem.class, "arraycopy", "(Ljava/lang/Object;ILjava/lang/Object;II)V"); sysArrayCopy.setRuntimeServiceMethod(false); } else { specializedMethodsField = null; osrOrganizerQueueLockField = null; optThreadSwitchFromOsrOptMethod = null; optThreadSwitchFromPrologueMethod = null; optThreadSwitchFromBackedgeMethod = null; optThreadSwitchFromEpilogueMethod = null; yieldpointFromNativePrologueMethod = null; yieldpointFromNativeEpilogueMethod = null; optResolveMethod = null; optNewArrayArrayMethod = null; sysArrayCopy = null; } } public static final VM_Field classLoaderDefinedPackages = getField(java.lang.ClassLoader.class, "definedPackages", java.util.HashMap.class); }