xref: /aosp_15_r20/external/llvm/lib/Target/Mips/MipsDSPInstrInfo.td (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker//===- MipsDSPInstrInfo.td - DSP ASE instructions -*- tablegen ------------*-=//
2*9880d681SAndroid Build Coastguard Worker//
3*9880d681SAndroid Build Coastguard Worker//                     The LLVM Compiler Infrastructure
4*9880d681SAndroid Build Coastguard Worker//
5*9880d681SAndroid Build Coastguard Worker// This file is distributed under the University of Illinois Open Source
6*9880d681SAndroid Build Coastguard Worker// License. See LICENSE.TXT for details.
7*9880d681SAndroid Build Coastguard Worker//
8*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
9*9880d681SAndroid Build Coastguard Worker//
10*9880d681SAndroid Build Coastguard Worker// This file describes Mips DSP ASE instructions.
11*9880d681SAndroid Build Coastguard Worker//
12*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
13*9880d681SAndroid Build Coastguard Worker
14*9880d681SAndroid Build Coastguard Worker// ImmLeaf
15*9880d681SAndroid Build Coastguard Workerdef immZExt1 : ImmLeaf<i32, [{return isUInt<1>(Imm);}]>;
16*9880d681SAndroid Build Coastguard Workerdef immZExt2 : ImmLeaf<i32, [{return isUInt<2>(Imm);}]>;
17*9880d681SAndroid Build Coastguard Workerdef immZExt3 : ImmLeaf<i32, [{return isUInt<3>(Imm);}]>;
18*9880d681SAndroid Build Coastguard Workerdef immZExt4 : ImmLeaf<i32, [{return isUInt<4>(Imm);}]>;
19*9880d681SAndroid Build Coastguard Workerdef immZExt8 : ImmLeaf<i32, [{return isUInt<8>(Imm);}]>;
20*9880d681SAndroid Build Coastguard Workerdef immZExt10 : ImmLeaf<i32, [{return isUInt<10>(Imm);}]>;
21*9880d681SAndroid Build Coastguard Workerdef immSExt6 : ImmLeaf<i32, [{return isInt<6>(Imm);}]>;
22*9880d681SAndroid Build Coastguard Worker
23*9880d681SAndroid Build Coastguard Worker// Mips-specific dsp nodes
24*9880d681SAndroid Build Coastguard Workerdef SDT_MipsExtr : SDTypeProfile<1, 2, [SDTCisVT<0, i32>, SDTCisSameAs<0, 1>,
25*9880d681SAndroid Build Coastguard Worker                                        SDTCisVT<2, untyped>]>;
26*9880d681SAndroid Build Coastguard Workerdef SDT_MipsShilo : SDTypeProfile<1, 2, [SDTCisVT<0, untyped>,
27*9880d681SAndroid Build Coastguard Worker                                         SDTCisSameAs<0, 2>, SDTCisVT<1, i32>]>;
28*9880d681SAndroid Build Coastguard Workerdef SDT_MipsDPA : SDTypeProfile<1, 3, [SDTCisVT<0, untyped>, SDTCisSameAs<0, 3>,
29*9880d681SAndroid Build Coastguard Worker                                       SDTCisVT<1, i32>, SDTCisSameAs<1, 2>]>;
30*9880d681SAndroid Build Coastguard Workerdef SDT_MipsSHIFT_DSP : SDTypeProfile<1, 2, [SDTCisVec<0>, SDTCisSameAs<0, 1>,
31*9880d681SAndroid Build Coastguard Worker                                             SDTCisVT<2, i32>]>;
32*9880d681SAndroid Build Coastguard Worker
33*9880d681SAndroid Build Coastguard Workerclass MipsDSPBase<string Opc, SDTypeProfile Prof> :
34*9880d681SAndroid Build Coastguard Worker  SDNode<!strconcat("MipsISD::", Opc), Prof>;
35*9880d681SAndroid Build Coastguard Worker
36*9880d681SAndroid Build Coastguard Workerclass MipsDSPSideEffectBase<string Opc, SDTypeProfile Prof> :
37*9880d681SAndroid Build Coastguard Worker  SDNode<!strconcat("MipsISD::", Opc), Prof, [SDNPHasChain, SDNPSideEffect]>;
38*9880d681SAndroid Build Coastguard Worker
39*9880d681SAndroid Build Coastguard Workerdef MipsEXTP : MipsDSPSideEffectBase<"EXTP", SDT_MipsExtr>;
40*9880d681SAndroid Build Coastguard Workerdef MipsEXTPDP : MipsDSPSideEffectBase<"EXTPDP", SDT_MipsExtr>;
41*9880d681SAndroid Build Coastguard Workerdef MipsEXTR_S_H : MipsDSPSideEffectBase<"EXTR_S_H", SDT_MipsExtr>;
42*9880d681SAndroid Build Coastguard Workerdef MipsEXTR_W : MipsDSPSideEffectBase<"EXTR_W", SDT_MipsExtr>;
43*9880d681SAndroid Build Coastguard Workerdef MipsEXTR_R_W : MipsDSPSideEffectBase<"EXTR_R_W", SDT_MipsExtr>;
44*9880d681SAndroid Build Coastguard Workerdef MipsEXTR_RS_W : MipsDSPSideEffectBase<"EXTR_RS_W", SDT_MipsExtr>;
45*9880d681SAndroid Build Coastguard Worker
46*9880d681SAndroid Build Coastguard Workerdef MipsSHILO : MipsDSPBase<"SHILO", SDT_MipsShilo>;
47*9880d681SAndroid Build Coastguard Workerdef MipsMTHLIP : MipsDSPSideEffectBase<"MTHLIP", SDT_MipsShilo>;
48*9880d681SAndroid Build Coastguard Worker
49*9880d681SAndroid Build Coastguard Workerdef MipsMULSAQ_S_W_PH : MipsDSPSideEffectBase<"MULSAQ_S_W_PH", SDT_MipsDPA>;
50*9880d681SAndroid Build Coastguard Workerdef MipsMAQ_S_W_PHL : MipsDSPSideEffectBase<"MAQ_S_W_PHL", SDT_MipsDPA>;
51*9880d681SAndroid Build Coastguard Workerdef MipsMAQ_S_W_PHR : MipsDSPSideEffectBase<"MAQ_S_W_PHR", SDT_MipsDPA>;
52*9880d681SAndroid Build Coastguard Workerdef MipsMAQ_SA_W_PHL : MipsDSPSideEffectBase<"MAQ_SA_W_PHL", SDT_MipsDPA>;
53*9880d681SAndroid Build Coastguard Workerdef MipsMAQ_SA_W_PHR : MipsDSPSideEffectBase<"MAQ_SA_W_PHR", SDT_MipsDPA>;
54*9880d681SAndroid Build Coastguard Worker
55*9880d681SAndroid Build Coastguard Workerdef MipsDPAU_H_QBL : MipsDSPBase<"DPAU_H_QBL", SDT_MipsDPA>;
56*9880d681SAndroid Build Coastguard Workerdef MipsDPAU_H_QBR : MipsDSPBase<"DPAU_H_QBR", SDT_MipsDPA>;
57*9880d681SAndroid Build Coastguard Workerdef MipsDPSU_H_QBL : MipsDSPBase<"DPSU_H_QBL", SDT_MipsDPA>;
58*9880d681SAndroid Build Coastguard Workerdef MipsDPSU_H_QBR : MipsDSPBase<"DPSU_H_QBR", SDT_MipsDPA>;
59*9880d681SAndroid Build Coastguard Workerdef MipsDPAQ_S_W_PH : MipsDSPSideEffectBase<"DPAQ_S_W_PH", SDT_MipsDPA>;
60*9880d681SAndroid Build Coastguard Workerdef MipsDPSQ_S_W_PH : MipsDSPSideEffectBase<"DPSQ_S_W_PH", SDT_MipsDPA>;
61*9880d681SAndroid Build Coastguard Workerdef MipsDPAQ_SA_L_W : MipsDSPSideEffectBase<"DPAQ_SA_L_W", SDT_MipsDPA>;
62*9880d681SAndroid Build Coastguard Workerdef MipsDPSQ_SA_L_W : MipsDSPSideEffectBase<"DPSQ_SA_L_W", SDT_MipsDPA>;
63*9880d681SAndroid Build Coastguard Worker
64*9880d681SAndroid Build Coastguard Workerdef MipsDPA_W_PH : MipsDSPBase<"DPA_W_PH", SDT_MipsDPA>;
65*9880d681SAndroid Build Coastguard Workerdef MipsDPS_W_PH : MipsDSPBase<"DPS_W_PH", SDT_MipsDPA>;
66*9880d681SAndroid Build Coastguard Workerdef MipsDPAQX_S_W_PH : MipsDSPSideEffectBase<"DPAQX_S_W_PH", SDT_MipsDPA>;
67*9880d681SAndroid Build Coastguard Workerdef MipsDPAQX_SA_W_PH : MipsDSPSideEffectBase<"DPAQX_SA_W_PH", SDT_MipsDPA>;
68*9880d681SAndroid Build Coastguard Workerdef MipsDPAX_W_PH : MipsDSPBase<"DPAX_W_PH", SDT_MipsDPA>;
69*9880d681SAndroid Build Coastguard Workerdef MipsDPSX_W_PH : MipsDSPBase<"DPSX_W_PH", SDT_MipsDPA>;
70*9880d681SAndroid Build Coastguard Workerdef MipsDPSQX_S_W_PH : MipsDSPSideEffectBase<"DPSQX_S_W_PH", SDT_MipsDPA>;
71*9880d681SAndroid Build Coastguard Workerdef MipsDPSQX_SA_W_PH : MipsDSPSideEffectBase<"DPSQX_SA_W_PH", SDT_MipsDPA>;
72*9880d681SAndroid Build Coastguard Workerdef MipsMULSA_W_PH : MipsDSPBase<"MULSA_W_PH", SDT_MipsDPA>;
73*9880d681SAndroid Build Coastguard Worker
74*9880d681SAndroid Build Coastguard Workerdef MipsMULT : MipsDSPBase<"MULT", SDT_MipsDPA>;
75*9880d681SAndroid Build Coastguard Workerdef MipsMULTU : MipsDSPBase<"MULTU", SDT_MipsDPA>;
76*9880d681SAndroid Build Coastguard Workerdef MipsMADD_DSP : MipsDSPBase<"MADD_DSP", SDT_MipsDPA>;
77*9880d681SAndroid Build Coastguard Workerdef MipsMADDU_DSP : MipsDSPBase<"MADDU_DSP", SDT_MipsDPA>;
78*9880d681SAndroid Build Coastguard Workerdef MipsMSUB_DSP : MipsDSPBase<"MSUB_DSP", SDT_MipsDPA>;
79*9880d681SAndroid Build Coastguard Workerdef MipsMSUBU_DSP : MipsDSPBase<"MSUBU_DSP", SDT_MipsDPA>;
80*9880d681SAndroid Build Coastguard Workerdef MipsSHLL_DSP : MipsDSPBase<"SHLL_DSP", SDT_MipsSHIFT_DSP>;
81*9880d681SAndroid Build Coastguard Workerdef MipsSHRA_DSP : MipsDSPBase<"SHRA_DSP", SDT_MipsSHIFT_DSP>;
82*9880d681SAndroid Build Coastguard Workerdef MipsSHRL_DSP : MipsDSPBase<"SHRL_DSP", SDT_MipsSHIFT_DSP>;
83*9880d681SAndroid Build Coastguard Workerdef MipsSETCC_DSP : MipsDSPBase<"SETCC_DSP", SDTSetCC>;
84*9880d681SAndroid Build Coastguard Workerdef MipsSELECT_CC_DSP : MipsDSPBase<"SELECT_CC_DSP", SDTSelectCC>;
85*9880d681SAndroid Build Coastguard Worker
86*9880d681SAndroid Build Coastguard Worker// Flags.
87*9880d681SAndroid Build Coastguard Workerclass Uses<list<Register> Regs> {
88*9880d681SAndroid Build Coastguard Worker  list<Register> Uses = Regs;
89*9880d681SAndroid Build Coastguard Worker}
90*9880d681SAndroid Build Coastguard Worker
91*9880d681SAndroid Build Coastguard Workerclass Defs<list<Register> Regs> {
92*9880d681SAndroid Build Coastguard Worker  list<Register> Defs = Regs;
93*9880d681SAndroid Build Coastguard Worker}
94*9880d681SAndroid Build Coastguard Worker
95*9880d681SAndroid Build Coastguard Worker// Instruction encoding.
96*9880d681SAndroid Build Coastguard Workerclass ADDU_QB_ENC : ADDU_QB_FMT<0b00000>;
97*9880d681SAndroid Build Coastguard Workerclass ADDU_S_QB_ENC : ADDU_QB_FMT<0b00100>;
98*9880d681SAndroid Build Coastguard Workerclass SUBU_QB_ENC : ADDU_QB_FMT<0b00001>;
99*9880d681SAndroid Build Coastguard Workerclass SUBU_S_QB_ENC : ADDU_QB_FMT<0b00101>;
100*9880d681SAndroid Build Coastguard Workerclass ADDQ_PH_ENC : ADDU_QB_FMT<0b01010>;
101*9880d681SAndroid Build Coastguard Workerclass ADDQ_S_PH_ENC : ADDU_QB_FMT<0b01110>;
102*9880d681SAndroid Build Coastguard Workerclass SUBQ_PH_ENC : ADDU_QB_FMT<0b01011>;
103*9880d681SAndroid Build Coastguard Workerclass SUBQ_S_PH_ENC : ADDU_QB_FMT<0b01111>;
104*9880d681SAndroid Build Coastguard Workerclass ADDQ_S_W_ENC : ADDU_QB_FMT<0b10110>;
105*9880d681SAndroid Build Coastguard Workerclass SUBQ_S_W_ENC : ADDU_QB_FMT<0b10111>;
106*9880d681SAndroid Build Coastguard Workerclass ADDSC_ENC : ADDU_QB_FMT<0b10000>;
107*9880d681SAndroid Build Coastguard Workerclass ADDWC_ENC : ADDU_QB_FMT<0b10001>;
108*9880d681SAndroid Build Coastguard Workerclass MODSUB_ENC : ADDU_QB_FMT<0b10010>;
109*9880d681SAndroid Build Coastguard Workerclass RADDU_W_QB_ENC : RADDU_W_QB_FMT<0b10100>;
110*9880d681SAndroid Build Coastguard Workerclass ABSQ_S_PH_ENC : ABSQ_S_PH_R2_FMT<0b01001>;
111*9880d681SAndroid Build Coastguard Workerclass ABSQ_S_W_ENC : ABSQ_S_PH_R2_FMT<0b10001>;
112*9880d681SAndroid Build Coastguard Workerclass PRECRQ_QB_PH_ENC : CMP_EQ_QB_R3_FMT<0b01100>;
113*9880d681SAndroid Build Coastguard Workerclass PRECRQ_PH_W_ENC : CMP_EQ_QB_R3_FMT<0b10100>;
114*9880d681SAndroid Build Coastguard Workerclass PRECRQ_RS_PH_W_ENC : CMP_EQ_QB_R3_FMT<0b10101>;
115*9880d681SAndroid Build Coastguard Workerclass PRECRQU_S_QB_PH_ENC : CMP_EQ_QB_R3_FMT<0b01111>;
116*9880d681SAndroid Build Coastguard Workerclass PRECEQ_W_PHL_ENC : ABSQ_S_PH_R2_FMT<0b01100>;
117*9880d681SAndroid Build Coastguard Workerclass PRECEQ_W_PHR_ENC : ABSQ_S_PH_R2_FMT<0b01101>;
118*9880d681SAndroid Build Coastguard Workerclass PRECEQU_PH_QBL_ENC : ABSQ_S_PH_R2_FMT<0b00100>;
119*9880d681SAndroid Build Coastguard Workerclass PRECEQU_PH_QBR_ENC : ABSQ_S_PH_R2_FMT<0b00101>;
120*9880d681SAndroid Build Coastguard Workerclass PRECEQU_PH_QBLA_ENC : ABSQ_S_PH_R2_FMT<0b00110>;
121*9880d681SAndroid Build Coastguard Workerclass PRECEQU_PH_QBRA_ENC : ABSQ_S_PH_R2_FMT<0b00111>;
122*9880d681SAndroid Build Coastguard Workerclass PRECEU_PH_QBL_ENC : ABSQ_S_PH_R2_FMT<0b11100>;
123*9880d681SAndroid Build Coastguard Workerclass PRECEU_PH_QBR_ENC : ABSQ_S_PH_R2_FMT<0b11101>;
124*9880d681SAndroid Build Coastguard Workerclass PRECEU_PH_QBLA_ENC : ABSQ_S_PH_R2_FMT<0b11110>;
125*9880d681SAndroid Build Coastguard Workerclass PRECEU_PH_QBRA_ENC : ABSQ_S_PH_R2_FMT<0b11111>;
126*9880d681SAndroid Build Coastguard Workerclass SHLL_QB_ENC : SHLL_QB_FMT<0b00000>;
127*9880d681SAndroid Build Coastguard Workerclass SHLLV_QB_ENC : SHLL_QB_FMT<0b00010>;
128*9880d681SAndroid Build Coastguard Workerclass SHRL_QB_ENC : SHLL_QB_FMT<0b00001>;
129*9880d681SAndroid Build Coastguard Workerclass SHRLV_QB_ENC : SHLL_QB_FMT<0b00011>;
130*9880d681SAndroid Build Coastguard Workerclass SHLL_PH_ENC : SHLL_QB_FMT<0b01000>;
131*9880d681SAndroid Build Coastguard Workerclass SHLLV_PH_ENC : SHLL_QB_FMT<0b01010>;
132*9880d681SAndroid Build Coastguard Workerclass SHLL_S_PH_ENC : SHLL_QB_FMT<0b01100>;
133*9880d681SAndroid Build Coastguard Workerclass SHLLV_S_PH_ENC : SHLL_QB_FMT<0b01110>;
134*9880d681SAndroid Build Coastguard Workerclass SHRA_PH_ENC : SHLL_QB_FMT<0b01001>;
135*9880d681SAndroid Build Coastguard Workerclass SHRAV_PH_ENC : SHLL_QB_FMT<0b01011>;
136*9880d681SAndroid Build Coastguard Workerclass SHRA_R_PH_ENC : SHLL_QB_FMT<0b01101>;
137*9880d681SAndroid Build Coastguard Workerclass SHRAV_R_PH_ENC : SHLL_QB_FMT<0b01111>;
138*9880d681SAndroid Build Coastguard Workerclass SHLL_S_W_ENC : SHLL_QB_FMT<0b10100>;
139*9880d681SAndroid Build Coastguard Workerclass SHLLV_S_W_ENC : SHLL_QB_FMT<0b10110>;
140*9880d681SAndroid Build Coastguard Workerclass SHRA_R_W_ENC : SHLL_QB_FMT<0b10101>;
141*9880d681SAndroid Build Coastguard Workerclass SHRAV_R_W_ENC : SHLL_QB_FMT<0b10111>;
142*9880d681SAndroid Build Coastguard Workerclass MULEU_S_PH_QBL_ENC : ADDU_QB_FMT<0b00110>;
143*9880d681SAndroid Build Coastguard Workerclass MULEU_S_PH_QBR_ENC : ADDU_QB_FMT<0b00111>;
144*9880d681SAndroid Build Coastguard Workerclass MULEQ_S_W_PHL_ENC : ADDU_QB_FMT<0b11100>;
145*9880d681SAndroid Build Coastguard Workerclass MULEQ_S_W_PHR_ENC : ADDU_QB_FMT<0b11101>;
146*9880d681SAndroid Build Coastguard Workerclass MULQ_RS_PH_ENC : ADDU_QB_FMT<0b11111>;
147*9880d681SAndroid Build Coastguard Workerclass MULSAQ_S_W_PH_ENC : DPA_W_PH_FMT<0b00110>;
148*9880d681SAndroid Build Coastguard Workerclass MAQ_S_W_PHL_ENC : DPA_W_PH_FMT<0b10100>;
149*9880d681SAndroid Build Coastguard Workerclass MAQ_S_W_PHR_ENC : DPA_W_PH_FMT<0b10110>;
150*9880d681SAndroid Build Coastguard Workerclass MAQ_SA_W_PHL_ENC : DPA_W_PH_FMT<0b10000>;
151*9880d681SAndroid Build Coastguard Workerclass MAQ_SA_W_PHR_ENC : DPA_W_PH_FMT<0b10010>;
152*9880d681SAndroid Build Coastguard Workerclass MFHI_ENC : MFHI_FMT<0b010000>;
153*9880d681SAndroid Build Coastguard Workerclass MFLO_ENC : MFHI_FMT<0b010010>;
154*9880d681SAndroid Build Coastguard Workerclass MTHI_ENC : MTHI_FMT<0b010001>;
155*9880d681SAndroid Build Coastguard Workerclass MTLO_ENC : MTHI_FMT<0b010011>;
156*9880d681SAndroid Build Coastguard Workerclass DPAU_H_QBL_ENC : DPA_W_PH_FMT<0b00011>;
157*9880d681SAndroid Build Coastguard Workerclass DPAU_H_QBR_ENC : DPA_W_PH_FMT<0b00111>;
158*9880d681SAndroid Build Coastguard Workerclass DPSU_H_QBL_ENC : DPA_W_PH_FMT<0b01011>;
159*9880d681SAndroid Build Coastguard Workerclass DPSU_H_QBR_ENC : DPA_W_PH_FMT<0b01111>;
160*9880d681SAndroid Build Coastguard Workerclass DPAQ_S_W_PH_ENC : DPA_W_PH_FMT<0b00100>;
161*9880d681SAndroid Build Coastguard Workerclass DPSQ_S_W_PH_ENC : DPA_W_PH_FMT<0b00101>;
162*9880d681SAndroid Build Coastguard Workerclass DPAQ_SA_L_W_ENC : DPA_W_PH_FMT<0b01100>;
163*9880d681SAndroid Build Coastguard Workerclass DPSQ_SA_L_W_ENC : DPA_W_PH_FMT<0b01101>;
164*9880d681SAndroid Build Coastguard Workerclass MULT_DSP_ENC : MULT_FMT<0b000000, 0b011000>;
165*9880d681SAndroid Build Coastguard Workerclass MULTU_DSP_ENC : MULT_FMT<0b000000, 0b011001>;
166*9880d681SAndroid Build Coastguard Workerclass MADD_DSP_ENC : MULT_FMT<0b011100, 0b000000>;
167*9880d681SAndroid Build Coastguard Workerclass MADDU_DSP_ENC : MULT_FMT<0b011100, 0b000001>;
168*9880d681SAndroid Build Coastguard Workerclass MSUB_DSP_ENC : MULT_FMT<0b011100, 0b000100>;
169*9880d681SAndroid Build Coastguard Workerclass MSUBU_DSP_ENC : MULT_FMT<0b011100, 0b000101>;
170*9880d681SAndroid Build Coastguard Workerclass CMPU_EQ_QB_ENC : CMP_EQ_QB_R2_FMT<0b00000>;
171*9880d681SAndroid Build Coastguard Workerclass CMPU_LT_QB_ENC : CMP_EQ_QB_R2_FMT<0b00001>;
172*9880d681SAndroid Build Coastguard Workerclass CMPU_LE_QB_ENC : CMP_EQ_QB_R2_FMT<0b00010>;
173*9880d681SAndroid Build Coastguard Workerclass CMPGU_EQ_QB_ENC : CMP_EQ_QB_R3_FMT<0b00100>;
174*9880d681SAndroid Build Coastguard Workerclass CMPGU_LT_QB_ENC : CMP_EQ_QB_R3_FMT<0b00101>;
175*9880d681SAndroid Build Coastguard Workerclass CMPGU_LE_QB_ENC : CMP_EQ_QB_R3_FMT<0b00110>;
176*9880d681SAndroid Build Coastguard Workerclass CMP_EQ_PH_ENC : CMP_EQ_QB_R2_FMT<0b01000>;
177*9880d681SAndroid Build Coastguard Workerclass CMP_LT_PH_ENC : CMP_EQ_QB_R2_FMT<0b01001>;
178*9880d681SAndroid Build Coastguard Workerclass CMP_LE_PH_ENC : CMP_EQ_QB_R2_FMT<0b01010>;
179*9880d681SAndroid Build Coastguard Workerclass BITREV_ENC : ABSQ_S_PH_R2_FMT<0b11011>;
180*9880d681SAndroid Build Coastguard Workerclass PACKRL_PH_ENC : CMP_EQ_QB_R3_FMT<0b01110>;
181*9880d681SAndroid Build Coastguard Workerclass REPL_QB_ENC : REPL_FMT<0b00010>;
182*9880d681SAndroid Build Coastguard Workerclass REPL_PH_ENC : REPL_FMT<0b01010>;
183*9880d681SAndroid Build Coastguard Workerclass REPLV_QB_ENC : ABSQ_S_PH_R2_FMT<0b00011>;
184*9880d681SAndroid Build Coastguard Workerclass REPLV_PH_ENC : ABSQ_S_PH_R2_FMT<0b01011>;
185*9880d681SAndroid Build Coastguard Workerclass PICK_QB_ENC : CMP_EQ_QB_R3_FMT<0b00011>;
186*9880d681SAndroid Build Coastguard Workerclass PICK_PH_ENC : CMP_EQ_QB_R3_FMT<0b01011>;
187*9880d681SAndroid Build Coastguard Workerclass LWX_ENC : LX_FMT<0b00000>;
188*9880d681SAndroid Build Coastguard Workerclass LHX_ENC : LX_FMT<0b00100>;
189*9880d681SAndroid Build Coastguard Workerclass LBUX_ENC : LX_FMT<0b00110>;
190*9880d681SAndroid Build Coastguard Workerclass BPOSGE32_ENC : BPOSGE32_FMT<0b11100>;
191*9880d681SAndroid Build Coastguard Workerclass INSV_ENC : INSV_FMT<0b001100>;
192*9880d681SAndroid Build Coastguard Worker
193*9880d681SAndroid Build Coastguard Workerclass EXTP_ENC : EXTR_W_TY1_FMT<0b00010>;
194*9880d681SAndroid Build Coastguard Workerclass EXTPV_ENC : EXTR_W_TY1_FMT<0b00011>;
195*9880d681SAndroid Build Coastguard Workerclass EXTPDP_ENC : EXTR_W_TY1_FMT<0b01010>;
196*9880d681SAndroid Build Coastguard Workerclass EXTPDPV_ENC : EXTR_W_TY1_FMT<0b01011>;
197*9880d681SAndroid Build Coastguard Workerclass EXTR_W_ENC : EXTR_W_TY1_FMT<0b00000>;
198*9880d681SAndroid Build Coastguard Workerclass EXTRV_W_ENC : EXTR_W_TY1_FMT<0b00001>;
199*9880d681SAndroid Build Coastguard Workerclass EXTR_R_W_ENC : EXTR_W_TY1_FMT<0b00100>;
200*9880d681SAndroid Build Coastguard Workerclass EXTRV_R_W_ENC : EXTR_W_TY1_FMT<0b00101>;
201*9880d681SAndroid Build Coastguard Workerclass EXTR_RS_W_ENC : EXTR_W_TY1_FMT<0b00110>;
202*9880d681SAndroid Build Coastguard Workerclass EXTRV_RS_W_ENC : EXTR_W_TY1_FMT<0b00111>;
203*9880d681SAndroid Build Coastguard Workerclass EXTR_S_H_ENC : EXTR_W_TY1_FMT<0b01110>;
204*9880d681SAndroid Build Coastguard Workerclass EXTRV_S_H_ENC : EXTR_W_TY1_FMT<0b01111>;
205*9880d681SAndroid Build Coastguard Workerclass SHILO_ENC : SHILO_R1_FMT<0b11010>;
206*9880d681SAndroid Build Coastguard Workerclass SHILOV_ENC : SHILO_R2_FMT<0b11011>;
207*9880d681SAndroid Build Coastguard Workerclass MTHLIP_ENC : SHILO_R2_FMT<0b11111>;
208*9880d681SAndroid Build Coastguard Worker
209*9880d681SAndroid Build Coastguard Workerclass RDDSP_ENC : RDDSP_FMT<0b10010>;
210*9880d681SAndroid Build Coastguard Workerclass WRDSP_ENC : WRDSP_FMT<0b10011>;
211*9880d681SAndroid Build Coastguard Workerclass ADDU_PH_ENC : ADDU_QB_FMT<0b01000>;
212*9880d681SAndroid Build Coastguard Workerclass ADDU_S_PH_ENC : ADDU_QB_FMT<0b01100>;
213*9880d681SAndroid Build Coastguard Workerclass SUBU_PH_ENC : ADDU_QB_FMT<0b01001>;
214*9880d681SAndroid Build Coastguard Workerclass SUBU_S_PH_ENC : ADDU_QB_FMT<0b01101>;
215*9880d681SAndroid Build Coastguard Workerclass CMPGDU_EQ_QB_ENC : CMP_EQ_QB_R3_FMT<0b11000>;
216*9880d681SAndroid Build Coastguard Workerclass CMPGDU_LT_QB_ENC : CMP_EQ_QB_R3_FMT<0b11001>;
217*9880d681SAndroid Build Coastguard Workerclass CMPGDU_LE_QB_ENC : CMP_EQ_QB_R3_FMT<0b11010>;
218*9880d681SAndroid Build Coastguard Workerclass ABSQ_S_QB_ENC : ABSQ_S_PH_R2_FMT<0b00001>;
219*9880d681SAndroid Build Coastguard Workerclass ADDUH_QB_ENC : ADDUH_QB_FMT<0b00000>;
220*9880d681SAndroid Build Coastguard Workerclass ADDUH_R_QB_ENC : ADDUH_QB_FMT<0b00010>;
221*9880d681SAndroid Build Coastguard Workerclass SUBUH_QB_ENC : ADDUH_QB_FMT<0b00001>;
222*9880d681SAndroid Build Coastguard Workerclass SUBUH_R_QB_ENC : ADDUH_QB_FMT<0b00011>;
223*9880d681SAndroid Build Coastguard Workerclass ADDQH_PH_ENC : ADDUH_QB_FMT<0b01000>;
224*9880d681SAndroid Build Coastguard Workerclass ADDQH_R_PH_ENC : ADDUH_QB_FMT<0b01010>;
225*9880d681SAndroid Build Coastguard Workerclass SUBQH_PH_ENC : ADDUH_QB_FMT<0b01001>;
226*9880d681SAndroid Build Coastguard Workerclass SUBQH_R_PH_ENC : ADDUH_QB_FMT<0b01011>;
227*9880d681SAndroid Build Coastguard Workerclass ADDQH_W_ENC : ADDUH_QB_FMT<0b10000>;
228*9880d681SAndroid Build Coastguard Workerclass ADDQH_R_W_ENC : ADDUH_QB_FMT<0b10010>;
229*9880d681SAndroid Build Coastguard Workerclass SUBQH_W_ENC : ADDUH_QB_FMT<0b10001>;
230*9880d681SAndroid Build Coastguard Workerclass SUBQH_R_W_ENC : ADDUH_QB_FMT<0b10011>;
231*9880d681SAndroid Build Coastguard Workerclass MUL_PH_ENC : ADDUH_QB_FMT<0b01100>;
232*9880d681SAndroid Build Coastguard Workerclass MUL_S_PH_ENC : ADDUH_QB_FMT<0b01110>;
233*9880d681SAndroid Build Coastguard Workerclass MULQ_S_W_ENC : ADDUH_QB_FMT<0b10110>;
234*9880d681SAndroid Build Coastguard Workerclass MULQ_RS_W_ENC : ADDUH_QB_FMT<0b10111>;
235*9880d681SAndroid Build Coastguard Workerclass MULQ_S_PH_ENC : ADDU_QB_FMT<0b11110>;
236*9880d681SAndroid Build Coastguard Workerclass DPA_W_PH_ENC : DPA_W_PH_FMT<0b00000>;
237*9880d681SAndroid Build Coastguard Workerclass DPS_W_PH_ENC : DPA_W_PH_FMT<0b00001>;
238*9880d681SAndroid Build Coastguard Workerclass DPAQX_S_W_PH_ENC : DPA_W_PH_FMT<0b11000>;
239*9880d681SAndroid Build Coastguard Workerclass DPAQX_SA_W_PH_ENC : DPA_W_PH_FMT<0b11010>;
240*9880d681SAndroid Build Coastguard Workerclass DPAX_W_PH_ENC : DPA_W_PH_FMT<0b01000>;
241*9880d681SAndroid Build Coastguard Workerclass DPSX_W_PH_ENC : DPA_W_PH_FMT<0b01001>;
242*9880d681SAndroid Build Coastguard Workerclass DPSQX_S_W_PH_ENC : DPA_W_PH_FMT<0b11001>;
243*9880d681SAndroid Build Coastguard Workerclass DPSQX_SA_W_PH_ENC : DPA_W_PH_FMT<0b11011>;
244*9880d681SAndroid Build Coastguard Workerclass MULSA_W_PH_ENC : DPA_W_PH_FMT<0b00010>;
245*9880d681SAndroid Build Coastguard Workerclass PRECR_QB_PH_ENC : CMP_EQ_QB_R3_FMT<0b01101>;
246*9880d681SAndroid Build Coastguard Workerclass PRECR_SRA_PH_W_ENC : PRECR_SRA_PH_W_FMT<0b11110>;
247*9880d681SAndroid Build Coastguard Workerclass PRECR_SRA_R_PH_W_ENC : PRECR_SRA_PH_W_FMT<0b11111>;
248*9880d681SAndroid Build Coastguard Workerclass SHRA_QB_ENC : SHLL_QB_FMT<0b00100>;
249*9880d681SAndroid Build Coastguard Workerclass SHRAV_QB_ENC : SHLL_QB_FMT<0b00110>;
250*9880d681SAndroid Build Coastguard Workerclass SHRA_R_QB_ENC : SHLL_QB_FMT<0b00101>;
251*9880d681SAndroid Build Coastguard Workerclass SHRAV_R_QB_ENC : SHLL_QB_FMT<0b00111>;
252*9880d681SAndroid Build Coastguard Workerclass SHRL_PH_ENC : SHLL_QB_FMT<0b11001>;
253*9880d681SAndroid Build Coastguard Workerclass SHRLV_PH_ENC : SHLL_QB_FMT<0b11011>;
254*9880d681SAndroid Build Coastguard Workerclass APPEND_ENC : APPEND_FMT<0b00000>;
255*9880d681SAndroid Build Coastguard Workerclass BALIGN_ENC : APPEND_FMT<0b10000>;
256*9880d681SAndroid Build Coastguard Workerclass PREPEND_ENC : APPEND_FMT<0b00001>;
257*9880d681SAndroid Build Coastguard Worker
258*9880d681SAndroid Build Coastguard Worker// Instruction desc.
259*9880d681SAndroid Build Coastguard Workerclass ADDU_QB_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
260*9880d681SAndroid Build Coastguard Worker                        InstrItinClass itin, RegisterOperand ROD,
261*9880d681SAndroid Build Coastguard Worker                        RegisterOperand ROS,  RegisterOperand ROT = ROS> {
262*9880d681SAndroid Build Coastguard Worker  dag OutOperandList = (outs ROD:$rd);
263*9880d681SAndroid Build Coastguard Worker  dag InOperandList = (ins ROS:$rs, ROT:$rt);
264*9880d681SAndroid Build Coastguard Worker  string AsmString = !strconcat(instr_asm, "\t$rd, $rs, $rt");
265*9880d681SAndroid Build Coastguard Worker  list<dag> Pattern = [(set ROD:$rd, (OpNode ROS:$rs, ROT:$rt))];
266*9880d681SAndroid Build Coastguard Worker  InstrItinClass Itinerary = itin;
267*9880d681SAndroid Build Coastguard Worker  string BaseOpcode = instr_asm;
268*9880d681SAndroid Build Coastguard Worker}
269*9880d681SAndroid Build Coastguard Worker
270*9880d681SAndroid Build Coastguard Workerclass RADDU_W_QB_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
271*9880d681SAndroid Build Coastguard Worker                           InstrItinClass itin, RegisterOperand ROD,
272*9880d681SAndroid Build Coastguard Worker                           RegisterOperand ROS = ROD> {
273*9880d681SAndroid Build Coastguard Worker  dag OutOperandList = (outs ROD:$rd);
274*9880d681SAndroid Build Coastguard Worker  dag InOperandList = (ins ROS:$rs);
275*9880d681SAndroid Build Coastguard Worker  string AsmString = !strconcat(instr_asm, "\t$rd, $rs");
276*9880d681SAndroid Build Coastguard Worker  list<dag> Pattern = [(set ROD:$rd, (OpNode ROS:$rs))];
277*9880d681SAndroid Build Coastguard Worker  InstrItinClass Itinerary = itin;
278*9880d681SAndroid Build Coastguard Worker  string BaseOpcode = instr_asm;
279*9880d681SAndroid Build Coastguard Worker}
280*9880d681SAndroid Build Coastguard Worker
281*9880d681SAndroid Build Coastguard Workerclass CMP_EQ_QB_R2_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
282*9880d681SAndroid Build Coastguard Worker                             InstrItinClass itin, RegisterOperand ROS,
283*9880d681SAndroid Build Coastguard Worker                             RegisterOperand ROT = ROS> {
284*9880d681SAndroid Build Coastguard Worker  dag OutOperandList = (outs);
285*9880d681SAndroid Build Coastguard Worker  dag InOperandList = (ins ROS:$rs, ROT:$rt);
286*9880d681SAndroid Build Coastguard Worker  string AsmString = !strconcat(instr_asm, "\t$rs, $rt");
287*9880d681SAndroid Build Coastguard Worker  list<dag> Pattern = [(OpNode ROS:$rs, ROT:$rt)];
288*9880d681SAndroid Build Coastguard Worker  InstrItinClass Itinerary = itin;
289*9880d681SAndroid Build Coastguard Worker  string BaseOpcode = instr_asm;
290*9880d681SAndroid Build Coastguard Worker}
291*9880d681SAndroid Build Coastguard Worker
292*9880d681SAndroid Build Coastguard Workerclass CMP_EQ_QB_R3_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
293*9880d681SAndroid Build Coastguard Worker                             InstrItinClass itin, RegisterOperand ROD,
294*9880d681SAndroid Build Coastguard Worker                             RegisterOperand ROS,  RegisterOperand ROT = ROS> {
295*9880d681SAndroid Build Coastguard Worker  dag OutOperandList = (outs ROD:$rd);
296*9880d681SAndroid Build Coastguard Worker  dag InOperandList = (ins ROS:$rs, ROT:$rt);
297*9880d681SAndroid Build Coastguard Worker  string AsmString = !strconcat(instr_asm, "\t$rd, $rs, $rt");
298*9880d681SAndroid Build Coastguard Worker  list<dag> Pattern = [(set ROD:$rd, (OpNode ROS:$rs, ROT:$rt))];
299*9880d681SAndroid Build Coastguard Worker  InstrItinClass Itinerary = itin;
300*9880d681SAndroid Build Coastguard Worker  string BaseOpcode = instr_asm;
301*9880d681SAndroid Build Coastguard Worker}
302*9880d681SAndroid Build Coastguard Worker
303*9880d681SAndroid Build Coastguard Workerclass PRECR_SRA_PH_W_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
304*9880d681SAndroid Build Coastguard Worker                               InstrItinClass itin, RegisterOperand ROT,
305*9880d681SAndroid Build Coastguard Worker                               RegisterOperand ROS = ROT> {
306*9880d681SAndroid Build Coastguard Worker  dag OutOperandList = (outs ROT:$rt);
307*9880d681SAndroid Build Coastguard Worker  dag InOperandList = (ins ROS:$rs, uimm5:$sa, ROS:$src);
308*9880d681SAndroid Build Coastguard Worker  string AsmString = !strconcat(instr_asm, "\t$rt, $rs, $sa");
309*9880d681SAndroid Build Coastguard Worker  list<dag> Pattern = [(set ROT:$rt, (OpNode ROS:$src, ROS:$rs, immZExt5:$sa))];
310*9880d681SAndroid Build Coastguard Worker  InstrItinClass Itinerary = itin;
311*9880d681SAndroid Build Coastguard Worker  string Constraints = "$src = $rt";
312*9880d681SAndroid Build Coastguard Worker  string BaseOpcode = instr_asm;
313*9880d681SAndroid Build Coastguard Worker}
314*9880d681SAndroid Build Coastguard Worker
315*9880d681SAndroid Build Coastguard Workerclass ABSQ_S_PH_R2_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
316*9880d681SAndroid Build Coastguard Worker                             InstrItinClass itin, RegisterOperand ROD,
317*9880d681SAndroid Build Coastguard Worker                             RegisterOperand ROT = ROD> {
318*9880d681SAndroid Build Coastguard Worker  dag OutOperandList = (outs ROD:$rd);
319*9880d681SAndroid Build Coastguard Worker  dag InOperandList = (ins ROT:$rt);
320*9880d681SAndroid Build Coastguard Worker  string AsmString = !strconcat(instr_asm, "\t$rd, $rt");
321*9880d681SAndroid Build Coastguard Worker  list<dag> Pattern = [(set ROD:$rd, (OpNode ROT:$rt))];
322*9880d681SAndroid Build Coastguard Worker  InstrItinClass Itinerary = itin;
323*9880d681SAndroid Build Coastguard Worker  string BaseOpcode = instr_asm;
324*9880d681SAndroid Build Coastguard Worker}
325*9880d681SAndroid Build Coastguard Worker
326*9880d681SAndroid Build Coastguard Workerclass REPL_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
327*9880d681SAndroid Build Coastguard Worker                     Operand ImmOp, ImmLeaf immPat, InstrItinClass itin,
328*9880d681SAndroid Build Coastguard Worker                     RegisterOperand RO> {
329*9880d681SAndroid Build Coastguard Worker  dag OutOperandList = (outs RO:$rd);
330*9880d681SAndroid Build Coastguard Worker  dag InOperandList = (ins ImmOp:$imm);
331*9880d681SAndroid Build Coastguard Worker  string AsmString = !strconcat(instr_asm, "\t$rd, $imm");
332*9880d681SAndroid Build Coastguard Worker  list<dag> Pattern = [(set RO:$rd, (OpNode immPat:$imm))];
333*9880d681SAndroid Build Coastguard Worker  InstrItinClass Itinerary = itin;
334*9880d681SAndroid Build Coastguard Worker  string BaseOpcode = instr_asm;
335*9880d681SAndroid Build Coastguard Worker}
336*9880d681SAndroid Build Coastguard Worker
337*9880d681SAndroid Build Coastguard Workerclass SHLL_QB_R3_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
338*9880d681SAndroid Build Coastguard Worker                           InstrItinClass itin, RegisterOperand RO> {
339*9880d681SAndroid Build Coastguard Worker  dag OutOperandList = (outs RO:$rd);
340*9880d681SAndroid Build Coastguard Worker  dag InOperandList =  (ins RO:$rt, GPR32Opnd:$rs_sa);
341*9880d681SAndroid Build Coastguard Worker  string AsmString = !strconcat(instr_asm, "\t$rd, $rt, $rs_sa");
342*9880d681SAndroid Build Coastguard Worker  list<dag> Pattern = [(set RO:$rd, (OpNode RO:$rt, GPR32Opnd:$rs_sa))];
343*9880d681SAndroid Build Coastguard Worker  InstrItinClass Itinerary = itin;
344*9880d681SAndroid Build Coastguard Worker  string BaseOpcode = instr_asm;
345*9880d681SAndroid Build Coastguard Worker}
346*9880d681SAndroid Build Coastguard Worker
347*9880d681SAndroid Build Coastguard Workerclass SHLL_QB_R2_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
348*9880d681SAndroid Build Coastguard Worker                           SDPatternOperator ImmPat, InstrItinClass itin,
349*9880d681SAndroid Build Coastguard Worker                           RegisterOperand RO, Operand ImmOpnd> {
350*9880d681SAndroid Build Coastguard Worker  dag OutOperandList = (outs RO:$rd);
351*9880d681SAndroid Build Coastguard Worker  dag InOperandList = (ins RO:$rt, ImmOpnd:$rs_sa);
352*9880d681SAndroid Build Coastguard Worker  string AsmString = !strconcat(instr_asm, "\t$rd, $rt, $rs_sa");
353*9880d681SAndroid Build Coastguard Worker  list<dag> Pattern = [(set RO:$rd, (OpNode RO:$rt, ImmPat:$rs_sa))];
354*9880d681SAndroid Build Coastguard Worker  InstrItinClass Itinerary = itin;
355*9880d681SAndroid Build Coastguard Worker  bit hasSideEffects = 1;
356*9880d681SAndroid Build Coastguard Worker  string BaseOpcode = instr_asm;
357*9880d681SAndroid Build Coastguard Worker}
358*9880d681SAndroid Build Coastguard Worker
359*9880d681SAndroid Build Coastguard Workerclass LX_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
360*9880d681SAndroid Build Coastguard Worker                   InstrItinClass itin> {
361*9880d681SAndroid Build Coastguard Worker  dag OutOperandList = (outs GPR32Opnd:$rd);
362*9880d681SAndroid Build Coastguard Worker  dag InOperandList = (ins PtrRC:$base, PtrRC:$index);
363*9880d681SAndroid Build Coastguard Worker  string AsmString = !strconcat(instr_asm, "\t$rd, ${index}(${base})");
364*9880d681SAndroid Build Coastguard Worker  list<dag> Pattern = [(set GPR32Opnd:$rd, (OpNode iPTR:$base, iPTR:$index))];
365*9880d681SAndroid Build Coastguard Worker  InstrItinClass Itinerary = itin;
366*9880d681SAndroid Build Coastguard Worker  bit mayLoad = 1;
367*9880d681SAndroid Build Coastguard Worker  string BaseOpcode = instr_asm;
368*9880d681SAndroid Build Coastguard Worker}
369*9880d681SAndroid Build Coastguard Worker
370*9880d681SAndroid Build Coastguard Workerclass ADDUH_QB_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
371*9880d681SAndroid Build Coastguard Worker                         InstrItinClass itin, RegisterOperand ROD,
372*9880d681SAndroid Build Coastguard Worker                         RegisterOperand ROS = ROD,  RegisterOperand ROT = ROD> {
373*9880d681SAndroid Build Coastguard Worker  dag OutOperandList = (outs ROD:$rd);
374*9880d681SAndroid Build Coastguard Worker  dag InOperandList = (ins ROS:$rs, ROT:$rt);
375*9880d681SAndroid Build Coastguard Worker  string AsmString = !strconcat(instr_asm, "\t$rd, $rs, $rt");
376*9880d681SAndroid Build Coastguard Worker  list<dag> Pattern = [(set ROD:$rd, (OpNode ROS:$rs, ROT:$rt))];
377*9880d681SAndroid Build Coastguard Worker  InstrItinClass Itinerary = itin;
378*9880d681SAndroid Build Coastguard Worker  string BaseOpcode = instr_asm;
379*9880d681SAndroid Build Coastguard Worker}
380*9880d681SAndroid Build Coastguard Worker
381*9880d681SAndroid Build Coastguard Workerclass APPEND_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
382*9880d681SAndroid Build Coastguard Worker                       Operand ImmOp, SDPatternOperator Imm, InstrItinClass itin> {
383*9880d681SAndroid Build Coastguard Worker  dag OutOperandList = (outs GPR32Opnd:$rt);
384*9880d681SAndroid Build Coastguard Worker  dag InOperandList = (ins GPR32Opnd:$rs, ImmOp:$sa, GPR32Opnd:$src);
385*9880d681SAndroid Build Coastguard Worker  string AsmString = !strconcat(instr_asm, "\t$rt, $rs, $sa");
386*9880d681SAndroid Build Coastguard Worker  list<dag> Pattern =  [(set GPR32Opnd:$rt,
387*9880d681SAndroid Build Coastguard Worker                        (OpNode GPR32Opnd:$src, GPR32Opnd:$rs, Imm:$sa))];
388*9880d681SAndroid Build Coastguard Worker  InstrItinClass Itinerary = itin;
389*9880d681SAndroid Build Coastguard Worker  string Constraints = "$src = $rt";
390*9880d681SAndroid Build Coastguard Worker  string BaseOpcode = instr_asm;
391*9880d681SAndroid Build Coastguard Worker}
392*9880d681SAndroid Build Coastguard Worker
393*9880d681SAndroid Build Coastguard Workerclass EXTR_W_TY1_R2_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
394*9880d681SAndroid Build Coastguard Worker                              InstrItinClass itin> {
395*9880d681SAndroid Build Coastguard Worker  dag OutOperandList = (outs GPR32Opnd:$rt);
396*9880d681SAndroid Build Coastguard Worker  dag InOperandList = (ins ACC64DSPOpnd:$ac, GPR32Opnd:$shift_rs);
397*9880d681SAndroid Build Coastguard Worker  string AsmString = !strconcat(instr_asm, "\t$rt, $ac, $shift_rs");
398*9880d681SAndroid Build Coastguard Worker  InstrItinClass Itinerary = itin;
399*9880d681SAndroid Build Coastguard Worker  string BaseOpcode = instr_asm;
400*9880d681SAndroid Build Coastguard Worker}
401*9880d681SAndroid Build Coastguard Worker
402*9880d681SAndroid Build Coastguard Workerclass EXTR_W_TY1_R1_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
403*9880d681SAndroid Build Coastguard Worker                              InstrItinClass itin> {
404*9880d681SAndroid Build Coastguard Worker  dag OutOperandList = (outs GPR32Opnd:$rt);
405*9880d681SAndroid Build Coastguard Worker  dag InOperandList = (ins ACC64DSPOpnd:$ac, uimm5:$shift_rs);
406*9880d681SAndroid Build Coastguard Worker  string AsmString = !strconcat(instr_asm, "\t$rt, $ac, $shift_rs");
407*9880d681SAndroid Build Coastguard Worker  InstrItinClass Itinerary = itin;
408*9880d681SAndroid Build Coastguard Worker  string BaseOpcode = instr_asm;
409*9880d681SAndroid Build Coastguard Worker}
410*9880d681SAndroid Build Coastguard Worker
411*9880d681SAndroid Build Coastguard Workerclass SHILO_R1_DESC_BASE<string instr_asm, SDPatternOperator OpNode> {
412*9880d681SAndroid Build Coastguard Worker  dag OutOperandList = (outs ACC64DSPOpnd:$ac);
413*9880d681SAndroid Build Coastguard Worker  dag InOperandList = (ins simm6:$shift, ACC64DSPOpnd:$acin);
414*9880d681SAndroid Build Coastguard Worker  string AsmString = !strconcat(instr_asm, "\t$ac, $shift");
415*9880d681SAndroid Build Coastguard Worker  list<dag> Pattern = [(set ACC64DSPOpnd:$ac,
416*9880d681SAndroid Build Coastguard Worker                        (OpNode immSExt6:$shift, ACC64DSPOpnd:$acin))];
417*9880d681SAndroid Build Coastguard Worker  string Constraints = "$acin = $ac";
418*9880d681SAndroid Build Coastguard Worker  string BaseOpcode = instr_asm;
419*9880d681SAndroid Build Coastguard Worker}
420*9880d681SAndroid Build Coastguard Worker
421*9880d681SAndroid Build Coastguard Workerclass SHILO_R2_DESC_BASE<string instr_asm, SDPatternOperator OpNode> {
422*9880d681SAndroid Build Coastguard Worker  dag OutOperandList = (outs ACC64DSPOpnd:$ac);
423*9880d681SAndroid Build Coastguard Worker  dag InOperandList = (ins GPR32Opnd:$rs, ACC64DSPOpnd:$acin);
424*9880d681SAndroid Build Coastguard Worker  string AsmString = !strconcat(instr_asm, "\t$ac, $rs");
425*9880d681SAndroid Build Coastguard Worker  list<dag> Pattern = [(set ACC64DSPOpnd:$ac,
426*9880d681SAndroid Build Coastguard Worker                        (OpNode GPR32Opnd:$rs, ACC64DSPOpnd:$acin))];
427*9880d681SAndroid Build Coastguard Worker  string Constraints = "$acin = $ac";
428*9880d681SAndroid Build Coastguard Worker  string BaseOpcode = instr_asm;
429*9880d681SAndroid Build Coastguard Worker}
430*9880d681SAndroid Build Coastguard Worker
431*9880d681SAndroid Build Coastguard Workerclass MTHLIP_DESC_BASE<string instr_asm, SDPatternOperator OpNode> {
432*9880d681SAndroid Build Coastguard Worker  dag OutOperandList = (outs ACC64DSPOpnd:$ac);
433*9880d681SAndroid Build Coastguard Worker  dag InOperandList = (ins GPR32Opnd:$rs, ACC64DSPOpnd:$acin);
434*9880d681SAndroid Build Coastguard Worker  string AsmString = !strconcat(instr_asm, "\t$rs, $ac");
435*9880d681SAndroid Build Coastguard Worker  list<dag> Pattern = [(set ACC64DSPOpnd:$ac,
436*9880d681SAndroid Build Coastguard Worker                        (OpNode GPR32Opnd:$rs, ACC64DSPOpnd:$acin))];
437*9880d681SAndroid Build Coastguard Worker  string Constraints = "$acin = $ac";
438*9880d681SAndroid Build Coastguard Worker  string BaseOpcode = instr_asm;
439*9880d681SAndroid Build Coastguard Worker}
440*9880d681SAndroid Build Coastguard Worker
441*9880d681SAndroid Build Coastguard Workerclass RDDSP_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
442*9880d681SAndroid Build Coastguard Worker                      InstrItinClass itin> {
443*9880d681SAndroid Build Coastguard Worker  dag OutOperandList = (outs GPR32Opnd:$rd);
444*9880d681SAndroid Build Coastguard Worker  dag InOperandList = (ins uimm10:$mask);
445*9880d681SAndroid Build Coastguard Worker  string AsmString = !strconcat(instr_asm, "\t$rd, $mask");
446*9880d681SAndroid Build Coastguard Worker  list<dag> Pattern = [(set GPR32Opnd:$rd, (OpNode immZExt10:$mask))];
447*9880d681SAndroid Build Coastguard Worker  InstrItinClass Itinerary = itin;
448*9880d681SAndroid Build Coastguard Worker  string BaseOpcode = instr_asm;
449*9880d681SAndroid Build Coastguard Worker}
450*9880d681SAndroid Build Coastguard Worker
451*9880d681SAndroid Build Coastguard Workerclass WRDSP_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
452*9880d681SAndroid Build Coastguard Worker                      InstrItinClass itin> {
453*9880d681SAndroid Build Coastguard Worker  dag OutOperandList = (outs);
454*9880d681SAndroid Build Coastguard Worker  dag InOperandList = (ins GPR32Opnd:$rs, uimm10:$mask);
455*9880d681SAndroid Build Coastguard Worker  string AsmString = !strconcat(instr_asm, "\t$rs, $mask");
456*9880d681SAndroid Build Coastguard Worker  list<dag> Pattern = [(OpNode GPR32Opnd:$rs, immZExt10:$mask)];
457*9880d681SAndroid Build Coastguard Worker  InstrItinClass Itinerary = itin;
458*9880d681SAndroid Build Coastguard Worker  string BaseOpcode = instr_asm;
459*9880d681SAndroid Build Coastguard Worker}
460*9880d681SAndroid Build Coastguard Worker
461*9880d681SAndroid Build Coastguard Workerclass DPA_W_PH_DESC_BASE<string instr_asm, SDPatternOperator OpNode> {
462*9880d681SAndroid Build Coastguard Worker  dag OutOperandList = (outs ACC64DSPOpnd:$ac);
463*9880d681SAndroid Build Coastguard Worker  dag InOperandList = (ins GPR32Opnd:$rs, GPR32Opnd:$rt, ACC64DSPOpnd:$acin);
464*9880d681SAndroid Build Coastguard Worker  string AsmString = !strconcat(instr_asm, "\t$ac, $rs, $rt");
465*9880d681SAndroid Build Coastguard Worker  list<dag> Pattern = [(set ACC64DSPOpnd:$ac,
466*9880d681SAndroid Build Coastguard Worker                        (OpNode GPR32Opnd:$rs, GPR32Opnd:$rt, ACC64DSPOpnd:$acin))];
467*9880d681SAndroid Build Coastguard Worker  string Constraints = "$acin = $ac";
468*9880d681SAndroid Build Coastguard Worker  string BaseOpcode = instr_asm;
469*9880d681SAndroid Build Coastguard Worker}
470*9880d681SAndroid Build Coastguard Worker
471*9880d681SAndroid Build Coastguard Workerclass MULT_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
472*9880d681SAndroid Build Coastguard Worker                     InstrItinClass itin> {
473*9880d681SAndroid Build Coastguard Worker  dag OutOperandList = (outs ACC64DSPOpnd:$ac);
474*9880d681SAndroid Build Coastguard Worker  dag InOperandList = (ins GPR32Opnd:$rs, GPR32Opnd:$rt);
475*9880d681SAndroid Build Coastguard Worker  string AsmString = !strconcat(instr_asm, "\t$ac, $rs, $rt");
476*9880d681SAndroid Build Coastguard Worker  list<dag> Pattern = [(set ACC64DSPOpnd:$ac, (OpNode GPR32Opnd:$rs, GPR32Opnd:$rt))];
477*9880d681SAndroid Build Coastguard Worker  InstrItinClass Itinerary = itin;
478*9880d681SAndroid Build Coastguard Worker  bit isCommutable = 1;
479*9880d681SAndroid Build Coastguard Worker  string BaseOpcode = instr_asm;
480*9880d681SAndroid Build Coastguard Worker}
481*9880d681SAndroid Build Coastguard Worker
482*9880d681SAndroid Build Coastguard Workerclass MADD_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
483*9880d681SAndroid Build Coastguard Worker                     InstrItinClass itin> {
484*9880d681SAndroid Build Coastguard Worker  dag OutOperandList = (outs ACC64DSPOpnd:$ac);
485*9880d681SAndroid Build Coastguard Worker  dag InOperandList = (ins GPR32Opnd:$rs, GPR32Opnd:$rt, ACC64DSPOpnd:$acin);
486*9880d681SAndroid Build Coastguard Worker  string AsmString = !strconcat(instr_asm, "\t$ac, $rs, $rt");
487*9880d681SAndroid Build Coastguard Worker  list<dag> Pattern = [(set ACC64DSPOpnd:$ac,
488*9880d681SAndroid Build Coastguard Worker                        (OpNode GPR32Opnd:$rs, GPR32Opnd:$rt, ACC64DSPOpnd:$acin))];
489*9880d681SAndroid Build Coastguard Worker  InstrItinClass Itinerary = itin;
490*9880d681SAndroid Build Coastguard Worker  string Constraints = "$acin = $ac";
491*9880d681SAndroid Build Coastguard Worker  string BaseOpcode = instr_asm;
492*9880d681SAndroid Build Coastguard Worker}
493*9880d681SAndroid Build Coastguard Worker
494*9880d681SAndroid Build Coastguard Workerclass MFHI_DESC_BASE<string instr_asm, RegisterOperand RO, SDNode OpNode,
495*9880d681SAndroid Build Coastguard Worker                     InstrItinClass itin> {
496*9880d681SAndroid Build Coastguard Worker  dag OutOperandList = (outs GPR32Opnd:$rd);
497*9880d681SAndroid Build Coastguard Worker  dag InOperandList = (ins RO:$ac);
498*9880d681SAndroid Build Coastguard Worker  string AsmString = !strconcat(instr_asm, "\t$rd, $ac");
499*9880d681SAndroid Build Coastguard Worker  list<dag> Pattern = [(set GPR32Opnd:$rd, (OpNode RO:$ac))];
500*9880d681SAndroid Build Coastguard Worker  InstrItinClass Itinerary = itin;
501*9880d681SAndroid Build Coastguard Worker  string BaseOpcode = instr_asm;
502*9880d681SAndroid Build Coastguard Worker}
503*9880d681SAndroid Build Coastguard Worker
504*9880d681SAndroid Build Coastguard Workerclass MTHI_DESC_BASE<string instr_asm, RegisterOperand RO, InstrItinClass itin> {
505*9880d681SAndroid Build Coastguard Worker  dag OutOperandList = (outs RO:$ac);
506*9880d681SAndroid Build Coastguard Worker  dag InOperandList = (ins GPR32Opnd:$rs);
507*9880d681SAndroid Build Coastguard Worker  string AsmString = !strconcat(instr_asm, "\t$rs, $ac");
508*9880d681SAndroid Build Coastguard Worker  InstrItinClass Itinerary = itin;
509*9880d681SAndroid Build Coastguard Worker  string BaseOpcode = instr_asm;
510*9880d681SAndroid Build Coastguard Worker}
511*9880d681SAndroid Build Coastguard Worker
512*9880d681SAndroid Build Coastguard Workerclass BPOSGE32_PSEUDO_DESC_BASE<SDPatternOperator OpNode, InstrItinClass itin> :
513*9880d681SAndroid Build Coastguard Worker  MipsPseudo<(outs GPR32Opnd:$dst), (ins), [(set GPR32Opnd:$dst, (OpNode))]> {
514*9880d681SAndroid Build Coastguard Worker  bit usesCustomInserter = 1;
515*9880d681SAndroid Build Coastguard Worker}
516*9880d681SAndroid Build Coastguard Worker
517*9880d681SAndroid Build Coastguard Workerclass BPOSGE32_DESC_BASE<string instr_asm, DAGOperand opnd,
518*9880d681SAndroid Build Coastguard Worker                         InstrItinClass itin> {
519*9880d681SAndroid Build Coastguard Worker  dag OutOperandList = (outs);
520*9880d681SAndroid Build Coastguard Worker  dag InOperandList = (ins opnd:$offset);
521*9880d681SAndroid Build Coastguard Worker  string AsmString = !strconcat(instr_asm, "\t$offset");
522*9880d681SAndroid Build Coastguard Worker  InstrItinClass Itinerary = itin;
523*9880d681SAndroid Build Coastguard Worker  bit isBranch = 1;
524*9880d681SAndroid Build Coastguard Worker  bit isTerminator = 1;
525*9880d681SAndroid Build Coastguard Worker  bit hasDelaySlot = 1;
526*9880d681SAndroid Build Coastguard Worker  string BaseOpcode = instr_asm;
527*9880d681SAndroid Build Coastguard Worker}
528*9880d681SAndroid Build Coastguard Worker
529*9880d681SAndroid Build Coastguard Workerclass INSV_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
530*9880d681SAndroid Build Coastguard Worker                     InstrItinClass itin> {
531*9880d681SAndroid Build Coastguard Worker  dag OutOperandList = (outs GPR32Opnd:$rt);
532*9880d681SAndroid Build Coastguard Worker  dag InOperandList = (ins GPR32Opnd:$src, GPR32Opnd:$rs);
533*9880d681SAndroid Build Coastguard Worker  string AsmString = !strconcat(instr_asm, "\t$rt, $rs");
534*9880d681SAndroid Build Coastguard Worker  list<dag> Pattern = [(set GPR32Opnd:$rt, (OpNode GPR32Opnd:$src, GPR32Opnd:$rs))];
535*9880d681SAndroid Build Coastguard Worker  InstrItinClass Itinerary = itin;
536*9880d681SAndroid Build Coastguard Worker  string Constraints = "$src = $rt";
537*9880d681SAndroid Build Coastguard Worker  string BaseOpcode = instr_asm;
538*9880d681SAndroid Build Coastguard Worker}
539*9880d681SAndroid Build Coastguard Worker
540*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
541*9880d681SAndroid Build Coastguard Worker// MIPS DSP Rev 1
542*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
543*9880d681SAndroid Build Coastguard Worker
544*9880d681SAndroid Build Coastguard Worker// Addition/subtraction
545*9880d681SAndroid Build Coastguard Workerclass ADDU_QB_DESC : ADDU_QB_DESC_BASE<"addu.qb", null_frag, NoItinerary,
546*9880d681SAndroid Build Coastguard Worker                                       DSPROpnd, DSPROpnd>, IsCommutable,
547*9880d681SAndroid Build Coastguard Worker                     Defs<[DSPOutFlag20]>;
548*9880d681SAndroid Build Coastguard Worker
549*9880d681SAndroid Build Coastguard Workerclass ADDU_S_QB_DESC : ADDU_QB_DESC_BASE<"addu_s.qb", int_mips_addu_s_qb,
550*9880d681SAndroid Build Coastguard Worker                                         NoItinerary, DSPROpnd, DSPROpnd>,
551*9880d681SAndroid Build Coastguard Worker                       IsCommutable, Defs<[DSPOutFlag20]>;
552*9880d681SAndroid Build Coastguard Worker
553*9880d681SAndroid Build Coastguard Workerclass SUBU_QB_DESC : ADDU_QB_DESC_BASE<"subu.qb", null_frag, NoItinerary,
554*9880d681SAndroid Build Coastguard Worker                                       DSPROpnd, DSPROpnd>,
555*9880d681SAndroid Build Coastguard Worker                     Defs<[DSPOutFlag20]>;
556*9880d681SAndroid Build Coastguard Worker
557*9880d681SAndroid Build Coastguard Workerclass SUBU_S_QB_DESC : ADDU_QB_DESC_BASE<"subu_s.qb", int_mips_subu_s_qb,
558*9880d681SAndroid Build Coastguard Worker                                         NoItinerary, DSPROpnd, DSPROpnd>,
559*9880d681SAndroid Build Coastguard Worker                       Defs<[DSPOutFlag20]>;
560*9880d681SAndroid Build Coastguard Worker
561*9880d681SAndroid Build Coastguard Workerclass ADDQ_PH_DESC : ADDU_QB_DESC_BASE<"addq.ph", null_frag, NoItinerary,
562*9880d681SAndroid Build Coastguard Worker                                       DSPROpnd, DSPROpnd>, IsCommutable,
563*9880d681SAndroid Build Coastguard Worker                     Defs<[DSPOutFlag20]>;
564*9880d681SAndroid Build Coastguard Worker
565*9880d681SAndroid Build Coastguard Workerclass ADDQ_S_PH_DESC : ADDU_QB_DESC_BASE<"addq_s.ph", int_mips_addq_s_ph,
566*9880d681SAndroid Build Coastguard Worker                                         NoItinerary, DSPROpnd, DSPROpnd>,
567*9880d681SAndroid Build Coastguard Worker                       IsCommutable, Defs<[DSPOutFlag20]>;
568*9880d681SAndroid Build Coastguard Worker
569*9880d681SAndroid Build Coastguard Workerclass SUBQ_PH_DESC : ADDU_QB_DESC_BASE<"subq.ph", null_frag, NoItinerary,
570*9880d681SAndroid Build Coastguard Worker                                       DSPROpnd, DSPROpnd>,
571*9880d681SAndroid Build Coastguard Worker                     Defs<[DSPOutFlag20]>;
572*9880d681SAndroid Build Coastguard Worker
573*9880d681SAndroid Build Coastguard Workerclass SUBQ_S_PH_DESC : ADDU_QB_DESC_BASE<"subq_s.ph", int_mips_subq_s_ph,
574*9880d681SAndroid Build Coastguard Worker                                         NoItinerary, DSPROpnd, DSPROpnd>,
575*9880d681SAndroid Build Coastguard Worker                       Defs<[DSPOutFlag20]>;
576*9880d681SAndroid Build Coastguard Worker
577*9880d681SAndroid Build Coastguard Workerclass ADDQ_S_W_DESC : ADDU_QB_DESC_BASE<"addq_s.w", int_mips_addq_s_w,
578*9880d681SAndroid Build Coastguard Worker                                        NoItinerary, GPR32Opnd, GPR32Opnd>,
579*9880d681SAndroid Build Coastguard Worker                      IsCommutable, Defs<[DSPOutFlag20]>;
580*9880d681SAndroid Build Coastguard Worker
581*9880d681SAndroid Build Coastguard Workerclass SUBQ_S_W_DESC : ADDU_QB_DESC_BASE<"subq_s.w", int_mips_subq_s_w,
582*9880d681SAndroid Build Coastguard Worker                                        NoItinerary, GPR32Opnd, GPR32Opnd>,
583*9880d681SAndroid Build Coastguard Worker                      Defs<[DSPOutFlag20]>;
584*9880d681SAndroid Build Coastguard Worker
585*9880d681SAndroid Build Coastguard Workerclass ADDSC_DESC : ADDU_QB_DESC_BASE<"addsc", null_frag, NoItinerary,
586*9880d681SAndroid Build Coastguard Worker                                     GPR32Opnd, GPR32Opnd>, IsCommutable,
587*9880d681SAndroid Build Coastguard Worker                   Defs<[DSPCarry]>;
588*9880d681SAndroid Build Coastguard Worker
589*9880d681SAndroid Build Coastguard Workerclass ADDWC_DESC : ADDU_QB_DESC_BASE<"addwc", null_frag, NoItinerary,
590*9880d681SAndroid Build Coastguard Worker                                     GPR32Opnd, GPR32Opnd>,
591*9880d681SAndroid Build Coastguard Worker                   IsCommutable, Uses<[DSPCarry]>, Defs<[DSPOutFlag20]>;
592*9880d681SAndroid Build Coastguard Worker
593*9880d681SAndroid Build Coastguard Workerclass MODSUB_DESC : ADDU_QB_DESC_BASE<"modsub", int_mips_modsub, NoItinerary,
594*9880d681SAndroid Build Coastguard Worker                                      GPR32Opnd, GPR32Opnd>;
595*9880d681SAndroid Build Coastguard Worker
596*9880d681SAndroid Build Coastguard Workerclass RADDU_W_QB_DESC : RADDU_W_QB_DESC_BASE<"raddu.w.qb", int_mips_raddu_w_qb,
597*9880d681SAndroid Build Coastguard Worker                                             NoItinerary, GPR32Opnd, DSPROpnd>;
598*9880d681SAndroid Build Coastguard Worker
599*9880d681SAndroid Build Coastguard Worker// Absolute value
600*9880d681SAndroid Build Coastguard Workerclass ABSQ_S_PH_DESC : ABSQ_S_PH_R2_DESC_BASE<"absq_s.ph", int_mips_absq_s_ph,
601*9880d681SAndroid Build Coastguard Worker                                              NoItinerary, DSPROpnd>,
602*9880d681SAndroid Build Coastguard Worker                       Defs<[DSPOutFlag20]>;
603*9880d681SAndroid Build Coastguard Worker
604*9880d681SAndroid Build Coastguard Workerclass ABSQ_S_W_DESC : ABSQ_S_PH_R2_DESC_BASE<"absq_s.w", int_mips_absq_s_w,
605*9880d681SAndroid Build Coastguard Worker                                             NoItinerary, GPR32Opnd>,
606*9880d681SAndroid Build Coastguard Worker                      Defs<[DSPOutFlag20]>;
607*9880d681SAndroid Build Coastguard Worker
608*9880d681SAndroid Build Coastguard Worker// Precision reduce/expand
609*9880d681SAndroid Build Coastguard Workerclass PRECRQ_QB_PH_DESC : CMP_EQ_QB_R3_DESC_BASE<"precrq.qb.ph",
610*9880d681SAndroid Build Coastguard Worker                                                 int_mips_precrq_qb_ph,
611*9880d681SAndroid Build Coastguard Worker                                                 NoItinerary, DSPROpnd, DSPROpnd>;
612*9880d681SAndroid Build Coastguard Worker
613*9880d681SAndroid Build Coastguard Workerclass PRECRQ_PH_W_DESC : CMP_EQ_QB_R3_DESC_BASE<"precrq.ph.w",
614*9880d681SAndroid Build Coastguard Worker                                                int_mips_precrq_ph_w,
615*9880d681SAndroid Build Coastguard Worker                                                NoItinerary, DSPROpnd, GPR32Opnd>;
616*9880d681SAndroid Build Coastguard Worker
617*9880d681SAndroid Build Coastguard Workerclass PRECRQ_RS_PH_W_DESC : CMP_EQ_QB_R3_DESC_BASE<"precrq_rs.ph.w",
618*9880d681SAndroid Build Coastguard Worker                                                   int_mips_precrq_rs_ph_w,
619*9880d681SAndroid Build Coastguard Worker                                                   NoItinerary, DSPROpnd,
620*9880d681SAndroid Build Coastguard Worker                                                   GPR32Opnd>,
621*9880d681SAndroid Build Coastguard Worker                            Defs<[DSPOutFlag22]>;
622*9880d681SAndroid Build Coastguard Worker
623*9880d681SAndroid Build Coastguard Workerclass PRECRQU_S_QB_PH_DESC : CMP_EQ_QB_R3_DESC_BASE<"precrqu_s.qb.ph",
624*9880d681SAndroid Build Coastguard Worker                                                    int_mips_precrqu_s_qb_ph,
625*9880d681SAndroid Build Coastguard Worker                                                    NoItinerary, DSPROpnd,
626*9880d681SAndroid Build Coastguard Worker                                                    DSPROpnd>,
627*9880d681SAndroid Build Coastguard Worker                             Defs<[DSPOutFlag22]>;
628*9880d681SAndroid Build Coastguard Worker
629*9880d681SAndroid Build Coastguard Workerclass PRECEQ_W_PHL_DESC : ABSQ_S_PH_R2_DESC_BASE<"preceq.w.phl",
630*9880d681SAndroid Build Coastguard Worker                                                 int_mips_preceq_w_phl,
631*9880d681SAndroid Build Coastguard Worker                                                 NoItinerary, GPR32Opnd, DSPROpnd>;
632*9880d681SAndroid Build Coastguard Worker
633*9880d681SAndroid Build Coastguard Workerclass PRECEQ_W_PHR_DESC : ABSQ_S_PH_R2_DESC_BASE<"preceq.w.phr",
634*9880d681SAndroid Build Coastguard Worker                                                 int_mips_preceq_w_phr,
635*9880d681SAndroid Build Coastguard Worker                                                 NoItinerary, GPR32Opnd, DSPROpnd>;
636*9880d681SAndroid Build Coastguard Worker
637*9880d681SAndroid Build Coastguard Workerclass PRECEQU_PH_QBL_DESC : ABSQ_S_PH_R2_DESC_BASE<"precequ.ph.qbl",
638*9880d681SAndroid Build Coastguard Worker                                                   int_mips_precequ_ph_qbl,
639*9880d681SAndroid Build Coastguard Worker                                                   NoItinerary, DSPROpnd>;
640*9880d681SAndroid Build Coastguard Worker
641*9880d681SAndroid Build Coastguard Workerclass PRECEQU_PH_QBR_DESC : ABSQ_S_PH_R2_DESC_BASE<"precequ.ph.qbr",
642*9880d681SAndroid Build Coastguard Worker                                                   int_mips_precequ_ph_qbr,
643*9880d681SAndroid Build Coastguard Worker                                                   NoItinerary, DSPROpnd>;
644*9880d681SAndroid Build Coastguard Worker
645*9880d681SAndroid Build Coastguard Workerclass PRECEQU_PH_QBLA_DESC : ABSQ_S_PH_R2_DESC_BASE<"precequ.ph.qbla",
646*9880d681SAndroid Build Coastguard Worker                                                    int_mips_precequ_ph_qbla,
647*9880d681SAndroid Build Coastguard Worker                                                    NoItinerary, DSPROpnd>;
648*9880d681SAndroid Build Coastguard Worker
649*9880d681SAndroid Build Coastguard Workerclass PRECEQU_PH_QBRA_DESC : ABSQ_S_PH_R2_DESC_BASE<"precequ.ph.qbra",
650*9880d681SAndroid Build Coastguard Worker                                                    int_mips_precequ_ph_qbra,
651*9880d681SAndroid Build Coastguard Worker                                                    NoItinerary, DSPROpnd>;
652*9880d681SAndroid Build Coastguard Worker
653*9880d681SAndroid Build Coastguard Workerclass PRECEU_PH_QBL_DESC : ABSQ_S_PH_R2_DESC_BASE<"preceu.ph.qbl",
654*9880d681SAndroid Build Coastguard Worker                                                  int_mips_preceu_ph_qbl,
655*9880d681SAndroid Build Coastguard Worker                                                  NoItinerary, DSPROpnd>;
656*9880d681SAndroid Build Coastguard Worker
657*9880d681SAndroid Build Coastguard Workerclass PRECEU_PH_QBR_DESC : ABSQ_S_PH_R2_DESC_BASE<"preceu.ph.qbr",
658*9880d681SAndroid Build Coastguard Worker                                                  int_mips_preceu_ph_qbr,
659*9880d681SAndroid Build Coastguard Worker                                                  NoItinerary, DSPROpnd>;
660*9880d681SAndroid Build Coastguard Worker
661*9880d681SAndroid Build Coastguard Workerclass PRECEU_PH_QBLA_DESC : ABSQ_S_PH_R2_DESC_BASE<"preceu.ph.qbla",
662*9880d681SAndroid Build Coastguard Worker                                                   int_mips_preceu_ph_qbla,
663*9880d681SAndroid Build Coastguard Worker                                                   NoItinerary, DSPROpnd>;
664*9880d681SAndroid Build Coastguard Worker
665*9880d681SAndroid Build Coastguard Workerclass PRECEU_PH_QBRA_DESC : ABSQ_S_PH_R2_DESC_BASE<"preceu.ph.qbra",
666*9880d681SAndroid Build Coastguard Worker                                                   int_mips_preceu_ph_qbra,
667*9880d681SAndroid Build Coastguard Worker                                                   NoItinerary, DSPROpnd>;
668*9880d681SAndroid Build Coastguard Worker
669*9880d681SAndroid Build Coastguard Worker// Shift
670*9880d681SAndroid Build Coastguard Workerclass SHLL_QB_DESC : SHLL_QB_R2_DESC_BASE<"shll.qb", null_frag, immZExt3,
671*9880d681SAndroid Build Coastguard Worker                                          NoItinerary, DSPROpnd, uimm3>,
672*9880d681SAndroid Build Coastguard Worker                     Defs<[DSPOutFlag22]>;
673*9880d681SAndroid Build Coastguard Worker
674*9880d681SAndroid Build Coastguard Workerclass SHLLV_QB_DESC : SHLL_QB_R3_DESC_BASE<"shllv.qb", int_mips_shll_qb,
675*9880d681SAndroid Build Coastguard Worker                                           NoItinerary, DSPROpnd>,
676*9880d681SAndroid Build Coastguard Worker                      Defs<[DSPOutFlag22]>;
677*9880d681SAndroid Build Coastguard Worker
678*9880d681SAndroid Build Coastguard Workerclass SHRL_QB_DESC : SHLL_QB_R2_DESC_BASE<"shrl.qb", null_frag, immZExt3,
679*9880d681SAndroid Build Coastguard Worker                                          NoItinerary, DSPROpnd, uimm3>;
680*9880d681SAndroid Build Coastguard Worker
681*9880d681SAndroid Build Coastguard Workerclass SHRLV_QB_DESC : SHLL_QB_R3_DESC_BASE<"shrlv.qb", int_mips_shrl_qb,
682*9880d681SAndroid Build Coastguard Worker                                           NoItinerary, DSPROpnd>;
683*9880d681SAndroid Build Coastguard Worker
684*9880d681SAndroid Build Coastguard Workerclass SHLL_PH_DESC : SHLL_QB_R2_DESC_BASE<"shll.ph", null_frag, immZExt4,
685*9880d681SAndroid Build Coastguard Worker                                          NoItinerary, DSPROpnd, uimm4>,
686*9880d681SAndroid Build Coastguard Worker                     Defs<[DSPOutFlag22]>;
687*9880d681SAndroid Build Coastguard Worker
688*9880d681SAndroid Build Coastguard Workerclass SHLLV_PH_DESC : SHLL_QB_R3_DESC_BASE<"shllv.ph", int_mips_shll_ph,
689*9880d681SAndroid Build Coastguard Worker                                           NoItinerary, DSPROpnd>,
690*9880d681SAndroid Build Coastguard Worker                      Defs<[DSPOutFlag22]>;
691*9880d681SAndroid Build Coastguard Worker
692*9880d681SAndroid Build Coastguard Workerclass SHLL_S_PH_DESC : SHLL_QB_R2_DESC_BASE<"shll_s.ph", int_mips_shll_s_ph,
693*9880d681SAndroid Build Coastguard Worker                                            immZExt4, NoItinerary, DSPROpnd,
694*9880d681SAndroid Build Coastguard Worker                                            uimm4>,
695*9880d681SAndroid Build Coastguard Worker                       Defs<[DSPOutFlag22]>;
696*9880d681SAndroid Build Coastguard Worker
697*9880d681SAndroid Build Coastguard Workerclass SHLLV_S_PH_DESC : SHLL_QB_R3_DESC_BASE<"shllv_s.ph", int_mips_shll_s_ph,
698*9880d681SAndroid Build Coastguard Worker                                             NoItinerary, DSPROpnd>,
699*9880d681SAndroid Build Coastguard Worker                        Defs<[DSPOutFlag22]>;
700*9880d681SAndroid Build Coastguard Worker
701*9880d681SAndroid Build Coastguard Workerclass SHRA_PH_DESC : SHLL_QB_R2_DESC_BASE<"shra.ph", null_frag, immZExt4,
702*9880d681SAndroid Build Coastguard Worker                                          NoItinerary, DSPROpnd, uimm4>;
703*9880d681SAndroid Build Coastguard Worker
704*9880d681SAndroid Build Coastguard Workerclass SHRAV_PH_DESC : SHLL_QB_R3_DESC_BASE<"shrav.ph", int_mips_shra_ph,
705*9880d681SAndroid Build Coastguard Worker                                           NoItinerary, DSPROpnd>;
706*9880d681SAndroid Build Coastguard Worker
707*9880d681SAndroid Build Coastguard Workerclass SHRA_R_PH_DESC : SHLL_QB_R2_DESC_BASE<"shra_r.ph", int_mips_shra_r_ph,
708*9880d681SAndroid Build Coastguard Worker                                            immZExt4, NoItinerary, DSPROpnd,
709*9880d681SAndroid Build Coastguard Worker                                            uimm4>;
710*9880d681SAndroid Build Coastguard Worker
711*9880d681SAndroid Build Coastguard Workerclass SHRAV_R_PH_DESC : SHLL_QB_R3_DESC_BASE<"shrav_r.ph", int_mips_shra_r_ph,
712*9880d681SAndroid Build Coastguard Worker                                             NoItinerary, DSPROpnd>;
713*9880d681SAndroid Build Coastguard Worker
714*9880d681SAndroid Build Coastguard Workerclass SHLL_S_W_DESC : SHLL_QB_R2_DESC_BASE<"shll_s.w", int_mips_shll_s_w,
715*9880d681SAndroid Build Coastguard Worker                                           immZExt5, NoItinerary, GPR32Opnd,
716*9880d681SAndroid Build Coastguard Worker                                           uimm5>,
717*9880d681SAndroid Build Coastguard Worker                      Defs<[DSPOutFlag22]>;
718*9880d681SAndroid Build Coastguard Worker
719*9880d681SAndroid Build Coastguard Workerclass SHLLV_S_W_DESC : SHLL_QB_R3_DESC_BASE<"shllv_s.w", int_mips_shll_s_w,
720*9880d681SAndroid Build Coastguard Worker                                            NoItinerary, GPR32Opnd>,
721*9880d681SAndroid Build Coastguard Worker                       Defs<[DSPOutFlag22]>;
722*9880d681SAndroid Build Coastguard Worker
723*9880d681SAndroid Build Coastguard Workerclass SHRA_R_W_DESC : SHLL_QB_R2_DESC_BASE<"shra_r.w", int_mips_shra_r_w,
724*9880d681SAndroid Build Coastguard Worker                                           immZExt5, NoItinerary, GPR32Opnd,
725*9880d681SAndroid Build Coastguard Worker                                           uimm5>;
726*9880d681SAndroid Build Coastguard Worker
727*9880d681SAndroid Build Coastguard Workerclass SHRAV_R_W_DESC : SHLL_QB_R3_DESC_BASE<"shrav_r.w", int_mips_shra_r_w,
728*9880d681SAndroid Build Coastguard Worker                                            NoItinerary, GPR32Opnd>;
729*9880d681SAndroid Build Coastguard Worker
730*9880d681SAndroid Build Coastguard Worker// Multiplication
731*9880d681SAndroid Build Coastguard Workerclass MULEU_S_PH_QBL_DESC : ADDU_QB_DESC_BASE<"muleu_s.ph.qbl",
732*9880d681SAndroid Build Coastguard Worker                                              int_mips_muleu_s_ph_qbl,
733*9880d681SAndroid Build Coastguard Worker                                              NoItinerary, DSPROpnd, DSPROpnd>,
734*9880d681SAndroid Build Coastguard Worker                            Defs<[DSPOutFlag21]>;
735*9880d681SAndroid Build Coastguard Worker
736*9880d681SAndroid Build Coastguard Workerclass MULEU_S_PH_QBR_DESC : ADDU_QB_DESC_BASE<"muleu_s.ph.qbr",
737*9880d681SAndroid Build Coastguard Worker                                              int_mips_muleu_s_ph_qbr,
738*9880d681SAndroid Build Coastguard Worker                                              NoItinerary, DSPROpnd, DSPROpnd>,
739*9880d681SAndroid Build Coastguard Worker                            Defs<[DSPOutFlag21]>;
740*9880d681SAndroid Build Coastguard Worker
741*9880d681SAndroid Build Coastguard Workerclass MULEQ_S_W_PHL_DESC : ADDU_QB_DESC_BASE<"muleq_s.w.phl",
742*9880d681SAndroid Build Coastguard Worker                                             int_mips_muleq_s_w_phl,
743*9880d681SAndroid Build Coastguard Worker                                             NoItinerary, GPR32Opnd, DSPROpnd>,
744*9880d681SAndroid Build Coastguard Worker                           IsCommutable, Defs<[DSPOutFlag21]>;
745*9880d681SAndroid Build Coastguard Worker
746*9880d681SAndroid Build Coastguard Workerclass MULEQ_S_W_PHR_DESC : ADDU_QB_DESC_BASE<"muleq_s.w.phr",
747*9880d681SAndroid Build Coastguard Worker                                             int_mips_muleq_s_w_phr,
748*9880d681SAndroid Build Coastguard Worker                                             NoItinerary, GPR32Opnd, DSPROpnd>,
749*9880d681SAndroid Build Coastguard Worker                           IsCommutable, Defs<[DSPOutFlag21]>;
750*9880d681SAndroid Build Coastguard Worker
751*9880d681SAndroid Build Coastguard Workerclass MULQ_RS_PH_DESC : ADDU_QB_DESC_BASE<"mulq_rs.ph", int_mips_mulq_rs_ph,
752*9880d681SAndroid Build Coastguard Worker                                          NoItinerary, DSPROpnd, DSPROpnd>,
753*9880d681SAndroid Build Coastguard Worker                        IsCommutable, Defs<[DSPOutFlag21]>;
754*9880d681SAndroid Build Coastguard Worker
755*9880d681SAndroid Build Coastguard Workerclass MULSAQ_S_W_PH_DESC : DPA_W_PH_DESC_BASE<"mulsaq_s.w.ph",
756*9880d681SAndroid Build Coastguard Worker                                              MipsMULSAQ_S_W_PH>,
757*9880d681SAndroid Build Coastguard Worker                           Defs<[DSPOutFlag16_19]>;
758*9880d681SAndroid Build Coastguard Worker
759*9880d681SAndroid Build Coastguard Workerclass MAQ_S_W_PHL_DESC : DPA_W_PH_DESC_BASE<"maq_s.w.phl", MipsMAQ_S_W_PHL>,
760*9880d681SAndroid Build Coastguard Worker                         Defs<[DSPOutFlag16_19]>;
761*9880d681SAndroid Build Coastguard Worker
762*9880d681SAndroid Build Coastguard Workerclass MAQ_S_W_PHR_DESC : DPA_W_PH_DESC_BASE<"maq_s.w.phr", MipsMAQ_S_W_PHR>,
763*9880d681SAndroid Build Coastguard Worker                         Defs<[DSPOutFlag16_19]>;
764*9880d681SAndroid Build Coastguard Worker
765*9880d681SAndroid Build Coastguard Workerclass MAQ_SA_W_PHL_DESC : DPA_W_PH_DESC_BASE<"maq_sa.w.phl", MipsMAQ_SA_W_PHL>,
766*9880d681SAndroid Build Coastguard Worker                          Defs<[DSPOutFlag16_19]>;
767*9880d681SAndroid Build Coastguard Worker
768*9880d681SAndroid Build Coastguard Workerclass MAQ_SA_W_PHR_DESC : DPA_W_PH_DESC_BASE<"maq_sa.w.phr", MipsMAQ_SA_W_PHR>,
769*9880d681SAndroid Build Coastguard Worker                          Defs<[DSPOutFlag16_19]>;
770*9880d681SAndroid Build Coastguard Worker
771*9880d681SAndroid Build Coastguard Worker// Move from/to hi/lo.
772*9880d681SAndroid Build Coastguard Workerclass MFHI_DESC : MFHI_DESC_BASE<"mfhi", ACC64DSPOpnd, MipsMFHI, NoItinerary>;
773*9880d681SAndroid Build Coastguard Workerclass MFLO_DESC : MFHI_DESC_BASE<"mflo", ACC64DSPOpnd, MipsMFLO, NoItinerary>;
774*9880d681SAndroid Build Coastguard Workerclass MTHI_DESC : MTHI_DESC_BASE<"mthi", HI32DSPOpnd, NoItinerary>;
775*9880d681SAndroid Build Coastguard Workerclass MTLO_DESC : MTHI_DESC_BASE<"mtlo", LO32DSPOpnd, NoItinerary>;
776*9880d681SAndroid Build Coastguard Worker
777*9880d681SAndroid Build Coastguard Worker// Dot product with accumulate/subtract
778*9880d681SAndroid Build Coastguard Workerclass DPAU_H_QBL_DESC : DPA_W_PH_DESC_BASE<"dpau.h.qbl", MipsDPAU_H_QBL>;
779*9880d681SAndroid Build Coastguard Worker
780*9880d681SAndroid Build Coastguard Workerclass DPAU_H_QBR_DESC : DPA_W_PH_DESC_BASE<"dpau.h.qbr", MipsDPAU_H_QBR>;
781*9880d681SAndroid Build Coastguard Worker
782*9880d681SAndroid Build Coastguard Workerclass DPSU_H_QBL_DESC : DPA_W_PH_DESC_BASE<"dpsu.h.qbl", MipsDPSU_H_QBL>;
783*9880d681SAndroid Build Coastguard Worker
784*9880d681SAndroid Build Coastguard Workerclass DPSU_H_QBR_DESC : DPA_W_PH_DESC_BASE<"dpsu.h.qbr", MipsDPSU_H_QBR>;
785*9880d681SAndroid Build Coastguard Worker
786*9880d681SAndroid Build Coastguard Workerclass DPAQ_S_W_PH_DESC : DPA_W_PH_DESC_BASE<"dpaq_s.w.ph", MipsDPAQ_S_W_PH>,
787*9880d681SAndroid Build Coastguard Worker                         Defs<[DSPOutFlag16_19]>;
788*9880d681SAndroid Build Coastguard Worker
789*9880d681SAndroid Build Coastguard Workerclass DPSQ_S_W_PH_DESC : DPA_W_PH_DESC_BASE<"dpsq_s.w.ph", MipsDPSQ_S_W_PH>,
790*9880d681SAndroid Build Coastguard Worker                         Defs<[DSPOutFlag16_19]>;
791*9880d681SAndroid Build Coastguard Worker
792*9880d681SAndroid Build Coastguard Workerclass DPAQ_SA_L_W_DESC : DPA_W_PH_DESC_BASE<"dpaq_sa.l.w", MipsDPAQ_SA_L_W>,
793*9880d681SAndroid Build Coastguard Worker                         Defs<[DSPOutFlag16_19]>;
794*9880d681SAndroid Build Coastguard Worker
795*9880d681SAndroid Build Coastguard Workerclass DPSQ_SA_L_W_DESC : DPA_W_PH_DESC_BASE<"dpsq_sa.l.w", MipsDPSQ_SA_L_W>,
796*9880d681SAndroid Build Coastguard Worker                         Defs<[DSPOutFlag16_19]>;
797*9880d681SAndroid Build Coastguard Worker
798*9880d681SAndroid Build Coastguard Workerclass MULT_DSP_DESC  : MULT_DESC_BASE<"mult", MipsMult, NoItinerary>;
799*9880d681SAndroid Build Coastguard Workerclass MULTU_DSP_DESC : MULT_DESC_BASE<"multu", MipsMultu, NoItinerary>;
800*9880d681SAndroid Build Coastguard Workerclass MADD_DSP_DESC  : MADD_DESC_BASE<"madd", MipsMAdd, NoItinerary>;
801*9880d681SAndroid Build Coastguard Workerclass MADDU_DSP_DESC : MADD_DESC_BASE<"maddu", MipsMAddu, NoItinerary>;
802*9880d681SAndroid Build Coastguard Workerclass MSUB_DSP_DESC  : MADD_DESC_BASE<"msub", MipsMSub, NoItinerary>;
803*9880d681SAndroid Build Coastguard Workerclass MSUBU_DSP_DESC : MADD_DESC_BASE<"msubu", MipsMSubu, NoItinerary>;
804*9880d681SAndroid Build Coastguard Worker
805*9880d681SAndroid Build Coastguard Worker// Comparison
806*9880d681SAndroid Build Coastguard Workerclass CMPU_EQ_QB_DESC : CMP_EQ_QB_R2_DESC_BASE<"cmpu.eq.qb",
807*9880d681SAndroid Build Coastguard Worker                                               int_mips_cmpu_eq_qb, NoItinerary,
808*9880d681SAndroid Build Coastguard Worker                                               DSPROpnd>,
809*9880d681SAndroid Build Coastguard Worker                        IsCommutable, Defs<[DSPCCond]>;
810*9880d681SAndroid Build Coastguard Worker
811*9880d681SAndroid Build Coastguard Workerclass CMPU_LT_QB_DESC : CMP_EQ_QB_R2_DESC_BASE<"cmpu.lt.qb",
812*9880d681SAndroid Build Coastguard Worker                                               int_mips_cmpu_lt_qb, NoItinerary,
813*9880d681SAndroid Build Coastguard Worker                                               DSPROpnd>, Defs<[DSPCCond]>;
814*9880d681SAndroid Build Coastguard Worker
815*9880d681SAndroid Build Coastguard Workerclass CMPU_LE_QB_DESC : CMP_EQ_QB_R2_DESC_BASE<"cmpu.le.qb",
816*9880d681SAndroid Build Coastguard Worker                                               int_mips_cmpu_le_qb, NoItinerary,
817*9880d681SAndroid Build Coastguard Worker                                               DSPROpnd>, Defs<[DSPCCond]>;
818*9880d681SAndroid Build Coastguard Worker
819*9880d681SAndroid Build Coastguard Workerclass CMPGU_EQ_QB_DESC : CMP_EQ_QB_R3_DESC_BASE<"cmpgu.eq.qb",
820*9880d681SAndroid Build Coastguard Worker                                                int_mips_cmpgu_eq_qb,
821*9880d681SAndroid Build Coastguard Worker                                                NoItinerary, GPR32Opnd, DSPROpnd>,
822*9880d681SAndroid Build Coastguard Worker                         IsCommutable;
823*9880d681SAndroid Build Coastguard Worker
824*9880d681SAndroid Build Coastguard Workerclass CMPGU_LT_QB_DESC : CMP_EQ_QB_R3_DESC_BASE<"cmpgu.lt.qb",
825*9880d681SAndroid Build Coastguard Worker                                                int_mips_cmpgu_lt_qb,
826*9880d681SAndroid Build Coastguard Worker                                                NoItinerary, GPR32Opnd, DSPROpnd>;
827*9880d681SAndroid Build Coastguard Worker
828*9880d681SAndroid Build Coastguard Workerclass CMPGU_LE_QB_DESC : CMP_EQ_QB_R3_DESC_BASE<"cmpgu.le.qb",
829*9880d681SAndroid Build Coastguard Worker                                                int_mips_cmpgu_le_qb,
830*9880d681SAndroid Build Coastguard Worker                                                NoItinerary, GPR32Opnd, DSPROpnd>;
831*9880d681SAndroid Build Coastguard Worker
832*9880d681SAndroid Build Coastguard Workerclass CMP_EQ_PH_DESC : CMP_EQ_QB_R2_DESC_BASE<"cmp.eq.ph", int_mips_cmp_eq_ph,
833*9880d681SAndroid Build Coastguard Worker                                              NoItinerary, DSPROpnd>,
834*9880d681SAndroid Build Coastguard Worker                       IsCommutable, Defs<[DSPCCond]>;
835*9880d681SAndroid Build Coastguard Worker
836*9880d681SAndroid Build Coastguard Workerclass CMP_LT_PH_DESC : CMP_EQ_QB_R2_DESC_BASE<"cmp.lt.ph", int_mips_cmp_lt_ph,
837*9880d681SAndroid Build Coastguard Worker                                              NoItinerary, DSPROpnd>,
838*9880d681SAndroid Build Coastguard Worker                       Defs<[DSPCCond]>;
839*9880d681SAndroid Build Coastguard Worker
840*9880d681SAndroid Build Coastguard Workerclass CMP_LE_PH_DESC : CMP_EQ_QB_R2_DESC_BASE<"cmp.le.ph", int_mips_cmp_le_ph,
841*9880d681SAndroid Build Coastguard Worker                                              NoItinerary, DSPROpnd>,
842*9880d681SAndroid Build Coastguard Worker                       Defs<[DSPCCond]>;
843*9880d681SAndroid Build Coastguard Worker
844*9880d681SAndroid Build Coastguard Worker// Misc
845*9880d681SAndroid Build Coastguard Workerclass BITREV_DESC : ABSQ_S_PH_R2_DESC_BASE<"bitrev", int_mips_bitrev,
846*9880d681SAndroid Build Coastguard Worker                                           NoItinerary, GPR32Opnd>;
847*9880d681SAndroid Build Coastguard Worker
848*9880d681SAndroid Build Coastguard Workerclass PACKRL_PH_DESC : CMP_EQ_QB_R3_DESC_BASE<"packrl.ph", int_mips_packrl_ph,
849*9880d681SAndroid Build Coastguard Worker                                              NoItinerary, DSPROpnd, DSPROpnd>;
850*9880d681SAndroid Build Coastguard Worker
851*9880d681SAndroid Build Coastguard Workerclass REPL_QB_DESC : REPL_DESC_BASE<"repl.qb", int_mips_repl_qb, uimm8,
852*9880d681SAndroid Build Coastguard Worker                                    immZExt8, NoItinerary, DSPROpnd>;
853*9880d681SAndroid Build Coastguard Worker
854*9880d681SAndroid Build Coastguard Workerclass REPL_PH_DESC : REPL_DESC_BASE<"repl.ph", int_mips_repl_ph, uimm10,
855*9880d681SAndroid Build Coastguard Worker                                    immZExt10, NoItinerary, DSPROpnd>;
856*9880d681SAndroid Build Coastguard Worker
857*9880d681SAndroid Build Coastguard Workerclass REPLV_QB_DESC : ABSQ_S_PH_R2_DESC_BASE<"replv.qb", int_mips_repl_qb,
858*9880d681SAndroid Build Coastguard Worker                                             NoItinerary, DSPROpnd, GPR32Opnd>;
859*9880d681SAndroid Build Coastguard Worker
860*9880d681SAndroid Build Coastguard Workerclass REPLV_PH_DESC : ABSQ_S_PH_R2_DESC_BASE<"replv.ph", int_mips_repl_ph,
861*9880d681SAndroid Build Coastguard Worker                                             NoItinerary, DSPROpnd, GPR32Opnd>;
862*9880d681SAndroid Build Coastguard Worker
863*9880d681SAndroid Build Coastguard Workerclass PICK_QB_DESC : CMP_EQ_QB_R3_DESC_BASE<"pick.qb", int_mips_pick_qb,
864*9880d681SAndroid Build Coastguard Worker                                            NoItinerary, DSPROpnd, DSPROpnd>,
865*9880d681SAndroid Build Coastguard Worker                     Uses<[DSPCCond]>;
866*9880d681SAndroid Build Coastguard Worker
867*9880d681SAndroid Build Coastguard Workerclass PICK_PH_DESC : CMP_EQ_QB_R3_DESC_BASE<"pick.ph", int_mips_pick_ph,
868*9880d681SAndroid Build Coastguard Worker                                            NoItinerary, DSPROpnd, DSPROpnd>,
869*9880d681SAndroid Build Coastguard Worker                     Uses<[DSPCCond]>;
870*9880d681SAndroid Build Coastguard Worker
871*9880d681SAndroid Build Coastguard Workerclass LWX_DESC : LX_DESC_BASE<"lwx", int_mips_lwx, NoItinerary>;
872*9880d681SAndroid Build Coastguard Worker
873*9880d681SAndroid Build Coastguard Workerclass LHX_DESC : LX_DESC_BASE<"lhx", int_mips_lhx, NoItinerary>;
874*9880d681SAndroid Build Coastguard Worker
875*9880d681SAndroid Build Coastguard Workerclass LBUX_DESC : LX_DESC_BASE<"lbux", int_mips_lbux, NoItinerary>;
876*9880d681SAndroid Build Coastguard Worker
877*9880d681SAndroid Build Coastguard Workerclass BPOSGE32_DESC : BPOSGE32_DESC_BASE<"bposge32", brtarget, NoItinerary>;
878*9880d681SAndroid Build Coastguard Worker
879*9880d681SAndroid Build Coastguard Worker// Extr
880*9880d681SAndroid Build Coastguard Workerclass EXTP_DESC : EXTR_W_TY1_R1_DESC_BASE<"extp", MipsEXTP, NoItinerary>,
881*9880d681SAndroid Build Coastguard Worker                  Uses<[DSPPos]>, Defs<[DSPEFI]>;
882*9880d681SAndroid Build Coastguard Worker
883*9880d681SAndroid Build Coastguard Workerclass EXTPV_DESC : EXTR_W_TY1_R2_DESC_BASE<"extpv", MipsEXTP, NoItinerary>,
884*9880d681SAndroid Build Coastguard Worker                   Uses<[DSPPos]>, Defs<[DSPEFI]>;
885*9880d681SAndroid Build Coastguard Worker
886*9880d681SAndroid Build Coastguard Workerclass EXTPDP_DESC : EXTR_W_TY1_R1_DESC_BASE<"extpdp", MipsEXTPDP, NoItinerary>,
887*9880d681SAndroid Build Coastguard Worker                    Uses<[DSPPos]>, Defs<[DSPPos, DSPEFI]>;
888*9880d681SAndroid Build Coastguard Worker
889*9880d681SAndroid Build Coastguard Workerclass EXTPDPV_DESC : EXTR_W_TY1_R2_DESC_BASE<"extpdpv", MipsEXTPDP,
890*9880d681SAndroid Build Coastguard Worker                                             NoItinerary>,
891*9880d681SAndroid Build Coastguard Worker                     Uses<[DSPPos]>, Defs<[DSPPos, DSPEFI]>;
892*9880d681SAndroid Build Coastguard Worker
893*9880d681SAndroid Build Coastguard Workerclass EXTR_W_DESC : EXTR_W_TY1_R1_DESC_BASE<"extr.w", MipsEXTR_W, NoItinerary>,
894*9880d681SAndroid Build Coastguard Worker                    Defs<[DSPOutFlag23]>;
895*9880d681SAndroid Build Coastguard Worker
896*9880d681SAndroid Build Coastguard Workerclass EXTRV_W_DESC : EXTR_W_TY1_R2_DESC_BASE<"extrv.w", MipsEXTR_W,
897*9880d681SAndroid Build Coastguard Worker                                             NoItinerary>, Defs<[DSPOutFlag23]>;
898*9880d681SAndroid Build Coastguard Worker
899*9880d681SAndroid Build Coastguard Workerclass EXTR_R_W_DESC : EXTR_W_TY1_R1_DESC_BASE<"extr_r.w", MipsEXTR_R_W,
900*9880d681SAndroid Build Coastguard Worker                                              NoItinerary>,
901*9880d681SAndroid Build Coastguard Worker                      Defs<[DSPOutFlag23]>;
902*9880d681SAndroid Build Coastguard Worker
903*9880d681SAndroid Build Coastguard Workerclass EXTRV_R_W_DESC : EXTR_W_TY1_R2_DESC_BASE<"extrv_r.w", MipsEXTR_R_W,
904*9880d681SAndroid Build Coastguard Worker                                               NoItinerary>,
905*9880d681SAndroid Build Coastguard Worker                       Defs<[DSPOutFlag23]>;
906*9880d681SAndroid Build Coastguard Worker
907*9880d681SAndroid Build Coastguard Workerclass EXTR_RS_W_DESC : EXTR_W_TY1_R1_DESC_BASE<"extr_rs.w", MipsEXTR_RS_W,
908*9880d681SAndroid Build Coastguard Worker                                               NoItinerary>,
909*9880d681SAndroid Build Coastguard Worker                       Defs<[DSPOutFlag23]>;
910*9880d681SAndroid Build Coastguard Worker
911*9880d681SAndroid Build Coastguard Workerclass EXTRV_RS_W_DESC : EXTR_W_TY1_R2_DESC_BASE<"extrv_rs.w", MipsEXTR_RS_W,
912*9880d681SAndroid Build Coastguard Worker                                                NoItinerary>,
913*9880d681SAndroid Build Coastguard Worker                        Defs<[DSPOutFlag23]>;
914*9880d681SAndroid Build Coastguard Worker
915*9880d681SAndroid Build Coastguard Workerclass EXTR_S_H_DESC : EXTR_W_TY1_R1_DESC_BASE<"extr_s.h", MipsEXTR_S_H,
916*9880d681SAndroid Build Coastguard Worker                                              NoItinerary>,
917*9880d681SAndroid Build Coastguard Worker                      Defs<[DSPOutFlag23]>;
918*9880d681SAndroid Build Coastguard Worker
919*9880d681SAndroid Build Coastguard Workerclass EXTRV_S_H_DESC : EXTR_W_TY1_R2_DESC_BASE<"extrv_s.h", MipsEXTR_S_H,
920*9880d681SAndroid Build Coastguard Worker                                               NoItinerary>,
921*9880d681SAndroid Build Coastguard Worker                       Defs<[DSPOutFlag23]>;
922*9880d681SAndroid Build Coastguard Worker
923*9880d681SAndroid Build Coastguard Workerclass SHILO_DESC : SHILO_R1_DESC_BASE<"shilo", MipsSHILO>;
924*9880d681SAndroid Build Coastguard Worker
925*9880d681SAndroid Build Coastguard Workerclass SHILOV_DESC : SHILO_R2_DESC_BASE<"shilov", MipsSHILO>;
926*9880d681SAndroid Build Coastguard Worker
927*9880d681SAndroid Build Coastguard Workerclass MTHLIP_DESC : MTHLIP_DESC_BASE<"mthlip", MipsMTHLIP>, Defs<[DSPPos]>;
928*9880d681SAndroid Build Coastguard Worker
929*9880d681SAndroid Build Coastguard Workerclass RDDSP_DESC : RDDSP_DESC_BASE<"rddsp", int_mips_rddsp, NoItinerary>;
930*9880d681SAndroid Build Coastguard Worker
931*9880d681SAndroid Build Coastguard Workerclass WRDSP_DESC : WRDSP_DESC_BASE<"wrdsp", int_mips_wrdsp, NoItinerary>;
932*9880d681SAndroid Build Coastguard Worker
933*9880d681SAndroid Build Coastguard Workerclass INSV_DESC : INSV_DESC_BASE<"insv", int_mips_insv, NoItinerary>,
934*9880d681SAndroid Build Coastguard Worker                  Uses<[DSPPos, DSPSCount]>;
935*9880d681SAndroid Build Coastguard Worker
936*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
937*9880d681SAndroid Build Coastguard Worker// MIPS DSP Rev 2
938*9880d681SAndroid Build Coastguard Worker// Addition/subtraction
939*9880d681SAndroid Build Coastguard Workerclass ADDU_PH_DESC : ADDU_QB_DESC_BASE<"addu.ph", int_mips_addu_ph, NoItinerary,
940*9880d681SAndroid Build Coastguard Worker                                       DSPROpnd, DSPROpnd>, IsCommutable,
941*9880d681SAndroid Build Coastguard Worker                     Defs<[DSPOutFlag20]>;
942*9880d681SAndroid Build Coastguard Worker
943*9880d681SAndroid Build Coastguard Workerclass ADDU_S_PH_DESC : ADDU_QB_DESC_BASE<"addu_s.ph", int_mips_addu_s_ph,
944*9880d681SAndroid Build Coastguard Worker                                         NoItinerary, DSPROpnd, DSPROpnd>,
945*9880d681SAndroid Build Coastguard Worker                       IsCommutable, Defs<[DSPOutFlag20]>;
946*9880d681SAndroid Build Coastguard Worker
947*9880d681SAndroid Build Coastguard Workerclass SUBU_PH_DESC : ADDU_QB_DESC_BASE<"subu.ph", int_mips_subu_ph, NoItinerary,
948*9880d681SAndroid Build Coastguard Worker                                       DSPROpnd, DSPROpnd>,
949*9880d681SAndroid Build Coastguard Worker                     Defs<[DSPOutFlag20]>;
950*9880d681SAndroid Build Coastguard Worker
951*9880d681SAndroid Build Coastguard Workerclass SUBU_S_PH_DESC : ADDU_QB_DESC_BASE<"subu_s.ph", int_mips_subu_s_ph,
952*9880d681SAndroid Build Coastguard Worker                                         NoItinerary, DSPROpnd, DSPROpnd>,
953*9880d681SAndroid Build Coastguard Worker                       Defs<[DSPOutFlag20]>;
954*9880d681SAndroid Build Coastguard Worker
955*9880d681SAndroid Build Coastguard Workerclass ADDUH_QB_DESC : ADDUH_QB_DESC_BASE<"adduh.qb", int_mips_adduh_qb,
956*9880d681SAndroid Build Coastguard Worker                                         NoItinerary, DSPROpnd>, IsCommutable;
957*9880d681SAndroid Build Coastguard Worker
958*9880d681SAndroid Build Coastguard Workerclass ADDUH_R_QB_DESC : ADDUH_QB_DESC_BASE<"adduh_r.qb", int_mips_adduh_r_qb,
959*9880d681SAndroid Build Coastguard Worker                                           NoItinerary, DSPROpnd>, IsCommutable;
960*9880d681SAndroid Build Coastguard Worker
961*9880d681SAndroid Build Coastguard Workerclass SUBUH_QB_DESC : ADDUH_QB_DESC_BASE<"subuh.qb", int_mips_subuh_qb,
962*9880d681SAndroid Build Coastguard Worker                                         NoItinerary, DSPROpnd>;
963*9880d681SAndroid Build Coastguard Worker
964*9880d681SAndroid Build Coastguard Workerclass SUBUH_R_QB_DESC : ADDUH_QB_DESC_BASE<"subuh_r.qb", int_mips_subuh_r_qb,
965*9880d681SAndroid Build Coastguard Worker                                           NoItinerary, DSPROpnd>;
966*9880d681SAndroid Build Coastguard Worker
967*9880d681SAndroid Build Coastguard Workerclass ADDQH_PH_DESC : ADDUH_QB_DESC_BASE<"addqh.ph", int_mips_addqh_ph,
968*9880d681SAndroid Build Coastguard Worker                                         NoItinerary, DSPROpnd>, IsCommutable;
969*9880d681SAndroid Build Coastguard Worker
970*9880d681SAndroid Build Coastguard Workerclass ADDQH_R_PH_DESC : ADDUH_QB_DESC_BASE<"addqh_r.ph", int_mips_addqh_r_ph,
971*9880d681SAndroid Build Coastguard Worker                                           NoItinerary, DSPROpnd>, IsCommutable;
972*9880d681SAndroid Build Coastguard Worker
973*9880d681SAndroid Build Coastguard Workerclass SUBQH_PH_DESC : ADDUH_QB_DESC_BASE<"subqh.ph", int_mips_subqh_ph,
974*9880d681SAndroid Build Coastguard Worker                                         NoItinerary, DSPROpnd>;
975*9880d681SAndroid Build Coastguard Worker
976*9880d681SAndroid Build Coastguard Workerclass SUBQH_R_PH_DESC : ADDUH_QB_DESC_BASE<"subqh_r.ph", int_mips_subqh_r_ph,
977*9880d681SAndroid Build Coastguard Worker                                           NoItinerary, DSPROpnd>;
978*9880d681SAndroid Build Coastguard Worker
979*9880d681SAndroid Build Coastguard Workerclass ADDQH_W_DESC : ADDUH_QB_DESC_BASE<"addqh.w", int_mips_addqh_w,
980*9880d681SAndroid Build Coastguard Worker                                        NoItinerary, GPR32Opnd>, IsCommutable;
981*9880d681SAndroid Build Coastguard Worker
982*9880d681SAndroid Build Coastguard Workerclass ADDQH_R_W_DESC : ADDUH_QB_DESC_BASE<"addqh_r.w", int_mips_addqh_r_w,
983*9880d681SAndroid Build Coastguard Worker                                          NoItinerary, GPR32Opnd>, IsCommutable;
984*9880d681SAndroid Build Coastguard Worker
985*9880d681SAndroid Build Coastguard Workerclass SUBQH_W_DESC : ADDUH_QB_DESC_BASE<"subqh.w", int_mips_subqh_w,
986*9880d681SAndroid Build Coastguard Worker                                        NoItinerary, GPR32Opnd>;
987*9880d681SAndroid Build Coastguard Worker
988*9880d681SAndroid Build Coastguard Workerclass SUBQH_R_W_DESC : ADDUH_QB_DESC_BASE<"subqh_r.w", int_mips_subqh_r_w,
989*9880d681SAndroid Build Coastguard Worker                                          NoItinerary, GPR32Opnd>;
990*9880d681SAndroid Build Coastguard Worker
991*9880d681SAndroid Build Coastguard Worker// Comparison
992*9880d681SAndroid Build Coastguard Workerclass CMPGDU_EQ_QB_DESC : CMP_EQ_QB_R3_DESC_BASE<"cmpgdu.eq.qb",
993*9880d681SAndroid Build Coastguard Worker                                                 int_mips_cmpgdu_eq_qb,
994*9880d681SAndroid Build Coastguard Worker                                                 NoItinerary, GPR32Opnd, DSPROpnd>,
995*9880d681SAndroid Build Coastguard Worker                          IsCommutable, Defs<[DSPCCond]>;
996*9880d681SAndroid Build Coastguard Worker
997*9880d681SAndroid Build Coastguard Workerclass CMPGDU_LT_QB_DESC : CMP_EQ_QB_R3_DESC_BASE<"cmpgdu.lt.qb",
998*9880d681SAndroid Build Coastguard Worker                                                 int_mips_cmpgdu_lt_qb,
999*9880d681SAndroid Build Coastguard Worker                                                 NoItinerary, GPR32Opnd, DSPROpnd>,
1000*9880d681SAndroid Build Coastguard Worker                          Defs<[DSPCCond]>;
1001*9880d681SAndroid Build Coastguard Worker
1002*9880d681SAndroid Build Coastguard Workerclass CMPGDU_LE_QB_DESC : CMP_EQ_QB_R3_DESC_BASE<"cmpgdu.le.qb",
1003*9880d681SAndroid Build Coastguard Worker                                                 int_mips_cmpgdu_le_qb,
1004*9880d681SAndroid Build Coastguard Worker                                                 NoItinerary, GPR32Opnd, DSPROpnd>,
1005*9880d681SAndroid Build Coastguard Worker                          Defs<[DSPCCond]>;
1006*9880d681SAndroid Build Coastguard Worker
1007*9880d681SAndroid Build Coastguard Worker// Absolute
1008*9880d681SAndroid Build Coastguard Workerclass ABSQ_S_QB_DESC : ABSQ_S_PH_R2_DESC_BASE<"absq_s.qb", int_mips_absq_s_qb,
1009*9880d681SAndroid Build Coastguard Worker                                              NoItinerary, DSPROpnd>,
1010*9880d681SAndroid Build Coastguard Worker                       Defs<[DSPOutFlag20]>;
1011*9880d681SAndroid Build Coastguard Worker
1012*9880d681SAndroid Build Coastguard Worker// Multiplication
1013*9880d681SAndroid Build Coastguard Workerclass MUL_PH_DESC : ADDUH_QB_DESC_BASE<"mul.ph", null_frag, NoItinerary,
1014*9880d681SAndroid Build Coastguard Worker                                       DSPROpnd>, IsCommutable,
1015*9880d681SAndroid Build Coastguard Worker                    Defs<[DSPOutFlag21]>;
1016*9880d681SAndroid Build Coastguard Worker
1017*9880d681SAndroid Build Coastguard Workerclass MUL_S_PH_DESC : ADDUH_QB_DESC_BASE<"mul_s.ph", int_mips_mul_s_ph,
1018*9880d681SAndroid Build Coastguard Worker                                         NoItinerary, DSPROpnd>, IsCommutable,
1019*9880d681SAndroid Build Coastguard Worker                      Defs<[DSPOutFlag21]>;
1020*9880d681SAndroid Build Coastguard Worker
1021*9880d681SAndroid Build Coastguard Workerclass MULQ_S_W_DESC : ADDUH_QB_DESC_BASE<"mulq_s.w", int_mips_mulq_s_w,
1022*9880d681SAndroid Build Coastguard Worker                                         NoItinerary, GPR32Opnd>, IsCommutable,
1023*9880d681SAndroid Build Coastguard Worker                      Defs<[DSPOutFlag21]>;
1024*9880d681SAndroid Build Coastguard Worker
1025*9880d681SAndroid Build Coastguard Workerclass MULQ_RS_W_DESC : ADDUH_QB_DESC_BASE<"mulq_rs.w", int_mips_mulq_rs_w,
1026*9880d681SAndroid Build Coastguard Worker                                          NoItinerary, GPR32Opnd>, IsCommutable,
1027*9880d681SAndroid Build Coastguard Worker                       Defs<[DSPOutFlag21]>;
1028*9880d681SAndroid Build Coastguard Worker
1029*9880d681SAndroid Build Coastguard Workerclass MULQ_S_PH_DESC : ADDU_QB_DESC_BASE<"mulq_s.ph", int_mips_mulq_s_ph,
1030*9880d681SAndroid Build Coastguard Worker                                         NoItinerary, DSPROpnd, DSPROpnd>,
1031*9880d681SAndroid Build Coastguard Worker                       IsCommutable, Defs<[DSPOutFlag21]>;
1032*9880d681SAndroid Build Coastguard Worker
1033*9880d681SAndroid Build Coastguard Worker// Dot product with accumulate/subtract
1034*9880d681SAndroid Build Coastguard Workerclass DPA_W_PH_DESC : DPA_W_PH_DESC_BASE<"dpa.w.ph", MipsDPA_W_PH>;
1035*9880d681SAndroid Build Coastguard Worker
1036*9880d681SAndroid Build Coastguard Workerclass DPS_W_PH_DESC : DPA_W_PH_DESC_BASE<"dps.w.ph", MipsDPS_W_PH>;
1037*9880d681SAndroid Build Coastguard Worker
1038*9880d681SAndroid Build Coastguard Workerclass DPAQX_S_W_PH_DESC : DPA_W_PH_DESC_BASE<"dpaqx_s.w.ph", MipsDPAQX_S_W_PH>,
1039*9880d681SAndroid Build Coastguard Worker                          Defs<[DSPOutFlag16_19]>;
1040*9880d681SAndroid Build Coastguard Worker
1041*9880d681SAndroid Build Coastguard Workerclass DPAQX_SA_W_PH_DESC : DPA_W_PH_DESC_BASE<"dpaqx_sa.w.ph",
1042*9880d681SAndroid Build Coastguard Worker                                              MipsDPAQX_SA_W_PH>,
1043*9880d681SAndroid Build Coastguard Worker                           Defs<[DSPOutFlag16_19]>;
1044*9880d681SAndroid Build Coastguard Worker
1045*9880d681SAndroid Build Coastguard Workerclass DPAX_W_PH_DESC : DPA_W_PH_DESC_BASE<"dpax.w.ph", MipsDPAX_W_PH>;
1046*9880d681SAndroid Build Coastguard Worker
1047*9880d681SAndroid Build Coastguard Workerclass DPSX_W_PH_DESC : DPA_W_PH_DESC_BASE<"dpsx.w.ph", MipsDPSX_W_PH>;
1048*9880d681SAndroid Build Coastguard Worker
1049*9880d681SAndroid Build Coastguard Workerclass DPSQX_S_W_PH_DESC : DPA_W_PH_DESC_BASE<"dpsqx_s.w.ph", MipsDPSQX_S_W_PH>,
1050*9880d681SAndroid Build Coastguard Worker                          Defs<[DSPOutFlag16_19]>;
1051*9880d681SAndroid Build Coastguard Worker
1052*9880d681SAndroid Build Coastguard Workerclass DPSQX_SA_W_PH_DESC : DPA_W_PH_DESC_BASE<"dpsqx_sa.w.ph",
1053*9880d681SAndroid Build Coastguard Worker                                              MipsDPSQX_SA_W_PH>,
1054*9880d681SAndroid Build Coastguard Worker                           Defs<[DSPOutFlag16_19]>;
1055*9880d681SAndroid Build Coastguard Worker
1056*9880d681SAndroid Build Coastguard Workerclass MULSA_W_PH_DESC : DPA_W_PH_DESC_BASE<"mulsa.w.ph", MipsMULSA_W_PH>;
1057*9880d681SAndroid Build Coastguard Worker
1058*9880d681SAndroid Build Coastguard Worker// Precision reduce/expand
1059*9880d681SAndroid Build Coastguard Workerclass PRECR_QB_PH_DESC : CMP_EQ_QB_R3_DESC_BASE<"precr.qb.ph",
1060*9880d681SAndroid Build Coastguard Worker                                                int_mips_precr_qb_ph,
1061*9880d681SAndroid Build Coastguard Worker                                                NoItinerary, DSPROpnd, DSPROpnd>;
1062*9880d681SAndroid Build Coastguard Worker
1063*9880d681SAndroid Build Coastguard Workerclass PRECR_SRA_PH_W_DESC : PRECR_SRA_PH_W_DESC_BASE<"precr_sra.ph.w",
1064*9880d681SAndroid Build Coastguard Worker                                                     int_mips_precr_sra_ph_w,
1065*9880d681SAndroid Build Coastguard Worker                                                     NoItinerary, DSPROpnd,
1066*9880d681SAndroid Build Coastguard Worker                                                     GPR32Opnd>;
1067*9880d681SAndroid Build Coastguard Worker
1068*9880d681SAndroid Build Coastguard Workerclass PRECR_SRA_R_PH_W_DESC : PRECR_SRA_PH_W_DESC_BASE<"precr_sra_r.ph.w",
1069*9880d681SAndroid Build Coastguard Worker                                                      int_mips_precr_sra_r_ph_w,
1070*9880d681SAndroid Build Coastguard Worker                                                       NoItinerary, DSPROpnd,
1071*9880d681SAndroid Build Coastguard Worker                                                       GPR32Opnd>;
1072*9880d681SAndroid Build Coastguard Worker
1073*9880d681SAndroid Build Coastguard Worker// Shift
1074*9880d681SAndroid Build Coastguard Workerclass SHRA_QB_DESC : SHLL_QB_R2_DESC_BASE<"shra.qb", null_frag, immZExt3,
1075*9880d681SAndroid Build Coastguard Worker                                          NoItinerary, DSPROpnd, uimm3>;
1076*9880d681SAndroid Build Coastguard Worker
1077*9880d681SAndroid Build Coastguard Workerclass SHRAV_QB_DESC : SHLL_QB_R3_DESC_BASE<"shrav.qb", int_mips_shra_qb,
1078*9880d681SAndroid Build Coastguard Worker                                           NoItinerary, DSPROpnd>;
1079*9880d681SAndroid Build Coastguard Worker
1080*9880d681SAndroid Build Coastguard Workerclass SHRA_R_QB_DESC : SHLL_QB_R2_DESC_BASE<"shra_r.qb", int_mips_shra_r_qb,
1081*9880d681SAndroid Build Coastguard Worker                                            immZExt3, NoItinerary, DSPROpnd,
1082*9880d681SAndroid Build Coastguard Worker                                            uimm3>;
1083*9880d681SAndroid Build Coastguard Worker
1084*9880d681SAndroid Build Coastguard Workerclass SHRAV_R_QB_DESC : SHLL_QB_R3_DESC_BASE<"shrav_r.qb", int_mips_shra_r_qb,
1085*9880d681SAndroid Build Coastguard Worker                                             NoItinerary, DSPROpnd>;
1086*9880d681SAndroid Build Coastguard Worker
1087*9880d681SAndroid Build Coastguard Workerclass SHRL_PH_DESC : SHLL_QB_R2_DESC_BASE<"shrl.ph", null_frag, immZExt4,
1088*9880d681SAndroid Build Coastguard Worker                                          NoItinerary, DSPROpnd, uimm4>;
1089*9880d681SAndroid Build Coastguard Worker
1090*9880d681SAndroid Build Coastguard Workerclass SHRLV_PH_DESC : SHLL_QB_R3_DESC_BASE<"shrlv.ph", int_mips_shrl_ph,
1091*9880d681SAndroid Build Coastguard Worker                                           NoItinerary, DSPROpnd>;
1092*9880d681SAndroid Build Coastguard Worker
1093*9880d681SAndroid Build Coastguard Worker// Misc
1094*9880d681SAndroid Build Coastguard Workerclass APPEND_DESC : APPEND_DESC_BASE<"append", int_mips_append, uimm5, immZExt5,
1095*9880d681SAndroid Build Coastguard Worker                                     NoItinerary>;
1096*9880d681SAndroid Build Coastguard Worker
1097*9880d681SAndroid Build Coastguard Workerclass BALIGN_DESC : APPEND_DESC_BASE<"balign", int_mips_balign, uimm2, immZExt2,
1098*9880d681SAndroid Build Coastguard Worker                                     NoItinerary>;
1099*9880d681SAndroid Build Coastguard Worker
1100*9880d681SAndroid Build Coastguard Workerclass PREPEND_DESC : APPEND_DESC_BASE<"prepend", int_mips_prepend, uimm5,
1101*9880d681SAndroid Build Coastguard Worker                                      immZExt5, NoItinerary>;
1102*9880d681SAndroid Build Coastguard Worker
1103*9880d681SAndroid Build Coastguard Worker// Pseudos.
1104*9880d681SAndroid Build Coastguard Workerdef BPOSGE32_PSEUDO : BPOSGE32_PSEUDO_DESC_BASE<int_mips_bposge32,
1105*9880d681SAndroid Build Coastguard Worker                                                NoItinerary>, Uses<[DSPPos]>;
1106*9880d681SAndroid Build Coastguard Worker
1107*9880d681SAndroid Build Coastguard Worker// Instruction defs.
1108*9880d681SAndroid Build Coastguard Worker// MIPS DSP Rev 1
1109*9880d681SAndroid Build Coastguard Workerdef ADDU_QB : DspMMRel, ADDU_QB_ENC, ADDU_QB_DESC;
1110*9880d681SAndroid Build Coastguard Workerdef ADDU_S_QB : DspMMRel, ADDU_S_QB_ENC, ADDU_S_QB_DESC;
1111*9880d681SAndroid Build Coastguard Workerdef SUBU_QB : DspMMRel, SUBU_QB_ENC, SUBU_QB_DESC;
1112*9880d681SAndroid Build Coastguard Workerdef SUBU_S_QB : DspMMRel, SUBU_S_QB_ENC, SUBU_S_QB_DESC;
1113*9880d681SAndroid Build Coastguard Workerdef ADDQ_PH : DspMMRel, ADDQ_PH_ENC, ADDQ_PH_DESC;
1114*9880d681SAndroid Build Coastguard Workerdef ADDQ_S_PH : DspMMRel, ADDQ_S_PH_ENC, ADDQ_S_PH_DESC;
1115*9880d681SAndroid Build Coastguard Workerdef SUBQ_PH : DspMMRel, SUBQ_PH_ENC, SUBQ_PH_DESC;
1116*9880d681SAndroid Build Coastguard Workerdef SUBQ_S_PH : DspMMRel, SUBQ_S_PH_ENC, SUBQ_S_PH_DESC;
1117*9880d681SAndroid Build Coastguard Workerdef ADDQ_S_W : DspMMRel, ADDQ_S_W_ENC, ADDQ_S_W_DESC;
1118*9880d681SAndroid Build Coastguard Workerdef SUBQ_S_W : DspMMRel, SUBQ_S_W_ENC, SUBQ_S_W_DESC;
1119*9880d681SAndroid Build Coastguard Workerdef ADDSC : DspMMRel, ADDSC_ENC, ADDSC_DESC;
1120*9880d681SAndroid Build Coastguard Workerdef ADDWC : DspMMRel, ADDWC_ENC, ADDWC_DESC;
1121*9880d681SAndroid Build Coastguard Workerdef MODSUB : DspMMRel, MODSUB_ENC, MODSUB_DESC;
1122*9880d681SAndroid Build Coastguard Workerdef RADDU_W_QB : DspMMRel, RADDU_W_QB_ENC, RADDU_W_QB_DESC;
1123*9880d681SAndroid Build Coastguard Workerdef ABSQ_S_PH : DspMMRel, ABSQ_S_PH_ENC, ABSQ_S_PH_DESC;
1124*9880d681SAndroid Build Coastguard Workerdef ABSQ_S_W : DspMMRel, ABSQ_S_W_ENC, ABSQ_S_W_DESC;
1125*9880d681SAndroid Build Coastguard Workerdef PRECRQ_QB_PH : DspMMRel, PRECRQ_QB_PH_ENC, PRECRQ_QB_PH_DESC;
1126*9880d681SAndroid Build Coastguard Workerdef PRECRQ_PH_W : DspMMRel, PRECRQ_PH_W_ENC, PRECRQ_PH_W_DESC;
1127*9880d681SAndroid Build Coastguard Workerdef PRECRQ_RS_PH_W : DspMMRel, PRECRQ_RS_PH_W_ENC, PRECRQ_RS_PH_W_DESC;
1128*9880d681SAndroid Build Coastguard Workerdef PRECRQU_S_QB_PH : DspMMRel, PRECRQU_S_QB_PH_ENC, PRECRQU_S_QB_PH_DESC;
1129*9880d681SAndroid Build Coastguard Workerdef PRECEQ_W_PHL : DspMMRel, PRECEQ_W_PHL_ENC, PRECEQ_W_PHL_DESC;
1130*9880d681SAndroid Build Coastguard Workerdef PRECEQ_W_PHR : DspMMRel, PRECEQ_W_PHR_ENC, PRECEQ_W_PHR_DESC;
1131*9880d681SAndroid Build Coastguard Workerdef PRECEQU_PH_QBL : DspMMRel, PRECEQU_PH_QBL_ENC, PRECEQU_PH_QBL_DESC;
1132*9880d681SAndroid Build Coastguard Workerdef PRECEQU_PH_QBR : DspMMRel, PRECEQU_PH_QBR_ENC, PRECEQU_PH_QBR_DESC;
1133*9880d681SAndroid Build Coastguard Workerdef PRECEQU_PH_QBLA : DspMMRel, PRECEQU_PH_QBLA_ENC, PRECEQU_PH_QBLA_DESC;
1134*9880d681SAndroid Build Coastguard Workerdef PRECEQU_PH_QBRA : DspMMRel, PRECEQU_PH_QBRA_ENC, PRECEQU_PH_QBRA_DESC;
1135*9880d681SAndroid Build Coastguard Workerdef PRECEU_PH_QBL : DspMMRel, PRECEU_PH_QBL_ENC, PRECEU_PH_QBL_DESC;
1136*9880d681SAndroid Build Coastguard Workerdef PRECEU_PH_QBR : DspMMRel, PRECEU_PH_QBR_ENC, PRECEU_PH_QBR_DESC;
1137*9880d681SAndroid Build Coastguard Workerdef PRECEU_PH_QBLA : DspMMRel, PRECEU_PH_QBLA_ENC, PRECEU_PH_QBLA_DESC;
1138*9880d681SAndroid Build Coastguard Workerdef PRECEU_PH_QBRA : DspMMRel, PRECEU_PH_QBRA_ENC, PRECEU_PH_QBRA_DESC;
1139*9880d681SAndroid Build Coastguard Workerdef SHLL_QB : DspMMRel, SHLL_QB_ENC, SHLL_QB_DESC;
1140*9880d681SAndroid Build Coastguard Workerdef SHLLV_QB : DspMMRel, SHLLV_QB_ENC, SHLLV_QB_DESC;
1141*9880d681SAndroid Build Coastguard Workerdef SHRL_QB : DspMMRel, SHRL_QB_ENC, SHRL_QB_DESC;
1142*9880d681SAndroid Build Coastguard Workerdef SHRLV_QB : DspMMRel, SHRLV_QB_ENC, SHRLV_QB_DESC;
1143*9880d681SAndroid Build Coastguard Workerdef SHLL_PH : DspMMRel, SHLL_PH_ENC, SHLL_PH_DESC;
1144*9880d681SAndroid Build Coastguard Workerdef SHLLV_PH : DspMMRel, SHLLV_PH_ENC, SHLLV_PH_DESC;
1145*9880d681SAndroid Build Coastguard Workerdef SHLL_S_PH : DspMMRel, SHLL_S_PH_ENC, SHLL_S_PH_DESC;
1146*9880d681SAndroid Build Coastguard Workerdef SHLLV_S_PH : DspMMRel, SHLLV_S_PH_ENC, SHLLV_S_PH_DESC;
1147*9880d681SAndroid Build Coastguard Workerdef SHRA_PH : DspMMRel, SHRA_PH_ENC, SHRA_PH_DESC;
1148*9880d681SAndroid Build Coastguard Workerdef SHRAV_PH : DspMMRel, SHRAV_PH_ENC, SHRAV_PH_DESC;
1149*9880d681SAndroid Build Coastguard Workerdef SHRA_R_PH : DspMMRel, SHRA_R_PH_ENC, SHRA_R_PH_DESC;
1150*9880d681SAndroid Build Coastguard Workerdef SHRAV_R_PH : DspMMRel, SHRAV_R_PH_ENC, SHRAV_R_PH_DESC;
1151*9880d681SAndroid Build Coastguard Workerdef SHLL_S_W : DspMMRel, SHLL_S_W_ENC, SHLL_S_W_DESC;
1152*9880d681SAndroid Build Coastguard Workerdef SHLLV_S_W : DspMMRel, SHLLV_S_W_ENC, SHLLV_S_W_DESC;
1153*9880d681SAndroid Build Coastguard Workerdef SHRA_R_W : DspMMRel, SHRA_R_W_ENC, SHRA_R_W_DESC;
1154*9880d681SAndroid Build Coastguard Workerdef SHRAV_R_W : DspMMRel, SHRAV_R_W_ENC, SHRAV_R_W_DESC;
1155*9880d681SAndroid Build Coastguard Workerdef MULEU_S_PH_QBL : DspMMRel, MULEU_S_PH_QBL_ENC, MULEU_S_PH_QBL_DESC;
1156*9880d681SAndroid Build Coastguard Workerdef MULEU_S_PH_QBR : DspMMRel, MULEU_S_PH_QBR_ENC, MULEU_S_PH_QBR_DESC;
1157*9880d681SAndroid Build Coastguard Workerdef MULEQ_S_W_PHL : DspMMRel, MULEQ_S_W_PHL_ENC, MULEQ_S_W_PHL_DESC;
1158*9880d681SAndroid Build Coastguard Workerdef MULEQ_S_W_PHR : DspMMRel, MULEQ_S_W_PHR_ENC, MULEQ_S_W_PHR_DESC;
1159*9880d681SAndroid Build Coastguard Workerdef MULQ_RS_PH : DspMMRel, MULQ_RS_PH_ENC, MULQ_RS_PH_DESC;
1160*9880d681SAndroid Build Coastguard Workerdef MULSAQ_S_W_PH : DspMMRel, MULSAQ_S_W_PH_ENC, MULSAQ_S_W_PH_DESC;
1161*9880d681SAndroid Build Coastguard Workerdef MAQ_S_W_PHL : DspMMRel, MAQ_S_W_PHL_ENC, MAQ_S_W_PHL_DESC;
1162*9880d681SAndroid Build Coastguard Workerdef MAQ_S_W_PHR : DspMMRel, MAQ_S_W_PHR_ENC, MAQ_S_W_PHR_DESC;
1163*9880d681SAndroid Build Coastguard Workerdef MAQ_SA_W_PHL : DspMMRel, MAQ_SA_W_PHL_ENC, MAQ_SA_W_PHL_DESC;
1164*9880d681SAndroid Build Coastguard Workerdef MAQ_SA_W_PHR : DspMMRel, MAQ_SA_W_PHR_ENC, MAQ_SA_W_PHR_DESC;
1165*9880d681SAndroid Build Coastguard Workerdef MFHI_DSP : DspMMRel, MFHI_ENC, MFHI_DESC;
1166*9880d681SAndroid Build Coastguard Workerdef MFLO_DSP : DspMMRel, MFLO_ENC, MFLO_DESC;
1167*9880d681SAndroid Build Coastguard Workerdef MTHI_DSP : DspMMRel, MTHI_ENC, MTHI_DESC;
1168*9880d681SAndroid Build Coastguard Workerdef MTLO_DSP : DspMMRel, MTLO_ENC, MTLO_DESC;
1169*9880d681SAndroid Build Coastguard Workerdef DPAU_H_QBL : DspMMRel, DPAU_H_QBL_ENC, DPAU_H_QBL_DESC;
1170*9880d681SAndroid Build Coastguard Workerdef DPAU_H_QBR : DspMMRel, DPAU_H_QBR_ENC, DPAU_H_QBR_DESC;
1171*9880d681SAndroid Build Coastguard Workerdef DPSU_H_QBL : DspMMRel, DPSU_H_QBL_ENC, DPSU_H_QBL_DESC;
1172*9880d681SAndroid Build Coastguard Workerdef DPSU_H_QBR : DspMMRel, DPSU_H_QBR_ENC, DPSU_H_QBR_DESC;
1173*9880d681SAndroid Build Coastguard Workerdef DPAQ_S_W_PH : DspMMRel, DPAQ_S_W_PH_ENC, DPAQ_S_W_PH_DESC;
1174*9880d681SAndroid Build Coastguard Workerdef DPSQ_S_W_PH : DspMMRel, DPSQ_S_W_PH_ENC, DPSQ_S_W_PH_DESC;
1175*9880d681SAndroid Build Coastguard Workerdef DPAQ_SA_L_W : DspMMRel, DPAQ_SA_L_W_ENC, DPAQ_SA_L_W_DESC;
1176*9880d681SAndroid Build Coastguard Workerdef DPSQ_SA_L_W : DspMMRel, DPSQ_SA_L_W_ENC, DPSQ_SA_L_W_DESC;
1177*9880d681SAndroid Build Coastguard Workerdef MULT_DSP : DspMMRel, MULT_DSP_ENC, MULT_DSP_DESC;
1178*9880d681SAndroid Build Coastguard Workerdef MULTU_DSP : DspMMRel, MULTU_DSP_ENC, MULTU_DSP_DESC;
1179*9880d681SAndroid Build Coastguard Workerdef MADD_DSP : DspMMRel, MADD_DSP_ENC, MADD_DSP_DESC;
1180*9880d681SAndroid Build Coastguard Workerdef MADDU_DSP : DspMMRel, MADDU_DSP_ENC, MADDU_DSP_DESC;
1181*9880d681SAndroid Build Coastguard Workerdef MSUB_DSP : DspMMRel, MSUB_DSP_ENC, MSUB_DSP_DESC;
1182*9880d681SAndroid Build Coastguard Workerdef MSUBU_DSP : DspMMRel, MSUBU_DSP_ENC, MSUBU_DSP_DESC;
1183*9880d681SAndroid Build Coastguard Workerdef CMPU_EQ_QB : DspMMRel, CMPU_EQ_QB_ENC, CMPU_EQ_QB_DESC;
1184*9880d681SAndroid Build Coastguard Workerdef CMPU_LT_QB : DspMMRel, CMPU_LT_QB_ENC, CMPU_LT_QB_DESC;
1185*9880d681SAndroid Build Coastguard Workerdef CMPU_LE_QB : DspMMRel, CMPU_LE_QB_ENC, CMPU_LE_QB_DESC;
1186*9880d681SAndroid Build Coastguard Workerdef CMPGU_EQ_QB : DspMMRel, CMPGU_EQ_QB_ENC, CMPGU_EQ_QB_DESC;
1187*9880d681SAndroid Build Coastguard Workerdef CMPGU_LT_QB : DspMMRel, CMPGU_LT_QB_ENC, CMPGU_LT_QB_DESC;
1188*9880d681SAndroid Build Coastguard Workerdef CMPGU_LE_QB : DspMMRel, CMPGU_LE_QB_ENC, CMPGU_LE_QB_DESC;
1189*9880d681SAndroid Build Coastguard Workerdef CMP_EQ_PH : DspMMRel, CMP_EQ_PH_ENC, CMP_EQ_PH_DESC;
1190*9880d681SAndroid Build Coastguard Workerdef CMP_LT_PH : DspMMRel, CMP_LT_PH_ENC, CMP_LT_PH_DESC;
1191*9880d681SAndroid Build Coastguard Workerdef CMP_LE_PH : DspMMRel, CMP_LE_PH_ENC, CMP_LE_PH_DESC;
1192*9880d681SAndroid Build Coastguard Workerdef BITREV : DspMMRel, BITREV_ENC, BITREV_DESC;
1193*9880d681SAndroid Build Coastguard Workerdef PACKRL_PH : DspMMRel, PACKRL_PH_ENC, PACKRL_PH_DESC;
1194*9880d681SAndroid Build Coastguard Workerdef REPL_QB : DspMMRel, REPL_QB_ENC, REPL_QB_DESC;
1195*9880d681SAndroid Build Coastguard Workerdef REPL_PH : DspMMRel, REPL_PH_ENC, REPL_PH_DESC;
1196*9880d681SAndroid Build Coastguard Workerdef REPLV_QB : DspMMRel, REPLV_QB_ENC, REPLV_QB_DESC;
1197*9880d681SAndroid Build Coastguard Workerdef REPLV_PH : DspMMRel, REPLV_PH_ENC, REPLV_PH_DESC;
1198*9880d681SAndroid Build Coastguard Workerdef PICK_QB : DspMMRel, PICK_QB_ENC, PICK_QB_DESC;
1199*9880d681SAndroid Build Coastguard Workerdef PICK_PH : DspMMRel, PICK_PH_ENC, PICK_PH_DESC;
1200*9880d681SAndroid Build Coastguard Workerdef LWX : DspMMRel, LWX_ENC, LWX_DESC;
1201*9880d681SAndroid Build Coastguard Workerdef LHX : DspMMRel, LHX_ENC, LHX_DESC;
1202*9880d681SAndroid Build Coastguard Workerdef LBUX : DspMMRel, LBUX_ENC, LBUX_DESC;
1203*9880d681SAndroid Build Coastguard Workerlet AdditionalPredicates = [NotInMicroMips] in {
1204*9880d681SAndroid Build Coastguard Worker  def BPOSGE32 : DspMMRel, BPOSGE32_ENC, BPOSGE32_DESC;
1205*9880d681SAndroid Build Coastguard Worker}
1206*9880d681SAndroid Build Coastguard Workerdef INSV : DspMMRel, INSV_ENC, INSV_DESC;
1207*9880d681SAndroid Build Coastguard Workerdef EXTP : DspMMRel, EXTP_ENC, EXTP_DESC;
1208*9880d681SAndroid Build Coastguard Workerdef EXTPV : DspMMRel, EXTPV_ENC, EXTPV_DESC;
1209*9880d681SAndroid Build Coastguard Workerdef EXTPDP : DspMMRel, EXTPDP_ENC, EXTPDP_DESC;
1210*9880d681SAndroid Build Coastguard Workerdef EXTPDPV : DspMMRel, EXTPDPV_ENC, EXTPDPV_DESC;
1211*9880d681SAndroid Build Coastguard Workerdef EXTR_W : DspMMRel, EXTR_W_ENC, EXTR_W_DESC;
1212*9880d681SAndroid Build Coastguard Workerdef EXTRV_W : DspMMRel, EXTRV_W_ENC, EXTRV_W_DESC;
1213*9880d681SAndroid Build Coastguard Workerdef EXTR_R_W : DspMMRel, EXTR_R_W_ENC, EXTR_R_W_DESC;
1214*9880d681SAndroid Build Coastguard Workerdef EXTRV_R_W : DspMMRel, EXTRV_R_W_ENC, EXTRV_R_W_DESC;
1215*9880d681SAndroid Build Coastguard Workerdef EXTR_RS_W : DspMMRel, EXTR_RS_W_ENC, EXTR_RS_W_DESC;
1216*9880d681SAndroid Build Coastguard Workerdef EXTRV_RS_W : DspMMRel, EXTRV_RS_W_ENC, EXTRV_RS_W_DESC;
1217*9880d681SAndroid Build Coastguard Workerdef EXTR_S_H : DspMMRel, EXTR_S_H_ENC, EXTR_S_H_DESC;
1218*9880d681SAndroid Build Coastguard Workerdef EXTRV_S_H : DspMMRel, EXTRV_S_H_ENC, EXTRV_S_H_DESC;
1219*9880d681SAndroid Build Coastguard Workerdef SHILO : DspMMRel, SHILO_ENC, SHILO_DESC;
1220*9880d681SAndroid Build Coastguard Workerdef SHILOV : DspMMRel, SHILOV_ENC, SHILOV_DESC;
1221*9880d681SAndroid Build Coastguard Workerdef MTHLIP : DspMMRel, MTHLIP_ENC, MTHLIP_DESC;
1222*9880d681SAndroid Build Coastguard Workerdef RDDSP : DspMMRel, RDDSP_ENC, RDDSP_DESC;
1223*9880d681SAndroid Build Coastguard Workerlet AdditionalPredicates = [NotInMicroMips] in {
1224*9880d681SAndroid Build Coastguard Worker  def WRDSP : WRDSP_ENC, WRDSP_DESC;
1225*9880d681SAndroid Build Coastguard Worker}
1226*9880d681SAndroid Build Coastguard Worker
1227*9880d681SAndroid Build Coastguard Worker// MIPS DSP Rev 2
1228*9880d681SAndroid Build Coastguard Workerdef ADDU_PH : DspMMRel, ADDU_PH_ENC, ADDU_PH_DESC, ISA_DSPR2;
1229*9880d681SAndroid Build Coastguard Workerdef ADDU_S_PH : DspMMRel, ADDU_S_PH_ENC, ADDU_S_PH_DESC, ISA_DSPR2;
1230*9880d681SAndroid Build Coastguard Workerdef SUBU_PH : DspMMRel, SUBU_PH_ENC, SUBU_PH_DESC, ISA_DSPR2;
1231*9880d681SAndroid Build Coastguard Workerdef SUBU_S_PH : DspMMRel, SUBU_S_PH_ENC, SUBU_S_PH_DESC, ISA_DSPR2;
1232*9880d681SAndroid Build Coastguard Workerdef CMPGDU_EQ_QB : DspMMRel, CMPGDU_EQ_QB_ENC, CMPGDU_EQ_QB_DESC, ISA_DSPR2;
1233*9880d681SAndroid Build Coastguard Workerdef CMPGDU_LT_QB : DspMMRel, CMPGDU_LT_QB_ENC, CMPGDU_LT_QB_DESC, ISA_DSPR2;
1234*9880d681SAndroid Build Coastguard Workerdef CMPGDU_LE_QB : DspMMRel, CMPGDU_LE_QB_ENC, CMPGDU_LE_QB_DESC, ISA_DSPR2;
1235*9880d681SAndroid Build Coastguard Workerdef ABSQ_S_QB : DspMMRel, ABSQ_S_QB_ENC, ABSQ_S_QB_DESC, ISA_DSPR2;
1236*9880d681SAndroid Build Coastguard Workerdef ADDUH_QB : DspMMRel, ADDUH_QB_ENC, ADDUH_QB_DESC, ISA_DSPR2;
1237*9880d681SAndroid Build Coastguard Workerdef ADDUH_R_QB : DspMMRel, ADDUH_R_QB_ENC, ADDUH_R_QB_DESC, ISA_DSPR2;
1238*9880d681SAndroid Build Coastguard Workerdef SUBUH_QB : DspMMRel, SUBUH_QB_ENC, SUBUH_QB_DESC, ISA_DSPR2;
1239*9880d681SAndroid Build Coastguard Workerdef SUBUH_R_QB : DspMMRel, SUBUH_R_QB_ENC, SUBUH_R_QB_DESC, ISA_DSPR2;
1240*9880d681SAndroid Build Coastguard Workerdef ADDQH_PH : DspMMRel, ADDQH_PH_ENC, ADDQH_PH_DESC, ISA_DSPR2;
1241*9880d681SAndroid Build Coastguard Workerdef ADDQH_R_PH : DspMMRel, ADDQH_R_PH_ENC, ADDQH_R_PH_DESC, ISA_DSPR2;
1242*9880d681SAndroid Build Coastguard Workerdef SUBQH_PH : DspMMRel, SUBQH_PH_ENC, SUBQH_PH_DESC, ISA_DSPR2;
1243*9880d681SAndroid Build Coastguard Workerdef SUBQH_R_PH : DspMMRel, SUBQH_R_PH_ENC, SUBQH_R_PH_DESC, ISA_DSPR2;
1244*9880d681SAndroid Build Coastguard Workerdef ADDQH_W : DspMMRel, ADDQH_W_ENC, ADDQH_W_DESC, ISA_DSPR2;
1245*9880d681SAndroid Build Coastguard Workerdef ADDQH_R_W : DspMMRel, ADDQH_R_W_ENC, ADDQH_R_W_DESC, ISA_DSPR2;
1246*9880d681SAndroid Build Coastguard Workerdef SUBQH_W : DspMMRel, SUBQH_W_ENC, SUBQH_W_DESC, ISA_DSPR2;
1247*9880d681SAndroid Build Coastguard Workerdef SUBQH_R_W : DspMMRel, SUBQH_R_W_ENC, SUBQH_R_W_DESC, ISA_DSPR2;
1248*9880d681SAndroid Build Coastguard Workerdef MUL_PH : DspMMRel, MUL_PH_ENC, MUL_PH_DESC, ISA_DSPR2;
1249*9880d681SAndroid Build Coastguard Workerdef MUL_S_PH : DspMMRel, MUL_S_PH_ENC, MUL_S_PH_DESC, ISA_DSPR2;
1250*9880d681SAndroid Build Coastguard Workerdef MULQ_S_W : DspMMRel, MULQ_S_W_ENC, MULQ_S_W_DESC, ISA_DSPR2;
1251*9880d681SAndroid Build Coastguard Workerdef MULQ_RS_W : DspMMRel, MULQ_RS_W_ENC, MULQ_RS_W_DESC, ISA_DSPR2;
1252*9880d681SAndroid Build Coastguard Workerdef MULQ_S_PH : DspMMRel, MULQ_S_PH_ENC, MULQ_S_PH_DESC, ISA_DSPR2;
1253*9880d681SAndroid Build Coastguard Workerdef DPA_W_PH : DspMMRel, DPA_W_PH_ENC, DPA_W_PH_DESC, ISA_DSPR2;
1254*9880d681SAndroid Build Coastguard Workerdef DPS_W_PH : DspMMRel, DPS_W_PH_ENC, DPS_W_PH_DESC, ISA_DSPR2;
1255*9880d681SAndroid Build Coastguard Workerdef DPAQX_S_W_PH : DspMMRel, DPAQX_S_W_PH_ENC, DPAQX_S_W_PH_DESC, ISA_DSPR2;
1256*9880d681SAndroid Build Coastguard Workerdef DPAQX_SA_W_PH : DspMMRel, DPAQX_SA_W_PH_ENC, DPAQX_SA_W_PH_DESC, ISA_DSPR2;
1257*9880d681SAndroid Build Coastguard Workerdef DPAX_W_PH : DspMMRel, DPAX_W_PH_ENC, DPAX_W_PH_DESC, ISA_DSPR2;
1258*9880d681SAndroid Build Coastguard Workerdef DPSX_W_PH : DspMMRel, DPSX_W_PH_ENC, DPSX_W_PH_DESC, ISA_DSPR2;
1259*9880d681SAndroid Build Coastguard Workerdef DPSQX_S_W_PH : DspMMRel, DPSQX_S_W_PH_ENC, DPSQX_S_W_PH_DESC, ISA_DSPR2;
1260*9880d681SAndroid Build Coastguard Workerdef DPSQX_SA_W_PH : DspMMRel, DPSQX_SA_W_PH_ENC, DPSQX_SA_W_PH_DESC, ISA_DSPR2;
1261*9880d681SAndroid Build Coastguard Workerdef MULSA_W_PH : DspMMRel, MULSA_W_PH_ENC, MULSA_W_PH_DESC, ISA_DSPR2;
1262*9880d681SAndroid Build Coastguard Workerdef PRECR_QB_PH : DspMMRel, PRECR_QB_PH_ENC, PRECR_QB_PH_DESC, ISA_DSPR2;
1263*9880d681SAndroid Build Coastguard Workerdef PRECR_SRA_PH_W : DspMMRel, PRECR_SRA_PH_W_ENC, PRECR_SRA_PH_W_DESC, ISA_DSPR2;
1264*9880d681SAndroid Build Coastguard Workerdef PRECR_SRA_R_PH_W : DspMMRel, PRECR_SRA_R_PH_W_ENC, PRECR_SRA_R_PH_W_DESC, ISA_DSPR2;
1265*9880d681SAndroid Build Coastguard Workerdef SHRA_QB : DspMMRel, SHRA_QB_ENC, SHRA_QB_DESC, ISA_DSPR2;
1266*9880d681SAndroid Build Coastguard Workerdef SHRAV_QB : DspMMRel, SHRAV_QB_ENC, SHRAV_QB_DESC, ISA_DSPR2;
1267*9880d681SAndroid Build Coastguard Workerdef SHRA_R_QB : DspMMRel, SHRA_R_QB_ENC, SHRA_R_QB_DESC, ISA_DSPR2;
1268*9880d681SAndroid Build Coastguard Workerdef SHRAV_R_QB : DspMMRel, SHRAV_R_QB_ENC, SHRAV_R_QB_DESC, ISA_DSPR2;
1269*9880d681SAndroid Build Coastguard Workerdef SHRL_PH : DspMMRel, SHRL_PH_ENC, SHRL_PH_DESC, ISA_DSPR2;
1270*9880d681SAndroid Build Coastguard Workerdef SHRLV_PH : DspMMRel, SHRLV_PH_ENC, SHRLV_PH_DESC, ISA_DSPR2;
1271*9880d681SAndroid Build Coastguard Workerdef APPEND : DspMMRel, APPEND_ENC, APPEND_DESC, ISA_DSPR2;
1272*9880d681SAndroid Build Coastguard Workerdef BALIGN : DspMMRel, BALIGN_ENC, BALIGN_DESC, ISA_DSPR2;
1273*9880d681SAndroid Build Coastguard Workerdef PREPEND : DspMMRel, PREPEND_ENC, PREPEND_DESC, ISA_DSPR2;
1274*9880d681SAndroid Build Coastguard Worker
1275*9880d681SAndroid Build Coastguard Worker// Pseudos.
1276*9880d681SAndroid Build Coastguard Workerlet isPseudo = 1, isCodeGenOnly = 1, hasNoSchedulingInfo = 1 in {
1277*9880d681SAndroid Build Coastguard Worker  // Pseudo instructions for loading and storing accumulator registers.
1278*9880d681SAndroid Build Coastguard Worker  def LOAD_ACC64DSP  : Load<"", ACC64DSPOpnd>;
1279*9880d681SAndroid Build Coastguard Worker  def STORE_ACC64DSP : Store<"", ACC64DSPOpnd>;
1280*9880d681SAndroid Build Coastguard Worker
1281*9880d681SAndroid Build Coastguard Worker  // Pseudos for loading and storing ccond field of DSP control register.
1282*9880d681SAndroid Build Coastguard Worker  def LOAD_CCOND_DSP  : Load<"load_ccond_dsp", DSPCC>;
1283*9880d681SAndroid Build Coastguard Worker  def STORE_CCOND_DSP : Store<"store_ccond_dsp", DSPCC>;
1284*9880d681SAndroid Build Coastguard Worker}
1285*9880d681SAndroid Build Coastguard Worker
1286*9880d681SAndroid Build Coastguard Worker// Pseudo CMP and PICK instructions.
1287*9880d681SAndroid Build Coastguard Workerclass PseudoCMP<Instruction RealInst> :
1288*9880d681SAndroid Build Coastguard Worker  PseudoDSP<(outs DSPCC:$cmp), (ins DSPROpnd:$rs, DSPROpnd:$rt), []>,
1289*9880d681SAndroid Build Coastguard Worker  PseudoInstExpansion<(RealInst DSPROpnd:$rs, DSPROpnd:$rt)>, NeverHasSideEffects;
1290*9880d681SAndroid Build Coastguard Worker
1291*9880d681SAndroid Build Coastguard Workerclass PseudoPICK<Instruction RealInst> :
1292*9880d681SAndroid Build Coastguard Worker  PseudoDSP<(outs DSPROpnd:$rd), (ins DSPCC:$cmp, DSPROpnd:$rs, DSPROpnd:$rt), []>,
1293*9880d681SAndroid Build Coastguard Worker  PseudoInstExpansion<(RealInst DSPROpnd:$rd, DSPROpnd:$rs, DSPROpnd:$rt)>,
1294*9880d681SAndroid Build Coastguard Worker  NeverHasSideEffects;
1295*9880d681SAndroid Build Coastguard Worker
1296*9880d681SAndroid Build Coastguard Workerdef PseudoCMP_EQ_PH : PseudoCMP<CMP_EQ_PH>;
1297*9880d681SAndroid Build Coastguard Workerdef PseudoCMP_LT_PH : PseudoCMP<CMP_LT_PH>;
1298*9880d681SAndroid Build Coastguard Workerdef PseudoCMP_LE_PH : PseudoCMP<CMP_LE_PH>;
1299*9880d681SAndroid Build Coastguard Workerdef PseudoCMPU_EQ_QB : PseudoCMP<CMPU_EQ_QB>;
1300*9880d681SAndroid Build Coastguard Workerdef PseudoCMPU_LT_QB : PseudoCMP<CMPU_LT_QB>;
1301*9880d681SAndroid Build Coastguard Workerdef PseudoCMPU_LE_QB : PseudoCMP<CMPU_LE_QB>;
1302*9880d681SAndroid Build Coastguard Worker
1303*9880d681SAndroid Build Coastguard Workerdef PseudoPICK_PH : PseudoPICK<PICK_PH>;
1304*9880d681SAndroid Build Coastguard Workerdef PseudoPICK_QB : PseudoPICK<PICK_QB>;
1305*9880d681SAndroid Build Coastguard Worker
1306*9880d681SAndroid Build Coastguard Workerdef PseudoMTLOHI_DSP : PseudoMTLOHI<ACC64DSP, GPR32>;
1307*9880d681SAndroid Build Coastguard Worker
1308*9880d681SAndroid Build Coastguard Worker// Patterns.
1309*9880d681SAndroid Build Coastguard Workerclass DSPPat<dag pattern, dag result, Predicate pred = HasDSP> :
1310*9880d681SAndroid Build Coastguard Worker  Pat<pattern, result>, Requires<[pred]>;
1311*9880d681SAndroid Build Coastguard Worker
1312*9880d681SAndroid Build Coastguard Workerclass BitconvertPat<ValueType DstVT, ValueType SrcVT, RegisterClass DstRC,
1313*9880d681SAndroid Build Coastguard Worker                    RegisterClass SrcRC> :
1314*9880d681SAndroid Build Coastguard Worker   DSPPat<(DstVT (bitconvert (SrcVT SrcRC:$src))),
1315*9880d681SAndroid Build Coastguard Worker          (COPY_TO_REGCLASS SrcRC:$src, DstRC)>;
1316*9880d681SAndroid Build Coastguard Worker
1317*9880d681SAndroid Build Coastguard Workerdef : BitconvertPat<i32, v2i16, GPR32, DSPR>;
1318*9880d681SAndroid Build Coastguard Workerdef : BitconvertPat<i32, v4i8, GPR32, DSPR>;
1319*9880d681SAndroid Build Coastguard Workerdef : BitconvertPat<v2i16, i32, DSPR, GPR32>;
1320*9880d681SAndroid Build Coastguard Workerdef : BitconvertPat<v4i8, i32, DSPR, GPR32>;
1321*9880d681SAndroid Build Coastguard Worker
1322*9880d681SAndroid Build Coastguard Workerdef : DSPPat<(v2i16 (load addr:$a)),
1323*9880d681SAndroid Build Coastguard Worker             (v2i16 (COPY_TO_REGCLASS (LW addr:$a), DSPR))>;
1324*9880d681SAndroid Build Coastguard Workerdef : DSPPat<(v4i8 (load addr:$a)),
1325*9880d681SAndroid Build Coastguard Worker             (v4i8 (COPY_TO_REGCLASS (LW addr:$a), DSPR))>;
1326*9880d681SAndroid Build Coastguard Workerdef : DSPPat<(store (v2i16 DSPR:$val), addr:$a),
1327*9880d681SAndroid Build Coastguard Worker             (SW (COPY_TO_REGCLASS DSPR:$val, GPR32), addr:$a)>;
1328*9880d681SAndroid Build Coastguard Workerdef : DSPPat<(store (v4i8 DSPR:$val), addr:$a),
1329*9880d681SAndroid Build Coastguard Worker             (SW (COPY_TO_REGCLASS DSPR:$val, GPR32), addr:$a)>;
1330*9880d681SAndroid Build Coastguard Worker
1331*9880d681SAndroid Build Coastguard Worker// Binary operations.
1332*9880d681SAndroid Build Coastguard Workerclass DSPBinPat<Instruction Inst, ValueType ValTy, SDPatternOperator Node,
1333*9880d681SAndroid Build Coastguard Worker                Predicate Pred = HasDSP> :
1334*9880d681SAndroid Build Coastguard Worker  DSPPat<(Node ValTy:$a, ValTy:$b), (Inst ValTy:$a, ValTy:$b), Pred>;
1335*9880d681SAndroid Build Coastguard Worker
1336*9880d681SAndroid Build Coastguard Workerdef : DSPBinPat<ADDQ_PH, v2i16, int_mips_addq_ph>;
1337*9880d681SAndroid Build Coastguard Workerdef : DSPBinPat<ADDQ_PH, v2i16, add>;
1338*9880d681SAndroid Build Coastguard Workerdef : DSPBinPat<SUBQ_PH, v2i16, int_mips_subq_ph>;
1339*9880d681SAndroid Build Coastguard Workerdef : DSPBinPat<SUBQ_PH, v2i16, sub>;
1340*9880d681SAndroid Build Coastguard Workerdef : DSPBinPat<MUL_PH, v2i16, int_mips_mul_ph, HasDSPR2>;
1341*9880d681SAndroid Build Coastguard Workerdef : DSPBinPat<MUL_PH, v2i16, mul, HasDSPR2>;
1342*9880d681SAndroid Build Coastguard Workerdef : DSPBinPat<ADDU_QB, v4i8, int_mips_addu_qb>;
1343*9880d681SAndroid Build Coastguard Workerdef : DSPBinPat<ADDU_QB, v4i8, add>;
1344*9880d681SAndroid Build Coastguard Workerdef : DSPBinPat<SUBU_QB, v4i8, int_mips_subu_qb>;
1345*9880d681SAndroid Build Coastguard Workerdef : DSPBinPat<SUBU_QB, v4i8, sub>;
1346*9880d681SAndroid Build Coastguard Workerdef : DSPBinPat<ADDSC, i32, int_mips_addsc>;
1347*9880d681SAndroid Build Coastguard Workerdef : DSPBinPat<ADDSC, i32, addc>;
1348*9880d681SAndroid Build Coastguard Workerdef : DSPBinPat<ADDWC, i32, int_mips_addwc>;
1349*9880d681SAndroid Build Coastguard Workerdef : DSPBinPat<ADDWC, i32, adde>;
1350*9880d681SAndroid Build Coastguard Worker
1351*9880d681SAndroid Build Coastguard Worker// Shift immediate patterns.
1352*9880d681SAndroid Build Coastguard Workerclass DSPShiftPat<Instruction Inst, ValueType ValTy, SDPatternOperator Node,
1353*9880d681SAndroid Build Coastguard Worker                  SDPatternOperator Imm, Predicate Pred = HasDSP> :
1354*9880d681SAndroid Build Coastguard Worker  DSPPat<(Node ValTy:$a, Imm:$shamt), (Inst ValTy:$a, Imm:$shamt), Pred>;
1355*9880d681SAndroid Build Coastguard Worker
1356*9880d681SAndroid Build Coastguard Workerdef : DSPShiftPat<SHLL_PH, v2i16, MipsSHLL_DSP, imm>;
1357*9880d681SAndroid Build Coastguard Workerdef : DSPShiftPat<SHRA_PH, v2i16, MipsSHRA_DSP, imm>;
1358*9880d681SAndroid Build Coastguard Workerdef : DSPShiftPat<SHRL_PH, v2i16, MipsSHRL_DSP, imm, HasDSPR2>;
1359*9880d681SAndroid Build Coastguard Workerdef : DSPShiftPat<SHLL_PH, v2i16, int_mips_shll_ph, immZExt4>;
1360*9880d681SAndroid Build Coastguard Workerdef : DSPShiftPat<SHRA_PH, v2i16, int_mips_shra_ph, immZExt4>;
1361*9880d681SAndroid Build Coastguard Workerdef : DSPShiftPat<SHRL_PH, v2i16, int_mips_shrl_ph, immZExt4, HasDSPR2>;
1362*9880d681SAndroid Build Coastguard Workerdef : DSPShiftPat<SHLL_QB, v4i8, MipsSHLL_DSP, imm>;
1363*9880d681SAndroid Build Coastguard Workerdef : DSPShiftPat<SHRA_QB, v4i8, MipsSHRA_DSP, imm, HasDSPR2>;
1364*9880d681SAndroid Build Coastguard Workerdef : DSPShiftPat<SHRL_QB, v4i8, MipsSHRL_DSP, imm>;
1365*9880d681SAndroid Build Coastguard Workerdef : DSPShiftPat<SHLL_QB, v4i8, int_mips_shll_qb, immZExt3>;
1366*9880d681SAndroid Build Coastguard Workerdef : DSPShiftPat<SHRA_QB, v4i8, int_mips_shra_qb, immZExt3, HasDSPR2>;
1367*9880d681SAndroid Build Coastguard Workerdef : DSPShiftPat<SHRL_QB, v4i8, int_mips_shrl_qb, immZExt3>;
1368*9880d681SAndroid Build Coastguard Worker
1369*9880d681SAndroid Build Coastguard Worker// SETCC/SELECT_CC patterns.
1370*9880d681SAndroid Build Coastguard Workerclass DSPSetCCPat<Instruction Cmp, Instruction Pick, ValueType ValTy,
1371*9880d681SAndroid Build Coastguard Worker                  CondCode CC> :
1372*9880d681SAndroid Build Coastguard Worker  DSPPat<(ValTy (MipsSETCC_DSP ValTy:$a, ValTy:$b, CC)),
1373*9880d681SAndroid Build Coastguard Worker         (ValTy (Pick (ValTy (Cmp ValTy:$a, ValTy:$b)),
1374*9880d681SAndroid Build Coastguard Worker                      (ValTy (COPY_TO_REGCLASS (ADDiu ZERO, -1), DSPR)),
1375*9880d681SAndroid Build Coastguard Worker                      (ValTy ZERO)))>;
1376*9880d681SAndroid Build Coastguard Worker
1377*9880d681SAndroid Build Coastguard Workerclass DSPSetCCPatInv<Instruction Cmp, Instruction Pick, ValueType ValTy,
1378*9880d681SAndroid Build Coastguard Worker                     CondCode CC> :
1379*9880d681SAndroid Build Coastguard Worker  DSPPat<(ValTy (MipsSETCC_DSP ValTy:$a, ValTy:$b, CC)),
1380*9880d681SAndroid Build Coastguard Worker         (ValTy (Pick (ValTy (Cmp ValTy:$a, ValTy:$b)),
1381*9880d681SAndroid Build Coastguard Worker                      (ValTy ZERO),
1382*9880d681SAndroid Build Coastguard Worker                      (ValTy (COPY_TO_REGCLASS (ADDiu ZERO, -1), DSPR))))>;
1383*9880d681SAndroid Build Coastguard Worker
1384*9880d681SAndroid Build Coastguard Workerclass DSPSelectCCPat<Instruction Cmp, Instruction Pick, ValueType ValTy,
1385*9880d681SAndroid Build Coastguard Worker                     CondCode CC> :
1386*9880d681SAndroid Build Coastguard Worker  DSPPat<(ValTy (MipsSELECT_CC_DSP ValTy:$a, ValTy:$b, ValTy:$c, ValTy:$d, CC)),
1387*9880d681SAndroid Build Coastguard Worker         (ValTy (Pick (ValTy (Cmp ValTy:$a, ValTy:$b)), $c, $d))>;
1388*9880d681SAndroid Build Coastguard Worker
1389*9880d681SAndroid Build Coastguard Workerclass DSPSelectCCPatInv<Instruction Cmp, Instruction Pick, ValueType ValTy,
1390*9880d681SAndroid Build Coastguard Worker                        CondCode CC> :
1391*9880d681SAndroid Build Coastguard Worker  DSPPat<(ValTy (MipsSELECT_CC_DSP ValTy:$a, ValTy:$b, ValTy:$c, ValTy:$d, CC)),
1392*9880d681SAndroid Build Coastguard Worker         (ValTy (Pick (ValTy (Cmp ValTy:$a, ValTy:$b)), $d, $c))>;
1393*9880d681SAndroid Build Coastguard Worker
1394*9880d681SAndroid Build Coastguard Workerdef : DSPSetCCPat<PseudoCMP_EQ_PH, PseudoPICK_PH, v2i16, SETEQ>;
1395*9880d681SAndroid Build Coastguard Workerdef : DSPSetCCPat<PseudoCMP_LT_PH, PseudoPICK_PH, v2i16, SETLT>;
1396*9880d681SAndroid Build Coastguard Workerdef : DSPSetCCPat<PseudoCMP_LE_PH, PseudoPICK_PH, v2i16, SETLE>;
1397*9880d681SAndroid Build Coastguard Workerdef : DSPSetCCPatInv<PseudoCMP_EQ_PH, PseudoPICK_PH, v2i16, SETNE>;
1398*9880d681SAndroid Build Coastguard Workerdef : DSPSetCCPatInv<PseudoCMP_LT_PH, PseudoPICK_PH, v2i16, SETGE>;
1399*9880d681SAndroid Build Coastguard Workerdef : DSPSetCCPatInv<PseudoCMP_LE_PH, PseudoPICK_PH, v2i16, SETGT>;
1400*9880d681SAndroid Build Coastguard Workerdef : DSPSetCCPat<PseudoCMPU_EQ_QB, PseudoPICK_QB, v4i8, SETEQ>;
1401*9880d681SAndroid Build Coastguard Workerdef : DSPSetCCPat<PseudoCMPU_LT_QB, PseudoPICK_QB, v4i8, SETULT>;
1402*9880d681SAndroid Build Coastguard Workerdef : DSPSetCCPat<PseudoCMPU_LE_QB, PseudoPICK_QB, v4i8, SETULE>;
1403*9880d681SAndroid Build Coastguard Workerdef : DSPSetCCPatInv<PseudoCMPU_EQ_QB, PseudoPICK_QB, v4i8, SETNE>;
1404*9880d681SAndroid Build Coastguard Workerdef : DSPSetCCPatInv<PseudoCMPU_LT_QB, PseudoPICK_QB, v4i8, SETUGE>;
1405*9880d681SAndroid Build Coastguard Workerdef : DSPSetCCPatInv<PseudoCMPU_LE_QB, PseudoPICK_QB, v4i8, SETUGT>;
1406*9880d681SAndroid Build Coastguard Worker
1407*9880d681SAndroid Build Coastguard Workerdef : DSPSelectCCPat<PseudoCMP_EQ_PH, PseudoPICK_PH, v2i16, SETEQ>;
1408*9880d681SAndroid Build Coastguard Workerdef : DSPSelectCCPat<PseudoCMP_LT_PH, PseudoPICK_PH, v2i16, SETLT>;
1409*9880d681SAndroid Build Coastguard Workerdef : DSPSelectCCPat<PseudoCMP_LE_PH, PseudoPICK_PH, v2i16, SETLE>;
1410*9880d681SAndroid Build Coastguard Workerdef : DSPSelectCCPatInv<PseudoCMP_EQ_PH, PseudoPICK_PH, v2i16, SETNE>;
1411*9880d681SAndroid Build Coastguard Workerdef : DSPSelectCCPatInv<PseudoCMP_LT_PH, PseudoPICK_PH, v2i16, SETGE>;
1412*9880d681SAndroid Build Coastguard Workerdef : DSPSelectCCPatInv<PseudoCMP_LE_PH, PseudoPICK_PH, v2i16, SETGT>;
1413*9880d681SAndroid Build Coastguard Workerdef : DSPSelectCCPat<PseudoCMPU_EQ_QB, PseudoPICK_QB, v4i8, SETEQ>;
1414*9880d681SAndroid Build Coastguard Workerdef : DSPSelectCCPat<PseudoCMPU_LT_QB, PseudoPICK_QB, v4i8, SETULT>;
1415*9880d681SAndroid Build Coastguard Workerdef : DSPSelectCCPat<PseudoCMPU_LE_QB, PseudoPICK_QB, v4i8, SETULE>;
1416*9880d681SAndroid Build Coastguard Workerdef : DSPSelectCCPatInv<PseudoCMPU_EQ_QB, PseudoPICK_QB, v4i8, SETNE>;
1417*9880d681SAndroid Build Coastguard Workerdef : DSPSelectCCPatInv<PseudoCMPU_LT_QB, PseudoPICK_QB, v4i8, SETUGE>;
1418*9880d681SAndroid Build Coastguard Workerdef : DSPSelectCCPatInv<PseudoCMPU_LE_QB, PseudoPICK_QB, v4i8, SETUGT>;
1419*9880d681SAndroid Build Coastguard Worker
1420*9880d681SAndroid Build Coastguard Worker// Extr patterns.
1421*9880d681SAndroid Build Coastguard Workerclass EXTR_W_TY1_R2_Pat<SDPatternOperator OpNode, Instruction Instr> :
1422*9880d681SAndroid Build Coastguard Worker  DSPPat<(i32 (OpNode GPR32:$rs, ACC64DSP:$ac)),
1423*9880d681SAndroid Build Coastguard Worker         (Instr ACC64DSP:$ac, GPR32:$rs)>;
1424*9880d681SAndroid Build Coastguard Worker
1425*9880d681SAndroid Build Coastguard Workerclass EXTR_W_TY1_R1_Pat<SDPatternOperator OpNode, Instruction Instr> :
1426*9880d681SAndroid Build Coastguard Worker  DSPPat<(i32 (OpNode immZExt5:$shift, ACC64DSP:$ac)),
1427*9880d681SAndroid Build Coastguard Worker         (Instr ACC64DSP:$ac, immZExt5:$shift)>;
1428*9880d681SAndroid Build Coastguard Worker
1429*9880d681SAndroid Build Coastguard Workerdef : EXTR_W_TY1_R1_Pat<MipsEXTP, EXTP>;
1430*9880d681SAndroid Build Coastguard Workerdef : EXTR_W_TY1_R2_Pat<MipsEXTP, EXTPV>;
1431*9880d681SAndroid Build Coastguard Workerdef : EXTR_W_TY1_R1_Pat<MipsEXTPDP, EXTPDP>;
1432*9880d681SAndroid Build Coastguard Workerdef : EXTR_W_TY1_R2_Pat<MipsEXTPDP, EXTPDPV>;
1433*9880d681SAndroid Build Coastguard Workerdef : EXTR_W_TY1_R1_Pat<MipsEXTR_W, EXTR_W>;
1434*9880d681SAndroid Build Coastguard Workerdef : EXTR_W_TY1_R2_Pat<MipsEXTR_W, EXTRV_W>;
1435*9880d681SAndroid Build Coastguard Workerdef : EXTR_W_TY1_R1_Pat<MipsEXTR_R_W, EXTR_R_W>;
1436*9880d681SAndroid Build Coastguard Workerdef : EXTR_W_TY1_R2_Pat<MipsEXTR_R_W, EXTRV_R_W>;
1437*9880d681SAndroid Build Coastguard Workerdef : EXTR_W_TY1_R1_Pat<MipsEXTR_RS_W, EXTR_RS_W>;
1438*9880d681SAndroid Build Coastguard Workerdef : EXTR_W_TY1_R2_Pat<MipsEXTR_RS_W, EXTRV_RS_W>;
1439*9880d681SAndroid Build Coastguard Workerdef : EXTR_W_TY1_R1_Pat<MipsEXTR_S_H, EXTR_S_H>;
1440*9880d681SAndroid Build Coastguard Workerdef : EXTR_W_TY1_R2_Pat<MipsEXTR_S_H, EXTRV_S_H>;
1441*9880d681SAndroid Build Coastguard Worker
1442*9880d681SAndroid Build Coastguard Worker// Indexed load patterns.
1443*9880d681SAndroid Build Coastguard Workerclass IndexedLoadPat<SDPatternOperator LoadNode, Instruction Instr> :
1444*9880d681SAndroid Build Coastguard Worker  DSPPat<(i32 (LoadNode (add i32:$base, i32:$index))),
1445*9880d681SAndroid Build Coastguard Worker         (Instr i32:$base, i32:$index)>;
1446*9880d681SAndroid Build Coastguard Worker
1447*9880d681SAndroid Build Coastguard Workerlet AddedComplexity = 20 in {
1448*9880d681SAndroid Build Coastguard Worker  def : IndexedLoadPat<zextloadi8, LBUX>;
1449*9880d681SAndroid Build Coastguard Worker  def : IndexedLoadPat<sextloadi16, LHX>;
1450*9880d681SAndroid Build Coastguard Worker  def : IndexedLoadPat<load, LWX>;
1451*9880d681SAndroid Build Coastguard Worker}
1452*9880d681SAndroid Build Coastguard Worker
1453*9880d681SAndroid Build Coastguard Worker// Instruction alias.
1454*9880d681SAndroid Build Coastguard Workerlet AdditionalPredicates = [NotInMicroMips] in {
1455*9880d681SAndroid Build Coastguard Worker  def : DSPInstAlias<"wrdsp $rt", (WRDSP GPR32Opnd:$rt, 0x1F), 1>;
1456*9880d681SAndroid Build Coastguard Worker}
1457