@@ -4938,7 +4938,7 @@ void CodeGen::genEnregisterOSRArgsAndLocals()
4938
4938
4939
4939
GetEmitter ()->emitIns_R_AR (ins_Load (lclTyp), size, varDsc->GetRegNum (), genFramePointerReg (), offset);
4940
4940
4941
- #elif defined(TARGET_ARM64) || defined(TARGET_LOONGARCH64) || defined( TARGET_RISCV64)
4941
+ #elif defined(TARGET_ARM64) || defined(TARGET_RISCV64)
4942
4942
4943
4943
// Patchpoint offset is from top of Tier0 frame
4944
4944
//
@@ -4964,6 +4964,39 @@ void CodeGen::genEnregisterOSRArgsAndLocals()
4964
4964
// | | | |
4965
4965
const int offset = stkOffs + tier0FrameSize + osrFrameSize - osrSpToFpDelta;
4966
4966
4967
+ JITDUMP (" ---OSR--- V%02u (reg) Tier0 virtual offset %d OSR frame size %d OSR sp-fp "
4968
+ " delta %d total offset %d (0x%x)\n " ,
4969
+ varNum, stkOffs, osrFrameSize, osrSpToFpDelta, offset, offset);
4970
+
4971
+ genInstrWithConstant (ins_Load (lclTyp), size, varDsc->GetRegNum (), genFramePointerReg (), offset, initReg);
4972
+ *pInitRegZeroed = false ;
4973
+
4974
+ #elif defined(TARGET_LOONGARCH64)
4975
+
4976
+ // Patchpoint offset is from top of Tier0 frame
4977
+ //
4978
+ // We need to determine the frame-pointer relative
4979
+ // offset for this variable in the osr frame.
4980
+ //
4981
+ // First get the fp's relative offset within Tier0 frame
4982
+ //
4983
+ const int tier0FrameOffset = compiler->info .compPatchpointInfo ->CalleeSaveRegisters ();
4984
+
4985
+ // then add the OSR frame size
4986
+ //
4987
+ const int osrFrameSize = genTotalFrameSize ();
4988
+
4989
+ // then subtract OSR SP-FP delta
4990
+ //
4991
+ const int osrSpToFpDelta = genSPtoFPdelta ();
4992
+
4993
+ // | => tier0 top of frame relative
4994
+ // | + => tier0's fp relative offset
4995
+ // | | + => osr bottom of frame (sp) relative
4996
+ // | | | - => osr fp relative
4997
+ // | | | |
4998
+ const int offset = stkOffs + tier0FrameOffset + osrFrameSize - osrSpToFpDelta;
4999
+
4967
5000
JITDUMP (" ---OSR--- V%02u (reg) Tier0 virtual offset %d OSR frame size %d OSR sp-fp "
4968
5001
" delta %d total offset %d (0x%x)\n " ,
4969
5002
varNum, stkOffs, osrFrameSize, osrSpToFpDelta, offset, offset);
0 commit comments