1 /* 2 * Copyright (c) 2011, 2023, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 package jdk.vm.ci.hotspot; 24 25 import static jdk.vm.ci.hotspot.HotSpotJVMCIRuntime.runtime; 26 import static jdk.vm.ci.hotspot.UnsafeAccess.UNSAFE; 27 28 import jdk.vm.ci.common.JVMCIError; 29 import jdk.vm.ci.services.Services; 30 import jdk.internal.misc.Unsafe; 31 32 /** 33 * Used to access native configuration details. 34 * 35 * All non-static, public fields in this class are so that they can be compiled as constants. 36 */ 37 class HotSpotVMConfig extends HotSpotVMConfigAccess { 38 39 /** 40 * Gets the configuration associated with the singleton {@link HotSpotJVMCIRuntime}. 41 */ 42 static HotSpotVMConfig config() { 43 return runtime().getConfig(); 44 } 45 46 private final String osArch = getHostArchitectureName(); 47 48 HotSpotVMConfig(HotSpotVMConfigStore store) { 49 super(store); 50 51 int speculationLengthBits = getConstant("JVMCINMethodData::SPECULATION_LENGTH_BITS", Integer.class); 52 JVMCIError.guarantee(HotSpotSpeculationEncoding.LENGTH_BITS == speculationLengthBits, "%d != %d", HotSpotSpeculationEncoding.LENGTH_BITS, speculationLengthBits); 53 } 54 55 /** 56 * Gets the host architecture name for the purpose of finding the corresponding 57 * {@linkplain HotSpotJVMCIBackendFactory backend}. 58 */ 59 String getHostArchitectureName() { 60 String arch = Services.getSavedProperty("os.arch"); 61 switch (arch) { 62 case "x86_64": 63 return "amd64"; 64 65 default: 66 return arch; 67 } 68 } 69 70 final boolean useDeferredInitBarriers = getFlag("ReduceInitialCardMarks", Boolean.class); 71 72 final boolean useCompressedOops = getFlag("UseCompressedOops", Boolean.class); 73 74 final int objectAlignment = getFlag("ObjectAlignmentInBytes", Integer.class); 75 76 // TODO: Lilliput. Probably ok. 77 final int hubOffset = 4; // getFieldOffset("oopDesc::_metadata._klass", Integer.class, "Klass*"); 78 79 final int subklassOffset = getFieldOffset("Klass::_subklass", Integer.class, "Klass*"); 80 final int superOffset = getFieldOffset("Klass::_super", Integer.class, "Klass*"); 81 final int nextSiblingOffset = getFieldOffset("Klass::_next_sibling", Integer.class, "Klass*"); 82 final int superCheckOffsetOffset = getFieldOffset("Klass::_super_check_offset", Integer.class, "juint"); 83 final int secondarySuperCacheOffset = getFieldOffset("Klass::_secondary_super_cache", Integer.class, "Klass*"); 84 85 final int classLoaderDataOffset = getFieldOffset("Klass::_class_loader_data", Integer.class, "ClassLoaderData*"); 86 87 /** 88 * The offset of the _java_mirror field (of type {@link Class}) in a Klass. 89 */ 90 final int javaMirrorOffset = getFieldOffset("Klass::_java_mirror", Integer.class, "OopHandle"); 91 92 final int klassAccessFlagsOffset = getFieldOffset("Klass::_access_flags", Integer.class, "AccessFlags"); 93 final int klassLayoutHelperOffset = getFieldOffset("Klass::_layout_helper", Integer.class, "jint"); 94 95 final int klassLayoutHelperNeutralValue = getConstant("Klass::_lh_neutral_value", Integer.class); 96 final int klassLayoutHelperInstanceSlowPathBit = getConstant("Klass::_lh_instance_slow_path_bit", Integer.class); 97 98 final int vtableEntrySize = getFieldValue("CompilerToVM::Data::sizeof_vtableEntry", Integer.class, "int"); 99 final int vtableEntryMethodOffset = getFieldOffset("vtableEntry::_method", Integer.class, "Method*"); 100 101 final int instanceKlassInitStateOffset = getFieldOffset("InstanceKlass::_init_state", Integer.class, "InstanceKlass::ClassState"); 102 final int instanceKlassConstantsOffset = getFieldOffset("InstanceKlass::_constants", Integer.class, "ConstantPool*"); 103 final int instanceKlassFieldInfoStreamOffset = getFieldOffset("InstanceKlass::_fieldinfo_stream", Integer.class, "Array<u1>*"); 104 final int instanceKlassAnnotationsOffset = getFieldOffset("InstanceKlass::_annotations", Integer.class, "Annotations*"); 105 final int instanceKlassMiscFlagsOffset = getFieldOffset("InstanceKlass::_misc_flags._flags", Integer.class, "u2"); 106 final int klassVtableStartOffset = getFieldValue("CompilerToVM::Data::Klass_vtable_start_offset", Integer.class, "int"); 107 final int klassVtableLengthOffset = getFieldValue("CompilerToVM::Data::Klass_vtable_length_offset", Integer.class, "int"); 108 109 final int instanceKlassStateLinked = getConstant("InstanceKlass::linked", Integer.class); 110 final int instanceKlassStateFullyInitialized = getConstant("InstanceKlass::fully_initialized", Integer.class); 111 final int instanceKlassStateBeingInitialized = getConstant("InstanceKlass::being_initialized", Integer.class); 112 113 final int annotationsFieldAnnotationsOffset = getFieldOffset("Annotations::_fields_annotations", Integer.class, "Array<AnnotationArray*>*"); 114 final int annotationsClassAnnotationsOffset = getFieldOffset("Annotations::_class_annotations", Integer.class, "AnnotationArray*"); 115 final int fieldsAnnotationsBaseOffset = getFieldValue("CompilerToVM::Data::_fields_annotations_base_offset", Integer.class, "int"); 116 117 final int arrayU1LengthOffset = getFieldOffset("Array<int>::_length", Integer.class, "int"); 118 final int arrayU1DataOffset = getFieldOffset("Array<u1>::_data", Integer.class); 119 final int arrayU2DataOffset = getFieldOffset("Array<u2>::_data", Integer.class); 120 121 final int jvmAccHasFinalizer = getConstant("JVM_ACC_HAS_FINALIZER", Integer.class); 122 final int jvmFieldFlagInternalShift = getConstant("FieldInfo::FieldFlags::_ff_injected", Integer.class); 123 final int jvmFieldFlagStableShift = getConstant("FieldInfo::FieldFlags::_ff_stable", Integer.class); 124 final int jvmAccIsCloneableFast = getConstant("JVM_ACC_IS_CLONEABLE_FAST", Integer.class); 125 126 // These modifiers are not public in Modifier so we get them via vmStructs. 127 final int jvmAccSynthetic = getConstant("JVM_ACC_SYNTHETIC", Integer.class); 128 final int jvmAccAnnotation = getConstant("JVM_ACC_ANNOTATION", Integer.class); 129 final int jvmAccBridge = getConstant("JVM_ACC_BRIDGE", Integer.class); 130 final int jvmAccVarargs = getConstant("JVM_ACC_VARARGS", Integer.class); 131 final int jvmAccEnum = getConstant("JVM_ACC_ENUM", Integer.class); 132 final int jvmAccInterface = getConstant("JVM_ACC_INTERFACE", Integer.class); 133 134 final int jvmMiscFlagsHasDefaultMethods = getConstant("InstanceKlassFlags::_misc_has_nonstatic_concrete_methods", Integer.class); 135 final int jvmMiscFlagsDeclaresDefaultMethods = getConstant("InstanceKlassFlags::_misc_declares_nonstatic_concrete_methods", Integer.class); 136 137 // This is only valid on AMD64. 138 final int runtimeCallStackSize = getConstant("frame::arg_reg_save_area_bytes", Integer.class, osArch.equals("amd64") ? null : 0); 139 140 private final int markWordNoHashInPlace = getConstant("markWord::no_hash_in_place", Integer.class); 141 private final int markWordNoLockInPlace = getConstant("markWord::no_lock_in_place", Integer.class); 142 143 /** 144 * See {@code markWord::prototype()}. 145 */ 146 long prototypeMarkWord() { 147 return markWordNoHashInPlace | markWordNoLockInPlace; 148 } 149 150 final int methodAccessFlagsOffset = getFieldOffset("Method::_access_flags", Integer.class, "AccessFlags"); 151 final int methodConstMethodOffset = getFieldOffset("Method::_constMethod", Integer.class, "ConstMethod*"); 152 final int methodIntrinsicIdOffset = getFieldOffset("Method::_intrinsic_id", Integer.class, "u2"); 153 final int methodFlagsOffset = getFieldOffset("Method::_flags._status", Integer.class, "u4"); 154 final int methodVtableIndexOffset = getFieldOffset("Method::_vtable_index", Integer.class, "int"); 155 156 final int methodDataOffset = getFieldOffset("Method::_method_data", Integer.class, "MethodData*"); 157 final int methodCodeOffset = getFieldOffset("Method::_code", Integer.class, "CompiledMethod*"); 158 159 final int methodFlagsForceInline = getConstant("MethodFlags::_misc_force_inline", Integer.class); 160 final int methodFlagsDontInline = getConstant("MethodFlags::_misc_dont_inline", Integer.class); 161 final int nonvirtualVtableIndex = getConstant("Method::nonvirtual_vtable_index", Integer.class); 162 final int invalidVtableIndex = getConstant("Method::invalid_vtable_index", Integer.class); 163 164 final int methodDataSize = getFieldOffset("MethodData::_size", Integer.class, "int"); 165 final int methodDataDataSize = getFieldOffset("MethodData::_data_size", Integer.class, "int"); 166 final int methodDataOopDataOffset = getFieldOffset("MethodData::_data[0]", Integer.class, "intptr_t"); 167 final int methodDataOopTrapHistoryOffset = getFieldOffset("MethodData::_compiler_counters._trap_hist._array[0]", Integer.class, "u1"); 168 final int methodDataIRSizeOffset = getFieldOffset("MethodData::_jvmci_ir_size", Integer.class, "int"); 169 170 final int methodDataDecompiles = getFieldOffset("MethodData::_compiler_counters._nof_decompiles", Integer.class, "uint"); 171 final int methodDataOverflowRecompiles = getFieldOffset("MethodData::_compiler_counters._nof_overflow_recompiles", Integer.class, "uint"); 172 final int methodDataOverflowTraps = getFieldOffset("MethodData::_compiler_counters._nof_overflow_traps", Integer.class, "uint"); 173 174 final int nmethodCompLevelOffset = getFieldOffset("nmethod::_comp_level", Integer.class, "CompLevel"); 175 176 final int compilationLevelNone = getConstant("CompLevel_none", Integer.class); 177 final int compilationLevelSimple = getConstant("CompLevel_simple", Integer.class); 178 final int compilationLevelLimitedProfile = getConstant("CompLevel_limited_profile", Integer.class); 179 final int compilationLevelFullProfile = getConstant("CompLevel_full_profile", Integer.class); 180 final int compilationLevelFullOptimization = getConstant("CompLevel_full_optimization", Integer.class); 181 182 final int compLevelAdjustmentNone = getConstant("JVMCIRuntime::none", Integer.class); 183 final int compLevelAdjustmentByHolder = getConstant("JVMCIRuntime::by_holder", Integer.class); 184 final int compLevelAdjustmentByFullSignature = getConstant("JVMCIRuntime::by_full_signature", Integer.class); 185 186 final int invocationEntryBci = getConstant("InvocationEntryBci", Integer.class); 187 188 final int extraStackEntries = getFieldValue("CompilerToVM::Data::Method_extra_stack_entries", Integer.class, "int"); 189 190 final int constMethodConstantsOffset = getFieldOffset("ConstMethod::_constants", Integer.class, "ConstantPool*"); 191 final int constMethodFlagsOffset = getFieldOffset("ConstMethod::_flags._flags", Integer.class, "u4"); 192 final int constMethodCodeSizeOffset = getFieldOffset("ConstMethod::_code_size", Integer.class, "u2"); 193 final int constMethodNameIndexOffset = getFieldOffset("ConstMethod::_name_index", Integer.class, "u2"); 194 final int constMethodSignatureIndexOffset = getFieldOffset("ConstMethod::_signature_index", Integer.class, "u2"); 195 final int constMethodMethodIdnumOffset = getFieldOffset("ConstMethod::_method_idnum", Integer.class, "u2"); 196 final int constMethodMaxStackOffset = getFieldOffset("ConstMethod::_max_stack", Integer.class, "u2"); 197 final int methodMaxLocalsOffset = getFieldOffset("ConstMethod::_max_locals", Integer.class, "u2"); 198 199 final int constMethodFlagsReservedStackAccess = getConstant("ConstMethodFlags::_misc_reserved_stack_access", Integer.class); 200 final int constMethodFlagsCallerSensitive = getConstant("ConstMethodFlags::_misc_caller_sensitive", Integer.class); 201 final int constMethodFlagsIntrinsicCandidate = getConstant("ConstMethodFlags::_misc_intrinsic_candidate", Integer.class); 202 final int constMethodHasLineNumberTable = getConstant("ConstMethodFlags::_misc_has_linenumber_table", Integer.class); 203 final int constMethodHasLocalVariableTable = getConstant("ConstMethodFlags::_misc_has_localvariable_table", Integer.class); 204 final int constMethodHasMethodAnnotations = getConstant("ConstMethodFlags::_misc_has_method_annotations", Integer.class); 205 final int constMethodHasParameterAnnotations = getConstant("ConstMethodFlags::_misc_has_parameter_annotations", Integer.class); 206 final int constMethodHasExceptionTable = getConstant("ConstMethodFlags::_misc_has_exception_table", Integer.class); 207 208 final int exceptionTableElementSize = getFieldValue("CompilerToVM::Data::sizeof_ExceptionTableElement", Integer.class, "int"); 209 final int exceptionTableElementStartPcOffset = getFieldOffset("ExceptionTableElement::start_pc", Integer.class, "u2"); 210 final int exceptionTableElementEndPcOffset = getFieldOffset("ExceptionTableElement::end_pc", Integer.class, "u2"); 211 final int exceptionTableElementHandlerPcOffset = getFieldOffset("ExceptionTableElement::handler_pc", Integer.class, "u2"); 212 final int exceptionTableElementCatchTypeIndexOffset = getFieldOffset("ExceptionTableElement::catch_type_index", Integer.class, "u2"); 213 214 final int localVariableTableElementSize = getFieldValue("CompilerToVM::Data::sizeof_LocalVariableTableElement", Integer.class, "int"); 215 final int localVariableTableElementStartBciOffset = getFieldOffset("LocalVariableTableElement::start_bci", Integer.class, "u2"); 216 final int localVariableTableElementLengthOffset = getFieldOffset("LocalVariableTableElement::length", Integer.class, "u2"); 217 final int localVariableTableElementNameCpIndexOffset = getFieldOffset("LocalVariableTableElement::name_cp_index", Integer.class, "u2"); 218 final int localVariableTableElementDescriptorCpIndexOffset = getFieldOffset("LocalVariableTableElement::descriptor_cp_index", Integer.class, "u2"); 219 final int localVariableTableElementSlotOffset = getFieldOffset("LocalVariableTableElement::slot", Integer.class, "u2"); 220 221 final int constantPoolSize = getFieldValue("CompilerToVM::Data::sizeof_ConstantPool", Integer.class, "int"); 222 final int constantPoolTagsOffset = getFieldOffset("ConstantPool::_tags", Integer.class, "Array<u1>*"); 223 final int constantPoolHolderOffset = getFieldOffset("ConstantPool::_pool_holder", Integer.class, "InstanceKlass*"); 224 final int constantPoolLengthOffset = getFieldOffset("ConstantPool::_length", Integer.class, "int"); 225 final int constantPoolFlagsOffset = getFieldOffset("ConstantPool::_flags", Integer.class, "u2"); 226 227 final int constantPoolCpCacheIndexTag = getConstant("ConstantPool::CPCACHE_INDEX_TAG", Integer.class); 228 final int constantPoolHasDynamicConstant = getConstant("ConstantPool::_has_dynamic_constant", Integer.class); 229 final int constantPoolSourceFileNameIndexOffset = getFieldOffset("ConstantPool::_source_file_name_index", Integer.class, "u2"); 230 231 final int jvmConstantUtf8 = getConstant("JVM_CONSTANT_Utf8", Integer.class); 232 final int jvmConstantInteger = getConstant("JVM_CONSTANT_Integer", Integer.class); 233 final int jvmConstantLong = getConstant("JVM_CONSTANT_Long", Integer.class); 234 final int jvmConstantFloat = getConstant("JVM_CONSTANT_Float", Integer.class); 235 final int jvmConstantDouble = getConstant("JVM_CONSTANT_Double", Integer.class); 236 final int jvmConstantClass = getConstant("JVM_CONSTANT_Class", Integer.class); 237 final int jvmConstantUnresolvedClass = getConstant("JVM_CONSTANT_UnresolvedClass", Integer.class); 238 final int jvmConstantUnresolvedClassInError = getConstant("JVM_CONSTANT_UnresolvedClassInError", Integer.class); 239 final int jvmConstantString = getConstant("JVM_CONSTANT_String", Integer.class); 240 final int jvmConstantFieldref = getConstant("JVM_CONSTANT_Fieldref", Integer.class); 241 final int jvmConstantMethodref = getConstant("JVM_CONSTANT_Methodref", Integer.class); 242 final int jvmConstantInterfaceMethodref = getConstant("JVM_CONSTANT_InterfaceMethodref", Integer.class); 243 final int jvmConstantNameAndType = getConstant("JVM_CONSTANT_NameAndType", Integer.class); 244 final int jvmConstantMethodHandle = getConstant("JVM_CONSTANT_MethodHandle", Integer.class); 245 final int jvmConstantMethodHandleInError = getConstant("JVM_CONSTANT_MethodHandleInError", Integer.class); 246 final int jvmConstantMethodType = getConstant("JVM_CONSTANT_MethodType", Integer.class); 247 final int jvmConstantMethodTypeInError = getConstant("JVM_CONSTANT_MethodTypeInError", Integer.class); 248 final int jvmConstantDynamic = getConstant("JVM_CONSTANT_Dynamic", Integer.class); 249 final int jvmConstantDynamicInError = getConstant("JVM_CONSTANT_DynamicInError", Integer.class); 250 final int jvmConstantInvokeDynamic = getConstant("JVM_CONSTANT_InvokeDynamic", Integer.class); 251 252 final int jvmConstantExternalMax = getConstant("JVM_CONSTANT_ExternalMax", Integer.class); 253 final int jvmConstantInternalMin = getConstant("JVM_CONSTANT_InternalMin", Integer.class); 254 final int jvmConstantInternalMax = getConstant("JVM_CONSTANT_InternalMax", Integer.class); 255 256 final int heapWordSize = getConstant("HeapWordSize", Integer.class); 257 258 final long symbolVmSymbols = getFieldAddress("Symbol::_vm_symbols[0]", "Symbol*"); 259 final int vmSymbolsFirstSID = getConstant("vmSymbols::FIRST_SID", Integer.class); 260 final int vmSymbolsSIDLimit = getConstant("vmSymbols::SID_LIMIT", Integer.class); 261 262 final long symbolInit = getFieldValue("CompilerToVM::Data::symbol_init", Long.class); 263 final long symbolClinit = getFieldValue("CompilerToVM::Data::symbol_clinit", Long.class); 264 265 /** 266 * Returns the symbol in the {@code vmSymbols} table at position {@code index} as a 267 * {@link String}. 268 * 269 * @param index position in the symbol table 270 * @return the symbol at position id 271 */ 272 String symbolAt(int index) { 273 HotSpotJVMCIRuntime runtime = runtime(); 274 assert vmSymbolsFirstSID <= index && index < vmSymbolsSIDLimit : "index " + index + " is out of bounds"; 275 int offset = index * Unsafe.ADDRESS_SIZE; 276 return runtime.getCompilerToVM().getSymbol(UNSAFE.getAddress(symbolVmSymbols + offset)); 277 } 278 279 final int universeBaseVtableSize = getFieldValue("CompilerToVM::Data::Universe_base_vtable_size", Integer.class, "int"); 280 281 final int baseVtableLength() { 282 return universeBaseVtableSize / (vtableEntrySize / heapWordSize); 283 } 284 285 final int klassOffset = getFieldValue("java_lang_Class::_klass_offset", Integer.class, "int"); 286 287 /** 288 * The DataLayout header size is the same as the cell size. 289 */ 290 final int dataLayoutHeaderSize = getConstant("DataLayout::cell_size", Integer.class); 291 final int dataLayoutTagOffset = getFieldOffset("DataLayout::_header._struct._tag", Integer.class, "u1"); 292 final int dataLayoutFlagsOffset = getFieldOffset("DataLayout::_header._struct._flags", Integer.class, "u1"); 293 final int dataLayoutBCIOffset = getFieldOffset("DataLayout::_header._struct._bci", Integer.class, "u2"); 294 final int dataLayoutCellSize = getConstant("DataLayout::cell_size", Integer.class); 295 296 final int dataLayoutNoTag = getConstant("DataLayout::no_tag", Integer.class); 297 final int dataLayoutBitDataTag = getConstant("DataLayout::bit_data_tag", Integer.class); 298 final int dataLayoutCounterDataTag = getConstant("DataLayout::counter_data_tag", Integer.class); 299 final int dataLayoutJumpDataTag = getConstant("DataLayout::jump_data_tag", Integer.class); 300 final int dataLayoutReceiverTypeDataTag = getConstant("DataLayout::receiver_type_data_tag", Integer.class); 301 final int dataLayoutVirtualCallDataTag = getConstant("DataLayout::virtual_call_data_tag", Integer.class); 302 final int dataLayoutRetDataTag = getConstant("DataLayout::ret_data_tag", Integer.class); 303 final int dataLayoutBranchDataTag = getConstant("DataLayout::branch_data_tag", Integer.class); 304 final int dataLayoutMultiBranchDataTag = getConstant("DataLayout::multi_branch_data_tag", Integer.class); 305 final int dataLayoutArgInfoDataTag = getConstant("DataLayout::arg_info_data_tag", Integer.class); 306 final int dataLayoutCallTypeDataTag = getConstant("DataLayout::call_type_data_tag", Integer.class); 307 final int dataLayoutVirtualCallTypeDataTag = getConstant("DataLayout::virtual_call_type_data_tag", Integer.class); 308 final int dataLayoutParametersTypeDataTag = getConstant("DataLayout::parameters_type_data_tag", Integer.class); 309 final int dataLayoutSpeculativeTrapDataTag = getConstant("DataLayout::speculative_trap_data_tag", Integer.class); 310 311 final int bciProfileWidth = getFlag("BciProfileWidth", Integer.class); 312 final int typeProfileWidth = getFlag("TypeProfileWidth", Integer.class); 313 final int methodProfileWidth = getFlag("MethodProfileWidth", Integer.class, 0); 314 315 final int deoptReasonNone = getConstant("Deoptimization::Reason_none", Integer.class); 316 final int deoptReasonNullCheck = getConstant("Deoptimization::Reason_null_check", Integer.class); 317 final int deoptReasonRangeCheck = getConstant("Deoptimization::Reason_range_check", Integer.class); 318 final int deoptReasonClassCheck = getConstant("Deoptimization::Reason_class_check", Integer.class); 319 final int deoptReasonArrayCheck = getConstant("Deoptimization::Reason_array_check", Integer.class); 320 final int deoptReasonUnreached0 = getConstant("Deoptimization::Reason_unreached0", Integer.class); 321 final int deoptReasonTypeCheckInlining = getConstant("Deoptimization::Reason_type_checked_inlining", Integer.class); 322 final int deoptReasonOptimizedTypeCheck = getConstant("Deoptimization::Reason_optimized_type_check", Integer.class); 323 final int deoptReasonNotCompiledExceptionHandler = getConstant("Deoptimization::Reason_not_compiled_exception_handler", Integer.class); 324 final int deoptReasonUnresolved = getConstant("Deoptimization::Reason_unresolved", Integer.class); 325 final int deoptReasonJsrMismatch = getConstant("Deoptimization::Reason_jsr_mismatch", Integer.class); 326 final int deoptReasonDiv0Check = getConstant("Deoptimization::Reason_div0_check", Integer.class); 327 final int deoptReasonConstraint = getConstant("Deoptimization::Reason_constraint", Integer.class); 328 final int deoptReasonLoopLimitCheck = getConstant("Deoptimization::Reason_loop_limit_check", Integer.class); 329 final int deoptReasonAliasing = getConstant("Deoptimization::Reason_aliasing", Integer.class); 330 final int deoptReasonTransferToInterpreter = getConstant("Deoptimization::Reason_transfer_to_interpreter", Integer.class); 331 final int deoptReasonOSROffset = getConstant("Deoptimization::Reason_TRAP_HISTORY_LENGTH", Integer.class); 332 333 final int deoptActionNone = getConstant("Deoptimization::Action_none", Integer.class); 334 final int deoptActionMaybeRecompile = getConstant("Deoptimization::Action_maybe_recompile", Integer.class); 335 final int deoptActionReinterpret = getConstant("Deoptimization::Action_reinterpret", Integer.class); 336 final int deoptActionMakeNotEntrant = getConstant("Deoptimization::Action_make_not_entrant", Integer.class); 337 final int deoptActionMakeNotCompilable = getConstant("Deoptimization::Action_make_not_compilable", Integer.class); 338 339 final int deoptimizationActionBits = getConstant("Deoptimization::_action_bits", Integer.class); 340 final int deoptimizationReasonBits = getConstant("Deoptimization::_reason_bits", Integer.class); 341 final int deoptimizationDebugIdBits = getConstant("Deoptimization::_debug_id_bits", Integer.class); 342 final int deoptimizationActionShift = getConstant("Deoptimization::_action_shift", Integer.class); 343 final int deoptimizationReasonShift = getConstant("Deoptimization::_reason_shift", Integer.class); 344 final int deoptimizationDebugIdShift = getConstant("Deoptimization::_debug_id_shift", Integer.class); 345 346 final int vmIntrinsicInvokeBasic = getConstant("vmIntrinsics::_invokeBasic", Integer.class); 347 final int vmIntrinsicLinkToVirtual = getConstant("vmIntrinsics::_linkToVirtual", Integer.class); 348 final int vmIntrinsicLinkToStatic = getConstant("vmIntrinsics::_linkToStatic", Integer.class); 349 final int vmIntrinsicLinkToSpecial = getConstant("vmIntrinsics::_linkToSpecial", Integer.class); 350 final int vmIntrinsicLinkToInterface = getConstant("vmIntrinsics::_linkToInterface", Integer.class); 351 352 final int codeInstallResultOk = getConstant("JVMCI::ok", Integer.class); 353 final int codeInstallResultDependenciesFailed = getConstant("JVMCI::dependencies_failed", Integer.class); 354 final int codeInstallResultCacheFull = getConstant("JVMCI::cache_full", Integer.class); 355 final int codeInstallResultCodeTooLarge = getConstant("JVMCI::code_too_large", Integer.class); 356 final int codeInstallResultNMethodReclaimed = getConstant("JVMCI::nmethod_reclaimed", Integer.class); 357 final int codeInstallResultFirstPermanentBailout = getConstant("JVMCI::first_permanent_bailout", Integer.class); 358 359 String getCodeInstallResultDescription(int codeInstallResult) { 360 if (codeInstallResult == codeInstallResultOk) { 361 return "ok"; 362 } 363 if (codeInstallResult == codeInstallResultDependenciesFailed) { 364 return "dependencies failed"; 365 } 366 if (codeInstallResult == codeInstallResultCacheFull) { 367 return "code cache is full"; 368 } 369 if (codeInstallResult == codeInstallResultCodeTooLarge) { 370 return "code is too large"; 371 } 372 if (codeInstallResult == codeInstallResultNMethodReclaimed) { 373 return "nmethod reclaimed"; 374 } 375 assert false : codeInstallResult; 376 return "unknown"; 377 } 378 379 final int bitDataExceptionSeenFlag = getConstant("BitData::exception_seen_flag", Integer.class); 380 final int bitDataNullSeenFlag = getConstant("BitData::null_seen_flag", Integer.class); 381 final int methodDataCountOffset = getConstant("CounterData::count_off", Integer.class); 382 final int jumpDataTakenOffset = getConstant("JumpData::taken_off_set", Integer.class); 383 final int jumpDataDisplacementOffset = getConstant("JumpData::displacement_off_set", Integer.class); 384 final int receiverTypeDataNonprofiledCountOffset = getConstant("ReceiverTypeData::nonprofiled_count_off_set", Integer.class); 385 final int receiverTypeDataReceiverTypeRowCellCount = getConstant("ReceiverTypeData::receiver_type_row_cell_count", Integer.class); 386 final int receiverTypeDataReceiver0Offset = getConstant("ReceiverTypeData::receiver0_offset", Integer.class); 387 final int receiverTypeDataCount0Offset = getConstant("ReceiverTypeData::count0_offset", Integer.class); 388 final int branchDataNotTakenOffset = getConstant("BranchData::not_taken_off_set", Integer.class); 389 final int arrayDataArrayLenOffset = getConstant("ArrayData::array_len_off_set", Integer.class); 390 final int arrayDataArrayStartOffset = getConstant("ArrayData::array_start_off_set", Integer.class); 391 final int multiBranchDataPerCaseCellCount = getConstant("MultiBranchData::per_case_cell_count", Integer.class); 392 }