< prev index next >

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/GraalHotSpotVMConfig.java

Print this page
rev 56282 : [mq]: graal


  37 import jdk.vm.ci.meta.ResolvedJavaMethod;
  38 
  39 /**
  40  * Used to access native configuration details.
  41  */
  42 public class GraalHotSpotVMConfig extends GraalHotSpotVMConfigBase {
  43 
  44     GraalHotSpotVMConfig(HotSpotVMConfigStore store) {
  45         super(store);
  46 
  47         assert narrowKlassShift <= logKlassAlignment;
  48         assert narrowOopShift <= logMinObjAlignment();
  49         oopEncoding = new CompressEncoding(narrowOopBase, narrowOopShift);
  50         klassEncoding = new CompressEncoding(narrowKlassBase, narrowKlassShift);
  51 
  52         assert check();
  53     }
  54 
  55     private final CompressEncoding oopEncoding;
  56     private final CompressEncoding klassEncoding;

  57 
  58     public CompressEncoding getOopEncoding() {
  59         return oopEncoding;
  60     }
  61 
  62     public CompressEncoding getKlassEncoding() {
  63         return klassEncoding;
  64     }
  65 
  66     public final boolean cAssertions = getConstant("ASSERT", Boolean.class);
  67 
  68     public final int codeEntryAlignment = getFlag("CodeEntryAlignment", Integer.class);
  69     public final boolean enableContended = getFlag("EnableContended", Boolean.class);
  70     public final boolean restrictContended = getFlag("RestrictContended", Boolean.class);
  71     public final int contendedPaddingWidth = getFlag("ContendedPaddingWidth", Integer.class);
  72     public final int fieldsAllocationStyle = getFlag("FieldsAllocationStyle", Integer.class);
  73     public final boolean compactFields = getFlag("CompactFields", Boolean.class);
  74     public final boolean verifyOops = getFlag("VerifyOops", Boolean.class);
  75     public final boolean ciTime = getFlag("CITime", Boolean.class);
  76     public final boolean ciTimeEach = getFlag("CITimeEach", Boolean.class);


 191 
 192     public final int minObjAlignment() {
 193         return objectAlignment / heapWordSize;
 194     }
 195 
 196     public final int logMinObjAlignment() {
 197         return (int) (Math.log(objectAlignment) / Math.log(2));
 198     }
 199 
 200     public final int narrowKlassSize = getFieldValue("CompilerToVM::Data::sizeof_narrowKlass", Integer.class, "int");
 201     public final long narrowKlassBase = getFieldValue("CompilerToVM::Data::Universe_narrow_klass_base", Long.class, "address");
 202     public final int narrowKlassShift = getFieldValue("CompilerToVM::Data::Universe_narrow_klass_shift", Integer.class, "int");
 203     public final int logKlassAlignment = getConstant("LogKlassAlignmentInBytes", Integer.class);
 204 
 205     public final int stackShadowPages = getFlag("StackShadowPages", Integer.class);
 206     public final int stackReservedPages = getFlag("StackReservedPages", Integer.class, 0);
 207     public final boolean useStackBanging = getFlag("UseStackBanging", Boolean.class);
 208     public final int stackBias = getConstant("STACK_BIAS", Integer.class);
 209     public final int vmPageSize = getFieldValue("CompilerToVM::Data::vm_page_size", Integer.class, "int");
 210 
 211     public final int markOffset = getFieldOffset("oopDesc::_mark", Integer.class, "markWord");
 212     public final int hubOffset = getFieldOffset("oopDesc::_metadata._klass", Integer.class, "Klass*");
 213 
 214     public final int prototypeMarkWordOffset = getFieldOffset("Klass::_prototype_header", Integer.class, "markWord");
 215     public final int subklassOffset = getFieldOffset("Klass::_subklass", Integer.class, "Klass*");
 216     public final int nextSiblingOffset = getFieldOffset("Klass::_next_sibling", Integer.class, "Klass*");
 217     public final int superCheckOffsetOffset = getFieldOffset("Klass::_super_check_offset", Integer.class, "juint");
 218     public final int secondarySuperCacheOffset = getFieldOffset("Klass::_secondary_super_cache", Integer.class, "Klass*");
 219     public final int secondarySupersOffset = getFieldOffset("Klass::_secondary_supers", Integer.class, "Array<Klass*>*");
 220 
 221     public final boolean classMirrorIsHandle;
 222     public final int classMirrorOffset;
 223     {
 224         String name = "Klass::_java_mirror";
 225         int offset = -1;
 226         boolean isHandle = false;
 227         try {
 228             offset = getFieldOffset(name, Integer.class, "oop");
 229         } catch (JVMCIError e) {
 230 
 231         }
 232         if (offset == -1) {
 233             try {
 234                 offset = getFieldOffset(name, Integer.class, "jobject");
 235                 isHandle = true;
 236             } catch (JVMCIError e) {
 237                 try {
 238                     // JDK-8186777
 239                     offset = getFieldOffset(name, Integer.class, "OopHandle");
 240                     isHandle = true;
 241                 } catch (JVMCIError e2) {
 242                 }
 243             }
 244         }
 245         if (offset == -1) {
 246             throw new JVMCIError("cannot get offset of field " + name + " with type oop, jobject or OopHandle");
 247         }
 248         classMirrorOffset = offset;
 249         classMirrorIsHandle = isHandle;
 250     }
 251 
 252     public final int klassSuperKlassOffset = getFieldOffset("Klass::_super", Integer.class, "Klass*");
 253     public final int klassModifierFlagsOffset = getFieldOffset("Klass::_modifier_flags", Integer.class, "jint");
 254     public final int klassAccessFlagsOffset = getFieldOffset("Klass::_access_flags", Integer.class, "AccessFlags");
 255     public final int klassLayoutHelperOffset = getFieldOffset("Klass::_layout_helper", Integer.class, "jint");
 256 
 257     public final int klassLayoutHelperNeutralValue = getConstant("Klass::_lh_neutral_value", Integer.class);
 258     public final int layoutHelperLog2ElementSizeShift = getConstant("Klass::_lh_log2_element_size_shift", Integer.class);
 259     public final int layoutHelperLog2ElementSizeMask = getConstant("Klass::_lh_log2_element_size_mask", Integer.class);
 260     public final int layoutHelperElementTypeShift = getConstant("Klass::_lh_element_type_shift", Integer.class);
 261     public final int layoutHelperElementTypeMask = getConstant("Klass::_lh_element_type_mask", Integer.class);
 262     public final int layoutHelperHeaderSizeShift = getConstant("Klass::_lh_header_size_shift", Integer.class);
 263     public final int layoutHelperHeaderSizeMask = getConstant("Klass::_lh_header_size_mask", Integer.class);
 264     public final int layoutHelperArrayTagShift = getConstant("Klass::_lh_array_tag_shift", Integer.class);
 265     public final int layoutHelperArrayTagTypeValue = getConstant("Klass::_lh_array_tag_type_value", Integer.class);
 266     public final int layoutHelperArrayTagObjectValue = getConstant("Klass::_lh_array_tag_obj_value", Integer.class);
 267 
 268     /**
 269      * This filters out the bit that differentiates a type array from an object array.
 270      */
 271     public int layoutHelperElementTypePrimitiveInPlace() {
 272         return (layoutHelperArrayTagTypeValue & ~layoutHelperArrayTagObjectValue) << layoutHelperArrayTagShift;
 273     }
 274 
 275     public final int vtableEntrySize = getFieldValue("CompilerToVM::Data::sizeof_vtableEntry", Integer.class, "int");
 276     public final int vtableEntryMethodOffset = getFieldOffset("vtableEntry::_method", Integer.class, "Method*");
 277 
 278     public final int instanceKlassInitStateOffset = getFieldOffset("InstanceKlass::_init_state", Integer.class, "u1");

 279     public final int instanceKlassConstantsOffset = getFieldOffset("InstanceKlass::_constants", Integer.class, "ConstantPool*");
 280     public final int instanceKlassFieldsOffset = getFieldOffset("InstanceKlass::_fields", Integer.class, "Array<u2>*");
 281     public final int klassVtableStartOffset = getFieldValue("CompilerToVM::Data::Klass_vtable_start_offset", Integer.class, "int");
 282     public final int klassVtableLengthOffset = getFieldValue("CompilerToVM::Data::Klass_vtable_length_offset", Integer.class, "int");
 283 
 284     public final int instanceKlassStateLinked = getConstant("InstanceKlass::linked", Integer.class);

 285     public final int instanceKlassStateFullyInitialized = getConstant("InstanceKlass::fully_initialized", Integer.class);
 286 
 287     public final int arrayOopDescSize = getFieldValue("CompilerToVM::Data::sizeof_arrayOopDesc", Integer.class, "int");
 288 
 289     /**
 290      * The offset of the array length word in an array object's header.
 291      *
 292      * See {@code arrayOopDesc::length_offset_in_bytes()}.
 293      */
 294     public final int arrayOopDescLengthOffset() {
 295         return useCompressedClassPointers ? hubOffset + narrowKlassSize : arrayOopDescSize;
 296     }
 297 
 298     public final int arrayU1LengthOffset = getFieldOffset("Array<int>::_length", Integer.class, "int");
 299     public final int arrayU1DataOffset = getFieldOffset("Array<u1>::_data", Integer.class);
 300     public final int arrayU2DataOffset = getFieldOffset("Array<u2>::_data", Integer.class);
 301     public final int metaspaceArrayLengthOffset = getFieldOffset("Array<Klass*>::_length", Integer.class, "int");
 302     public final int metaspaceArrayBaseOffset = getFieldOffset("Array<Klass*>::_data[0]", Integer.class, "Klass*");
 303 
 304     public final int arrayClassElementOffset = getFieldOffset("ObjArrayKlass::_element_klass", Integer.class, "Klass*");


 428     public int threadLastJavaPcOffset() {
 429         return javaThreadAnchorOffset + javaFrameAnchorLastJavaPcOffset;
 430     }
 431 
 432     public int threadLastJavaFpOffset() {
 433         assert osArch.equals("aarch64") || osArch.equals("amd64");
 434         return javaThreadAnchorOffset + getFieldOffset("JavaFrameAnchor::_last_Java_fp", Integer.class, "intptr_t*");
 435     }
 436 
 437     public int threadJavaFrameAnchorFlagsOffset() {
 438         assert osArch.equals("sparc");
 439         return javaThreadAnchorOffset + getFieldOffset("JavaFrameAnchor::_flags", Integer.class, "int");
 440     }
 441 
 442     public final int runtimeCallStackSize = getConstant("frame::arg_reg_save_area_bytes", Integer.class, intRequiredOnAMD64);
 443     public final int frameInterpreterFrameSenderSpOffset = getConstant("frame::interpreter_frame_sender_sp_offset", Integer.class, intRequiredOnAMD64);
 444     public final int frameInterpreterFrameLastSpOffset = getConstant("frame::interpreter_frame_last_sp_offset", Integer.class, intRequiredOnAMD64);
 445 
 446     public final int osThreadInterruptedOffset = getFieldOffset("OSThread::_interrupted", Integer.class, "jint");
 447 
 448     public final long markWordHashShift = getConstant("markWord::hash_shift", Long.class);
 449 
 450     public final int biasedLockMaskInPlace = getConstant("markWord::biased_lock_mask_in_place", Integer.class);
 451     public final int ageMaskInPlace = getConstant("markWord::age_mask_in_place", Integer.class);
 452     public final int epochMaskInPlace = getConstant("markWord::epoch_mask_in_place", Integer.class);
 453     public final long markWordHashMask = getConstant("markWord::hash_mask", Long.class);
 454     public final long markWordHashMaskInPlace = getConstant("markWord::hash_mask_in_place", Long.class);
 455 
 456     public final int unlockedMask = getConstant("markWord::unlocked_value", Integer.class);
 457     public final int monitorMask = getConstant("markWord::monitor_value", Integer.class, -1);
 458     public final int biasedLockPattern = getConstant("markWord::biased_lock_pattern", Integer.class);
 459 
 460     // This field has no type in vmStructs.cpp
 461     public final int objectMonitorOwner = getFieldOffset("ObjectMonitor::_owner", Integer.class, null, -1);
 462     public final int objectMonitorRecursions = getFieldOffset("ObjectMonitor::_recursions", Integer.class, "intptr_t", -1);
 463     public final int objectMonitorCxq = getFieldOffset("ObjectMonitor::_cxq", Integer.class, "ObjectWaiter*", -1);
 464     public final int objectMonitorEntryList = getFieldOffset("ObjectMonitor::_EntryList", Integer.class, "ObjectWaiter*", -1);
 465     public final int objectMonitorSucc = getFieldOffset("ObjectMonitor::_succ", Integer.class, "Thread*", -1);
 466 
 467     public final int markWordNoHashInPlace = getConstant("markWord::no_hash_in_place", Integer.class);
 468     public final int markWordNoLockInPlace = getConstant("markWord::no_lock_in_place", Integer.class);
 469 
 470     /**
 471      * See {@code markWord::prototype()}.
 472      */
 473     public long arrayPrototypeMarkWord() {
 474         return markWordNoHashInPlace | markWordNoLockInPlace;
 475     }
 476 
 477     /**
 478      * See {@code markWord::copy_set_hash()}.
 479      */
 480     public long tlabIntArrayMarkWord() {
 481         long tmp = arrayPrototypeMarkWord() & (~markWordHashMaskInPlace);
 482         tmp |= ((0x2 & markWordHashMask) << markWordHashShift);
 483         return tmp;
 484     }
 485 




 486     /**
 487      * Mark word right shift to get identity hash code.
 488      */
 489     public final int identityHashCodeShift = getConstant("markWord::hash_shift", Integer.class);
 490 
 491     /**
 492      * Identity hash code value when uninitialized.
 493      */
 494     public final int uninitializedIdentityHashCodeValue = getConstant("markWord::no_hash", Integer.class);
 495 
 496     public final int methodAccessFlagsOffset = getFieldOffset("Method::_access_flags", Integer.class, "AccessFlags");
 497     public final int methodConstMethodOffset = getFieldOffset("Method::_constMethod", Integer.class, "ConstMethod*");
 498     public final int methodIntrinsicIdOffset = versioned.methodIntrinsicIdOffset;
 499     public final int methodFlagsOffset = versioned.methodFlagsOffset;
 500     public final int methodVtableIndexOffset = getFieldOffset("Method::_vtable_index", Integer.class, "int");
 501 
 502     public final int methodCountersOffset = getFieldOffset("Method::_method_counters", Integer.class, "MethodCounters*");
 503     public final int methodDataOffset = getFieldOffset("Method::_method_data", Integer.class, "MethodData*");
 504     public final int methodCompiledEntryOffset = getFieldOffset("Method::_from_compiled_entry", Integer.class, "address");
 505     public final int methodCodeOffset = versioned.methodCodeOffset;
 506 
 507     public final int methodFlagsCallerSensitive = getConstant("Method::_caller_sensitive", Integer.class);
 508     public final int methodFlagsForceInline = getConstant("Method::_force_inline", Integer.class);
 509     public final int methodFlagsDontInline = getConstant("Method::_dont_inline", Integer.class);
 510     public final int methodFlagsHidden = getConstant("Method::_hidden", Integer.class);
 511     public final int nonvirtualVtableIndex = getConstant("Method::nonvirtual_vtable_index", Integer.class);
 512     public final int invalidVtableIndex = getConstant("Method::invalid_vtable_index", Integer.class);
 513 
 514     public final int invocationCounterOffset = getFieldOffset("MethodCounters::_invocation_counter", Integer.class, "InvocationCounter");


 548      */
 549     public final int maxOopMapStackOffset = getFieldValue("CompilerToVM::Data::_max_oop_map_stack_offset", Integer.class, "int");
 550 
 551     public final long safepointPollingAddress = getFieldValue("os::_polling_page", Long.class, "address");
 552 
 553     // G1 Collector Related Values.
 554 
 555     public final byte dirtyCardValue = versioned.dirtyCardValue;
 556     public final byte g1YoungCardValue = versioned.g1YoungCardValue;
 557 
 558     public final int g1SATBQueueMarkingOffset = versioned.g1SATBQueueMarkingOffset;
 559     public final int g1SATBQueueIndexOffset = versioned.g1SATBQueueIndexOffset;
 560     public final int g1SATBQueueBufferOffset = versioned.g1SATBQueueBufferOffset;
 561     public final int g1CardQueueIndexOffset = versioned.g1CardQueueIndexOffset;
 562     public final int g1CardQueueBufferOffset = versioned.g1CardQueueBufferOffset;
 563 
 564     public final int klassOffset = getFieldValue("java_lang_Class::_klass_offset", Integer.class, "int");
 565     public final int arrayKlassOffset = getFieldValue("java_lang_Class::_array_klass_offset", Integer.class, "int");
 566 
 567     public final int basicLockSize = getFieldValue("CompilerToVM::Data::sizeof_BasicLock", Integer.class, "int");
 568     public final int basicLockDisplacedHeaderOffset = getFieldOffset("BasicLock::_displaced_header", Integer.class, "markWord");
 569 
 570     public final int threadPollingPageOffset = getFieldOffset("Thread::_polling_page", Integer.class, "address", -1);
 571     public final int threadAllocatedBytesOffset = getFieldOffset("Thread::_allocated_bytes", Integer.class, "jlong");
 572 
 573     public final int tlabRefillWasteIncrement = getFlag("TLABWasteIncrement", Integer.class);
 574 
 575     private final int threadLocalAllocBufferStartOffset = getFieldOffset("ThreadLocalAllocBuffer::_start", Integer.class, "HeapWord*");
 576     private final int threadLocalAllocBufferEndOffset = getFieldOffset("ThreadLocalAllocBuffer::_end", Integer.class, "HeapWord*");
 577     private final int threadLocalAllocBufferTopOffset = getFieldOffset("ThreadLocalAllocBuffer::_top", Integer.class, "HeapWord*");
 578     private final int threadLocalAllocBufferPfTopOffset = getFieldOffset("ThreadLocalAllocBuffer::_pf_top", Integer.class, "HeapWord*");
 579     private final int threadLocalAllocBufferSlowAllocationsOffset = getFieldOffset("ThreadLocalAllocBuffer::_slow_allocations", Integer.class, "unsigned");
 580     private final int threadLocalAllocBufferFastRefillWasteOffset = getFieldOffset("ThreadLocalAllocBuffer::_fast_refill_waste", Integer.class, "unsigned");
 581     private final int threadLocalAllocBufferNumberOfRefillsOffset = getFieldOffset("ThreadLocalAllocBuffer::_number_of_refills", Integer.class, "unsigned");
 582     private final int threadLocalAllocBufferRefillWasteLimitOffset = getFieldOffset("ThreadLocalAllocBuffer::_refill_waste_limit", Integer.class, "size_t");
 583     private final int threadLocalAllocBufferDesiredSizeOffset = getFieldOffset("ThreadLocalAllocBuffer::_desired_size", Integer.class, "size_t");
 584 
 585     public int tlabSlowAllocationsOffset() {
 586         return threadTlabOffset + threadLocalAllocBufferSlowAllocationsOffset;
 587     }
 588 


 604 
 605     public int threadTlabStartOffset() {
 606         return threadTlabOffset + threadLocalAllocBufferStartOffset;
 607     }
 608 
 609     public int threadTlabEndOffset() {
 610         return threadTlabOffset + threadLocalAllocBufferEndOffset;
 611     }
 612 
 613     public int threadTlabTopOffset() {
 614         return threadTlabOffset + threadLocalAllocBufferTopOffset;
 615     }
 616 
 617     public int threadTlabPfTopOffset() {
 618         return threadTlabOffset + threadLocalAllocBufferPfTopOffset;
 619     }
 620 
 621     public final int tlabAlignmentReserve = getFieldValue("CompilerToVM::Data::ThreadLocalAllocBuffer_alignment_reserve", Integer.class, "size_t");
 622 
 623     public final boolean tlabStats = getFlag("TLABStats", Boolean.class);






 624 
 625     // FIXME This is only temporary until the GC code is changed.
 626     public final boolean inlineContiguousAllocationSupported = getFieldValue("CompilerToVM::Data::_supports_inline_contig_alloc", Boolean.class);
 627     public final long heapEndAddress = getFieldValue("CompilerToVM::Data::_heap_end_addr", Long.class, "HeapWord**");
 628     public final long heapTopAddress = versioned.heapTopAddress;
 629 
 630     public final boolean cmsIncrementalMode = getFlag("CMSIncrementalMode", Boolean.class, false);
 631 
 632     public final long inlineCacheMissStub = getFieldValue("CompilerToVM::Data::SharedRuntime_ic_miss_stub", Long.class, "address");
 633     public final long handleWrongMethodStub = getFieldValue("CompilerToVM::Data::SharedRuntime_handle_wrong_method_stub", Long.class, "address");
 634 
 635     public final long handleDeoptStub = getFieldValue("CompilerToVM::Data::SharedRuntime_deopt_blob_unpack", Long.class, "address");
 636     public final long uncommonTrapStub = getFieldValue("CompilerToVM::Data::SharedRuntime_deopt_blob_uncommon_trap", Long.class, "address");
 637 
 638     public final long codeCacheLowBound = versioned.codeCacheLowBound;
 639     public final long codeCacheHighBound = versioned.codeCacheHighBound;
 640 
 641     public final long aescryptEncryptBlockStub = getFieldValue("StubRoutines::_aescrypt_encryptBlock", Long.class, "address");
 642     public final long aescryptDecryptBlockStub = getFieldValue("StubRoutines::_aescrypt_decryptBlock", Long.class, "address");
 643     public final long cipherBlockChainingEncryptAESCryptStub = getFieldValue("StubRoutines::_cipherBlockChaining_encryptAESCrypt", Long.class, "address");




  37 import jdk.vm.ci.meta.ResolvedJavaMethod;
  38 
  39 /**
  40  * Used to access native configuration details.
  41  */
  42 public class GraalHotSpotVMConfig extends GraalHotSpotVMConfigBase {
  43 
  44     GraalHotSpotVMConfig(HotSpotVMConfigStore store) {
  45         super(store);
  46 
  47         assert narrowKlassShift <= logKlassAlignment;
  48         assert narrowOopShift <= logMinObjAlignment();
  49         oopEncoding = new CompressEncoding(narrowOopBase, narrowOopShift);
  50         klassEncoding = new CompressEncoding(narrowKlassBase, narrowKlassShift);
  51 
  52         assert check();
  53     }
  54 
  55     private final CompressEncoding oopEncoding;
  56     private final CompressEncoding klassEncoding;
  57     private final String markWord = versioned.markWordFieldType;
  58 
  59     public CompressEncoding getOopEncoding() {
  60         return oopEncoding;
  61     }
  62 
  63     public CompressEncoding getKlassEncoding() {
  64         return klassEncoding;
  65     }
  66 
  67     public final boolean cAssertions = getConstant("ASSERT", Boolean.class);
  68 
  69     public final int codeEntryAlignment = getFlag("CodeEntryAlignment", Integer.class);
  70     public final boolean enableContended = getFlag("EnableContended", Boolean.class);
  71     public final boolean restrictContended = getFlag("RestrictContended", Boolean.class);
  72     public final int contendedPaddingWidth = getFlag("ContendedPaddingWidth", Integer.class);
  73     public final int fieldsAllocationStyle = getFlag("FieldsAllocationStyle", Integer.class);
  74     public final boolean compactFields = getFlag("CompactFields", Boolean.class);
  75     public final boolean verifyOops = getFlag("VerifyOops", Boolean.class);
  76     public final boolean ciTime = getFlag("CITime", Boolean.class);
  77     public final boolean ciTimeEach = getFlag("CITimeEach", Boolean.class);


 192 
 193     public final int minObjAlignment() {
 194         return objectAlignment / heapWordSize;
 195     }
 196 
 197     public final int logMinObjAlignment() {
 198         return (int) (Math.log(objectAlignment) / Math.log(2));
 199     }
 200 
 201     public final int narrowKlassSize = getFieldValue("CompilerToVM::Data::sizeof_narrowKlass", Integer.class, "int");
 202     public final long narrowKlassBase = getFieldValue("CompilerToVM::Data::Universe_narrow_klass_base", Long.class, "address");
 203     public final int narrowKlassShift = getFieldValue("CompilerToVM::Data::Universe_narrow_klass_shift", Integer.class, "int");
 204     public final int logKlassAlignment = getConstant("LogKlassAlignmentInBytes", Integer.class);
 205 
 206     public final int stackShadowPages = getFlag("StackShadowPages", Integer.class);
 207     public final int stackReservedPages = getFlag("StackReservedPages", Integer.class, 0);
 208     public final boolean useStackBanging = getFlag("UseStackBanging", Boolean.class);
 209     public final int stackBias = getConstant("STACK_BIAS", Integer.class);
 210     public final int vmPageSize = getFieldValue("CompilerToVM::Data::vm_page_size", Integer.class, "int");
 211 
 212     public final int markOffset = getFieldOffset("oopDesc::_mark", Integer.class, markWord);
 213     public final int hubOffset = getFieldOffset("oopDesc::_metadata._klass", Integer.class, "Klass*");
 214 
 215     public final int prototypeMarkWordOffset = getFieldOffset("Klass::_prototype_header", Integer.class, markWord);
 216     public final int subklassOffset = getFieldOffset("Klass::_subklass", Integer.class, "Klass*");
 217     public final int nextSiblingOffset = getFieldOffset("Klass::_next_sibling", Integer.class, "Klass*");
 218     public final int superCheckOffsetOffset = getFieldOffset("Klass::_super_check_offset", Integer.class, "juint");
 219     public final int secondarySuperCacheOffset = getFieldOffset("Klass::_secondary_super_cache", Integer.class, "Klass*");
 220     public final int secondarySupersOffset = getFieldOffset("Klass::_secondary_supers", Integer.class, "Array<Klass*>*");
 221 
 222     public final boolean classMirrorIsHandle = versioned.classMirrorIsHandle;
 223     public final int classMirrorOffset = versioned.classMirrorOffset;




























 224 
 225     public final int klassSuperKlassOffset = getFieldOffset("Klass::_super", Integer.class, "Klass*");
 226     public final int klassModifierFlagsOffset = getFieldOffset("Klass::_modifier_flags", Integer.class, "jint");
 227     public final int klassAccessFlagsOffset = getFieldOffset("Klass::_access_flags", Integer.class, "AccessFlags");
 228     public final int klassLayoutHelperOffset = getFieldOffset("Klass::_layout_helper", Integer.class, "jint");
 229 
 230     public final int klassLayoutHelperNeutralValue = getConstant("Klass::_lh_neutral_value", Integer.class);
 231     public final int layoutHelperLog2ElementSizeShift = getConstant("Klass::_lh_log2_element_size_shift", Integer.class);
 232     public final int layoutHelperLog2ElementSizeMask = getConstant("Klass::_lh_log2_element_size_mask", Integer.class);
 233     public final int layoutHelperElementTypeShift = getConstant("Klass::_lh_element_type_shift", Integer.class);
 234     public final int layoutHelperElementTypeMask = getConstant("Klass::_lh_element_type_mask", Integer.class);
 235     public final int layoutHelperHeaderSizeShift = getConstant("Klass::_lh_header_size_shift", Integer.class);
 236     public final int layoutHelperHeaderSizeMask = getConstant("Klass::_lh_header_size_mask", Integer.class);
 237     public final int layoutHelperArrayTagShift = getConstant("Klass::_lh_array_tag_shift", Integer.class);
 238     public final int layoutHelperArrayTagTypeValue = getConstant("Klass::_lh_array_tag_type_value", Integer.class);
 239     public final int layoutHelperArrayTagObjectValue = getConstant("Klass::_lh_array_tag_obj_value", Integer.class);
 240 
 241     /**
 242      * This filters out the bit that differentiates a type array from an object array.
 243      */
 244     public int layoutHelperElementTypePrimitiveInPlace() {
 245         return (layoutHelperArrayTagTypeValue & ~layoutHelperArrayTagObjectValue) << layoutHelperArrayTagShift;
 246     }
 247 
 248     public final int vtableEntrySize = getFieldValue("CompilerToVM::Data::sizeof_vtableEntry", Integer.class, "int");
 249     public final int vtableEntryMethodOffset = getFieldOffset("vtableEntry::_method", Integer.class, "Method*");
 250 
 251     public final int instanceKlassInitStateOffset = getFieldOffset("InstanceKlass::_init_state", Integer.class, "u1");
 252     public final int instanceKlassInitThreadOffset = getFieldOffset("InstanceKlass::_init_thread", Integer.class, "Thread*", -1);
 253     public final int instanceKlassConstantsOffset = getFieldOffset("InstanceKlass::_constants", Integer.class, "ConstantPool*");
 254     public final int instanceKlassFieldsOffset = getFieldOffset("InstanceKlass::_fields", Integer.class, "Array<u2>*");
 255     public final int klassVtableStartOffset = getFieldValue("CompilerToVM::Data::Klass_vtable_start_offset", Integer.class, "int");
 256     public final int klassVtableLengthOffset = getFieldValue("CompilerToVM::Data::Klass_vtable_length_offset", Integer.class, "int");
 257 
 258     public final int instanceKlassStateLinked = getConstant("InstanceKlass::linked", Integer.class);
 259     public final int instanceKlassStateBeingInitialized = getConstant("InstanceKlass::being_initialized", Integer.class, -1);
 260     public final int instanceKlassStateFullyInitialized = getConstant("InstanceKlass::fully_initialized", Integer.class);
 261 
 262     public final int arrayOopDescSize = getFieldValue("CompilerToVM::Data::sizeof_arrayOopDesc", Integer.class, "int");
 263 
 264     /**
 265      * The offset of the array length word in an array object's header.
 266      *
 267      * See {@code arrayOopDesc::length_offset_in_bytes()}.
 268      */
 269     public final int arrayOopDescLengthOffset() {
 270         return useCompressedClassPointers ? hubOffset + narrowKlassSize : arrayOopDescSize;
 271     }
 272 
 273     public final int arrayU1LengthOffset = getFieldOffset("Array<int>::_length", Integer.class, "int");
 274     public final int arrayU1DataOffset = getFieldOffset("Array<u1>::_data", Integer.class);
 275     public final int arrayU2DataOffset = getFieldOffset("Array<u2>::_data", Integer.class);
 276     public final int metaspaceArrayLengthOffset = getFieldOffset("Array<Klass*>::_length", Integer.class, "int");
 277     public final int metaspaceArrayBaseOffset = getFieldOffset("Array<Klass*>::_data[0]", Integer.class, "Klass*");
 278 
 279     public final int arrayClassElementOffset = getFieldOffset("ObjArrayKlass::_element_klass", Integer.class, "Klass*");


 403     public int threadLastJavaPcOffset() {
 404         return javaThreadAnchorOffset + javaFrameAnchorLastJavaPcOffset;
 405     }
 406 
 407     public int threadLastJavaFpOffset() {
 408         assert osArch.equals("aarch64") || osArch.equals("amd64");
 409         return javaThreadAnchorOffset + getFieldOffset("JavaFrameAnchor::_last_Java_fp", Integer.class, "intptr_t*");
 410     }
 411 
 412     public int threadJavaFrameAnchorFlagsOffset() {
 413         assert osArch.equals("sparc");
 414         return javaThreadAnchorOffset + getFieldOffset("JavaFrameAnchor::_flags", Integer.class, "int");
 415     }
 416 
 417     public final int runtimeCallStackSize = getConstant("frame::arg_reg_save_area_bytes", Integer.class, intRequiredOnAMD64);
 418     public final int frameInterpreterFrameSenderSpOffset = getConstant("frame::interpreter_frame_sender_sp_offset", Integer.class, intRequiredOnAMD64);
 419     public final int frameInterpreterFrameLastSpOffset = getConstant("frame::interpreter_frame_last_sp_offset", Integer.class, intRequiredOnAMD64);
 420 
 421     public final int osThreadInterruptedOffset = getFieldOffset("OSThread::_interrupted", Integer.class, "jint");
 422 
 423     public final long markWordHashShift = getConstant(markWordField("hash_shift"), Long.class);
 424 
 425     public final int biasedLockMaskInPlace = getConstant(markWordField("biased_lock_mask_in_place"), Integer.class);
 426     public final int ageMaskInPlace = getConstant(markWordField("age_mask_in_place"), Integer.class);
 427     public final int epochMaskInPlace = getConstant(markWordField("epoch_mask_in_place"), Integer.class);
 428     public final long markWordHashMask = getConstant(markWordField("hash_mask"), Long.class);
 429     public final long markWordHashMaskInPlace = getConstant(markWordField("hash_mask_in_place"), Long.class);
 430 
 431     public final int unlockedMask = getConstant(markWordField("unlocked_value"), Integer.class);
 432     public final int monitorMask = getConstant(markWordField("monitor_value"), Integer.class, -1);
 433     public final int biasedLockPattern = getConstant(markWordField("biased_lock_pattern"), Integer.class);
 434 
 435     // This field has no type in vmStructs.cpp
 436     public final int objectMonitorOwner = getFieldOffset("ObjectMonitor::_owner", Integer.class, null, -1);
 437     public final int objectMonitorRecursions = getFieldOffset("ObjectMonitor::_recursions", Integer.class, "intptr_t", -1);
 438     public final int objectMonitorCxq = getFieldOffset("ObjectMonitor::_cxq", Integer.class, "ObjectWaiter*", -1);
 439     public final int objectMonitorEntryList = getFieldOffset("ObjectMonitor::_EntryList", Integer.class, "ObjectWaiter*", -1);
 440     public final int objectMonitorSucc = getFieldOffset("ObjectMonitor::_succ", Integer.class, "Thread*", -1);
 441 
 442     public final int markWordNoHashInPlace = getConstant(markWordField("no_hash_in_place"), Integer.class);
 443     public final int markWordNoLockInPlace = getConstant(markWordField("no_lock_in_place"), Integer.class);
 444 
 445     /**
 446      * See {@code markOopDesc::prototype()}/{@code markWord::prototype()}.
 447      */
 448     public long arrayPrototypeMarkWord() {
 449         return markWordNoHashInPlace | markWordNoLockInPlace;
 450     }
 451 
 452     /**
 453      * See {@code markOopDesc::copy_set_hash()}/{@code markWord::copy_set_hash()}.
 454      */
 455     public long tlabIntArrayMarkWord() {
 456         long tmp = arrayPrototypeMarkWord() & (~markWordHashMaskInPlace);
 457         tmp |= ((0x2 & markWordHashMask) << markWordHashShift);
 458         return tmp;
 459     }
 460 
 461     private String markWordField(String simpleName) {
 462         return versioned.markWordClassName + "::" + simpleName;
 463     }
 464 
 465     /**
 466      * Mark word right shift to get identity hash code.
 467      */
 468     public final int identityHashCodeShift = getConstant(markWordField("hash_shift"), Integer.class);
 469 
 470     /**
 471      * Identity hash code value when uninitialized.
 472      */
 473     public final int uninitializedIdentityHashCodeValue = getConstant(markWordField("no_hash"), Integer.class);
 474 
 475     public final int methodAccessFlagsOffset = getFieldOffset("Method::_access_flags", Integer.class, "AccessFlags");
 476     public final int methodConstMethodOffset = getFieldOffset("Method::_constMethod", Integer.class, "ConstMethod*");
 477     public final int methodIntrinsicIdOffset = versioned.methodIntrinsicIdOffset;
 478     public final int methodFlagsOffset = versioned.methodFlagsOffset;
 479     public final int methodVtableIndexOffset = getFieldOffset("Method::_vtable_index", Integer.class, "int");
 480 
 481     public final int methodCountersOffset = getFieldOffset("Method::_method_counters", Integer.class, "MethodCounters*");
 482     public final int methodDataOffset = getFieldOffset("Method::_method_data", Integer.class, "MethodData*");
 483     public final int methodCompiledEntryOffset = getFieldOffset("Method::_from_compiled_entry", Integer.class, "address");
 484     public final int methodCodeOffset = versioned.methodCodeOffset;
 485 
 486     public final int methodFlagsCallerSensitive = getConstant("Method::_caller_sensitive", Integer.class);
 487     public final int methodFlagsForceInline = getConstant("Method::_force_inline", Integer.class);
 488     public final int methodFlagsDontInline = getConstant("Method::_dont_inline", Integer.class);
 489     public final int methodFlagsHidden = getConstant("Method::_hidden", Integer.class);
 490     public final int nonvirtualVtableIndex = getConstant("Method::nonvirtual_vtable_index", Integer.class);
 491     public final int invalidVtableIndex = getConstant("Method::invalid_vtable_index", Integer.class);
 492 
 493     public final int invocationCounterOffset = getFieldOffset("MethodCounters::_invocation_counter", Integer.class, "InvocationCounter");


 527      */
 528     public final int maxOopMapStackOffset = getFieldValue("CompilerToVM::Data::_max_oop_map_stack_offset", Integer.class, "int");
 529 
 530     public final long safepointPollingAddress = getFieldValue("os::_polling_page", Long.class, "address");
 531 
 532     // G1 Collector Related Values.
 533 
 534     public final byte dirtyCardValue = versioned.dirtyCardValue;
 535     public final byte g1YoungCardValue = versioned.g1YoungCardValue;
 536 
 537     public final int g1SATBQueueMarkingOffset = versioned.g1SATBQueueMarkingOffset;
 538     public final int g1SATBQueueIndexOffset = versioned.g1SATBQueueIndexOffset;
 539     public final int g1SATBQueueBufferOffset = versioned.g1SATBQueueBufferOffset;
 540     public final int g1CardQueueIndexOffset = versioned.g1CardQueueIndexOffset;
 541     public final int g1CardQueueBufferOffset = versioned.g1CardQueueBufferOffset;
 542 
 543     public final int klassOffset = getFieldValue("java_lang_Class::_klass_offset", Integer.class, "int");
 544     public final int arrayKlassOffset = getFieldValue("java_lang_Class::_array_klass_offset", Integer.class, "int");
 545 
 546     public final int basicLockSize = getFieldValue("CompilerToVM::Data::sizeof_BasicLock", Integer.class, "int");
 547     public final int basicLockDisplacedHeaderOffset = getFieldOffset("BasicLock::_displaced_header", Integer.class, markWord);
 548 
 549     public final int threadPollingPageOffset = getFieldOffset("Thread::_polling_page", Integer.class, "address", -1);
 550     public final int threadAllocatedBytesOffset = getFieldOffset("Thread::_allocated_bytes", Integer.class, "jlong");
 551 
 552     public final int tlabRefillWasteIncrement = getFlag("TLABWasteIncrement", Integer.class);
 553 
 554     private final int threadLocalAllocBufferStartOffset = getFieldOffset("ThreadLocalAllocBuffer::_start", Integer.class, "HeapWord*");
 555     private final int threadLocalAllocBufferEndOffset = getFieldOffset("ThreadLocalAllocBuffer::_end", Integer.class, "HeapWord*");
 556     private final int threadLocalAllocBufferTopOffset = getFieldOffset("ThreadLocalAllocBuffer::_top", Integer.class, "HeapWord*");
 557     private final int threadLocalAllocBufferPfTopOffset = getFieldOffset("ThreadLocalAllocBuffer::_pf_top", Integer.class, "HeapWord*");
 558     private final int threadLocalAllocBufferSlowAllocationsOffset = getFieldOffset("ThreadLocalAllocBuffer::_slow_allocations", Integer.class, "unsigned");
 559     private final int threadLocalAllocBufferFastRefillWasteOffset = getFieldOffset("ThreadLocalAllocBuffer::_fast_refill_waste", Integer.class, "unsigned");
 560     private final int threadLocalAllocBufferNumberOfRefillsOffset = getFieldOffset("ThreadLocalAllocBuffer::_number_of_refills", Integer.class, "unsigned");
 561     private final int threadLocalAllocBufferRefillWasteLimitOffset = getFieldOffset("ThreadLocalAllocBuffer::_refill_waste_limit", Integer.class, "size_t");
 562     private final int threadLocalAllocBufferDesiredSizeOffset = getFieldOffset("ThreadLocalAllocBuffer::_desired_size", Integer.class, "size_t");
 563 
 564     public int tlabSlowAllocationsOffset() {
 565         return threadTlabOffset + threadLocalAllocBufferSlowAllocationsOffset;
 566     }
 567 


 583 
 584     public int threadTlabStartOffset() {
 585         return threadTlabOffset + threadLocalAllocBufferStartOffset;
 586     }
 587 
 588     public int threadTlabEndOffset() {
 589         return threadTlabOffset + threadLocalAllocBufferEndOffset;
 590     }
 591 
 592     public int threadTlabTopOffset() {
 593         return threadTlabOffset + threadLocalAllocBufferTopOffset;
 594     }
 595 
 596     public int threadTlabPfTopOffset() {
 597         return threadTlabOffset + threadLocalAllocBufferPfTopOffset;
 598     }
 599 
 600     public final int tlabAlignmentReserve = getFieldValue("CompilerToVM::Data::ThreadLocalAllocBuffer_alignment_reserve", Integer.class, "size_t");
 601 
 602     public final boolean tlabStats = getFlag("TLABStats", Boolean.class);
 603 
 604     // We set 0x10 as default value to disable DC ZVA if this field is not present in HotSpot.
 605     // ARMv8-A architecture reference manual D12.2.35 Data Cache Zero ID register says:
 606     // * BS, bits [3:0] indicate log2 of the DC ZVA block size in (4-byte) words.
 607     // * DZP, bit [4] of indicates whether use of DC ZVA instruction is prohibited.
 608     public final int psrInfoDczidValue = getFieldValue("VM_Version::_psr_info.dczid_el0", Integer.class, "uint32_t", 0x10);
 609 
 610     // FIXME This is only temporary until the GC code is changed.
 611     public final boolean inlineContiguousAllocationSupported = getFieldValue("CompilerToVM::Data::_supports_inline_contig_alloc", Boolean.class);
 612     public final long heapEndAddress = getFieldValue("CompilerToVM::Data::_heap_end_addr", Long.class, "HeapWord**");
 613     public final long heapTopAddress = versioned.heapTopAddress;
 614 
 615     public final boolean cmsIncrementalMode = getFlag("CMSIncrementalMode", Boolean.class, false);
 616 
 617     public final long inlineCacheMissStub = getFieldValue("CompilerToVM::Data::SharedRuntime_ic_miss_stub", Long.class, "address");
 618     public final long handleWrongMethodStub = getFieldValue("CompilerToVM::Data::SharedRuntime_handle_wrong_method_stub", Long.class, "address");
 619 
 620     public final long handleDeoptStub = getFieldValue("CompilerToVM::Data::SharedRuntime_deopt_blob_unpack", Long.class, "address");
 621     public final long uncommonTrapStub = getFieldValue("CompilerToVM::Data::SharedRuntime_deopt_blob_uncommon_trap", Long.class, "address");
 622 
 623     public final long codeCacheLowBound = versioned.codeCacheLowBound;
 624     public final long codeCacheHighBound = versioned.codeCacheHighBound;
 625 
 626     public final long aescryptEncryptBlockStub = getFieldValue("StubRoutines::_aescrypt_encryptBlock", Long.class, "address");
 627     public final long aescryptDecryptBlockStub = getFieldValue("StubRoutines::_aescrypt_decryptBlock", Long.class, "address");
 628     public final long cipherBlockChainingEncryptAESCryptStub = getFieldValue("StubRoutines::_cipherBlockChaining_encryptAESCrypt", Long.class, "address");


< prev index next >