- case ISD::SDIV:
- case ISD::UDIV:
- case ISD::UREM:
- case ISD::SREM:
- if (MVT::isInteger(N->getValueType(0))) {
- const char* opstr = 0;
- switch(N->getOpcode()) {
- case ISD::UREM: opstr = "__remqu"; break;
- case ISD::SREM: opstr = "__remq"; break;
- case ISD::UDIV: opstr = "__divqu"; break;
- case ISD::SDIV: opstr = "__divq"; break;
- }
- SDOperand Tmp1 = Select(N->getOperand(0)),
- Tmp2 = Select(N->getOperand(1)),
- Addr = Select(CurDAG->getExternalSymbol(opstr,
- AlphaLowering.getPointerTy()));
- SDOperand Chain;
- Chain = CurDAG->getCopyToReg(CurDAG->getEntryNode(), Alpha::R24, Tmp1,
- SDOperand(0,0));
- Chain = CurDAG->getCopyToReg(Chain, Alpha::R25, Tmp2, Chain.getValue(1));
- Chain = CurDAG->getCopyToReg(Chain, Alpha::R27, Addr, Chain.getValue(1));
- Chain = CurDAG->getTargetNode(Alpha::JSRsDAG, MVT::Other, MVT::Flag,
- Chain, Chain.getValue(1));
- return CurDAG->getCopyFromReg(Chain, Alpha::R27, MVT::i64,
- Chain.getValue(1));
- }
- break;