diff --git a/src/coreclr/jit/unwindamd64.cpp b/src/coreclr/jit/unwindamd64.cpp index a7f5c8c8a8454c..6e284aa230c199 100644 --- a/src/coreclr/jit/unwindamd64.cpp +++ b/src/coreclr/jit/unwindamd64.cpp @@ -423,7 +423,22 @@ 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)(genIsValidFloatReg(reg) ? reg - XMMBASE : reg); + unsigned unwindRegNum; + if (genIsValidFloatReg(reg)) + { + unwindRegNum = reg - XMMBASE; + } + else + { + assert(genIsValidIntReg(reg)); + unwindRegNum = reg; + } + // We only add unwind codes for non-volatile registers and for x86/x64, + // the max registers index for a non-volatile register is 15. + assert(unwindRegNum <= 15); + code->OpInfo = (UCHAR)unwindRegNum; + assert((unsigned)code->OpInfo == unwindRegNum); + unsigned int cbProlog = unwindGetCurrentOffset(func); noway_assert((BYTE)cbProlog == cbProlog); code->CodeOffset = (BYTE)cbProlog;