From de77055a68a3fc495e01b682f00059af3e38822e Mon Sep 17 00:00:00 2001 From: Bill Wendling Date: Tue, 26 Jul 2011 08:03:49 +0000 Subject: [PATCH] The compact unwinding offsets are divided by 8 on 64-bit machines. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@136065 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/X86/X86FrameLowering.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/Target/X86/X86FrameLowering.cpp b/lib/Target/X86/X86FrameLowering.cpp index cdc83054aa0..d5e9aa6d642 100644 --- a/lib/Target/X86/X86FrameLowering.cpp +++ b/lib/Target/X86/X86FrameLowering.cpp @@ -490,6 +490,8 @@ uint32_t X86FrameLowering::getCompactUnwindEncoding(MachineFunction &MF) const { unsigned SubtractInstr = getSUBriOpcode(Is64Bit, -TailCallReturnAddrDelta); unsigned SubtractInstrIdx = (Is64Bit ? 3 : 2); + unsigned StackDivide = (Is64Bit ? 8 : 4); + unsigned InstrOffset = 0; unsigned CFAOffset = 0; unsigned StackAdjust = 0; @@ -536,7 +538,7 @@ uint32_t X86FrameLowering::getCompactUnwindEncoding(MachineFunction &MF) const { // %RSP = SUB64ri8 %RSP, 48 return 0; - StackAdjust = MI.getOperand(2).getImm() / 4; + StackAdjust = MI.getOperand(2).getImm() / StackDivide; SubtractInstrIdx += InstrOffset; ExpectEnd = true; } @@ -544,7 +546,7 @@ uint32_t X86FrameLowering::getCompactUnwindEncoding(MachineFunction &MF) const { // Encode that we are using EBP/RBP as the frame pointer. uint32_t CompactUnwindEncoding = 0; - CFAOffset /= 4; + CFAOffset /= StackDivide; if (HasFP) { if ((CFAOffset & 0xFF) != CFAOffset) // Offset was too big for compact encoding.