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 << ")";
}