Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
8d48da0
WIP
jakobbotsch Apr 14, 2026
f1d98d1
WIP
jakobbotsch Apr 14, 2026
e3d29e7
WIP
jakobbotsch Apr 14, 2026
2179ae7
WIP
jakobbotsch Apr 14, 2026
448d7cd
Run jit-format
jakobbotsch Apr 14, 2026
10cff17
Fix
jakobbotsch Apr 14, 2026
27db1a7
Fix again
jakobbotsch Apr 14, 2026
05131c3
More hacking
jakobbotsch Apr 14, 2026
480d01e
Build break
jakobbotsch Apr 14, 2026
771df5f
Switch to restoring callee saves instead
jakobbotsch Apr 15, 2026
3474bd1
Clean up
jakobbotsch Apr 15, 2026
60aa1f8
Run jit-format
jakobbotsch Apr 15, 2026
ec1a088
Fix
jakobbotsch Apr 15, 2026
df8a012
Set FP for arm64
jakobbotsch Apr 15, 2026
a1e0380
Remove assert
jakobbotsch Apr 15, 2026
dbc2d70
Fix overriding FP during restore
jakobbotsch Apr 15, 2026
4410ba3
Clean up
jakobbotsch Apr 15, 2026
6dce58b
Implement for LA64/RV64
jakobbotsch Apr 15, 2026
d8bddb7
Clean up
jakobbotsch Apr 15, 2026
b7d705e
AltJit based fixes
jakobbotsch Apr 15, 2026
b18b0fc
Fix arm build
jakobbotsch Apr 15, 2026
20d1190
Feedback
jakobbotsch Apr 15, 2026
1e4df82
Fix build
jakobbotsch Apr 15, 2026
06e9e7f
Remove unnecessary phantom unwind
jakobbotsch Apr 16, 2026
05ffa2d
Partial compilation patchpoints
jakobbotsch Apr 16, 2026
bbde19c
Merge branch 'main' into osr-arm64-restore-from-tier0
jakobbotsch Apr 16, 2026
82ad389
Support frames without fp/lr saved with callee saves
jakobbotsch Apr 17, 2026
6d784e9
Fixes
jakobbotsch Apr 17, 2026
bd302fb
Remove SPMI hack
jakobbotsch Apr 17, 2026
87e6ce5
Feedback
jakobbotsch Apr 17, 2026
e1f8e92
A few fixes
jakobbotsch Apr 17, 2026
a41738f
Store in MethodDescCodeData
jakobbotsch Apr 20, 2026
0dd6951
Fix patchpoint info
jakobbotsch Apr 17, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions src/coreclr/inc/patchpointinfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@ struct PatchpointInfo
m_keptAliveThisOffset = -1;
m_securityCookieOffset = -1;
m_monitorAcquiredOffset = -1;
m_asyncExecutionContextOffset = -1;
m_asyncSynchronizationContextOffset = -1;
}

// Copy
Expand All @@ -58,6 +60,8 @@ struct PatchpointInfo
m_keptAliveThisOffset = original->m_keptAliveThisOffset;
m_securityCookieOffset = original->m_securityCookieOffset;
m_monitorAcquiredOffset = original->m_monitorAcquiredOffset;
m_asyncExecutionContextOffset = original->m_asyncExecutionContextOffset;
m_asyncSynchronizationContextOffset = original->m_asyncSynchronizationContextOffset;

for (uint32_t i = 0; i < original->m_numberOfLocals; i++)
{
Expand Down
49 changes: 25 additions & 24 deletions src/coreclr/jit/codegen.h
Original file line number Diff line number Diff line change
Expand Up @@ -348,11 +348,7 @@ class CodeGen final : public CodeGenInterface
unsigned lclNum, unsigned offset, unsigned paramLclNum, const ABIPassingSegment& seg, class RegGraph* graph);
void genSpillOrAddNonStandardRegisterParam(unsigned lclNum, regNumber sourceReg, class RegGraph* graph);
void genEnregisterIncomingStackArgs();
#if defined(TARGET_ARM64) || defined(TARGET_LOONGARCH64) || defined(TARGET_RISCV64)
void genEnregisterOSRArgsAndLocals(regNumber initReg, bool* pInitRegZeroed);
#else
void genEnregisterOSRArgsAndLocals();
#endif

void genHomeStackSegment(unsigned lclNum, const ABIPassingSegment& seg, regNumber initReg, bool* pInitRegZeroed);
void genHomeSwiftStructStackParameters();
Expand All @@ -363,6 +359,7 @@ class CodeGen final : public CodeGenInterface
void genClearStackVec3ArgUpperBits();
#endif // UNIX_AMD64_ABI && FEATURE_SIMD

