Changes in directory llvm/lib/Target/SparcV8:
SparcV8ISelDAGToDAG.cpp updated: 1.35 -> 1.36 --- Log message: implement vaarg. Varargs now should work. --- Diffs of the changes: (+13 -2) SparcV8ISelDAGToDAG.cpp | 15 +++++++++++++-- 1 files changed, 13 insertions(+), 2 deletions(-) Index: llvm/lib/Target/SparcV8/SparcV8ISelDAGToDAG.cpp diff -u llvm/lib/Target/SparcV8/SparcV8ISelDAGToDAG.cpp:1.35 llvm/lib/Target/SparcV8/SparcV8ISelDAGToDAG.cpp:1.36 --- llvm/lib/Target/SparcV8/SparcV8ISelDAGToDAG.cpp:1.35 Fri Dec 23 00:24:04 2005 +++ llvm/lib/Target/SparcV8/SparcV8ISelDAGToDAG.cpp Fri Dec 23 00:37:38 2005 @@ -578,8 +578,19 @@ std::pair<SDOperand,SDOperand> SparcV8TargetLowering:: LowerVAArg(SDOperand Chain, SDOperand VAListP, Value *VAListV, const Type *ArgTy, SelectionDAG &DAG) { - assert(0 && "Unimp"); - abort(); + // Load the pointer out of the valist. + SDOperand Ptr = DAG.getLoad(MVT::i32, Chain, + VAListP, DAG.getSrcValue(VAListV)); + MVT::ValueType ArgVT = getValueType(ArgTy); + SDOperand Val = DAG.getLoad(ArgVT, Ptr.getValue(1), + Ptr, DAG.getSrcValue(NULL)); + // Increment the pointer. + Ptr = DAG.getNode(ISD::ADD, MVT::i32, Ptr, + DAG.getConstant(MVT::getSizeInBits(ArgVT)/8, MVT::i32)); + // Store it back to the valist. + Chain = DAG.getNode(ISD::STORE, MVT::Other, Chain, Ptr, + VAListP, DAG.getSrcValue(VAListV)); + return std::make_pair(Val, Chain); } std::pair<SDOperand, SDOperand> SparcV8TargetLowering:: _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits