diff options
| author | Chris Lattner <sabre@nondot.org> | 2005-08-22 01:27:59 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2005-08-22 01:27:59 +0000 |
| commit | ca0c0d7550759aba24bb45de1bce1a7c921fa11a (patch) | |
| tree | 030ff8a2ba60c54e2d8ddafcb8d0535118aaa509 /llvm/lib/Target | |
| parent | 92626b9bc556b40f0d995bfe95b8733a2228e374 (diff) | |
| download | bcm5719-llvm-ca0c0d7550759aba24bb45de1bce1a7c921fa11a.tar.gz bcm5719-llvm-ca0c0d7550759aba24bb45de1bce1a7c921fa11a.zip | |
Implement stores.
llvm-svn: 22963
Diffstat (limited to 'llvm/lib/Target')
| -rw-r--r-- | llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp b/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp index 8e3e89c757d..d949bce741f 100644 --- a/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp +++ b/llvm/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<VTSDNode>(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. |

