@@ -4930,7 +4930,7 @@ void CodeGen::genEnregisterOSRArgsAndLocals()
4930
4930
4931
4931
GetEmitter ()->emitIns_R_AR (ins_Load (lclTyp), size, varDsc->GetRegNum (), genFramePointerReg (), offset);
4932
4932
4933
- #elif defined(TARGET_ARM64) || defined(TARGET_LOONGARCH64) || defined( TARGET_RISCV64)
4933
+ #elif defined(TARGET_ARM64) || defined(TARGET_RISCV64)
4934
4934
4935
4935
// Patchpoint offset is from top of Tier0 frame
4936
4936
//
@@ -4956,6 +4956,39 @@ void CodeGen::genEnregisterOSRArgsAndLocals()
4956
4956
// | | | |
4957
4957
const int offset = stkOffs + tier0FrameSize + osrFrameSize - osrSpToFpDelta;
4958
4958
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
+
4959
4992
JITDUMP (" ---OSR--- V%02u (reg) Tier0 virtual offset %d OSR frame size %d OSR sp-fp "
4960
4993
" delta %d total offset %d (0x%x)\n " ,
4961
4994
varNum, stkOffs, osrFrameSize, osrSpToFpDelta, offset, offset);
0 commit comments