Resolve bug 2947: vararg-marked functions must spill registers R3-R79 to stack
so that va_start/va_arg/et.al. will walk arguments correctly for Cell SPU.

N.B.: Because neither clang nor llvm-gcc-4.2 can be built for CellSPU, this is
still unexorcised code.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@58415 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Target/CellSPU/SPUAsmPrinter.cpp b/lib/Target/CellSPU/SPUAsmPrinter.cpp
index c43ca0d..01e9dac 100644
--- a/lib/Target/CellSPU/SPUAsmPrinter.cpp
+++ b/lib/Target/CellSPU/SPUAsmPrinter.cpp
@@ -188,8 +188,10 @@
       const MachineOperand &MO = MI->getOperand(OpNo);
       assert(MO.isImm() &&
              "printMemRegImmS10 first operand is not immedate");
-      printS10ImmOperand(MI, OpNo);
-      O << "(";
+      int64_t value = int64_t(MI->getOperand(OpNo).getImm());
+      assert((value >= -(1 << (9+4)) && value <= (1 << (9+4)) - 1)
+             && "Invalid dform s10 offset argument");
+      O << value << "(";
       printOperand(MI, OpNo+1);
       O << ")";
     }