diff --git a/lib/Target/Sparc/SparcRegisterInfo.cpp b/lib/Target/Sparc/SparcRegisterInfo.cpp
index 114e79569cc..c5034d57ad6 100644
--- a/lib/Target/Sparc/SparcRegisterInfo.cpp
+++ b/lib/Target/Sparc/SparcRegisterInfo.cpp
@@ -109,7 +109,8 @@ void SparcV8RegisterInfo::emitPrologue(MachineFunction &MF) const {
   // ----------
   //   23 words * 4 bytes per word = 92 bytes
   NumBytes += 92;
-  NumBytes = (NumBytes + 3) & ~3;  // Round up to next word boundary
+  NumBytes = (NumBytes + 7) & ~7;  // Round up to next doubleword boundary
+   // (Technically, a word boundary should be sufficient, but SPARC as complains)
   BuildMI(MBB, MBB.begin(), V8::SAVEri, 2,
           V8::SP).addImm(-NumBytes).addReg(V8::SP);
 }
diff --git a/lib/Target/SparcV8/SparcV8RegisterInfo.cpp b/lib/Target/SparcV8/SparcV8RegisterInfo.cpp
index 114e79569cc..c5034d57ad6 100644
--- a/lib/Target/SparcV8/SparcV8RegisterInfo.cpp
+++ b/lib/Target/SparcV8/SparcV8RegisterInfo.cpp
@@ -109,7 +109,8 @@ void SparcV8RegisterInfo::emitPrologue(MachineFunction &MF) const {
   // ----------
   //   23 words * 4 bytes per word = 92 bytes
   NumBytes += 92;
-  NumBytes = (NumBytes + 3) & ~3;  // Round up to next word boundary
+  NumBytes = (NumBytes + 7) & ~7;  // Round up to next doubleword boundary
+   // (Technically, a word boundary should be sufficient, but SPARC as complains)
   BuildMI(MBB, MBB.begin(), V8::SAVEri, 2,
           V8::SP).addImm(-NumBytes).addReg(V8::SP);
 }