/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
|*                                                                            *|
|* Pseudo-instruction MC lowering Source Fragment                             *|
|*                                                                            *|
|* Automatically generated file, do not edit!                                 *|
|*                                                                            *|
\*===----------------------------------------------------------------------===*/

bool MipsAsmPrinter::
emitPseudoExpansionLowering(MCStreamer &OutStreamer,
                            const MachineInstr *MI) {
  switch (MI->getOpcode()) {
    default: return false;
    case Mips::AND_V_D_PSEUDO: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::AND_V);
      // Operand: wd
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: ws
      lowerOperand(MI->getOperand(1), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: wt
      lowerOperand(MI->getOperand(2), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::AND_V_H_PSEUDO: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::AND_V);
      // Operand: wd
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: ws
      lowerOperand(MI->getOperand(1), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: wt
      lowerOperand(MI->getOperand(2), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::AND_V_W_PSEUDO: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::AND_V);
      // Operand: wd
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: ws
      lowerOperand(MI->getOperand(1), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: wt
      lowerOperand(MI->getOperand(2), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::B: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::BEQ);
      // Operand: rs
      TmpInst.addOperand(MCOperand::createReg(Mips::ZERO));
      // Operand: rt
      TmpInst.addOperand(MCOperand::createReg(Mips::ZERO));
      // Operand: offset
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::BAL_BR: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::BGEZAL);
      // Operand: rs
      TmpInst.addOperand(MCOperand::createReg(Mips::ZERO));
      // Operand: offset
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::BAL_BR_MM: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::BGEZAL_MM);
      // Operand: rs
      TmpInst.addOperand(MCOperand::createReg(Mips::ZERO));
      // Operand: offset
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::BSEL_D_PSEUDO: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::BSEL_V);
      // Operand: wd
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: wd_in
      lowerOperand(MI->getOperand(1), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: ws
      lowerOperand(MI->getOperand(2), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: wt
      lowerOperand(MI->getOperand(3), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::BSEL_FD_PSEUDO: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::BSEL_V);
      // Operand: wd
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: wd_in
      lowerOperand(MI->getOperand(1), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: ws
      lowerOperand(MI->getOperand(2), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: wt
      lowerOperand(MI->getOperand(3), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::BSEL_FW_PSEUDO: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::BSEL_V);
      // Operand: wd
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: wd_in
      lowerOperand(MI->getOperand(1), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: ws
      lowerOperand(MI->getOperand(2), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: wt
      lowerOperand(MI->getOperand(3), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::BSEL_H_PSEUDO: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::BSEL_V);
      // Operand: wd
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: wd_in
      lowerOperand(MI->getOperand(1), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: ws
      lowerOperand(MI->getOperand(2), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: wt
      lowerOperand(MI->getOperand(3), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::BSEL_W_PSEUDO: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::BSEL_V);
      // Operand: wd
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: wd_in
      lowerOperand(MI->getOperand(1), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: ws
      lowerOperand(MI->getOperand(2), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: wt
      lowerOperand(MI->getOperand(3), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::B_MM: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::BEQ_MM);
      // Operand: rs
      TmpInst.addOperand(MCOperand::createReg(Mips::ZERO));
      // Operand: rt
      TmpInst.addOperand(MCOperand::createReg(Mips::ZERO));
      // Operand: offset
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::FABS_D: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::FMAX_A_D);
      // Operand: wd
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: ws
      lowerOperand(MI->getOperand(1), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: wt
      lowerOperand(MI->getOperand(1), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::FABS_W: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::FMAX_A_W);
      // Operand: wd
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: ws
      lowerOperand(MI->getOperand(1), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: wt
      lowerOperand(MI->getOperand(1), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::JALR64Pseudo: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::JALR);
      // Operand: rd
      TmpInst.addOperand(MCOperand::createReg(Mips::RA));
      // Operand: rs
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::JALRHB64Pseudo: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::JALR_HB64);
      // Operand: rd
      TmpInst.addOperand(MCOperand::createReg(Mips::RA_64));
      // Operand: rs
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::JALRHBPseudo: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::JALR_HB);
      // Operand: rd
      TmpInst.addOperand(MCOperand::createReg(Mips::RA));
      // Operand: rs
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::JALRPseudo: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::JALR);
      // Operand: rd
      TmpInst.addOperand(MCOperand::createReg(Mips::RA));
      // Operand: rs
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::NOP: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::SLL);
      // Operand: rd
      TmpInst.addOperand(MCOperand::createReg(Mips::ZERO));
      // Operand: rt
      TmpInst.addOperand(MCOperand::createReg(Mips::ZERO));
      // Operand: shamt
      TmpInst.addOperand(MCOperand::createImm(0));
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::NOR_V_D_PSEUDO: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::NOR_V);
      // Operand: wd
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: ws
      lowerOperand(MI->getOperand(1), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: wt
      lowerOperand(MI->getOperand(2), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::NOR_V_H_PSEUDO: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::NOR_V);
      // Operand: wd
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: ws
      lowerOperand(MI->getOperand(1), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: wt
      lowerOperand(MI->getOperand(2), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::NOR_V_W_PSEUDO: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::NOR_V);
      // Operand: wd
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: ws
      lowerOperand(MI->getOperand(1), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: wt
      lowerOperand(MI->getOperand(2), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::OR_V_D_PSEUDO: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::OR_V);
      // Operand: wd
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: ws
      lowerOperand(MI->getOperand(1), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: wt
      lowerOperand(MI->getOperand(2), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::OR_V_H_PSEUDO: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::OR_V);
      // Operand: wd
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: ws
      lowerOperand(MI->getOperand(1), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: wt
      lowerOperand(MI->getOperand(2), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::OR_V_W_PSEUDO: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::OR_V);
      // Operand: wd
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: ws
      lowerOperand(MI->getOperand(1), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: wt
      lowerOperand(MI->getOperand(2), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::PseudoCMPU_EQ_QB: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::CMPU_EQ_QB);
      // Operand: rs
      lowerOperand(MI->getOperand(1), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: rt
      lowerOperand(MI->getOperand(2), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::PseudoCMPU_LE_QB: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::CMPU_LE_QB);
      // Operand: rs
      lowerOperand(MI->getOperand(1), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: rt
      lowerOperand(MI->getOperand(2), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::PseudoCMPU_LT_QB: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::CMPU_LT_QB);
      // Operand: rs
      lowerOperand(MI->getOperand(1), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: rt
      lowerOperand(MI->getOperand(2), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::PseudoCMP_EQ_PH: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::CMP_EQ_PH);
      // Operand: rs
      lowerOperand(MI->getOperand(1), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: rt
      lowerOperand(MI->getOperand(2), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::PseudoCMP_LE_PH: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::CMP_LE_PH);
      // Operand: rs
      lowerOperand(MI->getOperand(1), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: rt
      lowerOperand(MI->getOperand(2), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::PseudoCMP_LT_PH: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::CMP_LT_PH);
      // Operand: rs
      lowerOperand(MI->getOperand(1), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: rt
      lowerOperand(MI->getOperand(2), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::PseudoDMULT: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::DMULT);
      // Operand: rs
      lowerOperand(MI->getOperand(1), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: rt
      lowerOperand(MI->getOperand(2), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::PseudoDMULTu: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::DMULTu);
      // Operand: rs
      lowerOperand(MI->getOperand(1), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: rt
      lowerOperand(MI->getOperand(2), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::PseudoDSDIV: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::DSDIV);
      // Operand: rs
      lowerOperand(MI->getOperand(1), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: rt
      lowerOperand(MI->getOperand(2), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::PseudoDUDIV: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::DUDIV);
      // Operand: rs
      lowerOperand(MI->getOperand(1), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: rt
      lowerOperand(MI->getOperand(2), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::PseudoIndirectBranch: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::JR);
      // Operand: rs
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::PseudoIndirectBranch64: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::JR64);
      // Operand: rs
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::PseudoIndirectBranch64R6: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::JALR64);
      // Operand: rd
      TmpInst.addOperand(MCOperand::createReg(Mips::ZERO_64));
      // Operand: rs
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::PseudoIndirectBranchR6: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::JALR);
      // Operand: rd
      TmpInst.addOperand(MCOperand::createReg(Mips::ZERO));
      // Operand: rs
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::PseudoIndirectBranch_MM: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::JR_MM);
      // Operand: rs
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::PseudoIndirectBranch_MMR6: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::JRC16_MMR6);
      // Operand: rs
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::PseudoIndirectHazardBranch: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::JR_HB);
      // Operand: rs
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::PseudoIndirectHazardBranch64: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::JR_HB64);
      // Operand: rs
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::PseudoIndrectHazardBranch64R6: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::JR_HB64_R6);
      // Operand: rs
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::PseudoIndrectHazardBranchR6: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::JR_HB_R6);
      // Operand: rs
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::PseudoMADD: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::MADD);
      // Operand: rs
      lowerOperand(MI->getOperand(1), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: rt
      lowerOperand(MI->getOperand(2), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::PseudoMADDU: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::MADDU);
      // Operand: rs
      lowerOperand(MI->getOperand(1), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: rt
      lowerOperand(MI->getOperand(2), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::PseudoMSUB: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::MSUB);
      // Operand: rs
      lowerOperand(MI->getOperand(1), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: rt
      lowerOperand(MI->getOperand(2), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::PseudoMSUBU: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::MSUBU);
      // Operand: rs
      lowerOperand(MI->getOperand(1), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: rt
      lowerOperand(MI->getOperand(2), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::PseudoMULT: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::MULT);
      // Operand: rs
      lowerOperand(MI->getOperand(1), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: rt
      lowerOperand(MI->getOperand(2), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::PseudoMULTu: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::MULTu);
      // Operand: rs
      lowerOperand(MI->getOperand(1), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: rt
      lowerOperand(MI->getOperand(2), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::PseudoPICK_PH: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::PICK_PH);
      // Operand: rd
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: rs
      lowerOperand(MI->getOperand(2), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: rt
      lowerOperand(MI->getOperand(3), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::PseudoPICK_QB: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::PICK_QB);
      // Operand: rd
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: rs
      lowerOperand(MI->getOperand(2), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: rt
      lowerOperand(MI->getOperand(3), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::PseudoSDIV: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::SDIV);
      // Operand: rs
      lowerOperand(MI->getOperand(1), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: rt
      lowerOperand(MI->getOperand(2), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::PseudoUDIV: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::UDIV);
      // Operand: rs
      lowerOperand(MI->getOperand(1), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: rt
      lowerOperand(MI->getOperand(2), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::SDIV_MM_Pseudo: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::SDIV_MM);
      // Operand: rs
      lowerOperand(MI->getOperand(1), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: rt
      lowerOperand(MI->getOperand(2), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::TAILCALL: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::J);
      // Operand: target
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::TAILCALL64R6REG: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::JALR64);
      // Operand: rd
      TmpInst.addOperand(MCOperand::createReg(Mips::ZERO_64));
      // Operand: rs
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::TAILCALLHB64R6REG: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::JR_HB64_R6);
      // Operand: rs
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::TAILCALLHBR6REG: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::JR_HB_R6);
      // Operand: rs
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::TAILCALLR6REG: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::JALR);
      // Operand: rd
      TmpInst.addOperand(MCOperand::createReg(Mips::ZERO));
      // Operand: rs
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::TAILCALLREG: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::JR);
      // Operand: rs
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::TAILCALLREG64: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::JR64);
      // Operand: rs
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::TAILCALLREGHB: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::JR_HB);
      // Operand: rs
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::TAILCALLREGHB64: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::JR_HB64);
      // Operand: rs
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::TAILCALLREG_MM: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::JRC16_MM);
      // Operand: rs
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::TAILCALLREG_MMR6: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::JRC16_MM);
      // Operand: rs
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::TAILCALL_MM: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::J_MM);
      // Operand: target
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::TAILCALL_MMR6: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::BC_MMR6);
      // Operand: offset
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::TRAP: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::BREAK);
      // Operand: code_1
      TmpInst.addOperand(MCOperand::createImm(0));
      // Operand: code_2
      TmpInst.addOperand(MCOperand::createImm(0));
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::TRAP_MM: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::BREAK_MM);
      // Operand: code_1
      TmpInst.addOperand(MCOperand::createImm(0));
      // Operand: code_2
      TmpInst.addOperand(MCOperand::createImm(0));
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::UDIV_MM_Pseudo: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::UDIV_MM);
      // Operand: rs
      lowerOperand(MI->getOperand(1), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: rt
      lowerOperand(MI->getOperand(2), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::XOR_V_D_PSEUDO: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::XOR_V);
      // Operand: wd
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: ws
      lowerOperand(MI->getOperand(1), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: wt
      lowerOperand(MI->getOperand(2), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::XOR_V_H_PSEUDO: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::XOR_V);
      // Operand: wd
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: ws
      lowerOperand(MI->getOperand(1), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: wt
      lowerOperand(MI->getOperand(2), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
    case Mips::XOR_V_W_PSEUDO: {
      MCInst TmpInst;
      MCOperand MCOp;
      TmpInst.setOpcode(Mips::XOR_V);
      // Operand: wd
      lowerOperand(MI->getOperand(0), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: ws
      lowerOperand(MI->getOperand(1), MCOp);
      TmpInst.addOperand(MCOp);
      // Operand: wt
      lowerOperand(MI->getOperand(2), MCOp);
      TmpInst.addOperand(MCOp);
      EmitToStreamer(OutStreamer, TmpInst);
      break;
    }
  }
  return true;
}

