106c3fb27SDimitry Andric//=- LoongArchLASXInstrInfo.td - LoongArch LASX instructions -*- tablegen -*-=// 206c3fb27SDimitry Andric// 306c3fb27SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 406c3fb27SDimitry Andric// See https://llvm.org/LICENSE.txt for license information. 506c3fb27SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 606c3fb27SDimitry Andric// 706c3fb27SDimitry Andric//===----------------------------------------------------------------------===// 806c3fb27SDimitry Andric// 906c3fb27SDimitry Andric// This file describes the Advanced SIMD extension instructions. 1006c3fb27SDimitry Andric// 1106c3fb27SDimitry Andric//===----------------------------------------------------------------------===// 1206c3fb27SDimitry Andric 130fca6ea1SDimitry Andricdef loongarch_xvpermi: SDNode<"LoongArchISD::XVPERMI", SDT_loongArchV1RUimm>; 140fca6ea1SDimitry Andric 155f757f3fSDimitry Andricdef lasxsplati8 165f757f3fSDimitry Andric : PatFrag<(ops node:$e0), 175f757f3fSDimitry Andric (v32i8 (build_vector node:$e0, node:$e0, node:$e0, node:$e0, 185f757f3fSDimitry Andric node:$e0, node:$e0, node:$e0, node:$e0, 195f757f3fSDimitry Andric node:$e0, node:$e0, node:$e0, node:$e0, 205f757f3fSDimitry Andric node:$e0, node:$e0, node:$e0, node:$e0, 215f757f3fSDimitry Andric node:$e0, node:$e0, node:$e0, node:$e0, 225f757f3fSDimitry Andric node:$e0, node:$e0, node:$e0, node:$e0, 235f757f3fSDimitry Andric node:$e0, node:$e0, node:$e0, node:$e0, 245f757f3fSDimitry Andric node:$e0, node:$e0, node:$e0, node:$e0))>; 255f757f3fSDimitry Andricdef lasxsplati16 265f757f3fSDimitry Andric : PatFrag<(ops node:$e0), 275f757f3fSDimitry Andric (v16i16 (build_vector node:$e0, node:$e0, node:$e0, node:$e0, 285f757f3fSDimitry Andric node:$e0, node:$e0, node:$e0, node:$e0, 295f757f3fSDimitry Andric node:$e0, node:$e0, node:$e0, node:$e0, 305f757f3fSDimitry Andric node:$e0, node:$e0, node:$e0, node:$e0))>; 315f757f3fSDimitry Andricdef lasxsplati32 325f757f3fSDimitry Andric : PatFrag<(ops node:$e0), 335f757f3fSDimitry Andric (v8i32 (build_vector node:$e0, node:$e0, node:$e0, node:$e0, 345f757f3fSDimitry Andric node:$e0, node:$e0, node:$e0, node:$e0))>; 355f757f3fSDimitry Andricdef lasxsplati64 365f757f3fSDimitry Andric : PatFrag<(ops node:$e0), 375f757f3fSDimitry Andric (v4i64 (build_vector node:$e0, node:$e0, node:$e0, node:$e0))>; 385f757f3fSDimitry Andricdef lasxsplatf32 395f757f3fSDimitry Andric : PatFrag<(ops node:$e0), 405f757f3fSDimitry Andric (v8f32 (build_vector node:$e0, node:$e0, node:$e0, node:$e0, 415f757f3fSDimitry Andric node:$e0, node:$e0, node:$e0, node:$e0))>; 425f757f3fSDimitry Andricdef lasxsplatf64 435f757f3fSDimitry Andric : PatFrag<(ops node:$e0), 445f757f3fSDimitry Andric (v4f64 (build_vector node:$e0, node:$e0, node:$e0, node:$e0))>; 455f757f3fSDimitry Andric 4606c3fb27SDimitry Andric//===----------------------------------------------------------------------===// 4706c3fb27SDimitry Andric// Instruction class templates 4806c3fb27SDimitry Andric//===----------------------------------------------------------------------===// 4906c3fb27SDimitry Andric 5006c3fb27SDimitry Andricclass LASX1RI13_XI<bits<32> op, Operand ImmOpnd = simm13> 5106c3fb27SDimitry Andric : Fmt1RI13_XI<op, (outs LASX256:$xd), (ins ImmOpnd:$imm13), "$xd, $imm13">; 5206c3fb27SDimitry Andric 5306c3fb27SDimitry Andricclass LASX2R_XX<bits<32> op> 5406c3fb27SDimitry Andric : Fmt2R_XX<op, (outs LASX256:$xd), (ins LASX256:$xj), "$xd, $xj">; 5506c3fb27SDimitry Andric 5606c3fb27SDimitry Andricclass LASX2R_XR<bits<32> op> 5706c3fb27SDimitry Andric : Fmt2R_XR<op, (outs LASX256:$xd), (ins GPR:$rj), "$xd, $rj">; 5806c3fb27SDimitry Andric 5906c3fb27SDimitry Andricclass LASX2R_CX<bits<32> op> 6006c3fb27SDimitry Andric : Fmt2R_CX<op, (outs CFR:$cd), (ins LASX256:$xj), "$cd, $xj">; 6106c3fb27SDimitry Andric 6206c3fb27SDimitry Andricclass LASX2RI1_XXI<bits<32> op, Operand ImmOpnd = uimm1> 6306c3fb27SDimitry Andric : Fmt2RI1_XXI<op, (outs LASX256:$xd), (ins LASX256:$xj, ImmOpnd:$imm1), 6406c3fb27SDimitry Andric "$xd, $xj, $imm1">; 6506c3fb27SDimitry Andric 6606c3fb27SDimitry Andricclass LASX2RI2_XXI<bits<32> op, Operand ImmOpnd = uimm2> 6706c3fb27SDimitry Andric : Fmt2RI2_XXI<op, (outs LASX256:$xd), (ins LASX256:$xj, ImmOpnd:$imm2), 6806c3fb27SDimitry Andric "$xd, $xj, $imm2">; 6906c3fb27SDimitry Andric 7006c3fb27SDimitry Andricclass LASX2RI2_RXI<bits<32> op, Operand ImmOpnd = uimm2> 7106c3fb27SDimitry Andric : Fmt2RI2_RXI<op, (outs GPR:$rd), (ins LASX256:$xj, ImmOpnd:$imm2), 7206c3fb27SDimitry Andric "$rd, $xj, $imm2">; 7306c3fb27SDimitry Andric 7406c3fb27SDimitry Andricclass LASX2RI3_XXI<bits<32> op, Operand ImmOpnd = uimm3> 7506c3fb27SDimitry Andric : Fmt2RI3_XXI<op, (outs LASX256:$xd), (ins LASX256:$xj, ImmOpnd:$imm3), 7606c3fb27SDimitry Andric "$xd, $xj, $imm3">; 7706c3fb27SDimitry Andric 7806c3fb27SDimitry Andricclass LASX2RI3_RXI<bits<32> op, Operand ImmOpnd = uimm3> 7906c3fb27SDimitry Andric : Fmt2RI3_RXI<op, (outs GPR:$rd), (ins LASX256:$xj, ImmOpnd:$imm3), 8006c3fb27SDimitry Andric "$rd, $xj, $imm3">; 8106c3fb27SDimitry Andric 8206c3fb27SDimitry Andricclass LASX2RI4_XXI<bits<32> op, Operand ImmOpnd = uimm4> 8306c3fb27SDimitry Andric : Fmt2RI4_XXI<op, (outs LASX256:$xd), (ins LASX256:$xj, ImmOpnd:$imm4), 8406c3fb27SDimitry Andric "$xd, $xj, $imm4">; 8506c3fb27SDimitry Andric 8606c3fb27SDimitry Andricclass LASX2RI4_XRI<bits<32> op, Operand ImmOpnd = uimm4> 8706c3fb27SDimitry Andric : Fmt2RI4_XRI<op, (outs LASX256:$xd), (ins GPR:$rj, ImmOpnd:$imm4), 8806c3fb27SDimitry Andric "$xd, $rj, $imm4">; 8906c3fb27SDimitry Andric 9006c3fb27SDimitry Andricclass LASX2RI4_RXI<bits<32> op, Operand ImmOpnd = uimm4> 9106c3fb27SDimitry Andric : Fmt2RI4_RXI<op, (outs GPR:$rd), (ins LASX256:$xj, ImmOpnd:$imm4), 9206c3fb27SDimitry Andric "$rd, $xj, $imm4">; 9306c3fb27SDimitry Andric 9406c3fb27SDimitry Andricclass LASX2RI5_XXI<bits<32> op, Operand ImmOpnd = uimm5> 9506c3fb27SDimitry Andric : Fmt2RI5_XXI<op, (outs LASX256:$xd), (ins LASX256:$xj, ImmOpnd:$imm5), 9606c3fb27SDimitry Andric "$xd, $xj, $imm5">; 9706c3fb27SDimitry Andric 9806c3fb27SDimitry Andricclass LASX2RI6_XXI<bits<32> op, Operand ImmOpnd = uimm6> 9906c3fb27SDimitry Andric : Fmt2RI6_XXI<op, (outs LASX256:$xd), (ins LASX256:$xj, ImmOpnd:$imm6), 10006c3fb27SDimitry Andric "$xd, $xj, $imm6">; 10106c3fb27SDimitry Andric 10206c3fb27SDimitry Andricclass LASX2RI8_XXI<bits<32> op, Operand ImmOpnd = uimm8> 10306c3fb27SDimitry Andric : Fmt2RI8_XXI<op, (outs LASX256:$xd), (ins LASX256:$xj, ImmOpnd:$imm8), 10406c3fb27SDimitry Andric "$xd, $xj, $imm8">; 10506c3fb27SDimitry Andric 10606c3fb27SDimitry Andricclass LASX2RI8I2_XRII<bits<32> op, Operand ImmOpnd = simm8, 10706c3fb27SDimitry Andric Operand IdxOpnd = uimm2> 10806c3fb27SDimitry Andric : Fmt2RI8I2_XRII<op, (outs), 10906c3fb27SDimitry Andric (ins LASX256:$xd, GPR:$rj, ImmOpnd:$imm8, IdxOpnd:$imm2), 11006c3fb27SDimitry Andric "$xd, $rj, $imm8, $imm2">; 11106c3fb27SDimitry Andricclass LASX2RI8I3_XRII<bits<32> op, Operand ImmOpnd = simm8, 11206c3fb27SDimitry Andric Operand IdxOpnd = uimm3> 11306c3fb27SDimitry Andric : Fmt2RI8I3_XRII<op, (outs), 11406c3fb27SDimitry Andric (ins LASX256:$xd, GPR:$rj, ImmOpnd:$imm8, IdxOpnd:$imm3), 11506c3fb27SDimitry Andric "$xd, $rj, $imm8, $imm3">; 11606c3fb27SDimitry Andricclass LASX2RI8I4_XRII<bits<32> op, Operand ImmOpnd = simm8, 11706c3fb27SDimitry Andric Operand IdxOpnd = uimm4> 11806c3fb27SDimitry Andric : Fmt2RI8I4_XRII<op, (outs), 11906c3fb27SDimitry Andric (ins LASX256:$xd, GPR:$rj, ImmOpnd:$imm8, IdxOpnd:$imm4), 12006c3fb27SDimitry Andric "$xd, $rj, $imm8, $imm4">; 12106c3fb27SDimitry Andricclass LASX2RI8I5_XRII<bits<32> op, Operand ImmOpnd = simm8, 12206c3fb27SDimitry Andric Operand IdxOpnd = uimm5> 12306c3fb27SDimitry Andric : Fmt2RI8I5_XRII<op, (outs), 12406c3fb27SDimitry Andric (ins LASX256:$xd, GPR:$rj, ImmOpnd:$imm8, IdxOpnd:$imm5), 12506c3fb27SDimitry Andric "$xd, $rj, $imm8, $imm5">; 12606c3fb27SDimitry Andric 12706c3fb27SDimitry Andricclass LASX3R_XXX<bits<32> op> 12806c3fb27SDimitry Andric : Fmt3R_XXX<op, (outs LASX256:$xd), (ins LASX256:$xj, LASX256:$xk), 12906c3fb27SDimitry Andric "$xd, $xj, $xk">; 13006c3fb27SDimitry Andric 13106c3fb27SDimitry Andricclass LASX3R_XXR<bits<32> op> 13206c3fb27SDimitry Andric : Fmt3R_XXR<op, (outs LASX256:$xd), (ins LASX256:$xj, GPR:$rk), 13306c3fb27SDimitry Andric "$xd, $xj, $rk">; 13406c3fb27SDimitry Andric 13506c3fb27SDimitry Andricclass LASX4R_XXXX<bits<32> op> 13606c3fb27SDimitry Andric : Fmt4R_XXXX<op, (outs LASX256:$xd), 13706c3fb27SDimitry Andric (ins LASX256:$xj, LASX256:$xk, LASX256:$xa), 13806c3fb27SDimitry Andric "$xd, $xj, $xk, $xa">; 13906c3fb27SDimitry Andric 14006c3fb27SDimitry Andriclet Constraints = "$xd = $dst" in { 14106c3fb27SDimitry Andric 14206c3fb27SDimitry Andricclass LASX2RI2_XXXI<bits<32> op, Operand ImmOpnd = uimm2> 14306c3fb27SDimitry Andric : Fmt2RI2_XXI<op, (outs LASX256:$dst), (ins LASX256:$xd, LASX256:$xj, ImmOpnd:$imm2), 14406c3fb27SDimitry Andric "$xd, $xj, $imm2">; 14506c3fb27SDimitry Andricclass LASX2RI3_XXXI<bits<32> op, Operand ImmOpnd = uimm3> 14606c3fb27SDimitry Andric : Fmt2RI3_XXI<op, (outs LASX256:$dst), (ins LASX256:$xd, LASX256:$xj, ImmOpnd:$imm3), 14706c3fb27SDimitry Andric "$xd, $xj, $imm3">; 14806c3fb27SDimitry Andric 14906c3fb27SDimitry Andricclass LASX2RI2_XXRI<bits<32> op, Operand ImmOpnd = uimm2> 15006c3fb27SDimitry Andric : Fmt2RI2_XRI<op, (outs LASX256:$dst), (ins LASX256:$xd, GPR:$rj, ImmOpnd:$imm2), 15106c3fb27SDimitry Andric "$xd, $rj, $imm2">; 15206c3fb27SDimitry Andricclass LASX2RI3_XXRI<bits<32> op, Operand ImmOpnd = uimm3> 15306c3fb27SDimitry Andric : Fmt2RI3_XRI<op, (outs LASX256:$dst), (ins LASX256:$xd, GPR:$rj, ImmOpnd:$imm3), 15406c3fb27SDimitry Andric "$xd, $rj, $imm3">; 15506c3fb27SDimitry Andric 15606c3fb27SDimitry Andricclass LASX2RI4_XXXI<bits<32> op, Operand ImmOpnd = uimm4> 15706c3fb27SDimitry Andric : Fmt2RI4_XXI<op, (outs LASX256:$dst), (ins LASX256:$xd, LASX256:$xj, ImmOpnd:$imm4), 15806c3fb27SDimitry Andric "$xd, $xj, $imm4">; 15906c3fb27SDimitry Andricclass LASX2RI5_XXXI<bits<32> op, Operand ImmOpnd = uimm5> 16006c3fb27SDimitry Andric : Fmt2RI5_XXI<op, (outs LASX256:$dst), (ins LASX256:$xd, LASX256:$xj, ImmOpnd:$imm5), 16106c3fb27SDimitry Andric "$xd, $xj, $imm5">; 16206c3fb27SDimitry Andricclass LASX2RI6_XXXI<bits<32> op, Operand ImmOpnd = uimm6> 16306c3fb27SDimitry Andric : Fmt2RI6_XXI<op, (outs LASX256:$dst), (ins LASX256:$xd, LASX256:$xj, ImmOpnd:$imm6), 16406c3fb27SDimitry Andric "$xd, $xj, $imm6">; 16506c3fb27SDimitry Andricclass LASX2RI7_XXXI<bits<32> op, Operand ImmOpnd = uimm7> 16606c3fb27SDimitry Andric : Fmt2RI7_XXI<op, (outs LASX256:$dst), (ins LASX256:$xd, LASX256:$xj, ImmOpnd:$imm7), 16706c3fb27SDimitry Andric "$xd, $xj, $imm7">; 16806c3fb27SDimitry Andric 16906c3fb27SDimitry Andricclass LASX2RI8_XXXI<bits<32> op, Operand ImmOpnd = uimm8> 17006c3fb27SDimitry Andric : Fmt2RI8_XXI<op, (outs LASX256:$dst), (ins LASX256:$xd, LASX256:$xj, ImmOpnd:$imm8), 17106c3fb27SDimitry Andric "$xd, $xj, $imm8">; 17206c3fb27SDimitry Andric 17306c3fb27SDimitry Andricclass LASX3R_XXXX<bits<32> op> 17406c3fb27SDimitry Andric : Fmt3R_XXX<op, (outs LASX256:$dst), (ins LASX256:$xd, LASX256:$xj, LASX256:$xk), 17506c3fb27SDimitry Andric "$xd, $xj, $xk">; 17606c3fb27SDimitry Andric 17706c3fb27SDimitry Andric} // Constraints = "$xd = $dst" 17806c3fb27SDimitry Andric 17906c3fb27SDimitry Andricclass LASX2RI9_Load<bits<32> op, Operand ImmOpnd = simm9_lsl3> 18006c3fb27SDimitry Andric : Fmt2RI9_XRI<op, (outs LASX256:$xd), (ins GPR:$rj, ImmOpnd:$imm9), 18106c3fb27SDimitry Andric "$xd, $rj, $imm9">; 18206c3fb27SDimitry Andricclass LASX2RI10_Load<bits<32> op, Operand ImmOpnd = simm10_lsl2> 18306c3fb27SDimitry Andric : Fmt2RI10_XRI<op, (outs LASX256:$xd), (ins GPR:$rj, ImmOpnd:$imm10), 18406c3fb27SDimitry Andric "$xd, $rj, $imm10">; 18506c3fb27SDimitry Andricclass LASX2RI11_Load<bits<32> op, Operand ImmOpnd = simm11_lsl1> 18606c3fb27SDimitry Andric : Fmt2RI11_XRI<op, (outs LASX256:$xd), (ins GPR:$rj, ImmOpnd:$imm11), 18706c3fb27SDimitry Andric "$xd, $rj, $imm11">; 18806c3fb27SDimitry Andricclass LASX2RI12_Load<bits<32> op, Operand ImmOpnd = simm12> 18906c3fb27SDimitry Andric : Fmt2RI12_XRI<op, (outs LASX256:$xd), (ins GPR:$rj, ImmOpnd:$imm12), 19006c3fb27SDimitry Andric "$xd, $rj, $imm12">; 19106c3fb27SDimitry Andricclass LASX2RI12_Store<bits<32> op, Operand ImmOpnd = simm12> 19206c3fb27SDimitry Andric : Fmt2RI12_XRI<op, (outs), (ins LASX256:$xd, GPR:$rj, ImmOpnd:$imm12), 19306c3fb27SDimitry Andric "$xd, $rj, $imm12">; 19406c3fb27SDimitry Andric 19506c3fb27SDimitry Andricclass LASX3R_Load<bits<32> op> 19606c3fb27SDimitry Andric : Fmt3R_XRR<op, (outs LASX256:$xd), (ins GPR:$rj, GPR:$rk), 19706c3fb27SDimitry Andric "$xd, $rj, $rk">; 19806c3fb27SDimitry Andricclass LASX3R_Store<bits<32> op> 19906c3fb27SDimitry Andric : Fmt3R_XRR<op, (outs), (ins LASX256:$xd, GPR:$rj, GPR:$rk), 20006c3fb27SDimitry Andric "$xd, $rj, $rk">; 20106c3fb27SDimitry Andric 20206c3fb27SDimitry Andric//===----------------------------------------------------------------------===// 20306c3fb27SDimitry Andric// Instructions 20406c3fb27SDimitry Andric//===----------------------------------------------------------------------===// 20506c3fb27SDimitry Andric 20606c3fb27SDimitry Andriclet hasSideEffects = 0, Predicates = [HasExtLASX] in { 20706c3fb27SDimitry Andric 20806c3fb27SDimitry Andriclet mayLoad = 0, mayStore = 0 in { 20906c3fb27SDimitry Andricdef XVADD_B : LASX3R_XXX<0x740a0000>; 21006c3fb27SDimitry Andricdef XVADD_H : LASX3R_XXX<0x740a8000>; 21106c3fb27SDimitry Andricdef XVADD_W : LASX3R_XXX<0x740b0000>; 21206c3fb27SDimitry Andricdef XVADD_D : LASX3R_XXX<0x740b8000>; 21306c3fb27SDimitry Andricdef XVADD_Q : LASX3R_XXX<0x752d0000>; 21406c3fb27SDimitry Andric 21506c3fb27SDimitry Andricdef XVSUB_B : LASX3R_XXX<0x740c0000>; 21606c3fb27SDimitry Andricdef XVSUB_H : LASX3R_XXX<0x740c8000>; 21706c3fb27SDimitry Andricdef XVSUB_W : LASX3R_XXX<0x740d0000>; 21806c3fb27SDimitry Andricdef XVSUB_D : LASX3R_XXX<0x740d8000>; 21906c3fb27SDimitry Andricdef XVSUB_Q : LASX3R_XXX<0x752d8000>; 22006c3fb27SDimitry Andric 22106c3fb27SDimitry Andricdef XVADDI_BU : LASX2RI5_XXI<0x768a0000>; 22206c3fb27SDimitry Andricdef XVADDI_HU : LASX2RI5_XXI<0x768a8000>; 22306c3fb27SDimitry Andricdef XVADDI_WU : LASX2RI5_XXI<0x768b0000>; 22406c3fb27SDimitry Andricdef XVADDI_DU : LASX2RI5_XXI<0x768b8000>; 22506c3fb27SDimitry Andric 22606c3fb27SDimitry Andricdef XVSUBI_BU : LASX2RI5_XXI<0x768c0000>; 22706c3fb27SDimitry Andricdef XVSUBI_HU : LASX2RI5_XXI<0x768c8000>; 22806c3fb27SDimitry Andricdef XVSUBI_WU : LASX2RI5_XXI<0x768d0000>; 22906c3fb27SDimitry Andricdef XVSUBI_DU : LASX2RI5_XXI<0x768d8000>; 23006c3fb27SDimitry Andric 23106c3fb27SDimitry Andricdef XVNEG_B : LASX2R_XX<0x769c3000>; 23206c3fb27SDimitry Andricdef XVNEG_H : LASX2R_XX<0x769c3400>; 23306c3fb27SDimitry Andricdef XVNEG_W : LASX2R_XX<0x769c3800>; 23406c3fb27SDimitry Andricdef XVNEG_D : LASX2R_XX<0x769c3c00>; 23506c3fb27SDimitry Andric 23606c3fb27SDimitry Andricdef XVSADD_B : LASX3R_XXX<0x74460000>; 23706c3fb27SDimitry Andricdef XVSADD_H : LASX3R_XXX<0x74468000>; 23806c3fb27SDimitry Andricdef XVSADD_W : LASX3R_XXX<0x74470000>; 23906c3fb27SDimitry Andricdef XVSADD_D : LASX3R_XXX<0x74478000>; 24006c3fb27SDimitry Andricdef XVSADD_BU : LASX3R_XXX<0x744a0000>; 24106c3fb27SDimitry Andricdef XVSADD_HU : LASX3R_XXX<0x744a8000>; 24206c3fb27SDimitry Andricdef XVSADD_WU : LASX3R_XXX<0x744b0000>; 24306c3fb27SDimitry Andricdef XVSADD_DU : LASX3R_XXX<0x744b8000>; 24406c3fb27SDimitry Andric 24506c3fb27SDimitry Andricdef XVSSUB_B : LASX3R_XXX<0x74480000>; 24606c3fb27SDimitry Andricdef XVSSUB_H : LASX3R_XXX<0x74488000>; 24706c3fb27SDimitry Andricdef XVSSUB_W : LASX3R_XXX<0x74490000>; 24806c3fb27SDimitry Andricdef XVSSUB_D : LASX3R_XXX<0x74498000>; 24906c3fb27SDimitry Andricdef XVSSUB_BU : LASX3R_XXX<0x744c0000>; 25006c3fb27SDimitry Andricdef XVSSUB_HU : LASX3R_XXX<0x744c8000>; 25106c3fb27SDimitry Andricdef XVSSUB_WU : LASX3R_XXX<0x744d0000>; 25206c3fb27SDimitry Andricdef XVSSUB_DU : LASX3R_XXX<0x744d8000>; 25306c3fb27SDimitry Andric 25406c3fb27SDimitry Andricdef XVHADDW_H_B : LASX3R_XXX<0x74540000>; 25506c3fb27SDimitry Andricdef XVHADDW_W_H : LASX3R_XXX<0x74548000>; 25606c3fb27SDimitry Andricdef XVHADDW_D_W : LASX3R_XXX<0x74550000>; 25706c3fb27SDimitry Andricdef XVHADDW_Q_D : LASX3R_XXX<0x74558000>; 25806c3fb27SDimitry Andricdef XVHADDW_HU_BU : LASX3R_XXX<0x74580000>; 25906c3fb27SDimitry Andricdef XVHADDW_WU_HU : LASX3R_XXX<0x74588000>; 26006c3fb27SDimitry Andricdef XVHADDW_DU_WU : LASX3R_XXX<0x74590000>; 26106c3fb27SDimitry Andricdef XVHADDW_QU_DU : LASX3R_XXX<0x74598000>; 26206c3fb27SDimitry Andric 26306c3fb27SDimitry Andricdef XVHSUBW_H_B : LASX3R_XXX<0x74560000>; 26406c3fb27SDimitry Andricdef XVHSUBW_W_H : LASX3R_XXX<0x74568000>; 26506c3fb27SDimitry Andricdef XVHSUBW_D_W : LASX3R_XXX<0x74570000>; 26606c3fb27SDimitry Andricdef XVHSUBW_Q_D : LASX3R_XXX<0x74578000>; 26706c3fb27SDimitry Andricdef XVHSUBW_HU_BU : LASX3R_XXX<0x745a0000>; 26806c3fb27SDimitry Andricdef XVHSUBW_WU_HU : LASX3R_XXX<0x745a8000>; 26906c3fb27SDimitry Andricdef XVHSUBW_DU_WU : LASX3R_XXX<0x745b0000>; 27006c3fb27SDimitry Andricdef XVHSUBW_QU_DU : LASX3R_XXX<0x745b8000>; 27106c3fb27SDimitry Andric 27206c3fb27SDimitry Andricdef XVADDWEV_H_B : LASX3R_XXX<0x741e0000>; 27306c3fb27SDimitry Andricdef XVADDWEV_W_H : LASX3R_XXX<0x741e8000>; 27406c3fb27SDimitry Andricdef XVADDWEV_D_W : LASX3R_XXX<0x741f0000>; 27506c3fb27SDimitry Andricdef XVADDWEV_Q_D : LASX3R_XXX<0x741f8000>; 27606c3fb27SDimitry Andricdef XVADDWOD_H_B : LASX3R_XXX<0x74220000>; 27706c3fb27SDimitry Andricdef XVADDWOD_W_H : LASX3R_XXX<0x74228000>; 27806c3fb27SDimitry Andricdef XVADDWOD_D_W : LASX3R_XXX<0x74230000>; 27906c3fb27SDimitry Andricdef XVADDWOD_Q_D : LASX3R_XXX<0x74238000>; 28006c3fb27SDimitry Andric 28106c3fb27SDimitry Andricdef XVSUBWEV_H_B : LASX3R_XXX<0x74200000>; 28206c3fb27SDimitry Andricdef XVSUBWEV_W_H : LASX3R_XXX<0x74208000>; 28306c3fb27SDimitry Andricdef XVSUBWEV_D_W : LASX3R_XXX<0x74210000>; 28406c3fb27SDimitry Andricdef XVSUBWEV_Q_D : LASX3R_XXX<0x74218000>; 28506c3fb27SDimitry Andricdef XVSUBWOD_H_B : LASX3R_XXX<0x74240000>; 28606c3fb27SDimitry Andricdef XVSUBWOD_W_H : LASX3R_XXX<0x74248000>; 28706c3fb27SDimitry Andricdef XVSUBWOD_D_W : LASX3R_XXX<0x74250000>; 28806c3fb27SDimitry Andricdef XVSUBWOD_Q_D : LASX3R_XXX<0x74258000>; 28906c3fb27SDimitry Andric 29006c3fb27SDimitry Andricdef XVADDWEV_H_BU : LASX3R_XXX<0x742e0000>; 29106c3fb27SDimitry Andricdef XVADDWEV_W_HU : LASX3R_XXX<0x742e8000>; 29206c3fb27SDimitry Andricdef XVADDWEV_D_WU : LASX3R_XXX<0x742f0000>; 29306c3fb27SDimitry Andricdef XVADDWEV_Q_DU : LASX3R_XXX<0x742f8000>; 29406c3fb27SDimitry Andricdef XVADDWOD_H_BU : LASX3R_XXX<0x74320000>; 29506c3fb27SDimitry Andricdef XVADDWOD_W_HU : LASX3R_XXX<0x74328000>; 29606c3fb27SDimitry Andricdef XVADDWOD_D_WU : LASX3R_XXX<0x74330000>; 29706c3fb27SDimitry Andricdef XVADDWOD_Q_DU : LASX3R_XXX<0x74338000>; 29806c3fb27SDimitry Andric 29906c3fb27SDimitry Andricdef XVSUBWEV_H_BU : LASX3R_XXX<0x74300000>; 30006c3fb27SDimitry Andricdef XVSUBWEV_W_HU : LASX3R_XXX<0x74308000>; 30106c3fb27SDimitry Andricdef XVSUBWEV_D_WU : LASX3R_XXX<0x74310000>; 30206c3fb27SDimitry Andricdef XVSUBWEV_Q_DU : LASX3R_XXX<0x74318000>; 30306c3fb27SDimitry Andricdef XVSUBWOD_H_BU : LASX3R_XXX<0x74340000>; 30406c3fb27SDimitry Andricdef XVSUBWOD_W_HU : LASX3R_XXX<0x74348000>; 30506c3fb27SDimitry Andricdef XVSUBWOD_D_WU : LASX3R_XXX<0x74350000>; 30606c3fb27SDimitry Andricdef XVSUBWOD_Q_DU : LASX3R_XXX<0x74358000>; 30706c3fb27SDimitry Andric 30806c3fb27SDimitry Andricdef XVADDWEV_H_BU_B : LASX3R_XXX<0x743e0000>; 30906c3fb27SDimitry Andricdef XVADDWEV_W_HU_H : LASX3R_XXX<0x743e8000>; 31006c3fb27SDimitry Andricdef XVADDWEV_D_WU_W : LASX3R_XXX<0x743f0000>; 31106c3fb27SDimitry Andricdef XVADDWEV_Q_DU_D : LASX3R_XXX<0x743f8000>; 31206c3fb27SDimitry Andricdef XVADDWOD_H_BU_B : LASX3R_XXX<0x74400000>; 31306c3fb27SDimitry Andricdef XVADDWOD_W_HU_H : LASX3R_XXX<0x74408000>; 31406c3fb27SDimitry Andricdef XVADDWOD_D_WU_W : LASX3R_XXX<0x74410000>; 31506c3fb27SDimitry Andricdef XVADDWOD_Q_DU_D : LASX3R_XXX<0x74418000>; 31606c3fb27SDimitry Andric 31706c3fb27SDimitry Andricdef XVAVG_B : LASX3R_XXX<0x74640000>; 31806c3fb27SDimitry Andricdef XVAVG_H : LASX3R_XXX<0x74648000>; 31906c3fb27SDimitry Andricdef XVAVG_W : LASX3R_XXX<0x74650000>; 32006c3fb27SDimitry Andricdef XVAVG_D : LASX3R_XXX<0x74658000>; 32106c3fb27SDimitry Andricdef XVAVG_BU : LASX3R_XXX<0x74660000>; 32206c3fb27SDimitry Andricdef XVAVG_HU : LASX3R_XXX<0x74668000>; 32306c3fb27SDimitry Andricdef XVAVG_WU : LASX3R_XXX<0x74670000>; 32406c3fb27SDimitry Andricdef XVAVG_DU : LASX3R_XXX<0x74678000>; 32506c3fb27SDimitry Andricdef XVAVGR_B : LASX3R_XXX<0x74680000>; 32606c3fb27SDimitry Andricdef XVAVGR_H : LASX3R_XXX<0x74688000>; 32706c3fb27SDimitry Andricdef XVAVGR_W : LASX3R_XXX<0x74690000>; 32806c3fb27SDimitry Andricdef XVAVGR_D : LASX3R_XXX<0x74698000>; 32906c3fb27SDimitry Andricdef XVAVGR_BU : LASX3R_XXX<0x746a0000>; 33006c3fb27SDimitry Andricdef XVAVGR_HU : LASX3R_XXX<0x746a8000>; 33106c3fb27SDimitry Andricdef XVAVGR_WU : LASX3R_XXX<0x746b0000>; 33206c3fb27SDimitry Andricdef XVAVGR_DU : LASX3R_XXX<0x746b8000>; 33306c3fb27SDimitry Andric 33406c3fb27SDimitry Andricdef XVABSD_B : LASX3R_XXX<0x74600000>; 33506c3fb27SDimitry Andricdef XVABSD_H : LASX3R_XXX<0x74608000>; 33606c3fb27SDimitry Andricdef XVABSD_W : LASX3R_XXX<0x74610000>; 33706c3fb27SDimitry Andricdef XVABSD_D : LASX3R_XXX<0x74618000>; 33806c3fb27SDimitry Andricdef XVABSD_BU : LASX3R_XXX<0x74620000>; 33906c3fb27SDimitry Andricdef XVABSD_HU : LASX3R_XXX<0x74628000>; 34006c3fb27SDimitry Andricdef XVABSD_WU : LASX3R_XXX<0x74630000>; 34106c3fb27SDimitry Andricdef XVABSD_DU : LASX3R_XXX<0x74638000>; 34206c3fb27SDimitry Andric 34306c3fb27SDimitry Andricdef XVADDA_B : LASX3R_XXX<0x745c0000>; 34406c3fb27SDimitry Andricdef XVADDA_H : LASX3R_XXX<0x745c8000>; 34506c3fb27SDimitry Andricdef XVADDA_W : LASX3R_XXX<0x745d0000>; 34606c3fb27SDimitry Andricdef XVADDA_D : LASX3R_XXX<0x745d8000>; 34706c3fb27SDimitry Andric 34806c3fb27SDimitry Andricdef XVMAX_B : LASX3R_XXX<0x74700000>; 34906c3fb27SDimitry Andricdef XVMAX_H : LASX3R_XXX<0x74708000>; 35006c3fb27SDimitry Andricdef XVMAX_W : LASX3R_XXX<0x74710000>; 35106c3fb27SDimitry Andricdef XVMAX_D : LASX3R_XXX<0x74718000>; 35206c3fb27SDimitry Andricdef XVMAXI_B : LASX2RI5_XXI<0x76900000, simm5>; 35306c3fb27SDimitry Andricdef XVMAXI_H : LASX2RI5_XXI<0x76908000, simm5>; 35406c3fb27SDimitry Andricdef XVMAXI_W : LASX2RI5_XXI<0x76910000, simm5>; 35506c3fb27SDimitry Andricdef XVMAXI_D : LASX2RI5_XXI<0x76918000, simm5>; 35606c3fb27SDimitry Andricdef XVMAX_BU : LASX3R_XXX<0x74740000>; 35706c3fb27SDimitry Andricdef XVMAX_HU : LASX3R_XXX<0x74748000>; 35806c3fb27SDimitry Andricdef XVMAX_WU : LASX3R_XXX<0x74750000>; 35906c3fb27SDimitry Andricdef XVMAX_DU : LASX3R_XXX<0x74758000>; 36006c3fb27SDimitry Andricdef XVMAXI_BU : LASX2RI5_XXI<0x76940000>; 36106c3fb27SDimitry Andricdef XVMAXI_HU : LASX2RI5_XXI<0x76948000>; 36206c3fb27SDimitry Andricdef XVMAXI_WU : LASX2RI5_XXI<0x76950000>; 36306c3fb27SDimitry Andricdef XVMAXI_DU : LASX2RI5_XXI<0x76958000>; 36406c3fb27SDimitry Andric 36506c3fb27SDimitry Andricdef XVMIN_B : LASX3R_XXX<0x74720000>; 36606c3fb27SDimitry Andricdef XVMIN_H : LASX3R_XXX<0x74728000>; 36706c3fb27SDimitry Andricdef XVMIN_W : LASX3R_XXX<0x74730000>; 36806c3fb27SDimitry Andricdef XVMIN_D : LASX3R_XXX<0x74738000>; 36906c3fb27SDimitry Andricdef XVMINI_B : LASX2RI5_XXI<0x76920000, simm5>; 37006c3fb27SDimitry Andricdef XVMINI_H : LASX2RI5_XXI<0x76928000, simm5>; 37106c3fb27SDimitry Andricdef XVMINI_W : LASX2RI5_XXI<0x76930000, simm5>; 37206c3fb27SDimitry Andricdef XVMINI_D : LASX2RI5_XXI<0x76938000, simm5>; 37306c3fb27SDimitry Andricdef XVMIN_BU : LASX3R_XXX<0x74760000>; 37406c3fb27SDimitry Andricdef XVMIN_HU : LASX3R_XXX<0x74768000>; 37506c3fb27SDimitry Andricdef XVMIN_WU : LASX3R_XXX<0x74770000>; 37606c3fb27SDimitry Andricdef XVMIN_DU : LASX3R_XXX<0x74778000>; 37706c3fb27SDimitry Andricdef XVMINI_BU : LASX2RI5_XXI<0x76960000>; 37806c3fb27SDimitry Andricdef XVMINI_HU : LASX2RI5_XXI<0x76968000>; 37906c3fb27SDimitry Andricdef XVMINI_WU : LASX2RI5_XXI<0x76970000>; 38006c3fb27SDimitry Andricdef XVMINI_DU : LASX2RI5_XXI<0x76978000>; 38106c3fb27SDimitry Andric 38206c3fb27SDimitry Andricdef XVMUL_B : LASX3R_XXX<0x74840000>; 38306c3fb27SDimitry Andricdef XVMUL_H : LASX3R_XXX<0x74848000>; 38406c3fb27SDimitry Andricdef XVMUL_W : LASX3R_XXX<0x74850000>; 38506c3fb27SDimitry Andricdef XVMUL_D : LASX3R_XXX<0x74858000>; 38606c3fb27SDimitry Andric 38706c3fb27SDimitry Andricdef XVMUH_B : LASX3R_XXX<0x74860000>; 38806c3fb27SDimitry Andricdef XVMUH_H : LASX3R_XXX<0x74868000>; 38906c3fb27SDimitry Andricdef XVMUH_W : LASX3R_XXX<0x74870000>; 39006c3fb27SDimitry Andricdef XVMUH_D : LASX3R_XXX<0x74878000>; 39106c3fb27SDimitry Andricdef XVMUH_BU : LASX3R_XXX<0x74880000>; 39206c3fb27SDimitry Andricdef XVMUH_HU : LASX3R_XXX<0x74888000>; 39306c3fb27SDimitry Andricdef XVMUH_WU : LASX3R_XXX<0x74890000>; 39406c3fb27SDimitry Andricdef XVMUH_DU : LASX3R_XXX<0x74898000>; 39506c3fb27SDimitry Andric 39606c3fb27SDimitry Andricdef XVMULWEV_H_B : LASX3R_XXX<0x74900000>; 39706c3fb27SDimitry Andricdef XVMULWEV_W_H : LASX3R_XXX<0x74908000>; 39806c3fb27SDimitry Andricdef XVMULWEV_D_W : LASX3R_XXX<0x74910000>; 39906c3fb27SDimitry Andricdef XVMULWEV_Q_D : LASX3R_XXX<0x74918000>; 40006c3fb27SDimitry Andricdef XVMULWOD_H_B : LASX3R_XXX<0x74920000>; 40106c3fb27SDimitry Andricdef XVMULWOD_W_H : LASX3R_XXX<0x74928000>; 40206c3fb27SDimitry Andricdef XVMULWOD_D_W : LASX3R_XXX<0x74930000>; 40306c3fb27SDimitry Andricdef XVMULWOD_Q_D : LASX3R_XXX<0x74938000>; 40406c3fb27SDimitry Andricdef XVMULWEV_H_BU : LASX3R_XXX<0x74980000>; 40506c3fb27SDimitry Andricdef XVMULWEV_W_HU : LASX3R_XXX<0x74988000>; 40606c3fb27SDimitry Andricdef XVMULWEV_D_WU : LASX3R_XXX<0x74990000>; 40706c3fb27SDimitry Andricdef XVMULWEV_Q_DU : LASX3R_XXX<0x74998000>; 40806c3fb27SDimitry Andricdef XVMULWOD_H_BU : LASX3R_XXX<0x749a0000>; 40906c3fb27SDimitry Andricdef XVMULWOD_W_HU : LASX3R_XXX<0x749a8000>; 41006c3fb27SDimitry Andricdef XVMULWOD_D_WU : LASX3R_XXX<0x749b0000>; 41106c3fb27SDimitry Andricdef XVMULWOD_Q_DU : LASX3R_XXX<0x749b8000>; 41206c3fb27SDimitry Andricdef XVMULWEV_H_BU_B : LASX3R_XXX<0x74a00000>; 41306c3fb27SDimitry Andricdef XVMULWEV_W_HU_H : LASX3R_XXX<0x74a08000>; 41406c3fb27SDimitry Andricdef XVMULWEV_D_WU_W : LASX3R_XXX<0x74a10000>; 41506c3fb27SDimitry Andricdef XVMULWEV_Q_DU_D : LASX3R_XXX<0x74a18000>; 41606c3fb27SDimitry Andricdef XVMULWOD_H_BU_B : LASX3R_XXX<0x74a20000>; 41706c3fb27SDimitry Andricdef XVMULWOD_W_HU_H : LASX3R_XXX<0x74a28000>; 41806c3fb27SDimitry Andricdef XVMULWOD_D_WU_W : LASX3R_XXX<0x74a30000>; 41906c3fb27SDimitry Andricdef XVMULWOD_Q_DU_D : LASX3R_XXX<0x74a38000>; 42006c3fb27SDimitry Andric 42106c3fb27SDimitry Andricdef XVMADD_B : LASX3R_XXXX<0x74a80000>; 42206c3fb27SDimitry Andricdef XVMADD_H : LASX3R_XXXX<0x74a88000>; 42306c3fb27SDimitry Andricdef XVMADD_W : LASX3R_XXXX<0x74a90000>; 42406c3fb27SDimitry Andricdef XVMADD_D : LASX3R_XXXX<0x74a98000>; 42506c3fb27SDimitry Andric 42606c3fb27SDimitry Andricdef XVMSUB_B : LASX3R_XXXX<0x74aa0000>; 42706c3fb27SDimitry Andricdef XVMSUB_H : LASX3R_XXXX<0x74aa8000>; 42806c3fb27SDimitry Andricdef XVMSUB_W : LASX3R_XXXX<0x74ab0000>; 42906c3fb27SDimitry Andricdef XVMSUB_D : LASX3R_XXXX<0x74ab8000>; 43006c3fb27SDimitry Andric 43106c3fb27SDimitry Andricdef XVMADDWEV_H_B : LASX3R_XXXX<0x74ac0000>; 43206c3fb27SDimitry Andricdef XVMADDWEV_W_H : LASX3R_XXXX<0x74ac8000>; 43306c3fb27SDimitry Andricdef XVMADDWEV_D_W : LASX3R_XXXX<0x74ad0000>; 43406c3fb27SDimitry Andricdef XVMADDWEV_Q_D : LASX3R_XXXX<0x74ad8000>; 43506c3fb27SDimitry Andricdef XVMADDWOD_H_B : LASX3R_XXXX<0x74ae0000>; 43606c3fb27SDimitry Andricdef XVMADDWOD_W_H : LASX3R_XXXX<0x74ae8000>; 43706c3fb27SDimitry Andricdef XVMADDWOD_D_W : LASX3R_XXXX<0x74af0000>; 43806c3fb27SDimitry Andricdef XVMADDWOD_Q_D : LASX3R_XXXX<0x74af8000>; 43906c3fb27SDimitry Andricdef XVMADDWEV_H_BU : LASX3R_XXXX<0x74b40000>; 44006c3fb27SDimitry Andricdef XVMADDWEV_W_HU : LASX3R_XXXX<0x74b48000>; 44106c3fb27SDimitry Andricdef XVMADDWEV_D_WU : LASX3R_XXXX<0x74b50000>; 44206c3fb27SDimitry Andricdef XVMADDWEV_Q_DU : LASX3R_XXXX<0x74b58000>; 44306c3fb27SDimitry Andricdef XVMADDWOD_H_BU : LASX3R_XXXX<0x74b60000>; 44406c3fb27SDimitry Andricdef XVMADDWOD_W_HU : LASX3R_XXXX<0x74b68000>; 44506c3fb27SDimitry Andricdef XVMADDWOD_D_WU : LASX3R_XXXX<0x74b70000>; 44606c3fb27SDimitry Andricdef XVMADDWOD_Q_DU : LASX3R_XXXX<0x74b78000>; 44706c3fb27SDimitry Andricdef XVMADDWEV_H_BU_B : LASX3R_XXXX<0x74bc0000>; 44806c3fb27SDimitry Andricdef XVMADDWEV_W_HU_H : LASX3R_XXXX<0x74bc8000>; 44906c3fb27SDimitry Andricdef XVMADDWEV_D_WU_W : LASX3R_XXXX<0x74bd0000>; 45006c3fb27SDimitry Andricdef XVMADDWEV_Q_DU_D : LASX3R_XXXX<0x74bd8000>; 45106c3fb27SDimitry Andricdef XVMADDWOD_H_BU_B : LASX3R_XXXX<0x74be0000>; 45206c3fb27SDimitry Andricdef XVMADDWOD_W_HU_H : LASX3R_XXXX<0x74be8000>; 45306c3fb27SDimitry Andricdef XVMADDWOD_D_WU_W : LASX3R_XXXX<0x74bf0000>; 45406c3fb27SDimitry Andricdef XVMADDWOD_Q_DU_D : LASX3R_XXXX<0x74bf8000>; 45506c3fb27SDimitry Andric 45606c3fb27SDimitry Andricdef XVDIV_B : LASX3R_XXX<0x74e00000>; 45706c3fb27SDimitry Andricdef XVDIV_H : LASX3R_XXX<0x74e08000>; 45806c3fb27SDimitry Andricdef XVDIV_W : LASX3R_XXX<0x74e10000>; 45906c3fb27SDimitry Andricdef XVDIV_D : LASX3R_XXX<0x74e18000>; 46006c3fb27SDimitry Andricdef XVDIV_BU : LASX3R_XXX<0x74e40000>; 46106c3fb27SDimitry Andricdef XVDIV_HU : LASX3R_XXX<0x74e48000>; 46206c3fb27SDimitry Andricdef XVDIV_WU : LASX3R_XXX<0x74e50000>; 46306c3fb27SDimitry Andricdef XVDIV_DU : LASX3R_XXX<0x74e58000>; 46406c3fb27SDimitry Andric 46506c3fb27SDimitry Andricdef XVMOD_B : LASX3R_XXX<0x74e20000>; 46606c3fb27SDimitry Andricdef XVMOD_H : LASX3R_XXX<0x74e28000>; 46706c3fb27SDimitry Andricdef XVMOD_W : LASX3R_XXX<0x74e30000>; 46806c3fb27SDimitry Andricdef XVMOD_D : LASX3R_XXX<0x74e38000>; 46906c3fb27SDimitry Andricdef XVMOD_BU : LASX3R_XXX<0x74e60000>; 47006c3fb27SDimitry Andricdef XVMOD_HU : LASX3R_XXX<0x74e68000>; 47106c3fb27SDimitry Andricdef XVMOD_WU : LASX3R_XXX<0x74e70000>; 47206c3fb27SDimitry Andricdef XVMOD_DU : LASX3R_XXX<0x74e78000>; 47306c3fb27SDimitry Andric 47406c3fb27SDimitry Andricdef XVSAT_B : LASX2RI3_XXI<0x77242000>; 47506c3fb27SDimitry Andricdef XVSAT_H : LASX2RI4_XXI<0x77244000>; 47606c3fb27SDimitry Andricdef XVSAT_W : LASX2RI5_XXI<0x77248000>; 47706c3fb27SDimitry Andricdef XVSAT_D : LASX2RI6_XXI<0x77250000>; 47806c3fb27SDimitry Andricdef XVSAT_BU : LASX2RI3_XXI<0x77282000>; 47906c3fb27SDimitry Andricdef XVSAT_HU : LASX2RI4_XXI<0x77284000>; 48006c3fb27SDimitry Andricdef XVSAT_WU : LASX2RI5_XXI<0x77288000>; 48106c3fb27SDimitry Andricdef XVSAT_DU : LASX2RI6_XXI<0x77290000>; 48206c3fb27SDimitry Andric 48306c3fb27SDimitry Andricdef XVEXTH_H_B : LASX2R_XX<0x769ee000>; 48406c3fb27SDimitry Andricdef XVEXTH_W_H : LASX2R_XX<0x769ee400>; 48506c3fb27SDimitry Andricdef XVEXTH_D_W : LASX2R_XX<0x769ee800>; 48606c3fb27SDimitry Andricdef XVEXTH_Q_D : LASX2R_XX<0x769eec00>; 48706c3fb27SDimitry Andricdef XVEXTH_HU_BU : LASX2R_XX<0x769ef000>; 48806c3fb27SDimitry Andricdef XVEXTH_WU_HU : LASX2R_XX<0x769ef400>; 48906c3fb27SDimitry Andricdef XVEXTH_DU_WU : LASX2R_XX<0x769ef800>; 49006c3fb27SDimitry Andricdef XVEXTH_QU_DU : LASX2R_XX<0x769efc00>; 49106c3fb27SDimitry Andric 49206c3fb27SDimitry Andricdef VEXT2XV_H_B : LASX2R_XX<0x769f1000>; 49306c3fb27SDimitry Andricdef VEXT2XV_W_B : LASX2R_XX<0x769f1400>; 49406c3fb27SDimitry Andricdef VEXT2XV_D_B : LASX2R_XX<0x769f1800>; 49506c3fb27SDimitry Andricdef VEXT2XV_W_H : LASX2R_XX<0x769f1c00>; 49606c3fb27SDimitry Andricdef VEXT2XV_D_H : LASX2R_XX<0x769f2000>; 49706c3fb27SDimitry Andricdef VEXT2XV_D_W : LASX2R_XX<0x769f2400>; 49806c3fb27SDimitry Andricdef VEXT2XV_HU_BU : LASX2R_XX<0x769f2800>; 49906c3fb27SDimitry Andricdef VEXT2XV_WU_BU : LASX2R_XX<0x769f2c00>; 50006c3fb27SDimitry Andricdef VEXT2XV_DU_BU : LASX2R_XX<0x769f3000>; 50106c3fb27SDimitry Andricdef VEXT2XV_WU_HU : LASX2R_XX<0x769f3400>; 50206c3fb27SDimitry Andricdef VEXT2XV_DU_HU : LASX2R_XX<0x769f3800>; 50306c3fb27SDimitry Andricdef VEXT2XV_DU_WU : LASX2R_XX<0x769f3c00>; 50406c3fb27SDimitry Andric 50506c3fb27SDimitry Andricdef XVHSELI_D : LASX2RI5_XXI<0x769f8000>; 50606c3fb27SDimitry Andric 50706c3fb27SDimitry Andricdef XVSIGNCOV_B : LASX3R_XXX<0x752e0000>; 50806c3fb27SDimitry Andricdef XVSIGNCOV_H : LASX3R_XXX<0x752e8000>; 50906c3fb27SDimitry Andricdef XVSIGNCOV_W : LASX3R_XXX<0x752f0000>; 51006c3fb27SDimitry Andricdef XVSIGNCOV_D : LASX3R_XXX<0x752f8000>; 51106c3fb27SDimitry Andric 51206c3fb27SDimitry Andricdef XVMSKLTZ_B : LASX2R_XX<0x769c4000>; 51306c3fb27SDimitry Andricdef XVMSKLTZ_H : LASX2R_XX<0x769c4400>; 51406c3fb27SDimitry Andricdef XVMSKLTZ_W : LASX2R_XX<0x769c4800>; 51506c3fb27SDimitry Andricdef XVMSKLTZ_D : LASX2R_XX<0x769c4c00>; 51606c3fb27SDimitry Andric 51706c3fb27SDimitry Andricdef XVMSKGEZ_B : LASX2R_XX<0x769c5000>; 51806c3fb27SDimitry Andric 51906c3fb27SDimitry Andricdef XVMSKNZ_B : LASX2R_XX<0x769c6000>; 52006c3fb27SDimitry Andric 52106c3fb27SDimitry Andricdef XVLDI : LASX1RI13_XI<0x77e00000>; 52206c3fb27SDimitry Andric 52306c3fb27SDimitry Andricdef XVAND_V : LASX3R_XXX<0x75260000>; 52406c3fb27SDimitry Andricdef XVOR_V : LASX3R_XXX<0x75268000>; 52506c3fb27SDimitry Andricdef XVXOR_V : LASX3R_XXX<0x75270000>; 52606c3fb27SDimitry Andricdef XVNOR_V : LASX3R_XXX<0x75278000>; 52706c3fb27SDimitry Andricdef XVANDN_V : LASX3R_XXX<0x75280000>; 52806c3fb27SDimitry Andricdef XVORN_V : LASX3R_XXX<0x75288000>; 52906c3fb27SDimitry Andric 53006c3fb27SDimitry Andricdef XVANDI_B : LASX2RI8_XXI<0x77d00000>; 53106c3fb27SDimitry Andricdef XVORI_B : LASX2RI8_XXI<0x77d40000>; 53206c3fb27SDimitry Andricdef XVXORI_B : LASX2RI8_XXI<0x77d80000>; 53306c3fb27SDimitry Andricdef XVNORI_B : LASX2RI8_XXI<0x77dc0000>; 53406c3fb27SDimitry Andric 53506c3fb27SDimitry Andricdef XVSLL_B : LASX3R_XXX<0x74e80000>; 53606c3fb27SDimitry Andricdef XVSLL_H : LASX3R_XXX<0x74e88000>; 53706c3fb27SDimitry Andricdef XVSLL_W : LASX3R_XXX<0x74e90000>; 53806c3fb27SDimitry Andricdef XVSLL_D : LASX3R_XXX<0x74e98000>; 53906c3fb27SDimitry Andricdef XVSLLI_B : LASX2RI3_XXI<0x772c2000>; 54006c3fb27SDimitry Andricdef XVSLLI_H : LASX2RI4_XXI<0x772c4000>; 54106c3fb27SDimitry Andricdef XVSLLI_W : LASX2RI5_XXI<0x772c8000>; 54206c3fb27SDimitry Andricdef XVSLLI_D : LASX2RI6_XXI<0x772d0000>; 54306c3fb27SDimitry Andric 54406c3fb27SDimitry Andricdef XVSRL_B : LASX3R_XXX<0x74ea0000>; 54506c3fb27SDimitry Andricdef XVSRL_H : LASX3R_XXX<0x74ea8000>; 54606c3fb27SDimitry Andricdef XVSRL_W : LASX3R_XXX<0x74eb0000>; 54706c3fb27SDimitry Andricdef XVSRL_D : LASX3R_XXX<0x74eb8000>; 54806c3fb27SDimitry Andricdef XVSRLI_B : LASX2RI3_XXI<0x77302000>; 54906c3fb27SDimitry Andricdef XVSRLI_H : LASX2RI4_XXI<0x77304000>; 55006c3fb27SDimitry Andricdef XVSRLI_W : LASX2RI5_XXI<0x77308000>; 55106c3fb27SDimitry Andricdef XVSRLI_D : LASX2RI6_XXI<0x77310000>; 55206c3fb27SDimitry Andric 55306c3fb27SDimitry Andricdef XVSRA_B : LASX3R_XXX<0x74ec0000>; 55406c3fb27SDimitry Andricdef XVSRA_H : LASX3R_XXX<0x74ec8000>; 55506c3fb27SDimitry Andricdef XVSRA_W : LASX3R_XXX<0x74ed0000>; 55606c3fb27SDimitry Andricdef XVSRA_D : LASX3R_XXX<0x74ed8000>; 55706c3fb27SDimitry Andricdef XVSRAI_B : LASX2RI3_XXI<0x77342000>; 55806c3fb27SDimitry Andricdef XVSRAI_H : LASX2RI4_XXI<0x77344000>; 55906c3fb27SDimitry Andricdef XVSRAI_W : LASX2RI5_XXI<0x77348000>; 56006c3fb27SDimitry Andricdef XVSRAI_D : LASX2RI6_XXI<0x77350000>; 56106c3fb27SDimitry Andric 56206c3fb27SDimitry Andricdef XVROTR_B : LASX3R_XXX<0x74ee0000>; 56306c3fb27SDimitry Andricdef XVROTR_H : LASX3R_XXX<0x74ee8000>; 56406c3fb27SDimitry Andricdef XVROTR_W : LASX3R_XXX<0x74ef0000>; 56506c3fb27SDimitry Andricdef XVROTR_D : LASX3R_XXX<0x74ef8000>; 56606c3fb27SDimitry Andricdef XVROTRI_B : LASX2RI3_XXI<0x76a02000>; 56706c3fb27SDimitry Andricdef XVROTRI_H : LASX2RI4_XXI<0x76a04000>; 56806c3fb27SDimitry Andricdef XVROTRI_W : LASX2RI5_XXI<0x76a08000>; 56906c3fb27SDimitry Andricdef XVROTRI_D : LASX2RI6_XXI<0x76a10000>; 57006c3fb27SDimitry Andric 57106c3fb27SDimitry Andricdef XVSLLWIL_H_B : LASX2RI3_XXI<0x77082000>; 57206c3fb27SDimitry Andricdef XVSLLWIL_W_H : LASX2RI4_XXI<0x77084000>; 57306c3fb27SDimitry Andricdef XVSLLWIL_D_W : LASX2RI5_XXI<0x77088000>; 57406c3fb27SDimitry Andricdef XVEXTL_Q_D : LASX2R_XX<0x77090000>; 57506c3fb27SDimitry Andricdef XVSLLWIL_HU_BU : LASX2RI3_XXI<0x770c2000>; 57606c3fb27SDimitry Andricdef XVSLLWIL_WU_HU : LASX2RI4_XXI<0x770c4000>; 57706c3fb27SDimitry Andricdef XVSLLWIL_DU_WU : LASX2RI5_XXI<0x770c8000>; 57806c3fb27SDimitry Andricdef XVEXTL_QU_DU : LASX2R_XX<0x770d0000>; 57906c3fb27SDimitry Andric 58006c3fb27SDimitry Andricdef XVSRLR_B : LASX3R_XXX<0x74f00000>; 58106c3fb27SDimitry Andricdef XVSRLR_H : LASX3R_XXX<0x74f08000>; 58206c3fb27SDimitry Andricdef XVSRLR_W : LASX3R_XXX<0x74f10000>; 58306c3fb27SDimitry Andricdef XVSRLR_D : LASX3R_XXX<0x74f18000>; 58406c3fb27SDimitry Andricdef XVSRLRI_B : LASX2RI3_XXI<0x76a42000>; 58506c3fb27SDimitry Andricdef XVSRLRI_H : LASX2RI4_XXI<0x76a44000>; 58606c3fb27SDimitry Andricdef XVSRLRI_W : LASX2RI5_XXI<0x76a48000>; 58706c3fb27SDimitry Andricdef XVSRLRI_D : LASX2RI6_XXI<0x76a50000>; 58806c3fb27SDimitry Andric 58906c3fb27SDimitry Andricdef XVSRAR_B : LASX3R_XXX<0x74f20000>; 59006c3fb27SDimitry Andricdef XVSRAR_H : LASX3R_XXX<0x74f28000>; 59106c3fb27SDimitry Andricdef XVSRAR_W : LASX3R_XXX<0x74f30000>; 59206c3fb27SDimitry Andricdef XVSRAR_D : LASX3R_XXX<0x74f38000>; 59306c3fb27SDimitry Andricdef XVSRARI_B : LASX2RI3_XXI<0x76a82000>; 59406c3fb27SDimitry Andricdef XVSRARI_H : LASX2RI4_XXI<0x76a84000>; 59506c3fb27SDimitry Andricdef XVSRARI_W : LASX2RI5_XXI<0x76a88000>; 59606c3fb27SDimitry Andricdef XVSRARI_D : LASX2RI6_XXI<0x76a90000>; 59706c3fb27SDimitry Andric 59806c3fb27SDimitry Andricdef XVSRLN_B_H : LASX3R_XXX<0x74f48000>; 59906c3fb27SDimitry Andricdef XVSRLN_H_W : LASX3R_XXX<0x74f50000>; 60006c3fb27SDimitry Andricdef XVSRLN_W_D : LASX3R_XXX<0x74f58000>; 60106c3fb27SDimitry Andricdef XVSRAN_B_H : LASX3R_XXX<0x74f68000>; 60206c3fb27SDimitry Andricdef XVSRAN_H_W : LASX3R_XXX<0x74f70000>; 60306c3fb27SDimitry Andricdef XVSRAN_W_D : LASX3R_XXX<0x74f78000>; 60406c3fb27SDimitry Andric 60506c3fb27SDimitry Andricdef XVSRLNI_B_H : LASX2RI4_XXXI<0x77404000>; 60606c3fb27SDimitry Andricdef XVSRLNI_H_W : LASX2RI5_XXXI<0x77408000>; 60706c3fb27SDimitry Andricdef XVSRLNI_W_D : LASX2RI6_XXXI<0x77410000>; 60806c3fb27SDimitry Andricdef XVSRLNI_D_Q : LASX2RI7_XXXI<0x77420000>; 60906c3fb27SDimitry Andricdef XVSRANI_B_H : LASX2RI4_XXXI<0x77584000>; 61006c3fb27SDimitry Andricdef XVSRANI_H_W : LASX2RI5_XXXI<0x77588000>; 61106c3fb27SDimitry Andricdef XVSRANI_W_D : LASX2RI6_XXXI<0x77590000>; 61206c3fb27SDimitry Andricdef XVSRANI_D_Q : LASX2RI7_XXXI<0x775a0000>; 61306c3fb27SDimitry Andric 61406c3fb27SDimitry Andricdef XVSRLRN_B_H : LASX3R_XXX<0x74f88000>; 61506c3fb27SDimitry Andricdef XVSRLRN_H_W : LASX3R_XXX<0x74f90000>; 61606c3fb27SDimitry Andricdef XVSRLRN_W_D : LASX3R_XXX<0x74f98000>; 61706c3fb27SDimitry Andricdef XVSRARN_B_H : LASX3R_XXX<0x74fa8000>; 61806c3fb27SDimitry Andricdef XVSRARN_H_W : LASX3R_XXX<0x74fb0000>; 61906c3fb27SDimitry Andricdef XVSRARN_W_D : LASX3R_XXX<0x74fb8000>; 62006c3fb27SDimitry Andric 62106c3fb27SDimitry Andricdef XVSRLRNI_B_H : LASX2RI4_XXXI<0x77444000>; 62206c3fb27SDimitry Andricdef XVSRLRNI_H_W : LASX2RI5_XXXI<0x77448000>; 62306c3fb27SDimitry Andricdef XVSRLRNI_W_D : LASX2RI6_XXXI<0x77450000>; 62406c3fb27SDimitry Andricdef XVSRLRNI_D_Q : LASX2RI7_XXXI<0x77460000>; 62506c3fb27SDimitry Andricdef XVSRARNI_B_H : LASX2RI4_XXXI<0x775c4000>; 62606c3fb27SDimitry Andricdef XVSRARNI_H_W : LASX2RI5_XXXI<0x775c8000>; 62706c3fb27SDimitry Andricdef XVSRARNI_W_D : LASX2RI6_XXXI<0x775d0000>; 62806c3fb27SDimitry Andricdef XVSRARNI_D_Q : LASX2RI7_XXXI<0x775e0000>; 62906c3fb27SDimitry Andric 63006c3fb27SDimitry Andricdef XVSSRLN_B_H : LASX3R_XXX<0x74fc8000>; 63106c3fb27SDimitry Andricdef XVSSRLN_H_W : LASX3R_XXX<0x74fd0000>; 63206c3fb27SDimitry Andricdef XVSSRLN_W_D : LASX3R_XXX<0x74fd8000>; 63306c3fb27SDimitry Andricdef XVSSRAN_B_H : LASX3R_XXX<0x74fe8000>; 63406c3fb27SDimitry Andricdef XVSSRAN_H_W : LASX3R_XXX<0x74ff0000>; 63506c3fb27SDimitry Andricdef XVSSRAN_W_D : LASX3R_XXX<0x74ff8000>; 63606c3fb27SDimitry Andricdef XVSSRLN_BU_H : LASX3R_XXX<0x75048000>; 63706c3fb27SDimitry Andricdef XVSSRLN_HU_W : LASX3R_XXX<0x75050000>; 63806c3fb27SDimitry Andricdef XVSSRLN_WU_D : LASX3R_XXX<0x75058000>; 63906c3fb27SDimitry Andricdef XVSSRAN_BU_H : LASX3R_XXX<0x75068000>; 64006c3fb27SDimitry Andricdef XVSSRAN_HU_W : LASX3R_XXX<0x75070000>; 64106c3fb27SDimitry Andricdef XVSSRAN_WU_D : LASX3R_XXX<0x75078000>; 64206c3fb27SDimitry Andric 64306c3fb27SDimitry Andricdef XVSSRLNI_B_H : LASX2RI4_XXXI<0x77484000>; 64406c3fb27SDimitry Andricdef XVSSRLNI_H_W : LASX2RI5_XXXI<0x77488000>; 64506c3fb27SDimitry Andricdef XVSSRLNI_W_D : LASX2RI6_XXXI<0x77490000>; 64606c3fb27SDimitry Andricdef XVSSRLNI_D_Q : LASX2RI7_XXXI<0x774a0000>; 64706c3fb27SDimitry Andricdef XVSSRANI_B_H : LASX2RI4_XXXI<0x77604000>; 64806c3fb27SDimitry Andricdef XVSSRANI_H_W : LASX2RI5_XXXI<0x77608000>; 64906c3fb27SDimitry Andricdef XVSSRANI_W_D : LASX2RI6_XXXI<0x77610000>; 65006c3fb27SDimitry Andricdef XVSSRANI_D_Q : LASX2RI7_XXXI<0x77620000>; 65106c3fb27SDimitry Andricdef XVSSRLNI_BU_H : LASX2RI4_XXXI<0x774c4000>; 65206c3fb27SDimitry Andricdef XVSSRLNI_HU_W : LASX2RI5_XXXI<0x774c8000>; 65306c3fb27SDimitry Andricdef XVSSRLNI_WU_D : LASX2RI6_XXXI<0x774d0000>; 65406c3fb27SDimitry Andricdef XVSSRLNI_DU_Q : LASX2RI7_XXXI<0x774e0000>; 65506c3fb27SDimitry Andricdef XVSSRANI_BU_H : LASX2RI4_XXXI<0x77644000>; 65606c3fb27SDimitry Andricdef XVSSRANI_HU_W : LASX2RI5_XXXI<0x77648000>; 65706c3fb27SDimitry Andricdef XVSSRANI_WU_D : LASX2RI6_XXXI<0x77650000>; 65806c3fb27SDimitry Andricdef XVSSRANI_DU_Q : LASX2RI7_XXXI<0x77660000>; 65906c3fb27SDimitry Andric 66006c3fb27SDimitry Andricdef XVSSRLRN_B_H : LASX3R_XXX<0x75008000>; 66106c3fb27SDimitry Andricdef XVSSRLRN_H_W : LASX3R_XXX<0x75010000>; 66206c3fb27SDimitry Andricdef XVSSRLRN_W_D : LASX3R_XXX<0x75018000>; 66306c3fb27SDimitry Andricdef XVSSRARN_B_H : LASX3R_XXX<0x75028000>; 66406c3fb27SDimitry Andricdef XVSSRARN_H_W : LASX3R_XXX<0x75030000>; 66506c3fb27SDimitry Andricdef XVSSRARN_W_D : LASX3R_XXX<0x75038000>; 66606c3fb27SDimitry Andricdef XVSSRLRN_BU_H : LASX3R_XXX<0x75088000>; 66706c3fb27SDimitry Andricdef XVSSRLRN_HU_W : LASX3R_XXX<0x75090000>; 66806c3fb27SDimitry Andricdef XVSSRLRN_WU_D : LASX3R_XXX<0x75098000>; 66906c3fb27SDimitry Andricdef XVSSRARN_BU_H : LASX3R_XXX<0x750a8000>; 67006c3fb27SDimitry Andricdef XVSSRARN_HU_W : LASX3R_XXX<0x750b0000>; 67106c3fb27SDimitry Andricdef XVSSRARN_WU_D : LASX3R_XXX<0x750b8000>; 67206c3fb27SDimitry Andric 67306c3fb27SDimitry Andricdef XVSSRLRNI_B_H : LASX2RI4_XXXI<0x77504000>; 67406c3fb27SDimitry Andricdef XVSSRLRNI_H_W : LASX2RI5_XXXI<0x77508000>; 67506c3fb27SDimitry Andricdef XVSSRLRNI_W_D : LASX2RI6_XXXI<0x77510000>; 67606c3fb27SDimitry Andricdef XVSSRLRNI_D_Q : LASX2RI7_XXXI<0x77520000>; 67706c3fb27SDimitry Andricdef XVSSRARNI_B_H : LASX2RI4_XXXI<0x77684000>; 67806c3fb27SDimitry Andricdef XVSSRARNI_H_W : LASX2RI5_XXXI<0x77688000>; 67906c3fb27SDimitry Andricdef XVSSRARNI_W_D : LASX2RI6_XXXI<0x77690000>; 68006c3fb27SDimitry Andricdef XVSSRARNI_D_Q : LASX2RI7_XXXI<0x776a0000>; 68106c3fb27SDimitry Andricdef XVSSRLRNI_BU_H : LASX2RI4_XXXI<0x77544000>; 68206c3fb27SDimitry Andricdef XVSSRLRNI_HU_W : LASX2RI5_XXXI<0x77548000>; 68306c3fb27SDimitry Andricdef XVSSRLRNI_WU_D : LASX2RI6_XXXI<0x77550000>; 68406c3fb27SDimitry Andricdef XVSSRLRNI_DU_Q : LASX2RI7_XXXI<0x77560000>; 68506c3fb27SDimitry Andricdef XVSSRARNI_BU_H : LASX2RI4_XXXI<0x776c4000>; 68606c3fb27SDimitry Andricdef XVSSRARNI_HU_W : LASX2RI5_XXXI<0x776c8000>; 68706c3fb27SDimitry Andricdef XVSSRARNI_WU_D : LASX2RI6_XXXI<0x776d0000>; 68806c3fb27SDimitry Andricdef XVSSRARNI_DU_Q : LASX2RI7_XXXI<0x776e0000>; 68906c3fb27SDimitry Andric 69006c3fb27SDimitry Andricdef XVCLO_B : LASX2R_XX<0x769c0000>; 69106c3fb27SDimitry Andricdef XVCLO_H : LASX2R_XX<0x769c0400>; 69206c3fb27SDimitry Andricdef XVCLO_W : LASX2R_XX<0x769c0800>; 69306c3fb27SDimitry Andricdef XVCLO_D : LASX2R_XX<0x769c0c00>; 69406c3fb27SDimitry Andricdef XVCLZ_B : LASX2R_XX<0x769c1000>; 69506c3fb27SDimitry Andricdef XVCLZ_H : LASX2R_XX<0x769c1400>; 69606c3fb27SDimitry Andricdef XVCLZ_W : LASX2R_XX<0x769c1800>; 69706c3fb27SDimitry Andricdef XVCLZ_D : LASX2R_XX<0x769c1c00>; 69806c3fb27SDimitry Andric 69906c3fb27SDimitry Andricdef XVPCNT_B : LASX2R_XX<0x769c2000>; 70006c3fb27SDimitry Andricdef XVPCNT_H : LASX2R_XX<0x769c2400>; 70106c3fb27SDimitry Andricdef XVPCNT_W : LASX2R_XX<0x769c2800>; 70206c3fb27SDimitry Andricdef XVPCNT_D : LASX2R_XX<0x769c2c00>; 70306c3fb27SDimitry Andric 70406c3fb27SDimitry Andricdef XVBITCLR_B : LASX3R_XXX<0x750c0000>; 70506c3fb27SDimitry Andricdef XVBITCLR_H : LASX3R_XXX<0x750c8000>; 70606c3fb27SDimitry Andricdef XVBITCLR_W : LASX3R_XXX<0x750d0000>; 70706c3fb27SDimitry Andricdef XVBITCLR_D : LASX3R_XXX<0x750d8000>; 70806c3fb27SDimitry Andricdef XVBITCLRI_B : LASX2RI3_XXI<0x77102000>; 70906c3fb27SDimitry Andricdef XVBITCLRI_H : LASX2RI4_XXI<0x77104000>; 71006c3fb27SDimitry Andricdef XVBITCLRI_W : LASX2RI5_XXI<0x77108000>; 71106c3fb27SDimitry Andricdef XVBITCLRI_D : LASX2RI6_XXI<0x77110000>; 71206c3fb27SDimitry Andric 71306c3fb27SDimitry Andricdef XVBITSET_B : LASX3R_XXX<0x750e0000>; 71406c3fb27SDimitry Andricdef XVBITSET_H : LASX3R_XXX<0x750e8000>; 71506c3fb27SDimitry Andricdef XVBITSET_W : LASX3R_XXX<0x750f0000>; 71606c3fb27SDimitry Andricdef XVBITSET_D : LASX3R_XXX<0x750f8000>; 71706c3fb27SDimitry Andricdef XVBITSETI_B : LASX2RI3_XXI<0x77142000>; 71806c3fb27SDimitry Andricdef XVBITSETI_H : LASX2RI4_XXI<0x77144000>; 71906c3fb27SDimitry Andricdef XVBITSETI_W : LASX2RI5_XXI<0x77148000>; 72006c3fb27SDimitry Andricdef XVBITSETI_D : LASX2RI6_XXI<0x77150000>; 72106c3fb27SDimitry Andric 72206c3fb27SDimitry Andricdef XVBITREV_B : LASX3R_XXX<0x75100000>; 72306c3fb27SDimitry Andricdef XVBITREV_H : LASX3R_XXX<0x75108000>; 72406c3fb27SDimitry Andricdef XVBITREV_W : LASX3R_XXX<0x75110000>; 72506c3fb27SDimitry Andricdef XVBITREV_D : LASX3R_XXX<0x75118000>; 72606c3fb27SDimitry Andricdef XVBITREVI_B : LASX2RI3_XXI<0x77182000>; 72706c3fb27SDimitry Andricdef XVBITREVI_H : LASX2RI4_XXI<0x77184000>; 72806c3fb27SDimitry Andricdef XVBITREVI_W : LASX2RI5_XXI<0x77188000>; 72906c3fb27SDimitry Andricdef XVBITREVI_D : LASX2RI6_XXI<0x77190000>; 73006c3fb27SDimitry Andric 73106c3fb27SDimitry Andricdef XVFRSTP_B : LASX3R_XXXX<0x752b0000>; 73206c3fb27SDimitry Andricdef XVFRSTP_H : LASX3R_XXXX<0x752b8000>; 73306c3fb27SDimitry Andricdef XVFRSTPI_B : LASX2RI5_XXXI<0x769a0000>; 73406c3fb27SDimitry Andricdef XVFRSTPI_H : LASX2RI5_XXXI<0x769a8000>; 73506c3fb27SDimitry Andric 73606c3fb27SDimitry Andricdef XVFADD_S : LASX3R_XXX<0x75308000>; 73706c3fb27SDimitry Andricdef XVFADD_D : LASX3R_XXX<0x75310000>; 73806c3fb27SDimitry Andricdef XVFSUB_S : LASX3R_XXX<0x75328000>; 73906c3fb27SDimitry Andricdef XVFSUB_D : LASX3R_XXX<0x75330000>; 74006c3fb27SDimitry Andricdef XVFMUL_S : LASX3R_XXX<0x75388000>; 74106c3fb27SDimitry Andricdef XVFMUL_D : LASX3R_XXX<0x75390000>; 74206c3fb27SDimitry Andricdef XVFDIV_S : LASX3R_XXX<0x753a8000>; 74306c3fb27SDimitry Andricdef XVFDIV_D : LASX3R_XXX<0x753b0000>; 74406c3fb27SDimitry Andric 74506c3fb27SDimitry Andricdef XVFMADD_S : LASX4R_XXXX<0x0a100000>; 74606c3fb27SDimitry Andricdef XVFMADD_D : LASX4R_XXXX<0x0a200000>; 74706c3fb27SDimitry Andricdef XVFMSUB_S : LASX4R_XXXX<0x0a500000>; 74806c3fb27SDimitry Andricdef XVFMSUB_D : LASX4R_XXXX<0x0a600000>; 74906c3fb27SDimitry Andricdef XVFNMADD_S : LASX4R_XXXX<0x0a900000>; 75006c3fb27SDimitry Andricdef XVFNMADD_D : LASX4R_XXXX<0x0aa00000>; 75106c3fb27SDimitry Andricdef XVFNMSUB_S : LASX4R_XXXX<0x0ad00000>; 75206c3fb27SDimitry Andricdef XVFNMSUB_D : LASX4R_XXXX<0x0ae00000>; 75306c3fb27SDimitry Andric 75406c3fb27SDimitry Andricdef XVFMAX_S : LASX3R_XXX<0x753c8000>; 75506c3fb27SDimitry Andricdef XVFMAX_D : LASX3R_XXX<0x753d0000>; 75606c3fb27SDimitry Andricdef XVFMIN_S : LASX3R_XXX<0x753e8000>; 75706c3fb27SDimitry Andricdef XVFMIN_D : LASX3R_XXX<0x753f0000>; 75806c3fb27SDimitry Andric 75906c3fb27SDimitry Andricdef XVFMAXA_S : LASX3R_XXX<0x75408000>; 76006c3fb27SDimitry Andricdef XVFMAXA_D : LASX3R_XXX<0x75410000>; 76106c3fb27SDimitry Andricdef XVFMINA_S : LASX3R_XXX<0x75428000>; 76206c3fb27SDimitry Andricdef XVFMINA_D : LASX3R_XXX<0x75430000>; 76306c3fb27SDimitry Andric 76406c3fb27SDimitry Andricdef XVFLOGB_S : LASX2R_XX<0x769cc400>; 76506c3fb27SDimitry Andricdef XVFLOGB_D : LASX2R_XX<0x769cc800>; 76606c3fb27SDimitry Andric 76706c3fb27SDimitry Andricdef XVFCLASS_S : LASX2R_XX<0x769cd400>; 76806c3fb27SDimitry Andricdef XVFCLASS_D : LASX2R_XX<0x769cd800>; 76906c3fb27SDimitry Andric 77006c3fb27SDimitry Andricdef XVFSQRT_S : LASX2R_XX<0x769ce400>; 77106c3fb27SDimitry Andricdef XVFSQRT_D : LASX2R_XX<0x769ce800>; 77206c3fb27SDimitry Andricdef XVFRECIP_S : LASX2R_XX<0x769cf400>; 77306c3fb27SDimitry Andricdef XVFRECIP_D : LASX2R_XX<0x769cf800>; 77406c3fb27SDimitry Andricdef XVFRSQRT_S : LASX2R_XX<0x769d0400>; 77506c3fb27SDimitry Andricdef XVFRSQRT_D : LASX2R_XX<0x769d0800>; 7767a6dacacSDimitry Andricdef XVFRECIPE_S : LASX2R_XX<0x769d1400>; 7777a6dacacSDimitry Andricdef XVFRECIPE_D : LASX2R_XX<0x769d1800>; 7787a6dacacSDimitry Andricdef XVFRSQRTE_S : LASX2R_XX<0x769d2400>; 7797a6dacacSDimitry Andricdef XVFRSQRTE_D : LASX2R_XX<0x769d2800>; 78006c3fb27SDimitry Andric 78106c3fb27SDimitry Andricdef XVFCVTL_S_H : LASX2R_XX<0x769de800>; 78206c3fb27SDimitry Andricdef XVFCVTH_S_H : LASX2R_XX<0x769dec00>; 78306c3fb27SDimitry Andricdef XVFCVTL_D_S : LASX2R_XX<0x769df000>; 78406c3fb27SDimitry Andricdef XVFCVTH_D_S : LASX2R_XX<0x769df400>; 78506c3fb27SDimitry Andricdef XVFCVT_H_S : LASX3R_XXX<0x75460000>; 78606c3fb27SDimitry Andricdef XVFCVT_S_D : LASX3R_XXX<0x75468000>; 78706c3fb27SDimitry Andric 78806c3fb27SDimitry Andricdef XVFRINTRNE_S : LASX2R_XX<0x769d7400>; 78906c3fb27SDimitry Andricdef XVFRINTRNE_D : LASX2R_XX<0x769d7800>; 79006c3fb27SDimitry Andricdef XVFRINTRZ_S : LASX2R_XX<0x769d6400>; 79106c3fb27SDimitry Andricdef XVFRINTRZ_D : LASX2R_XX<0x769d6800>; 79206c3fb27SDimitry Andricdef XVFRINTRP_S : LASX2R_XX<0x769d5400>; 79306c3fb27SDimitry Andricdef XVFRINTRP_D : LASX2R_XX<0x769d5800>; 79406c3fb27SDimitry Andricdef XVFRINTRM_S : LASX2R_XX<0x769d4400>; 79506c3fb27SDimitry Andricdef XVFRINTRM_D : LASX2R_XX<0x769d4800>; 79606c3fb27SDimitry Andricdef XVFRINT_S : LASX2R_XX<0x769d3400>; 79706c3fb27SDimitry Andricdef XVFRINT_D : LASX2R_XX<0x769d3800>; 79806c3fb27SDimitry Andric 79906c3fb27SDimitry Andricdef XVFTINTRNE_W_S : LASX2R_XX<0x769e5000>; 80006c3fb27SDimitry Andricdef XVFTINTRNE_L_D : LASX2R_XX<0x769e5400>; 80106c3fb27SDimitry Andricdef XVFTINTRZ_W_S : LASX2R_XX<0x769e4800>; 80206c3fb27SDimitry Andricdef XVFTINTRZ_L_D : LASX2R_XX<0x769e4c00>; 80306c3fb27SDimitry Andricdef XVFTINTRP_W_S : LASX2R_XX<0x769e4000>; 80406c3fb27SDimitry Andricdef XVFTINTRP_L_D : LASX2R_XX<0x769e4400>; 80506c3fb27SDimitry Andricdef XVFTINTRM_W_S : LASX2R_XX<0x769e3800>; 80606c3fb27SDimitry Andricdef XVFTINTRM_L_D : LASX2R_XX<0x769e3c00>; 80706c3fb27SDimitry Andricdef XVFTINT_W_S : LASX2R_XX<0x769e3000>; 80806c3fb27SDimitry Andricdef XVFTINT_L_D : LASX2R_XX<0x769e3400>; 80906c3fb27SDimitry Andricdef XVFTINTRZ_WU_S : LASX2R_XX<0x769e7000>; 81006c3fb27SDimitry Andricdef XVFTINTRZ_LU_D : LASX2R_XX<0x769e7400>; 81106c3fb27SDimitry Andricdef XVFTINT_WU_S : LASX2R_XX<0x769e5800>; 81206c3fb27SDimitry Andricdef XVFTINT_LU_D : LASX2R_XX<0x769e5c00>; 81306c3fb27SDimitry Andric 81406c3fb27SDimitry Andricdef XVFTINTRNE_W_D : LASX3R_XXX<0x754b8000>; 81506c3fb27SDimitry Andricdef XVFTINTRZ_W_D : LASX3R_XXX<0x754b0000>; 81606c3fb27SDimitry Andricdef XVFTINTRP_W_D : LASX3R_XXX<0x754a8000>; 81706c3fb27SDimitry Andricdef XVFTINTRM_W_D : LASX3R_XXX<0x754a0000>; 81806c3fb27SDimitry Andricdef XVFTINT_W_D : LASX3R_XXX<0x75498000>; 81906c3fb27SDimitry Andric 82006c3fb27SDimitry Andricdef XVFTINTRNEL_L_S : LASX2R_XX<0x769ea000>; 82106c3fb27SDimitry Andricdef XVFTINTRNEH_L_S : LASX2R_XX<0x769ea400>; 82206c3fb27SDimitry Andricdef XVFTINTRZL_L_S : LASX2R_XX<0x769e9800>; 82306c3fb27SDimitry Andricdef XVFTINTRZH_L_S : LASX2R_XX<0x769e9c00>; 82406c3fb27SDimitry Andricdef XVFTINTRPL_L_S : LASX2R_XX<0x769e9000>; 82506c3fb27SDimitry Andricdef XVFTINTRPH_L_S : LASX2R_XX<0x769e9400>; 82606c3fb27SDimitry Andricdef XVFTINTRML_L_S : LASX2R_XX<0x769e8800>; 82706c3fb27SDimitry Andricdef XVFTINTRMH_L_S : LASX2R_XX<0x769e8c00>; 82806c3fb27SDimitry Andricdef XVFTINTL_L_S : LASX2R_XX<0x769e8000>; 82906c3fb27SDimitry Andricdef XVFTINTH_L_S : LASX2R_XX<0x769e8400>; 83006c3fb27SDimitry Andric 83106c3fb27SDimitry Andricdef XVFFINT_S_W : LASX2R_XX<0x769e0000>; 83206c3fb27SDimitry Andricdef XVFFINT_D_L : LASX2R_XX<0x769e0800>; 83306c3fb27SDimitry Andricdef XVFFINT_S_WU : LASX2R_XX<0x769e0400>; 83406c3fb27SDimitry Andricdef XVFFINT_D_LU : LASX2R_XX<0x769e0c00>; 83506c3fb27SDimitry Andricdef XVFFINTL_D_W : LASX2R_XX<0x769e1000>; 83606c3fb27SDimitry Andricdef XVFFINTH_D_W : LASX2R_XX<0x769e1400>; 83706c3fb27SDimitry Andricdef XVFFINT_S_L : LASX3R_XXX<0x75480000>; 83806c3fb27SDimitry Andric 83906c3fb27SDimitry Andricdef XVSEQ_B : LASX3R_XXX<0x74000000>; 84006c3fb27SDimitry Andricdef XVSEQ_H : LASX3R_XXX<0x74008000>; 84106c3fb27SDimitry Andricdef XVSEQ_W : LASX3R_XXX<0x74010000>; 84206c3fb27SDimitry Andricdef XVSEQ_D : LASX3R_XXX<0x74018000>; 84306c3fb27SDimitry Andricdef XVSEQI_B : LASX2RI5_XXI<0x76800000, simm5>; 84406c3fb27SDimitry Andricdef XVSEQI_H : LASX2RI5_XXI<0x76808000, simm5>; 84506c3fb27SDimitry Andricdef XVSEQI_W : LASX2RI5_XXI<0x76810000, simm5>; 84606c3fb27SDimitry Andricdef XVSEQI_D : LASX2RI5_XXI<0x76818000, simm5>; 84706c3fb27SDimitry Andric 84806c3fb27SDimitry Andricdef XVSLE_B : LASX3R_XXX<0x74020000>; 84906c3fb27SDimitry Andricdef XVSLE_H : LASX3R_XXX<0x74028000>; 85006c3fb27SDimitry Andricdef XVSLE_W : LASX3R_XXX<0x74030000>; 85106c3fb27SDimitry Andricdef XVSLE_D : LASX3R_XXX<0x74038000>; 85206c3fb27SDimitry Andricdef XVSLEI_B : LASX2RI5_XXI<0x76820000, simm5>; 85306c3fb27SDimitry Andricdef XVSLEI_H : LASX2RI5_XXI<0x76828000, simm5>; 85406c3fb27SDimitry Andricdef XVSLEI_W : LASX2RI5_XXI<0x76830000, simm5>; 85506c3fb27SDimitry Andricdef XVSLEI_D : LASX2RI5_XXI<0x76838000, simm5>; 85606c3fb27SDimitry Andric 85706c3fb27SDimitry Andricdef XVSLE_BU : LASX3R_XXX<0x74040000>; 85806c3fb27SDimitry Andricdef XVSLE_HU : LASX3R_XXX<0x74048000>; 85906c3fb27SDimitry Andricdef XVSLE_WU : LASX3R_XXX<0x74050000>; 86006c3fb27SDimitry Andricdef XVSLE_DU : LASX3R_XXX<0x74058000>; 86106c3fb27SDimitry Andricdef XVSLEI_BU : LASX2RI5_XXI<0x76840000>; 86206c3fb27SDimitry Andricdef XVSLEI_HU : LASX2RI5_XXI<0x76848000>; 86306c3fb27SDimitry Andricdef XVSLEI_WU : LASX2RI5_XXI<0x76850000>; 86406c3fb27SDimitry Andricdef XVSLEI_DU : LASX2RI5_XXI<0x76858000>; 86506c3fb27SDimitry Andric 86606c3fb27SDimitry Andricdef XVSLT_B : LASX3R_XXX<0x74060000>; 86706c3fb27SDimitry Andricdef XVSLT_H : LASX3R_XXX<0x74068000>; 86806c3fb27SDimitry Andricdef XVSLT_W : LASX3R_XXX<0x74070000>; 86906c3fb27SDimitry Andricdef XVSLT_D : LASX3R_XXX<0x74078000>; 87006c3fb27SDimitry Andricdef XVSLTI_B : LASX2RI5_XXI<0x76860000, simm5>; 87106c3fb27SDimitry Andricdef XVSLTI_H : LASX2RI5_XXI<0x76868000, simm5>; 87206c3fb27SDimitry Andricdef XVSLTI_W : LASX2RI5_XXI<0x76870000, simm5>; 87306c3fb27SDimitry Andricdef XVSLTI_D : LASX2RI5_XXI<0x76878000, simm5>; 87406c3fb27SDimitry Andric 87506c3fb27SDimitry Andricdef XVSLT_BU : LASX3R_XXX<0x74080000>; 87606c3fb27SDimitry Andricdef XVSLT_HU : LASX3R_XXX<0x74088000>; 87706c3fb27SDimitry Andricdef XVSLT_WU : LASX3R_XXX<0x74090000>; 87806c3fb27SDimitry Andricdef XVSLT_DU : LASX3R_XXX<0x74098000>; 87906c3fb27SDimitry Andricdef XVSLTI_BU : LASX2RI5_XXI<0x76880000>; 88006c3fb27SDimitry Andricdef XVSLTI_HU : LASX2RI5_XXI<0x76888000>; 88106c3fb27SDimitry Andricdef XVSLTI_WU : LASX2RI5_XXI<0x76890000>; 88206c3fb27SDimitry Andricdef XVSLTI_DU : LASX2RI5_XXI<0x76898000>; 88306c3fb27SDimitry Andric 88406c3fb27SDimitry Andricdef XVFCMP_CAF_S : LASX3R_XXX<0x0c900000>; 88506c3fb27SDimitry Andricdef XVFCMP_SAF_S : LASX3R_XXX<0x0c908000>; 88606c3fb27SDimitry Andricdef XVFCMP_CLT_S : LASX3R_XXX<0x0c910000>; 88706c3fb27SDimitry Andricdef XVFCMP_SLT_S : LASX3R_XXX<0x0c918000>; 88806c3fb27SDimitry Andricdef XVFCMP_CEQ_S : LASX3R_XXX<0x0c920000>; 88906c3fb27SDimitry Andricdef XVFCMP_SEQ_S : LASX3R_XXX<0x0c928000>; 89006c3fb27SDimitry Andricdef XVFCMP_CLE_S : LASX3R_XXX<0x0c930000>; 89106c3fb27SDimitry Andricdef XVFCMP_SLE_S : LASX3R_XXX<0x0c938000>; 89206c3fb27SDimitry Andricdef XVFCMP_CUN_S : LASX3R_XXX<0x0c940000>; 89306c3fb27SDimitry Andricdef XVFCMP_SUN_S : LASX3R_XXX<0x0c948000>; 89406c3fb27SDimitry Andricdef XVFCMP_CULT_S : LASX3R_XXX<0x0c950000>; 89506c3fb27SDimitry Andricdef XVFCMP_SULT_S : LASX3R_XXX<0x0c958000>; 89606c3fb27SDimitry Andricdef XVFCMP_CUEQ_S : LASX3R_XXX<0x0c960000>; 89706c3fb27SDimitry Andricdef XVFCMP_SUEQ_S : LASX3R_XXX<0x0c968000>; 89806c3fb27SDimitry Andricdef XVFCMP_CULE_S : LASX3R_XXX<0x0c970000>; 89906c3fb27SDimitry Andricdef XVFCMP_SULE_S : LASX3R_XXX<0x0c978000>; 90006c3fb27SDimitry Andricdef XVFCMP_CNE_S : LASX3R_XXX<0x0c980000>; 90106c3fb27SDimitry Andricdef XVFCMP_SNE_S : LASX3R_XXX<0x0c988000>; 90206c3fb27SDimitry Andricdef XVFCMP_COR_S : LASX3R_XXX<0x0c9a0000>; 90306c3fb27SDimitry Andricdef XVFCMP_SOR_S : LASX3R_XXX<0x0c9a8000>; 90406c3fb27SDimitry Andricdef XVFCMP_CUNE_S : LASX3R_XXX<0x0c9c0000>; 90506c3fb27SDimitry Andricdef XVFCMP_SUNE_S : LASX3R_XXX<0x0c9c8000>; 90606c3fb27SDimitry Andric 90706c3fb27SDimitry Andricdef XVFCMP_CAF_D : LASX3R_XXX<0x0ca00000>; 90806c3fb27SDimitry Andricdef XVFCMP_SAF_D : LASX3R_XXX<0x0ca08000>; 90906c3fb27SDimitry Andricdef XVFCMP_CLT_D : LASX3R_XXX<0x0ca10000>; 91006c3fb27SDimitry Andricdef XVFCMP_SLT_D : LASX3R_XXX<0x0ca18000>; 91106c3fb27SDimitry Andricdef XVFCMP_CEQ_D : LASX3R_XXX<0x0ca20000>; 91206c3fb27SDimitry Andricdef XVFCMP_SEQ_D : LASX3R_XXX<0x0ca28000>; 91306c3fb27SDimitry Andricdef XVFCMP_CLE_D : LASX3R_XXX<0x0ca30000>; 91406c3fb27SDimitry Andricdef XVFCMP_SLE_D : LASX3R_XXX<0x0ca38000>; 91506c3fb27SDimitry Andricdef XVFCMP_CUN_D : LASX3R_XXX<0x0ca40000>; 91606c3fb27SDimitry Andricdef XVFCMP_SUN_D : LASX3R_XXX<0x0ca48000>; 91706c3fb27SDimitry Andricdef XVFCMP_CULT_D : LASX3R_XXX<0x0ca50000>; 91806c3fb27SDimitry Andricdef XVFCMP_SULT_D : LASX3R_XXX<0x0ca58000>; 91906c3fb27SDimitry Andricdef XVFCMP_CUEQ_D : LASX3R_XXX<0x0ca60000>; 92006c3fb27SDimitry Andricdef XVFCMP_SUEQ_D : LASX3R_XXX<0x0ca68000>; 92106c3fb27SDimitry Andricdef XVFCMP_CULE_D : LASX3R_XXX<0x0ca70000>; 92206c3fb27SDimitry Andricdef XVFCMP_SULE_D : LASX3R_XXX<0x0ca78000>; 92306c3fb27SDimitry Andricdef XVFCMP_CNE_D : LASX3R_XXX<0x0ca80000>; 92406c3fb27SDimitry Andricdef XVFCMP_SNE_D : LASX3R_XXX<0x0ca88000>; 92506c3fb27SDimitry Andricdef XVFCMP_COR_D : LASX3R_XXX<0x0caa0000>; 92606c3fb27SDimitry Andricdef XVFCMP_SOR_D : LASX3R_XXX<0x0caa8000>; 92706c3fb27SDimitry Andricdef XVFCMP_CUNE_D : LASX3R_XXX<0x0cac0000>; 92806c3fb27SDimitry Andricdef XVFCMP_SUNE_D : LASX3R_XXX<0x0cac8000>; 92906c3fb27SDimitry Andric 93006c3fb27SDimitry Andricdef XVBITSEL_V : LASX4R_XXXX<0x0d200000>; 93106c3fb27SDimitry Andric 93206c3fb27SDimitry Andricdef XVBITSELI_B : LASX2RI8_XXXI<0x77c40000>; 93306c3fb27SDimitry Andric 93406c3fb27SDimitry Andricdef XVSETEQZ_V : LASX2R_CX<0x769c9800>; 93506c3fb27SDimitry Andricdef XVSETNEZ_V : LASX2R_CX<0x769c9c00>; 93606c3fb27SDimitry Andricdef XVSETANYEQZ_B : LASX2R_CX<0x769ca000>; 93706c3fb27SDimitry Andricdef XVSETANYEQZ_H : LASX2R_CX<0x769ca400>; 93806c3fb27SDimitry Andricdef XVSETANYEQZ_W : LASX2R_CX<0x769ca800>; 93906c3fb27SDimitry Andricdef XVSETANYEQZ_D : LASX2R_CX<0x769cac00>; 94006c3fb27SDimitry Andricdef XVSETALLNEZ_B : LASX2R_CX<0x769cb000>; 94106c3fb27SDimitry Andricdef XVSETALLNEZ_H : LASX2R_CX<0x769cb400>; 94206c3fb27SDimitry Andricdef XVSETALLNEZ_W : LASX2R_CX<0x769cb800>; 94306c3fb27SDimitry Andricdef XVSETALLNEZ_D : LASX2R_CX<0x769cbc00>; 94406c3fb27SDimitry Andric 94506c3fb27SDimitry Andricdef XVINSGR2VR_W : LASX2RI3_XXRI<0x76ebc000>; 94606c3fb27SDimitry Andricdef XVINSGR2VR_D : LASX2RI2_XXRI<0x76ebe000>; 94706c3fb27SDimitry Andricdef XVPICKVE2GR_W : LASX2RI3_RXI<0x76efc000>; 94806c3fb27SDimitry Andricdef XVPICKVE2GR_D : LASX2RI2_RXI<0x76efe000>; 94906c3fb27SDimitry Andricdef XVPICKVE2GR_WU : LASX2RI3_RXI<0x76f3c000>; 95006c3fb27SDimitry Andricdef XVPICKVE2GR_DU : LASX2RI2_RXI<0x76f3e000>; 95106c3fb27SDimitry Andric 95206c3fb27SDimitry Andricdef XVREPLGR2VR_B : LASX2R_XR<0x769f0000>; 95306c3fb27SDimitry Andricdef XVREPLGR2VR_H : LASX2R_XR<0x769f0400>; 95406c3fb27SDimitry Andricdef XVREPLGR2VR_W : LASX2R_XR<0x769f0800>; 95506c3fb27SDimitry Andricdef XVREPLGR2VR_D : LASX2R_XR<0x769f0c00>; 95606c3fb27SDimitry Andric 95706c3fb27SDimitry Andricdef XVREPLVE_B : LASX3R_XXR<0x75220000>; 95806c3fb27SDimitry Andricdef XVREPLVE_H : LASX3R_XXR<0x75228000>; 95906c3fb27SDimitry Andricdef XVREPLVE_W : LASX3R_XXR<0x75230000>; 96006c3fb27SDimitry Andricdef XVREPLVE_D : LASX3R_XXR<0x75238000>; 96106c3fb27SDimitry Andricdef XVREPL128VEI_B : LASX2RI4_XXI<0x76f78000>; 96206c3fb27SDimitry Andricdef XVREPL128VEI_H : LASX2RI3_XXI<0x76f7c000>; 96306c3fb27SDimitry Andricdef XVREPL128VEI_W : LASX2RI2_XXI<0x76f7e000>; 96406c3fb27SDimitry Andricdef XVREPL128VEI_D : LASX2RI1_XXI<0x76f7f000>; 96506c3fb27SDimitry Andric 96606c3fb27SDimitry Andricdef XVREPLVE0_B : LASX2R_XX<0x77070000>; 96706c3fb27SDimitry Andricdef XVREPLVE0_H : LASX2R_XX<0x77078000>; 96806c3fb27SDimitry Andricdef XVREPLVE0_W : LASX2R_XX<0x7707c000>; 96906c3fb27SDimitry Andricdef XVREPLVE0_D : LASX2R_XX<0x7707e000>; 97006c3fb27SDimitry Andricdef XVREPLVE0_Q : LASX2R_XX<0x7707f000>; 97106c3fb27SDimitry Andric 97206c3fb27SDimitry Andricdef XVINSVE0_W : LASX2RI3_XXXI<0x76ffc000>; 97306c3fb27SDimitry Andricdef XVINSVE0_D : LASX2RI2_XXXI<0x76ffe000>; 97406c3fb27SDimitry Andric 97506c3fb27SDimitry Andricdef XVPICKVE_W : LASX2RI3_XXI<0x7703c000>; 97606c3fb27SDimitry Andricdef XVPICKVE_D : LASX2RI2_XXI<0x7703e000>; 97706c3fb27SDimitry Andric 97806c3fb27SDimitry Andricdef XVBSLL_V : LASX2RI5_XXI<0x768e0000>; 97906c3fb27SDimitry Andricdef XVBSRL_V : LASX2RI5_XXI<0x768e8000>; 98006c3fb27SDimitry Andric 98106c3fb27SDimitry Andricdef XVPACKEV_B : LASX3R_XXX<0x75160000>; 98206c3fb27SDimitry Andricdef XVPACKEV_H : LASX3R_XXX<0x75168000>; 98306c3fb27SDimitry Andricdef XVPACKEV_W : LASX3R_XXX<0x75170000>; 98406c3fb27SDimitry Andricdef XVPACKEV_D : LASX3R_XXX<0x75178000>; 98506c3fb27SDimitry Andricdef XVPACKOD_B : LASX3R_XXX<0x75180000>; 98606c3fb27SDimitry Andricdef XVPACKOD_H : LASX3R_XXX<0x75188000>; 98706c3fb27SDimitry Andricdef XVPACKOD_W : LASX3R_XXX<0x75190000>; 98806c3fb27SDimitry Andricdef XVPACKOD_D : LASX3R_XXX<0x75198000>; 98906c3fb27SDimitry Andric 99006c3fb27SDimitry Andricdef XVPICKEV_B : LASX3R_XXX<0x751e0000>; 99106c3fb27SDimitry Andricdef XVPICKEV_H : LASX3R_XXX<0x751e8000>; 99206c3fb27SDimitry Andricdef XVPICKEV_W : LASX3R_XXX<0x751f0000>; 99306c3fb27SDimitry Andricdef XVPICKEV_D : LASX3R_XXX<0x751f8000>; 99406c3fb27SDimitry Andricdef XVPICKOD_B : LASX3R_XXX<0x75200000>; 99506c3fb27SDimitry Andricdef XVPICKOD_H : LASX3R_XXX<0x75208000>; 99606c3fb27SDimitry Andricdef XVPICKOD_W : LASX3R_XXX<0x75210000>; 99706c3fb27SDimitry Andricdef XVPICKOD_D : LASX3R_XXX<0x75218000>; 99806c3fb27SDimitry Andric 99906c3fb27SDimitry Andricdef XVILVL_B : LASX3R_XXX<0x751a0000>; 100006c3fb27SDimitry Andricdef XVILVL_H : LASX3R_XXX<0x751a8000>; 100106c3fb27SDimitry Andricdef XVILVL_W : LASX3R_XXX<0x751b0000>; 100206c3fb27SDimitry Andricdef XVILVL_D : LASX3R_XXX<0x751b8000>; 100306c3fb27SDimitry Andricdef XVILVH_B : LASX3R_XXX<0x751c0000>; 100406c3fb27SDimitry Andricdef XVILVH_H : LASX3R_XXX<0x751c8000>; 100506c3fb27SDimitry Andricdef XVILVH_W : LASX3R_XXX<0x751d0000>; 100606c3fb27SDimitry Andricdef XVILVH_D : LASX3R_XXX<0x751d8000>; 100706c3fb27SDimitry Andric 100806c3fb27SDimitry Andricdef XVSHUF_B : LASX4R_XXXX<0x0d600000>; 100906c3fb27SDimitry Andric 101006c3fb27SDimitry Andricdef XVSHUF_H : LASX3R_XXXX<0x757a8000>; 101106c3fb27SDimitry Andricdef XVSHUF_W : LASX3R_XXXX<0x757b0000>; 101206c3fb27SDimitry Andricdef XVSHUF_D : LASX3R_XXXX<0x757b8000>; 101306c3fb27SDimitry Andric 101406c3fb27SDimitry Andricdef XVPERM_W : LASX3R_XXX<0x757d0000>; 101506c3fb27SDimitry Andric 101606c3fb27SDimitry Andricdef XVSHUF4I_B : LASX2RI8_XXI<0x77900000>; 101706c3fb27SDimitry Andricdef XVSHUF4I_H : LASX2RI8_XXI<0x77940000>; 101806c3fb27SDimitry Andricdef XVSHUF4I_W : LASX2RI8_XXI<0x77980000>; 101906c3fb27SDimitry Andricdef XVSHUF4I_D : LASX2RI8_XXXI<0x779c0000>; 102006c3fb27SDimitry Andric 102106c3fb27SDimitry Andricdef XVPERMI_W : LASX2RI8_XXXI<0x77e40000>; 102206c3fb27SDimitry Andricdef XVPERMI_D : LASX2RI8_XXI<0x77e80000>; 102306c3fb27SDimitry Andricdef XVPERMI_Q : LASX2RI8_XXXI<0x77ec0000>; 102406c3fb27SDimitry Andric 102506c3fb27SDimitry Andricdef XVEXTRINS_D : LASX2RI8_XXXI<0x77800000>; 102606c3fb27SDimitry Andricdef XVEXTRINS_W : LASX2RI8_XXXI<0x77840000>; 102706c3fb27SDimitry Andricdef XVEXTRINS_H : LASX2RI8_XXXI<0x77880000>; 102806c3fb27SDimitry Andricdef XVEXTRINS_B : LASX2RI8_XXXI<0x778c0000>; 102906c3fb27SDimitry Andric} // mayLoad = 0, mayStore = 0 103006c3fb27SDimitry Andric 103106c3fb27SDimitry Andriclet mayLoad = 1, mayStore = 0 in { 103206c3fb27SDimitry Andricdef XVLD : LASX2RI12_Load<0x2c800000>; 103306c3fb27SDimitry Andricdef XVLDX : LASX3R_Load<0x38480000>; 103406c3fb27SDimitry Andric 103506c3fb27SDimitry Andricdef XVLDREPL_B : LASX2RI12_Load<0x32800000>; 103606c3fb27SDimitry Andricdef XVLDREPL_H : LASX2RI11_Load<0x32400000>; 103706c3fb27SDimitry Andricdef XVLDREPL_W : LASX2RI10_Load<0x32200000>; 103806c3fb27SDimitry Andricdef XVLDREPL_D : LASX2RI9_Load<0x32100000>; 103906c3fb27SDimitry Andric} // mayLoad = 1, mayStore = 0 104006c3fb27SDimitry Andric 104106c3fb27SDimitry Andriclet mayLoad = 0, mayStore = 1 in { 104206c3fb27SDimitry Andricdef XVST : LASX2RI12_Store<0x2cc00000>; 104306c3fb27SDimitry Andricdef XVSTX : LASX3R_Store<0x384c0000>; 104406c3fb27SDimitry Andric 104506c3fb27SDimitry Andricdef XVSTELM_B : LASX2RI8I5_XRII<0x33800000>; 104606c3fb27SDimitry Andricdef XVSTELM_H : LASX2RI8I4_XRII<0x33400000, simm8_lsl1>; 104706c3fb27SDimitry Andricdef XVSTELM_W : LASX2RI8I3_XRII<0x33200000, simm8_lsl2>; 104806c3fb27SDimitry Andricdef XVSTELM_D : LASX2RI8I2_XRII<0x33100000, simm8_lsl3>; 104906c3fb27SDimitry Andric} // mayLoad = 0, mayStore = 1 105006c3fb27SDimitry Andric 105106c3fb27SDimitry Andric} // hasSideEffects = 0, Predicates = [HasExtLASX] 105206c3fb27SDimitry Andric 105306c3fb27SDimitry Andric/// Pseudo-instructions 105406c3fb27SDimitry Andric 105506c3fb27SDimitry Andriclet Predicates = [HasExtLASX] in { 105606c3fb27SDimitry Andric 105706c3fb27SDimitry Andriclet hasSideEffects = 0, mayLoad = 0, mayStore = 0, isCodeGenOnly = 0, 105806c3fb27SDimitry Andric isAsmParserOnly = 1 in { 105906c3fb27SDimitry Andricdef PseudoXVREPLI_B : Pseudo<(outs LASX256:$xd), (ins simm10:$imm), [], 106006c3fb27SDimitry Andric "xvrepli.b", "$xd, $imm">; 106106c3fb27SDimitry Andricdef PseudoXVREPLI_H : Pseudo<(outs LASX256:$xd), (ins simm10:$imm), [], 106206c3fb27SDimitry Andric "xvrepli.h", "$xd, $imm">; 106306c3fb27SDimitry Andricdef PseudoXVREPLI_W : Pseudo<(outs LASX256:$xd), (ins simm10:$imm), [], 106406c3fb27SDimitry Andric "xvrepli.w", "$xd, $imm">; 106506c3fb27SDimitry Andricdef PseudoXVREPLI_D : Pseudo<(outs LASX256:$xd), (ins simm10:$imm), [], 106606c3fb27SDimitry Andric "xvrepli.d", "$xd, $imm">; 106706c3fb27SDimitry Andric} 106806c3fb27SDimitry Andric 10695f757f3fSDimitry Andricdef PseudoXVBNZ_B : VecCond<loongarch_vall_nonzero, v32i8, LASX256>; 10705f757f3fSDimitry Andricdef PseudoXVBNZ_H : VecCond<loongarch_vall_nonzero, v16i16, LASX256>; 10715f757f3fSDimitry Andricdef PseudoXVBNZ_W : VecCond<loongarch_vall_nonzero, v8i32, LASX256>; 10725f757f3fSDimitry Andricdef PseudoXVBNZ_D : VecCond<loongarch_vall_nonzero, v4i64, LASX256>; 10735f757f3fSDimitry Andricdef PseudoXVBNZ : VecCond<loongarch_vany_nonzero, v32i8, LASX256>; 10745f757f3fSDimitry Andric 10755f757f3fSDimitry Andricdef PseudoXVBZ_B : VecCond<loongarch_vall_zero, v32i8, LASX256>; 10765f757f3fSDimitry Andricdef PseudoXVBZ_H : VecCond<loongarch_vall_zero, v16i16, LASX256>; 10775f757f3fSDimitry Andricdef PseudoXVBZ_W : VecCond<loongarch_vall_zero, v8i32, LASX256>; 10785f757f3fSDimitry Andricdef PseudoXVBZ_D : VecCond<loongarch_vall_zero, v4i64, LASX256>; 10795f757f3fSDimitry Andricdef PseudoXVBZ : VecCond<loongarch_vany_zero, v32i8, LASX256>; 10805f757f3fSDimitry Andric 10815f757f3fSDimitry Andriclet usesCustomInserter = 1, Constraints = "$xd = $dst" in { 10825f757f3fSDimitry Andricdef PseudoXVINSGR2VR_B 10835f757f3fSDimitry Andric : Pseudo<(outs LASX256:$dst), (ins LASX256:$xd, GPR:$rj, uimm5:$imm)>; 10845f757f3fSDimitry Andricdef PseudoXVINSGR2VR_H 10855f757f3fSDimitry Andric : Pseudo<(outs LASX256:$dst), (ins LASX256:$xd, GPR:$rj, uimm4:$imm)>; 10865f757f3fSDimitry Andric} // usesCustomInserter = 1, Constraints = "$xd = $dst" 10875f757f3fSDimitry Andric 10885f757f3fSDimitry Andric} // Predicates = [HasExtLASX] 10895f757f3fSDimitry Andric 10905f757f3fSDimitry Andricmulticlass PatXr<SDPatternOperator OpNode, string Inst> { 10915f757f3fSDimitry Andric def : Pat<(v32i8 (OpNode (v32i8 LASX256:$xj))), 10925f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_B") LASX256:$xj)>; 10935f757f3fSDimitry Andric def : Pat<(v16i16 (OpNode (v16i16 LASX256:$xj))), 10945f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_H") LASX256:$xj)>; 10955f757f3fSDimitry Andric def : Pat<(v8i32 (OpNode (v8i32 LASX256:$xj))), 10965f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_W") LASX256:$xj)>; 10975f757f3fSDimitry Andric def : Pat<(v4i64 (OpNode (v4i64 LASX256:$xj))), 10985f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_D") LASX256:$xj)>; 10995f757f3fSDimitry Andric} 11005f757f3fSDimitry Andric 11015f757f3fSDimitry Andricmulticlass PatXrF<SDPatternOperator OpNode, string Inst> { 11025f757f3fSDimitry Andric def : Pat<(v8f32 (OpNode (v8f32 LASX256:$xj))), 11035f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_S") LASX256:$xj)>; 11045f757f3fSDimitry Andric def : Pat<(v4f64 (OpNode (v4f64 LASX256:$xj))), 11055f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_D") LASX256:$xj)>; 11065f757f3fSDimitry Andric} 11075f757f3fSDimitry Andric 11085f757f3fSDimitry Andricmulticlass PatXrXr<SDPatternOperator OpNode, string Inst> { 11095f757f3fSDimitry Andric def : Pat<(OpNode (v32i8 LASX256:$xj), (v32i8 LASX256:$xk)), 11105f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_B") LASX256:$xj, LASX256:$xk)>; 11115f757f3fSDimitry Andric def : Pat<(OpNode (v16i16 LASX256:$xj), (v16i16 LASX256:$xk)), 11125f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_H") LASX256:$xj, LASX256:$xk)>; 11135f757f3fSDimitry Andric def : Pat<(OpNode (v8i32 LASX256:$xj), (v8i32 LASX256:$xk)), 11145f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_W") LASX256:$xj, LASX256:$xk)>; 11155f757f3fSDimitry Andric def : Pat<(OpNode (v4i64 LASX256:$xj), (v4i64 LASX256:$xk)), 11165f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_D") LASX256:$xj, LASX256:$xk)>; 11175f757f3fSDimitry Andric} 11185f757f3fSDimitry Andric 11195f757f3fSDimitry Andricmulticlass PatXrXrF<SDPatternOperator OpNode, string Inst> { 11205f757f3fSDimitry Andric def : Pat<(OpNode (v8f32 LASX256:$xj), (v8f32 LASX256:$xk)), 11215f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_S") LASX256:$xj, LASX256:$xk)>; 11225f757f3fSDimitry Andric def : Pat<(OpNode (v4f64 LASX256:$xj), (v4f64 LASX256:$xk)), 11235f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_D") LASX256:$xj, LASX256:$xk)>; 11245f757f3fSDimitry Andric} 11255f757f3fSDimitry Andric 11265f757f3fSDimitry Andricmulticlass PatXrXrU<SDPatternOperator OpNode, string Inst> { 11275f757f3fSDimitry Andric def : Pat<(OpNode (v32i8 LASX256:$xj), (v32i8 LASX256:$xk)), 11285f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_BU") LASX256:$xj, LASX256:$xk)>; 11295f757f3fSDimitry Andric def : Pat<(OpNode (v16i16 LASX256:$xj), (v16i16 LASX256:$xk)), 11305f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_HU") LASX256:$xj, LASX256:$xk)>; 11315f757f3fSDimitry Andric def : Pat<(OpNode (v8i32 LASX256:$xj), (v8i32 LASX256:$xk)), 11325f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_WU") LASX256:$xj, LASX256:$xk)>; 11335f757f3fSDimitry Andric def : Pat<(OpNode (v4i64 LASX256:$xj), (v4i64 LASX256:$xk)), 11345f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_DU") LASX256:$xj, LASX256:$xk)>; 11355f757f3fSDimitry Andric} 11365f757f3fSDimitry Andric 11375f757f3fSDimitry Andricmulticlass PatXrSimm5<SDPatternOperator OpNode, string Inst> { 11385f757f3fSDimitry Andric def : Pat<(OpNode (v32i8 LASX256:$xj), (v32i8 (SplatPat_simm5 simm5:$imm))), 11395f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_B") LASX256:$xj, simm5:$imm)>; 11405f757f3fSDimitry Andric def : Pat<(OpNode (v16i16 LASX256:$xj), (v16i16 (SplatPat_simm5 simm5:$imm))), 11415f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_H") LASX256:$xj, simm5:$imm)>; 11425f757f3fSDimitry Andric def : Pat<(OpNode (v8i32 LASX256:$xj), (v8i32 (SplatPat_simm5 simm5:$imm))), 11435f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_W") LASX256:$xj, simm5:$imm)>; 11445f757f3fSDimitry Andric def : Pat<(OpNode (v4i64 LASX256:$xj), (v4i64 (SplatPat_simm5 simm5:$imm))), 11455f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_D") LASX256:$xj, simm5:$imm)>; 11465f757f3fSDimitry Andric} 11475f757f3fSDimitry Andric 11485f757f3fSDimitry Andricmulticlass PatXrUimm5<SDPatternOperator OpNode, string Inst> { 11495f757f3fSDimitry Andric def : Pat<(OpNode (v32i8 LASX256:$xj), (v32i8 (SplatPat_uimm5 uimm5:$imm))), 11505f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_BU") LASX256:$xj, uimm5:$imm)>; 11515f757f3fSDimitry Andric def : Pat<(OpNode (v16i16 LASX256:$xj), (v16i16 (SplatPat_uimm5 uimm5:$imm))), 11525f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_HU") LASX256:$xj, uimm5:$imm)>; 11535f757f3fSDimitry Andric def : Pat<(OpNode (v8i32 LASX256:$xj), (v8i32 (SplatPat_uimm5 uimm5:$imm))), 11545f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_WU") LASX256:$xj, uimm5:$imm)>; 11555f757f3fSDimitry Andric def : Pat<(OpNode (v4i64 LASX256:$xj), (v4i64 (SplatPat_uimm5 uimm5:$imm))), 11565f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_DU") LASX256:$xj, uimm5:$imm)>; 11575f757f3fSDimitry Andric} 11585f757f3fSDimitry Andric 11595f757f3fSDimitry Andricmulticlass PatXrXrXr<SDPatternOperator OpNode, string Inst> { 11605f757f3fSDimitry Andric def : Pat<(OpNode (v32i8 LASX256:$xd), (v32i8 LASX256:$xj), 11615f757f3fSDimitry Andric (v32i8 LASX256:$xk)), 11625f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_B") LASX256:$xd, LASX256:$xj, LASX256:$xk)>; 11635f757f3fSDimitry Andric def : Pat<(OpNode (v16i16 LASX256:$xd), (v16i16 LASX256:$xj), 11645f757f3fSDimitry Andric (v16i16 LASX256:$xk)), 11655f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_H") LASX256:$xd, LASX256:$xj, LASX256:$xk)>; 11665f757f3fSDimitry Andric def : Pat<(OpNode (v8i32 LASX256:$xd), (v8i32 LASX256:$xj), 11675f757f3fSDimitry Andric (v8i32 LASX256:$xk)), 11685f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_W") LASX256:$xd, LASX256:$xj, LASX256:$xk)>; 11695f757f3fSDimitry Andric def : Pat<(OpNode (v4i64 LASX256:$xd), (v4i64 LASX256:$xj), 11705f757f3fSDimitry Andric (v4i64 LASX256:$xk)), 11715f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_D") LASX256:$xd, LASX256:$xj, LASX256:$xk)>; 11725f757f3fSDimitry Andric} 11735f757f3fSDimitry Andric 11745f757f3fSDimitry Andricmulticlass PatShiftXrXr<SDPatternOperator OpNode, string Inst> { 11755f757f3fSDimitry Andric def : Pat<(OpNode (v32i8 LASX256:$xj), (and vsplati8_imm_eq_7, 11765f757f3fSDimitry Andric (v32i8 LASX256:$xk))), 11775f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_B") LASX256:$xj, LASX256:$xk)>; 11785f757f3fSDimitry Andric def : Pat<(OpNode (v16i16 LASX256:$xj), (and vsplati16_imm_eq_15, 11795f757f3fSDimitry Andric (v16i16 LASX256:$xk))), 11805f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_H") LASX256:$xj, LASX256:$xk)>; 11815f757f3fSDimitry Andric def : Pat<(OpNode (v8i32 LASX256:$xj), (and vsplati32_imm_eq_31, 11825f757f3fSDimitry Andric (v8i32 LASX256:$xk))), 11835f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_W") LASX256:$xj, LASX256:$xk)>; 11845f757f3fSDimitry Andric def : Pat<(OpNode (v4i64 LASX256:$xj), (and vsplati64_imm_eq_63, 11855f757f3fSDimitry Andric (v4i64 LASX256:$xk))), 11865f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_D") LASX256:$xj, LASX256:$xk)>; 11875f757f3fSDimitry Andric} 11885f757f3fSDimitry Andric 11895f757f3fSDimitry Andricmulticlass PatShiftXrUimm<SDPatternOperator OpNode, string Inst> { 11905f757f3fSDimitry Andric def : Pat<(OpNode (v32i8 LASX256:$xj), (v32i8 (SplatPat_uimm3 uimm3:$imm))), 11915f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_B") LASX256:$xj, uimm3:$imm)>; 11925f757f3fSDimitry Andric def : Pat<(OpNode (v16i16 LASX256:$xj), (v16i16 (SplatPat_uimm4 uimm4:$imm))), 11935f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_H") LASX256:$xj, uimm4:$imm)>; 11945f757f3fSDimitry Andric def : Pat<(OpNode (v8i32 LASX256:$xj), (v8i32 (SplatPat_uimm5 uimm5:$imm))), 11955f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_W") LASX256:$xj, uimm5:$imm)>; 11965f757f3fSDimitry Andric def : Pat<(OpNode (v4i64 LASX256:$xj), (v4i64 (SplatPat_uimm6 uimm6:$imm))), 11975f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_D") LASX256:$xj, uimm6:$imm)>; 11985f757f3fSDimitry Andric} 11995f757f3fSDimitry Andric 12005f757f3fSDimitry Andricmulticlass PatCCXrSimm5<CondCode CC, string Inst> { 12015f757f3fSDimitry Andric def : Pat<(v32i8 (setcc (v32i8 LASX256:$xj), 12025f757f3fSDimitry Andric (v32i8 (SplatPat_simm5 simm5:$imm)), CC)), 12035f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_B") LASX256:$xj, simm5:$imm)>; 12045f757f3fSDimitry Andric def : Pat<(v16i16 (setcc (v16i16 LASX256:$xj), 12055f757f3fSDimitry Andric (v16i16 (SplatPat_simm5 simm5:$imm)), CC)), 12065f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_H") LASX256:$xj, simm5:$imm)>; 12075f757f3fSDimitry Andric def : Pat<(v8i32 (setcc (v8i32 LASX256:$xj), 12085f757f3fSDimitry Andric (v8i32 (SplatPat_simm5 simm5:$imm)), CC)), 12095f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_W") LASX256:$xj, simm5:$imm)>; 12105f757f3fSDimitry Andric def : Pat<(v4i64 (setcc (v4i64 LASX256:$xj), 12115f757f3fSDimitry Andric (v4i64 (SplatPat_simm5 simm5:$imm)), CC)), 12125f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_D") LASX256:$xj, simm5:$imm)>; 12135f757f3fSDimitry Andric} 12145f757f3fSDimitry Andric 12155f757f3fSDimitry Andricmulticlass PatCCXrUimm5<CondCode CC, string Inst> { 12165f757f3fSDimitry Andric def : Pat<(v32i8 (setcc (v32i8 LASX256:$xj), 12175f757f3fSDimitry Andric (v32i8 (SplatPat_uimm5 uimm5:$imm)), CC)), 12185f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_BU") LASX256:$xj, uimm5:$imm)>; 12195f757f3fSDimitry Andric def : Pat<(v16i16 (setcc (v16i16 LASX256:$xj), 12205f757f3fSDimitry Andric (v16i16 (SplatPat_uimm5 uimm5:$imm)), CC)), 12215f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_HU") LASX256:$xj, uimm5:$imm)>; 12225f757f3fSDimitry Andric def : Pat<(v8i32 (setcc (v8i32 LASX256:$xj), 12235f757f3fSDimitry Andric (v8i32 (SplatPat_uimm5 uimm5:$imm)), CC)), 12245f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_WU") LASX256:$xj, uimm5:$imm)>; 12255f757f3fSDimitry Andric def : Pat<(v4i64 (setcc (v4i64 LASX256:$xj), 12265f757f3fSDimitry Andric (v4i64 (SplatPat_uimm5 uimm5:$imm)), CC)), 12275f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_DU") LASX256:$xj, uimm5:$imm)>; 12285f757f3fSDimitry Andric} 12295f757f3fSDimitry Andric 12305f757f3fSDimitry Andricmulticlass PatCCXrXr<CondCode CC, string Inst> { 12315f757f3fSDimitry Andric def : Pat<(v32i8 (setcc (v32i8 LASX256:$xj), (v32i8 LASX256:$xk), CC)), 12325f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_B") LASX256:$xj, LASX256:$xk)>; 12335f757f3fSDimitry Andric def : Pat<(v16i16 (setcc (v16i16 LASX256:$xj), (v16i16 LASX256:$xk), CC)), 12345f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_H") LASX256:$xj, LASX256:$xk)>; 12355f757f3fSDimitry Andric def : Pat<(v8i32 (setcc (v8i32 LASX256:$xj), (v8i32 LASX256:$xk), CC)), 12365f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_W") LASX256:$xj, LASX256:$xk)>; 12375f757f3fSDimitry Andric def : Pat<(v4i64 (setcc (v4i64 LASX256:$xj), (v4i64 LASX256:$xk), CC)), 12385f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_D") LASX256:$xj, LASX256:$xk)>; 12395f757f3fSDimitry Andric} 12405f757f3fSDimitry Andric 12415f757f3fSDimitry Andricmulticlass PatCCXrXrU<CondCode CC, string Inst> { 12425f757f3fSDimitry Andric def : Pat<(v32i8 (setcc (v32i8 LASX256:$xj), (v32i8 LASX256:$xk), CC)), 12435f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_BU") LASX256:$xj, LASX256:$xk)>; 12445f757f3fSDimitry Andric def : Pat<(v16i16 (setcc (v16i16 LASX256:$xj), (v16i16 LASX256:$xk), CC)), 12455f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_HU") LASX256:$xj, LASX256:$xk)>; 12465f757f3fSDimitry Andric def : Pat<(v8i32 (setcc (v8i32 LASX256:$xj), (v8i32 LASX256:$xk), CC)), 12475f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_WU") LASX256:$xj, LASX256:$xk)>; 12485f757f3fSDimitry Andric def : Pat<(v4i64 (setcc (v4i64 LASX256:$xj), (v4i64 LASX256:$xk), CC)), 12495f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_DU") LASX256:$xj, LASX256:$xk)>; 12505f757f3fSDimitry Andric} 12515f757f3fSDimitry Andric 12525f757f3fSDimitry Andricmulticlass PatCCXrXrF<CondCode CC, string Inst> { 12535f757f3fSDimitry Andric def : Pat<(v8i32 (setcc (v8f32 LASX256:$xj), (v8f32 LASX256:$xk), CC)), 12545f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_S") LASX256:$xj, LASX256:$xk)>; 12555f757f3fSDimitry Andric def : Pat<(v4i64 (setcc (v4f64 LASX256:$xj), (v4f64 LASX256:$xk), CC)), 12565f757f3fSDimitry Andric (!cast<LAInst>(Inst#"_D") LASX256:$xj, LASX256:$xk)>; 12575f757f3fSDimitry Andric} 12585f757f3fSDimitry Andric 12595f757f3fSDimitry Andriclet Predicates = [HasExtLASX] in { 12605f757f3fSDimitry Andric 12615f757f3fSDimitry Andric// XVADD_{B/H/W/D} 12625f757f3fSDimitry Andricdefm : PatXrXr<add, "XVADD">; 12635f757f3fSDimitry Andric// XVSUB_{B/H/W/D} 12645f757f3fSDimitry Andricdefm : PatXrXr<sub, "XVSUB">; 12655f757f3fSDimitry Andric 12665f757f3fSDimitry Andric// XVADDI_{B/H/W/D}U 12675f757f3fSDimitry Andricdefm : PatXrUimm5<add, "XVADDI">; 12685f757f3fSDimitry Andric// XVSUBI_{B/H/W/D}U 12695f757f3fSDimitry Andricdefm : PatXrUimm5<sub, "XVSUBI">; 12705f757f3fSDimitry Andric 12715f757f3fSDimitry Andric// XVNEG_{B/H/W/D} 12725f757f3fSDimitry Andricdef : Pat<(sub immAllZerosV, (v32i8 LASX256:$xj)), (XVNEG_B LASX256:$xj)>; 12735f757f3fSDimitry Andricdef : Pat<(sub immAllZerosV, (v16i16 LASX256:$xj)), (XVNEG_H LASX256:$xj)>; 12745f757f3fSDimitry Andricdef : Pat<(sub immAllZerosV, (v8i32 LASX256:$xj)), (XVNEG_W LASX256:$xj)>; 12755f757f3fSDimitry Andricdef : Pat<(sub immAllZerosV, (v4i64 LASX256:$xj)), (XVNEG_D LASX256:$xj)>; 12765f757f3fSDimitry Andric 12775f757f3fSDimitry Andric// XVMAX[I]_{B/H/W/D}[U] 12785f757f3fSDimitry Andricdefm : PatXrXr<smax, "XVMAX">; 12795f757f3fSDimitry Andricdefm : PatXrXrU<umax, "XVMAX">; 12805f757f3fSDimitry Andricdefm : PatXrSimm5<smax, "XVMAXI">; 12815f757f3fSDimitry Andricdefm : PatXrUimm5<umax, "XVMAXI">; 12825f757f3fSDimitry Andric 12835f757f3fSDimitry Andric// XVMIN[I]_{B/H/W/D}[U] 12845f757f3fSDimitry Andricdefm : PatXrXr<smin, "XVMIN">; 12855f757f3fSDimitry Andricdefm : PatXrXrU<umin, "XVMIN">; 12865f757f3fSDimitry Andricdefm : PatXrSimm5<smin, "XVMINI">; 12875f757f3fSDimitry Andricdefm : PatXrUimm5<umin, "XVMINI">; 12885f757f3fSDimitry Andric 12895f757f3fSDimitry Andric// XVMUL_{B/H/W/D} 12905f757f3fSDimitry Andricdefm : PatXrXr<mul, "XVMUL">; 12915f757f3fSDimitry Andric 12925f757f3fSDimitry Andric// XVMUH_{B/H/W/D}[U] 12935f757f3fSDimitry Andricdefm : PatXrXr<mulhs, "XVMUH">; 12945f757f3fSDimitry Andricdefm : PatXrXrU<mulhu, "XVMUH">; 12955f757f3fSDimitry Andric 12965f757f3fSDimitry Andric// XVMADD_{B/H/W/D} 12975f757f3fSDimitry Andricdefm : PatXrXrXr<muladd, "XVMADD">; 12985f757f3fSDimitry Andric// XVMSUB_{B/H/W/D} 12995f757f3fSDimitry Andricdefm : PatXrXrXr<mulsub, "XVMSUB">; 13005f757f3fSDimitry Andric 13015f757f3fSDimitry Andric// XVDIV_{B/H/W/D}[U] 13025f757f3fSDimitry Andricdefm : PatXrXr<sdiv, "XVDIV">; 13035f757f3fSDimitry Andricdefm : PatXrXrU<udiv, "XVDIV">; 13045f757f3fSDimitry Andric 13055f757f3fSDimitry Andric// XVMOD_{B/H/W/D}[U] 13065f757f3fSDimitry Andricdefm : PatXrXr<srem, "XVMOD">; 13075f757f3fSDimitry Andricdefm : PatXrXrU<urem, "XVMOD">; 13085f757f3fSDimitry Andric 13095f757f3fSDimitry Andric// XVAND_V 13105f757f3fSDimitry Andricforeach vt = [v32i8, v16i16, v8i32, v4i64] in 13115f757f3fSDimitry Andricdef : Pat<(and (vt LASX256:$xj), (vt LASX256:$xk)), 13125f757f3fSDimitry Andric (XVAND_V LASX256:$xj, LASX256:$xk)>; 13135f757f3fSDimitry Andric// XVOR_V 13145f757f3fSDimitry Andricforeach vt = [v32i8, v16i16, v8i32, v4i64] in 13155f757f3fSDimitry Andricdef : Pat<(or (vt LASX256:$xj), (vt LASX256:$xk)), 13165f757f3fSDimitry Andric (XVOR_V LASX256:$xj, LASX256:$xk)>; 13175f757f3fSDimitry Andric// XVXOR_V 13185f757f3fSDimitry Andricforeach vt = [v32i8, v16i16, v8i32, v4i64] in 13195f757f3fSDimitry Andricdef : Pat<(xor (vt LASX256:$xj), (vt LASX256:$xk)), 13205f757f3fSDimitry Andric (XVXOR_V LASX256:$xj, LASX256:$xk)>; 13215f757f3fSDimitry Andric// XVNOR_V 13225f757f3fSDimitry Andricforeach vt = [v32i8, v16i16, v8i32, v4i64] in 13235f757f3fSDimitry Andricdef : Pat<(vnot (or (vt LASX256:$xj), (vt LASX256:$xk))), 13245f757f3fSDimitry Andric (XVNOR_V LASX256:$xj, LASX256:$xk)>; 13255f757f3fSDimitry Andric 13265f757f3fSDimitry Andric// XVANDI_B 13275f757f3fSDimitry Andricdef : Pat<(and (v32i8 LASX256:$xj), (v32i8 (SplatPat_uimm8 uimm8:$imm))), 13285f757f3fSDimitry Andric (XVANDI_B LASX256:$xj, uimm8:$imm)>; 13295f757f3fSDimitry Andric// XVORI_B 13305f757f3fSDimitry Andricdef : Pat<(or (v32i8 LASX256:$xj), (v32i8 (SplatPat_uimm8 uimm8:$imm))), 13315f757f3fSDimitry Andric (XVORI_B LASX256:$xj, uimm8:$imm)>; 13325f757f3fSDimitry Andric 13335f757f3fSDimitry Andric// XVXORI_B 13345f757f3fSDimitry Andricdef : Pat<(xor (v32i8 LASX256:$xj), (v32i8 (SplatPat_uimm8 uimm8:$imm))), 13355f757f3fSDimitry Andric (XVXORI_B LASX256:$xj, uimm8:$imm)>; 13365f757f3fSDimitry Andric 13375f757f3fSDimitry Andric// XVSLL[I]_{B/H/W/D} 13385f757f3fSDimitry Andricdefm : PatXrXr<shl, "XVSLL">; 13395f757f3fSDimitry Andricdefm : PatShiftXrXr<shl, "XVSLL">; 13405f757f3fSDimitry Andricdefm : PatShiftXrUimm<shl, "XVSLLI">; 13415f757f3fSDimitry Andric 13425f757f3fSDimitry Andric// XVSRL[I]_{B/H/W/D} 13435f757f3fSDimitry Andricdefm : PatXrXr<srl, "XVSRL">; 13445f757f3fSDimitry Andricdefm : PatShiftXrXr<srl, "XVSRL">; 13455f757f3fSDimitry Andricdefm : PatShiftXrUimm<srl, "XVSRLI">; 13465f757f3fSDimitry Andric 13475f757f3fSDimitry Andric// XVSRA[I]_{B/H/W/D} 13485f757f3fSDimitry Andricdefm : PatXrXr<sra, "XVSRA">; 13495f757f3fSDimitry Andricdefm : PatShiftXrXr<sra, "XVSRA">; 13505f757f3fSDimitry Andricdefm : PatShiftXrUimm<sra, "XVSRAI">; 13515f757f3fSDimitry Andric 13525f757f3fSDimitry Andric// XVCLZ_{B/H/W/D} 13535f757f3fSDimitry Andricdefm : PatXr<ctlz, "XVCLZ">; 13545f757f3fSDimitry Andric 13555f757f3fSDimitry Andric// XVPCNT_{B/H/W/D} 13565f757f3fSDimitry Andricdefm : PatXr<ctpop, "XVPCNT">; 13575f757f3fSDimitry Andric 13585f757f3fSDimitry Andric// XVBITCLR_{B/H/W/D} 13595f757f3fSDimitry Andricdef : Pat<(and v32i8:$xj, (vnot (shl vsplat_imm_eq_1, v32i8:$xk))), 13605f757f3fSDimitry Andric (v32i8 (XVBITCLR_B v32i8:$xj, v32i8:$xk))>; 13615f757f3fSDimitry Andricdef : Pat<(and v16i16:$xj, (vnot (shl vsplat_imm_eq_1, v16i16:$xk))), 13625f757f3fSDimitry Andric (v16i16 (XVBITCLR_H v16i16:$xj, v16i16:$xk))>; 13635f757f3fSDimitry Andricdef : Pat<(and v8i32:$xj, (vnot (shl vsplat_imm_eq_1, v8i32:$xk))), 13645f757f3fSDimitry Andric (v8i32 (XVBITCLR_W v8i32:$xj, v8i32:$xk))>; 13655f757f3fSDimitry Andricdef : Pat<(and v4i64:$xj, (vnot (shl vsplat_imm_eq_1, v4i64:$xk))), 13665f757f3fSDimitry Andric (v4i64 (XVBITCLR_D v4i64:$xj, v4i64:$xk))>; 13675f757f3fSDimitry Andricdef : Pat<(and v32i8:$xj, (vnot (shl vsplat_imm_eq_1, 13685f757f3fSDimitry Andric (vsplati8imm7 v32i8:$xk)))), 13695f757f3fSDimitry Andric (v32i8 (XVBITCLR_B v32i8:$xj, v32i8:$xk))>; 13705f757f3fSDimitry Andricdef : Pat<(and v16i16:$xj, (vnot (shl vsplat_imm_eq_1, 13715f757f3fSDimitry Andric (vsplati16imm15 v16i16:$xk)))), 13725f757f3fSDimitry Andric (v16i16 (XVBITCLR_H v16i16:$xj, v16i16:$xk))>; 13735f757f3fSDimitry Andricdef : Pat<(and v8i32:$xj, (vnot (shl vsplat_imm_eq_1, 13745f757f3fSDimitry Andric (vsplati32imm31 v8i32:$xk)))), 13755f757f3fSDimitry Andric (v8i32 (XVBITCLR_W v8i32:$xj, v8i32:$xk))>; 13765f757f3fSDimitry Andricdef : Pat<(and v4i64:$xj, (vnot (shl vsplat_imm_eq_1, 13775f757f3fSDimitry Andric (vsplati64imm63 v4i64:$xk)))), 13785f757f3fSDimitry Andric (v4i64 (XVBITCLR_D v4i64:$xj, v4i64:$xk))>; 13795f757f3fSDimitry Andric 13805f757f3fSDimitry Andric// XVBITCLRI_{B/H/W/D} 13815f757f3fSDimitry Andricdef : Pat<(and (v32i8 LASX256:$xj), (v32i8 (vsplat_uimm_inv_pow2 uimm3:$imm))), 13825f757f3fSDimitry Andric (XVBITCLRI_B LASX256:$xj, uimm3:$imm)>; 13835f757f3fSDimitry Andricdef : Pat<(and (v16i16 LASX256:$xj), (v16i16 (vsplat_uimm_inv_pow2 uimm4:$imm))), 13845f757f3fSDimitry Andric (XVBITCLRI_H LASX256:$xj, uimm4:$imm)>; 13855f757f3fSDimitry Andricdef : Pat<(and (v8i32 LASX256:$xj), (v8i32 (vsplat_uimm_inv_pow2 uimm5:$imm))), 13865f757f3fSDimitry Andric (XVBITCLRI_W LASX256:$xj, uimm5:$imm)>; 13875f757f3fSDimitry Andricdef : Pat<(and (v4i64 LASX256:$xj), (v4i64 (vsplat_uimm_inv_pow2 uimm6:$imm))), 13885f757f3fSDimitry Andric (XVBITCLRI_D LASX256:$xj, uimm6:$imm)>; 13895f757f3fSDimitry Andric 13905f757f3fSDimitry Andric// XVBITSET_{B/H/W/D} 13915f757f3fSDimitry Andricdef : Pat<(or v32i8:$xj, (shl vsplat_imm_eq_1, v32i8:$xk)), 13925f757f3fSDimitry Andric (v32i8 (XVBITSET_B v32i8:$xj, v32i8:$xk))>; 13935f757f3fSDimitry Andricdef : Pat<(or v16i16:$xj, (shl vsplat_imm_eq_1, v16i16:$xk)), 13945f757f3fSDimitry Andric (v16i16 (XVBITSET_H v16i16:$xj, v16i16:$xk))>; 13955f757f3fSDimitry Andricdef : Pat<(or v8i32:$xj, (shl vsplat_imm_eq_1, v8i32:$xk)), 13965f757f3fSDimitry Andric (v8i32 (XVBITSET_W v8i32:$xj, v8i32:$xk))>; 13975f757f3fSDimitry Andricdef : Pat<(or v4i64:$xj, (shl vsplat_imm_eq_1, v4i64:$xk)), 13985f757f3fSDimitry Andric (v4i64 (XVBITSET_D v4i64:$xj, v4i64:$xk))>; 13995f757f3fSDimitry Andricdef : Pat<(or v32i8:$xj, (shl vsplat_imm_eq_1, (vsplati8imm7 v32i8:$xk))), 14005f757f3fSDimitry Andric (v32i8 (XVBITSET_B v32i8:$xj, v32i8:$xk))>; 14015f757f3fSDimitry Andricdef : Pat<(or v16i16:$xj, (shl vsplat_imm_eq_1, (vsplati16imm15 v16i16:$xk))), 14025f757f3fSDimitry Andric (v16i16 (XVBITSET_H v16i16:$xj, v16i16:$xk))>; 14035f757f3fSDimitry Andricdef : Pat<(or v8i32:$xj, (shl vsplat_imm_eq_1, (vsplati32imm31 v8i32:$xk))), 14045f757f3fSDimitry Andric (v8i32 (XVBITSET_W v8i32:$xj, v8i32:$xk))>; 14055f757f3fSDimitry Andricdef : Pat<(or v4i64:$xj, (shl vsplat_imm_eq_1, (vsplati64imm63 v4i64:$xk))), 14065f757f3fSDimitry Andric (v4i64 (XVBITSET_D v4i64:$xj, v4i64:$xk))>; 14075f757f3fSDimitry Andric 14085f757f3fSDimitry Andric// XVBITSETI_{B/H/W/D} 14095f757f3fSDimitry Andricdef : Pat<(or (v32i8 LASX256:$xj), (v32i8 (vsplat_uimm_pow2 uimm3:$imm))), 14105f757f3fSDimitry Andric (XVBITSETI_B LASX256:$xj, uimm3:$imm)>; 14115f757f3fSDimitry Andricdef : Pat<(or (v16i16 LASX256:$xj), (v16i16 (vsplat_uimm_pow2 uimm4:$imm))), 14125f757f3fSDimitry Andric (XVBITSETI_H LASX256:$xj, uimm4:$imm)>; 14135f757f3fSDimitry Andricdef : Pat<(or (v8i32 LASX256:$xj), (v8i32 (vsplat_uimm_pow2 uimm5:$imm))), 14145f757f3fSDimitry Andric (XVBITSETI_W LASX256:$xj, uimm5:$imm)>; 14155f757f3fSDimitry Andricdef : Pat<(or (v4i64 LASX256:$xj), (v4i64 (vsplat_uimm_pow2 uimm6:$imm))), 14165f757f3fSDimitry Andric (XVBITSETI_D LASX256:$xj, uimm6:$imm)>; 14175f757f3fSDimitry Andric 14185f757f3fSDimitry Andric// XVBITREV_{B/H/W/D} 14195f757f3fSDimitry Andricdef : Pat<(xor v32i8:$xj, (shl vsplat_imm_eq_1, v32i8:$xk)), 14205f757f3fSDimitry Andric (v32i8 (XVBITREV_B v32i8:$xj, v32i8:$xk))>; 14215f757f3fSDimitry Andricdef : Pat<(xor v16i16:$xj, (shl vsplat_imm_eq_1, v16i16:$xk)), 14225f757f3fSDimitry Andric (v16i16 (XVBITREV_H v16i16:$xj, v16i16:$xk))>; 14235f757f3fSDimitry Andricdef : Pat<(xor v8i32:$xj, (shl vsplat_imm_eq_1, v8i32:$xk)), 14245f757f3fSDimitry Andric (v8i32 (XVBITREV_W v8i32:$xj, v8i32:$xk))>; 14255f757f3fSDimitry Andricdef : Pat<(xor v4i64:$xj, (shl vsplat_imm_eq_1, v4i64:$xk)), 14265f757f3fSDimitry Andric (v4i64 (XVBITREV_D v4i64:$xj, v4i64:$xk))>; 14275f757f3fSDimitry Andricdef : Pat<(xor v32i8:$xj, (shl vsplat_imm_eq_1, (vsplati8imm7 v32i8:$xk))), 14285f757f3fSDimitry Andric (v32i8 (XVBITREV_B v32i8:$xj, v32i8:$xk))>; 14295f757f3fSDimitry Andricdef : Pat<(xor v16i16:$xj, (shl vsplat_imm_eq_1, (vsplati16imm15 v16i16:$xk))), 14305f757f3fSDimitry Andric (v16i16 (XVBITREV_H v16i16:$xj, v16i16:$xk))>; 14315f757f3fSDimitry Andricdef : Pat<(xor v8i32:$xj, (shl vsplat_imm_eq_1, (vsplati32imm31 v8i32:$xk))), 14325f757f3fSDimitry Andric (v8i32 (XVBITREV_W v8i32:$xj, v8i32:$xk))>; 14335f757f3fSDimitry Andricdef : Pat<(xor v4i64:$xj, (shl vsplat_imm_eq_1, (vsplati64imm63 v4i64:$xk))), 14345f757f3fSDimitry Andric (v4i64 (XVBITREV_D v4i64:$xj, v4i64:$xk))>; 14355f757f3fSDimitry Andric 14365f757f3fSDimitry Andric// XVBITREVI_{B/H/W/D} 14375f757f3fSDimitry Andricdef : Pat<(xor (v32i8 LASX256:$xj), (v32i8 (vsplat_uimm_pow2 uimm3:$imm))), 14385f757f3fSDimitry Andric (XVBITREVI_B LASX256:$xj, uimm3:$imm)>; 14395f757f3fSDimitry Andricdef : Pat<(xor (v16i16 LASX256:$xj), (v16i16 (vsplat_uimm_pow2 uimm4:$imm))), 14405f757f3fSDimitry Andric (XVBITREVI_H LASX256:$xj, uimm4:$imm)>; 14415f757f3fSDimitry Andricdef : Pat<(xor (v8i32 LASX256:$xj), (v8i32 (vsplat_uimm_pow2 uimm5:$imm))), 14425f757f3fSDimitry Andric (XVBITREVI_W LASX256:$xj, uimm5:$imm)>; 14435f757f3fSDimitry Andricdef : Pat<(xor (v4i64 LASX256:$xj), (v4i64 (vsplat_uimm_pow2 uimm6:$imm))), 14445f757f3fSDimitry Andric (XVBITREVI_D LASX256:$xj, uimm6:$imm)>; 14455f757f3fSDimitry Andric 14465f757f3fSDimitry Andric// XVFADD_{S/D} 14475f757f3fSDimitry Andricdefm : PatXrXrF<fadd, "XVFADD">; 14485f757f3fSDimitry Andric 14495f757f3fSDimitry Andric// XVFSUB_{S/D} 14505f757f3fSDimitry Andricdefm : PatXrXrF<fsub, "XVFSUB">; 14515f757f3fSDimitry Andric 14525f757f3fSDimitry Andric// XVFMUL_{S/D} 14535f757f3fSDimitry Andricdefm : PatXrXrF<fmul, "XVFMUL">; 14545f757f3fSDimitry Andric 14555f757f3fSDimitry Andric// XVFDIV_{S/D} 14565f757f3fSDimitry Andricdefm : PatXrXrF<fdiv, "XVFDIV">; 14575f757f3fSDimitry Andric 14585f757f3fSDimitry Andric// XVFMADD_{S/D} 14595f757f3fSDimitry Andricdef : Pat<(fma v8f32:$xj, v8f32:$xk, v8f32:$xa), 14605f757f3fSDimitry Andric (XVFMADD_S v8f32:$xj, v8f32:$xk, v8f32:$xa)>; 14615f757f3fSDimitry Andricdef : Pat<(fma v4f64:$xj, v4f64:$xk, v4f64:$xa), 14625f757f3fSDimitry Andric (XVFMADD_D v4f64:$xj, v4f64:$xk, v4f64:$xa)>; 14635f757f3fSDimitry Andric 14645f757f3fSDimitry Andric// XVFMSUB_{S/D} 14655f757f3fSDimitry Andricdef : Pat<(fma v8f32:$xj, v8f32:$xk, (fneg v8f32:$xa)), 14665f757f3fSDimitry Andric (XVFMSUB_S v8f32:$xj, v8f32:$xk, v8f32:$xa)>; 14675f757f3fSDimitry Andricdef : Pat<(fma v4f64:$xj, v4f64:$xk, (fneg v4f64:$xa)), 14685f757f3fSDimitry Andric (XVFMSUB_D v4f64:$xj, v4f64:$xk, v4f64:$xa)>; 14695f757f3fSDimitry Andric 14705f757f3fSDimitry Andric// XVFNMADD_{S/D} 14715f757f3fSDimitry Andricdef : Pat<(fneg (fma v8f32:$xj, v8f32:$xk, v8f32:$xa)), 14725f757f3fSDimitry Andric (XVFNMADD_S v8f32:$xj, v8f32:$xk, v8f32:$xa)>; 14735f757f3fSDimitry Andricdef : Pat<(fneg (fma v4f64:$xj, v4f64:$xk, v4f64:$xa)), 14745f757f3fSDimitry Andric (XVFNMADD_D v4f64:$xj, v4f64:$xk, v4f64:$xa)>; 14755f757f3fSDimitry Andricdef : Pat<(fma_nsz (fneg v8f32:$xj), v8f32:$xk, (fneg v8f32:$xa)), 14765f757f3fSDimitry Andric (XVFNMADD_S v8f32:$xj, v8f32:$xk, v8f32:$xa)>; 14775f757f3fSDimitry Andricdef : Pat<(fma_nsz (fneg v4f64:$xj), v4f64:$xk, (fneg v4f64:$xa)), 14785f757f3fSDimitry Andric (XVFNMADD_D v4f64:$xj, v4f64:$xk, v4f64:$xa)>; 14795f757f3fSDimitry Andric 14805f757f3fSDimitry Andric// XVFNMSUB_{S/D} 14815f757f3fSDimitry Andricdef : Pat<(fneg (fma v8f32:$xj, v8f32:$xk, (fneg v8f32:$xa))), 14825f757f3fSDimitry Andric (XVFNMSUB_S v8f32:$xj, v8f32:$xk, v8f32:$xa)>; 14835f757f3fSDimitry Andricdef : Pat<(fneg (fma v4f64:$xj, v4f64:$xk, (fneg v4f64:$xa))), 14845f757f3fSDimitry Andric (XVFNMSUB_D v4f64:$xj, v4f64:$xk, v4f64:$xa)>; 14855f757f3fSDimitry Andricdef : Pat<(fma_nsz (fneg v8f32:$xj), v8f32:$xk, v8f32:$xa), 14865f757f3fSDimitry Andric (XVFNMSUB_S v8f32:$xj, v8f32:$xk, v8f32:$xa)>; 14875f757f3fSDimitry Andricdef : Pat<(fma_nsz (fneg v4f64:$xj), v4f64:$xk, v4f64:$xa), 14885f757f3fSDimitry Andric (XVFNMSUB_D v4f64:$xj, v4f64:$xk, v4f64:$xa)>; 14895f757f3fSDimitry Andric 14905f757f3fSDimitry Andric// XVFSQRT_{S/D} 14915f757f3fSDimitry Andricdefm : PatXrF<fsqrt, "XVFSQRT">; 14925f757f3fSDimitry Andric 14935f757f3fSDimitry Andric// XVRECIP_{S/D} 14945f757f3fSDimitry Andricdef : Pat<(fdiv vsplatf32_fpimm_eq_1, v8f32:$xj), 14955f757f3fSDimitry Andric (XVFRECIP_S v8f32:$xj)>; 14965f757f3fSDimitry Andricdef : Pat<(fdiv vsplatf64_fpimm_eq_1, v4f64:$xj), 14975f757f3fSDimitry Andric (XVFRECIP_D v4f64:$xj)>; 14985f757f3fSDimitry Andric 14995f757f3fSDimitry Andric// XVFRSQRT_{S/D} 15005f757f3fSDimitry Andricdef : Pat<(fdiv vsplatf32_fpimm_eq_1, (fsqrt v8f32:$xj)), 15015f757f3fSDimitry Andric (XVFRSQRT_S v8f32:$xj)>; 15025f757f3fSDimitry Andricdef : Pat<(fdiv vsplatf64_fpimm_eq_1, (fsqrt v4f64:$xj)), 15035f757f3fSDimitry Andric (XVFRSQRT_D v4f64:$xj)>; 15045f757f3fSDimitry Andric 15055f757f3fSDimitry Andric// XVSEQ[I]_{B/H/W/D} 15065f757f3fSDimitry Andricdefm : PatCCXrSimm5<SETEQ, "XVSEQI">; 15075f757f3fSDimitry Andricdefm : PatCCXrXr<SETEQ, "XVSEQ">; 15085f757f3fSDimitry Andric 15095f757f3fSDimitry Andric// XVSLE[I]_{B/H/W/D}[U] 15105f757f3fSDimitry Andricdefm : PatCCXrSimm5<SETLE, "XVSLEI">; 15115f757f3fSDimitry Andricdefm : PatCCXrUimm5<SETULE, "XVSLEI">; 15125f757f3fSDimitry Andricdefm : PatCCXrXr<SETLE, "XVSLE">; 15135f757f3fSDimitry Andricdefm : PatCCXrXrU<SETULE, "XVSLE">; 15145f757f3fSDimitry Andric 15155f757f3fSDimitry Andric// XVSLT[I]_{B/H/W/D}[U] 15165f757f3fSDimitry Andricdefm : PatCCXrSimm5<SETLT, "XVSLTI">; 15175f757f3fSDimitry Andricdefm : PatCCXrUimm5<SETULT, "XVSLTI">; 15185f757f3fSDimitry Andricdefm : PatCCXrXr<SETLT, "XVSLT">; 15195f757f3fSDimitry Andricdefm : PatCCXrXrU<SETULT, "XVSLT">; 15205f757f3fSDimitry Andric 15215f757f3fSDimitry Andric// XVFCMP.cond.{S/D} 15225f757f3fSDimitry Andricdefm : PatCCXrXrF<SETEQ, "XVFCMP_CEQ">; 15235f757f3fSDimitry Andricdefm : PatCCXrXrF<SETOEQ, "XVFCMP_CEQ">; 15245f757f3fSDimitry Andricdefm : PatCCXrXrF<SETUEQ, "XVFCMP_CUEQ">; 15255f757f3fSDimitry Andric 15265f757f3fSDimitry Andricdefm : PatCCXrXrF<SETLE, "XVFCMP_CLE">; 15275f757f3fSDimitry Andricdefm : PatCCXrXrF<SETOLE, "XVFCMP_CLE">; 15285f757f3fSDimitry Andricdefm : PatCCXrXrF<SETULE, "XVFCMP_CULE">; 15295f757f3fSDimitry Andric 15305f757f3fSDimitry Andricdefm : PatCCXrXrF<SETLT, "XVFCMP_CLT">; 15315f757f3fSDimitry Andricdefm : PatCCXrXrF<SETOLT, "XVFCMP_CLT">; 15325f757f3fSDimitry Andricdefm : PatCCXrXrF<SETULT, "XVFCMP_CULT">; 15335f757f3fSDimitry Andric 15345f757f3fSDimitry Andricdefm : PatCCXrXrF<SETNE, "XVFCMP_CNE">; 15355f757f3fSDimitry Andricdefm : PatCCXrXrF<SETONE, "XVFCMP_CNE">; 15365f757f3fSDimitry Andricdefm : PatCCXrXrF<SETUNE, "XVFCMP_CUNE">; 15375f757f3fSDimitry Andric 15385f757f3fSDimitry Andricdefm : PatCCXrXrF<SETO, "XVFCMP_COR">; 15395f757f3fSDimitry Andricdefm : PatCCXrXrF<SETUO, "XVFCMP_CUN">; 15405f757f3fSDimitry Andric 15415f757f3fSDimitry Andric// PseudoXVINSGR2VR_{B/H} 15425f757f3fSDimitry Andricdef : Pat<(vector_insert v32i8:$xd, GRLenVT:$rj, uimm5:$imm), 15435f757f3fSDimitry Andric (PseudoXVINSGR2VR_B v32i8:$xd, GRLenVT:$rj, uimm5:$imm)>; 15445f757f3fSDimitry Andricdef : Pat<(vector_insert v16i16:$xd, GRLenVT:$rj, uimm4:$imm), 15455f757f3fSDimitry Andric (PseudoXVINSGR2VR_H v16i16:$xd, GRLenVT:$rj, uimm4:$imm)>; 15465f757f3fSDimitry Andric 15475f757f3fSDimitry Andric// XVINSGR2VR_{W/D} 15485f757f3fSDimitry Andricdef : Pat<(vector_insert v8i32:$xd, GRLenVT:$rj, uimm3:$imm), 15495f757f3fSDimitry Andric (XVINSGR2VR_W v8i32:$xd, GRLenVT:$rj, uimm3:$imm)>; 15505f757f3fSDimitry Andricdef : Pat<(vector_insert v4i64:$xd, GRLenVT:$rj, uimm2:$imm), 15515f757f3fSDimitry Andric (XVINSGR2VR_D v4i64:$xd, GRLenVT:$rj, uimm2:$imm)>; 15525f757f3fSDimitry Andric 15535f757f3fSDimitry Andricdef : Pat<(vector_insert v8f32:$vd, FPR32:$fj, uimm3:$imm), 15545f757f3fSDimitry Andric (XVINSGR2VR_W $vd, (COPY_TO_REGCLASS FPR32:$fj, GPR), uimm3:$imm)>; 15555f757f3fSDimitry Andricdef : Pat<(vector_insert v4f64:$vd, FPR64:$fj, uimm2:$imm), 15565f757f3fSDimitry Andric (XVINSGR2VR_D $vd, (COPY_TO_REGCLASS FPR64:$fj, GPR), uimm2:$imm)>; 15575f757f3fSDimitry Andric 15585f757f3fSDimitry Andric// XVPICKVE2GR_W[U] 15595f757f3fSDimitry Andricdef : Pat<(loongarch_vpick_sext_elt v8i32:$xd, uimm3:$imm, i32), 15605f757f3fSDimitry Andric (XVPICKVE2GR_W v8i32:$xd, uimm3:$imm)>; 15615f757f3fSDimitry Andricdef : Pat<(loongarch_vpick_zext_elt v8i32:$xd, uimm3:$imm, i32), 15625f757f3fSDimitry Andric (XVPICKVE2GR_WU v8i32:$xd, uimm3:$imm)>; 15635f757f3fSDimitry Andric 15645f757f3fSDimitry Andric// XVREPLGR2VR_{B/H/W/D} 15655f757f3fSDimitry Andricdef : Pat<(lasxsplati8 GPR:$rj), (XVREPLGR2VR_B GPR:$rj)>; 15665f757f3fSDimitry Andricdef : Pat<(lasxsplati16 GPR:$rj), (XVREPLGR2VR_H GPR:$rj)>; 15675f757f3fSDimitry Andricdef : Pat<(lasxsplati32 GPR:$rj), (XVREPLGR2VR_W GPR:$rj)>; 15685f757f3fSDimitry Andricdef : Pat<(lasxsplati64 GPR:$rj), (XVREPLGR2VR_D GPR:$rj)>; 15695f757f3fSDimitry Andric 15705f757f3fSDimitry Andric// XVREPLVE_{B/H/W/D} 15715f757f3fSDimitry Andricdef : Pat<(loongarch_vreplve v32i8:$xj, GRLenVT:$rk), 15725f757f3fSDimitry Andric (XVREPLVE_B v32i8:$xj, GRLenVT:$rk)>; 15735f757f3fSDimitry Andricdef : Pat<(loongarch_vreplve v16i16:$xj, GRLenVT:$rk), 15745f757f3fSDimitry Andric (XVREPLVE_H v16i16:$xj, GRLenVT:$rk)>; 15755f757f3fSDimitry Andricdef : Pat<(loongarch_vreplve v8i32:$xj, GRLenVT:$rk), 15765f757f3fSDimitry Andric (XVREPLVE_W v8i32:$xj, GRLenVT:$rk)>; 15775f757f3fSDimitry Andricdef : Pat<(loongarch_vreplve v4i64:$xj, GRLenVT:$rk), 15785f757f3fSDimitry Andric (XVREPLVE_D v4i64:$xj, GRLenVT:$rk)>; 15795f757f3fSDimitry Andric 15800fca6ea1SDimitry Andric// XVSHUF_{B/H/W/D} 15810fca6ea1SDimitry Andricdef : Pat<(loongarch_vshuf v32i8:$xa, v32i8:$xj, v32i8:$xk), 15820fca6ea1SDimitry Andric (XVSHUF_B v32i8:$xj, v32i8:$xk, v32i8:$xa)>; 15830fca6ea1SDimitry Andricdef : Pat<(loongarch_vshuf v16i16:$xd, v16i16:$xj, v16i16:$xk), 15840fca6ea1SDimitry Andric (XVSHUF_H v16i16:$xd, v16i16:$xj, v16i16:$xk)>; 15850fca6ea1SDimitry Andricdef : Pat<(loongarch_vshuf v8i32:$xd, v8i32:$xj, v8i32:$xk), 15860fca6ea1SDimitry Andric (XVSHUF_W v8i32:$xd, v8i32:$xj, v8i32:$xk)>; 15870fca6ea1SDimitry Andricdef : Pat<(loongarch_vshuf v4i64:$xd, v4i64:$xj, v4i64:$xk), 15880fca6ea1SDimitry Andric (XVSHUF_D v4i64:$xd, v4i64:$xj, v4i64:$xk)>; 15890fca6ea1SDimitry Andricdef : Pat<(loongarch_vshuf v8i32:$xd, v8f32:$xj, v8f32:$xk), 15900fca6ea1SDimitry Andric (XVSHUF_W v8i32:$xd, v8f32:$xj, v8f32:$xk)>; 15910fca6ea1SDimitry Andricdef : Pat<(loongarch_vshuf v4i64:$xd, v4f64:$xj, v4f64:$xk), 15920fca6ea1SDimitry Andric (XVSHUF_D v4i64:$xd, v4f64:$xj, v4f64:$xk)>; 15930fca6ea1SDimitry Andric 15940fca6ea1SDimitry Andric// XVPICKEV_{B/H/W/D} 15950fca6ea1SDimitry Andricdef : Pat<(loongarch_vpickev v32i8:$xj, v32i8:$xk), 15960fca6ea1SDimitry Andric (XVPICKEV_B v32i8:$xj, v32i8:$xk)>; 15970fca6ea1SDimitry Andricdef : Pat<(loongarch_vpickev v16i16:$xj, v16i16:$xk), 15980fca6ea1SDimitry Andric (XVPICKEV_H v16i16:$xj, v16i16:$xk)>; 15990fca6ea1SDimitry Andricdef : Pat<(loongarch_vpickev v8i32:$xj, v8i32:$xk), 16000fca6ea1SDimitry Andric (XVPICKEV_W v8i32:$xj, v8i32:$xk)>; 16010fca6ea1SDimitry Andricdef : Pat<(loongarch_vpickev v4i64:$xj, v4i64:$xk), 16020fca6ea1SDimitry Andric (XVPICKEV_D v4i64:$xj, v4i64:$xk)>; 16030fca6ea1SDimitry Andricdef : Pat<(loongarch_vpickev v8f32:$xj, v8f32:$xk), 16040fca6ea1SDimitry Andric (XVPICKEV_W v8f32:$xj, v8f32:$xk)>; 16050fca6ea1SDimitry Andricdef : Pat<(loongarch_vpickev v4f64:$xj, v4f64:$xk), 16060fca6ea1SDimitry Andric (XVPICKEV_D v4f64:$xj, v4f64:$xk)>; 16070fca6ea1SDimitry Andric 16080fca6ea1SDimitry Andric// XVPICKOD_{B/H/W/D} 16090fca6ea1SDimitry Andricdef : Pat<(loongarch_vpickod v32i8:$xj, v32i8:$xk), 16100fca6ea1SDimitry Andric (XVPICKOD_B v32i8:$xj, v32i8:$xk)>; 16110fca6ea1SDimitry Andricdef : Pat<(loongarch_vpickod v16i16:$xj, v16i16:$xk), 16120fca6ea1SDimitry Andric (XVPICKOD_H v16i16:$xj, v16i16:$xk)>; 16130fca6ea1SDimitry Andricdef : Pat<(loongarch_vpickod v8i32:$xj, v8i32:$xk), 16140fca6ea1SDimitry Andric (XVPICKOD_W v8i32:$xj, v8i32:$xk)>; 16150fca6ea1SDimitry Andricdef : Pat<(loongarch_vpickod v4i64:$xj, v4i64:$xk), 16160fca6ea1SDimitry Andric (XVPICKOD_D v4i64:$xj, v4i64:$xk)>; 16170fca6ea1SDimitry Andricdef : Pat<(loongarch_vpickod v8f32:$xj, v8f32:$xk), 16180fca6ea1SDimitry Andric (XVPICKOD_W v8f32:$xj, v8f32:$xk)>; 16190fca6ea1SDimitry Andricdef : Pat<(loongarch_vpickod v4f64:$xj, v4f64:$xk), 16200fca6ea1SDimitry Andric (XVPICKOD_D v4f64:$xj, v4f64:$xk)>; 16210fca6ea1SDimitry Andric 16220fca6ea1SDimitry Andric// XVPACKEV_{B/H/W/D} 16230fca6ea1SDimitry Andricdef : Pat<(loongarch_vpackev v32i8:$xj, v32i8:$xk), 16240fca6ea1SDimitry Andric (XVPACKEV_B v32i8:$xj, v32i8:$xk)>; 16250fca6ea1SDimitry Andricdef : Pat<(loongarch_vpackev v16i16:$xj, v16i16:$xk), 16260fca6ea1SDimitry Andric (XVPACKEV_H v16i16:$xj, v16i16:$xk)>; 16270fca6ea1SDimitry Andricdef : Pat<(loongarch_vpackev v8i32:$xj, v8i32:$xk), 16280fca6ea1SDimitry Andric (XVPACKEV_W v8i32:$xj, v8i32:$xk)>; 16290fca6ea1SDimitry Andricdef : Pat<(loongarch_vpackev v4i64:$xj, v4i64:$xk), 16300fca6ea1SDimitry Andric (XVPACKEV_D v4i64:$xj, v4i64:$xk)>; 16310fca6ea1SDimitry Andricdef : Pat<(loongarch_vpackev v8f32:$xj, v8f32:$xk), 16320fca6ea1SDimitry Andric (XVPACKEV_W v8f32:$xj, v8f32:$xk)>; 16330fca6ea1SDimitry Andricdef : Pat<(loongarch_vpackev v4f64:$xj, v4f64:$xk), 16340fca6ea1SDimitry Andric (XVPACKEV_D v4f64:$xj, v4f64:$xk)>; 16350fca6ea1SDimitry Andric 16360fca6ea1SDimitry Andric// XVPACKOD_{B/H/W/D} 16370fca6ea1SDimitry Andricdef : Pat<(loongarch_vpackod v32i8:$xj, v32i8:$xk), 16380fca6ea1SDimitry Andric (XVPACKOD_B v32i8:$xj, v32i8:$xk)>; 16390fca6ea1SDimitry Andricdef : Pat<(loongarch_vpackod v16i16:$xj, v16i16:$xk), 16400fca6ea1SDimitry Andric (XVPACKOD_H v16i16:$xj, v16i16:$xk)>; 16410fca6ea1SDimitry Andricdef : Pat<(loongarch_vpackod v8i32:$xj, v8i32:$xk), 16420fca6ea1SDimitry Andric (XVPACKOD_W v8i32:$xj, v8i32:$xk)>; 16430fca6ea1SDimitry Andricdef : Pat<(loongarch_vpackod v4i64:$xj, v4i64:$xk), 16440fca6ea1SDimitry Andric (XVPACKOD_D v4i64:$xj, v4i64:$xk)>; 16450fca6ea1SDimitry Andricdef : Pat<(loongarch_vpackod v8f32:$xj, v8f32:$xk), 16460fca6ea1SDimitry Andric (XVPACKOD_W v8f32:$xj, v8f32:$xk)>; 16470fca6ea1SDimitry Andricdef : Pat<(loongarch_vpackod v4f64:$xj, v4f64:$xk), 16480fca6ea1SDimitry Andric (XVPACKOD_D v4f64:$xj, v4f64:$xk)>; 16490fca6ea1SDimitry Andric 16500fca6ea1SDimitry Andric// XVILVL_{B/H/W/D} 16510fca6ea1SDimitry Andricdef : Pat<(loongarch_vilvl v32i8:$xj, v32i8:$xk), 16520fca6ea1SDimitry Andric (XVILVL_B v32i8:$xj, v32i8:$xk)>; 16530fca6ea1SDimitry Andricdef : Pat<(loongarch_vilvl v16i16:$xj, v16i16:$xk), 16540fca6ea1SDimitry Andric (XVILVL_H v16i16:$xj, v16i16:$xk)>; 16550fca6ea1SDimitry Andricdef : Pat<(loongarch_vilvl v8i32:$xj, v8i32:$xk), 16560fca6ea1SDimitry Andric (XVILVL_W v8i32:$xj, v8i32:$xk)>; 16570fca6ea1SDimitry Andricdef : Pat<(loongarch_vilvl v4i64:$xj, v4i64:$xk), 16580fca6ea1SDimitry Andric (XVILVL_D v4i64:$xj, v4i64:$xk)>; 16590fca6ea1SDimitry Andricdef : Pat<(loongarch_vilvl v8f32:$xj, v8f32:$xk), 16600fca6ea1SDimitry Andric (XVILVL_W v8f32:$xj, v8f32:$xk)>; 16610fca6ea1SDimitry Andricdef : Pat<(loongarch_vilvl v4f64:$xj, v4f64:$xk), 16620fca6ea1SDimitry Andric (XVILVL_D v4f64:$xj, v4f64:$xk)>; 16630fca6ea1SDimitry Andric 16640fca6ea1SDimitry Andric// XVILVH_{B/H/W/D} 16650fca6ea1SDimitry Andricdef : Pat<(loongarch_vilvh v32i8:$xj, v32i8:$xk), 16660fca6ea1SDimitry Andric (XVILVH_B v32i8:$xj, v32i8:$xk)>; 16670fca6ea1SDimitry Andricdef : Pat<(loongarch_vilvh v16i16:$xj, v16i16:$xk), 16680fca6ea1SDimitry Andric (XVILVH_H v16i16:$xj, v16i16:$xk)>; 16690fca6ea1SDimitry Andricdef : Pat<(loongarch_vilvh v8i32:$xj, v8i32:$xk), 16700fca6ea1SDimitry Andric (XVILVH_W v8i32:$xj, v8i32:$xk)>; 16710fca6ea1SDimitry Andricdef : Pat<(loongarch_vilvh v4i64:$xj, v4i64:$xk), 16720fca6ea1SDimitry Andric (XVILVH_D v4i64:$xj, v4i64:$xk)>; 16730fca6ea1SDimitry Andricdef : Pat<(loongarch_vilvh v8f32:$xj, v8f32:$xk), 16740fca6ea1SDimitry Andric (XVILVH_W v8f32:$xj, v8f32:$xk)>; 16750fca6ea1SDimitry Andricdef : Pat<(loongarch_vilvh v4f64:$xj, v4f64:$xk), 16760fca6ea1SDimitry Andric (XVILVH_D v4f64:$xj, v4f64:$xk)>; 16770fca6ea1SDimitry Andric 16780fca6ea1SDimitry Andric// XVSHUF4I_{B/H/W} 16790fca6ea1SDimitry Andricdef : Pat<(loongarch_vshuf4i v32i8:$xj, immZExt8:$ui8), 16800fca6ea1SDimitry Andric (XVSHUF4I_B v32i8:$xj, immZExt8:$ui8)>; 16810fca6ea1SDimitry Andricdef : Pat<(loongarch_vshuf4i v16i16:$xj, immZExt8:$ui8), 16820fca6ea1SDimitry Andric (XVSHUF4I_H v16i16:$xj, immZExt8:$ui8)>; 16830fca6ea1SDimitry Andricdef : Pat<(loongarch_vshuf4i v8i32:$xj, immZExt8:$ui8), 16840fca6ea1SDimitry Andric (XVSHUF4I_W v8i32:$xj, immZExt8:$ui8)>; 16850fca6ea1SDimitry Andricdef : Pat<(loongarch_vshuf4i v8f32:$xj, immZExt8:$ui8), 16860fca6ea1SDimitry Andric (XVSHUF4I_W v8f32:$xj, immZExt8:$ui8)>; 16870fca6ea1SDimitry Andric 16880fca6ea1SDimitry Andric// XVREPL128VEI_{B/H/W/D} 16890fca6ea1SDimitry Andricdef : Pat<(loongarch_vreplvei v32i8:$xj, immZExt4:$ui4), 16900fca6ea1SDimitry Andric (XVREPL128VEI_B v32i8:$xj, immZExt4:$ui4)>; 16910fca6ea1SDimitry Andricdef : Pat<(loongarch_vreplvei v16i16:$xj, immZExt3:$ui3), 16920fca6ea1SDimitry Andric (XVREPL128VEI_H v16i16:$xj, immZExt3:$ui3)>; 16930fca6ea1SDimitry Andricdef : Pat<(loongarch_vreplvei v8i32:$xj, immZExt2:$ui2), 16940fca6ea1SDimitry Andric (XVREPL128VEI_W v8i32:$xj, immZExt2:$ui2)>; 16950fca6ea1SDimitry Andricdef : Pat<(loongarch_vreplvei v4i64:$xj, immZExt1:$ui1), 16960fca6ea1SDimitry Andric (XVREPL128VEI_D v4i64:$xj, immZExt1:$ui1)>; 16970fca6ea1SDimitry Andricdef : Pat<(loongarch_vreplvei v8f32:$xj, immZExt2:$ui2), 16980fca6ea1SDimitry Andric (XVREPL128VEI_W v8f32:$xj, immZExt2:$ui2)>; 16990fca6ea1SDimitry Andricdef : Pat<(loongarch_vreplvei v4f64:$xj, immZExt1:$ui1), 17000fca6ea1SDimitry Andric (XVREPL128VEI_D v4f64:$xj, immZExt1:$ui1)>; 17010fca6ea1SDimitry Andric 17020fca6ea1SDimitry Andric// XVPERMI_D 17030fca6ea1SDimitry Andricdef : Pat<(loongarch_xvpermi v4i64:$xj, immZExt8: $ui8), 17040fca6ea1SDimitry Andric (XVPERMI_D v4i64:$xj, immZExt8: $ui8)>; 17050fca6ea1SDimitry Andricdef : Pat<(loongarch_xvpermi v4f64:$xj, immZExt8: $ui8), 17060fca6ea1SDimitry Andric (XVPERMI_D v4f64:$xj, immZExt8: $ui8)>; 17070fca6ea1SDimitry Andric 1708647cbc5dSDimitry Andric// XVREPLVE0_{W/D} 17095f757f3fSDimitry Andricdef : Pat<(lasxsplatf32 FPR32:$fj), 1710647cbc5dSDimitry Andric (XVREPLVE0_W (SUBREG_TO_REG (i64 0), FPR32:$fj, sub_32))>; 17115f757f3fSDimitry Andricdef : Pat<(lasxsplatf64 FPR64:$fj), 1712647cbc5dSDimitry Andric (XVREPLVE0_D (SUBREG_TO_REG (i64 0), FPR64:$fj, sub_64))>; 17135f757f3fSDimitry Andric 17145f757f3fSDimitry Andric// Loads/Stores 17155f757f3fSDimitry Andricforeach vt = [v32i8, v16i16, v8i32, v4i64, v8f32, v4f64] in { 17165f757f3fSDimitry Andric defm : LdPat<load, XVLD, vt>; 17175f757f3fSDimitry Andric def : RegRegLdPat<load, XVLDX, vt>; 17185f757f3fSDimitry Andric defm : StPat<store, XVST, LASX256, vt>; 17195f757f3fSDimitry Andric def : RegRegStPat<store, XVSTX, LASX256, vt>; 17205f757f3fSDimitry Andric} 17215f757f3fSDimitry Andric 17225f757f3fSDimitry Andric// Vector extraction with constant index. 17235f757f3fSDimitry Andricdef : Pat<(i64 (vector_extract v32i8:$xj, uimm4:$imm)), 17245f757f3fSDimitry Andric (VPICKVE2GR_B (EXTRACT_SUBREG v32i8:$xj, sub_128), uimm4:$imm)>; 17255f757f3fSDimitry Andricdef : Pat<(i64 (vector_extract v16i16:$xj, uimm3:$imm)), 17265f757f3fSDimitry Andric (VPICKVE2GR_H (EXTRACT_SUBREG v16i16:$xj, sub_128), uimm3:$imm)>; 1727647cbc5dSDimitry Andricdef : Pat<(i64 (vector_extract v8i32:$xj, uimm3:$imm)), 1728647cbc5dSDimitry Andric (XVPICKVE2GR_W v8i32:$xj, uimm3:$imm)>; 1729647cbc5dSDimitry Andricdef : Pat<(i64 (vector_extract v4i64:$xj, uimm2:$imm)), 1730647cbc5dSDimitry Andric (XVPICKVE2GR_D v4i64:$xj, uimm2:$imm)>; 1731647cbc5dSDimitry Andricdef : Pat<(f32 (vector_extract v8f32:$xj, uimm3:$imm)), 1732647cbc5dSDimitry Andric (MOVGR2FR_W (XVPICKVE2GR_W v8f32:$xj, uimm3:$imm))>; 1733647cbc5dSDimitry Andricdef : Pat<(f64 (vector_extract v4f64:$xj, uimm2:$imm)), 1734647cbc5dSDimitry Andric (MOVGR2FR_D (XVPICKVE2GR_D v4f64:$xj, uimm2:$imm))>; 17355f757f3fSDimitry Andric 17365f757f3fSDimitry Andric// vselect 1737647cbc5dSDimitry Andricdef : Pat<(v32i8 (vselect LASX256:$xd, (v32i8 (SplatPat_uimm8 uimm8:$imm)), 1738647cbc5dSDimitry Andric LASX256:$xj)), 17395f757f3fSDimitry Andric (XVBITSELI_B LASX256:$xd, LASX256:$xj, uimm8:$imm)>; 17405f757f3fSDimitry Andricforeach vt = [v32i8, v16i16, v8i32, v4i64, v8f32, v4f64] in 17415f757f3fSDimitry Andric def : Pat<(vt (vselect LASX256:$xa, LASX256:$xk, LASX256:$xj)), 17425f757f3fSDimitry Andric (XVBITSEL_V LASX256:$xj, LASX256:$xk, LASX256:$xa)>; 17435f757f3fSDimitry Andric 17445f757f3fSDimitry Andric// fneg 17455f757f3fSDimitry Andricdef : Pat<(fneg (v8f32 LASX256:$xj)), (XVBITREVI_W LASX256:$xj, 31)>; 17465f757f3fSDimitry Andricdef : Pat<(fneg (v4f64 LASX256:$xj)), (XVBITREVI_D LASX256:$xj, 63)>; 17475f757f3fSDimitry Andric 17487a6dacacSDimitry Andric// XVFFINT_{S_W/D_L} 17497a6dacacSDimitry Andricdef : Pat<(v8f32 (sint_to_fp v8i32:$vj)), (XVFFINT_S_W v8i32:$vj)>; 17507a6dacacSDimitry Andricdef : Pat<(v4f64 (sint_to_fp v4i64:$vj)), (XVFFINT_D_L v4i64:$vj)>; 17517a6dacacSDimitry Andricdef : Pat<(v4f64 (sint_to_fp v4i32:$vj)), 17527a6dacacSDimitry Andric (XVFFINT_D_L (VEXT2XV_D_W (SUBREG_TO_REG (i64 0), v4i32:$vj, 17537a6dacacSDimitry Andric sub_128)))>; 17547a6dacacSDimitry Andricdef : Pat<(v4f32 (sint_to_fp v4i64:$vj)), 17557a6dacacSDimitry Andric (EXTRACT_SUBREG (XVFCVT_S_D (XVPERMI_D (XVFFINT_D_L v4i64:$vj), 238), 17567a6dacacSDimitry Andric (XVFFINT_D_L v4i64:$vj)), 17577a6dacacSDimitry Andric sub_128)>; 17587a6dacacSDimitry Andric 17597a6dacacSDimitry Andric// XVFFINT_{S_WU/D_LU} 17607a6dacacSDimitry Andricdef : Pat<(v8f32 (uint_to_fp v8i32:$vj)), (XVFFINT_S_WU v8i32:$vj)>; 17617a6dacacSDimitry Andricdef : Pat<(v4f64 (uint_to_fp v4i64:$vj)), (XVFFINT_D_LU v4i64:$vj)>; 17627a6dacacSDimitry Andricdef : Pat<(v4f64 (uint_to_fp v4i32:$vj)), 17637a6dacacSDimitry Andric (XVFFINT_D_LU (VEXT2XV_DU_WU (SUBREG_TO_REG (i64 0), v4i32:$vj, 17647a6dacacSDimitry Andric sub_128)))>; 17657a6dacacSDimitry Andricdef : Pat<(v4f32 (uint_to_fp v4i64:$vj)), 17667a6dacacSDimitry Andric (EXTRACT_SUBREG (XVFCVT_S_D (XVPERMI_D (XVFFINT_D_LU v4i64:$vj), 238), 17677a6dacacSDimitry Andric (XVFFINT_D_LU v4i64:$vj)), 17687a6dacacSDimitry Andric sub_128)>; 17697a6dacacSDimitry Andric 17707a6dacacSDimitry Andric// XVFTINTRZ_{W_S/L_D} 17717a6dacacSDimitry Andricdef : Pat<(v8i32 (fp_to_sint v8f32:$vj)), (XVFTINTRZ_W_S v8f32:$vj)>; 17727a6dacacSDimitry Andricdef : Pat<(v4i64 (fp_to_sint v4f64:$vj)), (XVFTINTRZ_L_D v4f64:$vj)>; 17737a6dacacSDimitry Andricdef : Pat<(v4i64 (fp_to_sint v4f32:$vj)), 17747a6dacacSDimitry Andric (VEXT2XV_D_W (SUBREG_TO_REG (i64 0), (VFTINTRZ_W_S v4f32:$vj), 17757a6dacacSDimitry Andric sub_128))>; 17767a6dacacSDimitry Andricdef : Pat<(v4i32 (fp_to_sint (v4f64 LASX256:$vj))), 17777a6dacacSDimitry Andric (EXTRACT_SUBREG (XVFTINTRZ_W_S (XVFCVT_S_D (XVPERMI_D v4f64:$vj, 238), 17787a6dacacSDimitry Andric v4f64:$vj)), 17797a6dacacSDimitry Andric sub_128)>; 17807a6dacacSDimitry Andric 17817a6dacacSDimitry Andric// XVFTINTRZ_{W_SU/L_DU} 17827a6dacacSDimitry Andricdef : Pat<(v8i32 (fp_to_uint v8f32:$vj)), (XVFTINTRZ_WU_S v8f32:$vj)>; 17837a6dacacSDimitry Andricdef : Pat<(v4i64 (fp_to_uint v4f64:$vj)), (XVFTINTRZ_LU_D v4f64:$vj)>; 17847a6dacacSDimitry Andricdef : Pat<(v4i64 (fp_to_uint v4f32:$vj)), 17857a6dacacSDimitry Andric (VEXT2XV_DU_WU (SUBREG_TO_REG (i64 0), (VFTINTRZ_WU_S v4f32:$vj), 17867a6dacacSDimitry Andric sub_128))>; 17877a6dacacSDimitry Andricdef : Pat<(v4i32 (fp_to_uint (v4f64 LASX256:$vj))), 17887a6dacacSDimitry Andric (EXTRACT_SUBREG (XVFTINTRZ_W_S (XVFCVT_S_D (XVPERMI_D v4f64:$vj, 238), 17897a6dacacSDimitry Andric v4f64:$vj)), 17907a6dacacSDimitry Andric sub_128)>; 17917a6dacacSDimitry Andric 1792*6e516c87SDimitry Andric// XVPERMI_Q 1793*6e516c87SDimitry Andricforeach vt = [v32i8, v16i16, v8i32, v4i64, v8f32, v4f64] in 1794*6e516c87SDimitry Andricdef : Pat<(vt (concat_vectors LSX128:$vd, LSX128:$vj)), 1795*6e516c87SDimitry Andric (XVPERMI_Q (SUBREG_TO_REG (i64 0), LSX128:$vd, sub_128), 1796*6e516c87SDimitry Andric (SUBREG_TO_REG (i64 0), LSX128:$vj, sub_128), 2)>; 1797*6e516c87SDimitry Andric 17985f757f3fSDimitry Andric} // Predicates = [HasExtLASX] 17995f757f3fSDimitry Andric 18005f757f3fSDimitry Andric/// Intrinsic pattern 18015f757f3fSDimitry Andric 18025f757f3fSDimitry Andricclass deriveLASXIntrinsic<string Inst> { 18035f757f3fSDimitry Andric Intrinsic ret = !cast<Intrinsic>(!tolower("int_loongarch_lasx_"#Inst)); 18045f757f3fSDimitry Andric} 18055f757f3fSDimitry Andric 18065f757f3fSDimitry Andriclet Predicates = [HasExtLASX] in { 18075f757f3fSDimitry Andric 18085f757f3fSDimitry Andric// vty: v32i8/v16i16/v8i32/v4i64 18095f757f3fSDimitry Andric// Pat<(Intrinsic vty:$xj, vty:$xk), 18105f757f3fSDimitry Andric// (LAInst vty:$xj, vty:$xk)>; 18115f757f3fSDimitry Andricforeach Inst = ["XVSADD_B", "XVSADD_BU", "XVSSUB_B", "XVSSUB_BU", 18125f757f3fSDimitry Andric "XVHADDW_H_B", "XVHADDW_HU_BU", "XVHSUBW_H_B", "XVHSUBW_HU_BU", 18135f757f3fSDimitry Andric "XVADDWEV_H_B", "XVADDWOD_H_B", "XVSUBWEV_H_B", "XVSUBWOD_H_B", 18145f757f3fSDimitry Andric "XVADDWEV_H_BU", "XVADDWOD_H_BU", "XVSUBWEV_H_BU", "XVSUBWOD_H_BU", 18155f757f3fSDimitry Andric "XVADDWEV_H_BU_B", "XVADDWOD_H_BU_B", 18165f757f3fSDimitry Andric "XVAVG_B", "XVAVG_BU", "XVAVGR_B", "XVAVGR_BU", 18175f757f3fSDimitry Andric "XVABSD_B", "XVABSD_BU", "XVADDA_B", "XVMUH_B", "XVMUH_BU", 18185f757f3fSDimitry Andric "XVMULWEV_H_B", "XVMULWOD_H_B", "XVMULWEV_H_BU", "XVMULWOD_H_BU", 18195f757f3fSDimitry Andric "XVMULWEV_H_BU_B", "XVMULWOD_H_BU_B", "XVSIGNCOV_B", 18205f757f3fSDimitry Andric "XVANDN_V", "XVORN_V", "XVROTR_B", "XVSRLR_B", "XVSRAR_B", 18215f757f3fSDimitry Andric "XVSEQ_B", "XVSLE_B", "XVSLE_BU", "XVSLT_B", "XVSLT_BU", 18225f757f3fSDimitry Andric "XVPACKEV_B", "XVPACKOD_B", "XVPICKEV_B", "XVPICKOD_B", 18235f757f3fSDimitry Andric "XVILVL_B", "XVILVH_B"] in 18245f757f3fSDimitry Andric def : Pat<(deriveLASXIntrinsic<Inst>.ret 18255f757f3fSDimitry Andric (v32i8 LASX256:$xj), (v32i8 LASX256:$xk)), 18265f757f3fSDimitry Andric (!cast<LAInst>(Inst) LASX256:$xj, LASX256:$xk)>; 18275f757f3fSDimitry Andricforeach Inst = ["XVSADD_H", "XVSADD_HU", "XVSSUB_H", "XVSSUB_HU", 18285f757f3fSDimitry Andric "XVHADDW_W_H", "XVHADDW_WU_HU", "XVHSUBW_W_H", "XVHSUBW_WU_HU", 18295f757f3fSDimitry Andric "XVADDWEV_W_H", "XVADDWOD_W_H", "XVSUBWEV_W_H", "XVSUBWOD_W_H", 18305f757f3fSDimitry Andric "XVADDWEV_W_HU", "XVADDWOD_W_HU", "XVSUBWEV_W_HU", "XVSUBWOD_W_HU", 18315f757f3fSDimitry Andric "XVADDWEV_W_HU_H", "XVADDWOD_W_HU_H", 18325f757f3fSDimitry Andric "XVAVG_H", "XVAVG_HU", "XVAVGR_H", "XVAVGR_HU", 18335f757f3fSDimitry Andric "XVABSD_H", "XVABSD_HU", "XVADDA_H", "XVMUH_H", "XVMUH_HU", 18345f757f3fSDimitry Andric "XVMULWEV_W_H", "XVMULWOD_W_H", "XVMULWEV_W_HU", "XVMULWOD_W_HU", 18355f757f3fSDimitry Andric "XVMULWEV_W_HU_H", "XVMULWOD_W_HU_H", "XVSIGNCOV_H", "XVROTR_H", 18365f757f3fSDimitry Andric "XVSRLR_H", "XVSRAR_H", "XVSRLN_B_H", "XVSRAN_B_H", "XVSRLRN_B_H", 18375f757f3fSDimitry Andric "XVSRARN_B_H", "XVSSRLN_B_H", "XVSSRAN_B_H", "XVSSRLN_BU_H", 18385f757f3fSDimitry Andric "XVSSRAN_BU_H", "XVSSRLRN_B_H", "XVSSRARN_B_H", "XVSSRLRN_BU_H", 18395f757f3fSDimitry Andric "XVSSRARN_BU_H", 18405f757f3fSDimitry Andric "XVSEQ_H", "XVSLE_H", "XVSLE_HU", "XVSLT_H", "XVSLT_HU", 18415f757f3fSDimitry Andric "XVPACKEV_H", "XVPACKOD_H", "XVPICKEV_H", "XVPICKOD_H", 18425f757f3fSDimitry Andric "XVILVL_H", "XVILVH_H"] in 18435f757f3fSDimitry Andric def : Pat<(deriveLASXIntrinsic<Inst>.ret 18445f757f3fSDimitry Andric (v16i16 LASX256:$xj), (v16i16 LASX256:$xk)), 18455f757f3fSDimitry Andric (!cast<LAInst>(Inst) LASX256:$xj, LASX256:$xk)>; 18465f757f3fSDimitry Andricforeach Inst = ["XVSADD_W", "XVSADD_WU", "XVSSUB_W", "XVSSUB_WU", 18475f757f3fSDimitry Andric "XVHADDW_D_W", "XVHADDW_DU_WU", "XVHSUBW_D_W", "XVHSUBW_DU_WU", 18485f757f3fSDimitry Andric "XVADDWEV_D_W", "XVADDWOD_D_W", "XVSUBWEV_D_W", "XVSUBWOD_D_W", 18495f757f3fSDimitry Andric "XVADDWEV_D_WU", "XVADDWOD_D_WU", "XVSUBWEV_D_WU", "XVSUBWOD_D_WU", 18505f757f3fSDimitry Andric "XVADDWEV_D_WU_W", "XVADDWOD_D_WU_W", 18515f757f3fSDimitry Andric "XVAVG_W", "XVAVG_WU", "XVAVGR_W", "XVAVGR_WU", 18525f757f3fSDimitry Andric "XVABSD_W", "XVABSD_WU", "XVADDA_W", "XVMUH_W", "XVMUH_WU", 18535f757f3fSDimitry Andric "XVMULWEV_D_W", "XVMULWOD_D_W", "XVMULWEV_D_WU", "XVMULWOD_D_WU", 18545f757f3fSDimitry Andric "XVMULWEV_D_WU_W", "XVMULWOD_D_WU_W", "XVSIGNCOV_W", "XVROTR_W", 18555f757f3fSDimitry Andric "XVSRLR_W", "XVSRAR_W", "XVSRLN_H_W", "XVSRAN_H_W", "XVSRLRN_H_W", 18565f757f3fSDimitry Andric "XVSRARN_H_W", "XVSSRLN_H_W", "XVSSRAN_H_W", "XVSSRLN_HU_W", 18575f757f3fSDimitry Andric "XVSSRAN_HU_W", "XVSSRLRN_H_W", "XVSSRARN_H_W", "XVSSRLRN_HU_W", 18585f757f3fSDimitry Andric "XVSSRARN_HU_W", 18595f757f3fSDimitry Andric "XVSEQ_W", "XVSLE_W", "XVSLE_WU", "XVSLT_W", "XVSLT_WU", 18605f757f3fSDimitry Andric "XVPACKEV_W", "XVPACKOD_W", "XVPICKEV_W", "XVPICKOD_W", 18615f757f3fSDimitry Andric "XVILVL_W", "XVILVH_W", "XVPERM_W"] in 18625f757f3fSDimitry Andric def : Pat<(deriveLASXIntrinsic<Inst>.ret 18635f757f3fSDimitry Andric (v8i32 LASX256:$xj), (v8i32 LASX256:$xk)), 18645f757f3fSDimitry Andric (!cast<LAInst>(Inst) LASX256:$xj, LASX256:$xk)>; 18655f757f3fSDimitry Andricforeach Inst = ["XVADD_Q", "XVSUB_Q", 18665f757f3fSDimitry Andric "XVSADD_D", "XVSADD_DU", "XVSSUB_D", "XVSSUB_DU", 18675f757f3fSDimitry Andric "XVHADDW_Q_D", "XVHADDW_QU_DU", "XVHSUBW_Q_D", "XVHSUBW_QU_DU", 18685f757f3fSDimitry Andric "XVADDWEV_Q_D", "XVADDWOD_Q_D", "XVSUBWEV_Q_D", "XVSUBWOD_Q_D", 18695f757f3fSDimitry Andric "XVADDWEV_Q_DU", "XVADDWOD_Q_DU", "XVSUBWEV_Q_DU", "XVSUBWOD_Q_DU", 18705f757f3fSDimitry Andric "XVADDWEV_Q_DU_D", "XVADDWOD_Q_DU_D", 18715f757f3fSDimitry Andric "XVAVG_D", "XVAVG_DU", "XVAVGR_D", "XVAVGR_DU", 18725f757f3fSDimitry Andric "XVABSD_D", "XVABSD_DU", "XVADDA_D", "XVMUH_D", "XVMUH_DU", 18735f757f3fSDimitry Andric "XVMULWEV_Q_D", "XVMULWOD_Q_D", "XVMULWEV_Q_DU", "XVMULWOD_Q_DU", 18745f757f3fSDimitry Andric "XVMULWEV_Q_DU_D", "XVMULWOD_Q_DU_D", "XVSIGNCOV_D", "XVROTR_D", 18755f757f3fSDimitry Andric "XVSRLR_D", "XVSRAR_D", "XVSRLN_W_D", "XVSRAN_W_D", "XVSRLRN_W_D", 18765f757f3fSDimitry Andric "XVSRARN_W_D", "XVSSRLN_W_D", "XVSSRAN_W_D", "XVSSRLN_WU_D", 18775f757f3fSDimitry Andric "XVSSRAN_WU_D", "XVSSRLRN_W_D", "XVSSRARN_W_D", "XVSSRLRN_WU_D", 18785f757f3fSDimitry Andric "XVSSRARN_WU_D", "XVFFINT_S_L", 18795f757f3fSDimitry Andric "XVSEQ_D", "XVSLE_D", "XVSLE_DU", "XVSLT_D", "XVSLT_DU", 18805f757f3fSDimitry Andric "XVPACKEV_D", "XVPACKOD_D", "XVPICKEV_D", "XVPICKOD_D", 18815f757f3fSDimitry Andric "XVILVL_D", "XVILVH_D"] in 18825f757f3fSDimitry Andric def : Pat<(deriveLASXIntrinsic<Inst>.ret 18835f757f3fSDimitry Andric (v4i64 LASX256:$xj), (v4i64 LASX256:$xk)), 18845f757f3fSDimitry Andric (!cast<LAInst>(Inst) LASX256:$xj, LASX256:$xk)>; 18855f757f3fSDimitry Andric 18865f757f3fSDimitry Andric// vty: v32i8/v16i16/v8i32/v4i64 18875f757f3fSDimitry Andric// Pat<(Intrinsic vty:$xd, vty:$xj, vty:$xk), 18885f757f3fSDimitry Andric// (LAInst vty:$xd, vty:$xj, vty:$xk)>; 18895f757f3fSDimitry Andricforeach Inst = ["XVMADDWEV_H_B", "XVMADDWOD_H_B", "XVMADDWEV_H_BU", 18905f757f3fSDimitry Andric "XVMADDWOD_H_BU", "XVMADDWEV_H_BU_B", "XVMADDWOD_H_BU_B"] in 18915f757f3fSDimitry Andric def : Pat<(deriveLASXIntrinsic<Inst>.ret 18925f757f3fSDimitry Andric (v16i16 LASX256:$xd), (v32i8 LASX256:$xj), (v32i8 LASX256:$xk)), 18935f757f3fSDimitry Andric (!cast<LAInst>(Inst) LASX256:$xd, LASX256:$xj, LASX256:$xk)>; 18945f757f3fSDimitry Andricforeach Inst = ["XVMADDWEV_W_H", "XVMADDWOD_W_H", "XVMADDWEV_W_HU", 18955f757f3fSDimitry Andric "XVMADDWOD_W_HU", "XVMADDWEV_W_HU_H", "XVMADDWOD_W_HU_H"] in 18965f757f3fSDimitry Andric def : Pat<(deriveLASXIntrinsic<Inst>.ret 18975f757f3fSDimitry Andric (v8i32 LASX256:$xd), (v16i16 LASX256:$xj), (v16i16 LASX256:$xk)), 18985f757f3fSDimitry Andric (!cast<LAInst>(Inst) LASX256:$xd, LASX256:$xj, LASX256:$xk)>; 18995f757f3fSDimitry Andricforeach Inst = ["XVMADDWEV_D_W", "XVMADDWOD_D_W", "XVMADDWEV_D_WU", 19005f757f3fSDimitry Andric "XVMADDWOD_D_WU", "XVMADDWEV_D_WU_W", "XVMADDWOD_D_WU_W"] in 19015f757f3fSDimitry Andric def : Pat<(deriveLASXIntrinsic<Inst>.ret 19025f757f3fSDimitry Andric (v4i64 LASX256:$xd), (v8i32 LASX256:$xj), (v8i32 LASX256:$xk)), 19035f757f3fSDimitry Andric (!cast<LAInst>(Inst) LASX256:$xd, LASX256:$xj, LASX256:$xk)>; 19045f757f3fSDimitry Andricforeach Inst = ["XVMADDWEV_Q_D", "XVMADDWOD_Q_D", "XVMADDWEV_Q_DU", 19055f757f3fSDimitry Andric "XVMADDWOD_Q_DU", "XVMADDWEV_Q_DU_D", "XVMADDWOD_Q_DU_D"] in 19065f757f3fSDimitry Andric def : Pat<(deriveLASXIntrinsic<Inst>.ret 19075f757f3fSDimitry Andric (v4i64 LASX256:$xd), (v4i64 LASX256:$xj), (v4i64 LASX256:$xk)), 19085f757f3fSDimitry Andric (!cast<LAInst>(Inst) LASX256:$xd, LASX256:$xj, LASX256:$xk)>; 19095f757f3fSDimitry Andric 19105f757f3fSDimitry Andric// vty: v32i8/v16i16/v8i32/v4i64 19115f757f3fSDimitry Andric// Pat<(Intrinsic vty:$xj), 19125f757f3fSDimitry Andric// (LAInst vty:$xj)>; 19135f757f3fSDimitry Andricforeach Inst = ["XVEXTH_H_B", "XVEXTH_HU_BU", 19145f757f3fSDimitry Andric "XVMSKLTZ_B", "XVMSKGEZ_B", "XVMSKNZ_B", 19155f757f3fSDimitry Andric "XVCLO_B", "VEXT2XV_H_B", "VEXT2XV_HU_BU", 19165f757f3fSDimitry Andric "VEXT2XV_W_B", "VEXT2XV_WU_BU", "VEXT2XV_D_B", 19175f757f3fSDimitry Andric "VEXT2XV_DU_BU", "XVREPLVE0_B", "XVREPLVE0_Q"] in 19185f757f3fSDimitry Andric def : Pat<(deriveLASXIntrinsic<Inst>.ret (v32i8 LASX256:$xj)), 19195f757f3fSDimitry Andric (!cast<LAInst>(Inst) LASX256:$xj)>; 19205f757f3fSDimitry Andricforeach Inst = ["XVEXTH_W_H", "XVEXTH_WU_HU", "XVMSKLTZ_H", 19215f757f3fSDimitry Andric "XVCLO_H", "XVFCVTL_S_H", "XVFCVTH_S_H", 19225f757f3fSDimitry Andric "VEXT2XV_W_H", "VEXT2XV_WU_HU", "VEXT2XV_D_H", 19235f757f3fSDimitry Andric "VEXT2XV_DU_HU", "XVREPLVE0_H"] in 19245f757f3fSDimitry Andric def : Pat<(deriveLASXIntrinsic<Inst>.ret (v16i16 LASX256:$xj)), 19255f757f3fSDimitry Andric (!cast<LAInst>(Inst) LASX256:$xj)>; 19265f757f3fSDimitry Andricforeach Inst = ["XVEXTH_D_W", "XVEXTH_DU_WU", "XVMSKLTZ_W", 19275f757f3fSDimitry Andric "XVCLO_W", "XVFFINT_S_W", "XVFFINT_S_WU", 19285f757f3fSDimitry Andric "XVFFINTL_D_W", "XVFFINTH_D_W", 19295f757f3fSDimitry Andric "VEXT2XV_D_W", "VEXT2XV_DU_WU", "XVREPLVE0_W"] in 19305f757f3fSDimitry Andric def : Pat<(deriveLASXIntrinsic<Inst>.ret (v8i32 LASX256:$xj)), 19315f757f3fSDimitry Andric (!cast<LAInst>(Inst) LASX256:$xj)>; 19325f757f3fSDimitry Andricforeach Inst = ["XVEXTH_Q_D", "XVEXTH_QU_DU", "XVMSKLTZ_D", 19335f757f3fSDimitry Andric "XVEXTL_Q_D", "XVEXTL_QU_DU", 19345f757f3fSDimitry Andric "XVCLO_D", "XVFFINT_D_L", "XVFFINT_D_LU", 19355f757f3fSDimitry Andric "XVREPLVE0_D"] in 19365f757f3fSDimitry Andric def : Pat<(deriveLASXIntrinsic<Inst>.ret (v4i64 LASX256:$xj)), 19375f757f3fSDimitry Andric (!cast<LAInst>(Inst) LASX256:$xj)>; 19385f757f3fSDimitry Andric 19395f757f3fSDimitry Andric// Pat<(Intrinsic timm:$imm) 19405f757f3fSDimitry Andric// (LAInst timm:$imm)>; 19415f757f3fSDimitry Andricdef : Pat<(int_loongarch_lasx_xvldi timm:$imm), 19425f757f3fSDimitry Andric (XVLDI (to_valid_timm timm:$imm))>; 19435f757f3fSDimitry Andricforeach Inst = ["XVREPLI_B", "XVREPLI_H", "XVREPLI_W", "XVREPLI_D"] in 19445f757f3fSDimitry Andric def : Pat<(deriveLASXIntrinsic<Inst>.ret timm:$imm), 19455f757f3fSDimitry Andric (!cast<LAInst>("Pseudo"#Inst) (to_valid_timm timm:$imm))>; 19465f757f3fSDimitry Andric 19475f757f3fSDimitry Andric// vty: v32i8/v16i16/v8i32/v4i64 19485f757f3fSDimitry Andric// Pat<(Intrinsic vty:$xj, timm:$imm) 19495f757f3fSDimitry Andric// (LAInst vty:$xj, timm:$imm)>; 19505f757f3fSDimitry Andricforeach Inst = ["XVSAT_B", "XVSAT_BU", "XVNORI_B", "XVROTRI_B", "XVSLLWIL_H_B", 19515f757f3fSDimitry Andric "XVSLLWIL_HU_BU", "XVSRLRI_B", "XVSRARI_B", 19525f757f3fSDimitry Andric "XVSEQI_B", "XVSLEI_B", "XVSLEI_BU", "XVSLTI_B", "XVSLTI_BU", 19535f757f3fSDimitry Andric "XVREPL128VEI_B", "XVBSLL_V", "XVBSRL_V", "XVSHUF4I_B"] in 19545f757f3fSDimitry Andric def : Pat<(deriveLASXIntrinsic<Inst>.ret (v32i8 LASX256:$xj), timm:$imm), 19555f757f3fSDimitry Andric (!cast<LAInst>(Inst) LASX256:$xj, (to_valid_timm timm:$imm))>; 19565f757f3fSDimitry Andricforeach Inst = ["XVSAT_H", "XVSAT_HU", "XVROTRI_H", "XVSLLWIL_W_H", 19575f757f3fSDimitry Andric "XVSLLWIL_WU_HU", "XVSRLRI_H", "XVSRARI_H", 19585f757f3fSDimitry Andric "XVSEQI_H", "XVSLEI_H", "XVSLEI_HU", "XVSLTI_H", "XVSLTI_HU", 19595f757f3fSDimitry Andric "XVREPL128VEI_H", "XVSHUF4I_H"] in 19605f757f3fSDimitry Andric def : Pat<(deriveLASXIntrinsic<Inst>.ret (v16i16 LASX256:$xj), timm:$imm), 19615f757f3fSDimitry Andric (!cast<LAInst>(Inst) LASX256:$xj, (to_valid_timm timm:$imm))>; 19625f757f3fSDimitry Andricforeach Inst = ["XVSAT_W", "XVSAT_WU", "XVROTRI_W", "XVSLLWIL_D_W", 19635f757f3fSDimitry Andric "XVSLLWIL_DU_WU", "XVSRLRI_W", "XVSRARI_W", 19645f757f3fSDimitry Andric "XVSEQI_W", "XVSLEI_W", "XVSLEI_WU", "XVSLTI_W", "XVSLTI_WU", 19655f757f3fSDimitry Andric "XVREPL128VEI_W", "XVSHUF4I_W", "XVPICKVE_W"] in 19665f757f3fSDimitry Andric def : Pat<(deriveLASXIntrinsic<Inst>.ret (v8i32 LASX256:$xj), timm:$imm), 19675f757f3fSDimitry Andric (!cast<LAInst>(Inst) LASX256:$xj, (to_valid_timm timm:$imm))>; 19685f757f3fSDimitry Andricforeach Inst = ["XVSAT_D", "XVSAT_DU", "XVROTRI_D", "XVSRLRI_D", "XVSRARI_D", 19695f757f3fSDimitry Andric "XVSEQI_D", "XVSLEI_D", "XVSLEI_DU", "XVSLTI_D", "XVSLTI_DU", 19705f757f3fSDimitry Andric "XVPICKVE2GR_D", "XVPICKVE2GR_DU", 19715f757f3fSDimitry Andric "XVREPL128VEI_D", "XVPERMI_D", "XVPICKVE_D"] in 19725f757f3fSDimitry Andric def : Pat<(deriveLASXIntrinsic<Inst>.ret (v4i64 LASX256:$xj), timm:$imm), 19735f757f3fSDimitry Andric (!cast<LAInst>(Inst) LASX256:$xj, (to_valid_timm timm:$imm))>; 19745f757f3fSDimitry Andric 19755f757f3fSDimitry Andric// vty: v32i8/v16i16/v8i32/v4i64 19765f757f3fSDimitry Andric// Pat<(Intrinsic vty:$xd, vty:$xj, timm:$imm) 19775f757f3fSDimitry Andric// (LAInst vty:$xd, vty:$xj, timm:$imm)>; 19785f757f3fSDimitry Andricforeach Inst = ["XVSRLNI_B_H", "XVSRANI_B_H", "XVSRLRNI_B_H", "XVSRARNI_B_H", 19795f757f3fSDimitry Andric "XVSSRLNI_B_H", "XVSSRANI_B_H", "XVSSRLNI_BU_H", "XVSSRANI_BU_H", 19805f757f3fSDimitry Andric "XVSSRLRNI_B_H", "XVSSRARNI_B_H", "XVSSRLRNI_BU_H", "XVSSRARNI_BU_H", 19815f757f3fSDimitry Andric "XVFRSTPI_B", "XVBITSELI_B", "XVEXTRINS_B", "XVPERMI_Q"] in 19825f757f3fSDimitry Andric def : Pat<(deriveLASXIntrinsic<Inst>.ret 19835f757f3fSDimitry Andric (v32i8 LASX256:$xd), (v32i8 LASX256:$xj), timm:$imm), 19845f757f3fSDimitry Andric (!cast<LAInst>(Inst) LASX256:$xd, LASX256:$xj, 19855f757f3fSDimitry Andric (to_valid_timm timm:$imm))>; 19865f757f3fSDimitry Andricforeach Inst = ["XVSRLNI_H_W", "XVSRANI_H_W", "XVSRLRNI_H_W", "XVSRARNI_H_W", 19875f757f3fSDimitry Andric "XVSSRLNI_H_W", "XVSSRANI_H_W", "XVSSRLNI_HU_W", "XVSSRANI_HU_W", 19885f757f3fSDimitry Andric "XVSSRLRNI_H_W", "XVSSRARNI_H_W", "XVSSRLRNI_HU_W", "XVSSRARNI_HU_W", 19895f757f3fSDimitry Andric "XVFRSTPI_H", "XVEXTRINS_H"] in 19905f757f3fSDimitry Andric def : Pat<(deriveLASXIntrinsic<Inst>.ret 19915f757f3fSDimitry Andric (v16i16 LASX256:$xd), (v16i16 LASX256:$xj), timm:$imm), 19925f757f3fSDimitry Andric (!cast<LAInst>(Inst) LASX256:$xd, LASX256:$xj, 19935f757f3fSDimitry Andric (to_valid_timm timm:$imm))>; 19945f757f3fSDimitry Andricforeach Inst = ["XVSRLNI_W_D", "XVSRANI_W_D", "XVSRLRNI_W_D", "XVSRARNI_W_D", 19955f757f3fSDimitry Andric "XVSSRLNI_W_D", "XVSSRANI_W_D", "XVSSRLNI_WU_D", "XVSSRANI_WU_D", 19965f757f3fSDimitry Andric "XVSSRLRNI_W_D", "XVSSRARNI_W_D", "XVSSRLRNI_WU_D", "XVSSRARNI_WU_D", 19975f757f3fSDimitry Andric "XVPERMI_W", "XVEXTRINS_W", "XVINSVE0_W"] in 19985f757f3fSDimitry Andric def : Pat<(deriveLASXIntrinsic<Inst>.ret 19995f757f3fSDimitry Andric (v8i32 LASX256:$xd), (v8i32 LASX256:$xj), timm:$imm), 20005f757f3fSDimitry Andric (!cast<LAInst>(Inst) LASX256:$xd, LASX256:$xj, 20015f757f3fSDimitry Andric (to_valid_timm timm:$imm))>; 20025f757f3fSDimitry Andricforeach Inst = ["XVSRLNI_D_Q", "XVSRANI_D_Q", "XVSRLRNI_D_Q", "XVSRARNI_D_Q", 20035f757f3fSDimitry Andric "XVSSRLNI_D_Q", "XVSSRANI_D_Q", "XVSSRLNI_DU_Q", "XVSSRANI_DU_Q", 20045f757f3fSDimitry Andric "XVSSRLRNI_D_Q", "XVSSRARNI_D_Q", "XVSSRLRNI_DU_Q", "XVSSRARNI_DU_Q", 20055f757f3fSDimitry Andric "XVSHUF4I_D", "XVEXTRINS_D", "XVINSVE0_D"] in 20065f757f3fSDimitry Andric def : Pat<(deriveLASXIntrinsic<Inst>.ret 20075f757f3fSDimitry Andric (v4i64 LASX256:$xd), (v4i64 LASX256:$xj), timm:$imm), 20085f757f3fSDimitry Andric (!cast<LAInst>(Inst) LASX256:$xd, LASX256:$xj, 20095f757f3fSDimitry Andric (to_valid_timm timm:$imm))>; 20105f757f3fSDimitry Andric 20115f757f3fSDimitry Andric// vty: v32i8/v16i16/v8i32/v4i64 20125f757f3fSDimitry Andric// Pat<(Intrinsic vty:$xd, vty:$xj, vty:$xk), 20135f757f3fSDimitry Andric// (LAInst vty:$xd, vty:$xj, vty:$xk)>; 20145f757f3fSDimitry Andricforeach Inst = ["XVFRSTP_B", "XVBITSEL_V", "XVSHUF_B"] in 20155f757f3fSDimitry Andric def : Pat<(deriveLASXIntrinsic<Inst>.ret 20165f757f3fSDimitry Andric (v32i8 LASX256:$xd), (v32i8 LASX256:$xj), (v32i8 LASX256:$xk)), 20175f757f3fSDimitry Andric (!cast<LAInst>(Inst) LASX256:$xd, LASX256:$xj, LASX256:$xk)>; 20185f757f3fSDimitry Andricforeach Inst = ["XVFRSTP_H", "XVSHUF_H"] in 20195f757f3fSDimitry Andric def : Pat<(deriveLASXIntrinsic<Inst>.ret 20205f757f3fSDimitry Andric (v16i16 LASX256:$xd), (v16i16 LASX256:$xj), (v16i16 LASX256:$xk)), 20215f757f3fSDimitry Andric (!cast<LAInst>(Inst) LASX256:$xd, LASX256:$xj, LASX256:$xk)>; 20225f757f3fSDimitry Andricdef : Pat<(int_loongarch_lasx_xvshuf_w (v8i32 LASX256:$xd), (v8i32 LASX256:$xj), 20235f757f3fSDimitry Andric (v8i32 LASX256:$xk)), 20245f757f3fSDimitry Andric (XVSHUF_W LASX256:$xd, LASX256:$xj, LASX256:$xk)>; 20255f757f3fSDimitry Andricdef : Pat<(int_loongarch_lasx_xvshuf_d (v4i64 LASX256:$xd), (v4i64 LASX256:$xj), 20265f757f3fSDimitry Andric (v4i64 LASX256:$xk)), 20275f757f3fSDimitry Andric (XVSHUF_D LASX256:$xd, LASX256:$xj, LASX256:$xk)>; 20285f757f3fSDimitry Andric 20295f757f3fSDimitry Andric// vty: v8f32/v4f64 20305f757f3fSDimitry Andric// Pat<(Intrinsic vty:$xj, vty:$xk, vty:$xa), 20315f757f3fSDimitry Andric// (LAInst vty:$xj, vty:$xk, vty:$xa)>; 20325f757f3fSDimitry Andricforeach Inst = ["XVFMSUB_S", "XVFNMADD_S", "XVFNMSUB_S"] in 20335f757f3fSDimitry Andric def : Pat<(deriveLASXIntrinsic<Inst>.ret 20345f757f3fSDimitry Andric (v8f32 LASX256:$xj), (v8f32 LASX256:$xk), (v8f32 LASX256:$xa)), 20355f757f3fSDimitry Andric (!cast<LAInst>(Inst) LASX256:$xj, LASX256:$xk, LASX256:$xa)>; 20365f757f3fSDimitry Andricforeach Inst = ["XVFMSUB_D", "XVFNMADD_D", "XVFNMSUB_D"] in 20375f757f3fSDimitry Andric def : Pat<(deriveLASXIntrinsic<Inst>.ret 20385f757f3fSDimitry Andric (v4f64 LASX256:$xj), (v4f64 LASX256:$xk), (v4f64 LASX256:$xa)), 20395f757f3fSDimitry Andric (!cast<LAInst>(Inst) LASX256:$xj, LASX256:$xk, LASX256:$xa)>; 20405f757f3fSDimitry Andric 20415f757f3fSDimitry Andric// vty: v8f32/v4f64 20425f757f3fSDimitry Andric// Pat<(Intrinsic vty:$xj, vty:$xk), 20435f757f3fSDimitry Andric// (LAInst vty:$xj, vty:$xk)>; 20445f757f3fSDimitry Andricforeach Inst = ["XVFMAX_S", "XVFMIN_S", "XVFMAXA_S", "XVFMINA_S", "XVFCVT_H_S", 20455f757f3fSDimitry Andric "XVFCMP_CAF_S", "XVFCMP_CUN_S", "XVFCMP_CEQ_S", "XVFCMP_CUEQ_S", 20465f757f3fSDimitry Andric "XVFCMP_CLT_S", "XVFCMP_CULT_S", "XVFCMP_CLE_S", "XVFCMP_CULE_S", 20475f757f3fSDimitry Andric "XVFCMP_CNE_S", "XVFCMP_COR_S", "XVFCMP_CUNE_S", 20485f757f3fSDimitry Andric "XVFCMP_SAF_S", "XVFCMP_SUN_S", "XVFCMP_SEQ_S", "XVFCMP_SUEQ_S", 20495f757f3fSDimitry Andric "XVFCMP_SLT_S", "XVFCMP_SULT_S", "XVFCMP_SLE_S", "XVFCMP_SULE_S", 20505f757f3fSDimitry Andric "XVFCMP_SNE_S", "XVFCMP_SOR_S", "XVFCMP_SUNE_S"] in 20515f757f3fSDimitry Andric def : Pat<(deriveLASXIntrinsic<Inst>.ret 20525f757f3fSDimitry Andric (v8f32 LASX256:$xj), (v8f32 LASX256:$xk)), 20535f757f3fSDimitry Andric (!cast<LAInst>(Inst) LASX256:$xj, LASX256:$xk)>; 20545f757f3fSDimitry Andricforeach Inst = ["XVFMAX_D", "XVFMIN_D", "XVFMAXA_D", "XVFMINA_D", "XVFCVT_S_D", 20555f757f3fSDimitry Andric "XVFTINTRNE_W_D", "XVFTINTRZ_W_D", "XVFTINTRP_W_D", "XVFTINTRM_W_D", 20565f757f3fSDimitry Andric "XVFTINT_W_D", 20575f757f3fSDimitry Andric "XVFCMP_CAF_D", "XVFCMP_CUN_D", "XVFCMP_CEQ_D", "XVFCMP_CUEQ_D", 20585f757f3fSDimitry Andric "XVFCMP_CLT_D", "XVFCMP_CULT_D", "XVFCMP_CLE_D", "XVFCMP_CULE_D", 20595f757f3fSDimitry Andric "XVFCMP_CNE_D", "XVFCMP_COR_D", "XVFCMP_CUNE_D", 20605f757f3fSDimitry Andric "XVFCMP_SAF_D", "XVFCMP_SUN_D", "XVFCMP_SEQ_D", "XVFCMP_SUEQ_D", 20615f757f3fSDimitry Andric "XVFCMP_SLT_D", "XVFCMP_SULT_D", "XVFCMP_SLE_D", "XVFCMP_SULE_D", 20625f757f3fSDimitry Andric "XVFCMP_SNE_D", "XVFCMP_SOR_D", "XVFCMP_SUNE_D"] in 20635f757f3fSDimitry Andric def : Pat<(deriveLASXIntrinsic<Inst>.ret 20645f757f3fSDimitry Andric (v4f64 LASX256:$xj), (v4f64 LASX256:$xk)), 20655f757f3fSDimitry Andric (!cast<LAInst>(Inst) LASX256:$xj, LASX256:$xk)>; 20665f757f3fSDimitry Andric 20675f757f3fSDimitry Andric// vty: v8f32/v4f64 20685f757f3fSDimitry Andric// Pat<(Intrinsic vty:$xj), 20695f757f3fSDimitry Andric// (LAInst vty:$xj)>; 20705f757f3fSDimitry Andricforeach Inst = ["XVFLOGB_S", "XVFCLASS_S", "XVFSQRT_S", "XVFRECIP_S", "XVFRSQRT_S", 20715f757f3fSDimitry Andric "XVFRINT_S", "XVFCVTL_D_S", "XVFCVTH_D_S", 20725f757f3fSDimitry Andric "XVFRINTRNE_S", "XVFRINTRZ_S", "XVFRINTRP_S", "XVFRINTRM_S", 20735f757f3fSDimitry Andric "XVFTINTRNE_W_S", "XVFTINTRZ_W_S", "XVFTINTRP_W_S", "XVFTINTRM_W_S", 20745f757f3fSDimitry Andric "XVFTINT_W_S", "XVFTINTRZ_WU_S", "XVFTINT_WU_S", 20755f757f3fSDimitry Andric "XVFTINTRNEL_L_S", "XVFTINTRNEH_L_S", "XVFTINTRZL_L_S", 20765f757f3fSDimitry Andric "XVFTINTRZH_L_S", "XVFTINTRPL_L_S", "XVFTINTRPH_L_S", 20775f757f3fSDimitry Andric "XVFTINTRML_L_S", "XVFTINTRMH_L_S", "XVFTINTL_L_S", 20785f757f3fSDimitry Andric "XVFTINTH_L_S"] in 20795f757f3fSDimitry Andric def : Pat<(deriveLASXIntrinsic<Inst>.ret (v8f32 LASX256:$xj)), 20805f757f3fSDimitry Andric (!cast<LAInst>(Inst) LASX256:$xj)>; 20815f757f3fSDimitry Andricforeach Inst = ["XVFLOGB_D", "XVFCLASS_D", "XVFSQRT_D", "XVFRECIP_D", "XVFRSQRT_D", 20825f757f3fSDimitry Andric "XVFRINT_D", 20835f757f3fSDimitry Andric "XVFRINTRNE_D", "XVFRINTRZ_D", "XVFRINTRP_D", "XVFRINTRM_D", 20845f757f3fSDimitry Andric "XVFTINTRNE_L_D", "XVFTINTRZ_L_D", "XVFTINTRP_L_D", "XVFTINTRM_L_D", 20855f757f3fSDimitry Andric "XVFTINT_L_D", "XVFTINTRZ_LU_D", "XVFTINT_LU_D"] in 20865f757f3fSDimitry Andric def : Pat<(deriveLASXIntrinsic<Inst>.ret (v4f64 LASX256:$xj)), 20875f757f3fSDimitry Andric (!cast<LAInst>(Inst) LASX256:$xj)>; 20885f757f3fSDimitry Andric 20897a6dacacSDimitry Andric// 256-Bit vector FP approximate reciprocal operation 20907a6dacacSDimitry Andriclet Predicates = [HasFrecipe] in { 20917a6dacacSDimitry Andricforeach Inst = ["XVFRECIPE_S", "XVFRSQRTE_S"] in 20927a6dacacSDimitry Andric def : Pat<(deriveLASXIntrinsic<Inst>.ret (v8f32 LASX256:$xj)), 20937a6dacacSDimitry Andric (!cast<LAInst>(Inst) LASX256:$xj)>; 20947a6dacacSDimitry Andricforeach Inst = ["XVFRECIPE_D", "XVFRSQRTE_D"] in 20957a6dacacSDimitry Andric def : Pat<(deriveLASXIntrinsic<Inst>.ret (v4f64 LASX256:$xj)), 20967a6dacacSDimitry Andric (!cast<LAInst>(Inst) LASX256:$xj)>; 20977a6dacacSDimitry Andric} 20987a6dacacSDimitry Andric 20995f757f3fSDimitry Andricdef : Pat<(int_loongarch_lasx_xvpickve_w_f v8f32:$xj, timm:$imm), 21005f757f3fSDimitry Andric (XVPICKVE_W v8f32:$xj, (to_valid_timm timm:$imm))>; 21015f757f3fSDimitry Andricdef : Pat<(int_loongarch_lasx_xvpickve_d_f v4f64:$xj, timm:$imm), 21025f757f3fSDimitry Andric (XVPICKVE_D v4f64:$xj, (to_valid_timm timm:$imm))>; 21035f757f3fSDimitry Andric 21045f757f3fSDimitry Andric// load 21055f757f3fSDimitry Andricdef : Pat<(int_loongarch_lasx_xvld GPR:$rj, timm:$imm), 21065f757f3fSDimitry Andric (XVLD GPR:$rj, (to_valid_timm timm:$imm))>; 21075f757f3fSDimitry Andricdef : Pat<(int_loongarch_lasx_xvldx GPR:$rj, GPR:$rk), 21085f757f3fSDimitry Andric (XVLDX GPR:$rj, GPR:$rk)>; 21095f757f3fSDimitry Andric 21105f757f3fSDimitry Andricdef : Pat<(int_loongarch_lasx_xvldrepl_b GPR:$rj, timm:$imm), 21115f757f3fSDimitry Andric (XVLDREPL_B GPR:$rj, (to_valid_timm timm:$imm))>; 21125f757f3fSDimitry Andricdef : Pat<(int_loongarch_lasx_xvldrepl_h GPR:$rj, timm:$imm), 21135f757f3fSDimitry Andric (XVLDREPL_H GPR:$rj, (to_valid_timm timm:$imm))>; 21145f757f3fSDimitry Andricdef : Pat<(int_loongarch_lasx_xvldrepl_w GPR:$rj, timm:$imm), 21155f757f3fSDimitry Andric (XVLDREPL_W GPR:$rj, (to_valid_timm timm:$imm))>; 21165f757f3fSDimitry Andricdef : Pat<(int_loongarch_lasx_xvldrepl_d GPR:$rj, timm:$imm), 21175f757f3fSDimitry Andric (XVLDREPL_D GPR:$rj, (to_valid_timm timm:$imm))>; 21185f757f3fSDimitry Andric 21195f757f3fSDimitry Andric// store 21205f757f3fSDimitry Andricdef : Pat<(int_loongarch_lasx_xvst LASX256:$xd, GPR:$rj, timm:$imm), 21215f757f3fSDimitry Andric (XVST LASX256:$xd, GPR:$rj, (to_valid_timm timm:$imm))>; 21225f757f3fSDimitry Andricdef : Pat<(int_loongarch_lasx_xvstx LASX256:$xd, GPR:$rj, GPR:$rk), 21235f757f3fSDimitry Andric (XVSTX LASX256:$xd, GPR:$rj, GPR:$rk)>; 21245f757f3fSDimitry Andric 21255f757f3fSDimitry Andricdef : Pat<(int_loongarch_lasx_xvstelm_b v32i8:$xd, GPR:$rj, timm:$imm, timm:$idx), 21265f757f3fSDimitry Andric (XVSTELM_B v32i8:$xd, GPR:$rj, (to_valid_timm timm:$imm), 21275f757f3fSDimitry Andric (to_valid_timm timm:$idx))>; 21285f757f3fSDimitry Andricdef : Pat<(int_loongarch_lasx_xvstelm_h v16i16:$xd, GPR:$rj, timm:$imm, timm:$idx), 21295f757f3fSDimitry Andric (XVSTELM_H v16i16:$xd, GPR:$rj, (to_valid_timm timm:$imm), 21305f757f3fSDimitry Andric (to_valid_timm timm:$idx))>; 21315f757f3fSDimitry Andricdef : Pat<(int_loongarch_lasx_xvstelm_w v8i32:$xd, GPR:$rj, timm:$imm, timm:$idx), 21325f757f3fSDimitry Andric (XVSTELM_W v8i32:$xd, GPR:$rj, (to_valid_timm timm:$imm), 21335f757f3fSDimitry Andric (to_valid_timm timm:$idx))>; 21345f757f3fSDimitry Andricdef : Pat<(int_loongarch_lasx_xvstelm_d v4i64:$xd, GPR:$rj, timm:$imm, timm:$idx), 21355f757f3fSDimitry Andric (XVSTELM_D v4i64:$xd, GPR:$rj, (to_valid_timm timm:$imm), 21365f757f3fSDimitry Andric (to_valid_timm timm:$idx))>; 21375f757f3fSDimitry Andric 213806c3fb27SDimitry Andric} // Predicates = [HasExtLASX] 2139