xref: /aosp_15_r20/external/llvm/lib/Target/Mips/Mips64r6InstrInfo.td (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker//=- Mips64r6InstrInfo.td - Mips64r6 Instruction Information -*- 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 Mips64r6 instructions.
11*9880d681SAndroid Build Coastguard Worker//
12*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
13*9880d681SAndroid Build Coastguard Worker
14*9880d681SAndroid Build Coastguard Worker// Notes about removals/changes from MIPS32r6:
15*9880d681SAndroid Build Coastguard Worker// Reencoded: dclo, dclz
16*9880d681SAndroid Build Coastguard Worker
17*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
18*9880d681SAndroid Build Coastguard Worker//
19*9880d681SAndroid Build Coastguard Worker// Instruction Encodings
20*9880d681SAndroid Build Coastguard Worker//
21*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
22*9880d681SAndroid Build Coastguard Worker
23*9880d681SAndroid Build Coastguard Workerclass DALIGN_ENC  : SPECIAL3_DALIGN_FM<OPCODE6_DALIGN>;
24*9880d681SAndroid Build Coastguard Workerclass DAUI_ENC    : DAUI_FM;
25*9880d681SAndroid Build Coastguard Workerclass DAHI_ENC    : REGIMM_FM<OPCODE5_DAHI>;
26*9880d681SAndroid Build Coastguard Workerclass DATI_ENC    : REGIMM_FM<OPCODE5_DATI>;
27*9880d681SAndroid Build Coastguard Workerclass DBITSWAP_ENC : SPECIAL3_2R_FM<OPCODE6_DBITSWAP>;
28*9880d681SAndroid Build Coastguard Workerclass DCLO_R6_ENC : SPECIAL_2R_FM<OPCODE6_DCLO>;
29*9880d681SAndroid Build Coastguard Workerclass DCLZ_R6_ENC : SPECIAL_2R_FM<OPCODE6_DCLZ>;
30*9880d681SAndroid Build Coastguard Workerclass DDIV_ENC    : SPECIAL_3R_FM<0b00010, 0b011110>;
31*9880d681SAndroid Build Coastguard Workerclass DDIVU_ENC   : SPECIAL_3R_FM<0b00010, 0b011111>;
32*9880d681SAndroid Build Coastguard Workerclass DLSA_R6_ENC : SPECIAL_LSA_FM<OPCODE6_DLSA>;
33*9880d681SAndroid Build Coastguard Workerclass DMOD_ENC    : SPECIAL_3R_FM<0b00011, 0b011110>;
34*9880d681SAndroid Build Coastguard Workerclass DMODU_ENC   : SPECIAL_3R_FM<0b00011, 0b011111>;
35*9880d681SAndroid Build Coastguard Workerclass DMUH_ENC    : SPECIAL_3R_FM<0b00011, 0b011100>;
36*9880d681SAndroid Build Coastguard Workerclass DMUHU_ENC   : SPECIAL_3R_FM<0b00011, 0b011101>;
37*9880d681SAndroid Build Coastguard Workerclass DMUL_R6_ENC : SPECIAL_3R_FM<0b00010, 0b011100>;
38*9880d681SAndroid Build Coastguard Workerclass DMULU_ENC   : SPECIAL_3R_FM<0b00010, 0b011101>;
39*9880d681SAndroid Build Coastguard Workerclass LDPC_ENC    : PCREL18_FM<OPCODE3_LDPC>;
40*9880d681SAndroid Build Coastguard Workerclass LLD_R6_ENC : SPECIAL3_LL_SC_FM<OPCODE6_LLD>;
41*9880d681SAndroid Build Coastguard Workerclass SCD_R6_ENC : SPECIAL3_LL_SC_FM<OPCODE6_SCD>;
42*9880d681SAndroid Build Coastguard Worker
43*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
44*9880d681SAndroid Build Coastguard Worker//
45*9880d681SAndroid Build Coastguard Worker// Instruction Descriptions
46*9880d681SAndroid Build Coastguard Worker//
47*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
48*9880d681SAndroid Build Coastguard Worker
49*9880d681SAndroid Build Coastguard Workerclass AHI_ATI_DESC_BASE<string instr_asm, RegisterOperand GPROpnd, InstrItinClass itin> {
50*9880d681SAndroid Build Coastguard Worker  dag OutOperandList = (outs GPROpnd:$rs);
51*9880d681SAndroid Build Coastguard Worker  dag InOperandList = (ins GPROpnd:$rt, simm16_relaxed:$imm);
52*9880d681SAndroid Build Coastguard Worker  string AsmString = !strconcat(instr_asm, "\t$rt, $imm");
53*9880d681SAndroid Build Coastguard Worker  string Constraints = "$rs = $rt";
54*9880d681SAndroid Build Coastguard Worker  InstrItinClass Itinerary = itin;
55*9880d681SAndroid Build Coastguard Worker}
56*9880d681SAndroid Build Coastguard Worker
57*9880d681SAndroid Build Coastguard Workerclass DALIGN_DESC  : ALIGN_DESC_BASE<"dalign", GPR64Opnd, uimm3, II_DALIGN>;
58*9880d681SAndroid Build Coastguard Workerclass DAHI_DESC    : AHI_ATI_DESC_BASE<"dahi", GPR64Opnd, II_DAHI>;
59*9880d681SAndroid Build Coastguard Workerclass DATI_DESC    : AHI_ATI_DESC_BASE<"dati", GPR64Opnd, II_DATI>;
60*9880d681SAndroid Build Coastguard Workerclass DAUI_DESC    : AUI_DESC_BASE<"daui", GPR64Opnd, II_DAUI>;
61*9880d681SAndroid Build Coastguard Workerclass DBITSWAP_DESC : BITSWAP_DESC_BASE<"dbitswap", GPR64Opnd, II_DBITSWAP>;
62*9880d681SAndroid Build Coastguard Workerclass DCLO_R6_DESC : CLO_R6_DESC_BASE<"dclo", GPR64Opnd, II_DCLO>;
63*9880d681SAndroid Build Coastguard Workerclass DCLZ_R6_DESC : CLZ_R6_DESC_BASE<"dclz", GPR64Opnd, II_DCLZ>;
64*9880d681SAndroid Build Coastguard Workerclass DDIV_DESC    : DIVMOD_DESC_BASE<"ddiv", GPR64Opnd, II_DDIV, sdiv>;
65*9880d681SAndroid Build Coastguard Workerclass DDIVU_DESC   : DIVMOD_DESC_BASE<"ddivu", GPR64Opnd, II_DDIVU, udiv>;
66*9880d681SAndroid Build Coastguard Workerclass DLSA_R6_DESC : LSA_R6_DESC_BASE<"dlsa", GPR64Opnd, uimm2_plus1, II_DLSA>;
67*9880d681SAndroid Build Coastguard Workerclass DMOD_DESC    : DIVMOD_DESC_BASE<"dmod", GPR64Opnd, II_DMOD, srem>;
68*9880d681SAndroid Build Coastguard Workerclass DMODU_DESC   : DIVMOD_DESC_BASE<"dmodu", GPR64Opnd, II_DMODU, urem>;
69*9880d681SAndroid Build Coastguard Workerclass DMUH_DESC    : MUL_R6_DESC_BASE<"dmuh", GPR64Opnd, II_DMUH, mulhs>;
70*9880d681SAndroid Build Coastguard Workerclass DMUHU_DESC   : MUL_R6_DESC_BASE<"dmuhu", GPR64Opnd, II_DMUHU, mulhu>;
71*9880d681SAndroid Build Coastguard Workerclass DMUL_R6_DESC : MUL_R6_DESC_BASE<"dmul", GPR64Opnd, II_DMUL, mul>;
72*9880d681SAndroid Build Coastguard Workerclass DMULU_DESC   : MUL_R6_DESC_BASE<"dmulu", GPR64Opnd, II_DMUL>;
73*9880d681SAndroid Build Coastguard Workerclass LDPC_DESC    : PCREL_DESC_BASE<"ldpc", GPR64Opnd, simm18_lsl3, II_LDPC>;
74*9880d681SAndroid Build Coastguard Workerclass LLD_R6_DESC   : LL_R6_DESC_BASE<"lld", GPR64Opnd, mem_simm16, II_LLD>;
75*9880d681SAndroid Build Coastguard Workerclass SCD_R6_DESC   : SC_R6_DESC_BASE<"scd", GPR64Opnd, II_SCD>;
76*9880d681SAndroid Build Coastguard Workerclass SELEQZ64_DESC : SELEQNE_Z_DESC_BASE<"seleqz", GPR64Opnd>;
77*9880d681SAndroid Build Coastguard Workerclass SELNEZ64_DESC : SELEQNE_Z_DESC_BASE<"selnez", GPR64Opnd>;
78*9880d681SAndroid Build Coastguard Worker
79*9880d681SAndroid Build Coastguard Workerclass JIALC64_DESC : JMP_IDX_COMPACT_DESC_BASE<"jialc", calloffset16,
80*9880d681SAndroid Build Coastguard Worker                                             GPR64Opnd> {
81*9880d681SAndroid Build Coastguard Worker  bit isCall = 1;
82*9880d681SAndroid Build Coastguard Worker  list<Register> Defs = [RA];
83*9880d681SAndroid Build Coastguard Worker}
84*9880d681SAndroid Build Coastguard Worker
85*9880d681SAndroid Build Coastguard Workerclass JIC64_DESC : JMP_IDX_COMPACT_DESC_BASE<"jic", jmpoffset16, GPR64Opnd> {
86*9880d681SAndroid Build Coastguard Worker  bit isBarrier = 1;
87*9880d681SAndroid Build Coastguard Worker  bit isTerminator = 1;
88*9880d681SAndroid Build Coastguard Worker  list<Register> Defs = [AT];
89*9880d681SAndroid Build Coastguard Worker}
90*9880d681SAndroid Build Coastguard Worker
91*9880d681SAndroid Build Coastguard Workerclass LL64_R6_DESC : LL_R6_DESC_BASE<"ll", GPR32Opnd, mem_simm9, II_LL>;
92*9880d681SAndroid Build Coastguard Workerclass SC64_R6_DESC : SC_R6_DESC_BASE<"sc", GPR32Opnd, II_SC>;
93*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
94*9880d681SAndroid Build Coastguard Worker//
95*9880d681SAndroid Build Coastguard Worker// Instruction Definitions
96*9880d681SAndroid Build Coastguard Worker//
97*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
98*9880d681SAndroid Build Coastguard Worker
99*9880d681SAndroid Build Coastguard Workerlet AdditionalPredicates = [NotInMicroMips] in {
100*9880d681SAndroid Build Coastguard Worker  def DATI : DATI_ENC, DATI_DESC, ISA_MIPS64R6;
101*9880d681SAndroid Build Coastguard Worker  def DAHI : DAHI_ENC, DAHI_DESC, ISA_MIPS64R6;
102*9880d681SAndroid Build Coastguard Worker  def DAUI : DAUI_ENC, DAUI_DESC, ISA_MIPS64R6;
103*9880d681SAndroid Build Coastguard Worker  def DALIGN : DALIGN_ENC, DALIGN_DESC, ISA_MIPS64R6;
104*9880d681SAndroid Build Coastguard Worker}
105*9880d681SAndroid Build Coastguard Workerdef DBITSWAP : DBITSWAP_ENC, DBITSWAP_DESC, ISA_MIPS64R6;
106*9880d681SAndroid Build Coastguard Workerlet AdditionalPredicates = [NotInMicroMips] in {
107*9880d681SAndroid Build Coastguard Worker  def DCLO_R6 : R6MMR6Rel, DCLO_R6_ENC, DCLO_R6_DESC, ISA_MIPS64R6;
108*9880d681SAndroid Build Coastguard Worker  def DCLZ_R6 : R6MMR6Rel, DCLZ_R6_ENC, DCLZ_R6_DESC, ISA_MIPS64R6;
109*9880d681SAndroid Build Coastguard Worker  def DDIV : DDIV_ENC, DDIV_DESC, ISA_MIPS64R6;
110*9880d681SAndroid Build Coastguard Worker  def DDIVU : DDIVU_ENC, DDIVU_DESC, ISA_MIPS64R6;
111*9880d681SAndroid Build Coastguard Worker  def DMOD : DMOD_ENC, DMOD_DESC, ISA_MIPS64R6;
112*9880d681SAndroid Build Coastguard Worker  def DMODU : DMODU_ENC, DMODU_DESC, ISA_MIPS64R6;
113*9880d681SAndroid Build Coastguard Worker}
114*9880d681SAndroid Build Coastguard Workerdef DLSA_R6 : DLSA_R6_ENC, DLSA_R6_DESC, ISA_MIPS64R6;
115*9880d681SAndroid Build Coastguard Workerlet AdditionalPredicates = [NotInMicroMips] in {
116*9880d681SAndroid Build Coastguard Worker  def DMUH: DMUH_ENC, DMUH_DESC, ISA_MIPS64R6;
117*9880d681SAndroid Build Coastguard Worker  def DMUHU: DMUHU_ENC, DMUHU_DESC, ISA_MIPS64R6;
118*9880d681SAndroid Build Coastguard Worker  def DMUL_R6: DMUL_R6_ENC, DMUL_R6_DESC, ISA_MIPS64R6;
119*9880d681SAndroid Build Coastguard Worker  def DMULU: DMULU_ENC, DMULU_DESC, ISA_MIPS64R6;
120*9880d681SAndroid Build Coastguard Worker  def LLD_R6 : R6MMR6Rel, LLD_R6_ENC, LLD_R6_DESC, ISA_MIPS64R6;
121*9880d681SAndroid Build Coastguard Worker}
122*9880d681SAndroid Build Coastguard Workerdef LDPC: R6MMR6Rel, LDPC_ENC, LDPC_DESC, ISA_MIPS64R6;
123*9880d681SAndroid Build Coastguard Workerdef SCD_R6 : SCD_R6_ENC, SCD_R6_DESC, ISA_MIPS32R6;
124*9880d681SAndroid Build Coastguard Workerlet DecoderNamespace = "Mips32r6_64r6_GP64" in {
125*9880d681SAndroid Build Coastguard Worker  def SELEQZ64 : SELEQZ_ENC, SELEQZ64_DESC, ISA_MIPS32R6, GPR_64;
126*9880d681SAndroid Build Coastguard Worker  def SELNEZ64 : SELNEZ_ENC, SELNEZ64_DESC, ISA_MIPS32R6, GPR_64;
127*9880d681SAndroid Build Coastguard Worker}
128*9880d681SAndroid Build Coastguard Workerlet AdditionalPredicates = [NotInMicroMips],
129*9880d681SAndroid Build Coastguard Worker    DecoderNamespace = "Mips32r6_64r6_PTR64" in {
130*9880d681SAndroid Build Coastguard Worker  def LL64_R6 : LL_R6_ENC, LL64_R6_DESC, PTR_64, ISA_MIPS64R6;
131*9880d681SAndroid Build Coastguard Worker  def SC64_R6 : SC_R6_ENC, SC64_R6_DESC, PTR_64, ISA_MIPS64R6;
132*9880d681SAndroid Build Coastguard Worker}
133*9880d681SAndroid Build Coastguard Workerlet isCodeGenOnly = 1 in {
134*9880d681SAndroid Build Coastguard Workerdef JIALC64 : JIALC_ENC, JIALC64_DESC, ISA_MIPS64R6;
135*9880d681SAndroid Build Coastguard Workerdef JIC64 : JIC_ENC, JIC64_DESC, ISA_MIPS64R6;
136*9880d681SAndroid Build Coastguard Worker}
137*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
138*9880d681SAndroid Build Coastguard Worker//
139*9880d681SAndroid Build Coastguard Worker// Instruction Aliases
140*9880d681SAndroid Build Coastguard Worker//
141*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
142*9880d681SAndroid Build Coastguard Worker
143*9880d681SAndroid Build Coastguard Workerdef : MipsInstAlias<"jr $rs", (JALR64 ZERO_64, GPR64Opnd:$rs), 1>, ISA_MIPS64R6;
144*9880d681SAndroid Build Coastguard Worker
145*9880d681SAndroid Build Coastguard Workerdef : MipsInstAlias<"jrc $rs", (JIC64 GPR64Opnd:$rs, 0), 1>, ISA_MIPS64R6;
146*9880d681SAndroid Build Coastguard Worker
147*9880d681SAndroid Build Coastguard Workerdef : MipsInstAlias<"jalrc $rs", (JIALC64 GPR64Opnd:$rs, 0), 1>, ISA_MIPS64R6;
148*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
149*9880d681SAndroid Build Coastguard Worker//
150*9880d681SAndroid Build Coastguard Worker// Patterns and Pseudo Instructions
151*9880d681SAndroid Build Coastguard Worker//
152*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
153*9880d681SAndroid Build Coastguard Worker
154*9880d681SAndroid Build Coastguard Worker// i64 selects
155*9880d681SAndroid Build Coastguard Workerdef : MipsPat<(select i64:$cond, i64:$t, i64:$f),
156*9880d681SAndroid Build Coastguard Worker              (OR64 (SELNEZ64 i64:$t, i64:$cond),
157*9880d681SAndroid Build Coastguard Worker                    (SELEQZ64 i64:$f, i64:$cond))>,
158*9880d681SAndroid Build Coastguard Worker              ISA_MIPS64R6;
159*9880d681SAndroid Build Coastguard Workerdef : MipsPat<(select (i32 (seteq i64:$cond, immz)), i64:$t, i64:$f),
160*9880d681SAndroid Build Coastguard Worker              (OR64 (SELEQZ64 i64:$t, i64:$cond),
161*9880d681SAndroid Build Coastguard Worker                    (SELNEZ64 i64:$f, i64:$cond))>,
162*9880d681SAndroid Build Coastguard Worker              ISA_MIPS64R6;
163*9880d681SAndroid Build Coastguard Workerdef : MipsPat<(select (i32 (setne i64:$cond, immz)), i64:$t, i64:$f),
164*9880d681SAndroid Build Coastguard Worker              (OR64 (SELNEZ64 i64:$t, i64:$cond),
165*9880d681SAndroid Build Coastguard Worker                    (SELEQZ64 i64:$f, i64:$cond))>,
166*9880d681SAndroid Build Coastguard Worker              ISA_MIPS64R6;
167*9880d681SAndroid Build Coastguard Workerdef : MipsPat<(select (i32 (seteq i64:$cond, immZExt16_64:$imm)), i64:$t, i64:$f),
168*9880d681SAndroid Build Coastguard Worker              (OR64 (SELEQZ64 i64:$t, (XORi64 i64:$cond, immZExt16_64:$imm)),
169*9880d681SAndroid Build Coastguard Worker                    (SELNEZ64 i64:$f, (XORi64 i64:$cond, immZExt16_64:$imm)))>,
170*9880d681SAndroid Build Coastguard Worker              ISA_MIPS64R6;
171*9880d681SAndroid Build Coastguard Workerdef : MipsPat<(select (i32 (setne i64:$cond, immZExt16_64:$imm)), i64:$t, i64:$f),
172*9880d681SAndroid Build Coastguard Worker              (OR64 (SELNEZ64 i64:$t, (XORi64 i64:$cond, immZExt16_64:$imm)),
173*9880d681SAndroid Build Coastguard Worker                    (SELEQZ64 i64:$f, (XORi64 i64:$cond, immZExt16_64:$imm)))>,
174*9880d681SAndroid Build Coastguard Worker              ISA_MIPS64R6;
175*9880d681SAndroid Build Coastguard Workerdef : MipsPat<
176*9880d681SAndroid Build Coastguard Worker  (select (i32 (setgt i64:$cond, immSExt16Plus1:$imm)), i64:$t, i64:$f),
177*9880d681SAndroid Build Coastguard Worker  (OR64 (SELEQZ64 i64:$t,
178*9880d681SAndroid Build Coastguard Worker                  (SUBREG_TO_REG (i64 0), (SLTi64 i64:$cond, (Plus1 imm:$imm)),
179*9880d681SAndroid Build Coastguard Worker                                 sub_32)),
180*9880d681SAndroid Build Coastguard Worker        (SELNEZ64 i64:$f,
181*9880d681SAndroid Build Coastguard Worker                  (SUBREG_TO_REG (i64 0), (SLTi64 i64:$cond, (Plus1 imm:$imm)),
182*9880d681SAndroid Build Coastguard Worker                                 sub_32)))>,
183*9880d681SAndroid Build Coastguard Worker  ISA_MIPS64R6;
184*9880d681SAndroid Build Coastguard Workerdef : MipsPat<
185*9880d681SAndroid Build Coastguard Worker  (select (i32 (setugt i64:$cond, immSExt16Plus1:$imm)), i64:$t, i64:$f),
186*9880d681SAndroid Build Coastguard Worker  (OR64 (SELEQZ64 i64:$t,
187*9880d681SAndroid Build Coastguard Worker                  (SUBREG_TO_REG (i64 0), (SLTiu64 i64:$cond, (Plus1 imm:$imm)),
188*9880d681SAndroid Build Coastguard Worker                                 sub_32)),
189*9880d681SAndroid Build Coastguard Worker        (SELNEZ64 i64:$f,
190*9880d681SAndroid Build Coastguard Worker                  (SUBREG_TO_REG (i64 0), (SLTiu64 i64:$cond, (Plus1 imm:$imm)),
191*9880d681SAndroid Build Coastguard Worker                                 sub_32)))>,
192*9880d681SAndroid Build Coastguard Worker  ISA_MIPS64R6;
193*9880d681SAndroid Build Coastguard Worker
194*9880d681SAndroid Build Coastguard Workerdef : MipsPat<(select (i32 (setne i64:$cond, immz)), i64:$t, immz),
195*9880d681SAndroid Build Coastguard Worker              (SELNEZ64 i64:$t, i64:$cond)>, ISA_MIPS64R6;
196*9880d681SAndroid Build Coastguard Workerdef : MipsPat<(select (i32 (seteq i64:$cond, immz)), i64:$t, immz),
197*9880d681SAndroid Build Coastguard Worker              (SELEQZ64 i64:$t, i64:$cond)>, ISA_MIPS64R6;
198*9880d681SAndroid Build Coastguard Workerdef : MipsPat<(select (i32 (setne i64:$cond, immz)), immz, i64:$f),
199*9880d681SAndroid Build Coastguard Worker              (SELEQZ64 i64:$f, i64:$cond)>, ISA_MIPS64R6;
200*9880d681SAndroid Build Coastguard Workerdef : MipsPat<(select (i32 (seteq i64:$cond, immz)), immz, i64:$f),
201*9880d681SAndroid Build Coastguard Worker              (SELNEZ64 i64:$f, i64:$cond)>, ISA_MIPS64R6;
202*9880d681SAndroid Build Coastguard Worker
203*9880d681SAndroid Build Coastguard Worker// i64 selects from an i32 comparison
204*9880d681SAndroid Build Coastguard Worker// One complicating factor here is that bits 32-63 of an i32 are undefined.
205*9880d681SAndroid Build Coastguard Worker// FIXME: Ideally, setcc would always produce an i64 on MIPS64 targets.
206*9880d681SAndroid Build Coastguard Worker//        This would allow us to remove the sign-extensions here.
207*9880d681SAndroid Build Coastguard Workerdef : MipsPat<(select i32:$cond, i64:$t, i64:$f),
208*9880d681SAndroid Build Coastguard Worker              (OR64 (SELNEZ64 i64:$t, (SLL64_32 i32:$cond)),
209*9880d681SAndroid Build Coastguard Worker                    (SELEQZ64 i64:$f, (SLL64_32 i32:$cond)))>,
210*9880d681SAndroid Build Coastguard Worker              ISA_MIPS64R6;
211*9880d681SAndroid Build Coastguard Workerdef : MipsPat<(select (i32 (seteq i32:$cond, immz)), i64:$t, i64:$f),
212*9880d681SAndroid Build Coastguard Worker              (OR64 (SELEQZ64 i64:$t, (SLL64_32 i32:$cond)),
213*9880d681SAndroid Build Coastguard Worker                    (SELNEZ64 i64:$f, (SLL64_32 i32:$cond)))>,
214*9880d681SAndroid Build Coastguard Worker              ISA_MIPS64R6;
215*9880d681SAndroid Build Coastguard Workerdef : MipsPat<(select (i32 (setne i32:$cond, immz)), i64:$t, i64:$f),
216*9880d681SAndroid Build Coastguard Worker              (OR64 (SELNEZ64 i64:$t, (SLL64_32 i32:$cond)),
217*9880d681SAndroid Build Coastguard Worker                    (SELEQZ64 i64:$f, (SLL64_32 i32:$cond)))>,
218*9880d681SAndroid Build Coastguard Worker              ISA_MIPS64R6;
219*9880d681SAndroid Build Coastguard Workerdef : MipsPat<(select (i32 (seteq i32:$cond, immZExt16:$imm)), i64:$t, i64:$f),
220*9880d681SAndroid Build Coastguard Worker              (OR64 (SELEQZ64 i64:$t, (SLL64_32 (XORi i32:$cond,
221*9880d681SAndroid Build Coastguard Worker                                                      immZExt16:$imm))),
222*9880d681SAndroid Build Coastguard Worker                    (SELNEZ64 i64:$f, (SLL64_32 (XORi i32:$cond,
223*9880d681SAndroid Build Coastguard Worker                                                      immZExt16:$imm))))>,
224*9880d681SAndroid Build Coastguard Worker              ISA_MIPS64R6;
225*9880d681SAndroid Build Coastguard Workerdef : MipsPat<(select (i32 (setne i32:$cond, immZExt16:$imm)), i64:$t, i64:$f),
226*9880d681SAndroid Build Coastguard Worker              (OR64 (SELNEZ64 i64:$t, (SLL64_32 (XORi i32:$cond,
227*9880d681SAndroid Build Coastguard Worker                                                      immZExt16:$imm))),
228*9880d681SAndroid Build Coastguard Worker                    (SELEQZ64 i64:$f, (SLL64_32 (XORi i32:$cond,
229*9880d681SAndroid Build Coastguard Worker                                                      immZExt16:$imm))))>,
230*9880d681SAndroid Build Coastguard Worker              ISA_MIPS64R6;
231*9880d681SAndroid Build Coastguard Worker
232*9880d681SAndroid Build Coastguard Workerdef : MipsPat<(select i32:$cond, i64:$t, immz),
233*9880d681SAndroid Build Coastguard Worker              (SELNEZ64 i64:$t, (SLL64_32 i32:$cond))>,
234*9880d681SAndroid Build Coastguard Worker              ISA_MIPS64R6;
235*9880d681SAndroid Build Coastguard Workerdef : MipsPat<(select (i32 (setne i32:$cond, immz)), i64:$t, immz),
236*9880d681SAndroid Build Coastguard Worker              (SELNEZ64 i64:$t, (SLL64_32 i32:$cond))>,
237*9880d681SAndroid Build Coastguard Worker              ISA_MIPS64R6;
238*9880d681SAndroid Build Coastguard Workerdef : MipsPat<(select (i32 (seteq i32:$cond, immz)), i64:$t, immz),
239*9880d681SAndroid Build Coastguard Worker              (SELEQZ64 i64:$t, (SLL64_32 i32:$cond))>,
240*9880d681SAndroid Build Coastguard Worker              ISA_MIPS64R6;
241*9880d681SAndroid Build Coastguard Workerdef : MipsPat<(select i32:$cond, immz, i64:$f),
242*9880d681SAndroid Build Coastguard Worker              (SELEQZ64 i64:$f, (SLL64_32 i32:$cond))>,
243*9880d681SAndroid Build Coastguard Worker              ISA_MIPS64R6;
244*9880d681SAndroid Build Coastguard Workerdef : MipsPat<(select (i32 (setne i32:$cond, immz)), immz, i64:$f),
245*9880d681SAndroid Build Coastguard Worker              (SELEQZ64 i64:$f, (SLL64_32 i32:$cond))>,
246*9880d681SAndroid Build Coastguard Worker              ISA_MIPS64R6;
247*9880d681SAndroid Build Coastguard Workerdef : MipsPat<(select (i32 (seteq i32:$cond, immz)), immz, i64:$f),
248*9880d681SAndroid Build Coastguard Worker              (SELNEZ64 i64:$f, (SLL64_32 i32:$cond))>,
249*9880d681SAndroid Build Coastguard Worker              ISA_MIPS64R6;
250