From f7f22555053a8992b2f97db77a62458ff8a69d7f Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Mon, 22 Aug 2005 01:27:59 +0000 Subject: [PATCH] Implement stores. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@22963 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/PowerPC/PPCISelDAGToDAG.cpp | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/lib/Target/PowerPC/PPCISelDAGToDAG.cpp b/lib/Target/PowerPC/PPCISelDAGToDAG.cpp index 8e3e89c757d..d949bce741f 100644 --- a/lib/Target/PowerPC/PPCISelDAGToDAG.cpp +++ b/lib/Target/PowerPC/PPCISelDAGToDAG.cpp @@ -894,6 +894,32 @@ SDOperand PPC32DAGToDAGISel::Select(SDOperand Op) { break; } + case ISD::TRUNCSTORE: + case ISD::STORE: { + SDOperand AddrOp1, AddrOp2; + bool isIdx = SelectAddr(N->getOperand(2), AddrOp1, AddrOp2); + + unsigned Opc; + if (N->getOpcode() == ISD::STORE) { + switch (N->getOperand(1).getValueType()) { + default: assert(0 && "unknown Type in store"); + case MVT::i32: Opc = isIdx ? PPC::STWX : PPC::STW; break; + case MVT::f64: Opc = isIdx ? PPC::STFDX : PPC::STFD; break; + case MVT::f32: Opc = isIdx ? PPC::STFSX : PPC::STFS; break; + } + } else { //ISD::TRUNCSTORE + switch(cast(N->getOperand(4))->getVT()) { + default: assert(0 && "unknown Type in store"); + case MVT::i1: + case MVT::i8: Opc = isIdx ? PPC::STBX : PPC::STB; break; + case MVT::i16: Opc = isIdx ? PPC::STHX : PPC::STH; break; + } + } + + CurDAG->SelectNodeTo(N, MVT::Other, Opc, Select(N->getOperand(1)), + AddrOp1, AddrOp2, Select(N->getOperand(0))); + break; + } case ISD::RET: { SDOperand Chain = Select(N->getOperand(0)); // Token chain.