mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-24 08:33:39 +00:00
Implement stores.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@22963 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
23553cfb4a
commit
f7f2255505
@ -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.
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user