17330f729Sjoerg//=- MipsScheduleGeneric.td - Generic Scheduling Definitions -*- tablegen -*-=// 27330f729Sjoerg// 37330f729Sjoerg// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 47330f729Sjoerg// See https://llvm.org/LICENSE.txt for license information. 57330f729Sjoerg// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 67330f729Sjoerg// 77330f729Sjoerg//===----------------------------------------------------------------------===// 87330f729Sjoerg// 97330f729Sjoerg// This file describes the interAptiv processor in a manner of speaking. It 107330f729Sjoerg// describes a hypothetical version of the in-order MIPS32R2 interAptiv with all 117330f729Sjoerg// branches of the MIPS ISAs, ASEs and ISA variants. The itinerary lists are 127330f729Sjoerg// broken down into per ISA lists, so that this file can be used to rapidly 137330f729Sjoerg// develop new schedule models. 147330f729Sjoerg// 157330f729Sjoerg//===----------------------------------------------------------------------===// 167330f729Sjoergdef MipsGenericModel : SchedMachineModel { 177330f729Sjoerg int IssueWidth = 1; 187330f729Sjoerg int MicroOpBufferSize = 0; 197330f729Sjoerg 207330f729Sjoerg // These figures assume an L1 hit. 217330f729Sjoerg int LoadLatency = 2; 227330f729Sjoerg int MispredictPenalty = 4; 237330f729Sjoerg 247330f729Sjoerg int HighLatency = 37; 257330f729Sjoerg list<Predicate> UnsupportedFeatures = []; 267330f729Sjoerg 277330f729Sjoerg let CompleteModel = 1; 287330f729Sjoerg let PostRAScheduler = 1; 297330f729Sjoerg 307330f729Sjoerg // FIXME: Remove when all errors have been fixed. 317330f729Sjoerg let FullInstRWOverlapCheck = 1; 327330f729Sjoerg} 337330f729Sjoerg 347330f729Sjoerglet SchedModel = MipsGenericModel in { 357330f729Sjoerg 367330f729Sjoerg// ALU Pipeline 377330f729Sjoerg// ============ 387330f729Sjoerg 397330f729Sjoergdef GenericALU : ProcResource<1> { let BufferSize = 1; } 407330f729Sjoergdef GenericIssueALU : ProcResource<1> { let Super = GenericALU; } 417330f729Sjoerg 427330f729Sjoergdef GenericWriteALU : SchedWriteRes<[GenericIssueALU]>; 437330f729Sjoerg 447330f729Sjoerg// add, addi, addiu, addu, and, andi, clo, clz, ext, ins, lui, nor, or, ori, 457330f729Sjoerg// rotr, rotrv, seb, seh, sll, sllv, slt, slti, sltiu, sltu, sra, srav, srl, 467330f729Sjoerg// srlv, ssnop, sub, subu, wsbh, xor, xori 477330f729Sjoergdef : InstRW<[GenericWriteALU], (instrs ADD, ADDi, ADDiu, ADDu, AND, ANDi, 487330f729Sjoerg CLO, CLZ, EXT, INS, LEA_ADDiu, LUi, NOP, 497330f729Sjoerg NOR, OR, ORi, ROTR, ROTRV, SEB, SEH, SLL, 507330f729Sjoerg SLLV, SLT, SLTi, SLTiu, SLTu, SRA, SRAV, SRL, 517330f729Sjoerg SRLV, SSNOP, SUB, SUBu, WSBH, XOR, XORi)>; 527330f729Sjoerg 537330f729Sjoergdef : InstRW<[GenericWriteALU], (instrs COPY)>; 547330f729Sjoerg 557330f729Sjoerg// MIPSR6 567330f729Sjoerg// ====== 577330f729Sjoerg 587330f729Sjoerg// addiupc, align, aluipc, aui, auipc, bitswap, clo, clz, lsa, seleqz, selnez 597330f729Sjoergdef : InstRW<[GenericWriteALU], (instrs ADDIUPC, ALIGN, ALUIPC, AUI, 607330f729Sjoerg AUIPC, BITSWAP, CLO_R6, CLZ_R6, LSA_R6, 617330f729Sjoerg SELEQZ, SELNEZ)>; 627330f729Sjoerg 637330f729Sjoerg// MIPS16e 647330f729Sjoerg// ======= 657330f729Sjoerg 667330f729Sjoergdef : InstRW<[GenericWriteALU], (instrs AddiuRxImmX16, AddiuRxRxImm16, 677330f729Sjoerg AddiuRxRxImmX16, AddiuRxRyOffMemX16, 687330f729Sjoerg AddiuRxPcImmX16, AddiuSpImm16, AddiuSpImmX16, 697330f729Sjoerg AdduRxRyRz16, AndRxRxRy16, CmpRxRy16, 707330f729Sjoerg CmpiRxImm16, CmpiRxImmX16, LiRxImm16, 717330f729Sjoerg LiRxImmX16, LiRxImmAlignX16, Move32R16, 727330f729Sjoerg MoveR3216, Mfhi16, Mflo16, NegRxRy16, 737330f729Sjoerg NotRxRy16, OrRxRxRy16, SebRx16, SehRx16, 747330f729Sjoerg SllX16, SllvRxRy16, SltiRxImm16, 757330f729Sjoerg SltiRxImmX16, SltiCCRxImmX16, 767330f729Sjoerg SltiuRxImm16, SltiuRxImmX16, SltiuCCRxImmX16, 777330f729Sjoerg SltRxRy16, SltCCRxRy16, SltuRxRy16, 787330f729Sjoerg SltuRxRyRz16, SltuCCRxRy16, SravRxRy16, 797330f729Sjoerg SraX16, SrlvRxRy16, SrlX16, SubuRxRyRz16, 807330f729Sjoerg XorRxRxRy16)>; 817330f729Sjoerg 827330f729Sjoergdef : InstRW<[GenericWriteALU], (instrs Constant32, LwConstant32, 837330f729Sjoerg GotPrologue16, CONSTPOOL_ENTRY)>; 847330f729Sjoerg 857330f729Sjoerg// microMIPS 867330f729Sjoerg// ========= 877330f729Sjoerg 887330f729Sjoergdef : InstRW<[GenericWriteALU], (instrs ADDIUPC_MM, ADDIUR1SP_MM, ADDIUR2_MM, 897330f729Sjoerg ADDIUS5_MM, ADDIUSP_MM, ADDU16_MM, ADD_MM, 907330f729Sjoerg ADDi_MM, ADDiu_MM, ADDu_MM, AND16_MM, 917330f729Sjoerg ANDI16_MM, AND_MM, ANDi_MM, CLO_MM, CLZ_MM, 927330f729Sjoerg EXT_MM, INS_MM, LEA_ADDiu_MM, LI16_MM, 937330f729Sjoerg LUi_MM, MOVE16_MM, MOVEP_MM, NOR_MM, 947330f729Sjoerg NOT16_MM, OR16_MM, OR_MM, ORi_MM, ROTRV_MM, 957330f729Sjoerg ROTR_MM, SEB_MM, SEH_MM, SLL16_MM, SLLV_MM, 967330f729Sjoerg SLL_MM, SLT_MM, SLTi_MM, SLTiu_MM, SLTu_MM, 977330f729Sjoerg SRAV_MM, SRA_MM, SRL16_MM, SRLV_MM, SRL_MM, 987330f729Sjoerg SSNOP_MM, SUBU16_MM, SUB_MM, SUBu_MM, 997330f729Sjoerg WSBH_MM, XOR16_MM, XOR_MM, XORi_MM)>; 1007330f729Sjoerg 1017330f729Sjoerg// microMIPS32r6 1027330f729Sjoerg// ============= 1037330f729Sjoerg 1047330f729Sjoergdef : InstRW<[GenericWriteALU], (instrs ADDIUPC_MMR6, ADDIU_MMR6, ADDU16_MMR6, 1057330f729Sjoerg ADDU_MMR6, ADD_MMR6, ALIGN_MMR6, ALUIPC_MMR6, 1067330f729Sjoerg AND16_MMR6, ANDI16_MMR6, ANDI_MMR6, AND_MMR6, 1077330f729Sjoerg AUIPC_MMR6, AUI_MMR6, BITSWAP_MMR6, CLO_MMR6, 1087330f729Sjoerg CLZ_MMR6, EXT_MMR6, INS_MMR6, LI16_MMR6, 1097330f729Sjoerg LSA_MMR6, LUI_MMR6, MOVE16_MMR6, NOR_MMR6, 1107330f729Sjoerg NOT16_MMR6, OR16_MMR6, ORI_MMR6, OR_MMR6, 1117330f729Sjoerg SELEQZ_MMR6, SELNEZ_MMR6, SLL16_MMR6, 1127330f729Sjoerg SLL_MMR6, SRL16_MMR6, SSNOP_MMR6, SUBU16_MMR6, 1137330f729Sjoerg SUBU_MMR6, SUB_MMR6, WSBH_MMR6, XOR16_MMR6, 1147330f729Sjoerg XORI_MMR6, XOR_MMR6)>; 1157330f729Sjoerg 1167330f729Sjoerg// MIPS64 1177330f729Sjoerg// ====== 1187330f729Sjoerg 1197330f729Sjoergdef : InstRW<[GenericWriteALU], (instrs AND64, ANDi64, DEXT64_32, DSLL64_32, 1207330f729Sjoerg ORi64, SEB64, SEH64, SLL64_32, SLL64_64, 1217330f729Sjoerg SLT64, SLTi64, SLTiu64, SLTu64, XOR64, 1227330f729Sjoerg XORi64)>; 1237330f729Sjoerg 1247330f729Sjoergdef : InstRW<[GenericWriteALU], (instrs DADD, DADDi, DADDiu, DADDu, DCLO, 1257330f729Sjoerg DCLZ, DEXT, DEXTM, DEXTU, DINS, DINSM, DINSU, 1267330f729Sjoerg DROTR, DROTR32, DROTRV, DSBH, DSHD, DSLL, 1277330f729Sjoerg DSLL32, DSLLV, DSRA, DSRA32, DSRAV, DSRL, 1287330f729Sjoerg DSRL32, DSRLV, DSUB, DSUBu, LEA_ADDiu64, 1297330f729Sjoerg LUi64, NOR64, OR64)>; 1307330f729Sjoerg 1317330f729Sjoerg// MIPS64R6 1327330f729Sjoerg// ======== 1337330f729Sjoerg 1347330f729Sjoergdef : InstRW<[GenericWriteALU], (instrs DALIGN, DAHI, DATI, DAUI, DCLO_R6, 1357330f729Sjoerg DCLZ_R6, DBITSWAP, DLSA, DLSA_R6, SELEQZ64, 1367330f729Sjoerg SELNEZ64)>; 1377330f729Sjoerg 1387330f729Sjoerg 1397330f729Sjoergdef GenericMDU : ProcResource<1> { let BufferSize = 1; } 1407330f729Sjoergdef GenericIssueMDU : ProcResource<1> { let Super = GenericALU; } 1417330f729Sjoergdef GenericIssueDIV : ProcResource<1> { let Super = GenericMDU; } 1427330f729Sjoergdef GenericWriteHILO : SchedWriteRes<[GenericIssueMDU]>; 1437330f729Sjoergdef GenericWriteALULong : SchedWriteRes<[GenericIssueALU]> { let Latency = 5; } 1447330f729Sjoergdef GenericWriteMove : SchedWriteRes<[GenericIssueALU]> { let Latency = 2; } 1457330f729Sjoergdef GenericWriteMul : SchedWriteRes<[GenericIssueMDU]> { let Latency = 4; } 1467330f729Sjoerg 1477330f729Sjoergdef : InstRW<[GenericWriteHILO], (instrs MADD, MADDU, MSUB, MSUBU)>; 1487330f729Sjoerg 1497330f729Sjoergdef : InstRW<[GenericWriteHILO], (instrs PseudoMADD_MM, PseudoMADDU_MM, 1507330f729Sjoerg PseudoMSUB_MM, PseudoMSUBU_MM, 1517330f729Sjoerg PseudoMULT_MM, PseudoMULTu_MM)>; 1527330f729Sjoerg 1537330f729Sjoergdef : InstRW<[GenericWriteHILO], (instrs PseudoMADD, PseudoMADDU, PseudoMSUB, 1547330f729Sjoerg PseudoMSUBU, PseudoMULT, PseudoMULTu)>; 1557330f729Sjoerg 1567330f729Sjoergdef GenericWriteMDUtoGPR : SchedWriteRes<[GenericIssueMDU]> { 1577330f729Sjoerg let Latency = 5; 1587330f729Sjoerg} 1597330f729Sjoerg 1607330f729Sjoergdef GenericWriteDIV : SchedWriteRes<[GenericIssueDIV]> { 1617330f729Sjoerg // Estimated worst case 1627330f729Sjoerg let Latency = 33; 1637330f729Sjoerg let ResourceCycles = [33]; 1647330f729Sjoerg} 1657330f729Sjoergdef GenericWriteDIVU : SchedWriteRes<[GenericIssueDIV]> { 1667330f729Sjoerg // Estimated worst case 1677330f729Sjoerg let Latency = 31; 1687330f729Sjoerg let ResourceCycles = [31]; 1697330f729Sjoerg} 1707330f729Sjoerg 1717330f729Sjoerg// mul 1727330f729Sjoergdef : InstRW<[GenericWriteMDUtoGPR], (instrs MUL)>; 1737330f729Sjoerg 1747330f729Sjoerg// mult, multu 1757330f729Sjoergdef : InstRW<[GenericWriteMul], (instrs MULT, MULTu)>; 1767330f729Sjoerg 1777330f729Sjoerg// div, sdiv 1787330f729Sjoergdef : InstRW<[GenericWriteDIV], (instrs PseudoSDIV, SDIV)>; 1797330f729Sjoerg 1807330f729Sjoergdef : InstRW<[GenericWriteDIVU], (instrs PseudoUDIV, UDIV)>; 1817330f729Sjoerg 1827330f729Sjoerg// mfhi, mflo, movn, mthi, mtlo, rdwhr 1837330f729Sjoergdef : InstRW<[GenericWriteALULong], (instrs MFHI, MFLO, PseudoMFHI, 1847330f729Sjoerg PseudoMFLO)>; 1857330f729Sjoerg 1867330f729Sjoergdef : InstRW<[GenericWriteALULong], (instrs PseudoMFHI_MM, PseudoMFLO_MM)>; 1877330f729Sjoerg 1887330f729Sjoergdef : InstRW<[GenericWriteMove], (instrs MTHI, MTLO, RDHWR, PseudoMTLOHI)>; 1897330f729Sjoergdef : InstRW<[GenericWriteMove], (instrs PseudoMTLOHI_MM)>; 1907330f729Sjoerg 1917330f729Sjoergdef : InstRW<[GenericWriteALU], (instrs MOVN_I_I, MOVZ_I_I)>; 1927330f729Sjoerg 1937330f729Sjoerg// MIPSR6 1947330f729Sjoerg// ====== 1957330f729Sjoerg 1967330f729Sjoerg// muh, muhu, mulu, mul 1977330f729Sjoergdef : InstRW<[GenericWriteMul], (instrs MUH, MUHU, MULU, MUL_R6)>; 1987330f729Sjoerg 1997330f729Sjoerg// divu, udiv 2007330f729Sjoergdef : InstRW<[GenericWriteDIV], (instrs MOD, MODU, DIV, DIVU)>; 2017330f729Sjoerg 2027330f729Sjoerg 2037330f729Sjoerg// MIPS16e 2047330f729Sjoerg// ======= 2057330f729Sjoerg 2067330f729Sjoergdef : InstRW<[GenericWriteHILO], (instrs MultRxRy16, MultuRxRy16, 2077330f729Sjoerg MultRxRyRz16, MultuRxRyRz16)>; 2087330f729Sjoerg 2097330f729Sjoergdef : InstRW<[GenericWriteDIV], (instrs DivRxRy16)>; 2107330f729Sjoerg 2117330f729Sjoergdef : InstRW<[GenericWriteDIVU], (instrs DivuRxRy16)>; 2127330f729Sjoerg 2137330f729Sjoerg// microMIPS 2147330f729Sjoerg// ========= 2157330f729Sjoerg 2167330f729Sjoergdef : InstRW<[GenericWriteMul], (instrs MULT_MM, MULTu_MM, MADD_MM, MADDU_MM, 2177330f729Sjoerg MSUB_MM, MSUBU_MM)>; 2187330f729Sjoerg 2197330f729Sjoergdef : InstRW<[GenericWriteALULong], (instrs MUL_MM)>; 2207330f729Sjoerg 2217330f729Sjoergdef : InstRW<[GenericWriteDIV], (instrs SDIV_MM, SDIV_MM_Pseudo)>; 2227330f729Sjoerg 2237330f729Sjoergdef : InstRW<[GenericWriteDIVU], (instrs UDIV_MM, UDIV_MM_Pseudo)>; 2247330f729Sjoerg 2257330f729Sjoergdef : InstRW<[GenericWriteMove], (instrs MFHI16_MM, MFLO16_MM, MOVF_I_MM, 2267330f729Sjoerg MOVT_I_MM, MFHI_MM, MFLO_MM, MTHI_MM, 2277330f729Sjoerg MTLO_MM)>; 2287330f729Sjoerg 2297330f729Sjoergdef : InstRW<[GenericWriteMove], (instrs RDHWR_MM)>; 2307330f729Sjoerg 2317330f729Sjoerg// microMIPS32r6 2327330f729Sjoerg// ============= 2337330f729Sjoerg 2347330f729Sjoergdef : InstRW<[GenericWriteMul], (instrs MUHU_MMR6, MUH_MMR6, MULU_MMR6, 2357330f729Sjoerg MUL_MMR6)>; 2367330f729Sjoerg 2377330f729Sjoergdef : InstRW<[GenericWriteDIV], (instrs MODU_MMR6, MOD_MMR6, DIVU_MMR6, 2387330f729Sjoerg DIV_MMR6)>; 2397330f729Sjoerg 2407330f729Sjoergdef : InstRW<[GenericWriteMove], (instrs RDHWR_MMR6)>; 2417330f729Sjoerg 2427330f729Sjoerg// MIPS64 2437330f729Sjoerg// ====== 2447330f729Sjoerg 2457330f729Sjoergdef : InstRW<[GenericWriteHILO], (instrs DMULU, DMULT, DMULTu, PseudoDMULT, 2467330f729Sjoerg PseudoDMULTu)>; 2477330f729Sjoerg 2487330f729Sjoergdef : InstRW<[GenericWriteDIV], (instrs DSDIV, PseudoDSDIV)>; 2497330f729Sjoerg 2507330f729Sjoergdef : InstRW<[GenericWriteDIVU], (instrs DUDIV, PseudoDUDIV)>; 2517330f729Sjoerg 2527330f729Sjoergdef : InstRW<[GenericWriteALULong], (instrs MFHI64, MFLO64, PseudoMFHI64, 2537330f729Sjoerg PseudoMFLO64, PseudoMTLOHI64)>; 2547330f729Sjoerg 2557330f729Sjoergdef : InstRW<[GenericWriteMove], (instrs MTHI64, MTLO64, RDHWR64)>; 2567330f729Sjoerg 2577330f729Sjoerg// mov[zn] 2587330f729Sjoergdef : InstRW<[GenericWriteALU], (instrs MOVN_I_I64, MOVN_I64_I, MOVN_I64_I64, 2597330f729Sjoerg MOVZ_I_I64, MOVZ_I64_I, MOVZ_I64_I64)>; 2607330f729Sjoerg 2617330f729Sjoerg 2627330f729Sjoerg// MIPS64R6 2637330f729Sjoerg// ======== 2647330f729Sjoerg 2657330f729Sjoergdef : InstRW<[GenericWriteMDUtoGPR], (instrs DMUH, DMUHU, DMUL_R6)>; 2667330f729Sjoerg 2677330f729Sjoergdef : InstRW<[GenericWriteDIV], (instrs DDIV, DMOD)>; 2687330f729Sjoerg 2697330f729Sjoergdef : InstRW<[GenericWriteDIVU], (instrs DDIVU, DMODU)>; 2707330f729Sjoerg 2717330f729Sjoerg// CTISTD Pipeline 2727330f729Sjoerg// --------------- 2737330f729Sjoerg 2747330f729Sjoergdef GenericIssueCTISTD : ProcResource<1> { let Super = GenericALU; } 2757330f729Sjoerg 2767330f729Sjoergdef GenericLDST : ProcResource<1> { let BufferSize = 1; } 2777330f729Sjoergdef GenericIssueLDST : ProcResource<1> { let Super = GenericLDST; } 2787330f729Sjoerg 2797330f729Sjoergdef GenericWriteJump : SchedWriteRes<[GenericIssueCTISTD]>; 2807330f729Sjoergdef GenericWriteJumpAndLink : SchedWriteRes<[GenericIssueCTISTD]> { 2817330f729Sjoerg let Latency = 2; 2827330f729Sjoerg} 2837330f729Sjoerg 2847330f729Sjoerg// b, beq, beql, bg[et]z, bl[et]z, bne, bnel, j, syscall, jal, bltzal, jalx, 2857330f729Sjoerg// jalr, jr.hb, jr, jalr.hb, jarlc, jialc 2867330f729Sjoergdef : InstRW<[GenericWriteJump], (instrs B, BAL, BAL_BR, BEQ, BNE, BGTZ, BGEZ, 2877330f729Sjoerg BLEZ, BLTZ, BLTZAL, J, JALX, JR, JR_HB, ERET, 2887330f729Sjoerg ERet, ERETNC, DERET)>; 2897330f729Sjoerg 2907330f729Sjoergdef : InstRW<[GenericWriteJump], (instrs BEQL, BNEL, BGEZL, BGTZL, BLEZL, 2917330f729Sjoerg BLTZL)>; 2927330f729Sjoerg 2937330f729Sjoergdef : InstRW<[GenericWriteJump], (instrs TAILCALL, TAILCALLREG, 2947330f729Sjoerg TAILCALLREGHB, PseudoIndirectBranch, 2957330f729Sjoerg PseudoIndirectHazardBranch, PseudoReturn, 2967330f729Sjoerg RetRA)>; 2977330f729Sjoerg 2987330f729Sjoergdef : InstRW<[GenericWriteJumpAndLink], (instrs BGEZAL, JAL, JALR, JALR_HB, 2997330f729Sjoerg JALRHBPseudo, JALRPseudo)>; 3007330f729Sjoerg 3017330f729Sjoergdef : InstRW<[GenericWriteJumpAndLink], (instrs BGEZALL, BLTZALL)>; 3027330f729Sjoerg 3037330f729Sjoergdef GenericWriteTrap : SchedWriteRes<[GenericIssueCTISTD]>; 3047330f729Sjoerg 3057330f729Sjoergdef : InstRW<[GenericWriteTrap], (instrs BREAK, SYSCALL, TEQ, TEQI, 3067330f729Sjoerg TGE, TGEI, TGEIU, TGEU, TNE, 3077330f729Sjoerg TNEI, TLT, TLTI, TLTU, TTLTIU, 3087330f729Sjoerg TRAP, SDBBP)>; 3097330f729Sjoerg 3107330f729Sjoerg// MIPSR6 3117330f729Sjoerg// ====== 3127330f729Sjoerg 3137330f729Sjoergdef : InstRW<[GenericWriteJumpAndLink], (instrs BALC, BEQZALC, BGEZALC, 3147330f729Sjoerg BGTZALC, BLEZALC, BLTZALC, 3157330f729Sjoerg BNEZALC, 3167330f729Sjoerg JIALC)>; 3177330f729Sjoerg 3187330f729Sjoergdef : InstRW<[GenericWriteJump], (instrs BC, BC2EQZ, BC2NEZ, BEQC, BEQZC, BGEC, 3197330f729Sjoerg BGEUC, BGEZC, BGTZC, BLEZC, BLTC, BLTUC, 3207330f729Sjoerg BLTZC, BNEC, BNEZC, BNVC, BOVC, JIC, JR_HB_R6, 3217330f729Sjoerg SIGRIE, PseudoIndirectBranchR6, 3227330f729Sjoerg PseudoIndrectHazardBranchR6)>; 3237330f729Sjoerg 3247330f729Sjoergdef : InstRW<[GenericWriteJump], (instrs TAILCALLR6REG, TAILCALLHBR6REG)>; 3257330f729Sjoerg 3267330f729Sjoergdef : InstRW<[GenericWriteTrap], (instrs SDBBP_R6)>; 3277330f729Sjoerg 3287330f729Sjoerg// MIPS16e 3297330f729Sjoerg// ======= 3307330f729Sjoerg 3317330f729Sjoergdef : InstRW<[GenericWriteJump], (instrs Bimm16, BimmX16, BeqzRxImm16, 3327330f729Sjoerg BeqzRxImmX16, BnezRxImm16, BnezRxImmX16, 3337330f729Sjoerg Bteqz16, BteqzX16, BteqzT8CmpX16, 3347330f729Sjoerg BteqzT8CmpiX16, BteqzT8SltX16, 3357330f729Sjoerg BteqzT8SltuX16, BteqzT8SltiX16, 3367330f729Sjoerg BteqzT8SltiuX16, Btnez16, BtnezX16, 3377330f729Sjoerg BtnezT8CmpX16, BtnezT8CmpiX16, 3387330f729Sjoerg BtnezT8SltX16, BtnezT8SltuX16, 3397330f729Sjoerg BtnezT8SltiX16, BtnezT8SltiuX16, JrRa16, 3407330f729Sjoerg JrcRa16, JrcRx16, RetRA16)>; 3417330f729Sjoerg 3427330f729Sjoergdef : InstRW<[GenericWriteJumpAndLink], (instrs Jal16, JalB16, JumpLinkReg16)>; 3437330f729Sjoerg 3447330f729Sjoergdef : InstRW<[GenericWriteTrap], (instrs Break16)>; 3457330f729Sjoerg 3467330f729Sjoergdef : InstRW<[GenericWriteALULong], (instrs SelBeqZ, SelTBteqZCmp, 3477330f729Sjoerg SelTBteqZCmpi, SelTBteqZSlt, 3487330f729Sjoerg SelTBteqZSlti, SelTBteqZSltu, 3497330f729Sjoerg SelTBteqZSltiu, SelBneZ, SelTBtneZCmp, 3507330f729Sjoerg SelTBtneZCmpi, SelTBtneZSlt, 3517330f729Sjoerg SelTBtneZSlti, SelTBtneZSltu, 3527330f729Sjoerg SelTBtneZSltiu)>; 3537330f729Sjoerg 3547330f729Sjoerg// microMIPS 3557330f729Sjoerg// ========= 3567330f729Sjoerg 3577330f729Sjoergdef : InstRW<[GenericWriteJump], (instrs B16_MM, BAL_BR_MM, BC1F_MM, BC1T_MM, 3587330f729Sjoerg BEQZ16_MM, BEQZC_MM, BEQ_MM, BGEZ_MM, 3597330f729Sjoerg BGTZ_MM, BLEZ_MM, BLTZ_MM, BNEZ16_MM, 3607330f729Sjoerg BNEZC_MM, BNE_MM, B_MM, DERET_MM, ERET_MM, 3617330f729Sjoerg JR16_MM, JR_MM, J_MM, B_MM_Pseudo)>; 3627330f729Sjoerg 3637330f729Sjoergdef : InstRW<[GenericWriteJumpAndLink], (instrs BGEZALS_MM, BGEZAL_MM, 3647330f729Sjoerg BLTZALS_MM, BLTZAL_MM, JALR16_MM, 3657330f729Sjoerg JALRS16_MM, JALRS_MM, JALR_MM, 3667330f729Sjoerg JALS_MM, JALX_MM, JAL_MM)>; 3677330f729Sjoerg 3687330f729Sjoergdef : InstRW<[GenericWriteJump], (instrs TAILCALLREG_MM, TAILCALL_MM, 3697330f729Sjoerg PseudoIndirectBranch_MM)>; 3707330f729Sjoerg 3717330f729Sjoergdef : InstRW<[GenericWriteTrap], (instrs BREAK16_MM, BREAK_MM, SDBBP16_MM, 3727330f729Sjoerg SDBBP_MM, SYSCALL_MM, TEQI_MM, TEQ_MM, 3737330f729Sjoerg TGEIU_MM, TGEI_MM, TGEU_MM, TGE_MM, TLTIU_MM, 3747330f729Sjoerg TLTI_MM, TLTU_MM, TLT_MM, TNEI_MM, TNE_MM, 3757330f729Sjoerg TRAP_MM)>; 3767330f729Sjoerg 3777330f729Sjoerg// microMIPS32r6 3787330f729Sjoerg// ============= 3797330f729Sjoerg 3807330f729Sjoergdef : InstRW<[GenericWriteJump], (instrs BC16_MMR6, BC1EQZC_MMR6, BC1NEZC_MMR6, 3817330f729Sjoerg BC2EQZC_MMR6, BC2NEZC_MMR6, BC_MMR6, 3827330f729Sjoerg BEQC_MMR6, BEQZC16_MMR6, BEQZC_MMR6, 3837330f729Sjoerg BGEC_MMR6, BGEUC_MMR6, BGEZC_MMR6, 3847330f729Sjoerg BGTZC_MMR6, BLEZC_MMR6, BLTC_MMR6, 3857330f729Sjoerg BLTUC_MMR6, BLTZC_MMR6, BNEC_MMR6, 3867330f729Sjoerg BNEZC16_MMR6, BNEZC_MMR6, BNVC_MMR6, 3877330f729Sjoerg BOVC_MMR6, DERET_MMR6, ERETNC_MMR6, JAL_MMR6, 3887330f729Sjoerg ERET_MMR6, JIC_MMR6, JRADDIUSP, JRC16_MM, 3897330f729Sjoerg JRC16_MMR6, JRCADDIUSP_MMR6, SIGRIE_MMR6, 3907330f729Sjoerg B_MMR6_Pseudo, PseudoIndirectBranch_MMR6)>; 3917330f729Sjoerg 3927330f729Sjoergdef : InstRW<[GenericWriteJumpAndLink], (instrs BALC_MMR6, BEQZALC_MMR6, 3937330f729Sjoerg BGEZALC_MMR6, BGTZALC_MMR6, 3947330f729Sjoerg BLEZALC_MMR6, BLTZALC_MMR6, 3957330f729Sjoerg BNEZALC_MMR6, JALRC16_MMR6, 3967330f729Sjoerg JALRC_HB_MMR6, JALRC_MMR6, 3977330f729Sjoerg JIALC_MMR6)>; 3987330f729Sjoerg 3997330f729Sjoergdef : InstRW<[GenericWriteJump], (instrs TAILCALLREG_MMR6, TAILCALL_MMR6)>; 4007330f729Sjoerg 4017330f729Sjoergdef : InstRW<[GenericWriteTrap], (instrs BREAK16_MMR6, BREAK_MMR6, SDBBP_MMR6, 4027330f729Sjoerg SDBBP16_MMR6)>; 4037330f729Sjoerg 4047330f729Sjoerg// MIPS64 4057330f729Sjoerg// ====== 4067330f729Sjoerg 4077330f729Sjoergdef : InstRW<[GenericWriteJump], (instrs BEQ64, BGEZ64, BGTZ64, BLEZ64, 4087330f729Sjoerg BLTZ64, BNE64, JR64)>; 4097330f729Sjoerg 4107330f729Sjoergdef : InstRW<[GenericWriteJumpAndLink], (instrs JALR64, JALR64Pseudo, 4117330f729Sjoerg JALRHB64Pseudo, JALR_HB64)>; 4127330f729Sjoerg 4137330f729Sjoergdef : InstRW<[GenericWriteJump], (instrs JR_HB64, TAILCALLREG64, 4147330f729Sjoerg TAILCALLREGHB64, PseudoReturn64)>; 4157330f729Sjoerg 4167330f729Sjoerg// MIPS64R6 4177330f729Sjoerg// ======== 4187330f729Sjoerg 4197330f729Sjoergdef : InstRW<[GenericWriteJump], (instrs BEQC64, BEQZC64, BGEC64, BGEUC64, 4207330f729Sjoerg BGEZC64, BGTZC64, BLEZC64, BLTC64, BLTUC64, 4217330f729Sjoerg BLTZC64, BNEC64, BNEZC64, JIC64, 4227330f729Sjoerg PseudoIndirectBranch64, 4237330f729Sjoerg PseudoIndirectHazardBranch64)>; 4247330f729Sjoerg 4257330f729Sjoergdef : InstRW<[GenericWriteJumpAndLink], (instrs JIALC64)>; 4267330f729Sjoerg 4277330f729Sjoergdef : InstRW<[GenericWriteJump], (instrs JR_HB64_R6, TAILCALL64R6REG, 4287330f729Sjoerg TAILCALLHB64R6REG, PseudoIndirectBranch64R6, 4297330f729Sjoerg PseudoIndrectHazardBranch64R6)>; 4307330f729Sjoerg 4317330f729Sjoerg// COP0 Pipeline 4327330f729Sjoerg// ============= 4337330f729Sjoerg 4347330f729Sjoergdef GenericCOP0 : ProcResource<1> { let BufferSize = 1; } 4357330f729Sjoerg 4367330f729Sjoergdef GenericIssueCOP0 : ProcResource<1> { let Super = GenericCOP0; } 4377330f729Sjoergdef GenericWriteCOP0TLB : SchedWriteRes<[GenericIssueCOP0]> { let Latency = 4; } 4387330f729Sjoergdef GenericWriteCOP0 : SchedWriteRes<[GenericIssueCOP0]> { let Latency = 3; } 4397330f729Sjoergdef GenericReadCOP0 : SchedWriteRes<[GenericIssueCOP0]> { let Latency = 2; } 4407330f729Sjoergdef GenericReadWritePGPR : SchedWriteRes<[GenericIssueCOP0]>; 4417330f729Sjoergdef GenericReadWriteCOP0Long : SchedWriteRes<[GenericIssueCOP0]> { 4427330f729Sjoerg let Latency = 5; 4437330f729Sjoerg} 4447330f729Sjoergdef GenericWriteCOP0Short : SchedWriteRes<[GenericIssueCOP0]>; 4457330f729Sjoerg 4467330f729Sjoergdef : InstRW<[GenericWriteCOP0TLB], (instrs TLBP, TLBR, TLBWI, TLBWR)>; 4477330f729Sjoergdef : InstRW<[GenericWriteCOP0TLB], (instrs TLBINV, TLBINVF)>; 4487330f729Sjoerg 4497330f729Sjoergdef : InstRW<[GenericReadCOP0], (instrs MFC0)>; 4507330f729Sjoergdef : InstRW<[GenericWriteCOP0], (instrs MTC0)>; 4517330f729Sjoerg 4527330f729Sjoergdef : InstRW<[GenericWriteCOP0], (instrs EVP, DVP)>; 4537330f729Sjoerg 4547330f729Sjoergdef : InstRW<[GenericWriteCOP0], (instrs DI, EI)>; 4557330f729Sjoerg 4567330f729Sjoergdef : InstRW<[GenericWriteCOP0], (instrs EHB, PAUSE, WAIT)>; 4577330f729Sjoerg 4587330f729Sjoerg// microMIPS 4597330f729Sjoerg// ========= 4607330f729Sjoerg 4617330f729Sjoergdef : InstRW<[GenericWriteCOP0TLB], (instrs TLBP_MM, TLBR_MM, TLBWI_MM, 4627330f729Sjoerg TLBWR_MM)>; 4637330f729Sjoerg 4647330f729Sjoergdef : InstRW<[GenericWriteCOP0], (instrs DI_MM, EI_MM)>; 4657330f729Sjoerg 4667330f729Sjoergdef : InstRW<[GenericWriteCOP0], (instrs EHB_MM, PAUSE_MM, WAIT_MM)>; 4677330f729Sjoerg 4687330f729Sjoerg 4697330f729Sjoerg// microMIPS32R6 4707330f729Sjoerg// ============= 4717330f729Sjoerg 4727330f729Sjoergdef : InstRW<[GenericWriteCOP0], (instrs RDPGPR_MMR6, WRPGPR_MMR6)>; 4737330f729Sjoerg 4747330f729Sjoergdef : InstRW<[GenericWriteCOP0TLB], (instrs TLBINV_MMR6, TLBINVF_MMR6)>; 4757330f729Sjoerg 4767330f729Sjoergdef : InstRW<[GenericReadCOP0], (instrs MFHC0_MMR6, MFC0_MMR6, MFHC2_MMR6, 4777330f729Sjoerg MFC2_MMR6)>; 4787330f729Sjoerg 4797330f729Sjoergdef : InstRW<[GenericWriteCOP0], (instrs MTHC0_MMR6, MTC0_MMR6, MTHC2_MMR6, 4807330f729Sjoerg MTC2_MMR6)>; 4817330f729Sjoerg 4827330f729Sjoergdef : InstRW<[GenericWriteCOP0], (instrs EVP_MMR6, DVP_MMR6)>; 4837330f729Sjoerg 4847330f729Sjoergdef : InstRW<[GenericWriteCOP0], (instrs DI_MMR6, EI_MMR6)>; 4857330f729Sjoerg 4867330f729Sjoergdef : InstRW<[GenericWriteCOP0], (instrs EHB_MMR6, PAUSE_MMR6, WAIT_MMR6)>; 4877330f729Sjoerg 4887330f729Sjoerg// MIPS64 4897330f729Sjoerg// ====== 4907330f729Sjoerg 4917330f729Sjoergdef : InstRW<[GenericReadCOP0], (instrs DMFC0)>; 4927330f729Sjoerg 4937330f729Sjoergdef : InstRW<[GenericWriteCOP0], (instrs DMTC0)>; 4947330f729Sjoerg 4957330f729Sjoerg 4967330f729Sjoergdef GenericCOP2 : ProcResource<1> { let BufferSize = 1; } 4977330f729Sjoergdef GenericWriteCOPOther : SchedWriteRes<[GenericCOP2]>; 4987330f729Sjoerg 4997330f729Sjoergdef : InstRW<[GenericWriteCOPOther], (instrs MFC2, MTC2)>; 5007330f729Sjoerg 5017330f729Sjoergdef : InstRW<[GenericWriteCOPOther], (instrs DMFC2, DMTC2)>; 5027330f729Sjoerg 5037330f729Sjoerg// microMIPS32R6 5047330f729Sjoerg// ============= 5057330f729Sjoerg 5067330f729Sjoerg// The latency and repeat rate of these instructions are implementation 5077330f729Sjoerg// dependant. 5087330f729Sjoergdef : InstRW<[GenericWriteMove], (instrs CFC2_MM, CTC2_MM)>; 5097330f729Sjoerg 5107330f729Sjoerg 5117330f729Sjoerg// MIPS MT ASE - hasMT 5127330f729Sjoerg// ==================== 5137330f729Sjoerg 5147330f729Sjoergdef : InstRW<[GenericWriteMove], (instrs DMT, DVPE, EMT, EVPE, MFTR, 5157330f729Sjoerg MTTR)>; 5167330f729Sjoerg 5177330f729Sjoergdef : InstRW<[GenericReadWriteCOP0Long], (instrs YIELD)>; 5187330f729Sjoerg 5197330f729Sjoergdef : InstRW<[GenericWriteCOP0Short], (instrs FORK)>; 5207330f729Sjoerg 5217330f729Sjoerg// MIPS Virtualization ASE 5227330f729Sjoerg// ======================= 5237330f729Sjoerg 5247330f729Sjoergdef : InstRW<[GenericWriteCOP0Short], (instrs HYPCALL, TLBGINV, TLBGINVF, TLBGP, 5257330f729Sjoerg TLBGR, TLBGWI, TLBGWR, MFGC0, MFHGC0, 5267330f729Sjoerg MTGC0, MTHGC0)>; 5277330f729Sjoerg 5287330f729Sjoerg// MIPS64 Virtualization ASE 5297330f729Sjoerg// ========================= 5307330f729Sjoerg 5317330f729Sjoergdef : InstRW<[GenericWriteCOP0Short], (instrs DMFGC0, DMTGC0)>; 5327330f729Sjoerg 5337330f729Sjoerg// microMIPS virtualization ASE 5347330f729Sjoerg// ============================ 5357330f729Sjoerg 5367330f729Sjoergdef : InstRW<[GenericWriteCOP0Short], (instrs HYPCALL_MM, TLBGINVF_MM, 5377330f729Sjoerg TLBGINV_MM, TLBGP_MM, TLBGR_MM, 5387330f729Sjoerg TLBGWI_MM, TLBGWR_MM, MFGC0_MM, 5397330f729Sjoerg MFHGC0_MM, MTGC0_MM, MTHGC0_MM)>; 5407330f729Sjoerg 5417330f729Sjoerg// LDST Pipeline 5427330f729Sjoerg// ------------- 5437330f729Sjoerg 5447330f729Sjoergdef GenericWriteLoad : SchedWriteRes<[GenericIssueLDST]> { 5457330f729Sjoerg let Latency = 2; 5467330f729Sjoerg} 5477330f729Sjoerg 5487330f729Sjoergdef GenericWritePref : SchedWriteRes<[GenericIssueLDST]>; 5497330f729Sjoergdef GenericWriteSync : SchedWriteRes<[GenericIssueLDST]>; 5507330f729Sjoergdef GenericWriteCache : SchedWriteRes<[GenericIssueLDST]> { let Latency = 5; } 5517330f729Sjoerg 5527330f729Sjoergdef GenericWriteStore : SchedWriteRes<[GenericIssueLDST]>; 5537330f729Sjoergdef GenericWriteStoreSC : SchedWriteRes<[GenericIssueLDST]> { let Latency = 2; } 5547330f729Sjoerg 5557330f729Sjoergdef GenericWriteGPRFromBypass : SchedWriteRes<[GenericIssueLDST]> { 5567330f729Sjoerg let Latency = 2; 5577330f729Sjoerg} 5587330f729Sjoerg 5597330f729Sjoergdef GenericWriteStoreFromOtherUnits : SchedWriteRes<[GenericIssueLDST]>; 5607330f729Sjoergdef GenericWriteLoadToOtherUnits : SchedWriteRes<[GenericIssueLDST]> { 5617330f729Sjoerg let Latency = 0; 5627330f729Sjoerg} 5637330f729Sjoerg 5647330f729Sjoerg// l[bhw], l[bh]u, ll 5657330f729Sjoergdef : InstRW<[GenericWriteLoad], (instrs LB, LBu, LH, LHu, LW, LL, 5667330f729Sjoerg LWC2, LWC3, LDC2, LDC3)>; 5677330f729Sjoerg 5687330f729Sjoerg// lw[lr] 5697330f729Sjoergdef : InstRW<[GenericWriteLoad], (instrs LWL, LWR)>; 5707330f729Sjoerg 5717330f729Sjoerg// s[bhw], sc, s[dw]c[23] 5727330f729Sjoergdef : InstRW<[GenericWriteStore], (instrs SB, SH, SW, SWC2, SWC3, 5737330f729Sjoerg SDC2, SDC3)>; 5747330f729Sjoerg 5757330f729Sjoerg// PreMIPSR6 sw[lr] 5767330f729Sjoergdef : InstRW<[GenericWriteStore], (instrs SWL, SWR)>; 5777330f729Sjoerg 5787330f729Sjoergdef : InstRW<[GenericWriteStoreSC], (instrs SC, SC_MMR6)>; 5797330f729Sjoerg 5807330f729Sjoerg// pref 5817330f729Sjoergdef : InstRW<[GenericWritePref], (instrs PREF)>; 5827330f729Sjoerg// cache 5837330f729Sjoergdef : InstRW<[GenericWriteCache], (instrs CACHE)>; 5847330f729Sjoerg 5857330f729Sjoerg// sync 5867330f729Sjoergdef : InstRW<[GenericWriteSync], (instrs SYNC, SYNCI)>; 5877330f729Sjoerg 5887330f729Sjoerg// MIPSR6 5897330f729Sjoerg// ====== 5907330f729Sjoerg 5917330f729Sjoergdef : InstRW<[GenericWriteLoad], (instrs LDC2_R6, LL_R6, LWC2_R6, LWPC)>; 5927330f729Sjoerg 5937330f729Sjoergdef : InstRW<[GenericWriteStore], (instrs SWC2_R6, SDC2_R6)>; 5947330f729Sjoerg 5957330f729Sjoergdef : InstRW<[GenericWriteStoreSC], (instrs SC_R6)>; 5967330f729Sjoerg 5977330f729Sjoergdef : InstRW<[GenericWritePref], (instrs PREF_R6)>; 5987330f729Sjoerg 5997330f729Sjoergdef : InstRW<[GenericWriteCache], (instrs CACHE_R6)>; 6007330f729Sjoerg 6017330f729Sjoergdef : InstRW<[GenericWriteSync], (instrs GINVI, GINVT)>; 6027330f729Sjoerg 6037330f729Sjoerg// MIPS32 EVA 6047330f729Sjoerg// ========== 6057330f729Sjoerg 6067330f729Sjoergdef : InstRW<[GenericWriteLoad], (instrs LBE, LBuE, LHE, LHuE, LWE, 6077330f729Sjoerg LLE)>; 6087330f729Sjoerg 6097330f729Sjoergdef : InstRW<[GenericWriteStore], (instrs SBE, SHE, SWE, SCE)>; 6107330f729Sjoerg 6117330f729Sjoergdef : InstRW<[GenericWriteLoad], (instrs LWLE, LWRE)>; 6127330f729Sjoerg 6137330f729Sjoergdef : InstRW<[GenericWriteStore], (instrs SWLE, SWRE)>; 6147330f729Sjoerg 6157330f729Sjoergdef : InstRW<[GenericWritePref], (instrs PREFE)>; 6167330f729Sjoerg 6177330f729Sjoergdef : InstRW<[GenericWriteCache], (instrs CACHEE)>; 6187330f729Sjoerg 6197330f729Sjoerg// microMIPS EVA ASE - InMicroMipsMode, hasEVA 6207330f729Sjoerg// =========================================== 6217330f729Sjoerg 6227330f729Sjoergdef : InstRW<[GenericWriteLoad], (instrs LBE_MM, LBuE_MM, LHE_MM, LHuE_MM, 6237330f729Sjoerg LWE_MM, LWLE_MM, LWRE_MM, LLE_MM)>; 6247330f729Sjoerg 6257330f729Sjoergdef : InstRW<[GenericWriteStore], (instrs SBE_MM, SB_MM, SHE_MM, SWE_MM, 6267330f729Sjoerg SWLE_MM, SWRE_MM, SCE_MM)>; 6277330f729Sjoerg 6287330f729Sjoergdef : InstRW<[GenericWritePref], (instrs PREFE_MM)>; 6297330f729Sjoergdef : InstRW<[GenericWriteCache], (instrs CACHEE_MM)>; 6307330f729Sjoerg 6317330f729Sjoerg 6327330f729Sjoerg// MIPS16e 6337330f729Sjoerg// ======= 6347330f729Sjoerg 6357330f729Sjoergdef : InstRW<[GenericWriteLoad], (instrs Restore16, RestoreX16, 6367330f729Sjoerg LbRxRyOffMemX16, 6377330f729Sjoerg LbuRxRyOffMemX16, LhRxRyOffMemX16, 6387330f729Sjoerg LhuRxRyOffMemX16, LwRxRyOffMemX16, 6397330f729Sjoerg LwRxSpImmX16, LwRxPcTcp16, LwRxPcTcpX16)>; 6407330f729Sjoerg 6417330f729Sjoergdef : InstRW<[GenericWriteStore], (instrs Save16, SaveX16, SbRxRyOffMemX16, 6427330f729Sjoerg ShRxRyOffMemX16, SwRxRyOffMemX16, 6437330f729Sjoerg SwRxSpImmX16)>; 6447330f729Sjoerg 6457330f729Sjoerg// microMIPS 6467330f729Sjoerg// ========= 6477330f729Sjoerg 6487330f729Sjoergdef : InstRW<[GenericWriteLoad], (instrs LBU16_MM, LB_MM, LBu_MM, LHU16_MM, 6497330f729Sjoerg LH_MM, LHu_MM, LL_MM, LW16_MM, LWGP_MM, 6507330f729Sjoerg LWL_MM, LWM16_MM, LWM32_MM, LWP_MM, LWR_MM, 6517330f729Sjoerg LWSP_MM, LWU_MM, LWXS_MM, LW_MM)>; 6527330f729Sjoerg 6537330f729Sjoergdef : InstRW<[GenericWriteStore], (instrs SB16_MM, SC_MM, SH16_MM, SH_MM, 6547330f729Sjoerg SW16_MM, SWL_MM, SWM16_MM, SWM32_MM, SWM_MM, 6557330f729Sjoerg SWP_MM, SWR_MM, SWSP_MM, SW_MM)>; 6567330f729Sjoerg 6577330f729Sjoerg 6587330f729Sjoergdef : InstRW<[GenericWritePref], (instrs PREF_MM, PREFX_MM)>; 6597330f729Sjoerg 6607330f729Sjoergdef : InstRW<[GenericWriteCache], (instrs CACHE_MM)>; 6617330f729Sjoerg 6627330f729Sjoergdef : InstRW<[GenericWriteSync], (instrs SYNC_MM, SYNCI_MM)>; 6637330f729Sjoergdef : InstRW<[GenericWriteSync], (instrs GINVI_MMR6, GINVT_MMR6)>; 6647330f729Sjoerg 6657330f729Sjoerg// microMIPS32r6 6667330f729Sjoerg// ============= 6677330f729Sjoerg 6687330f729Sjoergdef : InstRW<[GenericWriteLoad], (instrs LBU_MMR6, LB_MMR6, LDC2_MMR6, LL_MMR6, 6697330f729Sjoerg LWM16_MMR6, LWC2_MMR6, LWPC_MMR6, LW_MMR6)>; 6707330f729Sjoerg 6717330f729Sjoergdef : InstRW<[GenericWriteStore], (instrs SB16_MMR6, SB_MMR6, SDC2_MMR6, 6727330f729Sjoerg SH16_MMR6, SH_MMR6, SW16_MMR6, SWC2_MMR6, 6737330f729Sjoerg SWM16_MMR6, SWSP_MMR6, SW_MMR6)>; 6747330f729Sjoerg 6757330f729Sjoergdef : InstRW<[GenericWriteSync], (instrs SYNC_MMR6, SYNCI_MMR6)>; 6767330f729Sjoerg 6777330f729Sjoergdef : InstRW<[GenericWritePref], (instrs PREF_MMR6)>; 6787330f729Sjoerg 6797330f729Sjoergdef : InstRW<[GenericWriteCache], (instrs CACHE_MMR6)>; 6807330f729Sjoerg 6817330f729Sjoerg// MIPS64 6827330f729Sjoerg// ====== 6837330f729Sjoerg 6847330f729Sjoergdef : InstRW<[GenericWriteLoad], (instrs LD, LL64, LLD, LWu, LB64, LBu64, 6857330f729Sjoerg LH64, LHu64, LW64)>; 6867330f729Sjoerg 6877330f729Sjoerg// l[dw][lr] 6887330f729Sjoergdef : InstRW<[GenericWriteLoad], (instrs LWL64, LWR64, LDL, LDR)>; 6897330f729Sjoerg 6907330f729Sjoergdef : InstRW<[GenericWriteStore], (instrs SD, SC64, SCD, SB64, SH64, SW64, 6917330f729Sjoerg SWL64, SWR64)>; 6927330f729Sjoerg 6937330f729Sjoergdef : InstRW<[GenericWriteStore], (instrs SDL, SDR)>; 6947330f729Sjoerg 6957330f729Sjoerg// MIPS64R6 6967330f729Sjoerg// ======== 6977330f729Sjoerg 6987330f729Sjoergdef : InstRW<[GenericWriteLoad], (instrs LWUPC, LDPC)>; 6997330f729Sjoerg 7007330f729Sjoergdef : InstRW<[GenericWriteLoad], (instrs LLD_R6, LL64_R6)>; 7017330f729Sjoerg 7027330f729Sjoergdef : InstRW<[GenericWriteStoreSC], (instrs SC64_R6, SCD_R6)>; 7037330f729Sjoerg 7047330f729Sjoerg// MIPSR6 CRC ASE - hasCRC 7057330f729Sjoerg// ======================= 7067330f729Sjoerg 7077330f729Sjoergdef : InstRW<[GenericWriteALU], (instrs CRC32B, CRC32H, CRC32W, CRC32CB, 7087330f729Sjoerg CRC32CH, CRC32CW)>; 7097330f729Sjoerg 7107330f729Sjoerg// MIPS64R6 CRC ASE - hasCRC 7117330f729Sjoerg// ------------------------- 7127330f729Sjoerg 7137330f729Sjoergdef : InstRW<[GenericWriteALU], (instrs CRC32D, CRC32CD)>; 7147330f729Sjoerg 7157330f729Sjoerg 7167330f729Sjoerg// Cavium Networks MIPS (cnMIPS) - Octeon, HasCnMips 7177330f729Sjoerg// ================================================= 7187330f729Sjoerg 7197330f729Sjoergdef : InstRW<[GenericWriteALU], (instrs BADDu, BBIT0, BBIT032, BBIT1, BBIT132, 7207330f729Sjoerg CINS, CINS32, CINS64_32, CINS_i32, 7217330f729Sjoerg DMFC2_OCTEON, DMTC2_OCTEON, DPOP, EXTS, 7227330f729Sjoerg EXTS32, MTM0, MTM1, MTM2, MTP0, MTP1, MTP2, 723*82d56013Sjoerg POP, SEQ, SEQi, SNE, SNEi, 724*82d56013Sjoerg V3MULU, VMM0, VMULU)>; 7257330f729Sjoerg 7267330f729Sjoergdef : InstRW<[GenericWriteMDUtoGPR], (instrs DMUL)>; 7277330f729Sjoerg 728*82d56013Sjoerg// Cavium Networks MIPS (cnMIPSP) - Octeon+, HasCnMipsP 729*82d56013Sjoerg// ================================================= 730*82d56013Sjoerg 731*82d56013Sjoergdef : InstRW<[GenericWriteALU], (instrs SAA, SAAD)>; 732*82d56013Sjoerg 7337330f729Sjoerg// FPU Pipelines 7347330f729Sjoerg// ============= 7357330f729Sjoerg 7367330f729Sjoergdef GenericFPQ : ProcResource<1> { let BufferSize = 1; } 7377330f729Sjoergdef GenericIssueFPUS : ProcResource<1> { let Super = GenericFPQ; } 7387330f729Sjoergdef GenericIssueFPUL : ProcResource<1> { let Super = GenericFPQ; } 7397330f729Sjoergdef GenericIssueFPULoad : ProcResource<1> { let Super = GenericFPQ; } 7407330f729Sjoergdef GenericIssueFPUStore : ProcResource<1> { let Super = GenericFPQ; } 7417330f729Sjoergdef GenericIssueFPUMove : ProcResource<1> { let Super = GenericFPQ; } 7427330f729Sjoergdef GenericFPUDivSqrt : ProcResource<1> { let Super = GenericFPQ; } 7437330f729Sjoerg 7447330f729Sjoerg// The floating point compare of the 24k series including interAptiv has a 7457330f729Sjoerg// listed latency of 1-2. Using the higher latency here. 7467330f729Sjoerg 7477330f729Sjoergdef GenericWriteFPUCmp : SchedWriteRes<[GenericIssueFPUS]> { let Latency = 2; } 7487330f729Sjoergdef GenericWriteFPUS : SchedWriteRes<[GenericIssueFPUS]> { let Latency = 4; } 7497330f729Sjoergdef GenericWriteFPUL : SchedWriteRes<[GenericIssueFPUL]> { let Latency = 5; } 7507330f729Sjoergdef GenericWriteFPUStore : SchedWriteRes<[GenericIssueFPUStore]> { let 7517330f729Sjoerg Latency = 1; 7527330f729Sjoerg} 7537330f729Sjoergdef GenericWriteFPULoad : SchedWriteRes<[GenericIssueFPULoad]> { 7547330f729Sjoerg let Latency = 2; 7557330f729Sjoerg} 7567330f729Sjoergdef GenericWriteFPUMoveFP : SchedWriteRes<[GenericIssueFPUMove]> { 7577330f729Sjoerg let Latency = 4; 7587330f729Sjoerg} 7597330f729Sjoergdef GenericWriteFPUMoveGPRFPU : SchedWriteRes<[GenericIssueFPUMove]> { 7607330f729Sjoerg let Latency = 2; 7617330f729Sjoerg} 7627330f729Sjoergdef GenericWriteFPUDivS : SchedWriteRes<[GenericFPUDivSqrt]> { 7637330f729Sjoerg let Latency = 17; 7647330f729Sjoerg let ResourceCycles = [ 14 ]; 7657330f729Sjoerg} 7667330f729Sjoergdef GenericWriteFPUDivD : SchedWriteRes<[GenericFPUDivSqrt]> { 7677330f729Sjoerg let Latency = 32; 7687330f729Sjoerg let ResourceCycles = [ 29 ]; 7697330f729Sjoerg} 7707330f729Sjoergdef GenericWriteFPURcpS : SchedWriteRes<[GenericFPUDivSqrt]> { 7717330f729Sjoerg let Latency = 13; 7727330f729Sjoerg let ResourceCycles = [ 10 ]; 7737330f729Sjoerg} 7747330f729Sjoergdef GenericWriteFPURcpD : SchedWriteRes<[GenericFPUDivSqrt]> { 7757330f729Sjoerg let Latency = 25; 7767330f729Sjoerg let ResourceCycles = [ 21 ]; 7777330f729Sjoerg} 7787330f729Sjoergdef GenericWriteFPURsqrtS : SchedWriteRes<[GenericFPUDivSqrt]> { 7797330f729Sjoerg let Latency = 17; 7807330f729Sjoerg let ResourceCycles = [ 14 ]; 7817330f729Sjoerg} 7827330f729Sjoergdef GenericWriteFPURsqrtD : SchedWriteRes<[GenericFPUDivSqrt]> { 7837330f729Sjoerg let Latency = 32; 7847330f729Sjoerg let ResourceCycles = [ 29 ]; 7857330f729Sjoerg} 7867330f729Sjoergdef GenericWriteFPUSqrtS : SchedWriteRes<[GenericFPUDivSqrt]> { 7877330f729Sjoerg let Latency = 17; 7887330f729Sjoerg let ResourceCycles = [ 14 ]; 7897330f729Sjoerg} 7907330f729Sjoergdef GenericWriteFPUSqrtD : SchedWriteRes<[GenericFPUDivSqrt]> { 7917330f729Sjoerg let Latency = 29; 7927330f729Sjoerg let ResourceCycles = [ 29 ]; 7937330f729Sjoerg} 7947330f729Sjoerg 7957330f729Sjoerg// Floating point compare and branch 7967330f729Sjoerg// --------------------------------- 7977330f729Sjoerg// 7987330f729Sjoerg// c.<cc>.[ds], bc1[tf], bc1[tf]l 7997330f729Sjoergdef : InstRW<[GenericWriteFPUCmp], (instrs FCMP_D32, FCMP_D64, FCMP_S32, BC1F, 8007330f729Sjoerg BC1T, BC1FL, BC1TL)>; 8017330f729Sjoerg 8027330f729Sjoergdef : InstRW<[GenericWriteFPUCmp], (instregex "C_[A-Z]+_(S|D32|D64)$")>; 8037330f729Sjoerg 8047330f729Sjoerg// Short Pipe 8057330f729Sjoerg// ---------- 8067330f729Sjoerg// 8077330f729Sjoerg// abs.[ds], abs.ps, add.[ds], neg.[ds], neg.ps, madd.s, msub.s, nmadd,s 8087330f729Sjoerg// nmsub.s, sub.[ds], mul.s 8097330f729Sjoerg 8107330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instrs FABS_S, FABS_D32, FABS_D64, FADD_D32, 8117330f729Sjoerg FADD_D64, FADD_S, MADD_S, MSUB_S, FMUL_S, 8127330f729Sjoerg FNEG_S, FNEG_D32, FNEG_D64, NMADD_S, NMSUB_S, 8137330f729Sjoerg FSUB_S, FSUB_D32, FSUB_D64)>; 8147330f729Sjoerg 8157330f729Sjoerg// Long Pipe 8167330f729Sjoerg// ---------- 8177330f729Sjoerg// 8187330f729Sjoerg// nmadd.d, nmsub.d, mul.[ds], mul.ps, ceil.[wl].[sd], cvt.d.[sw], cvt.s.[dw], 8197330f729Sjoerg// cvt.w.[sd], cvt.[sw].ps, trunc.w.[ds], trunc.w.ps, floor.[ds], 8207330f729Sjoerg// round.[lw].[ds], floor.[lw].ds 8217330f729Sjoerg 8227330f729Sjoerg// madd.d, msub.dm mul.d, mul.ps, nmadd.d, nmsub.d, ceil.[wl].[sd], cvt.d.[sw], 8237330f729Sjoerg// cvt.s.[dw], cvt.w.[sd], cvt.[sw].ps, round.[lw].[ds], floor.[lw].ds, 8247330f729Sjoerg// trunc.w.[ds], trunc.w.ps, 825*82d56013Sjoergdef : InstRW<[GenericWriteFPUL], (instrs ADDR_PS64, 826*82d56013Sjoerg CEIL_L_D64, CEIL_L_S, CEIL_W_D32, 8277330f729Sjoerg CEIL_W_D64, CEIL_W_S, CVT_D32_S, CVT_D32_W, 8287330f729Sjoerg CVT_D64_L, CVT_D64_S, CVT_D64_W, CVT_L_D64, 8297330f729Sjoerg CVT_L_S, CVT_S_D32, CVT_S_D64, CVT_S_L, 8307330f729Sjoerg CVT_S_W, CVT_W_D32, CVT_W_D64, CVT_W_S, 8317330f729Sjoerg CVT_PS_S64, CVT_S_PL64, CVT_S_PU64, 832*82d56013Sjoerg CVT_PS_PW64, CVT_PW_PS64, FADD_PS64, 8337330f729Sjoerg FLOOR_L_D64, FLOOR_L_S, FLOOR_W_D32, 8347330f729Sjoerg FLOOR_W_D64, FLOOR_W_S, FMUL_D32, FMUL_D64, 835*82d56013Sjoerg FMUL_PS64, FSUB_PS64, MADD_D32, MADD_D64, 836*82d56013Sjoerg MSUB_D32, MSUB_D64, MULR_PS64, 8377330f729Sjoerg NMADD_D32, NMADD_D64, NMSUB_D32, NMSUB_D64, 838*82d56013Sjoerg PLL_PS64, PLU_PS64, PUL_PS64, PUU_PS64, 8397330f729Sjoerg ROUND_L_D64, ROUND_L_S, ROUND_W_D32, 8407330f729Sjoerg ROUND_W_D64, ROUND_W_S, TRUNC_L_D64, 8417330f729Sjoerg TRUNC_L_S, TRUNC_W_D32, TRUNC_W_D64, 8427330f729Sjoerg TRUNC_W_S, PseudoTRUNC_W_D, 8437330f729Sjoerg PseudoTRUNC_W_D32, PseudoTRUNC_W_S)>; 8447330f729Sjoerg 8457330f729Sjoerg// Pseudo convert instruction 8467330f729Sjoergdef : InstRW<[GenericWriteFPUL], (instrs PseudoCVT_D32_W, PseudoCVT_D64_L, 8477330f729Sjoerg PseudoCVT_D64_W, PseudoCVT_S_L, 8487330f729Sjoerg PseudoCVT_S_W)>; 8497330f729Sjoerg 8507330f729Sjoerg// div.[ds], div.ps 8517330f729Sjoergdef : InstRW<[GenericWriteFPUDivS], (instrs FDIV_S)>; 8527330f729Sjoergdef : InstRW<[GenericWriteFPUDivD], (instrs FDIV_D32, FDIV_D64)>; 8537330f729Sjoerg 8547330f729Sjoerg// sqrt.[ds], sqrt.ps 8557330f729Sjoergdef : InstRW<[GenericWriteFPUSqrtS], (instrs FSQRT_S)>; 8567330f729Sjoergdef : InstRW<[GenericWriteFPUSqrtD], (instrs FSQRT_D32, FSQRT_D64)>; 8577330f729Sjoerg 8587330f729Sjoerg// rsqrt.[ds], recip.[ds] 8597330f729Sjoergdef : InstRW<[GenericWriteFPURcpS], (instrs RECIP_S, RSQRT_S)>; 8607330f729Sjoergdef : InstRW<[GenericWriteFPURcpD], (instrs RECIP_D32, RECIP_D64, 8617330f729Sjoerg RSQRT_D32, RSQRT_D64)>; 8627330f729Sjoerg 8637330f729Sjoerg 8647330f729Sjoerg// Load Pipe 8657330f729Sjoerg// --------- 8667330f729Sjoerg 8677330f729Sjoerg// ctc1, mtc1, mthc1, cfc1, mfc1, mfhc1 8687330f729Sjoergdef : InstRW<[GenericWriteFPUMoveGPRFPU], (instrs BuildPairF64, 8697330f729Sjoerg BuildPairF64_64, ExtractElementF64, 8707330f729Sjoerg ExtractElementF64_64, CFC1, CTC1, 8717330f729Sjoerg MFC1, MFC1_D64, MFHC1_D32, 8727330f729Sjoerg MFHC1_D64, MTC1, MTC1_D64, 8737330f729Sjoerg MTHC1_D32, MTHC1_D64)>; 8747330f729Sjoerg 8757330f729Sjoerg// swc1, swxc1 8767330f729Sjoergdef : InstRW<[GenericWriteFPUStore], (instrs SDC1, SDC164, SDXC1, SDXC164, 8777330f729Sjoerg SUXC1, SUXC164, SWC1, SWXC1)>; 8787330f729Sjoerg 8797330f729Sjoergdef : InstRW<[GenericWriteFPUMoveFP], (instrs FMOV_D32, FMOV_D64, FMOV_S)>; 8807330f729Sjoerg 8817330f729Sjoerg 8827330f729Sjoerg// movn.[ds], movz.[ds] 8837330f729Sjoergdef : InstRW<[GenericWriteFPUMoveFP], (instrs MOVF_I, MOVF_D32, MOVF_D64, 8847330f729Sjoerg MOVF_S, MOVT_I, MOVT_D32, MOVT_D64, 8857330f729Sjoerg MOVT_S, MOVN_I_D32, MOVN_I_D64, 8867330f729Sjoerg MOVN_I_S, MOVZ_I_D32, MOVZ_I_D64, 8877330f729Sjoerg MOVZ_I_S)>; 8887330f729Sjoerg 8897330f729Sjoergdef : InstRW<[GenericWriteFPUMoveFP], (instrs MOVT_I64, MOVF_I64, MOVZ_I64_S, 8907330f729Sjoerg MOVN_I64_D64, MOVN_I64_S, 8917330f729Sjoerg MOVZ_I64_D64)>; 8927330f729Sjoerg 8937330f729Sjoerg// l[dw]x?c1 8947330f729Sjoergdef : InstRW<[GenericWriteFPULoad], (instrs LDC1, LDC164, LDXC1, LDXC164, 8957330f729Sjoerg LUXC1, LUXC164, LWC1, LWXC1)>; 8967330f729Sjoerg 8977330f729Sjoerg// MIPSR6 8987330f729Sjoerg// ====== 8997330f729Sjoerg 9007330f729Sjoerg// sel(eq|ne).[ds], max.[ds], maxa.[ds], min.[ds], mina.[ds], class.[ds] 9017330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instrs SELEQZ_S, SELNEZ_S, SELEQZ_D, SELNEZ_D, 9027330f729Sjoerg MAX_S, MAX_D, MAXA_S, MAXA_D, MIN_S, MIN_D, 9037330f729Sjoerg MINA_S, MINA_D, CLASS_S, CLASS_D)>; 9047330f729Sjoerg 9057330f729Sjoergdef : InstRW<[GenericWriteFPUL], (instrs RINT_S, RINT_D)>; 9067330f729Sjoerg 9077330f729Sjoergdef : InstRW<[GenericWriteFPUCmp], (instrs BC1EQZ, BC1NEZ, SEL_D, SEL_S)>; 9087330f729Sjoerg 9097330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instrs MADDF_S, MSUBF_S, MADDF_D, MSUBF_D)>; 9107330f729Sjoerg 9117330f729Sjoerg 9127330f729Sjoerg// microMIPS 9137330f729Sjoerg// ========= 9147330f729Sjoerg 9157330f729Sjoergdef : InstRW<[GenericWriteFPUMoveFP], (instrs MOVF_D32_MM, MOVF_S_MM, 9167330f729Sjoerg MOVN_I_D32_MM, MOVN_I_S_MM, 9177330f729Sjoerg MOVT_D32_MM, MOVT_S_MM, MOVZ_I_D32_MM, 9187330f729Sjoerg MOVZ_I_S_MM)>; 9197330f729Sjoerg 9207330f729Sjoerg 9217330f729Sjoerg// cvt.?.?, ceil.?, floor.?, round.?, trunc.? (n)madd.? (n)msub.? 9227330f729Sjoergdef : InstRW<[GenericWriteFPUL], (instrs CVT_D32_S_MM, CVT_D32_W_MM, 9237330f729Sjoerg CVT_D64_S_MM, CVT_D64_W_MM, CVT_L_D64_MM, 9247330f729Sjoerg CVT_L_S_MM, CVT_S_D32_MM, CVT_S_D64_MM, 9257330f729Sjoerg CVT_S_W_MM, CVT_W_D32_MM, CVT_W_D64_MM, 9267330f729Sjoerg CVT_W_S_MM, CEIL_W_MM, CEIL_W_S_MM, 9277330f729Sjoerg FLOOR_W_MM, FLOOR_W_S_MM, NMADD_S_MM, 9287330f729Sjoerg NMADD_D32_MM, NMSUB_S_MM, NMSUB_D32_MM, 9297330f729Sjoerg MADD_S_MM, MADD_D32_MM, ROUND_W_MM, 9307330f729Sjoerg ROUND_W_S_MM, TRUNC_W_MM, TRUNC_W_S_MM)>; 9317330f729Sjoerg 9327330f729Sjoergdef : InstRW<[GenericWriteFPUCmp], (instregex "^C_[A-Z]_(S|D32|D64)_MM$")>; 9337330f729Sjoergdef : InstRW<[GenericWriteFPUCmp], (instregex "^C_[A-Z][A-Z]_(S|D32|D64)_MM$")>; 9347330f729Sjoergdef : InstRW<[GenericWriteFPUCmp], (instregex "^C_[A-Z][A-Z][A-Z]_(S|D32|D64)_MM$")>; 9357330f729Sjoergdef : InstRW<[GenericWriteFPUCmp], (instregex "^C_NGLE_(S|D32|D64)_MM$")>; 9367330f729Sjoergdef : InstRW<[GenericWriteFPUCmp], (instrs FCMP_S32_MM, FCMP_D32_MM)>; 9377330f729Sjoerg 9387330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instrs MFC1_MM, MFHC1_D32_MM, MFHC1_D64_MM, 9397330f729Sjoerg MTC1_MM, MTC1_D64_MM, 9407330f729Sjoerg MTHC1_D32_MM, MTHC1_D64_MM)>; 9417330f729Sjoerg 9427330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instrs FABS_D32_MM, FABS_D64_MM, FABS_S_MM, 9437330f729Sjoerg FNEG_D32_MM, FNEG_D64_MM, FNEG_S_MM, 9447330f729Sjoerg FADD_D32_MM, FADD_D64_MM, FADD_S_MM, 9457330f729Sjoerg FMOV_D32_MM, FMOV_D64_MM, FMOV_S_MM, 9467330f729Sjoerg FMUL_D32_MM, FMUL_D64_MM, FMUL_S_MM, 9477330f729Sjoerg FSUB_D32_MM, FSUB_D64_MM, FSUB_S_MM, 9487330f729Sjoerg MSUB_S_MM, MSUB_D32_MM)>; 9497330f729Sjoerg 9507330f729Sjoergdef : InstRW<[GenericWriteFPUDivS], (instrs FDIV_S_MM)>; 9517330f729Sjoergdef : InstRW<[GenericWriteFPUDivD], (instrs FDIV_D32_MM, FDIV_D64_MM)>; 9527330f729Sjoerg 9537330f729Sjoergdef : InstRW<[GenericWriteFPUSqrtS], (instrs FSQRT_S_MM)>; 9547330f729Sjoergdef : InstRW<[GenericWriteFPUSqrtD], (instrs FSQRT_D32_MM, FSQRT_D64_MM)>; 9557330f729Sjoerg 9567330f729Sjoergdef : InstRW<[GenericWriteFPURcpS], (instrs RECIP_S_MM, RSQRT_S_MM)>; 9577330f729Sjoergdef : InstRW<[GenericWriteFPURcpD], (instrs RECIP_D32_MM, RECIP_D64_MM, 9587330f729Sjoerg RSQRT_D32_MM, RSQRT_D64_MM)>; 9597330f729Sjoerg 9607330f729Sjoergdef : InstRW<[GenericWriteFPUStore], (instrs SDC1_MM, SWC1_MM, SUXC1_MM, 9617330f729Sjoerg SWXC1_MM)>; 9627330f729Sjoerg 9637330f729Sjoergdef : InstRW<[GenericWriteFPUMoveGPRFPU], (instrs CFC1_MM, CTC1_MM)>; 9647330f729Sjoerg 9657330f729Sjoergdef : InstRW<[GenericWriteFPULoad], (instrs LDC1_MM, LUXC1_MM, LWC1_MM, 9667330f729Sjoerg LWXC1_MM)>; 9677330f729Sjoerg 9687330f729Sjoerg// microMIPS32r6 9697330f729Sjoerg// ============= 9707330f729Sjoerg 9717330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instrs FNEG_S_MMR6)>; 9727330f729Sjoerg 9737330f729Sjoergdef : InstRW<[GenericWriteFPUCmp], (instregex "CMP_[A-Z][A-Z]_(S|D)_MMR6")>; 9747330f729Sjoergdef : InstRW<[GenericWriteFPUCmp], 9757330f729Sjoerg (instregex "CMP_[A-Z][A-Z][A-Z]_(S|D)_MMR6")>; 9767330f729Sjoergdef : InstRW<[GenericWriteFPUCmp], 9777330f729Sjoerg (instregex "CMP_[A-Z][A-Z][A-Z][A-Z]_(S|D)_MMR6")>; 9787330f729Sjoerg 9797330f729Sjoergdef : InstRW<[GenericWriteFPUL], 9807330f729Sjoerg (instregex "CVT_(L|D|S|W)_(L|D|S|L|W)_MMR6")>; 9817330f729Sjoerg 9827330f729Sjoergdef : InstRW<[GenericWriteFPUL], 9837330f729Sjoerg (instregex "TRUNC_(L|W)_(D|S)_MMR6")>; 9847330f729Sjoerg 9857330f729Sjoergdef : InstRW<[GenericWriteFPUL], 9867330f729Sjoerg (instregex "ROUND_(L|W)_(D|S)_MMR6")>; 9877330f729Sjoerg 9887330f729Sjoergdef : InstRW<[GenericWriteFPUL], 9897330f729Sjoerg (instregex "FLOOR_(L|W)_(D|S)_MMR6")>; 9907330f729Sjoerg 9917330f729Sjoergdef : InstRW<[GenericWriteFPUL], 9927330f729Sjoerg (instregex "CEIL_(L|W)_(S|D)_MMR6")>; 9937330f729Sjoerg 9947330f729Sjoergdef : InstRW<[GenericWriteFPUS], 9957330f729Sjoerg (instrs MFC1_MMR6, MTC1_MMR6, CLASS_S_MMR6, CLASS_D_MMR6, 9967330f729Sjoerg FADD_S_MMR6)>; 9977330f729Sjoerg 9987330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "M(IN|AX)_(S|D)_MMR6")>; 9997330f729Sjoerg 10007330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "M(IN|AX)A_(S|D)_MMR6")>; 10017330f729Sjoerg 10027330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "SEL(EQ|NE)Z_(S|D)_MMR6")>; 10037330f729Sjoerg 10047330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "SEL_(S|D)_MMR6")>; 10057330f729Sjoerg 10067330f729Sjoergdef : InstRW<[GenericWriteFPUL], (instrs RINT_S_MMR6, RINT_D_MMR6)>; 10077330f729Sjoerg 10087330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "M(ADD|SUB)F_(S|D)_MMR6")>; 10097330f729Sjoerg 10107330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instrs FMOV_S_MMR6, FMUL_S_MMR6, 10117330f729Sjoerg FSUB_S_MMR6, FMOV_D_MMR6)>; 10127330f729Sjoerg 10137330f729Sjoergdef : InstRW<[GenericWriteFPUL], (instrs FDIV_S_MMR6)>; 10147330f729Sjoerg 10157330f729Sjoergdef : InstRW<[GenericWriteFPUStore], (instrs SDC1_D64_MMR6)>; 10167330f729Sjoerg 10177330f729Sjoergdef : InstRW<[GenericWriteFPULoad], (instrs LDC1_D64_MMR6)>; 10187330f729Sjoerg 10197330f729Sjoerg// MIPS64 10207330f729Sjoerg// ====== 10217330f729Sjoerg 10227330f729Sjoergdef : InstRW<[GenericWriteFPUMoveGPRFPU], (instrs DMFC1, DMTC1)>; 10237330f729Sjoerg 10247330f729Sjoerg// MIPS DSP ASE, HasDSP 10257330f729Sjoerg// ==================== 10267330f729Sjoerg 10277330f729Sjoergdef : InstRW<[GenericWriteStore], (instrs SWDSP)>; 10287330f729Sjoerg 10297330f729Sjoergdef : InstRW<[GenericWriteLoad], (instrs LWDSP)>; 10307330f729Sjoerg 10317330f729Sjoergdef : InstRW<[GenericWriteMove], (instrs PseudoMTLOHI_DSP)>; 10327330f729Sjoerg 10337330f729Sjoergdef GenericDSP : ProcResource<1> { let BufferSize = 1; } 10347330f729Sjoergdef GenericDSPShort : SchedWriteRes<[GenericDSP]> { let Latency = 2; } 10357330f729Sjoergdef GenericDSPLong : SchedWriteRes<[GenericDSP]> { let Latency = 6; } 10367330f729Sjoergdef GenericDSPBypass : SchedWriteRes<[GenericDSP]> { let Latency = 1; } 10377330f729Sjoergdef GenericDSPMTHILO : SchedWriteRes<[GenericDSP]> { let Latency = 5; } 10387330f729Sjoergdef GenericDSPLoad : SchedWriteRes<[GenericDSP]> { let Latency = 4; } 10397330f729Sjoergdef GenericDSPMTHLIP : SchedWriteRes<[GenericDSP]> { let Latency = 5; } 10407330f729Sjoerg 10417330f729Sjoergdef : InstRW<[GenericDSPLong], (instregex "^EXTRV_RS_W$")>; 10427330f729Sjoergdef : InstRW<[GenericDSPLong], (instregex "^EXTRV_R_W$")>; 10437330f729Sjoergdef : InstRW<[GenericDSPLong], (instregex "^EXTRV_S_H$")>; 10447330f729Sjoergdef : InstRW<[GenericDSPLong], (instregex "^EXTRV_W$")>; 10457330f729Sjoergdef : InstRW<[GenericDSPLong], (instregex "^EXTR_RS_W$")>; 10467330f729Sjoergdef : InstRW<[GenericDSPLong], (instregex "^EXTR_R_W$")>; 10477330f729Sjoergdef : InstRW<[GenericDSPLong], (instregex "^EXTR_S_H$")>; 10487330f729Sjoergdef : InstRW<[GenericDSPLong], (instregex "^EXTR_W$")>; 10497330f729Sjoergdef : InstRW<[GenericDSPLong], (instregex "^INSV$")>; 10507330f729Sjoerg 10517330f729Sjoergdef : InstRW<[GenericDSPMTHLIP], (instregex "^MTHLIP$")>; 10527330f729Sjoergdef : InstRW<[GenericDSPMTHILO], (instregex "^MTHI_DSP$")>; 10537330f729Sjoergdef : InstRW<[GenericDSPMTHILO], (instregex "^MTLO_DSP$")>; 10547330f729Sjoerg 10557330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^ABSQ_S_PH$")>; 10567330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^ABSQ_S_W$")>; 10577330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^ADDQ_PH$")>; 10587330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^ADDQ_S_PH$")>; 10597330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^ADDQ_S_W$")>; 10607330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^ADDSC$")>; 10617330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^ADDU_QB$")>; 10627330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^ADDU_S_QB$")>; 10637330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^ADDWC$")>; 10647330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^BITREV$")>; 10657330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^BPOSGE32$")>; 10667330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^CMPGU_EQ_QB$")>; 10677330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^CMPGU_LE_QB$")>; 10687330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^CMPGU_LT_QB$")>; 10697330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^CMPU_EQ_QB$")>; 10707330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^CMPU_LE_QB$")>; 10717330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^CMPU_LT_QB$")>; 10727330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^CMP_EQ_PH$")>; 10737330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^CMP_LE_PH$")>; 10747330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^CMP_LT_PH$")>; 10757330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^DPAQ_SA_L_W$")>; 10767330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^DPAQ_S_W_PH$")>; 10777330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^DPAU_H_QBL$")>; 10787330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^DPAU_H_QBR$")>; 10797330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^DPSQ_SA_L_W$")>; 10807330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^DPSQ_S_W_PH$")>; 10817330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^DPSU_H_QBL$")>; 10827330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^DPSU_H_QBR$")>; 10837330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^EXTPDPV$")>; 10847330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^EXTPDP$")>; 10857330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^EXTPV$")>; 10867330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^EXTP$")>; 10877330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^LBUX$")>; 10887330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^LHX$")>; 10897330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^LWX$")>; 10907330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MADDU_DSP$")>; 10917330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MADD_DSP$")>; 10927330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MAQ_SA_W_PHL$")>; 10937330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MAQ_SA_W_PHR$")>; 10947330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MAQ_S_W_PHL$")>; 10957330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MAQ_S_W_PHR$")>; 10967330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MFHI_DSP$")>; 10977330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MFLO_DSP$")>; 10987330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MODSUB$")>; 10997330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MSUBU_DSP$")>; 11007330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MSUB_DSP$")>; 11017330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MULEQ_S_W_PHL$")>; 11027330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MULEQ_S_W_PHR$")>; 11037330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MULEU_S_PH_QBL$")>; 11047330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MULEU_S_PH_QBR$")>; 11057330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MULQ_RS_PH$")>; 11067330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MULSAQ_S_W_PH$")>; 11077330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MULTU_DSP$")>; 11087330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MULT_DSP$")>; 11097330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^PACKRL_PH$")>; 11107330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^PICK_PH$")>; 11117330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^PICK_QB$")>; 11127330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^PRECEQU_PH_QBLA$")>; 11137330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^PRECEQU_PH_QBL$")>; 11147330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^PRECEQU_PH_QBRA$")>; 11157330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^PRECEQU_PH_QBR$")>; 11167330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^PRECEQ_W_PHL$")>; 11177330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^PRECEQ_W_PHR$")>; 11187330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^PRECEU_PH_QBLA$")>; 11197330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^PRECEU_PH_QBL$")>; 11207330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^PRECEU_PH_QBRA$")>; 11217330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^PRECEU_PH_QBR$")>; 11227330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^PRECRQU_S_QB_PH$")>; 11237330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^PRECRQ_PH_W$")>; 11247330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^PRECRQ_QB_PH$")>; 11257330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^PRECRQ_RS_PH_W$")>; 11267330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^RADDU_W_QB$")>; 11277330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^RDDSP$")>; 11287330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^REPLV_PH$")>; 11297330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^REPLV_QB$")>; 11307330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^REPL_PH$")>; 11317330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^REPL_QB$")>; 11327330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SHILOV$")>; 11337330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SHILO$")>; 11347330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SHLLV_PH$")>; 11357330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SHLLV_QB$")>; 11367330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SHLLV_S_PH$")>; 11377330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SHLLV_S_W$")>; 11387330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SHLL_PH$")>; 11397330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SHLL_QB$")>; 11407330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SHLL_S_PH$")>; 11417330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SHLL_S_W$")>; 11427330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SHRAV_PH$")>; 11437330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SHRAV_R_PH$")>; 11447330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SHRAV_R_W$")>; 11457330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SHRA_PH$")>; 11467330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SHRA_R_PH$")>; 11477330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SHRA_R_W$")>; 11487330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SHRLV_QB$")>; 11497330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SHRL_QB$")>; 11507330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SUBQ_PH$")>; 11517330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SUBQ_S_PH$")>; 11527330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SUBQ_S_W$")>; 11537330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SUBU_QB$")>; 11547330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SUBU_S_QB$")>; 11557330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^WRDSP$")>; 11567330f729Sjoerg 11577330f729Sjoergdef : InstRW<[GenericDSPShort], 11587330f729Sjoerg (instregex "^Pseudo(CMP|CMPU)_(EQ|LE|LT)_(PH|QB)$")>; 11597330f729Sjoergdef : InstRW<[GenericDSPShort], 11607330f729Sjoerg (instregex "^PseudoPICK_(PH|QB)$")>; 11617330f729Sjoerg 11627330f729Sjoerg// MIPS DSP R2 - hasDSP, HasDSPR2, InMicroMips 11637330f729Sjoerg// =========================================== 11647330f729Sjoerg 11657330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^ABSQ_S_QB$")>; 11667330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^ADDQH_PH$")>; 11677330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^ADDQH_R_PH$")>; 11687330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^ADDQH_R_W$")>; 11697330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^ADDQH_W$")>; 11707330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^ADDUH_QB$")>; 11717330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^ADDUH_R_QB$")>; 11727330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^ADDU_PH$")>; 11737330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^ADDU_S_PH$")>; 11747330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^APPEND$")>; 11757330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^BALIGN$")>; 11767330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^CMPGDU_EQ_QB$")>; 11777330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^CMPGDU_LE_QB$")>; 11787330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^CMPGDU_LT_QB$")>; 11797330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^DPA_W_PH$")>; 11807330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^DPAQX_SA_W_PH$")>; 11817330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^DPAQX_S_W_PH$")>; 11827330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^DPAX_W_PH$")>; 11837330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^DPS_W_PH$")>; 11847330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^DPSQX_S_W_PH$")>; 11857330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^DPSQX_SA_W_PH$")>; 11867330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^DPSX_W_PH$")>; 11877330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MUL_PH$")>; 11887330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MUL_S_PH$")>; 11897330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MULQ_RS_W$")>; 11907330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MULQ_S_PH$")>; 11917330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MULQ_S_W$")>; 11927330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MULSA_W_PH$")>; 11937330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^PRECR_QB_PH$")>; 11947330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^PRECR_SRA_PH_W$")>; 11957330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^PRECR_SRA_R_PH_W$")>; 11967330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^PREPEND$")>; 11977330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SHRA_QB$")>; 11987330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SHRA_R_QB$")>; 11997330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SHRAV_QB$")>; 12007330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SHRAV_R_QB$")>; 12017330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SHRL_PH$")>; 12027330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SHRLV_PH$")>; 12037330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SUBQH_PH$")>; 12047330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SUBQH_R_PH$")>; 12057330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SUBQH_W$")>; 12067330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SUBQH_R_W$")>; 12077330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SUBU_PH$")>; 12087330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SUBU_S_PH$")>; 12097330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SUBUH_QB$")>; 12107330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SUBUH_R_QB$")>; 12117330f729Sjoerg 12127330f729Sjoerg// microMIPS DSP R1 - HasDSP, InMicroMips 12137330f729Sjoerg// ====================================== 12147330f729Sjoerg 12157330f729Sjoergdef : InstRW<[GenericWriteLoad], (instrs LWDSP_MM)>; 12167330f729Sjoerg 12177330f729Sjoergdef : InstRW<[GenericWriteStore], (instrs SWDSP_MM)>; 12187330f729Sjoerg 12197330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^ABSQ_S_PH_MM$")>; 12207330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^ABSQ_S_W_MM$")>; 12217330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^ADDQ_PH_MM$")>; 12227330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^ADDQ_S_PH_MM$")>; 12237330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^ADDQ_S_W_MM$")>; 12247330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^ADDSC_MM$")>; 12257330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^ADDU_QB_MM$")>; 12267330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^ADDU_S_QB_MM$")>; 12277330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^ADDWC_MM$")>; 12287330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^BITREV_MM$")>; 12297330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^BPOSGE32_MM$")>; 12307330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^CMPGU_EQ_QB_MM$")>; 12317330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^CMPGU_LE_QB_MM$")>; 12327330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^CMPGU_LT_QB_MM$")>; 12337330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^CMPU_EQ_QB_MM$")>; 12347330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^CMPU_LE_QB_MM$")>; 12357330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^CMPU_LT_QB_MM$")>; 12367330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^CMP_EQ_PH_MM$")>; 12377330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^CMP_LE_PH_MM$")>; 12387330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^CMP_LT_PH_MM$")>; 12397330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^DPAQ_SA_L_W_MM$")>; 12407330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^DPAQ_S_W_PH_MM$")>; 12417330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^DPAU_H_QBL_MM$")>; 12427330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^DPAU_H_QBR_MM$")>; 12437330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^DPSQ_SA_L_W_MM$")>; 12447330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^DPSQ_S_W_PH_MM$")>; 12457330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^DPSU_H_QBL_MM$")>; 12467330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^DPSU_H_QBR_MM$")>; 12477330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^EXTPDPV_MM$")>; 12487330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^EXTPDP_MM$")>; 12497330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^EXTPV_MM$")>; 12507330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^EXTP_MM$")>; 12517330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^EXTRV_RS_W_MM$")>; 12527330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^EXTRV_R_W_MM$")>; 12537330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^EXTRV_S_H_MM$")>; 12547330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^EXTRV_W_MM$")>; 12557330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^EXTR_RS_W_MM$")>; 12567330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^EXTR_R_W_MM$")>; 12577330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^EXTR_S_H_MM$")>; 12587330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^EXTR_W_MM$")>; 12597330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^INSV_MM$")>; 12607330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^LBUX_MM$")>; 12617330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^LHX_MM$")>; 12627330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^LWX_MM$")>; 12637330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MADDU_DSP_MM$")>; 12647330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MADD_DSP_MM$")>; 12657330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MAQ_SA_W_PHL_MM$")>; 12667330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MAQ_SA_W_PHR_MM$")>; 12677330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MAQ_S_W_PHL_MM$")>; 12687330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MAQ_S_W_PHR_MM$")>; 12697330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MFHI_DSP_MM$")>; 12707330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MFLO_DSP_MM$")>; 12717330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MODSUB_MM$")>; 12727330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MOVEP_MMR6$")>; 12737330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MOVN_I_MM$")>; 12747330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MOVZ_I_MM$")>; 12757330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MSUBU_DSP_MM$")>; 12767330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MSUB_DSP_MM$")>; 12777330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MTHI_DSP_MM$")>; 12787330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MTHLIP_MM$")>; 12797330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MTLO_DSP_MM$")>; 12807330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MULEQ_S_W_PHL_MM$")>; 12817330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MULEQ_S_W_PHR_MM$")>; 12827330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MULEU_S_PH_QBL_MM$")>; 12837330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MULEU_S_PH_QBR_MM$")>; 12847330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MULQ_RS_PH_MM$")>; 12857330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MULSAQ_S_W_PH_MM$")>; 12867330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MULTU_DSP_MM$")>; 12877330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MULT_DSP_MM$")>; 12887330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^PACKRL_PH_MM$")>; 12897330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^PICK_PH_MM$")>; 12907330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^PICK_QB_MM$")>; 12917330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^PRECEQU_PH_QBLA_MM$")>; 12927330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^PRECEQU_PH_QBL_MM$")>; 12937330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^PRECEQU_PH_QBRA_MM$")>; 12947330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^PRECEQU_PH_QBR_MM$")>; 12957330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^PRECEQ_W_PHL_MM$")>; 12967330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^PRECEQ_W_PHR_MM$")>; 12977330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^PRECEU_PH_QBLA_MM$")>; 12987330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^PRECEU_PH_QBL_MM$")>; 12997330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^PRECEU_PH_QBRA_MM$")>; 13007330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^PRECEU_PH_QBR_MM$")>; 13017330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^PRECRQU_S_QB_PH_MM$")>; 13027330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^PRECRQ_PH_W_MM$")>; 13037330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^PRECRQ_QB_PH_MM$")>; 13047330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^PRECRQ_RS_PH_W_MM$")>; 13057330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^RADDU_W_QB_MM$")>; 13067330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^RDDSP_MM$")>; 13077330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^REPLV_PH_MM$")>; 13087330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^REPLV_QB_MM$")>; 13097330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^REPL_PH_MM$")>; 13107330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^REPL_QB_MM$")>; 13117330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SHILOV_MM$")>; 13127330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SHILO_MM$")>; 13137330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SHLLV_PH_MM$")>; 13147330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SHLLV_QB_MM$")>; 13157330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SHLLV_S_PH_MM$")>; 13167330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SHLLV_S_W_MM$")>; 13177330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SHLL_PH_MM$")>; 13187330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SHLL_QB_MM$")>; 13197330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SHLL_S_PH_MM$")>; 13207330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SHLL_S_W_MM$")>; 13217330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SHRAV_PH_MM$")>; 13227330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SHRAV_R_PH_MM$")>; 13237330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SHRAV_R_W_MM$")>; 13247330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SHRA_PH_MM$")>; 13257330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SHRA_R_PH_MM$")>; 13267330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SHRA_R_W_MM$")>; 13277330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SHRLV_QB_MM$")>; 13287330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SHRL_QB_MM$")>; 13297330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SUBQ_PH_MM$")>; 13307330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SUBQ_S_PH_MM$")>; 13317330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SUBQ_S_W_MM$")>; 13327330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SUBU_QB_MM$")>; 13337330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SUBU_S_QB_MM$")>; 13347330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^WRDSP_MM$")>; 13357330f729Sjoerg 13367330f729Sjoerg 13377330f729Sjoerg// microMIPS DSP R2 - hasDSP, HasDSPR2, InMicroMips 13387330f729Sjoerg// ================================================ 13397330f729Sjoerg 13407330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^ABSQ_S_QB_MMR2$")>; 13417330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^ADDQH_PH_MMR2$")>; 13427330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^ADDQH_R_PH_MMR2$")>; 13437330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^ADDQH_R_W_MMR2$")>; 13447330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^ADDQH_W_MMR2$")>; 13457330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^ADDUH_QB_MMR2$")>; 13467330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^ADDUH_R_QB_MMR2$")>; 13477330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^ADDU_PH_MMR2$")>; 13487330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^ADDU_S_PH_MMR2$")>; 13497330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^APPEND_MMR2$")>; 13507330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^BALIGN_MMR2$")>; 13517330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^CMPGDU_EQ_QB_MMR2$")>; 13527330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^CMPGDU_LE_QB_MMR2$")>; 13537330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^CMPGDU_LT_QB_MMR2$")>; 13547330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^DPA_W_PH_MMR2$")>; 13557330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^DPAQX_SA_W_PH_MMR2$")>; 13567330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^DPAQX_S_W_PH_MMR2$")>; 13577330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^DPAX_W_PH_MMR2$")>; 13587330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^DPS_W_PH_MMR2$")>; 13597330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^DPSQX_S_W_PH_MMR2$")>; 13607330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^DPSQX_SA_W_PH_MMR2$")>; 13617330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^DPSX_W_PH_MMR2$")>; 13627330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MUL_PH_MMR2$")>; 13637330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MUL_S_PH_MMR2$")>; 13647330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MULQ_RS_W_MMR2$")>; 13657330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MULQ_S_PH_MMR2$")>; 13667330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MULQ_S_W_MMR2$")>; 13677330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^MULSA_W_PH_MMR2$")>; 13687330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^PRECR_QB_PH_MMR2$")>; 13697330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^PRECR_SRA_PH_W_MMR2$")>; 13707330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^PRECR_SRA_R_PH_W_MMR2$")>; 13717330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^PREPEND_MMR2$")>; 13727330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SHRA_QB_MMR2$")>; 13737330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SHRA_R_QB_MMR2$")>; 13747330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SHRAV_QB_MMR2$")>; 13757330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SHRAV_R_QB_MMR2$")>; 13767330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SHRL_PH_MMR2$")>; 13777330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SHRLV_PH_MMR2$")>; 13787330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SUBQH_PH_MMR2$")>; 13797330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SUBQH_R_PH_MMR2$")>; 13807330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SUBQH_W_MMR2$")>; 13817330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SUBQH_R_W_MMR2$")>; 13827330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SUBU_PH_MMR2$")>; 13837330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SUBU_S_PH_MMR2$")>; 13847330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SUBUH_QB_MMR2$")>; 13857330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^SUBUH_R_QB_MMR2$")>; 13867330f729Sjoerg 13877330f729Sjoerg// microMIPS DSP R3 - hasDSP, hasDSPR2, hasDSPR3, InMicroMips 13887330f729Sjoerg// ========================================================== 13897330f729Sjoerg 13907330f729Sjoergdef : InstRW<[GenericDSPShort], (instregex "^BPOSGE32C_MMR3$")>; 13917330f729Sjoerg 13927330f729Sjoerg// MIPS MSA ASE - hasMSA 13937330f729Sjoerg// ===================== 13947330f729Sjoerg 13957330f729Sjoergdef GenericWriteMSAShortLogic : SchedWriteRes<[GenericIssueFPUS]>; 13967330f729Sjoergdef GenericWriteMSAShortInt : SchedWriteRes<[GenericIssueFPUS]> { 13977330f729Sjoerglet Latency = 2; 13987330f729Sjoerg} 13997330f729Sjoergdef GenericWriteMoveOtherUnitsToFPU : SchedWriteRes<[GenericIssueFPUS]>; 14007330f729Sjoergdef GenericWriteMSAOther3 : SchedWriteRes<[GenericIssueFPUS]> { 14017330f729Sjoerglet Latency = 3; 14027330f729Sjoerg} 14037330f729Sjoergdef GenericWriteMSALongInt : SchedWriteRes<[GenericIssueFPUS]> { 14047330f729Sjoerglet Latency = 5; 14057330f729Sjoerg} 14067330f729Sjoergdef GenericWriteFPUDivI : SchedWriteRes<[GenericFPQ]> { 14077330f729Sjoerg let Latency = 33; 14087330f729Sjoerg let ResourceCycles = [ 33 ]; 14097330f729Sjoerg} 14107330f729Sjoerg 14117330f729Sjoerg// FPUS is also used in moves from floating point and MSA registers to general 14127330f729Sjoerg// purpose registers. 14137330f729Sjoergdef GenericWriteMoveFPUSToOtherUnits : SchedWriteRes<[GenericIssueFPUS]> { 14147330f729Sjoerg let Latency = 0; 14157330f729Sjoerg} 14167330f729Sjoerg 14177330f729Sjoerg// FPUL is also used in moves from floating point and MSA registers to general 14187330f729Sjoerg// purpose registers. 14197330f729Sjoergdef GenericWriteMoveFPULToOtherUnits : SchedWriteRes<[GenericIssueFPUL]>; 14207330f729Sjoerg 14217330f729Sjoerg 14227330f729Sjoerg// adds_a.[bhwd], adds_[asu].[bhwd], addvi?.[bhwd], asub_[us].[bhwd], 14237330f729Sjoerg// aver?_[us].[bhwd] 14247330f729Sjoergdef : InstRW<[GenericWriteMSAShortInt], (instregex "^ADD_A_[BHWD]$")>; 14257330f729Sjoergdef : InstRW<[GenericWriteMSAShortInt], (instregex "^ADDS_[ASU]_[BHWD]$")>; 14267330f729Sjoerg 14277330f729Sjoerg// TODO: ADDVI_[BHW] might be 1 cycle latency rather than 2. Need to confirm it. 14287330f729Sjoerg// add.[bhwd], addvi.[bhwd], asub_[us].[bhwd], ave.[bhwd], aver.[bhwd] 14297330f729Sjoergdef : InstRW<[GenericWriteMSAShortInt], (instregex "^ADDVI?_[BHWD]$")>; 14307330f729Sjoergdef : InstRW<[GenericWriteMSAShortInt], (instregex "^ASUB_[US].[BHWD]$")>; 14317330f729Sjoergdef : InstRW<[GenericWriteMSAShortInt], (instregex "^AVER?_[US].[BHWD]$")>; 14327330f729Sjoerg 14337330f729Sjoerg// and.v, andi.b, move.v, ldi.[bhwd], xor.v, nor.v, xori.b, nori.b, lsa 14347330f729Sjoergdef : InstRW<[GenericWriteMSAShortLogic], (instregex "^MOVE_V$")>; 14357330f729Sjoergdef : InstRW<[GenericWriteMSAShortLogic], (instregex "^LDI_[BHWD]$")>; 14367330f729Sjoergdef : InstRW<[GenericWriteMSAShortLogic], (instrs LSA)>; 14377330f729Sjoergdef : InstRW<[GenericWriteMSAShortLogic], (instregex "^(AND|OR|[XN]OR)_V$")>; 14387330f729Sjoergdef : InstRW<[GenericWriteMSAShortLogic], (instregex "^(AND|OR|[XN]OR)I_B$")>; 14397330f729Sjoergdef : InstRW<[GenericWriteMSAShortLogic], 14407330f729Sjoerg (instregex "^(AND|OR|[XN]OR)_V_[DHW]_PSEUDO$")>; 14417330f729Sjoerg 14427330f729Sjoerg// vshf.[bhwd], binsl.[bhwd], binsr.[bhwd], insert.[bhwd], sld?.[bhwd], 14437330f729Sjoerg// bset.[bhwd], bclr.[bhwd], bneg.[bhwd], bsel_v, bseli_b 14447330f729Sjoergdef : InstRW<[GenericWriteMSAShortInt], (instregex "^VSHF_[BHWD]$")>; 14457330f729Sjoergdef : InstRW<[GenericWriteMSAShortInt], (instregex "^(BINSL|BINSLI)_[BHWD]$")>; 14467330f729Sjoergdef : InstRW<[GenericWriteMSAShortInt], (instregex "^(BINSR|BINSRI)_[BHWD]$")>; 14477330f729Sjoergdef : InstRW<[GenericWriteMSAShortInt], (instregex "^INSERT_[BHWD]$")>; 14487330f729Sjoergdef : InstRW<[GenericWriteMSAShortInt], (instregex "^(SLD|SLDI)_[BHWD]$")>; 14497330f729Sjoergdef : InstRW<[GenericWriteMSAShortInt], (instregex "^(BSET|BSETI)_[BHWD]$")>; 14507330f729Sjoergdef : InstRW<[GenericWriteMSAShortInt], (instregex "^(BCLR|BCLRI)_[BHWD]$")>; 14517330f729Sjoergdef : InstRW<[GenericWriteMSAShortInt], (instregex "^(BNEG|BNEGI)_[BHWD]$")>; 14527330f729Sjoergdef : InstRW<[GenericWriteMSAShortInt], (instregex "^(BSEL_V|BSELI_B)$")>; 14537330f729Sjoergdef : InstRW<[GenericWriteMSAShortInt], (instregex "^BMN*Z.*$")>; 14547330f729Sjoergdef : InstRW<[GenericWriteMSAShortInt], 14557330f729Sjoerg (instregex "^BSEL_(H|W|D|FW|FD)_PSEUDO$")>; 14567330f729Sjoerg 14577330f729Sjoerg// pcnt.[bhwd], sat_s.[bhwd], sat_u.[bhwd] 14587330f729Sjoergdef : InstRW<[GenericWriteMSAOther3], (instregex "^PCNT_[BHWD]$")>; 14597330f729Sjoergdef : InstRW<[GenericWriteMSAOther3], (instregex "^SAT_(S|U)_[BHWD]$")>; 14607330f729Sjoerg 14617330f729Sjoerg// bnz.[bhwdv], cfcmsa, ctcmsa 14627330f729Sjoergdef : InstRW<[GenericWriteMSAShortLogic], (instregex "^(BNZ|BZ)_[BHWDV]$")>; 14637330f729Sjoergdef : InstRW<[GenericWriteMSAShortLogic], (instregex "^C(F|T)CMSA$")>; 14647330f729Sjoerg 14657330f729Sjoerg// shf.[bhw], fill[bhwd], splat?.[bhwd] 14667330f729Sjoergdef : InstRW<[GenericWriteMSAShortInt], (instregex "^SHF_[BHW]$")>; 14677330f729Sjoergdef : InstRW<[GenericWriteMSAShortInt], (instregex "^FILL_[BHWD]$")>; 14687330f729Sjoergdef : InstRW<[GenericWriteMSAShortInt], (instregex "^(SPLAT|SPLATI)_[BHWD]$")>; 14697330f729Sjoerg 14707330f729Sjoerg// fexp2_w, fexp2_d 14717330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^FEXP2_(W|D)$")>; 14727330f729Sjoerg 14737330f729Sjoerg// compare, converts, round to int, floating point truncate. 14747330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^(CLT|CLTI)_(S|U)_[BHWD]$")>; 14757330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^(CLE|CLEI)_(S|U)_[BHWD]$")>; 14767330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^(CEQ|CEQI)_[BHWD]$")>; 14777330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^CMP_UN_(S|D)$")>; 14787330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^CMP_UEQ_(S|D)$")>; 14797330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^CMP_EQ_(S|D)$")>; 14807330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^CMP_LT_(S|D)$")>; 14817330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^CMP_ULT_(S|D)$")>; 14827330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^CMP_LE_(S|D)$")>; 14837330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^CMP_ULE_(S|D)$")>; 14847330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^CMP_F_(D|S)$")>; 14857330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^CMP_SAF_(D|S)$")>; 14867330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^CMP_SEQ_(D|S)$")>; 14877330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^CMP_SLE_(D|S)$")>; 14887330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^CMP_SLT_(D|S)$")>; 14897330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^CMP_SUEQ_(D|S)$")>; 14907330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^CMP_SULE_(D|S)$")>; 14917330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^CMP_SULT_(D|S)$")>; 14927330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^CMP_SUN_(D|S)$")>; 14937330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^FS(AF|EQ|LT|LE|NE|OR)_(W|D)$")>; 14947330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^FSUEQ_(W|D)$")>; 14957330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^FSULE_(W|D)$")>; 14967330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^FSULT_(W|D)$")>; 14977330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^FSUNE_(W|D)$")>; 14987330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^FSUN_(W|D)$")>; 14997330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^FCAF_(W|D)$")>; 15007330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^FCEQ_(W|D)$")>; 15017330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^FCLE_(W|D)$")>; 15027330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^FCLT_(W|D)$")>; 15037330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^FCNE_(W|D)$")>; 15047330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^FCOR_(W|D)$")>; 15057330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^FCUEQ_(W|D)$")>; 15067330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^FCULE_(W|D)$")>; 15077330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^FCULT_(W|D)$")>; 15087330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^FCUNE_(W|D)$")>; 15097330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^FCUN_(W|D)$")>; 15107330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^FABS_(W|D)$")>; 15117330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^FFINT_(U|S)_(W|D)$")>; 15127330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^FFQL_(W|D)$")>; 15137330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^FFQR_(W|D)$")>; 15147330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^FTINT_(U|S)_(W|D)$")>; 15157330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^FRINT_(W|D)$")>; 15167330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^FTQ_(H|W)$")>; 15177330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^FTRUNC_(U|S)_(W|D)$")>; 15187330f729Sjoerg 15197330f729Sjoerg// fexdo.[hw], fexupl.[wd], fexupr.[wd] 15207330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^FEXDO_(H|W)$")>; 15217330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^FEXUPL_(W|D)$")>; 15227330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^FEXUPR_(W|D)$")>; 15237330f729Sjoerg 15247330f729Sjoerg// fclass.[wd], fmax.[wd], fmax_a.[wd], fmin.[wd], fmin_a.[wd], flog2.[wd] 15257330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^FCLASS_(W|D)$")>; 15267330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^FMAX_A_(W|D)$")>; 15277330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^FMAX_(W|D)$")>; 15287330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^FMIN_A_(W|D)$")>; 15297330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^FMIN_(W|D)$")>; 15307330f729Sjoergdef : InstRW<[GenericWriteFPUS], (instregex "^FLOG2_(W|D)$")>; 15317330f729Sjoerg 15327330f729Sjoerg// interleave right/left, interleave even/odd, insert 15337330f729Sjoergdef : InstRW<[GenericWriteMSAShortLogic], (instregex "^(ILVR|ILVL)_[BHWD]$")>; 15347330f729Sjoergdef : InstRW<[GenericWriteMSAShortLogic], (instregex "^(ILVEV|ILVOD)_[BHWD]$")>; 15357330f729Sjoerg 15367330f729Sjoerg// subs_?.[bhwd], subsus_?.[bhwd], subsuu_?.[bhwd], subvi.[bhwd], subv.[bhwd], 15377330f729Sjoergdef : InstRW<[GenericWriteMSAShortInt], (instregex "^SUBS_(S|U)_[BHWD]$")>; 15387330f729Sjoergdef : InstRW<[GenericWriteMSAShortInt], (instregex "^SUBSUS_(S|U)_[BHWD]$")>; 15397330f729Sjoergdef : InstRW<[GenericWriteMSAShortInt], (instregex "^SUBSUU_(S|U)_[BHWD]$")>; 15407330f729Sjoergdef : InstRW<[GenericWriteMSAShortInt], (instregex "^SUBVI_[BHWD]$")>; 15417330f729Sjoergdef : InstRW<[GenericWriteMSAShortInt], (instregex "^SUBV_[BHWD]$")>; 15427330f729Sjoerg 15437330f729Sjoerg// mod_[su].[bhwd], div_[su].[bhwd] 15447330f729Sjoergdef : InstRW<[GenericWriteFPUDivI], (instregex "^MOD_(S|U)_[BHWD]$")>; 15457330f729Sjoergdef : InstRW<[GenericWriteFPUDivI], (instregex "^DIV_(S|U)_[BHWD]$")>; 15467330f729Sjoerg 15477330f729Sjoerg// hadd_[su].[bhwd], hsub_[su].[bhwd], max_[sua].[bhwd], min_[sua].[bhwd], 15487330f729Sjoerg// maxi_[su].[bhwd], mini_[su].[bhwd], sra?.[bhwd], srar?.[bhwd], srlr.[bhwd], 15497330f729Sjoerg// sll?.[bhwd], pckev.[bhwd], pckod.[bhwd], nloc.[bhwd], nlzc.[bhwd], 15507330f729Sjoerg// insve.[bhwd] 15517330f729Sjoergdef : InstRW<[GenericWriteMSAShortLogic], (instregex "^HADD_(S|U)_[BHWD]$")>; 15527330f729Sjoergdef : InstRW<[GenericWriteMSAShortLogic], (instregex "^HSUB_(S|U)_[BHWD]$")>; 15537330f729Sjoergdef : InstRW<[GenericWriteMSAShortLogic], (instregex "^(MAX|MIN)_S_[BHWD]$")>; 15547330f729Sjoergdef : InstRW<[GenericWriteMSAShortLogic], (instregex "^(MAX|MIN)_U_[BHWD]$")>; 15557330f729Sjoergdef : InstRW<[GenericWriteMSAShortLogic], (instregex "^(MAX|MIN)_A_[BHWD]$")>; 15567330f729Sjoergdef : InstRW<[GenericWriteMSAShortLogic], 15577330f729Sjoerg (instregex "^(MAXI|MINI)_(S|U)_[BHWD]$")>; 15587330f729Sjoergdef : InstRW<[GenericWriteMSAShortLogic], (instregex "^(SRA|SRAI)_[BHWD]$")>; 15597330f729Sjoergdef : InstRW<[GenericWriteMSAShortLogic], (instregex "^(SRL|SRLI)_[BHWD]$")>; 15607330f729Sjoergdef : InstRW<[GenericWriteMSAShortLogic], (instregex "^(SRAR|SRARI)_[BHWD]$")>; 15617330f729Sjoergdef : InstRW<[GenericWriteMSAShortLogic], (instregex "^(SRLR|SRLRI)_[BHWD]$")>; 15627330f729Sjoergdef : InstRW<[GenericWriteMSAShortLogic], (instregex "^(SLL|SLLI)_[BHWD]$")>; 15637330f729Sjoergdef : InstRW<[GenericWriteMSAShortLogic], (instregex "^(PCKEV|PCKOD)_[BHWD]$")>; 15647330f729Sjoergdef : InstRW<[GenericWriteMSAShortLogic], (instregex "^(NLOC|NLZC)_[BHWD]$")>; 15657330f729Sjoergdef : InstRW<[GenericWriteMSAShortLogic], (instregex "^INSVE_[BHWD]$")>; 15667330f729Sjoergdef : InstRW<[GenericWriteMSAShortLogic], (instregex "^INSERT_F(D|W)_PSEUDO$")>; 15677330f729Sjoergdef : InstRW<[GenericWriteMSAShortLogic], (instregex "^FILL_F(D|W)_PSEUDO$")>; 15687330f729Sjoerg 15697330f729Sjoerg// dpadd_?.[bhwd], dpsub_?.[bhwd], dotp_?.[bhwd], msubv.[bhwd], maddv.[bhwd] 15707330f729Sjoerg// mulv.[bhwd]. 15717330f729Sjoergdef : InstRW<[GenericWriteMSALongInt], (instregex "^DPADD_(S|U)_[HWD]$")>; 15727330f729Sjoergdef : InstRW<[GenericWriteMSALongInt], (instregex "^DPSUB_(S|U)_[HWD]$")>; 15737330f729Sjoergdef : InstRW<[GenericWriteMSALongInt], (instregex "^DOTP_(S|U)_[HWD]$")>; 15747330f729Sjoergdef : InstRW<[GenericWriteMSALongInt], (instregex "^MSUBV_[BHWD]$")>; 15757330f729Sjoergdef : InstRW<[GenericWriteMSALongInt], (instregex "^MADDV_[BHWD]$")>; 15767330f729Sjoergdef : InstRW<[GenericWriteMSALongInt], (instregex "^MULV_[BHWD]$")>; 15777330f729Sjoerg 15787330f729Sjoerg// madd?.q.[hw], msub?.q.[hw], mul?.q.[hw] 15797330f729Sjoergdef : InstRW<[GenericWriteMSALongInt], (instregex "^MADDR_Q_[HW]$")>; 15807330f729Sjoergdef : InstRW<[GenericWriteMSALongInt], (instregex "^MADD_Q_[HW]$")>; 15817330f729Sjoergdef : InstRW<[GenericWriteMSALongInt], (instregex "^MSUBR_Q_[HW]$")>; 15827330f729Sjoergdef : InstRW<[GenericWriteMSALongInt], (instregex "^MSUB_Q_[HW]$")>; 15837330f729Sjoergdef : InstRW<[GenericWriteMSALongInt], (instregex "^MULR_Q_[HW]$")>; 15847330f729Sjoergdef : InstRW<[GenericWriteMSALongInt], (instregex "^MUL_Q_[HW]$")>; 15857330f729Sjoerg 15867330f729Sjoerg// fadd.[dw], fmadd.[dw], fmul.[dw], frcp.[dw], frsqrt.[dw], fsqrt.[dw] 15877330f729Sjoerg// fsub.[dw], fdiv.[dw] 15887330f729Sjoergdef : InstRW<[GenericWriteFPUL], (instregex "^FADD_[DW]$")>; 15897330f729Sjoergdef : InstRW<[GenericWriteFPUL], (instregex "^FMADD_[DW]$")>; 15907330f729Sjoergdef : InstRW<[GenericWriteFPUL], (instregex "^FMSUB_[DW]$")>; 15917330f729Sjoergdef : InstRW<[GenericWriteFPUL], (instregex "^FMUL_[DW]$")>; 15927330f729Sjoergdef : InstRW<[GenericWriteFPUL], (instregex "^FRCP_[DW]$")>; 15937330f729Sjoergdef : InstRW<[GenericWriteFPUL], (instregex "^FRSQRT_[DW]$")>; 15947330f729Sjoergdef : InstRW<[GenericWriteFPUL], (instregex "^FSQRT_[DW]$")>; 15957330f729Sjoergdef : InstRW<[GenericWriteFPUL], (instregex "^FSUB_[DW]$")>; 15967330f729Sjoergdef : InstRW<[GenericWriteFPUL], (instregex "^FDIV_[DW]$")>; 15977330f729Sjoerg 15987330f729Sjoerg// copy.[su]_[bhwd] 15997330f729Sjoergdef : InstRW<[GenericWriteFPUMoveGPRFPU], (instregex "^COPY_U_[BHW]$")>; 16007330f729Sjoergdef : InstRW<[GenericWriteFPUMoveGPRFPU], (instregex "^COPY_S_[BHWD]$")>; 16017330f729Sjoerg 16027330f729Sjoergdef : InstRW<[GenericWriteFPUStore], (instregex "^ST_[BHWD]$")>; 16037330f729Sjoergdef : InstRW<[GenericWriteFPUStore], (instrs ST_F16)>; 16047330f729Sjoergdef : InstRW<[GenericWriteFPULoad], (instregex "^LD_[BHWD]$")>; 16057330f729Sjoergdef : InstRW<[GenericWriteFPULoad], (instrs LD_F16)>; 16067330f729Sjoerg 16077330f729Sjoerg// Atomic instructions 16087330f729Sjoerg 16097330f729Sjoerg// FIXME: Define `WriteAtomic` in the MipsSchedule.td and 16107330f729Sjoerg// attach it to the Atomic2OpsPostRA, AtomicCmpSwapPostRA, ... 16117330f729Sjoerg// classes. Then just define resources for the `WriteAtomic` in each 16127330f729Sjoerg// machine models. 16137330f729Sjoergdef GenericAtomic : ProcResource<1> { let BufferSize = 1; } 16147330f729Sjoergdef GenericWriteAtomic : SchedWriteRes<[GenericAtomic]> { let Latency = 2; } 16157330f729Sjoerg 16167330f729Sjoergdef : InstRW<[GenericWriteAtomic], 16177330f729Sjoerg (instregex "^ATOMIC_SWAP_I(8|16|32|64)_POSTRA$")>; 16187330f729Sjoergdef : InstRW<[GenericWriteAtomic], 16197330f729Sjoerg (instregex "^ATOMIC_CMP_SWAP_I(8|16|32|64)_POSTRA$")>; 16207330f729Sjoergdef : InstRW<[GenericWriteAtomic], 1621*82d56013Sjoerg (instregex "^ATOMIC_LOAD_(ADD|SUB|AND|OR|XOR|NAND|MIN|MAX|UMIN|UMAX)" 1622*82d56013Sjoerg "_I(8|16|32|64)_POSTRA$")>; 16237330f729Sjoerg} 1624