From 744ba6559cc49099365e8c1589f63379171ff61e Mon Sep 17 00:00:00 2001 From: Kunal Pathak Date: Fri, 21 Feb 2025 12:44:31 -0800 Subject: [PATCH] Fix the unwind opcode for new registers --- src/coreclr/jit/unwindamd64.cpp | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/coreclr/jit/unwindamd64.cpp b/src/coreclr/jit/unwindamd64.cpp index e42a4368581fb7..a7f5c8c8a8454c 100644 --- a/src/coreclr/jit/unwindamd64.cpp +++ b/src/coreclr/jit/unwindamd64.cpp @@ -71,6 +71,30 @@ short Compiler::mapRegNumToDwarfReg(regNumber reg) case REG_R15: dwarfReg = 15; break; + case REG_R16: + dwarfReg = 16; + break; + case REG_R17: + dwarfReg = 17; + break; + case REG_R18: + dwarfReg = 18; + break; + case REG_R19: + dwarfReg = 19; + break; + case REG_R20: + dwarfReg = 20; + break; + case REG_R21: + dwarfReg = 21; + break; + case REG_R22: + dwarfReg = 22; + break; + case REG_R23: + dwarfReg = 23; + break; default: noway_assert(!"unexpected REG_NUM"); } @@ -399,7 +423,7 @@ void Compiler::unwindSaveRegWindows(regNumber reg, unsigned offset) code = (UNWIND_CODE*)&func->unwindCodes[func->unwindCodeSlot -= sizeof(UNWIND_CODE)]; code->UnwindOp = (genIsValidFloatReg(reg)) ? UWOP_SAVE_XMM128_FAR : UWOP_SAVE_NONVOL_FAR; } - code->OpInfo = (BYTE)reg; + code->OpInfo = (BYTE)(genIsValidFloatReg(reg) ? reg - XMMBASE : reg); unsigned int cbProlog = unwindGetCurrentOffset(func); noway_assert((BYTE)cbProlog == cbProlog); code->CodeOffset = (BYTE)cbProlog;