@@ -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