75 public final boolean ciTime = getFlag("CITime", Boolean.class);
76 public final boolean ciTimeEach = getFlag("CITimeEach", Boolean.class);
77 public final boolean dontCompileHugeMethods = getFlag("DontCompileHugeMethods", Boolean.class);
78 public final int hugeMethodLimit = getFlag("HugeMethodLimit", Integer.class);
79 public final boolean printInlining = getFlag("PrintInlining", Boolean.class);
80 public final boolean inline = getFlag("Inline", Boolean.class);
81 public final boolean inlineNotify = versioned.inlineNotify;
82 public final boolean useFastLocking = getFlag("JVMCIUseFastLocking", Boolean.class);
83 public final boolean forceUnreachable = getFlag("ForceUnreachable", Boolean.class);
84 public final int codeSegmentSize = getFlag("CodeCacheSegmentSize", Integer.class);
85 public final boolean foldStableValues = getFlag("FoldStableValues", Boolean.class);
86 public final int maxVectorSize = getFlag("MaxVectorSize", Integer.class);
87
88 public final boolean verifyBeforeGC = getFlag("VerifyBeforeGC", Boolean.class);
89 public final boolean verifyAfterGC = getFlag("VerifyAfterGC", Boolean.class);
90
91 public final boolean useTLAB = getFlag("UseTLAB", Boolean.class);
92 public final boolean useBiasedLocking = getFlag("UseBiasedLocking", Boolean.class);
93 public final boolean usePopCountInstruction = getFlag("UsePopCountInstruction", Boolean.class);
94 public final boolean useAESIntrinsics = getFlag("UseAESIntrinsics", Boolean.class);
95 public final boolean useCRC32Intrinsics = getFlag("UseCRC32Intrinsics", Boolean.class);
96 public final boolean useCRC32CIntrinsics = versioned.useCRC32CIntrinsics;
97 public final boolean threadLocalHandshakes = getFlag("ThreadLocalHandshakes", Boolean.class, false);
98
99 private final boolean useMultiplyToLenIntrinsic = getFlag("UseMultiplyToLenIntrinsic", Boolean.class);
100 private final boolean useSHA1Intrinsics = getFlag("UseSHA1Intrinsics", Boolean.class);
101 private final boolean useSHA256Intrinsics = getFlag("UseSHA256Intrinsics", Boolean.class);
102 private final boolean useSHA512Intrinsics = getFlag("UseSHA512Intrinsics", Boolean.class);
103 private final boolean useMontgomeryMultiplyIntrinsic = getFlag("UseMontgomeryMultiplyIntrinsic", Boolean.class, false);
104 private final boolean useMontgomerySquareIntrinsic = getFlag("UseMontgomerySquareIntrinsic", Boolean.class, false);
105 private final boolean useMulAddIntrinsic = getFlag("UseMulAddIntrinsic", Boolean.class, false);
106 private final boolean useSquareToLenIntrinsic = getFlag("UseSquareToLenIntrinsic", Boolean.class, false);
107
108 /*
109 * These are methods because in some JDKs the flags are visible but the stubs themselves haven't
110 * been exported so we have to check both if the flag is on and if we have the stub.
111 */
112 public boolean useMultiplyToLenIntrinsic() {
113 return useMultiplyToLenIntrinsic && multiplyToLen != 0;
114 }
115
116 public boolean useSHA1Intrinsics() {
117 return useSHA1Intrinsics && sha1ImplCompress != 0;
118 }
119
120 public boolean useSHA256Intrinsics() {
121 return useSHA256Intrinsics && sha256ImplCompress != 0;
122 }
123
124 public boolean useSHA512Intrinsics() {
125 return useSHA512Intrinsics && sha512ImplCompress != 0;
126 }
127
128 public boolean useMontgomeryMultiplyIntrinsic() {
129 return useMontgomeryMultiplyIntrinsic && montgomeryMultiply != 0;
130 }
131
132 public boolean useMontgomerySquareIntrinsic() {
133 return useMontgomerySquareIntrinsic && montgomerySquare != 0;
134 }
135
136 public boolean useMulAddIntrinsic() {
137 return useMulAddIntrinsic && mulAdd != 0;
138 }
139
140 public boolean useSquareToLenIntrinsic() {
141 return useSquareToLenIntrinsic && squareToLen != 0;
142 }
143
144 public boolean inlineNotify() {
145 return inlineNotify && notifyAddress != 0;
292
293 public final int fieldInfoAccessFlagsOffset = getConstant("FieldInfo::access_flags_offset", Integer.class);
294 public final int fieldInfoNameIndexOffset = getConstant("FieldInfo::name_index_offset", Integer.class);
295 public final int fieldInfoSignatureIndexOffset = getConstant("FieldInfo::signature_index_offset", Integer.class);
296 public final int fieldInfoInitvalIndexOffset = getConstant("FieldInfo::initval_index_offset", Integer.class);
297 public final int fieldInfoLowPackedOffset = getConstant("FieldInfo::low_packed_offset", Integer.class);
298 public final int fieldInfoHighPackedOffset = getConstant("FieldInfo::high_packed_offset", Integer.class);
299 public final int fieldInfoFieldSlots = getConstant("FieldInfo::field_slots", Integer.class);
300
301 public final int fieldInfoTagSize = getConstant("FIELDINFO_TAG_SIZE", Integer.class);
302
303 public final int jvmAccMonitorMatch = getConstant("JVM_ACC_MONITOR_MATCH", Integer.class);
304 public final int jvmAccHasMonitorBytecodes = getConstant("JVM_ACC_HAS_MONITOR_BYTECODES", Integer.class);
305 public final int jvmAccHasFinalizer = getConstant("JVM_ACC_HAS_FINALIZER", Integer.class);
306 public final int jvmAccFieldInternal = getConstant("JVM_ACC_FIELD_INTERNAL", Integer.class);
307 public final int jvmAccFieldStable = getConstant("JVM_ACC_FIELD_STABLE", Integer.class);
308 public final int jvmAccFieldHasGenericSignature = getConstant("JVM_ACC_FIELD_HAS_GENERIC_SIGNATURE", Integer.class);
309 public final int jvmAccWrittenFlags = getConstant("JVM_ACC_WRITTEN_FLAGS", Integer.class);
310 public final int jvmAccSynthetic = getConstant("JVM_ACC_SYNTHETIC", Integer.class);
311
312 public final int jvmciCompileStateCanPostOnExceptionsOffset = getFieldOffset("JVMCIEnv::_jvmti_can_post_on_exceptions", Integer.class, "jbyte", Integer.MIN_VALUE);
313
314 public final int threadTlabOffset = getFieldOffset("Thread::_tlab", Integer.class, "ThreadLocalAllocBuffer");
315 public final int javaThreadAnchorOffset = getFieldOffset("JavaThread::_anchor", Integer.class, "JavaFrameAnchor");
316 public final int javaThreadShouldPostOnExceptionsFlagOffset = getFieldOffset("JavaThread::_should_post_on_exceptions_flag", Integer.class, "int", Integer.MIN_VALUE);
317 public final int threadObjectOffset = getFieldOffset("JavaThread::_threadObj", Integer.class, "oop");
318 public final int osThreadOffset = getFieldOffset("JavaThread::_osthread", Integer.class, "OSThread*");
319 public final int threadIsMethodHandleReturnOffset = getFieldOffset("JavaThread::_is_method_handle_return", Integer.class, "int");
320 public final int threadObjectResultOffset = getFieldOffset("JavaThread::_vm_result", Integer.class, "oop");
321 public final int jvmciCountersThreadOffset = getFieldOffset("JavaThread::_jvmci_counters", Integer.class, "jlong*");
322 public final int javaThreadReservedStackActivationOffset = versioned.javaThreadReservedStackActivationOffset;
323
324 public boolean requiresReservedStackCheck(List<ResolvedJavaMethod> methods) {
325 if (enableStackReservedZoneAddress != 0 && methods != null) {
326 for (ResolvedJavaMethod method : methods) {
327 if (((HotSpotResolvedJavaMethod) method).hasReservedStackAccess()) {
328 return true;
329 }
330 }
331 }
332 return false;
355 */
356 public final long dllLookup = getAddress("os::dll_lookup");
357
358 /**
359 * A pseudo-handle which when used as the first argument to {@link #dllLookup} means lookup will
360 * return the first occurrence of the desired symbol using the default library search order. If
361 * this field is {@value #INVALID_RTLD_DEFAULT_HANDLE}, then this capability is not supported on
362 * the current platform.
363 */
364 public final long rtldDefault = getAddress("RTLD_DEFAULT", osName.equals("bsd") || osName.equals("linux") ? null : INVALID_RTLD_DEFAULT_HANDLE);
365
366 /**
367 * This field is used to pass exception objects into and out of the runtime system during
368 * exception handling for compiled code.
369 */
370 public final int threadExceptionOopOffset = getFieldOffset("JavaThread::_exception_oop", Integer.class, "oop");
371 public final int threadExceptionPcOffset = getFieldOffset("JavaThread::_exception_pc", Integer.class, "address");
372 public final int pendingExceptionOffset = getFieldOffset("ThreadShadow::_pending_exception", Integer.class, "oop");
373
374 public final int pendingDeoptimizationOffset = getFieldOffset("JavaThread::_pending_deoptimization", Integer.class, "int");
375 public final int pendingFailedSpeculationOffset = getFieldOffset("JavaThread::_pending_failed_speculation", Integer.class, "long");
376 public final int pendingTransferToInterpreterOffset = getFieldOffset("JavaThread::_pending_transfer_to_interpreter", Integer.class, "bool");
377
378 private final int javaFrameAnchorLastJavaSpOffset = getFieldOffset("JavaFrameAnchor::_last_Java_sp", Integer.class, "intptr_t*");
379 private final int javaFrameAnchorLastJavaPcOffset = getFieldOffset("JavaFrameAnchor::_last_Java_pc", Integer.class, "address");
380
381 public int threadLastJavaSpOffset() {
382 return javaThreadAnchorOffset + javaFrameAnchorLastJavaSpOffset;
383 }
384
385 public int threadLastJavaPcOffset() {
386 return javaThreadAnchorOffset + javaFrameAnchorLastJavaPcOffset;
387 }
388
389 public int threadLastJavaFpOffset() {
390 assert osArch.equals("aarch64") || osArch.equals("amd64");
391 return javaThreadAnchorOffset + getFieldOffset("JavaFrameAnchor::_last_Java_fp", Integer.class, "intptr_t*");
392 }
393
394 public int threadJavaFrameAnchorFlagsOffset() {
395 assert osArch.equals("sparc");
396 return javaThreadAnchorOffset + getFieldOffset("JavaFrameAnchor::_flags", Integer.class, "int");
397 }
398
399 public final int runtimeCallStackSize = getConstant("frame::arg_reg_save_area_bytes", Integer.class, intRequiredOnAMD64);
400 public final int frameInterpreterFrameSenderSpOffset = getConstant("frame::interpreter_frame_sender_sp_offset", Integer.class, intRequiredOnAMD64);
585
586 public final boolean cmsIncrementalMode = getFlag("CMSIncrementalMode", Boolean.class, false);
587
588 public final long inlineCacheMissStub = getFieldValue("CompilerToVM::Data::SharedRuntime_ic_miss_stub", Long.class, "address");
589 public final long handleWrongMethodStub = getFieldValue("CompilerToVM::Data::SharedRuntime_handle_wrong_method_stub", Long.class, "address");
590
591 public final long handleDeoptStub = getFieldValue("CompilerToVM::Data::SharedRuntime_deopt_blob_unpack", Long.class, "address");
592 public final long uncommonTrapStub = getFieldValue("CompilerToVM::Data::SharedRuntime_deopt_blob_uncommon_trap", Long.class, "address");
593
594 public final long codeCacheLowBound = versioned.codeCacheLowBound;
595 public final long codeCacheHighBound = versioned.codeCacheHighBound;
596
597 public final long aescryptEncryptBlockStub = getFieldValue("StubRoutines::_aescrypt_encryptBlock", Long.class, "address");
598 public final long aescryptDecryptBlockStub = getFieldValue("StubRoutines::_aescrypt_decryptBlock", Long.class, "address");
599 public final long cipherBlockChainingEncryptAESCryptStub = getFieldValue("StubRoutines::_cipherBlockChaining_encryptAESCrypt", Long.class, "address");
600 public final long cipherBlockChainingDecryptAESCryptStub = getFieldValue("StubRoutines::_cipherBlockChaining_decryptAESCrypt", Long.class, "address");
601 public final long updateBytesCRC32Stub = getFieldValue("StubRoutines::_updateBytesCRC32", Long.class, "address");
602 public final long crcTableAddress = getFieldValue("StubRoutines::_crc_table_adr", Long.class, "address");
603
604 public final long sha1ImplCompress = getFieldValue("StubRoutines::_sha1_implCompress", Long.class, "address", 0L);
605 public final long sha1ImplCompressMB = getFieldValue("StubRoutines::_sha1_implCompressMB", Long.class, "address", 0L);
606 public final long sha256ImplCompress = getFieldValue("StubRoutines::_sha256_implCompress", Long.class, "address", 0L);
607 public final long sha256ImplCompressMB = getFieldValue("StubRoutines::_sha256_implCompressMB", Long.class, "address", 0L);
608 public final long sha512ImplCompress = getFieldValue("StubRoutines::_sha512_implCompress", Long.class, "address", 0L);
609 public final long sha512ImplCompressMB = getFieldValue("StubRoutines::_sha512_implCompressMB", Long.class, "address", 0L);
610 public final long multiplyToLen = getFieldValue("StubRoutines::_multiplyToLen", Long.class, "address", longRequiredOnAMD64);
611
612 public final long counterModeAESCrypt = getFieldValue("StubRoutines::_counterMode_AESCrypt", Long.class, "address", 0L);
613 public final long ghashProcessBlocks = getFieldValue("StubRoutines::_ghash_processBlocks", Long.class, "address", 0L);
614 public final long crc32cTableTddr = getFieldValue("StubRoutines::_crc32c_table_addr", Long.class, "address", 0L);
615 public final long updateBytesCRC32C = getFieldValue("StubRoutines::_updateBytesCRC32C", Long.class, "address", 0L);
616 public final long updateBytesAdler32 = getFieldValue("StubRoutines::_updateBytesAdler32", Long.class, "address", 0L);
617 public final long squareToLen = getFieldValue("StubRoutines::_squareToLen", Long.class, "address", longRequiredOnAMD64);
618 public final long mulAdd = getFieldValue("StubRoutines::_mulAdd", Long.class, "address", longRequiredOnAMD64);
619 public final long montgomeryMultiply = getFieldValue("StubRoutines::_montgomeryMultiply", Long.class, "address", longRequiredOnAMD64);
620 public final long montgomerySquare = getFieldValue("StubRoutines::_montgomerySquare", Long.class, "address", longRequiredOnAMD64);
621 public final long vectorizedMismatch = getFieldValue("StubRoutines::_vectorizedMismatch", Long.class, "address", 0L);
622
623 public final long throwDelayedStackOverflowErrorEntry = versioned.throwDelayedStackOverflowErrorEntry;
624
625 public final long jbyteArraycopy = getFieldValue("StubRoutines::_jbyte_arraycopy", Long.class, "address");
626 public final long jshortArraycopy = getFieldValue("StubRoutines::_jshort_arraycopy", Long.class, "address");
627 public final long jintArraycopy = getFieldValue("StubRoutines::_jint_arraycopy", Long.class, "address");
628 public final long jlongArraycopy = getFieldValue("StubRoutines::_jlong_arraycopy", Long.class, "address");
629 public final long oopArraycopy = getFieldValue("StubRoutines::_oop_arraycopy", Long.class, "address");
|
75 public final boolean ciTime = getFlag("CITime", Boolean.class);
76 public final boolean ciTimeEach = getFlag("CITimeEach", Boolean.class);
77 public final boolean dontCompileHugeMethods = getFlag("DontCompileHugeMethods", Boolean.class);
78 public final int hugeMethodLimit = getFlag("HugeMethodLimit", Integer.class);
79 public final boolean printInlining = getFlag("PrintInlining", Boolean.class);
80 public final boolean inline = getFlag("Inline", Boolean.class);
81 public final boolean inlineNotify = versioned.inlineNotify;
82 public final boolean useFastLocking = getFlag("JVMCIUseFastLocking", Boolean.class);
83 public final boolean forceUnreachable = getFlag("ForceUnreachable", Boolean.class);
84 public final int codeSegmentSize = getFlag("CodeCacheSegmentSize", Integer.class);
85 public final boolean foldStableValues = getFlag("FoldStableValues", Boolean.class);
86 public final int maxVectorSize = getFlag("MaxVectorSize", Integer.class);
87
88 public final boolean verifyBeforeGC = getFlag("VerifyBeforeGC", Boolean.class);
89 public final boolean verifyAfterGC = getFlag("VerifyAfterGC", Boolean.class);
90
91 public final boolean useTLAB = getFlag("UseTLAB", Boolean.class);
92 public final boolean useBiasedLocking = getFlag("UseBiasedLocking", Boolean.class);
93 public final boolean usePopCountInstruction = getFlag("UsePopCountInstruction", Boolean.class);
94 public final boolean useAESIntrinsics = getFlag("UseAESIntrinsics", Boolean.class);
95 public final boolean useAESCTRIntrinsics = getFlag("UseAESCTRIntrinsics", Boolean.class, false);
96 public final boolean useCRC32Intrinsics = getFlag("UseCRC32Intrinsics", Boolean.class);
97 public final boolean useCRC32CIntrinsics = versioned.useCRC32CIntrinsics;
98 public final boolean threadLocalHandshakes = getFlag("ThreadLocalHandshakes", Boolean.class, false);
99
100 private final boolean useMultiplyToLenIntrinsic = getFlag("UseMultiplyToLenIntrinsic", Boolean.class);
101 private final boolean useSHA1Intrinsics = getFlag("UseSHA1Intrinsics", Boolean.class);
102 private final boolean useSHA256Intrinsics = getFlag("UseSHA256Intrinsics", Boolean.class);
103 private final boolean useSHA512Intrinsics = getFlag("UseSHA512Intrinsics", Boolean.class);
104 private final boolean useGHASHIntrinsics = getFlag("UseGHASHIntrinsics", Boolean.class, false);
105 private final boolean useMontgomeryMultiplyIntrinsic = getFlag("UseMontgomeryMultiplyIntrinsic", Boolean.class, false);
106 private final boolean useMontgomerySquareIntrinsic = getFlag("UseMontgomerySquareIntrinsic", Boolean.class, false);
107 private final boolean useMulAddIntrinsic = getFlag("UseMulAddIntrinsic", Boolean.class, false);
108 private final boolean useSquareToLenIntrinsic = getFlag("UseSquareToLenIntrinsic", Boolean.class, false);
109 public final boolean useVectorizedMismatchIntrinsic = getFlag("UseVectorizedMismatchIntrinsic", Boolean.class, false);
110
111 /*
112 * These are methods because in some JDKs the flags are visible but the stubs themselves haven't
113 * been exported so we have to check both if the flag is on and if we have the stub.
114 */
115 public boolean useMultiplyToLenIntrinsic() {
116 return useMultiplyToLenIntrinsic && multiplyToLen != 0;
117 }
118
119 public boolean useSHA1Intrinsics() {
120 return useSHA1Intrinsics && sha1ImplCompress != 0 && sha1ImplCompressMultiBlock != 0;
121 }
122
123 public boolean useSHA256Intrinsics() {
124 return useSHA256Intrinsics && sha256ImplCompress != 0 && sha256ImplCompressMultiBlock != 0;
125 }
126
127 public boolean useSHA512Intrinsics() {
128 return useSHA512Intrinsics && sha512ImplCompress != 0 && sha512ImplCompressMultiBlock != 0;
129 }
130
131 public boolean useGHASHIntrinsics() {
132 return useGHASHIntrinsics && ghashProcessBlocks != 0;
133 }
134
135 public boolean useMontgomeryMultiplyIntrinsic() {
136 return useMontgomeryMultiplyIntrinsic && montgomeryMultiply != 0;
137 }
138
139 public boolean useMontgomerySquareIntrinsic() {
140 return useMontgomerySquareIntrinsic && montgomerySquare != 0;
141 }
142
143 public boolean useMulAddIntrinsic() {
144 return useMulAddIntrinsic && mulAdd != 0;
145 }
146
147 public boolean useSquareToLenIntrinsic() {
148 return useSquareToLenIntrinsic && squareToLen != 0;
149 }
150
151 public boolean inlineNotify() {
152 return inlineNotify && notifyAddress != 0;
299
300 public final int fieldInfoAccessFlagsOffset = getConstant("FieldInfo::access_flags_offset", Integer.class);
301 public final int fieldInfoNameIndexOffset = getConstant("FieldInfo::name_index_offset", Integer.class);
302 public final int fieldInfoSignatureIndexOffset = getConstant("FieldInfo::signature_index_offset", Integer.class);
303 public final int fieldInfoInitvalIndexOffset = getConstant("FieldInfo::initval_index_offset", Integer.class);
304 public final int fieldInfoLowPackedOffset = getConstant("FieldInfo::low_packed_offset", Integer.class);
305 public final int fieldInfoHighPackedOffset = getConstant("FieldInfo::high_packed_offset", Integer.class);
306 public final int fieldInfoFieldSlots = getConstant("FieldInfo::field_slots", Integer.class);
307
308 public final int fieldInfoTagSize = getConstant("FIELDINFO_TAG_SIZE", Integer.class);
309
310 public final int jvmAccMonitorMatch = getConstant("JVM_ACC_MONITOR_MATCH", Integer.class);
311 public final int jvmAccHasMonitorBytecodes = getConstant("JVM_ACC_HAS_MONITOR_BYTECODES", Integer.class);
312 public final int jvmAccHasFinalizer = getConstant("JVM_ACC_HAS_FINALIZER", Integer.class);
313 public final int jvmAccFieldInternal = getConstant("JVM_ACC_FIELD_INTERNAL", Integer.class);
314 public final int jvmAccFieldStable = getConstant("JVM_ACC_FIELD_STABLE", Integer.class);
315 public final int jvmAccFieldHasGenericSignature = getConstant("JVM_ACC_FIELD_HAS_GENERIC_SIGNATURE", Integer.class);
316 public final int jvmAccWrittenFlags = getConstant("JVM_ACC_WRITTEN_FLAGS", Integer.class);
317 public final int jvmAccSynthetic = getConstant("JVM_ACC_SYNTHETIC", Integer.class);
318
319 public final int jvmciCompileStateCanPostOnExceptionsOffset = getJvmciCompileStateCanPostOnExceptionsOffset();
320
321 // Integer.MIN_VALUE if not available
322 private int getJvmciCompileStateCanPostOnExceptionsOffset() {
323 int offset = getFieldOffset("JVMCICompileState::_jvmti_can_post_on_exceptions", Integer.class, "jbyte", Integer.MIN_VALUE);
324 if (offset == Integer.MIN_VALUE) {
325 // JDK 12
326 offset = getFieldOffset("JVMCIEnv::_jvmti_can_post_on_exceptions", Integer.class, "jbyte", Integer.MIN_VALUE);
327 }
328 return offset;
329 }
330
331 public final int threadTlabOffset = getFieldOffset("Thread::_tlab", Integer.class, "ThreadLocalAllocBuffer");
332 public final int javaThreadAnchorOffset = getFieldOffset("JavaThread::_anchor", Integer.class, "JavaFrameAnchor");
333 public final int javaThreadShouldPostOnExceptionsFlagOffset = getFieldOffset("JavaThread::_should_post_on_exceptions_flag", Integer.class, "int", Integer.MIN_VALUE);
334 public final int threadObjectOffset = getFieldOffset("JavaThread::_threadObj", Integer.class, "oop");
335 public final int osThreadOffset = getFieldOffset("JavaThread::_osthread", Integer.class, "OSThread*");
336 public final int threadIsMethodHandleReturnOffset = getFieldOffset("JavaThread::_is_method_handle_return", Integer.class, "int");
337 public final int threadObjectResultOffset = getFieldOffset("JavaThread::_vm_result", Integer.class, "oop");
338 public final int jvmciCountersThreadOffset = getFieldOffset("JavaThread::_jvmci_counters", Integer.class, "jlong*");
339 public final int javaThreadReservedStackActivationOffset = versioned.javaThreadReservedStackActivationOffset;
340
341 public boolean requiresReservedStackCheck(List<ResolvedJavaMethod> methods) {
342 if (enableStackReservedZoneAddress != 0 && methods != null) {
343 for (ResolvedJavaMethod method : methods) {
344 if (((HotSpotResolvedJavaMethod) method).hasReservedStackAccess()) {
345 return true;
346 }
347 }
348 }
349 return false;
372 */
373 public final long dllLookup = getAddress("os::dll_lookup");
374
375 /**
376 * A pseudo-handle which when used as the first argument to {@link #dllLookup} means lookup will
377 * return the first occurrence of the desired symbol using the default library search order. If
378 * this field is {@value #INVALID_RTLD_DEFAULT_HANDLE}, then this capability is not supported on
379 * the current platform.
380 */
381 public final long rtldDefault = getAddress("RTLD_DEFAULT", osName.equals("bsd") || osName.equals("linux") ? null : INVALID_RTLD_DEFAULT_HANDLE);
382
383 /**
384 * This field is used to pass exception objects into and out of the runtime system during
385 * exception handling for compiled code.
386 */
387 public final int threadExceptionOopOffset = getFieldOffset("JavaThread::_exception_oop", Integer.class, "oop");
388 public final int threadExceptionPcOffset = getFieldOffset("JavaThread::_exception_pc", Integer.class, "address");
389 public final int pendingExceptionOffset = getFieldOffset("ThreadShadow::_pending_exception", Integer.class, "oop");
390
391 public final int pendingDeoptimizationOffset = getFieldOffset("JavaThread::_pending_deoptimization", Integer.class, "int");
392 public final int pendingTransferToInterpreterOffset = getFieldOffset("JavaThread::_pending_transfer_to_interpreter", Integer.class, "bool");
393
394 private final int javaFrameAnchorLastJavaSpOffset = getFieldOffset("JavaFrameAnchor::_last_Java_sp", Integer.class, "intptr_t*");
395 private final int javaFrameAnchorLastJavaPcOffset = getFieldOffset("JavaFrameAnchor::_last_Java_pc", Integer.class, "address");
396
397 public final int pendingFailedSpeculationOffset;
398 {
399 String name = "JavaThread::_pending_failed_speculation";
400 int offset = -1;
401 try {
402 offset = getFieldOffset(name, Integer.class, "jlong");
403 } catch (JVMCIError e) {
404 try {
405 offset = getFieldOffset(name, Integer.class, "long");
406 } catch (JVMCIError e2) {
407 }
408 }
409 if (offset == -1) {
410 throw new JVMCIError("cannot get offset of field " + name + " with type long or jlong");
411 }
412 pendingFailedSpeculationOffset = offset;
413 }
414
415 public int threadLastJavaSpOffset() {
416 return javaThreadAnchorOffset + javaFrameAnchorLastJavaSpOffset;
417 }
418
419 public int threadLastJavaPcOffset() {
420 return javaThreadAnchorOffset + javaFrameAnchorLastJavaPcOffset;
421 }
422
423 public int threadLastJavaFpOffset() {
424 assert osArch.equals("aarch64") || osArch.equals("amd64");
425 return javaThreadAnchorOffset + getFieldOffset("JavaFrameAnchor::_last_Java_fp", Integer.class, "intptr_t*");
426 }
427
428 public int threadJavaFrameAnchorFlagsOffset() {
429 assert osArch.equals("sparc");
430 return javaThreadAnchorOffset + getFieldOffset("JavaFrameAnchor::_flags", Integer.class, "int");
431 }
432
433 public final int runtimeCallStackSize = getConstant("frame::arg_reg_save_area_bytes", Integer.class, intRequiredOnAMD64);
434 public final int frameInterpreterFrameSenderSpOffset = getConstant("frame::interpreter_frame_sender_sp_offset", Integer.class, intRequiredOnAMD64);
619
620 public final boolean cmsIncrementalMode = getFlag("CMSIncrementalMode", Boolean.class, false);
621
622 public final long inlineCacheMissStub = getFieldValue("CompilerToVM::Data::SharedRuntime_ic_miss_stub", Long.class, "address");
623 public final long handleWrongMethodStub = getFieldValue("CompilerToVM::Data::SharedRuntime_handle_wrong_method_stub", Long.class, "address");
624
625 public final long handleDeoptStub = getFieldValue("CompilerToVM::Data::SharedRuntime_deopt_blob_unpack", Long.class, "address");
626 public final long uncommonTrapStub = getFieldValue("CompilerToVM::Data::SharedRuntime_deopt_blob_uncommon_trap", Long.class, "address");
627
628 public final long codeCacheLowBound = versioned.codeCacheLowBound;
629 public final long codeCacheHighBound = versioned.codeCacheHighBound;
630
631 public final long aescryptEncryptBlockStub = getFieldValue("StubRoutines::_aescrypt_encryptBlock", Long.class, "address");
632 public final long aescryptDecryptBlockStub = getFieldValue("StubRoutines::_aescrypt_decryptBlock", Long.class, "address");
633 public final long cipherBlockChainingEncryptAESCryptStub = getFieldValue("StubRoutines::_cipherBlockChaining_encryptAESCrypt", Long.class, "address");
634 public final long cipherBlockChainingDecryptAESCryptStub = getFieldValue("StubRoutines::_cipherBlockChaining_decryptAESCrypt", Long.class, "address");
635 public final long updateBytesCRC32Stub = getFieldValue("StubRoutines::_updateBytesCRC32", Long.class, "address");
636 public final long crcTableAddress = getFieldValue("StubRoutines::_crc_table_adr", Long.class, "address");
637
638 public final long sha1ImplCompress = getFieldValue("StubRoutines::_sha1_implCompress", Long.class, "address", 0L);
639 public final long sha1ImplCompressMultiBlock = getFieldValue("StubRoutines::_sha1_implCompressMB", Long.class, "address", 0L);
640 public final long sha256ImplCompress = getFieldValue("StubRoutines::_sha256_implCompress", Long.class, "address", 0L);
641 public final long sha256ImplCompressMultiBlock = getFieldValue("StubRoutines::_sha256_implCompressMB", Long.class, "address", 0L);
642 public final long sha512ImplCompress = getFieldValue("StubRoutines::_sha512_implCompress", Long.class, "address", 0L);
643 public final long sha512ImplCompressMultiBlock = getFieldValue("StubRoutines::_sha512_implCompressMB", Long.class, "address", 0L);
644 public final long multiplyToLen = getFieldValue("StubRoutines::_multiplyToLen", Long.class, "address", longRequiredOnAMD64);
645
646 public final long counterModeAESCrypt = getFieldValue("StubRoutines::_counterMode_AESCrypt", Long.class, "address", 0L);
647 public final long ghashProcessBlocks = getFieldValue("StubRoutines::_ghash_processBlocks", Long.class, "address", 0L);
648 public final long crc32cTableTddr = getFieldValue("StubRoutines::_crc32c_table_addr", Long.class, "address", 0L);
649 public final long updateBytesCRC32C = getFieldValue("StubRoutines::_updateBytesCRC32C", Long.class, "address", 0L);
650 public final long updateBytesAdler32 = getFieldValue("StubRoutines::_updateBytesAdler32", Long.class, "address", 0L);
651 public final long squareToLen = getFieldValue("StubRoutines::_squareToLen", Long.class, "address", longRequiredOnAMD64);
652 public final long mulAdd = getFieldValue("StubRoutines::_mulAdd", Long.class, "address", longRequiredOnAMD64);
653 public final long montgomeryMultiply = getFieldValue("StubRoutines::_montgomeryMultiply", Long.class, "address", longRequiredOnAMD64);
654 public final long montgomerySquare = getFieldValue("StubRoutines::_montgomerySquare", Long.class, "address", longRequiredOnAMD64);
655 public final long vectorizedMismatch = getFieldValue("StubRoutines::_vectorizedMismatch", Long.class, "address", 0L);
656
657 public final long throwDelayedStackOverflowErrorEntry = versioned.throwDelayedStackOverflowErrorEntry;
658
659 public final long jbyteArraycopy = getFieldValue("StubRoutines::_jbyte_arraycopy", Long.class, "address");
660 public final long jshortArraycopy = getFieldValue("StubRoutines::_jshort_arraycopy", Long.class, "address");
661 public final long jintArraycopy = getFieldValue("StubRoutines::_jint_arraycopy", Long.class, "address");
662 public final long jlongArraycopy = getFieldValue("StubRoutines::_jlong_arraycopy", Long.class, "address");
663 public final long oopArraycopy = getFieldValue("StubRoutines::_oop_arraycopy", Long.class, "address");
|