1*9880d681SAndroid Build Coastguard Worker//=- HexagonInstrInfoV3.td - Target Desc. for Hexagon Target -*- 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 the Hexagon V3 instructions in TableGen format. 11*9880d681SAndroid Build Coastguard Worker// 12*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Workerdef callv3 : SDNode<"HexagonISD::CALLv3", SDT_SPCall, 15*9880d681SAndroid Build Coastguard Worker [SDNPHasChain, SDNPOptInGlue, SDNPOutGlue, SDNPVariadic]>; 16*9880d681SAndroid Build Coastguard Worker 17*9880d681SAndroid Build Coastguard Workerdef callv3nr : SDNode<"HexagonISD::CALLv3nr", SDT_SPCall, 18*9880d681SAndroid Build Coastguard Worker [SDNPHasChain, SDNPOptInGlue, SDNPOutGlue, SDNPVariadic]>; 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 21*9880d681SAndroid Build Coastguard Worker// J + 22*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 23*9880d681SAndroid Build Coastguard Worker// Call subroutine. 24*9880d681SAndroid Build Coastguard Workerlet isCall = 1, hasSideEffects = 1, isPredicable = 1, 25*9880d681SAndroid Build Coastguard Worker isExtended = 0, isExtendable = 1, opExtendable = 0, 26*9880d681SAndroid Build Coastguard Worker isExtentSigned = 1, opExtentBits = 24, opExtentAlign = 2 in 27*9880d681SAndroid Build Coastguard Workerclass T_Call<bit CSR, string ExtStr> 28*9880d681SAndroid Build Coastguard Worker : JInst<(outs), (ins calltarget:$dst), 29*9880d681SAndroid Build Coastguard Worker "call " # ExtStr # "$dst", [], "", J_tc_2early_SLOT23> { 30*9880d681SAndroid Build Coastguard Worker let BaseOpcode = "call"; 31*9880d681SAndroid Build Coastguard Worker bits<24> dst; 32*9880d681SAndroid Build Coastguard Worker 33*9880d681SAndroid Build Coastguard Worker let Defs = !if (CSR, VolatileV3.Regs, []); 34*9880d681SAndroid Build Coastguard Worker let IClass = 0b0101; 35*9880d681SAndroid Build Coastguard Worker let Inst{27-25} = 0b101; 36*9880d681SAndroid Build Coastguard Worker let Inst{24-16,13-1} = dst{23-2}; 37*9880d681SAndroid Build Coastguard Worker let Inst{0} = 0b0; 38*9880d681SAndroid Build Coastguard Worker} 39*9880d681SAndroid Build Coastguard Worker 40*9880d681SAndroid Build Coastguard Workerlet isCall = 1, hasSideEffects = 1, isPredicated = 1, 41*9880d681SAndroid Build Coastguard Worker isExtended = 0, isExtendable = 1, opExtendable = 1, 42*9880d681SAndroid Build Coastguard Worker isExtentSigned = 1, opExtentBits = 17, opExtentAlign = 2 in 43*9880d681SAndroid Build Coastguard Workerclass T_CallPred<bit CSR, bit IfTrue, string ExtStr> 44*9880d681SAndroid Build Coastguard Worker : JInst<(outs), (ins PredRegs:$Pu, calltarget:$dst), 45*9880d681SAndroid Build Coastguard Worker CondStr<"$Pu", IfTrue, 0>.S # "call " # ExtStr # "$dst", 46*9880d681SAndroid Build Coastguard Worker [], "", J_tc_2early_SLOT23> { 47*9880d681SAndroid Build Coastguard Worker let BaseOpcode = "call"; 48*9880d681SAndroid Build Coastguard Worker let isPredicatedFalse = !if(IfTrue,0,1); 49*9880d681SAndroid Build Coastguard Worker bits<2> Pu; 50*9880d681SAndroid Build Coastguard Worker bits<17> dst; 51*9880d681SAndroid Build Coastguard Worker 52*9880d681SAndroid Build Coastguard Worker let Defs = !if (CSR, VolatileV3.Regs, []); 53*9880d681SAndroid Build Coastguard Worker let IClass = 0b0101; 54*9880d681SAndroid Build Coastguard Worker let Inst{27-24} = 0b1101; 55*9880d681SAndroid Build Coastguard Worker let Inst{23-22,20-16,13,7-1} = dst{16-2}; 56*9880d681SAndroid Build Coastguard Worker let Inst{21} = !if(IfTrue,0,1); 57*9880d681SAndroid Build Coastguard Worker let Inst{11} = 0b0; 58*9880d681SAndroid Build Coastguard Worker let Inst{9-8} = Pu; 59*9880d681SAndroid Build Coastguard Worker} 60*9880d681SAndroid Build Coastguard Worker 61*9880d681SAndroid Build Coastguard Workermulticlass T_Calls<bit CSR, string ExtStr> { 62*9880d681SAndroid Build Coastguard Worker def NAME : T_Call<CSR, ExtStr>; 63*9880d681SAndroid Build Coastguard Worker def t : T_CallPred<CSR, 1, ExtStr>; 64*9880d681SAndroid Build Coastguard Worker def f : T_CallPred<CSR, 0, ExtStr>; 65*9880d681SAndroid Build Coastguard Worker} 66*9880d681SAndroid Build Coastguard Worker 67*9880d681SAndroid Build Coastguard Workerdefm J2_call: T_Calls<1, "">, PredRel; 68*9880d681SAndroid Build Coastguard Worker 69*9880d681SAndroid Build Coastguard Workerlet isCodeGenOnly = 1, isCall = 1, hasSideEffects = 1, Defs = VolatileV3.Regs in 70*9880d681SAndroid Build Coastguard Workerdef CALLv3nr : T_Call<1, "">, PredRel; 71*9880d681SAndroid Build Coastguard Worker 72*9880d681SAndroid Build Coastguard Workerlet isCodeGenOnly = 1, isCall = 1, hasSideEffects = 1, Defs = [PC, R31, R6, R7, P0] in 73*9880d681SAndroid Build Coastguard Workerdef CALLstk : T_Call<0, "">, PredRel; 74*9880d681SAndroid Build Coastguard Worker 75*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 76*9880d681SAndroid Build Coastguard Worker// J - 77*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 78*9880d681SAndroid Build Coastguard Worker 79*9880d681SAndroid Build Coastguard Worker 80*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 81*9880d681SAndroid Build Coastguard Worker// JR + 82*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 83*9880d681SAndroid Build Coastguard Worker// Call subroutine from register. 84*9880d681SAndroid Build Coastguard Worker 85*9880d681SAndroid Build Coastguard Workerlet isCodeGenOnly = 1, Defs = VolatileV3.Regs in { 86*9880d681SAndroid Build Coastguard Worker def CALLRv3nr : JUMPR_MISC_CALLR<0, 1>; // Call, no return. 87*9880d681SAndroid Build Coastguard Worker} 88*9880d681SAndroid Build Coastguard Worker 89*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 90*9880d681SAndroid Build Coastguard Worker// JR - 91*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 92*9880d681SAndroid Build Coastguard Worker 93*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 94*9880d681SAndroid Build Coastguard Worker// ALU64/ALU + 95*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 96*9880d681SAndroid Build Coastguard Worker 97*9880d681SAndroid Build Coastguard Workerlet Defs = [USR_OVF], Itinerary = ALU64_tc_2_SLOT23 in 98*9880d681SAndroid Build Coastguard Workerdef A2_addpsat : T_ALU64_arith<"add", 0b011, 0b101, 1, 0, 1>; 99*9880d681SAndroid Build Coastguard Worker 100*9880d681SAndroid Build Coastguard Workerclass T_ALU64_addsp_hl<string suffix, bits<3> MinOp> 101*9880d681SAndroid Build Coastguard Worker : T_ALU64_rr<"add", suffix, 0b0011, 0b011, MinOp, 0, 0, "">; 102*9880d681SAndroid Build Coastguard Worker 103*9880d681SAndroid Build Coastguard Workerdef A2_addspl : T_ALU64_addsp_hl<":raw:lo", 0b110>; 104*9880d681SAndroid Build Coastguard Workerdef A2_addsph : T_ALU64_addsp_hl<":raw:hi", 0b111>; 105*9880d681SAndroid Build Coastguard Worker 106*9880d681SAndroid Build Coastguard Workerlet hasSideEffects = 0, isAsmParserOnly = 1 in 107*9880d681SAndroid Build Coastguard Workerdef A2_addsp : ALU64_rr<(outs DoubleRegs:$Rd), 108*9880d681SAndroid Build Coastguard Worker (ins IntRegs:$Rs, DoubleRegs:$Rt), "$Rd = add($Rs, $Rt)", 109*9880d681SAndroid Build Coastguard Worker [(set (i64 DoubleRegs:$Rd), (i64 (add (i64 (sext (i32 IntRegs:$Rs))), 110*9880d681SAndroid Build Coastguard Worker (i64 DoubleRegs:$Rt))))], 111*9880d681SAndroid Build Coastguard Worker "", ALU64_tc_1_SLOT23>; 112*9880d681SAndroid Build Coastguard Worker 113*9880d681SAndroid Build Coastguard Worker 114*9880d681SAndroid Build Coastguard Workerlet hasSideEffects = 0 in 115*9880d681SAndroid Build Coastguard Workerclass T_XTYPE_MIN_MAX_P<bit isMax, bit isUnsigned> 116*9880d681SAndroid Build Coastguard Worker : ALU64Inst<(outs DoubleRegs:$Rd), (ins DoubleRegs:$Rt, DoubleRegs:$Rs), 117*9880d681SAndroid Build Coastguard Worker "$Rd = "#!if(isMax,"max","min")#!if(isUnsigned,"u","") 118*9880d681SAndroid Build Coastguard Worker #"($Rt, $Rs)", [], "", ALU64_tc_2_SLOT23> { 119*9880d681SAndroid Build Coastguard Worker bits<5> Rd; 120*9880d681SAndroid Build Coastguard Worker bits<5> Rs; 121*9880d681SAndroid Build Coastguard Worker bits<5> Rt; 122*9880d681SAndroid Build Coastguard Worker 123*9880d681SAndroid Build Coastguard Worker let IClass = 0b1101; 124*9880d681SAndroid Build Coastguard Worker 125*9880d681SAndroid Build Coastguard Worker let Inst{27-23} = 0b00111; 126*9880d681SAndroid Build Coastguard Worker let Inst{22-21} = !if(isMax, 0b10, 0b01); 127*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = !if(isMax, Rt, Rs); 128*9880d681SAndroid Build Coastguard Worker let Inst{12-8} = !if(isMax, Rs, Rt); 129*9880d681SAndroid Build Coastguard Worker let Inst{7} = 0b1; 130*9880d681SAndroid Build Coastguard Worker let Inst{6} = !if(isMax, 0b0, 0b1); 131*9880d681SAndroid Build Coastguard Worker let Inst{5} = isUnsigned; 132*9880d681SAndroid Build Coastguard Worker let Inst{4-0} = Rd; 133*9880d681SAndroid Build Coastguard Worker} 134*9880d681SAndroid Build Coastguard Worker 135*9880d681SAndroid Build Coastguard Workerdef A2_minp : T_XTYPE_MIN_MAX_P<0, 0>; 136*9880d681SAndroid Build Coastguard Workerdef A2_minup : T_XTYPE_MIN_MAX_P<0, 1>; 137*9880d681SAndroid Build Coastguard Workerdef A2_maxp : T_XTYPE_MIN_MAX_P<1, 0>; 138*9880d681SAndroid Build Coastguard Workerdef A2_maxup : T_XTYPE_MIN_MAX_P<1, 1>; 139*9880d681SAndroid Build Coastguard Worker 140*9880d681SAndroid Build Coastguard Workermulticlass MinMax_pats_p<PatFrag Op, InstHexagon Inst, InstHexagon SwapInst> { 141*9880d681SAndroid Build Coastguard Worker defm: T_MinMax_pats<Op, DoubleRegs, i64, Inst, SwapInst>; 142*9880d681SAndroid Build Coastguard Worker} 143*9880d681SAndroid Build Coastguard Worker 144*9880d681SAndroid Build Coastguard Workerlet AddedComplexity = 200 in { 145*9880d681SAndroid Build Coastguard Worker defm: MinMax_pats_p<setge, A2_maxp, A2_minp>; 146*9880d681SAndroid Build Coastguard Worker defm: MinMax_pats_p<setgt, A2_maxp, A2_minp>; 147*9880d681SAndroid Build Coastguard Worker defm: MinMax_pats_p<setle, A2_minp, A2_maxp>; 148*9880d681SAndroid Build Coastguard Worker defm: MinMax_pats_p<setlt, A2_minp, A2_maxp>; 149*9880d681SAndroid Build Coastguard Worker defm: MinMax_pats_p<setuge, A2_maxup, A2_minup>; 150*9880d681SAndroid Build Coastguard Worker defm: MinMax_pats_p<setugt, A2_maxup, A2_minup>; 151*9880d681SAndroid Build Coastguard Worker defm: MinMax_pats_p<setule, A2_minup, A2_maxup>; 152*9880d681SAndroid Build Coastguard Worker defm: MinMax_pats_p<setult, A2_minup, A2_maxup>; 153*9880d681SAndroid Build Coastguard Worker} 154*9880d681SAndroid Build Coastguard Worker 155*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 156*9880d681SAndroid Build Coastguard Worker// ALU64/ALU - 157*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 158*9880d681SAndroid Build Coastguard Worker 159*9880d681SAndroid Build Coastguard Worker 160*9880d681SAndroid Build Coastguard Worker 161*9880d681SAndroid Build Coastguard Worker 162*9880d681SAndroid Build Coastguard Worker//def : Pat <(brcond (i1 (seteq (i32 IntRegs:$src1), 0)), bb:$offset), 163*9880d681SAndroid Build Coastguard Worker// (JMP_RegEzt (i32 IntRegs:$src1), bb:$offset)>; 164*9880d681SAndroid Build Coastguard Worker 165*9880d681SAndroid Build Coastguard Worker//def : Pat <(brcond (i1 (setne (i32 IntRegs:$src1), 0)), bb:$offset), 166*9880d681SAndroid Build Coastguard Worker// (JMP_RegNzt (i32 IntRegs:$src1), bb:$offset)>; 167*9880d681SAndroid Build Coastguard Worker 168*9880d681SAndroid Build Coastguard Worker//def : Pat <(brcond (i1 (setle (i32 IntRegs:$src1), 0)), bb:$offset), 169*9880d681SAndroid Build Coastguard Worker// (JMP_RegLezt (i32 IntRegs:$src1), bb:$offset)>; 170*9880d681SAndroid Build Coastguard Worker 171*9880d681SAndroid Build Coastguard Worker//def : Pat <(brcond (i1 (setge (i32 IntRegs:$src1), 0)), bb:$offset), 172*9880d681SAndroid Build Coastguard Worker// (JMP_RegGezt (i32 IntRegs:$src1), bb:$offset)>; 173*9880d681SAndroid Build Coastguard Worker 174*9880d681SAndroid Build Coastguard Worker//def : Pat <(brcond (i1 (setgt (i32 IntRegs:$src1), -1)), bb:$offset), 175*9880d681SAndroid Build Coastguard Worker// (JMP_RegGezt (i32 IntRegs:$src1), bb:$offset)>; 176*9880d681SAndroid Build Coastguard Worker 177*9880d681SAndroid Build Coastguard Worker// Map call instruction 178*9880d681SAndroid Build Coastguard Workerdef : Pat<(callv3 (i32 IntRegs:$dst)), 179*9880d681SAndroid Build Coastguard Worker (J2_callr (i32 IntRegs:$dst))>; 180*9880d681SAndroid Build Coastguard Workerdef : Pat<(callv3 tglobaladdr:$dst), 181*9880d681SAndroid Build Coastguard Worker (J2_call tglobaladdr:$dst)>; 182*9880d681SAndroid Build Coastguard Workerdef : Pat<(callv3 texternalsym:$dst), 183*9880d681SAndroid Build Coastguard Worker (J2_call texternalsym:$dst)>; 184*9880d681SAndroid Build Coastguard Workerdef : Pat<(callv3 tglobaltlsaddr:$dst), 185*9880d681SAndroid Build Coastguard Worker (J2_call tglobaltlsaddr:$dst)>; 186*9880d681SAndroid Build Coastguard Worker 187*9880d681SAndroid Build Coastguard Workerdef : Pat<(callv3nr (i32 IntRegs:$dst)), 188*9880d681SAndroid Build Coastguard Worker (CALLRv3nr (i32 IntRegs:$dst))>; 189*9880d681SAndroid Build Coastguard Workerdef : Pat<(callv3nr tglobaladdr:$dst), 190*9880d681SAndroid Build Coastguard Worker (CALLv3nr tglobaladdr:$dst)>; 191*9880d681SAndroid Build Coastguard Workerdef : Pat<(callv3nr texternalsym:$dst), 192*9880d681SAndroid Build Coastguard Worker (CALLv3nr texternalsym:$dst)>; 193*9880d681SAndroid Build Coastguard Worker 194*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 195*9880d681SAndroid Build Coastguard Worker// :raw form of vrcmpys:hi/lo insns 196*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 197*9880d681SAndroid Build Coastguard Worker// Vector reduce complex multiply by scalar. 198*9880d681SAndroid Build Coastguard Workerlet Defs = [USR_OVF], hasSideEffects = 0 in 199*9880d681SAndroid Build Coastguard Workerclass T_vrcmpRaw<string HiLo, bits<3>MajOp>: 200*9880d681SAndroid Build Coastguard Worker MInst<(outs DoubleRegs:$Rdd), 201*9880d681SAndroid Build Coastguard Worker (ins DoubleRegs:$Rss, DoubleRegs:$Rtt), 202*9880d681SAndroid Build Coastguard Worker "$Rdd = vrcmpys($Rss, $Rtt):<<1:sat:raw:"#HiLo, []> { 203*9880d681SAndroid Build Coastguard Worker bits<5> Rdd; 204*9880d681SAndroid Build Coastguard Worker bits<5> Rss; 205*9880d681SAndroid Build Coastguard Worker bits<5> Rtt; 206*9880d681SAndroid Build Coastguard Worker 207*9880d681SAndroid Build Coastguard Worker let IClass = 0b1110; 208*9880d681SAndroid Build Coastguard Worker 209*9880d681SAndroid Build Coastguard Worker let Inst{27-24} = 0b1000; 210*9880d681SAndroid Build Coastguard Worker let Inst{23-21} = MajOp; 211*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = Rss; 212*9880d681SAndroid Build Coastguard Worker let Inst{12-8} = Rtt; 213*9880d681SAndroid Build Coastguard Worker let Inst{7-5} = 0b100; 214*9880d681SAndroid Build Coastguard Worker let Inst{4-0} = Rdd; 215*9880d681SAndroid Build Coastguard Worker} 216*9880d681SAndroid Build Coastguard Worker 217*9880d681SAndroid Build Coastguard Workerdef M2_vrcmpys_s1_h: T_vrcmpRaw<"hi", 0b101>; 218*9880d681SAndroid Build Coastguard Workerdef M2_vrcmpys_s1_l: T_vrcmpRaw<"lo", 0b111>; 219*9880d681SAndroid Build Coastguard Worker 220*9880d681SAndroid Build Coastguard Worker// Assembler mapped to M2_vrcmpys_s1_h or M2_vrcmpys_s1_l 221*9880d681SAndroid Build Coastguard Workerlet hasSideEffects = 0, isAsmParserOnly = 1 in 222*9880d681SAndroid Build Coastguard Workerdef M2_vrcmpys_s1 223*9880d681SAndroid Build Coastguard Worker : MInst<(outs DoubleRegs:$Rdd), (ins DoubleRegs:$Rss, IntRegs:$Rt), 224*9880d681SAndroid Build Coastguard Worker "$Rdd=vrcmpys($Rss,$Rt):<<1:sat">; 225*9880d681SAndroid Build Coastguard Worker 226*9880d681SAndroid Build Coastguard Worker// Vector reduce complex multiply by scalar with accumulation. 227*9880d681SAndroid Build Coastguard Workerlet Defs = [USR_OVF], hasSideEffects = 0 in 228*9880d681SAndroid Build Coastguard Workerclass T_vrcmpys_acc<string HiLo, bits<3>MajOp>: 229*9880d681SAndroid Build Coastguard Worker MInst <(outs DoubleRegs:$Rxx), 230*9880d681SAndroid Build Coastguard Worker (ins DoubleRegs:$_src_, DoubleRegs:$Rss, DoubleRegs:$Rtt), 231*9880d681SAndroid Build Coastguard Worker "$Rxx += vrcmpys($Rss, $Rtt):<<1:sat:raw:"#HiLo, [], 232*9880d681SAndroid Build Coastguard Worker "$Rxx = $_src_"> { 233*9880d681SAndroid Build Coastguard Worker bits<5> Rxx; 234*9880d681SAndroid Build Coastguard Worker bits<5> Rss; 235*9880d681SAndroid Build Coastguard Worker bits<5> Rtt; 236*9880d681SAndroid Build Coastguard Worker 237*9880d681SAndroid Build Coastguard Worker let IClass = 0b1110; 238*9880d681SAndroid Build Coastguard Worker 239*9880d681SAndroid Build Coastguard Worker let Inst{27-24} = 0b1010; 240*9880d681SAndroid Build Coastguard Worker let Inst{23-21} = MajOp; 241*9880d681SAndroid Build Coastguard Worker let Inst{20-16} = Rss; 242*9880d681SAndroid Build Coastguard Worker let Inst{12-8} = Rtt; 243*9880d681SAndroid Build Coastguard Worker let Inst{7-5} = 0b100; 244*9880d681SAndroid Build Coastguard Worker let Inst{4-0} = Rxx; 245*9880d681SAndroid Build Coastguard Worker } 246*9880d681SAndroid Build Coastguard Worker 247*9880d681SAndroid Build Coastguard Workerdef M2_vrcmpys_acc_s1_h: T_vrcmpys_acc<"hi", 0b101>; 248*9880d681SAndroid Build Coastguard Workerdef M2_vrcmpys_acc_s1_l: T_vrcmpys_acc<"lo", 0b111>; 249*9880d681SAndroid Build Coastguard Worker 250*9880d681SAndroid Build Coastguard Worker// Assembler mapped to M2_vrcmpys_acc_s1_h or M2_vrcmpys_acc_s1_l 251*9880d681SAndroid Build Coastguard Worker 252*9880d681SAndroid Build Coastguard Workerlet isAsmParserOnly = 1 in 253*9880d681SAndroid Build Coastguard Workerdef M2_vrcmpys_acc_s1 254*9880d681SAndroid Build Coastguard Worker : MInst <(outs DoubleRegs:$dst), 255*9880d681SAndroid Build Coastguard Worker (ins DoubleRegs:$dst2, DoubleRegs:$src1, IntRegs:$src2), 256*9880d681SAndroid Build Coastguard Worker "$dst += vrcmpys($src1, $src2):<<1:sat", [], 257*9880d681SAndroid Build Coastguard Worker "$dst2 = $dst">; 258*9880d681SAndroid Build Coastguard Worker 259*9880d681SAndroid Build Coastguard Workerdef M2_vrcmpys_s1rp_h : T_MType_vrcmpy <"vrcmpys", 0b101, 0b110, 1>; 260*9880d681SAndroid Build Coastguard Workerdef M2_vrcmpys_s1rp_l : T_MType_vrcmpy <"vrcmpys", 0b101, 0b111, 0>; 261*9880d681SAndroid Build Coastguard Worker 262*9880d681SAndroid Build Coastguard Worker// Assembler mapped to M2_vrcmpys_s1rp_h or M2_vrcmpys_s1rp_l 263*9880d681SAndroid Build Coastguard Workerlet isAsmParserOnly = 1 in 264*9880d681SAndroid Build Coastguard Workerdef M2_vrcmpys_s1rp 265*9880d681SAndroid Build Coastguard Worker : MInst <(outs IntRegs:$Rd), (ins DoubleRegs:$Rss, IntRegs:$Rt), 266*9880d681SAndroid Build Coastguard Worker "$Rd=vrcmpys($Rss,$Rt):<<1:rnd:sat">; 267*9880d681SAndroid Build Coastguard Worker 268*9880d681SAndroid Build Coastguard Worker 269*9880d681SAndroid Build Coastguard Worker// S2_cabacdecbin: Cabac decode bin. 270*9880d681SAndroid Build Coastguard Workerlet Defs = [P0], isPredicateLate = 1, Itinerary = S_3op_tc_1_SLOT23 in 271*9880d681SAndroid Build Coastguard Workerdef S2_cabacdecbin : T_S3op_64 < "decbin", 0b11, 0b110, 0>; 272