Mercurial > hg > graal-jvmci-8
changeset 11430:a7dd2d728500
made all public, non-static fields in HotSpotVMConfig final
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Mon, 26 Aug 2013 20:16:43 +0200 |
parents | 496cf245f023 |
children | ca53d08b8ef9 |
files | graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalRuntime.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotVMConfig.java |
diffstat | 2 files changed, 220 insertions(+), 187 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalRuntime.java Mon Aug 26 18:06:06 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalRuntime.java Mon Aug 26 20:16:43 2013 +0200 @@ -194,9 +194,7 @@ compilerToVm = toVM; compilerToGpu = toGPU; vmToCompiler = toCompiler; - config = new HotSpotVMConfig(); - compilerToVm.initializeConfiguration(config); - config.check(); + config = new HotSpotVMConfig(compilerToVm); // Set some global options: if (config.compileTheWorld) {
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotVMConfig.java Mon Aug 26 18:06:06 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotVMConfig.java Mon Aug 26 20:16:43 2013 +0200 @@ -22,11 +22,17 @@ */ package com.oracle.graal.hotspot; +import java.lang.reflect.*; + +import com.oracle.graal.hotspot.bridge.*; import com.sun.management.HotSpotDiagnosticMXBean; + import sun.management.ManagementFactoryHelper; /** - * Used to communicate configuration details, runtime offsets, etc. to Graal upon compileMethod. + * Used to access native configuration details. + * + * All non-static, public fields in this class are final so that they can be compiled as constants. */ public final class HotSpotVMConfig extends CompilerObject { @@ -34,7 +40,9 @@ private final HotSpotDiagnosticMXBean diagnostic = ManagementFactoryHelper.getDiagnosticMXBean(); - HotSpotVMConfig() { + HotSpotVMConfig(CompilerToVM c2vm) { + c2vm.initializeConfiguration(this); + assert check(); } /** @@ -91,10 +99,28 @@ } } + // Using systenm properties ensures the Java source compilers can never + // optimize away an access to a config field + private static final boolean UNINITIALIZED_BOOLEAN = Boolean.getBoolean("graal.config.uninitializedBoolean"); + private static final long UNINITIALIZED_LONG = Long.getLong("graal.config.uninitializedLong", 0L); + private static final int UNINITIALIZED_INT = Integer.getInteger("graal.config.uninitializedInt", 0); + + private static int getUninitializedInt() { + return UNINITIALIZED_INT; + } + + private static long getUninitializedLong() { + return UNINITIALIZED_LONG; + } + + private static boolean getUninitializedBoolean() { + return UNINITIALIZED_BOOLEAN; + } + // os information, register layout, code generation, ... - public boolean cAssertions; + public final boolean cAssertions = getUninitializedBoolean(); public final boolean windowsOs = System.getProperty("os.name", "").startsWith("Windows"); - public int codeEntryAlignment; + public final int codeEntryAlignment = getUninitializedInt(); public final boolean verifyOops = getVMOption("VerifyOops", false); public final boolean ciTime = getVMOption("CITime"); public final int compileThreshold = getVMOptionInt("CompileThreshold"); @@ -110,17 +136,17 @@ public final boolean useAESIntrinsics = getVMOption("UseAESIntrinsics"); public final boolean useCRC32Intrinsics = getVMOption("UseCRC32Intrinsics"); public final boolean useG1GC = getVMOption("UseG1GC"); - public long gcTotalCollectionsAddress; + public final long gcTotalCollectionsAddress = getUninitializedLong(); // Compressed Oops related values. - public boolean useCompressedOops = getVMOption("UseCompressedOops"); - public boolean useCompressedKlassPointers = getVMOption("UseCompressedKlassPointers"); - public long narrowOopBase; - public int narrowOopShift; + public final boolean useCompressedOops = getVMOption("UseCompressedOops"); + public final boolean useCompressedKlassPointers = getVMOption("UseCompressedKlassPointers"); + public final long narrowOopBase = getUninitializedLong(); + public final int narrowOopShift = getUninitializedInt(); public final int logMinObjAlignment = (int) (Math.log(getVMOptionInt("ObjectAlignmentInBytes")) / Math.log(2)); - public long narrowKlassBase; - public int narrowKlassShift; - public int logKlassAlignment; + public final long narrowKlassBase = getUninitializedLong(); + public final int narrowKlassShift = getUninitializedInt(); + public final int logKlassAlignment = getUninitializedInt(); // CPU capabilities public final int useSSE = getVMOptionInt("UseSSE"); @@ -132,127 +158,127 @@ /** * The offset of the mark word in an object's header. */ - public int markOffset; + public final int markOffset = getUninitializedInt(); /** * The offset of the hub (i.e. Klass*) in an object's header. */ - public int hubOffset; + public final int hubOffset = getUninitializedInt(); /** * The offset of the _prototype_header field in a Klass. */ - public int prototypeMarkWordOffset; + public final int prototypeMarkWordOffset = getUninitializedInt(); /** * The offset of the _subklass field in a Klass. */ - public int subklassOffset; + public final int subklassOffset = getUninitializedInt(); /** * The offset of the _next_sibling field in a Klass. */ - public int nextSiblingOffset; + public final int nextSiblingOffset = getUninitializedInt(); /** * The offset of the array length word in an array object's header. */ - public int arrayLengthOffset; + public final int arrayLengthOffset = getUninitializedInt(); /** * The offset of the _length field in an Array metaspace object (see array.hpp). */ - public int metaspaceArrayLengthOffset; + public final int metaspaceArrayLengthOffset = getUninitializedInt(); /** * The offset of the _data field in an Array metaspace object (see array.hpp). */ - public int metaspaceArrayBaseOffset; + public final int metaspaceArrayBaseOffset = getUninitializedInt(); /** * The offset of the _super_check_offset field in a Klass. */ - public int superCheckOffsetOffset; + public final int superCheckOffsetOffset = getUninitializedInt(); /** * The offset of the _secondary_super_cache field in a Klass. */ - public int secondarySuperCacheOffset; + public final int secondarySuperCacheOffset = getUninitializedInt(); /** * The offset of the _secondary_supers field in a Klass. */ - public int secondarySupersOffset; + public final int secondarySupersOffset = getUninitializedInt(); /** * The offset of the _init_state field in an instanceKlass. */ - public int klassStateOffset; + public final int klassStateOffset = getUninitializedInt(); /** * The value of instanceKlass::fully_initialized. */ - public int klassStateFullyInitialized; + public final int klassStateFullyInitialized = getUninitializedInt(); /** * The value of objArrayKlass::element_klass_offset(). */ - public int arrayClassElementOffset; + public final int arrayClassElementOffset = getUninitializedInt(); /** * The value of JavaThread::tlab_top_offset(). */ - public int threadTlabTopOffset; + public final int threadTlabTopOffset = getUninitializedInt(); /** * The value of JavaThread::tlab_end_offset(). */ - public int threadTlabEndOffset; + public final int threadTlabEndOffset = getUninitializedInt(); /** * The value of JavaThread::threadObj_offset(). */ - public int threadObjectOffset; + public final int threadObjectOffset = getUninitializedInt(); /** * The value of JavaThread::osthread_offset(). */ - public int osThreadOffset; + public final int osThreadOffset = getUninitializedInt(); /** * The value of OSThread::interrupted_offset(). */ - public int osThreadInterruptedOffset; + public final int osThreadInterruptedOffset = getUninitializedInt(); /** * The value of markOopDesc::unlocked_value. */ - public int unlockedMask; + public final int unlockedMask = getUninitializedInt(); /** * The value of markOopDesc::biased_lock_mask_in_place. */ - public int biasedLockMaskInPlace; + public final int biasedLockMaskInPlace = getUninitializedInt(); /** * The value of markOopDesc::age_mask_in_place. */ - public int ageMaskInPlace; + public final int ageMaskInPlace = getUninitializedInt(); /** * The value of markOopDesc::epoch_mask_in_place. */ - public int epochMaskInPlace; + public final int epochMaskInPlace = getUninitializedInt(); /** * The value of markOopDesc::biased_lock_pattern. */ - public int biasedLockPattern; + public final int biasedLockPattern = getUninitializedInt(); /** * Identity hash code value when uninitialized. */ - public int uninitializedIdentityHashCodeValue; + public final int uninitializedIdentityHashCodeValue = getUninitializedInt(); /** * Offset of the _pending_exception field in ThreadShadow (defined in exceptions.hpp). This @@ -260,83 +286,83 @@ * <p> * <b>NOTE: This is not the same as {@link #threadExceptionOopOffset}.</b> */ - public int pendingExceptionOffset; + public final int pendingExceptionOffset = getUninitializedInt(); /** * Offset of the pending deoptimization field. */ - public int pendingDeoptimizationOffset; + public final int pendingDeoptimizationOffset = getUninitializedInt(); /** * Mark word right shift to get identity hash code. */ - public int identityHashCodeShift; + public final int identityHashCodeShift = getUninitializedInt(); /** * Offset of _access_flags in a metaspace Method object. */ - public int methodAccessFlagsOffset; + public final int methodAccessFlagsOffset = getUninitializedInt(); /** * JVM_ACC_QUEUED defined in accessFlags.hpp and used for marking a Method object as queued for * compilation. */ - public int methodQueuedForCompilationBit; + public final int methodQueuedForCompilationBit = getUninitializedInt(); /** * Offset of _intrinsic_id in a metaspace Method object. */ - public int methodIntrinsicIdOffset; + public final int methodIntrinsicIdOffset = getUninitializedInt(); /** * Offset of _max_locals in a metaspace Method object. */ - public int methodMaxLocalsOffset; + public final int methodMaxLocalsOffset = getUninitializedInt(); /** * Offset of _constMethod in a metaspace Method object. */ - public int methodConstMethodOffset; + public final int methodConstMethodOffset = getUninitializedInt(); /** * Offset of _max_stack in a metaspace ConstMethod object. */ - public int constMethodMaxStackOffset; + public final int constMethodMaxStackOffset = getUninitializedInt(); /** * Offset of _constants in a metaspace ConstMethod object. */ - public int constMethodConstantsOffset; + public final int constMethodConstantsOffset = getUninitializedInt(); /** * Offset of _pool_holder in a metaspace ConstantPool object. */ - public int constantPoolHolderOffset; + public final int constantPoolHolderOffset = getUninitializedInt(); /** * Value of extra_stack_entries() in method.hpp. */ - public int extraStackEntries; + public final int extraStackEntries = getUninitializedInt(); /** * Value of JVM_ACC_HAS_FINALIZER in accessFlags.hpp. */ - public int klassHasFinalizerFlag; + public final int klassHasFinalizerFlag = getUninitializedInt(); /** * The value of JavaThread::is_method_handle_return_offset(). */ - public int threadIsMethodHandleReturnOffset; + public final int threadIsMethodHandleReturnOffset = getUninitializedInt(); /** * Bit pattern that represents a non-oop. Neither the high bits nor the low bits of this value * are allowed to look like (respectively) the high or low bits of a real oop. */ - public long nonOopBits; + public final long nonOopBits = getUninitializedLong(); - public long verifyOopCounterAddress; - public long verifyOopMask; - public long verifyOopBits; + public final long verifyOopCounterAddress = getUninitializedLong(); + public final long verifyOopMask = getUninitializedLong(); + public final long verifyOopBits = getUninitializedLong(); /** * Offset of the _exception_oop field in Thread (defined in thread.hpp). This field is used to @@ -345,207 +371,216 @@ * <p> * <b>NOTE: This is not the same as {@link #pendingExceptionOffset}.</b> */ - public int threadExceptionOopOffset; + public final int threadExceptionOopOffset = getUninitializedInt(); - public int threadExceptionPcOffset; - public long cardtableStartAddress; - public int cardtableShift; - public long safepointPollingAddress; - public boolean isPollingPageFar; + public final int threadExceptionPcOffset = getUninitializedInt(); + public final long cardtableStartAddress = getUninitializedLong(); + public final int cardtableShift = getUninitializedInt(); + public final long safepointPollingAddress = getUninitializedLong(); + public final boolean isPollingPageFar = getUninitializedBoolean(); /** * G1 Collector Related Values. */ - public int g1CardQueueIndexOffset; - public int g1CardQueueBufferOffset; - public int logOfHRGrainBytes; - public int g1SATBQueueMarkingOffset; - public int g1SATBQueueIndexOffset; - public int g1SATBQueueBufferOffset; + public final int g1CardQueueIndexOffset = getUninitializedInt(); + public final int g1CardQueueBufferOffset = getUninitializedInt(); + public final int logOfHRGrainBytes = getUninitializedInt(); + public final int g1SATBQueueMarkingOffset = getUninitializedInt(); + public final int g1SATBQueueIndexOffset = getUninitializedInt(); + public final int g1SATBQueueBufferOffset = getUninitializedInt(); /** * The offset of the _java_mirror field (of type {@link Class}) in a Klass. */ - public int classMirrorOffset; + public final int classMirrorOffset = getUninitializedInt(); - public int runtimeCallStackSize; + public final int runtimeCallStackSize = getUninitializedInt(); /** * The offset of the _modifier_flags field in a Klass. */ - public int klassModifierFlagsOffset; + public final int klassModifierFlagsOffset = getUninitializedInt(); /** * The offset of the _access_flags field in a Klass. */ - public int klassAccessFlagsOffset; + public final int klassAccessFlagsOffset = getUninitializedInt(); /** * The offset of the _layout_helper field in a Klass. */ - public int klassLayoutHelperOffset; + public final int klassLayoutHelperOffset = getUninitializedInt(); /** * Bit pattern in the klass layout helper that can be used to identify arrays. */ - public int arrayKlassLayoutHelperIdentifier; + public final int arrayKlassLayoutHelperIdentifier = getUninitializedInt(); /** * The offset of the _componentMirror field in an ArrayKlass. */ - public int arrayKlassComponentMirrorOffset; + public final int arrayKlassComponentMirrorOffset = getUninitializedInt(); /** * The offset of the _super field in a Klass. */ - public int klassSuperKlassOffset; + public final int klassSuperKlassOffset = getUninitializedInt(); /** * The offset of the injected klass field in a {@link Class}. */ - public int klassOffset; + public final int klassOffset = getUninitializedInt(); /** * The offset of the injected array klass field in a {@link Class}. */ - public int arrayKlassOffset; + public final int arrayKlassOffset = getUninitializedInt(); /** * The offset of the injected graal_mirror field in a {@link Class}. */ - public int graalMirrorInClassOffset; + public final int graalMirrorInClassOffset = getUninitializedInt(); /** * The offset of the _method_data field in a metaspace Method. */ - public int methodDataOffset; + public final int methodDataOffset = getUninitializedInt(); - public int nmethodEntryOffset; - public int methodCompiledEntryOffset; - public int basicLockSize; - public int basicLockDisplacedHeaderOffset; - public long tlabIntArrayMarkWord; - public long heapEndAddress; - public long heapTopAddress; - public int threadTlabStartOffset; - public int threadTlabSizeOffset; - public int threadAllocatedBytesOffset; - public int threadLastJavaSpOffset; - public int threadLastJavaPcOffset; + public final int nmethodEntryOffset = getUninitializedInt(); + public final int methodCompiledEntryOffset = getUninitializedInt(); + public final int basicLockSize = getUninitializedInt(); + public final int basicLockDisplacedHeaderOffset = getUninitializedInt(); + public final long tlabIntArrayMarkWord = getUninitializedLong(); + public final long heapEndAddress = getUninitializedLong(); + public final long heapTopAddress = getUninitializedLong(); + public final int threadTlabStartOffset = getUninitializedInt(); + public final int threadTlabSizeOffset = getUninitializedInt(); + public final int threadAllocatedBytesOffset = getUninitializedInt(); + public final int threadLastJavaSpOffset = getUninitializedInt(); + public final int threadLastJavaPcOffset = getUninitializedInt(); /** * This value is only valid on AMD64. */ - public int threadLastJavaFpOffset; + public final int threadLastJavaFpOffset = getUninitializedInt(); /** * This value is only valid on SPARC. */ - public int threadJavaFrameAnchorFlagsOffset; + public final int threadJavaFrameAnchorFlagsOffset = getUninitializedInt(); - public int threadObjectResultOffset; - public int tlabRefillWasteLimitOffset; - public int tlabRefillWasteIncrement; - public int tlabAlignmentReserve; - public int tlabSlowAllocationsOffset; - public int tlabFastRefillWasteOffset; - public int tlabNumberOfRefillsOffset; + public final int threadObjectResultOffset = getUninitializedInt(); + public final int tlabRefillWasteLimitOffset = getUninitializedInt(); + public final int tlabRefillWasteIncrement = getUninitializedInt(); + public final int tlabAlignmentReserve = getUninitializedInt(); + public final int tlabSlowAllocationsOffset = getUninitializedInt(); + public final int tlabFastRefillWasteOffset = getUninitializedInt(); + public final int tlabNumberOfRefillsOffset = getUninitializedInt(); public final boolean tlabStats = getVMOption("TLABStats"); - public int klassInstanceSizeOffset; - public boolean inlineContiguousAllocationSupported; - public long arrayPrototypeMarkWord; - public int layoutHelperLog2ElementSizeShift; - public int layoutHelperLog2ElementSizeMask; - public int layoutHelperElementTypeShift; - public int layoutHelperElementTypeMask; - public int layoutHelperElementTypePrimitiveInPlace; - public int layoutHelperHeaderSizeShift; - public int layoutHelperHeaderSizeMask; - public int layoutHelperOffset; + public final int klassInstanceSizeOffset = getUninitializedInt(); + public final boolean inlineContiguousAllocationSupported = getUninitializedBoolean(); + public final long arrayPrototypeMarkWord = getUninitializedLong(); + public final int layoutHelperLog2ElementSizeShift = getUninitializedInt(); + public final int layoutHelperLog2ElementSizeMask = getUninitializedInt(); + public final int layoutHelperElementTypeShift = getUninitializedInt(); + public final int layoutHelperElementTypeMask = getUninitializedInt(); + public final int layoutHelperElementTypePrimitiveInPlace = getUninitializedInt(); + public final int layoutHelperHeaderSizeShift = getUninitializedInt(); + public final int layoutHelperHeaderSizeMask = getUninitializedInt(); + public final int layoutHelperOffset = getUninitializedInt(); // methodData information - public int methodDataOopDataOffset; - public int methodDataOopTrapHistoryOffset; - public int dataLayoutHeaderSize; - public int dataLayoutTagOffset; - public int dataLayoutFlagsOffset; - public int dataLayoutBCIOffset; - public int dataLayoutCellsOffset; - public int dataLayoutCellSize; - public final int bciProfileWidth = getVMOption("BciProfileWidth", 2); // develop flag; might -// change + public final int methodDataOopDataOffset = getUninitializedInt(); + public final int methodDataOopTrapHistoryOffset = getUninitializedInt(); + public final int dataLayoutHeaderSize = getUninitializedInt(); + public final int dataLayoutTagOffset = getUninitializedInt(); + public final int dataLayoutFlagsOffset = getUninitializedInt(); + public final int dataLayoutBCIOffset = getUninitializedInt(); + public final int dataLayoutCellsOffset = getUninitializedInt(); + public final int dataLayoutCellSize = getUninitializedInt(); + + // develop flag; might change + public final int bciProfileWidth = getVMOption("BciProfileWidth", 2); + public final int typeProfileWidth = getVMOptionInt("TypeProfileWidth"); public final int methodProfileWidth = getVMOptionInt("MethodProfileWidth"); - public long inlineCacheMissStub; - public long handleDeoptStub; - public long uncommonTrapStub; + public final long inlineCacheMissStub = getUninitializedLong(); + public final long handleDeoptStub = getUninitializedLong(); + public final long uncommonTrapStub = getUninitializedLong(); - public long aescryptEncryptBlockStub; - public long aescryptDecryptBlockStub; - public long cipherBlockChainingEncryptAESCryptStub; - public long cipherBlockChainingDecryptAESCryptStub; - public long updateBytesCRC32Stub; + public final long aescryptEncryptBlockStub = getUninitializedLong(); + public final long aescryptDecryptBlockStub = getUninitializedLong(); + public final long cipherBlockChainingEncryptAESCryptStub = getUninitializedLong(); + public final long cipherBlockChainingDecryptAESCryptStub = getUninitializedLong(); + public final long updateBytesCRC32Stub = getUninitializedLong(); - public long newInstanceAddress; - public long newArrayAddress; - public long newMultiArrayAddress; - public long dynamicNewArrayAddress; - public long registerFinalizerAddress; - public long threadIsInterruptedAddress; - public long vmMessageAddress; - public long identityHashCodeAddress; - public long exceptionHandlerForPcAddress; - public long exceptionHandlerForReturnAddressAddress; - public long osrMigrationEndAddress; - public long monitorenterAddress; - public long monitorexitAddress; - public long createNullPointerExceptionAddress; - public long createOutOfBoundsExceptionAddress; - public long logPrimitiveAddress; - public long logObjectAddress; - public long logPrintfAddress; - public long vmErrorAddress; - public long writeBarrierPreAddress; - public long writeBarrierPostAddress; - public long validateObject; - public long javaTimeMillisAddress; - public long javaTimeNanosAddress; - public long arithmeticSinAddress; - public long arithmeticCosAddress; - public long arithmeticTanAddress; - public long loadAndClearExceptionAddress; - public long crcTableAddress; + public final long newInstanceAddress = getUninitializedLong(); + public final long newArrayAddress = getUninitializedLong(); + public final long newMultiArrayAddress = getUninitializedLong(); + public final long dynamicNewArrayAddress = getUninitializedLong(); + public final long registerFinalizerAddress = getUninitializedLong(); + public final long threadIsInterruptedAddress = getUninitializedLong(); + public final long vmMessageAddress = getUninitializedLong(); + public final long identityHashCodeAddress = getUninitializedLong(); + public final long exceptionHandlerForPcAddress = getUninitializedLong(); + public final long exceptionHandlerForReturnAddressAddress = getUninitializedLong(); + public final long osrMigrationEndAddress = getUninitializedLong(); + public final long monitorenterAddress = getUninitializedLong(); + public final long monitorexitAddress = getUninitializedLong(); + public final long createNullPointerExceptionAddress = getUninitializedLong(); + public final long createOutOfBoundsExceptionAddress = getUninitializedLong(); + public final long logPrimitiveAddress = getUninitializedLong(); + public final long logObjectAddress = getUninitializedLong(); + public final long logPrintfAddress = getUninitializedLong(); + public final long vmErrorAddress = getUninitializedLong(); + public final long writeBarrierPreAddress = getUninitializedLong(); + public final long writeBarrierPostAddress = getUninitializedLong(); + public final long validateObject = getUninitializedLong(); + public final long javaTimeMillisAddress = getUninitializedLong(); + public final long javaTimeNanosAddress = getUninitializedLong(); + public final long arithmeticSinAddress = getUninitializedLong(); + public final long arithmeticCosAddress = getUninitializedLong(); + public final long arithmeticTanAddress = getUninitializedLong(); + public final long loadAndClearExceptionAddress = getUninitializedLong(); + public final long crcTableAddress = getUninitializedLong(); - public int deoptReasonNone; - public int deoptReasonNullCheck; - public int deoptReasonRangeCheck; - public int deoptReasonClassCheck; - public int deoptReasonArrayCheck; - public int deoptReasonUnreached0; - public int deoptReasonTypeCheckInlining; - public int deoptReasonOptimizedTypeCheck; - public int deoptReasonNotCompiledExceptionHandler; - public int deoptReasonUnresolved; - public int deoptReasonJsrMismatch; - public int deoptReasonDiv0Check; - public int deoptReasonConstraint; - public int deoptReasonLoopLimitCheck; + public final int deoptReasonNone = getUninitializedInt(); + public final int deoptReasonNullCheck = getUninitializedInt(); + public final int deoptReasonRangeCheck = getUninitializedInt(); + public final int deoptReasonClassCheck = getUninitializedInt(); + public final int deoptReasonArrayCheck = getUninitializedInt(); + public final int deoptReasonUnreached0 = getUninitializedInt(); + public final int deoptReasonTypeCheckInlining = getUninitializedInt(); + public final int deoptReasonOptimizedTypeCheck = getUninitializedInt(); + public final int deoptReasonNotCompiledExceptionHandler = getUninitializedInt(); + public final int deoptReasonUnresolved = getUninitializedInt(); + public final int deoptReasonJsrMismatch = getUninitializedInt(); + public final int deoptReasonDiv0Check = getUninitializedInt(); + public final int deoptReasonConstraint = getUninitializedInt(); + public final int deoptReasonLoopLimitCheck = getUninitializedInt(); - public int deoptActionNone; - public int deoptActionMaybeRecompile; - public int deoptActionReinterpret; - public int deoptActionMakeNotEntrant; - public int deoptActionMakeNotCompilable; + public final int deoptActionNone = getUninitializedInt(); + public final int deoptActionMaybeRecompile = getUninitializedInt(); + public final int deoptActionReinterpret = getUninitializedInt(); + public final int deoptActionMakeNotEntrant = getUninitializedInt(); + public final int deoptActionMakeNotCompilable = getUninitializedInt(); - public int vmIntrinsicInvokeBasic; - public int vmIntrinsicLinkToVirtual; - public int vmIntrinsicLinkToStatic; - public int vmIntrinsicLinkToSpecial; - public int vmIntrinsicLinkToInterface; + public final int vmIntrinsicInvokeBasic = getUninitializedInt(); + public final int vmIntrinsicLinkToVirtual = getUninitializedInt(); + public final int vmIntrinsicLinkToStatic = getUninitializedInt(); + public final int vmIntrinsicLinkToSpecial = getUninitializedInt(); + public final int vmIntrinsicLinkToInterface = getUninitializedInt(); - public void check() { - assert codeEntryAlignment > 0; + public boolean check() { + assert codeEntryAlignment > 0 : codeEntryAlignment; assert stackShadowPages > 0; + for (Field f : getClass().getDeclaredFields()) { + int modifiers = f.getModifiers(); + if (Modifier.isPublic(modifiers) && !Modifier.isStatic(modifiers)) { + assert Modifier.isFinal(modifiers) : "field should be final: " + f; + } + } + return true; } }