Skip to content

Commit 9c3589a

Browse files
authored
Merge pull request #22356 from tajila/vt2
(0.54) Add J2I sync method enter continuation transition
2 parents d8d053f + 417f801 commit 9c3589a

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

runtime/oti/j9nonbuilder.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5562,6 +5562,7 @@ typedef uintptr_t ContinuationState;
55625562
#define J9VM_CONTINUATION_RETURN_FROM_SYNC_METHOD 3
55635563
#define J9VM_CONTINUATION_RETURN_FROM_JIT_MONITOR_ENTER 4
55645564
#define J9VM_CONTINUATION_RETURN_FROM_SYNC_METHOD_JNI 5
5565+
#define J9VM_CONTINUATION_RETURN_FROM_SYNC_METHOD_J2I 6
55655566

55665567
#define J9VM_CONTINUATION_RUNTIMEFLAG_JVMTI_CONTENDED_MONITOR_ENTER_RECORDED 0x1
55675568
#endif /* JAVA_SPEC_VERSION >= 24 */

runtime/vm/BytecodeInterpreter.hpp

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1851,7 +1851,7 @@ class INTERPRETER_CLASS
18511851
#endif /* defined(J9VM_OPT_CRIU_SUPPORT) */
18521852
#if JAVA_SPEC_VERSION >= 24
18531853
case J9_OBJECT_MONITOR_YIELD_VIRTUAL: {
1854-
rc = yieldPinnedContinuation(REGISTER_ARGS, JAVA_LANG_VIRTUALTHREAD_BLOCKING, J9VM_CONTINUATION_RETURN_FROM_SYNC_METHOD);
1854+
rc = yieldPinnedContinuation(REGISTER_ARGS, JAVA_LANG_VIRTUALTHREAD_BLOCKING, j2i ? J9VM_CONTINUATION_RETURN_FROM_SYNC_METHOD_J2I : J9VM_CONTINUATION_RETURN_FROM_SYNC_METHOD);
18551855
break;
18561856
}
18571857
#endif /* JAVA_SPEC_VERSION >= 24 */
@@ -5878,6 +5878,20 @@ class INTERPRETER_CLASS
58785878
rc = inlineSendTarget(REGISTER_ARGS, VM_MAYBE, VM_MAYBE, VM_MAYBE, VM_MAYBE, false, false, true);
58795879
break;
58805880
}
5881+
case J9VM_CONTINUATION_RETURN_FROM_SYNC_METHOD_J2I: {
5882+
/* Reset interpreter state to what it would have been upon entry to inline send target. */
5883+
J9ROMMethod *romMethod = J9_ROM_METHOD_FROM_RAM_METHOD(_literals);
5884+
J9SFJ2IFrame *j2iFrame = (J9SFJ2IFrame *)_sp;
5885+
restoreJ2IValues(j2iFrame);
5886+
_sendMethod = _literals;
5887+
_literals = (J9Method *)j2iFrame->exitPoint;
5888+
_pc = (U_8 *)j2iFrame->returnAddress;
5889+
j2iFrame->taggedReturnSP = (UDATA *)((UDATA)j2iFrame->taggedReturnSP & ~((UDATA)J9SF_A0_INVISIBLE_TAG));
5890+
_arg0EA = (UDATA *)j2iFrame->taggedReturnSP;
5891+
_sp = (UDATA *)((J9SFJ2IFrame *)_sp + 1) + (romMethod->tempCount + 1);
5892+
rc = inlineSendTarget(REGISTER_ARGS, VM_MAYBE, VM_MAYBE, VM_MAYBE, VM_MAYBE, true, false, true);
5893+
break;
5894+
}
58815895
case J9VM_CONTINUATION_RETURN_FROM_JIT_MONITOR_ENTER: {
58825896
rc = tryEnterBlockingMonitor(REGISTER_ARGS, syncObject, J9VM_CONTINUATION_RETURN_FROM_JIT_MONITOR_ENTER);
58835897
if ((NULL != _currentThread->currentContinuation) && (EXECUTE_BYTECODE == rc)) {

0 commit comments

Comments
 (0)