For a small sized stack, we encode that value directly with no "stack adjust" value.
authorBill Wendling <isanbard@gmail.com>
Tue, 6 Dec 2011 19:09:06 +0000 (19:09 +0000)
committerBill Wendling <isanbard@gmail.com>
Tue, 6 Dec 2011 19:09:06 +0000 (19:09 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@145952 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86FrameLowering.cpp

index 7f3c13391d3ee345bd8e3327a9499aae992052bb..09aa114f1b6cebf2bcc9cda15af59037c051ac52 100644 (file)
@@ -565,7 +565,7 @@ uint32_t X86FrameLowering::getCompactUnwindEncoding(MachineFunction &MF) const {
     if ((FullOffset & 0xFF) == FullOffset) {
       // Frameless stack.
       CompactUnwindEncoding |= 0x02000000;
-      CompactUnwindEncoding |= (FullOffset & 0xFF) << 16;
+      CompactUnwindEncoding |= (CFAOffset & 0xFF) << 16;
     } else {
       if ((CFAOffset & 0x7) != CFAOffset)
         // The extra stack adjustments are too big for us to handle.
@@ -582,6 +582,8 @@ uint32_t X86FrameLowering::getCompactUnwindEncoding(MachineFunction &MF) const {
       CompactUnwindEncoding |= (CFAOffset & 0x7) << 13;
     }
 
+    CompactUnwindEncoding |= ((6 - SavedRegIdx) & 0x7) << 10;
+
     // Get the encoding of the saved registers when we don't have a frame
     // pointer.
     uint32_t RegEnc = encodeCompactUnwindRegistersWithoutFrame(SavedRegs,