void genPushCalleeSavedRegisters(regNumber initReg, bool* pInitRegZeroed);
#if defined(TARGET_ARM64)
bool genInstrWithConstant(instruction ins,
emitAttr attr,
Expand All @@ -384,15 +381,23 @@ class CodeGen final : public CodeGenInterface

Comment thread
jakobbotsch marked this conversation as resolved.
void genPrologSaveReg(regNumber reg1, int spOffset, int spDelta, regNumber tmpReg, bool* pTmpRegIsZero);

void genEpilogRestoreRegPair(regNumber reg1,
regNumber reg2,
int spOffset,
int spDelta,
bool useSaveNextPair,
regNumber tmpReg,
bool* pTmpRegIsZero);

void genEpilogRestoreReg(regNumber reg1, int spOffset, int spDelta, regNumber tmpReg, bool* pTmpRegIsZero);
void genRestoreRegPair(regNumber reg1,
regNumber reg2,
regNumber baseReg,
int spOffset,
int spDelta,
bool useSaveNextPair,
regNumber tmpReg,
bool* pTmpRegIsZero,
bool reportUnwindData);

void genRestoreReg(regNumber reg1,
regNumber baseReg,
int spOffset,
int spDelta,
regNumber tmpReg,
bool* pTmpRegIsZero,
bool reportUnwindData);

// A simple struct to keep register pairs for prolog and epilog.
struct RegPair
Expand Down Expand Up @@ -423,13 +428,12 @@ class CodeGen final : public CodeGenInterface
static int genGetSlotSizeForRegsInMask(regMaskTP regsMask);

void genSaveCalleeSavedRegisterGroup(regMaskTP regsMask, int spDelta, int spOffset);
void genRestoreCalleeSavedRegisterGroup(regMaskTP regsMask, int spDelta, int spOffset);
void genRestoreCalleeSavedRegisterGroup(
regMaskTP regsMask, regNumber baseReg, int spDelta, int spOffset, bool reportUnwindData);

void genSaveCalleeSavedRegistersHelp(regMaskTP regsToSaveMask, int lowestCalleeSavedOffset, int spDelta);
void genRestoreCalleeSavedRegistersHelp(regMaskTP regsToRestoreMask, int lowestCalleeSavedOffset, int spDelta);

void genPushCalleeSavedRegisters(regNumber initReg, bool* pInitRegZeroed);

#elif defined(TARGET_LOONGARCH64) || defined(TARGET_RISCV64)
bool genInstrWithConstant(instruction ins,
emitAttr attr,
Expand All @@ -442,17 +446,14 @@ class CodeGen final : public CodeGenInterface
void genStackPointerAdjustment(ssize_t spAdjustment, regNumber tmpReg, bool* pTmpRegIsZero, bool reportUnwindData);

void genSaveCalleeSavedRegistersHelp(regMaskTP regsToSaveMask, int lowestCalleeSavedOffset);
void genRestoreCalleeSavedRegistersHelp(regMaskTP regsToRestoreMask, int lowestCalleeSavedOffset);
void genPushCalleeSavedRegisters(regNumber initReg, bool* pInitRegZeroed);

#else
void genPushCalleeSavedRegisters();
void genRestoreCalleeSavedRegistersHelp(regMaskTP regsToRestoreMask,
regNumber baseReg,
int lowestCalleeSavedOffset,
bool reportUnwindData);
#endif

#if defined(TARGET_AMD64)
void genOSRRecordTier0CalleeSavedRegistersAndFrame();
void genOSRHandleTier0CalleeSavedRegistersAndFrame();
void genOSRSaveRemainingCalleeSavedRegisters();
#endif // TARGET_AMD64

void genAllocLclFrame(unsigned frameSize, regNumber initReg, bool* pInitRegZeroed, regMaskTP maskArgRegsLiveIn);

Expand Down
9 changes: 9 additions & 0 deletions src/coreclr/jit/codegenarm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1853,6 +1853,15 @@ void CodeGen::genProfilingLeaveCallback(unsigned helper)

#endif // PROFILING_SUPPORTED

//------------------------------------------------------------------------
// genOSRHandleTier0CalleeSavedRegistersAndFrame:
// Not called for arm without OSR support.
//
void CodeGen::genOSRHandleTier0CalleeSavedRegistersAndFrame()
{
unreached();
}
Comment thread
jakobbotsch marked this conversation as resolved.

//------------------------------------------------------------------------
// genEstablishFramePointer: Set up the frame pointer by adding an offset to the stack pointer.
//
Expand Down
Loading
Loading