xref: /freebsd-src/contrib/llvm-project/llvm/lib/Target/LoongArch/LoongArchLASXInstrInfo.td (revision 6e516c87b6d779911edde7481d8aef165b837a03)
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