From 625fdf4a277e1f896b3035d7c08ea3d2fab06bfb Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 24 Oct 2026 02:19:42 +0000 Subject: [PATCH 1/2] Initial plan From 1a898aa7cc13978ed0c36cbeb76c2ffd9d8467c6 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 25 Oct 2026 18:07:53 +0000 Subject: [PATCH 2/2] Fix ARM64 GC liveness after ADRP in long address and constant loads Co-authored-by: VSadov <8218165+VSadov@users.noreply.github.com> --- src/coreclr/jit/emitarm64.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/coreclr/jit/emitarm64.cpp b/src/coreclr/jit/emitarm64.cpp index d519af1065641c..7eb379122fdd90 100644 --- a/src/coreclr/jit/emitarm64.cpp +++ b/src/coreclr/jit/emitarm64.cpp @@ -10753,6 +10753,7 @@ BYTE* emitter::emitOutputLJ(insGroup* ig, BYTE* dst, instrDesc* i) ins = INS_adrp; fmt = IF_DI_1E; dst = emitOutputShortAddress(dst, ins, fmt, relPageAddr, addrReg); + emitGCregDeadUpd(addrReg, dst); ssize_t imm12 = (ssize_t)dstAddr & 0xFFF; // 12 bits assert(isValidUimm<12>(imm12)); @@ -11811,6 +11812,11 @@ size_t emitter::emitOutputInstr(insGroup* ig, instrDesc* id, BYTE** dp) // Local jmp/load case assert(id->idIsBound()); dst = emitOutputLJ(ig, dst, id); + if (fmt == IF_LARGEADR) + { + // ADRP overwrites the destination before ADD computes the full address. + emitGCregDeadUpd(id->idReg1(), odst + sizeof(code_t)); + } } sz = sizeof(instrDescJmp); break;