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