@@ -1851,7 +1851,7 @@ class INTERPRETER_CLASS
1851
1851
#endif /* defined(J9VM_OPT_CRIU_SUPPORT) */
1852
1852
#if JAVA_SPEC_VERSION >= 24
1853
1853
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);
1855
1855
break ;
1856
1856
}
1857
1857
#endif /* JAVA_SPEC_VERSION >= 24 */
@@ -5878,6 +5878,20 @@ class INTERPRETER_CLASS
5878
5878
rc = inlineSendTarget (REGISTER_ARGS, VM_MAYBE, VM_MAYBE, VM_MAYBE, VM_MAYBE, false , false , true );
5879
5879
break ;
5880
5880
}
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
+ }
5881
5895
case J9VM_CONTINUATION_RETURN_FROM_JIT_MONITOR_ENTER: {
5882
5896
rc = tryEnterBlockingMonitor (REGISTER_ARGS, syncObject, J9VM_CONTINUATION_RETURN_FROM_JIT_MONITOR_ENTER);
5883
5897
if ((NULL != _currentThread->currentContinuation ) && (EXECUTE_BYTECODE == rc)) {
0 commit comments