Lines Matching full:loongarch

1 // LoongArchAsmParser.cpp - Parse LoongArch assembly to MCInst instructions -=//
29 #define DEBUG_TYPE "loongarch-asm-parser"
34 bool is64Bit() const { return getSTI().hasFeature(LoongArch::Feature64Bit); } in is64Bit()
164 // Instances of this class represent a parsed LoongArch machine instruction.
197 LoongArchMCRegisterClasses[LoongArch::GPRRegClassID].contains( in isGPR()
606 assert(Reg >= LoongArch::F0 && Reg <= LoongArch::F31 && "Invalid register"); in convertFPR32ToFPR64()
607 return Reg - LoongArch::F0 + LoongArch::F0_64; in convertFPR32ToFPR64()
617 assert(!(RegNo >= LoongArch::F0_64 && RegNo <= LoongArch::F31_64)); in matchRegisterNameHelper()
619 static_assert(LoongArch::F0 < LoongArch::F0_64, in matchRegisterNameHelper()
621 if (RegNo == LoongArch::NoRegister) in matchRegisterNameHelper()
624 return RegNo == LoongArch::NoRegister; in matchRegisterNameHelper()
662 if (RegNo == LoongArch::NoRegister) in parseRegister()
838 case LoongArch::PCALAU12I: in emitLAInstSeq()
839 case LoongArch::LU12I_W: in emitLAInstSeq()
843 case LoongArch::ORI: in emitLAInstSeq()
844 case LoongArch::ADDI_W: in emitLAInstSeq()
845 case LoongArch::LD_W: in emitLAInstSeq()
846 case LoongArch::LD_D: { in emitLAInstSeq()
854 .addReg(LoongArch::R1) in emitLAInstSeq()
865 case LoongArch::LU32I_D: in emitLAInstSeq()
872 case LoongArch::LU52I_D: in emitLAInstSeq()
877 case LoongArch::ADDI_D: in emitLAInstSeq()
881 .addReg(DestReg == TmpReg ? TmpReg : LoongArch::R0) in emitLAInstSeq()
885 case LoongArch::ADD_D: in emitLAInstSeq()
886 case LoongArch::LDX_D: in emitLAInstSeq()
891 case LoongArch::JIRL: in emitLAInstSeq()
893 .addReg(LoongArch::R1) in emitLAInstSeq()
894 .addReg(LoongArch::R1) in emitLAInstSeq()
913 const MCExpr *Symbol = Inst.getOpcode() == LoongArch::PseudoLA_ABS in emitLoadAddressAbs()
919 LoongArch::LU12I_W, LoongArchMCExpr::VK_LoongArch_ABS_HI20)); in emitLoadAddressAbs()
921 LoongArch::ORI, LoongArchMCExpr::VK_LoongArch_ABS_LO12)); in emitLoadAddressAbs()
925 LoongArch::LU32I_D, LoongArchMCExpr::VK_LoongArch_ABS64_LO20)); in emitLoadAddressAbs()
927 LoongArch::LU52I_D, LoongArchMCExpr::VK_LoongArch_ABS64_HI12)); in emitLoadAddressAbs()
942 unsigned ADDI = is64Bit() ? LoongArch::ADDI_D : LoongArch::ADDI_W; in emitLoadAddressPcrel()
945 LoongArch::PCALAU12I, LoongArchMCExpr::VK_LoongArch_PCALA_HI20)); in emitLoadAddressPcrel()
967 LoongArch::PCALAU12I, LoongArchMCExpr::VK_LoongArch_PCALA_HI20)); in emitLoadAddressPcrelLarge()
969 LoongArch::ADDI_D, LoongArchMCExpr::VK_LoongArch_PCALA_LO12)); in emitLoadAddressPcrelLarge()
971 LoongArch::LU32I_D, LoongArchMCExpr::VK_LoongArch_PCALA64_LO20)); in emitLoadAddressPcrelLarge()
973 LoongArch::LU52I_D, LoongArchMCExpr::VK_LoongArch_PCALA64_HI12)); in emitLoadAddressPcrelLarge()
974 Insts.push_back(LoongArchAsmParser::Inst(LoongArch::ADD_D)); in emitLoadAddressPcrelLarge()
988 unsigned LD = is64Bit() ? LoongArch::LD_D : LoongArch::LD_W; in emitLoadAddressGot()
991 LoongArch::PCALAU12I, LoongArchMCExpr::VK_LoongArch_GOT_PC_HI20)); in emitLoadAddressGot()
1013 LoongArch::PCALAU12I, LoongArchMCExpr::VK_LoongArch_GOT_PC_HI20)); in emitLoadAddressGotLarge()
1015 LoongArch::ADDI_D, LoongArchMCExpr::VK_LoongArch_GOT_PC_LO12)); in emitLoadAddressGotLarge()
1017 LoongArch::LU32I_D, LoongArchMCExpr::VK_LoongArch_GOT64_PC_LO20)); in emitLoadAddressGotLarge()
1019 LoongArch::LU52I_D, LoongArchMCExpr::VK_LoongArch_GOT64_PC_HI12)); in emitLoadAddressGotLarge()
1020 Insts.push_back(LoongArchAsmParser::Inst(LoongArch::LDX_D)); in emitLoadAddressGotLarge()
1036 LoongArch::LU12I_W, LoongArchMCExpr::VK_LoongArch_TLS_LE_HI20)); in emitLoadAddressTLSLE()
1038 LoongArch::ORI, LoongArchMCExpr::VK_LoongArch_TLS_LE_LO12)); in emitLoadAddressTLSLE()
1052 unsigned LD = is64Bit() ? LoongArch::LD_D : LoongArch::LD_W; in emitLoadAddressTLSIE()
1055 LoongArch::PCALAU12I, LoongArchMCExpr::VK_LoongArch_TLS_IE_PC_HI20)); in emitLoadAddressTLSIE()
1077 LoongArch::PCALAU12I, LoongArchMCExpr::VK_LoongArch_TLS_IE_PC_HI20)); in emitLoadAddressTLSIELarge()
1079 LoongArch::ADDI_D, LoongArchMCExpr::VK_LoongArch_TLS_IE_PC_LO12)); in emitLoadAddressTLSIELarge()
1081 LoongArch::LU32I_D, LoongArchMCExpr::VK_LoongArch_TLS_IE64_PC_LO20)); in emitLoadAddressTLSIELarge()
1083 LoongArch::LU52I_D, LoongArchMCExpr::VK_LoongArch_TLS_IE64_PC_HI12)); in emitLoadAddressTLSIELarge()
1084 Insts.push_back(LoongArchAsmParser::Inst(LoongArch::LDX_D)); in emitLoadAddressTLSIELarge()
1098 unsigned ADDI = is64Bit() ? LoongArch::ADDI_D : LoongArch::ADDI_W; in emitLoadAddressTLSLD()
1101 LoongArch::PCALAU12I, LoongArchMCExpr::VK_LoongArch_TLS_LD_PC_HI20)); in emitLoadAddressTLSLD()
1123 LoongArch::PCALAU12I, LoongArchMCExpr::VK_LoongArch_TLS_LD_PC_HI20)); in emitLoadAddressTLSLDLarge()
1125 LoongArch::ADDI_D, LoongArchMCExpr::VK_LoongArch_GOT_PC_LO12)); in emitLoadAddressTLSLDLarge()
1127 LoongArch::LU32I_D, LoongArchMCExpr::VK_LoongArch_GOT64_PC_LO20)); in emitLoadAddressTLSLDLarge()
1129 LoongArch::LU52I_D, LoongArchMCExpr::VK_LoongArch_GOT64_PC_HI12)); in emitLoadAddressTLSLDLarge()
1130 Insts.push_back(LoongArchAsmParser::Inst(LoongArch::ADD_D)); in emitLoadAddressTLSLDLarge()
1144 unsigned ADDI = is64Bit() ? LoongArch::ADDI_D : LoongArch::ADDI_W; in emitLoadAddressTLSGD()
1147 LoongArch::PCALAU12I, LoongArchMCExpr::VK_LoongArch_TLS_GD_PC_HI20)); in emitLoadAddressTLSGD()
1169 LoongArch::PCALAU12I, LoongArchMCExpr::VK_LoongArch_TLS_GD_PC_HI20)); in emitLoadAddressTLSGDLarge()
1171 LoongArch::ADDI_D, LoongArchMCExpr::VK_LoongArch_GOT_PC_LO12)); in emitLoadAddressTLSGDLarge()
1173 LoongArch::LU32I_D, LoongArchMCExpr::VK_LoongArch_GOT64_PC_LO20)); in emitLoadAddressTLSGDLarge()
1175 LoongArch::LU52I_D, LoongArchMCExpr::VK_LoongArch_GOT64_PC_HI12)); in emitLoadAddressTLSGDLarge()
1176 Insts.push_back(LoongArchAsmParser::Inst(LoongArch::ADD_D)); in emitLoadAddressTLSGDLarge()
1198 const MCExpr *Symbol = Inst.getOpcode() == LoongArch::PseudoLA_TLS_DESC_ABS in emitLoadAddressTLSDescAbs()
1201 unsigned LD = is64Bit() ? LoongArch::LD_D : LoongArch::LD_W; in emitLoadAddressTLSDescAbs()
1205 LoongArch::LU12I_W, LoongArchMCExpr::VK_LoongArch_TLS_DESC_HI20)); in emitLoadAddressTLSDescAbs()
1207 LoongArch::ORI, LoongArchMCExpr::VK_LoongArch_TLS_DESC_LO12)); in emitLoadAddressTLSDescAbs()
1211 LoongArch::LU32I_D, LoongArchMCExpr::VK_LoongArch_TLS_DESC64_LO20)); in emitLoadAddressTLSDescAbs()
1213 LoongArch::LU52I_D, LoongArchMCExpr::VK_LoongArch_TLS_DESC64_HI12)); in emitLoadAddressTLSDescAbs()
1219 LoongArch::JIRL, LoongArchMCExpr::VK_LoongArch_TLS_DESC_CALL)); in emitLoadAddressTLSDescAbs()
1234 unsigned ADDI = is64Bit() ? LoongArch::ADDI_D : LoongArch::ADDI_W; in emitLoadAddressTLSDescPcrel()
1235 unsigned LD = is64Bit() ? LoongArch::LD_D : LoongArch::LD_W; in emitLoadAddressTLSDescPcrel()
1239 LoongArch::PCALAU12I, LoongArchMCExpr::VK_LoongArch_TLS_DESC_PC_HI20)); in emitLoadAddressTLSDescPcrel()
1245 LoongArch::JIRL, LoongArchMCExpr::VK_LoongArch_TLS_DESC_CALL)); in emitLoadAddressTLSDescPcrel()
1268 LoongArch::PCALAU12I, LoongArchMCExpr::VK_LoongArch_TLS_DESC_PC_HI20)); in emitLoadAddressTLSDescPcrelLarge()
1270 LoongArch::ADDI_D, LoongArchMCExpr::VK_LoongArch_TLS_DESC_PC_LO12)); in emitLoadAddressTLSDescPcrelLarge()
1272 LoongArch::LU32I_D, LoongArchMCExpr::VK_LoongArch_TLS_DESC64_PC_LO20)); in emitLoadAddressTLSDescPcrelLarge()
1274 LoongArch::LU52I_D, LoongArchMCExpr::VK_LoongArch_TLS_DESC64_PC_HI12)); in emitLoadAddressTLSDescPcrelLarge()
1275 Insts.push_back(LoongArchAsmParser::Inst(LoongArch::ADD_D)); in emitLoadAddressTLSDescPcrelLarge()
1277 LoongArch::LD_D, LoongArchMCExpr::VK_LoongArch_TLS_DESC_LD)); in emitLoadAddressTLSDescPcrelLarge()
1279 LoongArch::JIRL, LoongArchMCExpr::VK_LoongArch_TLS_DESC_CALL)); in emitLoadAddressTLSDescPcrelLarge()
1288 MCRegister SrcReg = LoongArch::R0; in emitLoadImm()
1290 if (Inst.getOpcode() == LoongArch::PseudoLI_W) in emitLoadImm()
1295 if (Opc == LoongArch::LU12I_W) in emitLoadImm()
1318 IsTailCall ? Inst.getOperand(0).getReg() : (unsigned)LoongArch::R1; in emitFuncCall36()
1325 MCInstBuilder(LoongArch::PCADDU18I).addReg(ScratchReg).addExpr(LE), in emitFuncCall36()
1328 MCInstBuilder(LoongArch::JIRL) in emitFuncCall36()
1329 .addReg(IsTailCall ? (unsigned)LoongArch::R0 : ScratchReg) in emitFuncCall36()
1342 case LoongArch::PseudoLA_ABS: in processInstruction()
1343 case LoongArch::PseudoLA_ABS_LARGE: in processInstruction()
1346 case LoongArch::PseudoLA_PCREL: in processInstruction()
1349 case LoongArch::PseudoLA_PCREL_LARGE: in processInstruction()
1352 case LoongArch::PseudoLA_GOT: in processInstruction()
1355 case LoongArch::PseudoLA_GOT_LARGE: in processInstruction()
1358 case LoongArch::PseudoLA_TLS_LE: in processInstruction()
1361 case LoongArch::PseudoLA_TLS_IE: in processInstruction()
1364 case LoongArch::PseudoLA_TLS_IE_LARGE: in processInstruction()
1367 case LoongArch::PseudoLA_TLS_LD: in processInstruction()
1370 case LoongArch::PseudoLA_TLS_LD_LARGE: in processInstruction()
1373 case LoongArch::PseudoLA_TLS_GD: in processInstruction()
1376 case LoongArch::PseudoLA_TLS_GD_LARGE: in processInstruction()
1379 case LoongArch::PseudoLA_TLS_DESC_ABS: in processInstruction()
1380 case LoongArch::PseudoLA_TLS_DESC_ABS_LARGE: in processInstruction()
1383 case LoongArch::PseudoLA_TLS_DESC_PC: in processInstruction()
1386 case LoongArch::PseudoLA_TLS_DESC_PC_LARGE: in processInstruction()
1389 case LoongArch::PseudoLI_W: in processInstruction()
1390 case LoongArch::PseudoLI_D: in processInstruction()
1393 case LoongArch::PseudoCALL36: in processInstruction()
1396 case LoongArch::PseudoTAIL36: in processInstruction()
1408 if (Opc >= LoongArch::AMADD_D && Opc <= LoongArch::AMXOR_W) { in checkTargetMatchPredicate()
1412 if ((Rd == Rk || Rd == Rj) && Rd != LoongArch::R0) in checkTargetMatchPredicate()
1416 case LoongArch::PseudoLA_TLS_DESC_ABS: in checkTargetMatchPredicate()
1417 case LoongArch::PseudoLA_TLS_DESC_ABS_LARGE: in checkTargetMatchPredicate()
1418 case LoongArch::PseudoLA_TLS_DESC_PC: in checkTargetMatchPredicate()
1419 case LoongArch::PseudoLA_TLS_DESC_PC_LARGE: { in checkTargetMatchPredicate()
1421 if (Rd != LoongArch::R4) in checkTargetMatchPredicate()
1425 case LoongArch::PseudoLA_PCREL_LARGE: in checkTargetMatchPredicate()
1426 case LoongArch::PseudoLA_GOT_LARGE: in checkTargetMatchPredicate()
1427 case LoongArch::PseudoLA_TLS_IE_LARGE: in checkTargetMatchPredicate()
1428 case LoongArch::PseudoLA_TLS_LD_LARGE: in checkTargetMatchPredicate()
1429 case LoongArch::PseudoLA_TLS_GD_LARGE: { in checkTargetMatchPredicate()
1436 case LoongArch::CSRXCHG: in checkTargetMatchPredicate()
1437 case LoongArch::GCSRXCHG: { in checkTargetMatchPredicate()
1439 if (Rj == LoongArch::R0 || Rj == LoongArch::R1) in checkTargetMatchPredicate()
1443 case LoongArch::BSTRINS_W: in checkTargetMatchPredicate()
1444 case LoongArch::BSTRINS_D: in checkTargetMatchPredicate()
1445 case LoongArch::BSTRPICK_W: in checkTargetMatchPredicate()
1446 case LoongArch::BSTRPICK_D: { in checkTargetMatchPredicate()
1449 (Opc == LoongArch::BSTRINS_W || Opc == LoongArch::BSTRINS_D) in checkTargetMatchPredicate()
1453 (Opc == LoongArch::BSTRINS_W || Opc == LoongArch::BSTRINS_D) in checkTargetMatchPredicate()
1475 if (LoongArchMCRegisterClasses[LoongArch::FPR32RegClassID].contains(Reg) && in validateTargetOperandClass()