@@ -4930,7 +4930,7 @@ void CodeGen::genEnregisterOSRArgsAndLocals()
49304930
49314931 GetEmitter ()->emitIns_R_AR (ins_Load (lclTyp), size, varDsc->GetRegNum (), genFramePointerReg (), offset);
49324932
4933- #elif defined(TARGET_ARM64) || defined(TARGET_LOONGARCH64) || defined( TARGET_RISCV64)
4933+ #elif defined(TARGET_ARM64) || defined(TARGET_RISCV64)
49344934
49354935 // Patchpoint offset is from top of Tier0 frame
49364936 //
@@ -4956,6 +4956,39 @@ void CodeGen::genEnregisterOSRArgsAndLocals()
49564956 // | | | |
49574957 const int offset = stkOffs + tier0FrameSize + osrFrameSize - osrSpToFpDelta;
49584958
4959+ JITDUMP (" ---OSR--- V%02u (reg) Tier0 virtual offset %d OSR frame size %d OSR sp-fp "
4960+ " delta %d total offset %d (0x%x)\n " ,
4961+ varNum, stkOffs, osrFrameSize, osrSpToFpDelta, offset, offset);
4962+
4963+ genInstrWithConstant (ins_Load (lclTyp), size, varDsc->GetRegNum (), genFramePointerReg (), offset, initReg);
4964+ *pInitRegZeroed = false ;
4965+
4966+ #elif defined(TARGET_LOONGARCH64)
4967+
4968+ // Patchpoint offset is from top of Tier0 frame
4969+ //
4970+ // We need to determine the frame-pointer relative
4971+ // offset for this variable in the osr frame.
4972+ //
4973+ // First get the fp's relative offset within Tier0 frame
4974+ //
4975+ const int tier0FrameOffset = compiler->info .compPatchpointInfo ->CalleeSaveRegisters ();
4976+
4977+ // then add the OSR frame size
4978+ //
4979+ const int osrFrameSize = genTotalFrameSize ();
4980+
4981+ // then subtract OSR SP-FP delta
4982+ //
4983+ const int osrSpToFpDelta = genSPtoFPdelta ();
4984+
4985+ // | => tier0 top of frame relative
4986+ // | + => tier0's fp relative offset
4987+ // | | + => osr bottom of frame (sp) relative
4988+ // | | | - => osr fp relative
4989+ // | | | |
4990+ const int offset = stkOffs + tier0FrameOffset + osrFrameSize - osrSpToFpDelta;
4991+
49594992 JITDUMP (" ---OSR--- V%02u (reg) Tier0 virtual offset %d OSR frame size %d OSR sp-fp "
49604993 " delta %d total offset %d (0x%x)\n " ,
49614994 varNum, stkOffs, osrFrameSize, osrSpToFpDelta, offset, offset);
0 commit comments