[clang] [llvm] [RISCV][MC] Implement MC for Base P extension (PR #123271)
via llvm-commits
llvm-commits at lists.llvm.org
Sun Jan 19 17:15:09 PST 2025
https://github.com/realqhc updated https://github.com/llvm/llvm-project/pull/123271
>From 87f3f8cf1bbd17ab54ee05acd16b4f4d74209bde Mon Sep 17 00:00:00 2001
From: Qihan Cai <caiqihan021 at hotmail.com>
Date: Thu, 31 Oct 2024 01:01:06 +1100
Subject: [PATCH 1/6] [RISCV][MC] Implement MC for Base P extension
This proposed extension adds Packed-SIMD instructions for RV32 and RV64.
Documentation:
https://jhauser.us/RISCV/ext-P/RVP-baseInstrs-012.pdf
https://jhauser.us/RISCV/ext-P/RVP-instrEncodings-012.pdf
This patch is MC-only.
---
llvm/docs/RISCVUsage.rst | 3 +
.../Target/RISCV/AsmParser/RISCVAsmParser.cpp | 13 +
.../Target/RISCV/MCTargetDesc/RISCVBaseInfo.h | 1 +
llvm/lib/Target/RISCV/RISCVFeatures.td | 32 +
llvm/lib/Target/RISCV/RISCVInstrInfo.td | 3 +
llvm/lib/Target/RISCV/RISCVInstrInfoP.td | 1068 ++++++++++++
llvm/lib/Target/RISCV/RISCVInstrInfoZb.td | 26 +-
llvm/test/CodeGen/RISCV/attributes.ll | 3 +
llvm/test/MC/RISCV/attribute-arch.s | 6 +
.../MC/RISCV/invalid-instruction-spellcheck.s | 4 +-
llvm/test/MC/RISCV/rv32i-invalid.s | 4 +-
llvm/test/MC/RISCV/rv32p-invalid.s | 14 +
llvm/test/MC/RISCV/rv32p-valid.s | 1440 +++++++++++++++++
llvm/test/MC/RISCV/rv64p-invalid.s | 9 +
llvm/test/MC/RISCV/rv64p-valid.s | 911 +++++++++++
15 files changed, 3522 insertions(+), 15 deletions(-)
create mode 100644 llvm/lib/Target/RISCV/RISCVInstrInfoP.td
create mode 100644 llvm/test/MC/RISCV/rv32p-invalid.s
create mode 100644 llvm/test/MC/RISCV/rv32p-valid.s
create mode 100644 llvm/test/MC/RISCV/rv64p-invalid.s
create mode 100644 llvm/test/MC/RISCV/rv64p-valid.s
diff --git a/llvm/docs/RISCVUsage.rst b/llvm/docs/RISCVUsage.rst
index a1df0f7d686e62..89202a825fc643 100644
--- a/llvm/docs/RISCVUsage.rst
+++ b/llvm/docs/RISCVUsage.rst
@@ -335,6 +335,9 @@ The primary goal of experimental support is to assist in the process of ratifica
``experimental-svukte``
LLVM implements the `0.3 draft specification <https://github.com/riscv/riscv-isa-manual/pull/1564>`__.
+``experimental-p``, ``experimental-p``
+ LLVM implements the `012 specification <https://jhauser.us/RISCV/ext-P/RVP-baseInstrs-012.pdf>`__.
+
To use an experimental extension from `clang`, you must add `-menable-experimental-extensions` to the command line, and specify the exact version of the experimental extension you are using. To use an experimental extension with LLVM's internal developer tools (e.g. `llc`, `llvm-objdump`, `llvm-mc`), you must prefix the extension name with `experimental-`. Note that you don't need to specify the version with internal tools, and shouldn't include the `experimental-` prefix with `clang`.
Vendor Extensions
diff --git a/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp b/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp
index 8177280044bf44..b941c2b15a0cb1 100644
--- a/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp
+++ b/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp
@@ -961,6 +961,16 @@ struct RISCVOperand final : public MCParsedAsmOperand {
bool isSImm13Lsb0() const { return isBareSimmNLsb0<13>(); }
+ bool isSImm10() const {
+ if (!isImm())
+ return false;
+ int64_t Imm;
+ RISCVMCExpr::VariantKind VK = RISCVMCExpr::VK_RISCV_None;
+ bool IsConstantImm = evaluateConstantImm(getImm(), Imm, VK);
+ return IsConstantImm && isInt<10>(fixImmediateForRV32(Imm, isRV64Imm())) &&
+ VK == RISCVMCExpr::VK_RISCV_None;
+ }
+
bool isSImm10Lsb0000NonZero() const {
if (!isImm())
return false;
@@ -1587,6 +1597,9 @@ bool RISCVAsmParser::matchAndEmitInstruction(SMLoc IDLoc, unsigned &Opcode,
return generateImmOutOfRangeError(
Operands, ErrorInfo, 4, (1 << 10) - 4,
"immediate must be a multiple of 4 bytes in the range");
+ case Match_InvalidSImm10:
+ return generateImmOutOfRangeError(Operands, ErrorInfo, -(1 << 9),
+ (1 << 9) - 1);
case Match_InvalidSImm10Lsb0000NonZero:
return generateImmOutOfRangeError(
Operands, ErrorInfo, -(1 << 9), (1 << 9) - 16,
diff --git a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.h b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.h
index ab04b09a7ad151..f4902099ddc3f7 100644
--- a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.h
+++ b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.h
@@ -314,6 +314,7 @@ enum OperandType : unsigned {
OPERAND_UIMM8_GE32,
OPERAND_UIMM9_LSB000,
OPERAND_UIMM10,
+ OPERAND_SIMM10,
OPERAND_UIMM10_LSB00_NONZERO,
OPERAND_UIMM11,
OPERAND_UIMM12,
diff --git a/llvm/lib/Target/RISCV/RISCVFeatures.td b/llvm/lib/Target/RISCV/RISCVFeatures.td
index f721d7148526ba..b764d769640335 100644
--- a/llvm/lib/Target/RISCV/RISCVFeatures.td
+++ b/llvm/lib/Target/RISCV/RISCVFeatures.td
@@ -1016,6 +1016,38 @@ def HasStdExtSmctrOrSsctr : Predicate<"Subtarget->hasStdExtSmctrOrSsctr()">,
"'Smctr' (Control Transfer Records Machine Level) or "
"'Ssctr' (Control Transfer Records Supervisor Level)">;
+def FeatureStdExtP
+ : RISCVExperimentalExtension<1, 0,
+ "'Base P' (Packed SIMD)">;
+def HasStdExtP : Predicate<"Subtarget->hasStdExtP()">,
+ AssemblerPredicate<(all_of FeatureStdExtP),
+ "'Base P' (Packed SIMD)">;
+
+def HasStdExtZbaOrP
+ : Predicate<"Subtarget->hasStdExtZba() || Subtarget->hasStdExtP()">,
+ AssemblerPredicate<(any_of FeatureStdExtZba, FeatureStdExtP),
+ "'Zba' (Address Generation Instructions) or "
+ "'Base P' (Packed-SIMD)">;
+
+def HasStdExtZbbOrP
+ : Predicate<"Subtarget->hasStdExtZbb() || Subtarget->hasStdExtP()">,
+ AssemblerPredicate<(any_of FeatureStdExtZbb, FeatureStdExtP),
+ "'Zbb' (Basic Bit-Manipulation) or "
+ "'Base P' (Packed-SIMD)">;
+
+def HasStdExtZbkbOrP
+ : Predicate<"Subtarget->hasStdExtZbkb() || Subtarget->hasStdExtP()">,
+ AssemblerPredicate<(any_of FeatureStdExtZbkb, FeatureStdExtP),
+ "'Zbkb' (Bitmanip instructions for Cryptography) or "
+ "'Base P' (Packed-SIMD)">;
+
+def HasStdExtZbbOrZbkbOrP
+ : Predicate<"Subtarget->HasStdExtZbbOrZbkb()|| Subtarget->hasStdExtP()">,
+ AssemblerPredicate<(any_of FeatureStdExtZbb, FeatureStdExtZbkb, FeatureStdExtP),
+ "'Zbb' (Basic Bit-Manipulation) or "
+ "'Zbkb' (Bitmanip instructions for Cryptography) or "
+ "'Base P' (Packed-SIMD)">;
+
//===----------------------------------------------------------------------===//
// Vendor extensions
//===----------------------------------------------------------------------===//
diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfo.td b/llvm/lib/Target/RISCV/RISCVInstrInfo.td
index bb5bb6352c32a5..4b72fc54715314 100644
--- a/llvm/lib/Target/RISCV/RISCVInstrInfo.td
+++ b/llvm/lib/Target/RISCV/RISCVInstrInfo.td
@@ -2122,6 +2122,9 @@ include "RISCVInstrInfoZicbo.td"
include "RISCVInstrInfoZicond.td"
include "RISCVInstrInfoZicfiss.td"
+// Packed SIMD
+include "RISCVInstrInfoP.td"
+
//===----------------------------------------------------------------------===//
// Vendor extensions
//===----------------------------------------------------------------------===//
diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoP.td b/llvm/lib/Target/RISCV/RISCVInstrInfoP.td
new file mode 100644
index 00000000000000..fd32bc70a54d68
--- /dev/null
+++ b/llvm/lib/Target/RISCV/RISCVInstrInfoP.td
@@ -0,0 +1,1068 @@
+//===-- RISCVInstrInfoP.td - RISC-V 'P' instructions -------*- tablegen -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file describes the RISC-V instructions from the standard 'Base P'
+// Packed SIMD instruction set extension.
+///
+/// This version is still experimental as the 'P' extension hasn't been
+/// ratified yet.
+///
+//===----------------------------------------------------------------------===//
+
+//===----------------------------------------------------------------------===//
+// Operand and SDNode transformation definitions.
+//===----------------------------------------------------------------------===//
+
+def simm10 : RISCVSImmLeafOp<10> {
+ let MCOperandPredicate = [{
+ int64_t Imm;
+ if (MCOp.evaluateAsConstantImm(Imm))
+ return isInt<10>(Imm);
+ return MCOp.isBareSymbolRef();
+ }];
+}
+
+//===----------------------------------------------------------------------===//
+// Instruction class templates
+//===----------------------------------------------------------------------===//
+
+let hasSideEffects = 0, mayLoad = 0, mayStore = 0 in
+class RVPUnary<bits<5> funct5, bits<7> wuimm,
+ bits<3> funct3, RISCVOpcode opcode,
+ string opcodestr>
+ : RVInstIBase<funct3, opcode, (outs GPR:$rd), (ins GPR:$rs1),
+ opcodestr, "$rd, $rs1"> {
+ let Inst{31-27} = funct5;
+ let Inst{26-20} = wuimm;
+}
+
+let hasSideEffects = 0, mayLoad = 0, mayStore = 0 in
+class RVPUnaryImm9<bits<7> funct7, RISCVOpcode opcode,
+ string opcodestr, DAGOperand TyRd = GPR>
+ : RVInstIBase<0b010, opcode, (outs TyRd:$rd), (ins simm10:$simm10),
+ opcodestr, "$rd, $simm10"> {
+ bits<10> simm10;
+
+ let Inst{31-25} = funct7;
+ let Inst{24-15} = simm10;
+}
+
+let hasSideEffects = 0, mayLoad = 0, mayStore = 0 in
+class RVPUnaryImm8<bits<8> funct8, RISCVOpcode opcode,
+ string opcodestr, DAGOperand TyRd = GPR>
+ : RVInstIBase<0b010, opcode, (outs TyRd:$rd), (ins uimm8:$uimm8),
+ opcodestr, "$rd, $uimm8"> {
+ bits<8> uimm8;
+ let Inst{31-24} = funct8;
+ let Inst{23-16} = uimm8;
+ let Inst{15} = 0b0;
+}
+
+let hasSideEffects = 0, mayLoad = 0, mayStore = 0 in
+class RVPUnaryWUF<bits<2> w, bits<5> uf,
+ string opcodestr>
+ : RVInstIBase<0b010, OPC_OP_IMM_32, (outs GPR:$rd), (ins GPR:$rs1),
+ opcodestr, "$rd, $rs1"> {
+ let Inst{31-27} = 0b11100;
+ let Inst{26-25} = w;
+ let Inst{24-20} = uf;
+}
+
+let hasSideEffects = 0, mayLoad = 0, mayStore = 0 in
+class RVPUnaryWUFRs1pRdp<bits<2> w, bits<5> uf, string opcodestr>
+ : RVInstIBase<0b010, OPC_OP_IMM_32, (outs GPRPairRV32:$rdp), (ins GPRPairRV32:$rs1p),
+ opcodestr, "$rdp, $rs1p"> {
+ bits<4> rs1p;
+ bits<4> rdp;
+
+ let Inst{31-27} = 0b01100;
+ let Inst{26-25} = w;
+ let Inst{24-20} = uf;
+ let Inst{19-16} = rs1p;
+ let Inst{15} = 0b0;
+ let Inst{11-8} = rdp;
+ let Inst{7} = 0b0;
+}
+
+let hasSideEffects = 0, mayLoad = 0, mayStore = 0 in
+class RVPUnaryF<bit bfr, bits<3> f, bit aft, bits<7> wuimm,
+ string opcodestr, bits<3> funct3 = 0b100,
+ dag outs = (outs GPR:$rd), dag ins = (ins GPR:$rs1),
+ string argstr = "$rd, $rs1">
+ : RVInstIBase<funct3, OPC_OP_IMM_32, outs, ins, opcodestr, argstr> {
+ let Inst{31} = bfr;
+ let Inst{30-28} = f;
+ let Inst{27} = aft;
+ let Inst{26-20} = wuimm;
+}
+
+class RVPUnary1F0<bits<3> f, bits<7> wuimm, string opcodestr>
+ : RVPUnaryF<1, f, 0, wuimm, opcodestr>;
+
+class RVPUnary0F0Rdp<bits<3> f, bits<7> wuimm, string opcodestr>
+ : RVPUnaryF<0, f, 0, wuimm, opcodestr, 0b100, (outs GPRPairRV32:$rdp),
+ (ins GPR:$rs1), "$rdp, $rs1"> {
+ bits<4> rdp;
+
+ let Inst{11-8} = rdp;
+ let Inst{7} = 0b0;
+}
+
+class RVPUnary0F0Rs1p<bits<3> f, bits<7> wuimm, string opcodestr>
+ : RVPUnaryF<0, f, 0, wuimm, opcodestr, 0b100, (outs GPR:$rd),
+ (ins GPRPairRV32:$rs1p), "$rd, $rs1p"> {
+ bits<4> rs1p;
+
+ let Inst{19-16} = rs1p;
+ let Inst{15} = 0b1;
+}
+
+class RVPUnary0F0Rs1pRdp<bits<3> f, bits<7> wuimm, string opcodestr,
+ bit aft = 0b0>
+ : RVPUnaryF<0, f, 0, wuimm, opcodestr, 0b100, (outs GPRPairRV32:$rdp),
+ (ins GPRPairRV32:$rs1p), "$rdp, $rs1p"> {
+ bits<4> rs1p;
+ bits<4> rdp;
+
+ let Inst{19-16} = rs1p;
+ let Inst{15} = aft;
+ let Inst{11-8} = rdp;
+ let Inst{7} = 0b0;
+}
+
+let hasSideEffects = 0, mayLoad = 0, mayStore = 0 in
+class RVPBinaryFW<bit bfr, bits<3> f, bit aft, bits<2> w,
+ string opcodestr, bits<3> funct3, RISCVOpcode Opcode = OPC_OP_32,
+ dag outs = (outs GPR:$rd), dag ins = (ins GPR:$rs1, GPR:$rs2),
+ string argstr = "$rd, $rs1, $rs2">
+ : RVInstRBase<funct3, Opcode, outs, ins, opcodestr, argstr> {
+ let Inst{31} = bfr;
+ let Inst{30-28} = f;
+ let Inst{27} = aft;
+ let Inst{26-25} = w;
+}
+
+class RVPBinary1F1W<bits<3> f, bits<2> w, string opcodestr, bits<3> funct3,
+ RISCVOpcode Opcode = OPC_OP_32>
+ : RVPBinaryFW<1, f, 1, w, opcodestr, funct3, Opcode>;
+
+class RVPBinary1F0W<bits<3> f, bits<2> w, string opcodestr, bits<3> funct3,
+ RISCVOpcode Opcode = OPC_OP_32>
+ : RVPBinaryFW<1, f, 0, w, opcodestr, funct3, Opcode>;
+
+class RVPBinary0F1WRdp<bits<3> f, bits<2> w, string opcodestr,
+ RISCVOpcode Opcode = OPC_OP_IMM_32>
+ : RVPBinaryFW<0, f, 1, w, opcodestr, 0b010, Opcode, (outs GPRPairRV32:$rdp),
+ (ins GPR:$rs1, GPR:$rs2), "$rdp, $rs1, $rs2"> {
+ bits<4> rdp;
+
+ let Inst{11-8} = rdp;
+ let Inst{7} = 0b0;
+}
+
+class RVPBinary0F1WRs1p<bits<3> f, bits<2> w, string opcodestr,
+ bit aft = 0b0, RISCVOpcode Opcode = OPC_OP_IMM_32>
+ : RVPBinaryFW<0, f, 1, w, opcodestr, 0b100, Opcode, (outs GPR:$rd),
+ (ins GPRPairRV32:$rs1p, GPR:$rs2), "$rd, $rs1p, $rs2"> {
+ bits<4> rs1p;
+
+ let Inst{19-16} = rs1p;
+ let Inst{15} = aft;
+}
+
+class RVPBinary0F1WRs1pRdp<bits<3> f, bits<2> w, string opcodestr,
+ bit aft = 0b0, RISCVOpcode Opcode = OPC_OP_IMM_32>
+ : RVPBinaryFW<0, f, 1, w, opcodestr, 0b110, Opcode, (outs GPRPairRV32:$rdp),
+ (ins GPRPairRV32:$rs1p, GPR:$rs2), "$rdp, $rs1p, $rs2"> {
+ bits<4> rs1p;
+ bits<4> rdp;
+
+ let Inst{19-16} = rs1p;
+ let Inst{15} = aft;
+ let Inst{11-8} = rdp;
+ let Inst{7} = 0b0;
+}
+
+let hasSideEffects = 0, mayLoad = 0, mayStore = 0 in
+class RVPBinary1FWRs2pRs1pRdp<bits<4> f, bits<2> w, string opcodestr,
+ bit aft = 0b0, RISCVOpcode Opcode = OPC_OP_IMM_32>
+ : RVInstRBase<0b110, Opcode, (outs GPRPairRV32:$rdp), (ins GPRPairRV32:$rs1p, GPRPairRV32:$rs2p),
+ opcodestr, "$rdp, $rs1p, $rs2p"> {
+ bits<4> rs1p;
+ bits<4> rs2p;
+ bits<4> rdp;
+
+ let Inst{31} = 0b1;
+ let Inst{30-27} = f;
+ let Inst{26-25} = w;
+ let Inst{24-21} = rs2p;
+ let Inst{20} = aft;
+ let Inst{19-16} = rs1p;
+ let Inst{15} = aft;
+ let Inst{11-8} = rdp;
+ let Inst{7} = 0b0;
+}
+
+class RVPBinary1F0WRs2pRs1pRdp<bits<3> f, bits<2> w, string opcodestr,
+ bit bfr = 0b1, bit aft = 0b0, RISCVOpcode Opcode = OPC_OP_IMM_32>
+ : RVPBinaryFW<1, f, 0, w, opcodestr, 0b110, Opcode, (outs GPRPairRV32:$rdp),
+ (ins GPRPairRV32:$rs1p, GPRPairRV32:$rs2p), "$rdp, $rs1p, $rs2p"> {
+ bits<4> rs1p;
+ bits<4> rs2p;
+ bits<4> rdp;
+
+ let Inst{24-21} = rs2p;
+ let Inst{20} = bfr;
+ let Inst{19-16} = rs1p;
+ let Inst{15} = aft;
+ let Inst{11-8} = rdp;
+ let Inst{7} = 0b0;
+}
+
+let hasSideEffects = 0, mayLoad = 0, mayStore = 0 in
+class RVPBinaryLongFW<bit bfr, bits<4> f, bits<2> w,
+ string opcodestr, bits<3> funct3, dag outs = (outs GPR:$rd),
+ dag ins = (ins GPR:$rs1, GPR:$rs2),
+ string argstr = "$rd, $rs1, $rs2">
+ : RVInstRBase<funct3, OPC_OP_32, outs, ins,
+ opcodestr, argstr> {
+ let Inst{31} = bfr;
+ let Inst{30-27} = f;
+ let Inst{26-25} = w;
+}
+
+class RVPBinary1LongFW<bits<4> f, bits<2> w, string opcodestr, bits<3> funct3>
+ : RVPBinaryLongFW<1, f, w, opcodestr, funct3>;
+
+class RVPBinary0LongFW<bits<4> f, bits<2> w, string opcodestr>
+ : RVPBinaryLongFW<0, f, w, opcodestr, 0b010, (outs GPRPairRV32:$rdp),
+ (ins GPR:$rs1, GPRPairRV32:$rs2), "$rdp, $rs1, $rs2"> {
+ bits<4> rdp;
+
+ let Inst{11-8} = rdp;
+ let Inst{7} = 0b1;
+}
+
+multiclass RVPUnaryBH<bits<5> funct5, string opcodestr> {
+ def NAME # _B : RVPUnary<funct5, 0b0001000, 0b010, OPC_OP_IMM_32, opcodestr # ".b">;
+ def NAME # _H : RVPUnary<funct5, 0b0010000, 0b010, OPC_OP_IMM_32, opcodestr # ".h">;
+}
+
+multiclass RVPUnaryHNonPacked<bits<5> funct5, string opcodestr> {
+ def P # NAME # _H : RVPUnary<funct5, 0b0010000, 0b010, OPC_OP_IMM_32, "p" # opcodestr # ".h">;
+ def NAME: RVPUnary<funct5, 0b0100000, 0b010, OPC_OP_IMM_32, opcodestr>;
+}
+
+multiclass RVPUnaryBHW<bits<5> funct5, string opcodestr> {
+ defm NAME : RVPUnaryBH<funct5, opcodestr>;
+ def NAME # _W: RVPUnary<funct5, 0b0100000, 0b010, OPC_OP_IMM_32, opcodestr # ".w">;
+}
+
+multiclass RVPUnaryHW<bits<5> funct5, string opcodestr> {
+ def NAME # _H : RVPUnary<funct5, 0b0010000, 0b010, OPC_OP_IMM_32, opcodestr # ".h">;
+ def NAME # _W: RVPUnary<funct5, 0b0100000, 0b010, OPC_OP_IMM_32, opcodestr # ".w">;
+}
+
+//===----------------------------------------------------------------------===//
+// Instructions
+//===----------------------------------------------------------------------===//
+
+let Predicates = [HasStdExtP] in {
+def CLS : RVPUnary<0b01100, 0b0000011, 0b001, OPC_OP_IMM, "cls">;
+def ABS : RVPUnary<0b01100, 0b0000111, 0b001, OPC_OP_IMM, "abs">;
+} // Predicates = [HasStdExtP]
+let DecoderNamespace = "RISCV32Only_",
+ Predicates = [HasStdExtP, IsRV32] in {
+def REV_RV32 : RVPUnary<0b01101, 0b0011111, 0b101, OPC_OP_IMM, "rev">;
+} // Predicates = [HasStdExtP, IsRV32]
+
+let Predicates = [HasStdExtP, IsRV64] in {
+def REV16 : RVPUnary<0b01101, 0b0110000, 0b101, OPC_OP_IMM, "rev16">;
+def REV_RV64 : RVPUnary<0b01111, 0b0111111, 0b101, OPC_OP_IMM, "rev">;
+
+def CLSW : RVPUnary<0b01100, 0b0000011, 0b001, OPC_OP_IMM_32, "clsw">;
+def ABSW : RVPUnary<0b01100, 0b0000111, 0b001, OPC_OP_IMM_32, "absw">;
+} // Predicates = [HasStdExtP, IsRV64]
+
+let DecoderNamespace = "RISCV32Only_",
+ Predicates = [HasStdExtP, IsRV32] in {
+ defm PSLLI_RV32 : RVPUnaryBH<0b10000, "pslli">;
+ defm SSLAI_RV32 : RVPUnaryHNonPacked<0b11010, "sslai">;
+} // Predicates = [HasStdExtP, IsRV32]
+
+let Predicates = [HasStdExtP, IsRV64] in {
+ defm PSLLI_RV64 : RVPUnaryBHW<0b10000, "pslli">;
+ defm PSSLAI_RV64 : RVPUnaryHW<0b01010, "psslai">;
+} // Predicates = [HasStdExtP, IsRV64]
+
+let Predicates = [HasStdExtP] in
+def PLI_H : RVPUnaryImm9<0b1011000, OPC_OP_IMM_32, "pli.h">;
+let Predicates = [HasStdExtP, IsRV64] in {
+def PLI_W : RVPUnaryImm9<0b1011001, OPC_OP_IMM_32, "pli.w">;
+} // Predicates = [HasStdExtP, IsRV64]
+let Predicates = [HasStdExtP] in
+def PLI_B : RVPUnaryImm8<0b10110100, OPC_OP_IMM_32, "pli.b">;
+
+let DecoderNamespace = "RISCV32Only_",
+ Predicates = [HasStdExtP, IsRV32] in {
+def PSEXTB_H_RV32 : RVPUnaryWUF<0b00, 0b00100, "psextb.h">;
+def PSABS_H_RV32 : RVPUnaryWUF<0b00, 0b00111, "psabs.h">;
+def PSABS_B_RV32 : RVPUnaryWUF<0b01, 0b00111, "psabs.b">;
+} // Predicates = [HasStdExtP, IsRV32]
+
+let Predicates = [HasStdExtP, IsRV64] in {
+def PSEXTB_H_RV64 : RVPUnaryWUF<0b00, 0b00100, "psextb.h">;
+def PSEXTB_W : RVPUnaryWUF<0b01, 0b00100, "psextb.w">;
+def PSEXTH_W : RVPUnaryWUF<0b01, 0b00101, "psexth.w">;
+def PSABS_H_RV64 : RVPUnaryWUF<0b00, 0b00111, "psabs.h">;
+def PSABS_B_RV64 : RVPUnaryWUF<0b10, 0b00111, "psabs.b">;
+} // Predicates = [HasStdExtP, IsRV64]
+
+let Predicates = [HasStdExtP] in
+def PLUI_H : RVPUnaryImm9<0b1111000, OPC_OP_IMM_32, "plui.h">;
+let Predicates = [HasStdExtP, IsRV64] in
+def PLUI_W : RVPUnaryImm9<0b1111001, OPC_OP_IMM_32, "plui.w">;
+
+let Predicates = [HasStdExtP] in {
+def PSLL_H_H0 : RVPBinary1F1W<0b000, 0b00, "psll.h.h0", 0b010, OPC_OP_IMM_32>;
+def PSLL_B_B0 : RVPBinary1F1W<0b000, 0b10, "psll.b.b0", 0b010, OPC_OP_IMM_32>;
+def PADD_H_H0 : RVPBinary1F1W<0b001, 0b00, "padd.h.h0", 0b010, OPC_OP_IMM_32>;
+def PADD_B_B0 : RVPBinary1F1W<0b001, 0b10, "padd.b.b0", 0b010, OPC_OP_IMM_32>;
+def PSSHA_H_H0 : RVPBinary1F1W<0b110, 0b00, "pssha.h.h0", 0b010, OPC_OP_IMM_32>;
+def PSSHAR_H_H0 : RVPBinary1F1W<0b111, 0b00, "psshar.h.h0", 0b010, OPC_OP_IMM_32>;
+} // Predicates = [HasStdExtP]
+let DecoderNamespace = "RISCV32Only_",
+ Predicates = [HasStdExtP, IsRV32] in {
+def SSHA : RVPBinary1F1W<0b110, 0b01, "ssha", 0b010, OPC_OP_IMM_32>;
+def SSHAR : RVPBinary1F1W<0b111, 0b01, "sshar", 0b010, OPC_OP_IMM_32>;
+} // Predicates = [HasStdExtP, IsRV32]
+
+let Predicates = [HasStdExtP, IsRV64] in {
+def PSLL_W_W0 : RVPBinary1F1W<0b000, 0b01, "psll.w.w0", 0b010, OPC_OP_IMM_32>;
+def PADD_W_W0 : RVPBinary1F1W<0b001, 0b01, "padd.w.w0", 0b010, OPC_OP_IMM_32>;
+def PSSHA_W_W0 : RVPBinary1F1W<0b110, 0b01, "pssha.w.w0", 0b010, OPC_OP_IMM_32>;
+def PSSHAR_W_W0 : RVPBinary1F1W<0b111, 0b01, "psshar.w.w0", 0b010, OPC_OP_IMM_32>;
+def SHA : RVPBinary1F1W<0b110, 0b11, "sha", 0b010, OPC_OP_IMM_32>;
+def SHAR : RVPBinary1F1W<0b111, 0b11, "shar", 0b010, OPC_OP_IMM_32>;
+} // Predicates = [HasStdExtP, IsRV64]
+
+let Predicates = [HasStdExtP] in {
+def PSRLI_B : RVPUnary1F0<0b000, 0b0001000, "psrli.b">;
+def PSRLI_H : RVPUnary1F0<0b000, 0b0010000, "psrli.h">;
+def PUSATI_H : RVPUnary1F0<0b010, 0b0010000, "pusati.h">;
+def PSRAI_B : RVPUnary1F0<0b100, 0b0001000, "psrai.b">;
+def PSRAI_H : RVPUnary1F0<0b100, 0b0010000, "psrai.h">;
+def PSRARI_H : RVPUnary1F0<0b101, 0b0010000, "psrari.h">;
+def PSATI_H : RVPUnary1F0<0b110, 0b0010000, "psati.h">;
+} // Predicates = [HasStdExtP]
+
+let DecoderNamespace = "RISCV32Only_",
+ Predicates = [HasStdExtP, IsRV32] in {
+def USATI_RV32 : RVPUnary1F0<0b010, 0b0100000, "usati">;
+def SRARI : RVPUnary1F0<0b101, 0b0100000, "srari">;
+def SATI : RVPUnary1F0<0b110, 0b0100000, "sati">;
+} // Predicates = [HasStdExtP, IsRV32]
+let Predicates = [HasStdExtP, IsRV64] in {
+def PSRLI_W : RVPUnary1F0<0b000, 0b0100000, "psrli.w">;
+def PUSATI_W : RVPUnary1F0<0b010, 0b0100000, "pusati.w">;
+def USATI_RV64 : RVPUnary1F0<0b010, 0b1000000, "usati">;
+} // Predicates = [HasStdExtP, IsRV64]
+
+let Predicates = [HasStdExtP] in {
+def PSRL_H_H0 : RVPBinary1F1W<0b000, 0b00, "psrl.h.h0", 0b100, OPC_OP_IMM_32>;
+def PSRL_B_B0 : RVPBinary1F1W<0b000, 0b10, "psrl.b.b0", 0b100, OPC_OP_IMM_32>;
+def PREDSUM_H : RVPBinary1F1W<0b001, 0b00, "predsum.h", 0b100, OPC_OP_IMM_32>;
+def PREDSUM_B : RVPBinary1F1W<0b001, 0b10, "predsum.b", 0b100, OPC_OP_IMM_32>;
+def PREDSUMU_H : RVPBinary1F1W<0b011, 0b00, "predsumu.h", 0b100, OPC_OP_IMM_32>;
+def PREDSUMU_B : RVPBinary1F1W<0b011, 0b10, "predsumu.b", 0b100, OPC_OP_IMM_32>;
+def PSRA_H_H0 : RVPBinary1F1W<0b100, 0b00, "psra.h.h0", 0b100, OPC_OP_IMM_32>;
+def PSRA_B_B0 : RVPBinary1F1W<0b100, 0b10, "psra.b.b0", 0b100, OPC_OP_IMM_32>;
+} // Predicates = [HasStdExtP]
+
+let Predicates = [HasStdExtP, IsRV64] in {
+def PSRL_W_W0 : RVPBinary1F1W<0b000, 0b01, "psrl.w.w0", 0b100, OPC_OP_IMM_32>;
+def PREDSUM_W : RVPBinary1F1W<0b001, 0b01, "predsum.w", 0b100, OPC_OP_IMM_32>;
+def PREDSUMU_W : RVPBinary1F1W<0b011, 0b01, "predsumu.w", 0b100, OPC_OP_IMM_32>;
+def PSRA_W_W0 : RVPBinary1F1W<0b100, 0b01, "psra.w.w0", 0b100, OPC_OP_IMM_32>;
+} // Predicates = [HasStdExtP, IsRV64]
+
+
+let Predicates = [HasStdExtP] in {
+def PADD_H : RVPBinary1LongFW<0b0000, 0b00, "padd.h", 0b000>;
+def PADD_B : RVPBinary1LongFW<0b0000, 0b10, "padd.b", 0b000>;
+def PSADD_H : RVPBinary1LongFW<0b0010, 0b00, "psadd.h", 0b000>;
+def PSADD_B : RVPBinary1LongFW<0b0010, 0b10, "psadd.b", 0b000>;
+def PAADD_H : RVPBinary1LongFW<0b0011, 0b00, "paadd.h", 0b000>;
+def PAADD_B : RVPBinary1LongFW<0b0011, 0b10, "paadd.b", 0b000>;
+
+def PSADDU_H : RVPBinary1LongFW<0b0110, 0b00, "psaddu.h", 0b000>;
+def PSADDU_B : RVPBinary1LongFW<0b0110, 0b10, "psaddu.b", 0b000>;
+def PAADDU_H : RVPBinary1LongFW<0b0111, 0b00, "paaddu.h", 0b000>;
+def PAADDU_B : RVPBinary1LongFW<0b0111, 0b10, "paaddu.b", 0b000>;
+
+def PSUB_H : RVPBinary1LongFW<0b1000, 0b00, "psub.h", 0b000>;
+def PSUB_B : RVPBinary1LongFW<0b1000, 0b10, "psub.b", 0b000>;
+def PDIF_H : RVPBinary1LongFW<0b1001, 0b00, "pdif.h", 0b000>;
+def PDIF_B : RVPBinary1LongFW<0b1001, 0b10, "pdif.b", 0b000>;
+def PSSUB_H : RVPBinary1LongFW<0b1010, 0b00, "pssub.h", 0b000>;
+def PSSUB_B : RVPBinary1LongFW<0b1010, 0b10, "pssub.b", 0b000>;
+def PASUB_H : RVPBinary1LongFW<0b1011, 0b00, "pasub.h", 0b000>;
+def PASUB_B : RVPBinary1LongFW<0b1011, 0b10, "pasub.b", 0b000>;
+
+def PDIFU_H : RVPBinary1LongFW<0b1101, 0b00, "pdifu.h", 0b000>;
+def PDIFU_B : RVPBinary1LongFW<0b1101, 0b10, "pdifu.b", 0b000>;
+def PSSUBU_H : RVPBinary1LongFW<0b1110, 0b00, "pssubu.h", 0b000>;
+def PSSUBU_B : RVPBinary1LongFW<0b1110, 0b10, "pssubu.b", 0b000>;
+def PASUBU_H : RVPBinary1LongFW<0b1111, 0b00, "pasubu.h", 0b000>;
+def PASUBU_B : RVPBinary1LongFW<0b1111, 0b10, "pasubu.b", 0b000>;
+} // Predicates = [HasStdExtP]
+
+let DecoderNamespace = "RISCV32Only_",
+ Predicates = [HasStdExtP, IsRV32] in {
+def SADD : RVPBinary1LongFW<0b0010, 0b01, "sadd", 0b000>;
+def AADD : RVPBinary1LongFW<0b0011, 0b01, "aadd", 0b000>;
+
+def SADDU : RVPBinary1LongFW<0b0110, 0b01, "saddu", 0b000>;
+def AADDU : RVPBinary1LongFW<0b0111, 0b01, "aaddu", 0b000>;
+
+def SSUB : RVPBinary1LongFW<0b1010, 0b01, "ssub", 0b000>;
+def ASUB : RVPBinary1LongFW<0b1011, 0b01, "asub", 0b000>;
+
+def SSUBU : RVPBinary1LongFW<0b1110, 0b01, "ssubu", 0b000>;
+def ASUBU : RVPBinary1LongFW<0b1111, 0b01, "asubu", 0b000>;
+} // Predicates = [HasStdExtP, IsRV32]
+
+let Predicates = [HasStdExtP, IsRV64] in {
+def PADD_W : RVPBinary1LongFW<0b0000, 0b01, "padd.w", 0b000>;
+def PSADD_W : RVPBinary1LongFW<0b0010, 0b01, "psadd.w", 0b000>;
+def PAADD_W : RVPBinary1LongFW<0b0011, 0b01, "paadd.w", 0b000>;
+
+def PSADDU_W : RVPBinary1LongFW<0b0110, 0b01, "psaddu.w", 0b000>;
+def PAADDU_W : RVPBinary1LongFW<0b0111, 0b01, "paaddu.w", 0b000>;
+
+def PSUB_W : RVPBinary1LongFW<0b1000, 0b01, "psub.w", 0b000>;
+def PSSUB_W : RVPBinary1LongFW<0b1010, 0b01, "pssub.w", 0b000>;
+def PASUB_W : RVPBinary1LongFW<0b1011, 0b01, "pasub.w", 0b000>;
+
+def PSSUBU_W : RVPBinary1LongFW<0b1110, 0b01, "pssubu.w", 0b000>;
+def PASUBU_W : RVPBinary1LongFW<0b1111, 0b01, "pasubu.w", 0b000>;
+} // Predicates = [HasStdExtP, IsRV64]
+
+
+let Predicates = [HasStdExtP] in {
+def SLX : RVPBinary1LongFW<0b0001, 0b11, "slx", 0b001>;
+def PMUL_H_BEO : RVPBinary1LongFW<0b0010, 0b00, "pmul.h.beo", 0b001>;
+
+def MVM : RVPBinary1LongFW<0b0101, 0b00, "mvm", 0b001>;
+def MVMN : RVPBinary1LongFW<0b0101, 0b01, "mvmn", 0b001>;
+def MERGE : RVPBinary1LongFW<0b0101, 0b10, "merge", 0b001>;
+def SRX : RVPBinary1LongFW<0b0101, 0b11, "srx", 0b001>;
+def PMULU_H_BEO : RVPBinary1LongFW<0b0110, 0b00, "pmulu.h.beo", 0b001>;
+def PDIFSUMU_B : RVPBinary1LongFW<0b0110, 0b10, "pdifsumu.b", 0b001>;
+def PDIFSUMAU_B : RVPBinary1LongFW<0b0111, 0b10, "pdifsumau.b", 0b001>;
+} // Predicates = [HasStdExtP]
+
+let DecoderNamespace = "RISCV32Only_",
+ Predicates = [HasStdExtP, IsRV32] in {
+def MUL_H01 : RVPBinary1LongFW<0b0010, 0b01, "mul.h01", 0b001>;
+def MACC_H01 : RVPBinary1LongFW<0b0011, 0b01, "macc.h01", 0b001>;
+
+def MULU_H01 : RVPBinary1LongFW<0b0110, 0b01, "mulu.h01", 0b001>;
+def MACCU_H01 : RVPBinary1LongFW<0b0111, 0b01, "maccu.h01", 0b001>;
+} // Predicates = [HasStdExtP, IsRV32]
+
+let Predicates = [HasStdExtP, IsRV64] in {
+def PMUL_W_HEO : RVPBinary1LongFW<0b0010, 0b01, "pmul.w.heo", 0b001>;
+def MUL_W01 : RVPBinary1LongFW<0b0010, 0b11, "mul.w01", 0b001>;
+def PMACC_W_HEO : RVPBinary1LongFW<0b0011, 0b01, "pmacc.w.heo", 0b001>;
+def MACC_W01 : RVPBinary1LongFW<0b0011, 0b11, "macc.w01", 0b001>;
+
+def PMULU_W_HEO : RVPBinary1LongFW<0b0110, 0b01, "pmulu.w.heo", 0b001>;
+def MULU_W01 : RVPBinary1LongFW<0b0110, 0b11, "mulu.w01", 0b001>;
+def PMACCU_W_HEO : RVPBinary1LongFW<0b0111, 0b01, "pmaccu.w.heo", 0b001>;
+def MACCU_W01 : RVPBinary1LongFW<0b0111, 0b11, "maccu.w01", 0b001>;
+} // Predicates = [HasStdExtP, IsRV64]
+
+
+let Predicates = [HasStdExtP] in {
+def PSH1ADD_H : RVPBinary1F0W<0b010, 0b00, "psh1add.h", 0b010>;
+def PSSH1SADD_H : RVPBinary1F0W<0b011, 0b00, "pssh1sadd.h", 0b010>;
+} // Predicates = [HasStdExtP]
+
+let DecoderNamespace = "RISCV32Only_",
+ Predicates = [HasStdExtP, IsRV32] in {
+def SSH1SADD : RVPBinary1F0W<0b010, 0b01, "ssh1sadd", 0b010>;
+} // Predicates = [HasStdExtP, IsRV32]
+let Predicates = [HasStdExtP, IsRV64] in {
+def PSH1ADD_W : RVPBinary1F0W<0b010, 0b01, "psh1add.w", 0b010>;
+def PSSH1SADD_W : RVPBinary1F0W<0b011, 0b01, "pssh1sadd.w", 0b010>;
+
+def UNZIP8P : RVPBinary1F0W<0b110, 0b00, "unzip8p", 0b010>;
+def UNZIP16P : RVPBinary1F0W<0b110, 0b01, "unzip16p", 0b010>;
+def UNZIP8HP : RVPBinary1F0W<0b110, 0b10, "unzip8hp", 0b010>;
+def UNZIP16HP : RVPBinary1F0W<0b110, 0b11, "unzip16hp", 0b010>;
+def ZIP8P : RVPBinary1F0W<0b111, 0b00, "zip8p", 0b010>;
+def ZIP16P : RVPBinary1F0W<0b111, 0b01, "zip16p", 0b010>;
+def ZIP8HP : RVPBinary1F0W<0b111, 0b10, "zip8hp", 0b010>;
+def ZIP16HP : RVPBinary1F0W<0b111, 0b11, "zip16hp", 0b010>;
+} // Predicates = [HasStdExtP, IsRV64]
+
+
+let Predicates = [HasStdExtP] in {
+def PMUL_H_BEE : RVPBinary1LongFW<0b0000, 0b00, "pmul.h.bee", 0b011>;
+def PMUL_H_BOO : RVPBinary1LongFW<0b0010, 0b00, "pmul.h.boo", 0b011>;
+
+def PMULU_H_BEE : RVPBinary1LongFW<0b0100, 0b00, "pmulu.h.bee", 0b011>;
+def PMULU_H_BOO : RVPBinary1LongFW<0b0110, 0b00, "pmulu.h.boo", 0b011>;
+
+def PMULSU_H_BEE : RVPBinary1LongFW<0b1100, 0b00, "pmulsu.h.bee", 0b011>;
+def PMULSU_H_BOO : RVPBinary1LongFW<0b1110, 0b00, "pmulsu.h.boo", 0b011>;
+} // Predicates = [HasStdExtP]
+let DecoderNamespace = "RISCV32Only_",
+ Predicates = [HasStdExtP, IsRV32] in {
+def MUL_H00 : RVPBinary1LongFW<0b0000, 0b01, "mul.h00", 0b011>;
+def MACC_H00 : RVPBinary1LongFW<0b0001, 0b01, "macc.h00", 0b011>;
+def MUL_H11 : RVPBinary1LongFW<0b0010, 0b01, "mul.h11", 0b011>;
+def MACC_H11 : RVPBinary1LongFW<0b0011, 0b01, "macc.h11", 0b011>;
+
+def MULU_H00 : RVPBinary1LongFW<0b0100, 0b01, "mulu.h00", 0b011>;
+def MACCU_H00 : RVPBinary1LongFW<0b0101, 0b01, "maccu.h00", 0b011>;
+def MULU_H11 : RVPBinary1LongFW<0b0110, 0b01, "mulu.h11", 0b011>;
+def MACCU_H11 : RVPBinary1LongFW<0b0111, 0b01, "maccu.h11", 0b011>;
+
+def MULSU_H00 : RVPBinary1LongFW<0b1100, 0b01, "mulsu.h00", 0b011>;
+def MACCSU_H00 : RVPBinary1LongFW<0b1101, 0b01, "maccsu.h00", 0b011>;
+def MULSU_H11 : RVPBinary1LongFW<0b1110, 0b01, "mulsu.h11", 0b011>;
+def MACCSU_H11 : RVPBinary1LongFW<0b1111, 0b01, "maccsu.h11", 0b011>;
+} // Predicates = [HasStdExtP, IsRV32]
+
+let Predicates = [HasStdExtP, IsRV64] in {
+def PMUL_W_BEE : RVPBinary1LongFW<0b0000, 0b01, "pmul.w.bee", 0b011>;
+def MUL_W00 : RVPBinary1LongFW<0b0000, 0b11, "mul.w00", 0b011>;
+def PMACC_W_HEE : RVPBinary1LongFW<0b0001, 0b01, "pmacc.w.hee", 0b011>;
+def MACC_W00 : RVPBinary1LongFW<0b0001, 0b11, "macc.w00", 0b011>;
+def PMUL_W_HOO : RVPBinary1LongFW<0b0010, 0b01, "pmul.w.hoo", 0b011>;
+def MUL_W11 : RVPBinary1LongFW<0b0010, 0b11, "mul.w11", 0b011>;
+def PMACC_W_HOO : RVPBinary1LongFW<0b0011, 0b01, "pmacc.w.hoo", 0b011>;
+def MACC_W11 : RVPBinary1LongFW<0b0011, 0b11, "macc.w11", 0b011>;
+
+def PMULU_W_HEE : RVPBinary1LongFW<0b0100, 0b01, "pmulu.w.hee", 0b011>;
+def MULU_W00 : RVPBinary1LongFW<0b0100, 0b11, "mulu.w00", 0b011>;
+def PMACCU_W_HEE : RVPBinary1LongFW<0b0101, 0b01, "pmaccu.w.hee", 0b011>;
+def MACCU_W00 : RVPBinary1LongFW<0b0101, 0b11, "maccu.w00", 0b011>;
+def PMULU_W_HOO : RVPBinary1LongFW<0b0110, 0b01, "pmulu.w.hoo", 0b011>;
+def MULU_W11 : RVPBinary1LongFW<0b0110, 0b11, "mulu.w11", 0b011>;
+def PMACCU_W_HOO : RVPBinary1LongFW<0b0111, 0b01, "pmaccu.w.hoo", 0b011>;
+def MACCU_W11 : RVPBinary1LongFW<0b0111, 0b11, "maccu.w11", 0b011>;
+
+def PMULSU_W_HEE : RVPBinary1LongFW<0b1100, 0b01, "pmulsu.w.hee", 0b011>;
+def MULSU_W00 : RVPBinary1LongFW<0b1100, 0b11, "mulsu.w00", 0b011>;
+def PMACCSU_W_HEE : RVPBinary1LongFW<0b1101, 0b01, "pmaccsu.w.hee", 0b011>;
+def MACCSU_W00 : RVPBinary1LongFW<0b1101, 0b11, "maccsu.w00", 0b011>;
+def PMULSU_W_HOO : RVPBinary1LongFW<0b1110, 0b01, "pmulsu.w.hoo", 0b011>;
+def MULSU_W11 : RVPBinary1LongFW<0b1110, 0b11, "mulsu.w11", 0b011>;
+def PMACCSU_W_HOO : RVPBinary1LongFW<0b1111, 0b01, "pmaccsu.w.hoo", 0b011>;
+def MACCSU_W11 : RVPBinary1LongFW<0b1111, 0b11, "maccsu.w11", 0b011>;
+} // Predicates = [HasStdExtP, IsRV64]
+
+
+let Predicates = [HasStdExtP] in {
+def PPACK_H : RVPBinary1F0W<0b000, 0b00, "ppack.h", 0b100>;
+def PPACKBT_H : RVPBinary1F0W<0b001, 0b00, "ppackbt.h", 0b100>;
+def PPACKTB_H : RVPBinary1F0W<0b010, 0b00, "ppacktb.h", 0b100>;
+def PPACKT_H : RVPBinary1F0W<0b011, 0b00, "ppackt.h", 0b100>;
+} // Predicates = [HasStdExtP]
+let DecoderNamespace = "RISCV32Only_",
+ Predicates = [HasStdExtP, IsRV32] in {
+def PACKBT : RVPBinary1F0W<0b001, 0b01, "packbt", 0b100>;
+def PACKTB : RVPBinary1F0W<0b010, 0b01, "packtb", 0b100>;
+def PACKT : RVPBinary1F0W<0b011, 0b01, "packt", 0b100>;
+} // Predicates = [HasStdExtP, IsRV32]
+
+let Predicates = [HasStdExtP, IsRV64] in {
+def PPACK_W : RVPBinary1F0W<0b000, 0b01, "ppack.w", 0b100>;
+def PPACKBT_W : RVPBinary1F0W<0b001, 0b01, "ppackbt.w", 0b100>;
+def PPACKBT : RVPBinary1F0W<0b001, 0b11, "ppackbt", 0b100>;
+def PPACKTB_W : RVPBinary1F0W<0b010, 0b01, "ppacktb.w", 0b100>;
+def PPACKTB : RVPBinary1F0W<0b010, 0b11, "ppacktb", 0b100>;
+def PPACKT_W : RVPBinary1F0W<0b011, 0b01, "ppackt.w", 0b100>;
+def PPACKT : RVPBinary1F0W<0b011, 0b11, "ppackt", 0b100>;
+} // Predicates = [HasStdExtP, IsRV64]
+
+
+let Predicates = [HasStdExtP] in {
+def PM2ADD_H : RVPBinary1LongFW<0b0000, 0b00, "pm2add.h", 0b101>;
+def PM4ADD_B : RVPBinary1LongFW<0b0000, 0b10, "pm4add.b", 0b101>;
+def PM2ADDA_H : RVPBinary1LongFW<0b0001, 0b00, "pm2adda.h", 0b101>;
+def PM4ADDA_B : RVPBinary1LongFW<0b0001, 0b10, "pm4adda.b", 0b101>;
+def PM2ADD_HX : RVPBinary1LongFW<0b0010, 0b00, "pm2add.hx", 0b101>;
+def PM2ADDA_HX : RVPBinary1LongFW<0b0011, 0b00, "pm2adda.hx", 0b101>;
+
+def PM2ADDU_H : RVPBinary1LongFW<0b0100, 0b00, "pm2addu.h", 0b101>;
+def PM4ADDU_B : RVPBinary1LongFW<0b0100, 0b10, "pm4addu.b", 0b101>;
+def PM2ADDAU_H : RVPBinary1LongFW<0b0101, 0b00, "pm2addau.h", 0b101>;
+def PM4ADDAU_B : RVPBinary1LongFW<0b0101, 0b10, "pm4addau.b", 0b101>;
+def PMQ2ADD_H : RVPBinary1LongFW<0b0110, 0b00, "pmq2add.h", 0b101>;
+def PMQR2ADD_H : RVPBinary1LongFW<0b0110, 0b10, "pmqr2add.h", 0b101>;
+def PMQ2ADDA_H : RVPBinary1LongFW<0b0111, 0b00, "pmq2adda.h", 0b101>;
+def PMQR2ADDA_H : RVPBinary1LongFW<0b0111, 0b10, "pmqr2adda.h", 0b101>;
+
+def PM2SUB_H : RVPBinary1LongFW<0b1000, 0b00, "pm2sub.h", 0b101>;
+def PM2SADD_H : RVPBinary1LongFW<0b1000, 0b10, "pm2sadd.h", 0b101>;
+def PM2SUBA_H : RVPBinary1LongFW<0b1001, 0b00, "pm2suba.h", 0b101>;
+def PM2SUB_HX : RVPBinary1LongFW<0b1010, 0b00, "pm2sub.hx", 0b101>;
+def PM2SADD_HX : RVPBinary1LongFW<0b1010, 0b10, "pm2sadd.hx", 0b101>;
+def PM2SUBA_HX : RVPBinary1LongFW<0b1011, 0b00, "pm2suba.hx", 0b101>;
+
+def PM2ADDSU_H : RVPBinary1LongFW<0b1100, 0b00, "pm2addsu.h", 0b101>;
+def PM4ADDSU_B : RVPBinary1LongFW<0b1100, 0b10, "pm4addsu.b", 0b101>;
+def PM2ADDASU_H : RVPBinary1LongFW<0b1101, 0b00, "pm2addasu.h", 0b101>;
+def PM4ADDASU_B : RVPBinary1LongFW<0b1101, 0b10, "pm4addasu.b", 0b101>;
+} // Predicates = [HasStdExtP]
+let DecoderNamespace = "RISCV32Only_",
+ Predicates = [HasStdExtP, IsRV32] in {
+def MQACC_H01 : RVPBinary1LongFW<0b0111, 0b00, "mqacc.h01", 0b101>;
+def MQRACC_H01 : RVPBinary1LongFW<0b0111, 0b10, "mqracc.h01", 0b101>;
+} // Predicates = [HasStdExtP, IsRV32]
+
+let Predicates = [HasStdExtP, IsRV64] in {
+def PM2ADD_W : RVPBinary1LongFW<0b0000, 0b01, "pm2add.w", 0b101>;
+def PM4ADD_H : RVPBinary1LongFW<0b0000, 0b11, "pm4add.h", 0b101>;
+def PM2ADDA_W : RVPBinary1LongFW<0b0001, 0b01, "pm2adda.w", 0b101>;
+def PM4ADDA_H : RVPBinary1LongFW<0b0001, 0b11, "pm4adda.h", 0b101>;
+def PM2ADD_WX : RVPBinary1LongFW<0b0010, 0b01, "pm2add.wx", 0b101>;
+def PM2ADDA_WX : RVPBinary1LongFW<0b0011, 0b01, "pm2adda.wx", 0b101>;
+
+def PM2ADDU_W : RVPBinary1LongFW<0b0100, 0b01, "pm2addu.w", 0b101>;
+def PM4ADDU_H : RVPBinary1LongFW<0b0100, 0b11, "pm4addu.h", 0b101>;
+def PM2ADDAU_W : RVPBinary1LongFW<0b0101, 0b01, "pm2addau.w", 0b101>;
+def PM4ADDAU_H : RVPBinary1LongFW<0b0101, 0b11, "pm4addau.h", 0b101>;
+def PMQ2ADD_W : RVPBinary1LongFW<0b0110, 0b01, "pmq2add.w", 0b101>;
+def PMQR2ADD_W : RVPBinary1LongFW<0b0110, 0b11, "pmqr2add.w", 0b101>;
+def PMQ2ADDA_W : RVPBinary1LongFW<0b0111, 0b01, "pmq2adda.w", 0b101>;
+def PMQR2ADDA_W : RVPBinary1LongFW<0b0111, 0b11, "pmqr2adda.w", 0b101>;
+
+def PM2SUB_W : RVPBinary1LongFW<0b1000, 0b01, "pm2sub.w", 0b101>;
+def PM2SUBA_W : RVPBinary1LongFW<0b1001, 0b01, "pm2suba.w", 0b101>;
+def PM2SUB_WX : RVPBinary1LongFW<0b1010, 0b01, "pm2sub.wx", 0b101>;
+def PM2SUBA_WX : RVPBinary1LongFW<0b1011, 0b01, "pm2suba.wx", 0b101>;
+
+def PM2ADDSU_W : RVPBinary1LongFW<0b1100, 0b01, "pm2addsu.w", 0b101>;
+def PM4ADDSU_H : RVPBinary1LongFW<0b1100, 0b11, "pm4addsu.h", 0b101>;
+def PM2ADDASU_W : RVPBinary1LongFW<0b1101, 0b01, "pm2addasu.w", 0b101>;
+def PM4ADDASU_H : RVPBinary1LongFW<0b1101, 0b11, "pm4addasu.h", 0b101>;
+
+def PMQACC_W_HEO : RVPBinary1LongFW<0b1111, 0b00, "pmqacc.w.heo", 0b101>;
+def MQACC_W01 : RVPBinary1LongFW<0b1111, 0b01, "mqacc.w01", 0b101>;
+def PMQRACC_W_HEO : RVPBinary1LongFW<0b1111, 0b10, "pmqracc.w.heo", 0b101>;
+def MQRACC_W01 : RVPBinary1LongFW<0b1111, 0b11, "mqracc.w01", 0b101>;
+} // Predicates = [HasStdExtP, IsRV64]
+
+let Predicates = [HasStdExtP] in {
+def PAS_HX : RVPBinary1LongFW<0b0000, 0b00, "pas.hx", 0b110>;
+def PSA_HX : RVPBinary1LongFW<0b0000, 0b10, "psa.hx", 0b110>;
+def PSAS_HX : RVPBinary1LongFW<0b0010, 0b00, "psas.hx", 0b110>;
+def PSSA_HX : RVPBinary1LongFW<0b0010, 0b10, "pssa.hx", 0b110>;
+
+def PMSEQ_H : RVPBinary1LongFW<0b1000, 0b00, "pmseq.h", 0b110>;
+def PMSEQ_B : RVPBinary1LongFW<0b1000, 0b10, "pmseq.b", 0b110>;
+def PMSLT_H : RVPBinary1LongFW<0b1010, 0b00, "pmslt.h", 0b110>;
+def PMSLT_B : RVPBinary1LongFW<0b1010, 0b10, "pmslt.b", 0b110>;
+def PMSLTU_H : RVPBinary1LongFW<0b1011, 0b00, "pmsltu.h", 0b110>;
+def PMSLTU_B : RVPBinary1LongFW<0b1011, 0b10, "pmsltu.b", 0b110>;
+
+def PMIN_H : RVPBinary1LongFW<0b1100, 0b00, "pmin.h", 0b110>;
+def PMIN_B : RVPBinary1LongFW<0b1100, 0b10, "pmin.b", 0b110>;
+def PMINU_H : RVPBinary1LongFW<0b1101, 0b00, "pminu.h", 0b110>;
+def PMINU_B : RVPBinary1LongFW<0b1101, 0b10, "pminu.b", 0b110>;
+def PMAX_H : RVPBinary1LongFW<0b1110, 0b00, "pmax.h", 0b110>;
+def PMAX_B : RVPBinary1LongFW<0b1110, 0b10, "pmax.b", 0b110>;
+def PMAXU_H : RVPBinary1LongFW<0b1111, 0b00, "pmaxu.h", 0b110>;
+def PMAXU_B : RVPBinary1LongFW<0b1111, 0b10, "pmaxu.b", 0b110>;
+} // Predicates = [HasStdExtP]
+let DecoderNamespace = "RISCV32Only_",
+ Predicates = [HasStdExtP, IsRV32] in {
+def MSEQ : RVPBinary1LongFW<0b1000, 0b01, "mseq", 0b110>;
+def MSLT : RVPBinary1LongFW<0b1010, 0b01, "mslt", 0b110>;
+def MSLTU : RVPBinary1LongFW<0b1011, 0b01, "msltu", 0b110>;
+} // Predicates = [HasStdExtP, IsRV32]
+let Predicates = [HasStdExtP, IsRV64] in {
+def PAS_WX : RVPBinary1LongFW<0b0000, 0b01, "pas.wx", 0b110>;
+def PSA_WX : RVPBinary1LongFW<0b0000, 0b11, "psa.wx", 0b110>;
+def PSAS_WX : RVPBinary1LongFW<0b0010, 0b01, "psas.wx", 0b110>;
+def PSSA_WX : RVPBinary1LongFW<0b0010, 0b11, "pssa.wx", 0b110>;
+def PAAS_WX : RVPBinary1LongFW<0b0011, 0b01, "paas.wx", 0b110>;
+def PASA_WX : RVPBinary1LongFW<0b0011, 0b11, "pasa.wx", 0b110>;
+
+def PMSEQ_W : RVPBinary1LongFW<0b1000, 0b01, "pmseq.w", 0b110>;
+def PMSLT_W : RVPBinary1LongFW<0b1010, 0b01, "pmslt.w", 0b110>;
+def PMSLTU_W : RVPBinary1LongFW<0b1011, 0b01, "pmsltu.w", 0b110>;
+
+def PMIN_W : RVPBinary1LongFW<0b1100, 0b01, "pmin.w", 0b110>;
+def PMINU_W : RVPBinary1LongFW<0b1101, 0b01, "pminu.w", 0b110>;
+def PMAX_W : RVPBinary1LongFW<0b1110, 0b01, "pmax.w", 0b110>;
+def PMAXU_W : RVPBinary1LongFW<0b1111, 0b01, "pmaxu.w", 0b110>;
+} // Predicates = [HasStdExtP, IsRV64]
+
+
+let Predicates = [HasStdExtP] in {
+def PMULH_H : RVPBinary1LongFW<0b0000, 0b00, "pmulh.h", 0b111>;
+def PMULHR_H : RVPBinary1LongFW<0b0000, 0b10, "pmulhr.h", 0b111>;
+def PMHACC_H : RVPBinary1LongFW<0b0001, 0b00, "pmhacc.h", 0b111>;
+def PMHRACC_H : RVPBinary1LongFW<0b0001, 0b10, "pmhracc.h", 0b111>;
+def PMULHU_H : RVPBinary1LongFW<0b0010, 0b00, "pmulhu.h", 0b111>;
+def PMULHRU_H : RVPBinary1LongFW<0b0010, 0b10, "pmulhru.h", 0b111>;
+def PMHACCU_H : RVPBinary1LongFW<0b0011, 0b00, "pmhaccu.h", 0b111>;
+def PMHRACCU_H : RVPBinary1LongFW<0b0011, 0b10, "pmhraccu.h", 0b111>;
+
+def PMULH_H_BE : RVPBinary1LongFW<0b0100, 0b00, "pmulh.h.be", 0b111>;
+def PMULHSU_H_BE : RVPBinary1LongFW<0b0100, 0b10, "pmulhsu.h.be", 0b111>;
+def PMHACCU_H_BE : RVPBinary1LongFW<0b0101, 0b00, "pmhaccu.h.be", 0b111>;
+def PMHACCSU_H_BE : RVPBinary1LongFW<0b0101, 0b10, "pmhaccsu.h.be", 0b111>;
+def PMULH_H_BO : RVPBinary1LongFW<0b0110, 0b00, "pmulh.h.bo", 0b111>;
+def PMULHSU_H_BO : RVPBinary1LongFW<0b0110, 0b10, "pmulhsu.h.bo", 0b111>;
+def PMHACC_H_BO : RVPBinary1LongFW<0b0111, 0b00, "pmhacc.h.bo", 0b111>;
+def PMHACCSU_H_BO : RVPBinary1LongFW<0b0111, 0b10, "pmhaccsu.h.bo", 0b111>;
+
+def PMULHSU_H : RVPBinary1LongFW<0b1000, 0b00, "pmulhsu.h", 0b111>;
+def PMULHRSU_H : RVPBinary1LongFW<0b1000, 0b10, "pmulhrsu.h", 0b111>;
+def PMHACCSU_H : RVPBinary1LongFW<0b1001, 0b00, "pmhaccsu.h", 0b111>;
+def PMHRACCSU_H : RVPBinary1LongFW<0b1001, 0b10, "pmhraccsu.h", 0b111>;
+def PMULQ_H : RVPBinary1LongFW<0b1010, 0b00, "pmulq.h", 0b111>;
+def PMULQR_H : RVPBinary1LongFW<0b1010, 0b10, "pmulqr.h", 0b111>;
+} // Predicates = [HasStdExtP]
+
+let DecoderNamespace = "RISCV32Only_",
+ Predicates = [HasStdExtP, IsRV32] in {
+def MULHR : RVPBinary1LongFW<0b0000, 0b11, "mulhr", 0b111>;
+def MHACC : RVPBinary1LongFW<0b0001, 0b01, "mhacc", 0b111>;
+def MHRACC : RVPBinary1LongFW<0b0001, 0b11, "mhracc", 0b111>;
+def MULHRU : RVPBinary1LongFW<0b0010, 0b11, "mulhru", 0b111>;
+def MHACCU : RVPBinary1LongFW<0b0011, 0b01, "mhaccu", 0b111>;
+def MHRACCU : RVPBinary1LongFW<0b0011, 0b11, "mhraccu", 0b111>;
+
+def MULH_H0 : RVPBinary1LongFW<0b0100, 0b01, "mulh.h0", 0b111>;
+def MULHSU_H0 : RVPBinary1LongFW<0b0100, 0b11, "mulhsu.h0", 0b111>;
+def MHACC_H0 : RVPBinary1LongFW<0b0101, 0b01, "mhacc.h0", 0b111>;
+def MHACCSU_H0 : RVPBinary1LongFW<0b0101, 0b11, "mhaccsu.h0", 0b111>;
+def MULH_H1 : RVPBinary1LongFW<0b0110, 0b01, "mulh.h1", 0b111>;
+def MULHSU_H1 : RVPBinary1LongFW<0b0110, 0b11, "mulhsu.h1", 0b111>;
+def MHACC_H1 : RVPBinary1LongFW<0b0111, 0b01, "mhacc.h1", 0b111>;
+def MHACCSU_H1 : RVPBinary1LongFW<0b0111, 0b11, "mhaccsu.h1", 0b111>;
+
+def MULHRSU_H : RVPBinary1LongFW<0b1000, 0b11, "mulhrsu.h", 0b111>;
+def MHACCSU : RVPBinary1LongFW<0b1001, 0b01, "mhaccsu", 0b111>;
+def MHRACCSU : RVPBinary1LongFW<0b1001, 0b11, "mhraccsu", 0b111>;
+def MULQ : RVPBinary1LongFW<0b1010, 0b01, "mulq", 0b111>;
+def MULQR : RVPBinary1LongFW<0b1010, 0b11, "mulqr", 0b111>;
+
+def MQACC_H00 : RVPBinary1LongFW<0b1101, 0b00, "mqacc.h00", 0b111>;
+def MQRACC_H00 : RVPBinary1LongFW<0b1101, 0b10, "mqracc.h00", 0b111>;
+def MQACC_H11 : RVPBinary1LongFW<0b1111, 0b00, "mqacc.h11", 0b111>;
+def MQRACC_H11 : RVPBinary1LongFW<0b1111, 0b10, "mqracc.h11", 0b111>;
+} // Predicates = [HasStdExtP, IsRV32]
+
+let Predicates = [HasStdExtP, IsRV64] in {
+def PMULH_W : RVPBinary1LongFW<0b0000, 0b01, "pmulh.w", 0b111>;
+def PMULHR_W : RVPBinary1LongFW<0b0000, 0b11, "pmulhr.w", 0b111>;
+def PMHACC_W : RVPBinary1LongFW<0b0001, 0b01, "pmhacc.w", 0b111>;
+def PMHRACC_W : RVPBinary1LongFW<0b0001, 0b11, "pmhracc.w", 0b111>;
+def PMULHU_W : RVPBinary1LongFW<0b0010, 0b01, "pmulhu.w", 0b111>;
+def PMULHRU_W : RVPBinary1LongFW<0b0010, 0b11, "pmulhru.w", 0b111>;
+def PMHACCU_W : RVPBinary1LongFW<0b0011, 0b01, "pmhaccu.w", 0b111>;
+def PMHRACCU_W : RVPBinary1LongFW<0b0011, 0b11, "pmhraccu.w", 0b111>;
+
+def PMULH_W_HE : RVPBinary1LongFW<0b0100, 0b01, "pmulh.w.he", 0b111>;
+def PMULHSU_W_HE : RVPBinary1LongFW<0b0100, 0b11, "pmulhsu.w.he", 0b111>;
+def PMHACC_W_HE : RVPBinary1LongFW<0b0101, 0b01, "pmhacc.w.he", 0b111>;
+def PMHACCSU_W_HE : RVPBinary1LongFW<0b0101, 0b11, "pmhaccsu.w.he", 0b111>;
+def PMULH_W_HO : RVPBinary1LongFW<0b0110, 0b01, "pmulh.w.ho", 0b111>;
+def PMULHSU_W_HO : RVPBinary1LongFW<0b0110, 0b11, "pmulhsu.w.ho", 0b111>;
+def PMHACC_W_HO : RVPBinary1LongFW<0b0111, 0b01, "pmhacc.w.ho", 0b111>;
+def PMHACCSU_W_HO : RVPBinary1LongFW<0b0111, 0b11, "pmhaccsu.w.ho", 0b111>;
+
+def PMULHSU_W : RVPBinary1LongFW<0b1000, 0b01, "pmulhsu.w", 0b111>;
+def PMULHRSU_W : RVPBinary1LongFW<0b1000, 0b11, "pmulhrsu.w", 0b111>;
+def PMHACCSU_W : RVPBinary1LongFW<0b1001, 0b01, "pmhaccsu.w", 0b111>;
+def PMHRACCSU_W : RVPBinary1LongFW<0b1001, 0b11, "pmhraccsu.w", 0b111>;
+def PMULQ_W : RVPBinary1LongFW<0b1010, 0b01, "pmulq.w", 0b111>;
+def PMULQR_W : RVPBinary1LongFW<0b1010, 0b11, "pmulqr.w", 0b111>;
+
+def PMQACC_W_HEE : RVPBinary1LongFW<0b1101, 0b00, "pmqacc.w.hee", 0b111>;
+def MQACC_W00 : RVPBinary1LongFW<0b1101, 0b01, "mqacc.w00", 0b111>;
+def PMQRACC_W_HEE : RVPBinary1LongFW<0b1101, 0b10, "pmqracc.w.hee", 0b111>;
+def MQRACC_W00 : RVPBinary1LongFW<0b1101, 0b11, "mqracc.w00", 0b111>;
+def PMQACC_W_HOO : RVPBinary1LongFW<0b1111, 0b00, "pmqacc.w.hoo", 0b111>;
+def MQACC_W11 : RVPBinary1LongFW<0b1111, 0b01, "mqacc.w11", 0b111>;
+def PMQRACC_W_HOO : RVPBinary1LongFW<0b1111, 0b10, "pmqracc.w.hoo", 0b111>;
+def MQRACC_W11 : RVPBinary1LongFW<0b1111, 0b11, "mqracc.w11", 0b111>;
+} // Predicates = [HasStdExtP, IsRV64]
+
+
+let Predicates = [HasStdExtP, IsRV32] in {
+def PWSLLI_B : RVPUnary0F0Rdp<0b000, 0b0010000, "pwslli.b">;
+def PWSLLI_H : RVPUnary0F0Rdp<0b001, 0b0100000, "pwslli.h">;
+def WSLLI : RVPUnary0F0Rdp<0b010, 0b1000000, "wslli">;
+
+def PWSLAI_B : RVPUnary0F0Rdp<0b100, 0b0010000, "pwslai.b">;
+def PWSLAI_H : RVPUnary0F0Rdp<0b100, 0b0100000, "pwslai.h">;
+def WSLAI : RVPUnary0F0Rdp<0b100, 0b1000000, "wslai">;
+
+def PLI_DH : RVPUnaryImm9<0b0011000, OPC_OP_IMM_32, "pli.dh", GPRPairRV32>;
+def PLI_DB : RVPUnaryImm8<0b00110100, OPC_OP_IMM_32, "pli.db", GPRPairRV32>;
+def PLUI_DH : RVPUnaryImm9<0b0111000, OPC_OP_IMM_32, "plui.dh", GPRPairRV32>;
+
+
+def PWSLLI_B_B0 : RVPBinary0F1WRdp<0b000, 0b00, "pwslli.b.b0">;
+def PWSLL_H_H0 : RVPBinary0F1WRdp<0b000, 0b01, "pwsll.h.h0">;
+def WSLL : RVPBinary0F1WRdp<0b000, 0b11, "wsll">;
+
+def PWSLA_B_B0 : RVPBinary0F1WRdp<0b100, 0b00, "pwsla.b.b0">;
+def PWSLA_H_H0 : RVPBinary0F1WRdp<0b100, 0b01, "pwsla.h.h0">;
+def WSLA : RVPBinary0F1WRdp<0b100, 0b11, "wsla">;
+def WZIP8P : RVPBinary0F1WRdp<0b111, 0b00, "wzip8p">;
+def WZIP16P : RVPBinary0F1WRdp<0b111, 0b01, "wzip16p">;
+
+def PWADD_H : RVPBinary0LongFW<0b0000, 0b00, "pwadd.h">;
+def WADD : RVPBinary0LongFW<0b0000, 0b01, "wadd">;
+def PWADD_B : RVPBinary0LongFW<0b0000, 0b10, "pwadd.b">;
+def PW2WADD_H : RVPBinary0LongFW<0b0000, 0b11, "pw2wadd.h">;
+def PWADDA_H : RVPBinary0LongFW<0b0001, 0b00, "pwadda.h">;
+def WADDA : RVPBinary0LongFW<0b0001, 0b01, "wadda">;
+def PWADDA_B : RVPBinary0LongFW<0b0001, 0b10, "pwadda.b">;
+def PW2WADDA_H : RVPBinary0LongFW<0b0001, 0b11, "pw2wadda.h">;
+def PWADDU_H : RVPBinary0LongFW<0b0010, 0b00, "pwaddu.h">;
+def WADDU : RVPBinary0LongFW<0b0010, 0b01, "waddu">;
+def PWADDU_B : RVPBinary0LongFW<0b0010, 0b10, "pwaddu.b">;
+def PW2WADD_HX : RVPBinary0LongFW<0b0010, 0b11, "pw2wadd.hx">;
+def PWADDAU_H : RVPBinary0LongFW<0b0011, 0b00, "pwaddau.h">;
+def WADDAU : RVPBinary0LongFW<0b0011, 0b01, "waddau">;
+def PWADDAU_B : RVPBinary0LongFW<0b0011, 0b10, "pwaddau.b">;
+def PW2WADDA_HX: RVPBinary0LongFW<0b0011, 0b11, "pw2wadda.hx">;
+
+def PWMUL_H : RVPBinary0LongFW<0b0100, 0b00, "pwmul.h">;
+def WMUL : RVPBinary0LongFW<0b0100, 0b01, "wmul">;
+def PWMUL_B : RVPBinary0LongFW<0b0100, 0b10, "pwmul.b">;
+def PW2WADDU_H : RVPBinary0LongFW<0b0100, 0b11, "pw2waddu.h">;
+def PWMACC_H : RVPBinary0LongFW<0b0101, 0b00, "pwmacc.h">;
+def WMACC : RVPBinary0LongFW<0b0101, 0b01, "wmacc">;
+def PM2WADDAU_H : RVPBinary0LongFW<0b0101, 0b11, "pm2waddau.h">;
+def PWMULU_H : RVPBinary0LongFW<0b0110, 0b00, "pwmulu.h">;
+def WMULU : RVPBinary0LongFW<0b0110, 0b01, "wmulu">;
+def PWMULU_B : RVPBinary0LongFW<0b0110, 0b10, "pwmulu.b">;
+def PWMACCU_H : RVPBinary0LongFW<0b0111, 0b00, "pwmaccu.h">;
+def WMACCU : RVPBinary0LongFW<0b0111, 0b01, "wmaccu">;
+
+def PWSUB_H : RVPBinary0LongFW<0b1000, 0b00, "pwsub.h">;
+def WSUB : RVPBinary0LongFW<0b1000, 0b01, "wsub">;
+def PWSUB_B : RVPBinary0LongFW<0b1000, 0b10, "pwsub.b">;
+def PW2WSUB_H : RVPBinary0LongFW<0b1000, 0b11, "pw2wsub.h">;
+def PWSUBA_H : RVPBinary0LongFW<0b1001, 0b00, "pwsuba.h">;
+def WSUBA : RVPBinary0LongFW<0b1001, 0b01, "wsuba">;
+def PWSUBA_B : RVPBinary0LongFW<0b1001, 0b10, "pwsuba.b">;
+def PW2WSUBA_H : RVPBinary0LongFW<0b1001, 0b11, "pw2wsuba.h">;
+def PWSUBU_H : RVPBinary0LongFW<0b1010, 0b00, "pwsubu.h">;
+def WSUBU : RVPBinary0LongFW<0b1010, 0b01, "wsubu">;
+def PWSUBU_B : RVPBinary0LongFW<0b1010, 0b10, "pwsubu.b">;
+def PW2WSUB_HX : RVPBinary0LongFW<0b1010, 0b11, "pw2wsub.hx">;
+def PWSUBAU_H : RVPBinary0LongFW<0b1011, 0b00, "pwsubau.h">;
+def WSUBAU : RVPBinary0LongFW<0b1011, 0b01, "wsubau">;
+def PWSUBAU_B : RVPBinary0LongFW<0b1011, 0b10, "pwsubau.b">;
+def PW2WSUBA_HX: RVPBinary0LongFW<0b1011, 0b11, "pw2wsuba.hx">;
+
+def PWMULSU_H : RVPBinary0LongFW<0b1100, 0b00, "pwmulsu.h">;
+def WMULSU : RVPBinary0LongFW<0b1100, 0b01, "wmulsu">;
+def PWMULSU_B : RVPBinary0LongFW<0b1100, 0b10, "pwmulsu.b">;
+def PM2WADDSU_H : RVPBinary0LongFW<0b1100, 0b11, "pm2waddsu.h">;
+def PWMACCSU_H : RVPBinary0LongFW<0b1101, 0b00, "pwmaccsu.h">;
+def WMACCSU : RVPBinary0LongFW<0b1101, 0b01, "wmaccsu">;
+def PM2WADDASU_H : RVPBinary0LongFW<0b1101, 0b11, "pm2waddasu.h">;
+def PMQWACC_H : RVPBinary0LongFW<0b1111, 0b00, "pmqwacc.h">;
+def PMQWACC : RVPBinary0LongFW<0b1111, 0b01, "pmqwacc">;
+def PMQRWACC_H : RVPBinary0LongFW<0b1111, 0b10, "pmqrwacc.h">;
+def PMQRWACC : RVPBinary0LongFW<0b1111, 0b11, "pmqrwacc">;
+
+def PREDSUM_DH : RVPBinary0F1WRs1p<0b000, 0b00, "predsum.dh">;
+def PREDSUM_DB : RVPBinary0F1WRs1p<0b000, 0b10, "predsum.db">;
+def PREDSUMU_DH : RVPBinary0F1WRs1p<0b011, 0b00, "predsumu.dh">;
+def PREDSUMU_DB : RVPBinary0F1WRs1p<0b011, 0b10, "predsumu.db">;
+
+def PNSRLI_B : RVPUnary0F0Rs1p<0b000, 0b0010000, "pnsrli.b">;
+def PNSRLI_H : RVPUnary0F0Rs1p<0b000, 0b0100000, "pnsrli.h">;
+def NSRLI : RVPUnary0F0Rs1p<0b000, 0b1000000, "nsrli">;
+def PNCLIPIU_B : RVPUnary0F0Rs1p<0b010, 0b0010000, "pnclipiu.b">;
+def PNCLIPIU_H : RVPUnary0F0Rs1p<0b010, 0b0100000, "pnclipiu.h">;
+def NCLIPIU : RVPUnary0F0Rs1p<0b010, 0b1000000, "nclipiu">;
+def PNCLIPRIU_B : RVPUnary0F0Rs1p<0b011, 0b0010000, "pnclipriu.b">;
+def PNCLIPRIU_H : RVPUnary0F0Rs1p<0b011, 0b0100000, "pnclipriu.h">;
+def NCLIPRIU : RVPUnary0F0Rs1p<0b011, 0b1000000, "nclipriu">;
+
+def PNSRAI_B : RVPUnary0F0Rs1p<0b100, 0b0010000, "pnsrai.b">;
+def PNSRAI_H : RVPUnary0F0Rs1p<0b100, 0b0100000, "pnsrai.h">;
+def NSRAI : RVPUnary0F0Rs1p<0b100, 0b1000000, "nsrai">;
+def PNSARI_B : RVPUnary0F0Rs1p<0b101, 0b0010000, "pnsari.b">;
+def PNSARI_H : RVPUnary0F0Rs1p<0b101, 0b0100000, "pnsari.h">;
+def NSARI : RVPUnary0F0Rs1p<0b101, 0b1000000, "nsari">;
+def PNCLIPI_B : RVPUnary0F0Rs1p<0b110, 0b0010000, "pnclipi.b">;
+def PNCLIPI_H : RVPUnary0F0Rs1p<0b110, 0b0100000, "pnclipi.h">;
+def NCLIPI : RVPUnary0F0Rs1p<0b110, 0b1000000, "nclipi">;
+def PNCLIPRI_B : RVPUnary0F0Rs1p<0b111, 0b0010000, "pnclipri.b">;
+def PNCLIPRI_H : RVPUnary0F0Rs1p<0b111, 0b0100000, "pnclipri.h">;
+def NCLIPRI : RVPUnary0F0Rs1p<0b111, 0b1000000, "nclipri">;
+
+def PNSRL_B_B0 : RVPBinary0F1WRs1p<0b000, 0b00, "pnsrl.b.b0", 0b1>;
+def PNSRL_H_H0 : RVPBinary0F1WRs1p<0b000, 0b01, "pnsrl.h.h0", 0b1>;
+def NSRL : RVPBinary0F1WRs1p<0b000, 0b11, "nsrl", 0b1>;
+def PNCLIPU_B_B0 : RVPBinary0F1WRs1p<0b010, 0b00, "pnclipu.b.b0", 0b1>;
+def PNCLIPU_H_H0 : RVPBinary0F1WRs1p<0b010, 0b01, "pnclipu.h.h0", 0b1>;
+def NCLIPU : RVPBinary0F1WRs1p<0b010, 0b11, "nclipu", 0b1>;
+def PNCLIPRU_B_B0 : RVPBinary0F1WRs1p<0b011, 0b00, "pnclipru.b.b0", 0b1>;
+def PNCLIPRU_H_H0 : RVPBinary0F1WRs1p<0b011, 0b01, "pnclipru.h.h0", 0b1>;
+def NCLIPRU : RVPBinary0F1WRs1p<0b011, 0b11, "nclipru", 0b1>;
+
+def PNSRA_B_B0 : RVPBinary0F1WRs1p<0b100, 0b00, "pnsra.b.b0", 0b1>;
+def PNSRA_H_H0 : RVPBinary0F1WRs1p<0b100, 0b01, "pnsra.h.h0", 0b1>;
+def NSRA : RVPBinary0F1WRs1p<0b100, 0b11, "nsra", 0b1>;
+def PNSRAR_B_B0 : RVPBinary0F1WRs1p<0b101, 0b00, "pnsrar.b.b0", 0b1>;
+def PNSRAR_H_H0 : RVPBinary0F1WRs1p<0b101, 0b01, "pnsrar.h.h0", 0b1>;
+def NSRAR : RVPBinary0F1WRs1p<0b101, 0b11, "nsrar", 0b1>;
+def PNCLIP_B_B0 : RVPBinary0F1WRs1p<0b110, 0b00, "pnclip.b.b0", 0b1>;
+def PNCLIP_H_H0 : RVPBinary0F1WRs1p<0b110, 0b01, "pnclip.h.h0", 0b1>;
+def NCLIP : RVPBinary0F1WRs1p<0b110, 0b11, "nclip", 0b1>;
+def PNCLIPR_B_B0 : RVPBinary0F1WRs1p<0b111, 0b00, "pnclipr.b.b0", 0b1>;
+def PNCLIPR_H_H0 : RVPBinary0F1WRs1p<0b111, 0b01, "pnclipr.h.h0", 0b1>;
+def NCLIPR : RVPBinary0F1WRs1p<0b111, 0b11, "nclipr", 0b1>;
+
+
+def PSLLI_DB : RVPUnary0F0Rs1pRdp<0b000, 0b0001000, "pslli.db">;
+def PSLLI_DH : RVPUnary0F0Rs1pRdp<0b000, 0b0010000, "pslli.dh">;
+def PSLLI_DW : RVPUnary0F0Rs1pRdp<0b000, 0b0100000, "pslli.dw">;
+
+def PSSLAI_DH : RVPUnary0F0Rs1pRdp<0b101, 0b0010000, "psslai.dh">;
+def PSSLAI_DW : RVPUnary0F0Rs1pRdp<0b101, 0b0100000, "psslai.dw">;
+
+def PSEXTB_DH : RVPUnaryWUFRs1pRdp<0b00, 0b00100, "psextb.dh">;
+def PSEXTB_DW : RVPUnaryWUFRs1pRdp<0b01, 0b00100, "psextb.dw">;
+def PSEXTW_DW : RVPUnaryWUFRs1pRdp<0b01, 0b00101, "psextw.dw">;
+def PSABS_DH : RVPUnaryWUFRs1pRdp<0b00, 0b00111, "psabs.dh">;
+def PSABS_DB : RVPUnaryWUFRs1pRdp<0b10, 0b00111, "psabs.db">;
+
+def PSLL_DH_H0 : RVPBinary0F1WRs1pRdp<0b000, 0b00, "psll.dh.h0">;
+def PSLL_DW_W : RVPBinary0F1WRs1pRdp<0b000, 0b01, "psll.dw.w">;
+def PSLL_DB_B0 : RVPBinary0F1WRs1pRdp<0b000, 0b10, "psll.db.b0">;
+def PADD_DH_H0 : RVPBinary0F1WRs1pRdp<0b001, 0b00, "padd.dh.h0">;
+def PADD_DW_W : RVPBinary0F1WRs1pRdp<0b001, 0b01, "padd.dw.w">;
+def PADD_DB_B0 : RVPBinary0F1WRs1pRdp<0b001, 0b10, "padd.db.b0">;
+
+def PSSHA_DH_H0 : RVPBinary0F1WRs1pRdp<0b110, 0b00, "pssha.dh.h0">;
+def PSSHA_DW_W : RVPBinary0F1WRs1pRdp<0b110, 0b01, "pssha.dw.w">;
+def PSSHAR_DH_H0 : RVPBinary0F1WRs1pRdp<0b111, 0b00, "psshar.dh.h0">;
+def PSSHAR_DW_W : RVPBinary0F1WRs1pRdp<0b111, 0b01, "psshar.dw.w">;
+
+def PSRLI_DB : RVPUnary0F0Rs1pRdp<0b000, 0b0001000, "psrli.db", 0b1>;
+def PSRLI_DH : RVPUnary0F0Rs1pRdp<0b000, 0b0010000, "psrli.dh", 0b1>;
+def PSRLI_DW : RVPUnary0F0Rs1pRdp<0b000, 0b0100000, "psrli.dw", 0b1>;
+def PUSATI_DH : RVPUnary0F0Rs1pRdp<0b010, 0b0010000, "pusati.dh", 0b1>;
+def PUSATI_DW : RVPUnary0F0Rs1pRdp<0b010, 0b0100000, "pusati.dw", 0b1>;
+
+def PSRAI_DB : RVPUnary0F0Rs1pRdp<0b100, 0b0001000, "psrai.db", 0b1>;
+def PSRAI_DH : RVPUnary0F0Rs1pRdp<0b100, 0b0010000, "psrai.dh", 0b1>;
+def PSRAI_DW : RVPUnary0F0Rs1pRdp<0b100, 0b0100000, "psrai.dw", 0b1>;
+def PSRARI_DH : RVPUnary0F0Rs1pRdp<0b101, 0b0010000, "psrari.dh", 0b1>;
+def PSRARI_DW : RVPUnary0F0Rs1pRdp<0b101, 0b0100000, "psrari.dw", 0b1>;
+def PSATI_DH : RVPUnary0F0Rs1pRdp<0b110, 0b0010000, "psati.dh", 0b1>;
+def PSATI_DW : RVPUnary0F0Rs1pRdp<0b110, 0b0100000, "psati.dw", 0b1>;
+
+def PSRL_DH_H0 :RVPBinary0F1WRs1pRdp<0b000, 0b00, "psrl.dh.h0", 0b1>;
+def PSRL_DW_W :RVPBinary0F1WRs1pRdp<0b000, 0b01, "psrl.dw.w", 0b1>;
+def PSRL_DB_B0 :RVPBinary0F1WRs1pRdp<0b000, 0b10, "psrl.db.b0", 0b1>;
+
+def PSRA_DH_H0 :RVPBinary0F1WRs1pRdp<0b100, 0b00, "psra.dh.h0", 0b1>;
+def PSRA_DW_W :RVPBinary0F1WRs1pRdp<0b100, 0b01, "psra.dw.w", 0b1>;
+def PSRA_DB_B0 :RVPBinary0F1WRs1pRdp<0b100, 0b10, "psra.db.b0", 0b1>;
+
+def PADD_DH : RVPBinary1FWRs2pRs1pRdp<0b0000, 0b00, "padd.dh">;
+def PADD_DW : RVPBinary1FWRs2pRs1pRdp<0b0000, 0b01, "padd.dw">;
+def PADD_DB : RVPBinary1FWRs2pRs1pRdp<0b0000, 0b10, "padd.db">;
+def ADDD : RVPBinary1FWRs2pRs1pRdp<0b0000, 0b11, "addd">;
+def PSADD_DH : RVPBinary1FWRs2pRs1pRdp<0b0010, 0b00, "psadd.dh">;
+def PSADD_DW : RVPBinary1FWRs2pRs1pRdp<0b0010, 0b01, "psadd.dw">;
+def PSADD_DB : RVPBinary1FWRs2pRs1pRdp<0b0010, 0b10, "psadd.db">;
+def PAADD_DH : RVPBinary1FWRs2pRs1pRdp<0b0011, 0b00, "paadd.dh">;
+def PAADD_DW : RVPBinary1FWRs2pRs1pRdp<0b0011, 0b01, "paadd.dw">;
+def PAADD_DB : RVPBinary1FWRs2pRs1pRdp<0b0011, 0b10, "paadd.db">;
+
+def PSADDU_DH : RVPBinary1FWRs2pRs1pRdp<0b0110, 0b00, "psaddu.dh">;
+def PSADDU_DW : RVPBinary1FWRs2pRs1pRdp<0b0110, 0b01, "psaddu.dw">;
+def PSADDU_DB : RVPBinary1FWRs2pRs1pRdp<0b0110, 0b10, "psaddu.db">;
+def PAADDU_DH : RVPBinary1FWRs2pRs1pRdp<0b0111, 0b00, "paaddu.dh">;
+def PAADDU_DW : RVPBinary1FWRs2pRs1pRdp<0b0111, 0b01, "paaddu.dw">;
+def PAADDU_DB : RVPBinary1FWRs2pRs1pRdp<0b0111, 0b10, "paaddu.db">;
+
+def PSUB_DH : RVPBinary1FWRs2pRs1pRdp<0b1000, 0b00, "psub.dh">;
+def PSUB_DW : RVPBinary1FWRs2pRs1pRdp<0b1000, 0b01, "psub.dw">;
+def PSUB_DB : RVPBinary1FWRs2pRs1pRdp<0b1000, 0b10, "psub.db">;
+def SUBD : RVPBinary1FWRs2pRs1pRdp<0b1000, 0b11, "subd">;
+def PDIF_DH : RVPBinary1FWRs2pRs1pRdp<0b1001, 0b00, "pdif.dh">;
+def PDIF_DB : RVPBinary1FWRs2pRs1pRdp<0b1001, 0b10, "pdif.db">;
+def PSSUB_DH : RVPBinary1FWRs2pRs1pRdp<0b1010, 0b00, "pssub.dh">;
+def PSSUB_DW : RVPBinary1FWRs2pRs1pRdp<0b1010, 0b01, "pssub.dw">;
+def PSSUB_DB : RVPBinary1FWRs2pRs1pRdp<0b1010, 0b10, "pssub.db">;
+def PASUB_DH : RVPBinary1FWRs2pRs1pRdp<0b1011, 0b00, "pasub.dh">;
+def PASUB_DW : RVPBinary1FWRs2pRs1pRdp<0b1011, 0b01, "pasub.dw">;
+def PASUB_DB : RVPBinary1FWRs2pRs1pRdp<0b1011, 0b10, "pasub.db">;
+
+def PDIFU_DH : RVPBinary1FWRs2pRs1pRdp<0b1101, 0b00, "pdifu.dh">;
+def PDIFU_DB : RVPBinary1FWRs2pRs1pRdp<0b1101, 0b10, "pdifu.db">;
+def PSSUBU_DH : RVPBinary1FWRs2pRs1pRdp<0b1110, 0b00, "pssubu.dh">;
+def PSSUBU_DW : RVPBinary1FWRs2pRs1pRdp<0b1110, 0b01, "pssubu.dw">;
+def PSSUBU_DB : RVPBinary1FWRs2pRs1pRdp<0b1110, 0b10, "pssubu.db">;
+def PASUBU_DH : RVPBinary1FWRs2pRs1pRdp<0b1111, 0b00, "pasubu.dh">;
+def PASUBU_DW : RVPBinary1FWRs2pRs1pRdp<0b1111, 0b01, "pasubu.dw">;
+def PASUBU_DB : RVPBinary1FWRs2pRs1pRdp<0b1111, 0b10, "pasubu.db">;
+
+def PSH1ADD_DH : RVPBinary1F0WRs2pRs1pRdp<0b010, 0b00, "psh1add.dh">;
+def PSH1ADD_DW : RVPBinary1F0WRs2pRs1pRdp<0b010, 0b01, "psh1add.dw">;
+def PSSH1SADD_DH : RVPBinary1F0WRs2pRs1pRdp<0b011, 0b00, "pssh1sadd.dh">;
+def PSSH1SADD_DW : RVPBinary1F0WRs2pRs1pRdp<0b011, 0b01, "pssh1sadd.dw">;
+
+def PPACK_DH : RVPBinary1F0WRs2pRs1pRdp<0b000, 0b00, "ppack.dh", 0b0, 0b1>;
+def PPACK_DW : RVPBinary1F0WRs2pRs1pRdp<0b000, 0b01, "ppack.dw", 0b0, 0b1>;
+def PPACKBT_DH : RVPBinary1F0WRs2pRs1pRdp<0b001, 0b00, "ppackbt.dh", 0b0, 0b1>;
+def PPACKBT_DW : RVPBinary1F0WRs2pRs1pRdp<0b001, 0b01, "ppackbt.dw", 0b0, 0b1>;
+def PPACKTB_DH : RVPBinary1F0WRs2pRs1pRdp<0b010, 0b00, "ppacktb.dh", 0b0, 0b1>;
+def PPACKTB_DW : RVPBinary1F0WRs2pRs1pRdp<0b010, 0b01, "ppacktb.dw", 0b0, 0b1>;
+def PPACKT_DH : RVPBinary1F0WRs2pRs1pRdp<0b011, 0b00, "ppackt.dh", 0b0, 0b1>;
+def PPACKT_DW : RVPBinary1F0WRs2pRs1pRdp<0b011, 0b01, "ppackt.dw", 0b0, 0b1>;
+
+def PAS_DHX : RVPBinary1FWRs2pRs1pRdp<0b0000, 0b00, "pas.dhx", 0b1>;
+def PSA_DHX : RVPBinary1FWRs2pRs1pRdp<0b0000, 0b10, "psa.dhx", 0b1>;
+def PSAS_DHX : RVPBinary1FWRs2pRs1pRdp<0b0010, 0b00, "psas.dhx", 0b1>;
+def PSSA_DHX : RVPBinary1FWRs2pRs1pRdp<0b0010, 0b10, "pssa.dhx", 0b1>;
+def PAAX_DHX : RVPBinary1FWRs2pRs1pRdp<0b0011, 0b00, "paax.dhx", 0b1>;
+def PASA_DHX : RVPBinary1FWRs2pRs1pRdp<0b0011, 0b10, "pasa.dhx", 0b1>;
+
+def PMSEQ_DH : RVPBinary1FWRs2pRs1pRdp<0b1000, 0b00, "pmseq.dh", 0b1>;
+def PMSEQ_DW : RVPBinary1FWRs2pRs1pRdp<0b1000, 0b01, "pmseq.dw", 0b1>;
+def PMSEQ_DB : RVPBinary1FWRs2pRs1pRdp<0b1000, 0b10, "pmseq.db", 0b1>;
+def PMSLT_DH : RVPBinary1FWRs2pRs1pRdp<0b1010, 0b00, "pmslt.dh", 0b1>;
+def PMSLT_DW : RVPBinary1FWRs2pRs1pRdp<0b1010, 0b01, "pmslt.dw", 0b1>;
+def PMSLT_DB : RVPBinary1FWRs2pRs1pRdp<0b1010, 0b10, "pmslt.db", 0b1>;
+def PMSLTU_DH : RVPBinary1FWRs2pRs1pRdp<0b1011, 0b00, "pmsltu.dh", 0b1>;
+def PMSLTU_DW : RVPBinary1FWRs2pRs1pRdp<0b1011, 0b01, "pmsltu.dw", 0b1>;
+def PMSLTU_DB : RVPBinary1FWRs2pRs1pRdp<0b1011, 0b10, "pmsltu.db", 0b1>;
+
+def PMIN_DH : RVPBinary1FWRs2pRs1pRdp<0b1100, 0b00, "pmin.dh", 0b1>;
+def PMIN_DB : RVPBinary1FWRs2pRs1pRdp<0b1100, 0b10, "pmin.db", 0b1>;
+def PMINU_DH : RVPBinary1FWRs2pRs1pRdp<0b1101, 0b00, "pminu.dh", 0b1>;
+def PMINU_DB : RVPBinary1FWRs2pRs1pRdp<0b1101, 0b10, "pminu.db", 0b1>;
+def PMAX_DH : RVPBinary1FWRs2pRs1pRdp<0b1110, 0b00, "pmax.dh", 0b1>;
+def PMAX_DB : RVPBinary1FWRs2pRs1pRdp<0b1110, 0b10, "pmax.db", 0b1>;
+def PMAXU_DH : RVPBinary1FWRs2pRs1pRdp<0b1111, 0b00, "pmaxu.dh", 0b1>;
+def PMAXU_DB : RVPBinary1FWRs2pRs1pRdp<0b1111, 0b10, "pmaxu.db", 0b1>;
+} // Predicates = [HasStdExtP, IsRV32]
diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoZb.td b/llvm/lib/Target/RISCV/RISCVInstrInfoZb.td
index 124caa3b69d31e..2ce909c5d0e21f 100644
--- a/llvm/lib/Target/RISCV/RISCVInstrInfoZb.td
+++ b/llvm/lib/Target/RISCV/RISCVInstrInfoZb.td
@@ -263,9 +263,10 @@ def XNOR : ALU_rr<0b0100000, 0b100, "xnor">,
Sched<[WriteIALU, ReadIALU, ReadIALU]>;
} // Predicates = [HasStdExtZbbOrZbkb]
-let Predicates = [HasStdExtZba] in {
+let Predicates = [HasStdExtZbaOrP] in
def SH1ADD : ALU_rr<0b0010000, 0b010, "sh1add">,
Sched<[WriteSHXADD, ReadSHXADD, ReadSHXADD]>;
+let Predicates = [HasStdExtZba] in {
def SH2ADD : ALU_rr<0b0010000, 0b100, "sh2add">,
Sched<[WriteSHXADD, ReadSHXADD, ReadSHXADD]>;
def SH3ADD : ALU_rr<0b0010000, 0b110, "sh3add">,
@@ -337,30 +338,32 @@ def XPERM8 : ALU_rr<0b0010100, 0b100, "xperm8">,
Sched<[WriteXPERM, ReadXPERM, ReadXPERM]>;
} // Predicates = [HasStdExtZbkx]
-let Predicates = [HasStdExtZbb], IsSignExtendingOpW = 1 in {
+let Predicates = [HasStdExtZbbOrP], IsSignExtendingOpW = 1 in
def CLZ : Unary_r<0b011000000000, 0b001, "clz">,
Sched<[WriteCLZ, ReadCLZ]>;
+let Predicates = [HasStdExtZbb], IsSignExtendingOpW = 1 in {
def CTZ : Unary_r<0b011000000001, 0b001, "ctz">,
Sched<[WriteCTZ, ReadCTZ]>;
def CPOP : Unary_r<0b011000000010, 0b001, "cpop">,
Sched<[WriteCPOP, ReadCPOP]>;
} // Predicates = [HasStdExtZbb]
-let Predicates = [HasStdExtZbb, IsRV64], IsSignExtendingOpW = 1 in {
+let Predicates = [HasStdExtZbbOrP, IsRV64], IsSignExtendingOpW = 1 in
def CLZW : UnaryW_r<0b011000000000, 0b001, "clzw">,
Sched<[WriteCLZ32, ReadCLZ32]>;
+let Predicates = [HasStdExtZbb, IsRV64], IsSignExtendingOpW = 1 in {
def CTZW : UnaryW_r<0b011000000001, 0b001, "ctzw">,
Sched<[WriteCTZ32, ReadCTZ32]>;
def CPOPW : UnaryW_r<0b011000000010, 0b001, "cpopw">,
Sched<[WriteCPOP32, ReadCPOP32]>;
} // Predicates = [HasStdExtZbb, IsRV64]
-let Predicates = [HasStdExtZbb], IsSignExtendingOpW = 1 in {
+let Predicates = [HasStdExtZbbOrP], IsSignExtendingOpW = 1 in {
def SEXT_B : Unary_r<0b011000000100, 0b001, "sext.b">,
Sched<[WriteIALU, ReadIALU]>;
def SEXT_H : Unary_r<0b011000000101, 0b001, "sext.h">,
Sched<[WriteIALU, ReadIALU]>;
-} // Predicates = [HasStdExtZbb]
+} // Predicates = [HasStdExtZbbOrP]
let Predicates = [HasStdExtZbc] in {
def CLMULR : ALU_rr<0b0000101, 0b010, "clmulr", Commutable=1>,
@@ -374,7 +377,7 @@ def CLMULH : ALU_rr<0b0000101, 0b011, "clmulh", Commutable=1>,
Sched<[WriteCLMUL, ReadCLMUL, ReadCLMUL]>;
} // Predicates = [HasStdExtZbcOrZbkc]
-let Predicates = [HasStdExtZbb] in {
+let Predicates = [HasStdExtZbbOrP] in {
def MIN : ALU_rr<0b0000101, 0b100, "min", Commutable=1>,
Sched<[WriteIMinMax, ReadIMinMax, ReadIMinMax]>;
def MINU : ALU_rr<0b0000101, 0b101, "minu", Commutable=1>,
@@ -385,9 +388,10 @@ def MAXU : ALU_rr<0b0000101, 0b111, "maxu", Commutable=1>,
Sched<[WriteIMinMax, ReadIMinMax, ReadIMinMax]>;
} // Predicates = [HasStdExtZbb]
-let Predicates = [HasStdExtZbkb] in {
+let Predicates = [HasStdExtZbkbOrP] in
def PACK : ALU_rr<0b0000100, 0b100, "pack">,
Sched<[WritePACK, ReadPACK, ReadPACK]>;
+let Predicates = [HasStdExtZbkb] in {
let IsSignExtendingOpW = 1 in
def PACKH : ALU_rr<0b0000100, 0b111, "packh">,
Sched<[WritePACK, ReadPACK, ReadPACK]>;
@@ -407,15 +411,15 @@ def ZEXT_H_RV64 : RVBUnaryR<0b0000100, 0b100, OPC_OP_32, "zext.h">,
Sched<[WriteIALU, ReadIALU]>;
} // Predicates = [HasStdExtZbb, IsRV64]
-let Predicates = [HasStdExtZbbOrZbkb, IsRV32] in {
+let Predicates = [HasStdExtZbbOrZbkbOrP, IsRV32] in {
def REV8_RV32 : Unary_r<0b011010011000, 0b101, "rev8">,
Sched<[WriteREV8, ReadREV8]>;
-} // Predicates = [HasStdExtZbbOrZbkb, IsRV32]
+} // Predicates = [HasStdExtZbbOrZbkbOrP, IsRV32]
-let Predicates = [HasStdExtZbbOrZbkb, IsRV64] in {
+let Predicates = [HasStdExtZbbOrZbkbOrP, IsRV64] in {
def REV8_RV64 : Unary_r<0b011010111000, 0b101, "rev8">,
Sched<[WriteREV8, ReadREV8]>;
-} // Predicates = [HasStdExtZbbOrZbkb, IsRV64]
+} // Predicates = [HasStdExtZbbOrZbkbOrP, IsRV64]
let Predicates = [HasStdExtZbb] in {
def ORC_B : Unary_r<0b001010000111, 0b101, "orc.b">,
diff --git a/llvm/test/CodeGen/RISCV/attributes.ll b/llvm/test/CodeGen/RISCV/attributes.ll
index a09261609d8441..072ff59f0dccf9 100644
--- a/llvm/test/CodeGen/RISCV/attributes.ll
+++ b/llvm/test/CodeGen/RISCV/attributes.ll
@@ -300,6 +300,7 @@
; RUN: llc -mtriple=riscv64 -mattr=+experimental-ssctr %s -o - | FileCheck --check-prefix=RV64SSCTR %s
; RUN: llc -mtriple=riscv64 -mattr=+experimental-sdext %s -o - | FileCheck --check-prefix=RV64SDEXT %s
; RUN: llc -mtriple=riscv64 -mattr=+experimental-sdtrig %s -o - | FileCheck --check-prefix=RV64SDTRIG %s
+; RUN: llc -mtriple=riscv64 -mattr=+experimental-p %s -o - | FileCheck --check-prefix=RV64P %s
; Tests for profile features.
; RUN: llc -mtriple=riscv32 -mattr=+rvi20u32 %s -o - | FileCheck --check-prefix=RVI20U32 %s
@@ -465,6 +466,7 @@
; RV32SUPM: .attribute 5, "rv32i2p1_supm1p0"
; RV32SMCTR: .attribute 5, "rv32i2p1_smctr1p0_sscsrind1p0"
; RV32SSCTR: .attribute 5, "rv32i2p1_sscsrind1p0_ssctr1p0"
+; RV32P: .attribute 5, "rv32i2p1_p1p0"
; RV64M: .attribute 5, "rv64i2p1_m2p0_zmmul1p0"
; RV64ZMMUL: .attribute 5, "rv64i2p1_zmmul1p0"
@@ -613,6 +615,7 @@
; RV64SSCTR: .attribute 5, "rv64i2p1_sscsrind1p0_ssctr1p0"
; RV64SDEXT: .attribute 5, "rv64i2p1_sdext1p0"
; RV64SDTRIG: .attribute 5, "rv64i2p1_sdtrig1p0"
+; RV64P: .attribute 5, "rv64i2p1_p1p0"
; RVI20U32: .attribute 5, "rv32i2p1"
; RVI20U64: .attribute 5, "rv64i2p1"
diff --git a/llvm/test/MC/RISCV/attribute-arch.s b/llvm/test/MC/RISCV/attribute-arch.s
index 4e77a53bd706c2..047f020047a63d 100644
--- a/llvm/test/MC/RISCV/attribute-arch.s
+++ b/llvm/test/MC/RISCV/attribute-arch.s
@@ -473,3 +473,9 @@
.attribute arch, "rv32i_sdtrig1p0"
# CHECK: attribute 5, "rv32i2p1_sdtrig1p0"
+
+.attribute arch, "rv32i_p1p0"
+# CHECK: attribute 5, "rv32i2p1_p1p0"
+
+.attribute arch, "rv64i_p1p0"
+# CHECK: attribute 5, "rv64i2p1_p1p0"
\ No newline at end of file
diff --git a/llvm/test/MC/RISCV/invalid-instruction-spellcheck.s b/llvm/test/MC/RISCV/invalid-instruction-spellcheck.s
index c5c0d2f3a0b12c..8e8c42e033b8a0 100644
--- a/llvm/test/MC/RISCV/invalid-instruction-spellcheck.s
+++ b/llvm/test/MC/RISCV/invalid-instruction-spellcheck.s
@@ -22,10 +22,10 @@ fl ft0, 0(sp)
# CHECK-RV64IF: did you mean: flw, la, lb, ld, lh, li, lw
# CHECK-NEXT: fl ft0, 0(sp)
-addd x1, x1, x1
+addc x1, x1, x1
# CHECK-RV32: did you mean: add, addi
# CHECK-RV64: did you mean: add, addi, addw
-# CHECK-NEXT: addd x1, x1, x1
+# CHECK-NEXT: addc x1, x1, x1
vm x0, x0
# CHECK: did you mean: mv
diff --git a/llvm/test/MC/RISCV/rv32i-invalid.s b/llvm/test/MC/RISCV/rv32i-invalid.s
index ac0e3c6c1bdbfe..1ffb10789bbbdf 100644
--- a/llvm/test/MC/RISCV/rv32i-invalid.s
+++ b/llvm/test/MC/RISCV/rv32i-invalid.s
@@ -191,8 +191,8 @@ fadd.s a0, a1, a2 # CHECK: :[[@LINE]]:1: error: instruction requires the followi
fadd.d a0, a2, a4 # CHECK: :[[@LINE]]:1: error: instruction requires the following: 'Zdinx' (Double in Integer){{$}}
fadd.h a0, a1, a2 # CHECK: :[[@LINE]]:1: error: instruction requires the following: 'Zhinx' (Half Float in Integer){{$}}
flh ft0, (a0) # CHECK: :[[@LINE]]:1: error: instruction requires the following: 'Zfh' (Half-Precision Floating-Point) or 'Zfhmin' (Half-Precision Floating-Point Minimal){{$}}
-sh1add a0, a1, a2 # CHECK: :[[@LINE]]:1: error: instruction requires the following: 'Zba' (Address Generation Instructions){{$}}
-clz a0, a1 # CHECK: :[[@LINE]]:1: error: instruction requires the following: 'Zbb' (Basic Bit-Manipulation){{$}}
+sh1add a0, a1, a2 # CHECK: :[[@LINE]]:1: error: instruction requires the following: 'Zba' (Address Generation Instructions) or 'Base P' (Packed-SIMD){{$}}
+clz a0, a1 # CHECK: :[[@LINE]]:1: error: instruction requires the following: 'Zbb' (Basic Bit-Manipulation) or 'Base P' (Packed-SIMD){{$}}
clmul a0, a1, a2 # CHECK: :[[@LINE]]:1: error: instruction requires the following: 'Zbc' (Carry-Less Multiplication) or 'Zbkc' (Carry-less multiply instructions for Cryptography){{$}}
bset a0, a1, a2 # CHECK: :[[@LINE]]:1: error: instruction requires the following: 'Zbs' (Single-Bit Instructions){{$}}
pause # CHECK: :[[@LINE]]:1: error: instruction requires the following: 'Zihintpause' (Pause Hint){{$}}
diff --git a/llvm/test/MC/RISCV/rv32p-invalid.s b/llvm/test/MC/RISCV/rv32p-invalid.s
new file mode 100644
index 00000000000000..4b705a8db48541
--- /dev/null
+++ b/llvm/test/MC/RISCV/rv32p-invalid.s
@@ -0,0 +1,14 @@
+# RUN: not llvm-mc -triple=riscv32 --mattr=+experimental-p %s 2>&1 \
+# RUN: | FileCheck %s --check-prefixes=CHECK-ERROR
+
+# Imm overflow
+pli.h a0, 0x400
+# CHECK-ERROR: immediate must be an integer in the range [-512, 511]
+pli.b a0, 0x200
+# CHECK-ERROR: immediate must be an integer in the range [0, 255]
+
+# Must be even register
+pwadd.b a1, a2, a3
+# CHECK-ERROR: register must be even
+pmqwacc.h a1, a1, a2
+# CHECK-ERROR: register must be even
diff --git a/llvm/test/MC/RISCV/rv32p-valid.s b/llvm/test/MC/RISCV/rv32p-valid.s
new file mode 100644
index 00000000000000..57f96048898eed
--- /dev/null
+++ b/llvm/test/MC/RISCV/rv32p-valid.s
@@ -0,0 +1,1440 @@
+// NOTE: Assertions have been autogenerated by utils/update_mc_test_checks.py UTC_ARGS: --llvm-mc-binary ./llvm-mc --tool ./llvm-objdump --version 5
+# RUN: llvm-mc %s -triple=riscv32 -mattr=+experimental-p -riscv-no-aliases -show-encoding \
+# RUN: | FileCheck -check-prefixes=CHECK-ASM %s
+
+clz a0, a1
+// CHECK-ASM: clz a0, a1 # encoding: [0x13,0x95,0x05,0x60]
+
+cls a1, a2
+// CHECK-ASM: cls a1, a2 # encoding: [0x93,0x15,0x36,0x60]
+
+sext.b a2, a3
+// CHECK-ASM: sext.b a2, a3 # encoding: [0x13,0x96,0x46,0x60]
+
+sext.h t0, t1
+// CHECK-ASM: sext.h t0, t1 # encoding: [0x93,0x12,0x53,0x60]
+
+abs a4, a5
+// CHECK-ASM: abs a4, a5 # encoding: [0x13,0x97,0x77,0x60]
+
+rev8 s0, s1
+// CHECK-ASM: rev8 s0, s1 # encoding: [0x13,0xd4,0x84,0x69]
+
+rev s2, s3
+// CHECK-ASM: rev s2, s3 # encoding: [0x13,0xd9,0xf9,0x69]
+
+sh1add a0, a1, a2
+// CHECK-ASM: sh1add a0, a1, a2 # encoding: [0x33,0xa5,0xc5,0x20]
+
+pack s0, s1, s2
+// CHECK-ASM: pack s0, s1, s2 # encoding: [0x33,0xc4,0x24,0x09]
+
+min t0, t1, t2
+// CHECK-ASM: min t0, t1, t2 # encoding: [0xb3,0x42,0x73,0x0a]
+
+minu x1, x2, x3
+// CHECK-ASM: minu ra, sp, gp # encoding: [0xb3,0x50,0x31,0x0a]
+
+max t3, t4, t5
+// CHECK-ASM: max t3, t4, t5 # encoding: [0x33,0xee,0xee,0x0b]
+
+maxu a4, a5, a6
+// CHECK-ASM: maxu a4, a5, a6 # encoding: [0x33,0xf7,0x07,0x0b]
+
+pslli.b a6, a7
+// CHECK-ASM: pslli.b a6, a7 # encoding: [0x1b,0xa8,0x88,0x80]
+
+pslli.h x1, x2
+// CHECK-ASM: pslli.h ra, sp # encoding: [0x9b,0x20,0x01,0x81]
+
+psslai.h t0, t1
+// CHECK-ASM: psslai.h t0, t1 # encoding: [0x9b,0x22,0x03,0xd1]
+
+sslai a4, a5
+// CHECK-ASM: sslai a4, a5 # encoding: [0x1b,0xa7,0x07,0xd2]
+
+pli.h a5, 0x5
+// CHECK-ASM: pli.h a5, 5 # encoding: [0x9b,0xa7,0x02,0xb0]
+
+pli.b a6, 0x6
+// CHECK-ASM: pli.b a6, 6 # encoding: [0x1b,0x28,0x06,0xb4]
+
+psextb.h a7, a0
+// CHECK-ASM: psextb.h a7, a0 # encoding: [0x9b,0x28,0x45,0xe0]
+
+psabs.h a1, a2
+// CHECK-ASM: psabs.h a1, a2 # encoding: [0x9b,0x25,0x76,0xe0]
+
+psabs.b t0, t1
+// CHECK-ASM: psabs.b t0, t1 # encoding: [0x9b,0x22,0x73,0xe2]
+
+plui.h x3, 0x3
+// CHECK-ASM: plui.h gp, 3 # encoding: [0x9b,0xa1,0x01,0xf0]
+
+psll.h.h0 a0, a1, a2
+// CHECK-ASM: psll.h.h0 a0, a1, a2 # encoding: [0x1b,0xa5,0xc5,0x88]
+
+psll.b.b0 a3, a4, a5
+// CHECK-ASM: psll.b.b0 a3, a4, a5 # encoding: [0x9b,0x26,0xf7,0x8c]
+
+padd.h.h0 t0, t1, t2
+// CHECK-ASM: padd.h.h0 t0, t1, t2 # encoding: [0x9b,0x22,0x73,0x98]
+
+padd.b.b0 x1, a1, a2
+// CHECK-ASM: padd.b.b0 ra, a1, a2 # encoding: [0x9b,0xa0,0xc5,0x9c]
+
+pssha.h.h0 a3, a4, a5
+// CHECK-ASM: pssha.h.h0 a3, a4, a5 # encoding: [0x9b,0x26,0xf7,0xe8]
+
+ssha x3, a4, a5
+// CHECK-ASM: ssha gp, a4, a5 # encoding: [0x9b,0x21,0xf7,0xea]
+
+psshar.h.h0 a6, a7, a0
+// CHECK-ASM: psshar.h.h0 a6, a7, a0 # encoding: [0x1b,0xa8,0xa8,0xf8]
+
+sshar x6, a7, a0
+// CHECK-ASM: sshar t1, a7, a0 # encoding: [0x1b,0xa3,0xa8,0xfa]
+
+psrli.b a1, a2
+// CHECK-ASM: psrli.b a1, a2 # encoding: [0x9b,0x45,0x86,0x80]
+
+psrli.h a0, a1
+// CHECK-ASM: psrli.h a0, a1 # encoding: [0x1b,0xc5,0x05,0x81]
+
+pusati.h a2, t1
+// CHECK-ASM: pusati.h a2, t1 # encoding: [0x1b,0x46,0x03,0xa1]
+
+usati a3, t2
+// CHECK-ASM: usati a3, t2 # encoding: [0x9b,0xc6,0x03,0xa2]
+
+psrai.b a4, a5
+// CHECK-ASM: psrai.b a4, a5 # encoding: [0x1b,0xc7,0x87,0xc0]
+
+psrai.h a6, a7
+// CHECK-ASM: psrai.h a6, a7 # encoding: [0x1b,0xc8,0x08,0xc1]
+
+psrari.h a0, a1
+// CHECK-ASM: psrari.h a0, a1 # encoding: [0x1b,0xc5,0x05,0xd1]
+
+srari a2, a3
+// CHECK-ASM: srari a2, a3 # encoding: [0x1b,0xc6,0x06,0xd2]
+
+psati.h a4, t0
+// CHECK-ASM: psati.h a4, t0 # encoding: [0x1b,0xc7,0x02,0xe1]
+
+sati a5, t1
+// CHECK-ASM: sati a5, t1 # encoding: [0x9b,0x47,0x03,0xe2]
+
+psrl.h.h0 a6, a7, a1
+// CHECK-ASM: psrl.h.h0 a6, a7, a1 # encoding: [0x1b,0xc8,0xb8,0x88]
+
+psrl.b.b0 a1, a2, a3
+// CHECK-ASM: psrl.b.b0 a1, a2, a3 # encoding: [0x9b,0x45,0xd6,0x8c]
+
+predsum.h a4, a5, a6
+// CHECK-ASM: predsum.h a4, a5, a6 # encoding: [0x1b,0xc7,0x07,0x99]
+
+predsum.b a7, a1, a1
+// CHECK-ASM: predsum.b a7, a1, a1 # encoding: [0x9b,0xc8,0xb5,0x9c]
+
+predsumu.h t0, t1, t2
+// CHECK-ASM: predsumu.h t0, t1, t2 # encoding: [0x9b,0x42,0x73,0xb8]
+
+predsumu.b t3, t4, t5
+// CHECK-ASM: predsumu.b t3, t4, t5 # encoding: [0x1b,0xce,0xee,0xbd]
+
+psra.h.h0 x1, a1, a2
+// CHECK-ASM: psra.h.h0 ra, a1, a2 # encoding: [0x9b,0xc0,0xc5,0xc8]
+
+psra.b.b0 x2, a2, a3
+// CHECK-ASM: psra.b.b0 sp, a2, a3 # encoding: [0x1b,0x41,0xd6,0xcc]
+
+psslai.h t0, t1
+// CHECK-ASM: psslai.h t0, t1 # encoding: [0x9b,0x22,0x03,0xd1]
+
+sslai a4, a5
+// CHECK-ASM: sslai a4, a5 # encoding: [0x1b,0xa7,0x07,0xd2]
+
+pli.h a5, 0x5
+// CHECK-ASM: pli.h a5, 5 # encoding: [0x9b,0xa7,0x02,0xb0]
+
+pli.b a6, 0x6
+// CHECK-ASM: pli.b a6, 6 # encoding: [0x1b,0x28,0x06,0xb4]
+
+psextb.h a7, a0
+// CHECK-ASM: psextb.h a7, a0 # encoding: [0x9b,0x28,0x45,0xe0]
+
+psabs.h a1, a2
+// CHECK-ASM: psabs.h a1, a2 # encoding: [0x9b,0x25,0x76,0xe0]
+
+psabs.b t0, t1
+// CHECK-ASM: psabs.b t0, t1 # encoding: [0x9b,0x22,0x73,0xe2]
+
+plui.h x3, 0x3
+// CHECK-ASM: plui.h gp, 3 # encoding: [0x9b,0xa1,0x01,0xf0]
+
+psll.h.h0 a0, a1, a2
+// CHECK-ASM: psll.h.h0 a0, a1, a2 # encoding: [0x1b,0xa5,0xc5,0x88]
+
+psll.b.b0 a3, a4, a5
+// CHECK-ASM: psll.b.b0 a3, a4, a5 # encoding: [0x9b,0x26,0xf7,0x8c]
+
+padd.h.h0 t0, t1, t2
+// CHECK-ASM: padd.h.h0 t0, t1, t2 # encoding: [0x9b,0x22,0x73,0x98]
+
+padd.b.b0 x1, a1, a2
+// CHECK-ASM: padd.b.b0 ra, a1, a2 # encoding: [0x9b,0xa0,0xc5,0x9c]
+
+pssha.h.h0 a3, a4, a5
+// CHECK-ASM: pssha.h.h0 a3, a4, a5 # encoding: [0x9b,0x26,0xf7,0xe8]
+
+ssha x3, a4, a5
+// CHECK-ASM: ssha gp, a4, a5 # encoding: [0x9b,0x21,0xf7,0xea]
+
+psshar.h.h0 a6, a7, a0
+// CHECK-ASM: psshar.h.h0 a6, a7, a0 # encoding: [0x1b,0xa8,0xa8,0xf8]
+
+sshar x6, a7, a0
+// CHECK-ASM: sshar t1, a7, a0 # encoding: [0x1b,0xa3,0xa8,0xfa]
+
+psrli.b a1, a2
+// CHECK-ASM: psrli.b a1, a2 # encoding: [0x9b,0x45,0x86,0x80]
+
+psrli.h a0, a1
+// CHECK-ASM: psrli.h a0, a1 # encoding: [0x1b,0xc5,0x05,0x81]
+
+pusati.h a2, t1
+// CHECK-ASM: pusati.h a2, t1 # encoding: [0x1b,0x46,0x03,0xa1]
+
+usati a3, t2
+// CHECK-ASM: usati a3, t2 # encoding: [0x9b,0xc6,0x03,0xa2]
+
+psrai.b a4, a5
+// CHECK-ASM: psrai.b a4, a5 # encoding: [0x1b,0xc7,0x87,0xc0]
+
+psrai.h a6, a7
+// CHECK-ASM: psrai.h a6, a7 # encoding: [0x1b,0xc8,0x08,0xc1]
+
+psrari.h a0, a1
+// CHECK-ASM: psrari.h a0, a1 # encoding: [0x1b,0xc5,0x05,0xd1]
+
+srari a2, a3
+// CHECK-ASM: srari a2, a3 # encoding: [0x1b,0xc6,0x06,0xd2]
+
+psati.h a4, t0
+// CHECK-ASM: psati.h a4, t0 # encoding: [0x1b,0xc7,0x02,0xe1]
+
+sati a5, t1
+// CHECK-ASM: sati a5, t1 # encoding: [0x9b,0x47,0x03,0xe2]
+
+psrl.h.h0 a6, a7, a1
+// CHECK-ASM: psrl.h.h0 a6, a7, a1 # encoding: [0x1b,0xc8,0xb8,0x88]
+
+psrl.b.b0 a1, a2, a3
+// CHECK-ASM: psrl.b.b0 a1, a2, a3 # encoding: [0x9b,0x45,0xd6,0x8c]
+
+predsum.h a4, a5, a6
+// CHECK-ASM: predsum.h a4, a5, a6 # encoding: [0x1b,0xc7,0x07,0x99]
+
+predsum.b a7, a1, a1
+// CHECK-ASM: predsum.b a7, a1, a1 # encoding: [0x9b,0xc8,0xb5,0x9c]
+
+predsumu.h t0, t1, t2
+// CHECK-ASM: predsumu.h t0, t1, t2 # encoding: [0x9b,0x42,0x73,0xb8]
+
+predsumu.b t3, t4, t5
+// CHECK-ASM: predsumu.b t3, t4, t5 # encoding: [0x1b,0xce,0xee,0xbd]
+
+psra.h.h0 x1, a1, a2
+// CHECK-ASM: psra.h.h0 ra, a1, a2 # encoding: [0x9b,0xc0,0xc5,0xc8]
+
+psra.b.b0 x2, a2, a3
+// CHECK-ASM: psra.b.b0 sp, a2, a3 # encoding: [0x1b,0x41,0xd6,0xcc]
+
+padd.h t0, t1, t2
+// CHECK-ASM: padd.h t0, t1, t2 # encoding: [0xbb,0x02,0x73,0x80]
+
+padd.b x1, a1, a2
+// CHECK-ASM: padd.b ra, a1, a2 # encoding: [0xbb,0x80,0xc5,0x84]
+
+psadd.h t3, t4, t5
+// CHECK-ASM: psadd.h t3, t4, t5 # encoding: [0x3b,0x8e,0xee,0x91]
+
+sadd x6, a7, a0
+// CHECK-ASM: sadd t1, a7, a0 # encoding: [0x3b,0x83,0xa8,0x92]
+
+psadd.b t0, t1, t2
+// CHECK-ASM: psadd.b t0, t1, t2 # encoding: [0xbb,0x02,0x73,0x94]
+
+paadd.h t3, t4, t5
+// CHECK-ASM: paadd.h t3, t4, t5 # encoding: [0x3b,0x8e,0xee,0x99]
+
+aadd x6, a7, a0
+// CHECK-ASM: aadd t1, a7, a0 # encoding: [0x3b,0x83,0xa8,0x9a]
+
+paadd.b t0, t1, t2
+// CHECK-ASM: paadd.b t0, t1, t2 # encoding: [0xbb,0x02,0x73,0x9c]
+
+psaddu.h t3, t4, t5
+// CHECK-ASM: psaddu.h t3, t4, t5 # encoding: [0x3b,0x8e,0xee,0xb1]
+
+saddu x6, a7, a0
+// CHECK-ASM: saddu t1, a7, a0 # encoding: [0x3b,0x83,0xa8,0xb2]
+
+psaddu.b t0, t1, t2
+// CHECK-ASM: psaddu.b t0, t1, t2 # encoding: [0xbb,0x02,0x73,0xb4]
+
+paaddu.h t3, t4, t5
+// CHECK-ASM: paaddu.h t3, t4, t5 # encoding: [0x3b,0x8e,0xee,0xb9]
+
+aaddu x6, a7, a0
+// CHECK-ASM: aaddu t1, a7, a0 # encoding: [0x3b,0x83,0xa8,0xba]
+
+paaddu.b t0, t1, t2
+// CHECK-ASM: paaddu.b t0, t1, t2 # encoding: [0xbb,0x02,0x73,0xbc]
+
+psub.h t3, t4, t5
+// CHECK-ASM: psub.h t3, t4, t5 # encoding: [0x3b,0x8e,0xee,0xc1]
+
+psub.b t0, t1, t2
+// CHECK-ASM: psub.b t0, t1, t2 # encoding: [0xbb,0x02,0x73,0xc4]
+
+pdif.h t3, t4, t5
+// CHECK-ASM: pdif.h t3, t4, t5 # encoding: [0x3b,0x8e,0xee,0xc9]
+
+pdif.b t0, t1, t2
+// CHECK-ASM: pdif.b t0, t1, t2 # encoding: [0xbb,0x02,0x73,0xcc]
+
+pssub.h t3, t4, t5
+// CHECK-ASM: pssub.h t3, t4, t5 # encoding: [0x3b,0x8e,0xee,0xd1]
+
+ssub x6, a7, a0
+// CHECK-ASM: ssub t1, a7, a0 # encoding: [0x3b,0x83,0xa8,0xd2]
+
+pssub.b t0, t1, t2
+// CHECK-ASM: pssub.b t0, t1, t2 # encoding: [0xbb,0x02,0x73,0xd4]
+
+pasub.h t3, t4, t5
+// CHECK-ASM: pasub.h t3, t4, t5 # encoding: [0x3b,0x8e,0xee,0xd9]
+
+asub x6, a7, a0
+// CHECK-ASM: asub t1, a7, a0 # encoding: [0x3b,0x83,0xa8,0xda]
+
+pasub.b t0, t1, t2
+// CHECK-ASM: pasub.b t0, t1, t2 # encoding: [0xbb,0x02,0x73,0xdc]
+
+pdifu.h t3, t4, t5
+// CHECK-ASM: pdifu.h t3, t4, t5 # encoding: [0x3b,0x8e,0xee,0xe9]
+
+pdifu.b t0, t1, t2
+// CHECK-ASM: pdifu.b t0, t1, t2 # encoding: [0xbb,0x02,0x73,0xec]
+
+pssubu.h t3, t4, t5
+// CHECK-ASM: pssubu.h t3, t4, t5 # encoding: [0x3b,0x8e,0xee,0xf1]
+
+ssubu x6, a7, a0
+// CHECK-ASM: ssubu t1, a7, a0 # encoding: [0x3b,0x83,0xa8,0xf2]
+
+pssubu.b t0, t1, t2
+// CHECK-ASM: pssubu.b t0, t1, t2 # encoding: [0xbb,0x02,0x73,0xf4]
+
+pasubu.h t3, t4, t5
+// CHECK-ASM: pasubu.h t3, t4, t5 # encoding: [0x3b,0x8e,0xee,0xf9]
+
+asubu x6, a7, a0
+// CHECK-ASM: asubu t1, a7, a0 # encoding: [0x3b,0x83,0xa8,0xfa]
+
+pasubu.b t0, t1, t2
+// CHECK-ASM: pasubu.b t0, t1, t2 # encoding: [0xbb,0x02,0x73,0xfc]
+
+slx x3, a4, a5
+// CHECK-ASM: slx gp, a4, a5 # encoding: [0xbb,0x11,0xf7,0x8e]
+
+pmul.h.beo t3, t4, t5
+// CHECK-ASM: pmul.h.beo t3, t4, t5 # encoding: [0x3b,0x9e,0xee,0x91]
+
+mul.h01 t0, t1, t2
+// CHECK-ASM: mul.h01 t0, t1, t2 # encoding: [0xbb,0x12,0x73,0x92]
+
+macc.h01 t3, t4, t5
+// CHECK-ASM: macc.h01 t3, t4, t5 # encoding: [0x3b,0x9e,0xee,0x9b]
+
+mvm a0, a1, a2
+// CHECK-ASM: mvm a0, a1, a2 # encoding: [0x3b,0x95,0xc5,0xa8]
+
+mvmn x3, a4, a5
+// CHECK-ASM: mvmn gp, a4, a5 # encoding: [0xbb,0x11,0xf7,0xaa]
+
+merge t0, t1, t2
+// CHECK-ASM: merge t0, t1, t2 # encoding: [0xbb,0x12,0x73,0xac]
+
+srx x3, a4, a5
+// CHECK-ASM: srx gp, a4, a5 # encoding: [0xbb,0x11,0xf7,0xae]
+
+pmulu.h.beo t3, t4, t5
+// CHECK-ASM: pmulu.h.beo t3, t4, t5 # encoding: [0x3b,0x9e,0xee,0xb1]
+
+mulu.h01 t0, t1, t2
+// CHECK-ASM: mulu.h01 t0, t1, t2 # encoding: [0xbb,0x12,0x73,0xb2]
+
+pdifsumu.b t3, t4, t5
+// CHECK-ASM: pdifsumu.b t3, t4, t5 # encoding: [0x3b,0x9e,0xee,0xb5]
+
+maccu.h01 t3, t4, t5
+// CHECK-ASM: maccu.h01 t3, t4, t5 # encoding: [0x3b,0x9e,0xee,0xbb]
+
+pdifsumau.b t3, t4, t5
+// CHECK-ASM: pdifsumau.b t3, t4, t5 # encoding: [0x3b,0x9e,0xee,0xbd]
+
+mul.h01 t0, t1, t2
+// CHECK-ASM: mul.h01 t0, t1, t2 # encoding: [0xbb,0x12,0x73,0x92]
+
+macc.h01 t3, t4, t5
+// CHECK-ASM: macc.h01 t3, t4, t5 # encoding: [0x3b,0x9e,0xee,0x9b]
+
+mulu.h01 a0, a1, a2
+// CHECK-ASM: mulu.h01 a0, a1, a2 # encoding: [0x3b,0x95,0xc5,0xb2]
+
+maccu.h01 a3, a4, a5
+// CHECK-ASM: maccu.h01 a3, a4, a5 # encoding: [0xbb,0x16,0xf7,0xba]
+
+psh1add.h a0, a1, a2
+// CHECK-ASM: psh1add.h a0, a1, a2 # encoding: [0x3b,0xa5,0xc5,0xa0]
+
+pssh1sadd.h a3, a4, a5
+// CHECK-ASM: pssh1sadd.h a3, a4, a5 # encoding: [0xbb,0x26,0xf7,0xb0]
+
+ssh1sadd t0, t1, t2
+// CHECK-ASM: ssh1sadd t0, t1, t2 # encoding: [0xbb,0x22,0x73,0xa2]
+
+pmul.h.bee s6, t4, s8
+// CHECK-ASM: pmul.h.bee s6, t4, s8 # encoding: [0x3b,0xbb,0x8e,0x81]
+
+pmul.h.boo t0, t4, s4
+// CHECK-ASM: pmul.h.boo t0, t4, s4 # encoding: [0xbb,0xb2,0x4e,0x91]
+
+pmulu.h.bee t2, s6, s8
+// CHECK-ASM: pmulu.h.bee t2, s6, s8 # encoding: [0xbb,0x33,0x8b,0xa1]
+
+pmulu.h.boo t2, s6, a0
+// CHECK-ASM: pmulu.h.boo t2, s6, a0 # encoding: [0xbb,0x33,0xab,0xb0]
+
+pmulsu.h.bee s4, a4, s8
+// CHECK-ASM: pmulsu.h.bee s4, a4, s8 # encoding: [0x3b,0x3a,0x87,0xe1]
+
+pmulsu.h.boo s6, a2, s4
+// CHECK-ASM: pmulsu.h.boo s6, a2, s4 # encoding: [0x3b,0x3b,0x46,0xf1]
+
+mul.h00 a4, t4, s2
+// CHECK-ASM: mul.h00 a4, t4, s2 # encoding: [0x3b,0xb7,0x2e,0x83]
+
+macc.h00 a4, a0, s0
+// CHECK-ASM: macc.h00 a4, a0, s0 # encoding: [0x3b,0x37,0x85,0x8a]
+
+mul.h11 a0, a4, a0
+// CHECK-ASM: mul.h11 a0, a4, a0 # encoding: [0x3b,0x35,0xa7,0x92]
+
+macc.h11 s6, a4, s4
+// CHECK-ASM: macc.h11 s6, a4, s4 # encoding: [0x3b,0x3b,0x47,0x9b]
+
+mulu.h00 s6, s0, a0
+// CHECK-ASM: mulu.h00 s6, s0, a0 # encoding: [0x3b,0x3b,0xa4,0xa2]
+
+maccu.h00 s0, s6, s0
+// CHECK-ASM: maccu.h00 s0, s6, s0 # encoding: [0x3b,0x34,0x8b,0xaa]
+
+mulu.h11 s0, s4, s6
+// CHECK-ASM: mulu.h11 s0, s4, s6 # encoding: [0x3b,0x34,0x6a,0xb3]
+
+maccu.h11 s0, t4, t4
+// CHECK-ASM: maccu.h11 s0, t4, t4 # encoding: [0x3b,0xb4,0xde,0xbb]
+
+mulsu.h00 a4, s4, s6
+// CHECK-ASM: mulsu.h00 a4, s4, s6 # encoding: [0x3b,0x37,0x6a,0xe3]
+
+maccsu.h00 s4, s4, s0
+// CHECK-ASM: maccsu.h00 s4, s4, s0 # encoding: [0x3b,0x3a,0x8a,0xea]
+
+mulsu.h11 s8, s4, s0
+// CHECK-ASM: mulsu.h11 s8, s4, s0 # encoding: [0x3b,0x3c,0x8a,0xf2]
+
+maccsu.h11 s0, a2, s6
+// CHECK-ASM: maccsu.h11 s0, a2, s6 # encoding: [0x3b,0x34,0x66,0xfb]
+
+ppack.h t1, a2, t5
+// CHECK-ASM: ppack.h t1, a2, t5 # encoding: [0x3b,0x43,0xe6,0x81]
+
+ppackbt.h t5, t3, s2
+// CHECK-ASM: ppackbt.h t5, t3, s2 # encoding: [0x3b,0x4f,0x2e,0x91]
+
+ppacktb.h t1, t1, s0
+// CHECK-ASM: ppacktb.h t1, t1, s0 # encoding: [0x3b,0x43,0x83,0xa0]
+
+ppackt.h t3, s0, s0
+// CHECK-ASM: ppackt.h t3, s0, s0 # encoding: [0x3b,0x4e,0x84,0xb0]
+
+packbt t1, t1, s2
+// CHECK-ASM: packbt t1, t1, s2 # encoding: [0x3b,0x43,0x23,0x93]
+
+packtb t5, s0, a2
+// CHECK-ASM: packtb t5, s0, a2 # encoding: [0x3b,0x4f,0xc4,0xa2]
+
+packt a4, t5, t5
+// CHECK-ASM: packt a4, t5, t5 # encoding: [0x3b,0x47,0xef,0xb3]
+
+pm2add.h t3, t1, s0
+// CHECK-ASM: pm2add.h t3, t1, s0 # encoding: [0x3b,0x5e,0x83,0x80]
+
+pm4add.b t1, s2, t5
+// CHECK-ASM: pm4add.b t1, s2, t5 # encoding: [0x3b,0x53,0xe9,0x85]
+
+pm2adda.h t1, s2, a4
+// CHECK-ASM: pm2adda.h t1, s2, a4 # encoding: [0x3b,0x53,0xe9,0x88]
+
+pm4adda.b t3, a0, t5
+// CHECK-ASM: pm4adda.b t3, a0, t5 # encoding: [0x3b,0x5e,0xe5,0x8d]
+
+pm2add.hx s0, t5, a4
+// CHECK-ASM: pm2add.hx s0, t5, a4 # encoding: [0x3b,0x54,0xef,0x90]
+
+pm2adda.hx a0, a0, t1
+// CHECK-ASM: pm2adda.hx a0, a0, t1 # encoding: [0x3b,0x55,0x65,0x98]
+
+pm2addu.h s2, t5, a2
+// CHECK-ASM: pm2addu.h s2, t5, a2 # encoding: [0x3b,0x59,0xcf,0xa0]
+
+pm4addu.b t5, s0, t1
+// CHECK-ASM: pm4addu.b t5, s0, t1 # encoding: [0x3b,0x5f,0x64,0xa4]
+
+pm2addau.h t3, t1, t5
+// CHECK-ASM: pm2addau.h t3, t1, t5 # encoding: [0x3b,0x5e,0xe3,0xa9]
+
+pm4addau.b a4, t3, a0
+// CHECK-ASM: pm4addau.b a4, t3, a0 # encoding: [0x3b,0x57,0xae,0xac]
+
+pmq2add.h t1, a2, t1
+// CHECK-ASM: pmq2add.h t1, a2, t1 # encoding: [0x3b,0x53,0x66,0xb0]
+
+pmqr2add.h a2, a4, s2
+// CHECK-ASM: pmqr2add.h a2, a4, s2 # encoding: [0x3b,0x56,0x27,0xb5]
+
+pmq2adda.h t5, t3, t1
+// CHECK-ASM: pmq2adda.h t5, t3, t1 # encoding: [0x3b,0x5f,0x6e,0xb8]
+
+pmqr2adda.h t1, s0, a2
+// CHECK-ASM: pmqr2adda.h t1, s0, a2 # encoding: [0x3b,0x53,0xc4,0xbc]
+
+pm2sub.h t1, a0, a4
+// CHECK-ASM: pm2sub.h t1, a0, a4 # encoding: [0x3b,0x53,0xe5,0xc0]
+
+pm2sadd.h s2, s2, t3
+// CHECK-ASM: pm2sadd.h s2, s2, t3 # encoding: [0x3b,0x59,0xc9,0xc5]
+
+pm2suba.h s0, s0, t3
+// CHECK-ASM: pm2suba.h s0, s0, t3 # encoding: [0x3b,0x54,0xc4,0xc9]
+
+pm2sub.hx a2, a2, a0
+// CHECK-ASM: pm2sub.hx a2, a2, a0 # encoding: [0x3b,0x56,0xa6,0xd0]
+
+pm2sadd.hx t5, s2, a0
+// CHECK-ASM: pm2sadd.hx t5, s2, a0 # encoding: [0x3b,0x5f,0xa9,0xd4]
+
+pm2suba.hx a4, a2, t5
+// CHECK-ASM: pm2suba.hx a4, a2, t5 # encoding: [0x3b,0x57,0xe6,0xd9]
+
+pm2addsu.h s0, s0, s2
+// CHECK-ASM: pm2addsu.h s0, s0, s2 # encoding: [0x3b,0x54,0x24,0xe1]
+
+pm4addsu.b a0, s0, t3
+// CHECK-ASM: pm4addsu.b a0, s0, t3 # encoding: [0x3b,0x55,0xc4,0xe5]
+
+pm2addasu.h a4, t1, a2
+// CHECK-ASM: pm2addasu.h a4, t1, a2 # encoding: [0x3b,0x57,0xc3,0xe8]
+
+pm4addasu.b s2, s0, a2
+// CHECK-ASM: pm4addasu.b s2, s0, a2 # encoding: [0x3b,0x59,0xc4,0xec]
+
+mqacc.h01 a4, t1, a0
+// CHECK-ASM: mqacc.h01 a4, t1, a0 # encoding: [0x3b,0x57,0xa3,0xb8]
+
+mqracc.h01 s0, a0, t5
+// CHECK-ASM: mqracc.h01 s0, a0, t5 # encoding: [0x3b,0x54,0xe5,0xbd]
+
+pas.hx t5, s2, t5
+// CHECK-ASM: pas.hx t5, s2, t5 # encoding: [0x3b,0x6f,0xe9,0x81]
+
+psa.hx s0, t1, t3
+// CHECK-ASM: psa.hx s0, t1, t3 # encoding: [0x3b,0x64,0xc3,0x85]
+
+psas.hx t5, s2, a2
+// CHECK-ASM: psas.hx t5, s2, a2 # encoding: [0x3b,0x6f,0xc9,0x90]
+
+pssa.hx s2, t3, t5
+// CHECK-ASM: pssa.hx s2, t3, t5 # encoding: [0x3b,0x69,0xee,0x95]
+
+pmseq.h a0, t1, s0
+// CHECK-ASM: pmseq.h a0, t1, s0 # encoding: [0x3b,0x65,0x83,0xc0]
+
+pmseq.b s0, s2, s0
+// CHECK-ASM: pmseq.b s0, s2, s0 # encoding: [0x3b,0x64,0x89,0xc4]
+
+pmslt.h t3, a2, a4
+// CHECK-ASM: pmslt.h t3, a2, a4 # encoding: [0x3b,0x6e,0xe6,0xd0]
+
+pmslt.b t5, a4, t1
+// CHECK-ASM: pmslt.b t5, a4, t1 # encoding: [0x3b,0x6f,0x67,0xd4]
+
+pmsltu.h s2, s0, s2
+// CHECK-ASM: pmsltu.h s2, s0, s2 # encoding: [0x3b,0x69,0x24,0xd9]
+
+pmsltu.b s0, s2, t5
+// CHECK-ASM: pmsltu.b s0, s2, t5 # encoding: [0x3b,0x64,0xe9,0xdd]
+
+pmin.h s2, t3, s2
+// CHECK-ASM: pmin.h s2, t3, s2 # encoding: [0x3b,0x69,0x2e,0xe1]
+
+pmin.b a2, a2, t5
+// CHECK-ASM: pmin.b a2, a2, t5 # encoding: [0x3b,0x66,0xe6,0xe5]
+
+pminu.h a0, a4, a2
+// CHECK-ASM: pminu.h a0, a4, a2 # encoding: [0x3b,0x65,0xc7,0xe8]
+
+pminu.b a4, t3, s2
+// CHECK-ASM: pminu.b a4, t3, s2 # encoding: [0x3b,0x67,0x2e,0xed]
+
+pmax.h a4, s2, a0
+// CHECK-ASM: pmax.h a4, s2, a0 # encoding: [0x3b,0x67,0xa9,0xf0]
+
+pmax.b t1, s0, s0
+// CHECK-ASM: pmax.b t1, s0, s0 # encoding: [0x3b,0x63,0x84,0xf4]
+
+pmaxu.h a0, s0, s0
+// CHECK-ASM: pmaxu.h a0, s0, s0 # encoding: [0x3b,0x65,0x84,0xf8]
+
+pmaxu.b t3, a0, t1
+// CHECK-ASM: pmaxu.b t3, a0, t1 # encoding: [0x3b,0x6e,0x65,0xfc]
+
+mseq a4, t1, s0
+// CHECK-ASM: mseq a4, t1, s0 # encoding: [0x3b,0x67,0x83,0xc2]
+
+mslt t5, t5, t1
+// CHECK-ASM: mslt t5, t5, t1 # encoding: [0x3b,0x6f,0x6f,0xd2]
+
+msltu s2, a0, t3
+// CHECK-ASM: msltu s2, a0, t3 # encoding: [0x3b,0x69,0xc5,0xdb]
+
+pmulh.h s0, t3, t3
+// CHECK-ASM: pmulh.h s0, t3, t3 # encoding: [0x3b,0x74,0xce,0x81]
+
+pmulhr.h t1, t5, s0
+// CHECK-ASM: pmulhr.h t1, t5, s0 # encoding: [0x3b,0x73,0x8f,0x84]
+
+pmhacc.h s0, t5, s2
+// CHECK-ASM: pmhacc.h s0, t5, s2 # encoding: [0x3b,0x74,0x2f,0x89]
+
+pmhracc.h a4, t3, a2
+// CHECK-ASM: pmhracc.h a4, t3, a2 # encoding: [0x3b,0x77,0xce,0x8c]
+
+pmulhu.h a4, t5, a2
+// CHECK-ASM: pmulhu.h a4, t5, a2 # encoding: [0x3b,0x77,0xcf,0x90]
+
+pmulhru.h a4, a2, a4
+// CHECK-ASM: pmulhru.h a4, a2, a4 # encoding: [0x3b,0x77,0xe6,0x94]
+
+pmhaccu.h a4, t1, t3
+// CHECK-ASM: pmhaccu.h a4, t1, t3 # encoding: [0x3b,0x77,0xc3,0x99]
+
+pmhraccu.h s2, s0, t1
+// CHECK-ASM: pmhraccu.h s2, s0, t1 # encoding: [0x3b,0x79,0x64,0x9c]
+
+pmulh.h.be a0, t5, a4
+// CHECK-ASM: pmulh.h.be a0, t5, a4 # encoding: [0x3b,0x75,0xef,0xa0]
+
+pmulhsu.h.be s0, a4, s2
+// CHECK-ASM: pmulhsu.h.be s0, a4, s2 # encoding: [0x3b,0x74,0x27,0xa5]
+
+pmhaccu.h.be s0, a0, t5
+// CHECK-ASM: pmhaccu.h.be s0, a0, t5 # encoding: [0x3b,0x74,0xe5,0xa9]
+
+pmhaccsu.h.be t3, s0, a4
+// CHECK-ASM: pmhaccsu.h.be t3, s0, a4 # encoding: [0x3b,0x7e,0xe4,0xac]
+
+pmulh.h.bo a0, a4, s2
+// CHECK-ASM: pmulh.h.bo a0, a4, s2 # encoding: [0x3b,0x75,0x27,0xb1]
+
+pmulhsu.h.bo t5, t3, t1
+// CHECK-ASM: pmulhsu.h.bo t5, t3, t1 # encoding: [0x3b,0x7f,0x6e,0xb4]
+
+pmhacc.h.bo t1, t5, a2
+// CHECK-ASM: pmhacc.h.bo t1, t5, a2 # encoding: [0x3b,0x73,0xcf,0xb8]
+
+pmhaccsu.h.bo a2, a0, a4
+// CHECK-ASM: pmhaccsu.h.bo a2, a0, a4 # encoding: [0x3b,0x76,0xe5,0xbc]
+
+pmulhsu.h s0, a0, t1
+// CHECK-ASM: pmulhsu.h s0, a0, t1 # encoding: [0x3b,0x74,0x65,0xc0]
+
+pmulhrsu.h t3, t5, a4
+// CHECK-ASM: pmulhrsu.h t3, t5, a4 # encoding: [0x3b,0x7e,0xef,0xc4]
+
+pmhaccsu.h s0, s0, a4
+// CHECK-ASM: pmhaccsu.h s0, s0, a4 # encoding: [0x3b,0x74,0xe4,0xc8]
+
+pmhraccsu.h a2, a2, a0
+// CHECK-ASM: pmhraccsu.h a2, a2, a0 # encoding: [0x3b,0x76,0xa6,0xcc]
+
+pmulq.h a0, t1, t1
+// CHECK-ASM: pmulq.h a0, t1, t1 # encoding: [0x3b,0x75,0x63,0xd0]
+
+pmulqr.h s2, s0, s2
+// CHECK-ASM: pmulqr.h s2, s0, s2 # encoding: [0x3b,0x79,0x24,0xd5]
+
+mulhr a4, s2, t5
+// CHECK-ASM: mulhr a4, s2, t5 # encoding: [0x3b,0x77,0xe9,0x87]
+
+mhacc t1, s0, a2
+// CHECK-ASM: mhacc t1, s0, a2 # encoding: [0x3b,0x73,0xc4,0x8a]
+
+mhracc t1, t5, s0
+// CHECK-ASM: mhracc t1, t5, s0 # encoding: [0x3b,0x73,0x8f,0x8e]
+
+mulhru t1, t5, s0
+// CHECK-ASM: mulhru t1, t5, s0 # encoding: [0x3b,0x73,0x8f,0x96]
+
+mhaccu t3, a2, s2
+// CHECK-ASM: mhaccu t3, a2, s2 # encoding: [0x3b,0x7e,0x26,0x9b]
+
+mhraccu a0, t1, a4
+// CHECK-ASM: mhraccu a0, t1, a4 # encoding: [0x3b,0x75,0xe3,0x9e]
+
+mulh.h0 t3, a4, t1
+// CHECK-ASM: mulh.h0 t3, a4, t1 # encoding: [0x3b,0x7e,0x67,0xa2]
+
+mulhsu.h0 t1, a2, a0
+// CHECK-ASM: mulhsu.h0 t1, a2, a0 # encoding: [0x3b,0x73,0xa6,0xa6]
+
+mhacc.h0 s0, a2, t3
+// CHECK-ASM: mhacc.h0 s0, a2, t3 # encoding: [0x3b,0x74,0xc6,0xab]
+
+mhaccsu.h0 a2, t1, s0
+// CHECK-ASM: mhaccsu.h0 a2, t1, s0 # encoding: [0x3b,0x76,0x83,0xae]
+
+mulh.h1 t1, t1, t3
+// CHECK-ASM: mulh.h1 t1, t1, t3 # encoding: [0x3b,0x73,0xc3,0xb3]
+
+mulhsu.h1 t3, a2, t1
+// CHECK-ASM: mulhsu.h1 t3, a2, t1 # encoding: [0x3b,0x7e,0x66,0xb6]
+
+mhacc.h1 t3, a2, a0
+// CHECK-ASM: mhacc.h1 t3, a2, a0 # encoding: [0x3b,0x7e,0xa6,0xba]
+
+mhaccsu.h1 s0, s2, s0
+// CHECK-ASM: mhaccsu.h1 s0, s2, s0 # encoding: [0x3b,0x74,0x89,0xbe]
+
+mulhrsu.h t5, a4, t5
+// CHECK-ASM: mulhrsu.h t5, a4, t5 # encoding: [0x3b,0x7f,0xe7,0xc7]
+
+mhaccsu a0, a2, s2
+// CHECK-ASM: mhaccsu a0, a2, s2 # encoding: [0x3b,0x75,0x26,0xcb]
+
+mhraccsu a0, a0, t1
+// CHECK-ASM: mhraccsu a0, a0, t1 # encoding: [0x3b,0x75,0x65,0xce]
+
+mulq t1, a2, a2
+// CHECK-ASM: mulq t1, a2, a2 # encoding: [0x3b,0x73,0xc6,0xd2]
+
+mulqr a4, a4, t3
+// CHECK-ASM: mulqr a4, a4, t3 # encoding: [0x3b,0x77,0xc7,0xd7]
+
+mqacc.h00 a2, t3, t3
+// CHECK-ASM: mqacc.h00 a2, t3, t3 # encoding: [0x3b,0x76,0xce,0xe9]
+
+mqracc.h00 t5, a4, t3
+// CHECK-ASM: mqracc.h00 t5, a4, t3 # encoding: [0x3b,0x7f,0xc7,0xed]
+
+mqacc.h11 t5, t5, s0
+// CHECK-ASM: mqacc.h11 t5, t5, s0 # encoding: [0x3b,0x7f,0x8f,0xf8]
+
+mqracc.h11 s0, t5, s2
+// CHECK-ASM: mqracc.h11 s0, t5, s2 # encoding: [0x3b,0x74,0x2f,0xfd]
+
+pwslli.b a0, t1
+// CHECK-ASM: pwslli.b a0, t1 # encoding: [0x1b,0x4a,0x03,0x01]
+
+pwslli.h s0, a0
+// CHECK-ASM: pwslli.h s0, a0 # encoding: [0x1b,0x48,0x05,0x12]
+
+wslli s2, t3
+// CHECK-ASM: wslli s2, t3 # encoding: [0x1b,0x42,0x0e,0x24]
+
+pwslai.b t5, t5
+// CHECK-ASM: pwslai.b t5, t5 # encoding: [0x1b,0x4e,0x0f,0x41]
+
+pwslai.h t5, a4
+// CHECK-ASM: pwslai.h t5, a4 # encoding: [0x1b,0x4e,0x07,0x42]
+
+wslai t1, a2
+// CHECK-ASM: wslai t1, a2 # encoding: [0x1b,0x46,0x06,0x44]
+
+pli.dh s0, 0x7
+// CHECK-ASM: pli.dh s0, 7 # encoding: [0x1b,0xa4,0x03,0x30]
+
+pli.db a2, 0x1
+// CHECK-ASM: pli.db a2, 1 # encoding: [0x1b,0x26,0x01,0x34]
+
+plui.dh t5, 0x5
+// CHECK-ASM: plui.dh t5, 5 # encoding: [0x1b,0xaf,0x02,0x70]
+
+pwslli.b.b0 t3, t1, s0
+// CHECK-ASM: pwslli.b.b0 t3, t1, s0 # encoding: [0x1b,0x2c,0x83,0x08]
+
+pwsll.h.h0 s0, a4, t1
+// CHECK-ASM: pwsll.h.h0 s0, a4, t1 # encoding: [0x1b,0x28,0x67,0x0a]
+
+wsll a0, s0, s2
+// CHECK-ASM: wsll a0, s0, s2 # encoding: [0x1b,0x2a,0x24,0x0f]
+
+pwsla.b.b0 s0, s0, s0
+// CHECK-ASM: pwsla.b.b0 s0, s0, s0 # encoding: [0x1b,0x28,0x84,0x48]
+
+pwsla.h.h0 a4, a2, t5
+// CHECK-ASM: pwsla.h.h0 a4, a2, t5 # encoding: [0x1b,0x2e,0xe6,0x4b]
+
+wsla s0, a0, s2
+// CHECK-ASM: wsla s0, a0, s2 # encoding: [0x1b,0x28,0x25,0x4f]
+
+wzip8p t1, s2, a2
+// CHECK-ASM: wzip8p t1, s2, a2 # encoding: [0x1b,0x26,0xc9,0x78]
+
+wzip16p s2, t3, s2
+// CHECK-ASM: wzip16p s2, t3, s2 # encoding: [0x1b,0x22,0x2e,0x7b]
+
+pwadd.h a4, a2, a0
+// CHECK-ASM: pwadd.h a4, a2, a0 # encoding: [0xbb,0x2e,0xa6,0x00]
+
+wadd t1, t5, t5
+// CHECK-ASM: wadd t1, t5, t5 # encoding: [0xbb,0x26,0xef,0x03]
+
+pwadd.b s0, t3, a4
+// CHECK-ASM: pwadd.b s0, t3, a4 # encoding: [0xbb,0x28,0xee,0x04]
+
+pw2wadd.h t3, t3, a4
+// CHECK-ASM: pw2wadd.h t3, t3, a4 # encoding: [0xbb,0x2c,0xee,0x06]
+
+pwadda.h t1, t3, s2
+// CHECK-ASM: pwadda.h t1, t3, s2 # encoding: [0xbb,0x26,0x2e,0x09]
+
+wadda s2, t1, a0
+// CHECK-ASM: wadda s2, t1, a0 # encoding: [0xbb,0x22,0xa3,0x0a]
+
+pwadda.b a2, a2, s2
+// CHECK-ASM: pwadda.b a2, a2, s2 # encoding: [0xbb,0x2c,0x26,0x0d]
+
+pw2wadda.h t3, t1, t1
+// CHECK-ASM: pw2wadda.h t3, t1, t1 # encoding: [0xbb,0x2c,0x63,0x0e]
+
+pwaddu.h a2, t1, a4
+// CHECK-ASM: pwaddu.h a2, t1, a4 # encoding: [0xbb,0x2c,0xe3,0x10]
+
+waddu t1, s0, t1
+// CHECK-ASM: waddu t1, s0, t1 # encoding: [0xbb,0x26,0x64,0x12]
+
+pwaddu.b s2, a0, t3
+// CHECK-ASM: pwaddu.b s2, a0, t3 # encoding: [0xbb,0x22,0xc5,0x15]
+
+pw2wadd.hx a0, s0, t1
+// CHECK-ASM: pw2wadd.hx a0, s0, t1 # encoding: [0xbb,0x2a,0x64,0x16]
+
+pwaddau.h t1, t5, t3
+// CHECK-ASM: pwaddau.h t1, t5, t3 # encoding: [0xbb,0x26,0xcf,0x19]
+
+waddau t3, s0, s0
+// CHECK-ASM: waddau t3, s0, s0 # encoding: [0xbb,0x2c,0x84,0x1a]
+
+pwaddau.b a0, a0, t1
+// CHECK-ASM: pwaddau.b a0, a0, t1 # encoding: [0xbb,0x2a,0x65,0x1c]
+
+pw2wadda.hx a4, a2, t3
+// CHECK-ASM: pw2wadda.hx a4, a2, t3 # encoding: [0xbb,0x2e,0xc6,0x1f]
+
+pwmul.h s2, t1, a0
+// CHECK-ASM: pwmul.h s2, t1, a0 # encoding: [0xbb,0x22,0xa3,0x20]
+
+wmul t3, a2, t5
+// CHECK-ASM: wmul t3, a2, t5 # encoding: [0xbb,0x2c,0xe6,0x23]
+
+pwmul.b a0, s0, s2
+// CHECK-ASM: pwmul.b a0, s0, s2 # encoding: [0xbb,0x2a,0x24,0x25]
+
+pw2waddu.h s2, s2, a0
+// CHECK-ASM: pw2waddu.h s2, s2, a0 # encoding: [0xbb,0x22,0xa9,0x26]
+
+pwmacc.h s0, a2, a2
+// CHECK-ASM: pwmacc.h s0, a2, a2 # encoding: [0xbb,0x28,0xc6,0x28]
+
+wmacc a0, a2, a2
+// CHECK-ASM: wmacc a0, a2, a2 # encoding: [0xbb,0x2a,0xc6,0x2a]
+
+pm2waddau.h t5, a2, t5
+// CHECK-ASM: pm2waddau.h t5, a2, t5 # encoding: [0xbb,0x2e,0xe6,0x2f]
+
+pwmulu.h a2, a0, t5
+// CHECK-ASM: pwmulu.h a2, a0, t5 # encoding: [0xbb,0x2c,0xe5,0x31]
+
+wmulu s2, a0, t3
+// CHECK-ASM: wmulu s2, a0, t3 # encoding: [0xbb,0x22,0xc5,0x33]
+
+pwmulu.b a2, a4, a2
+// CHECK-ASM: pwmulu.b a2, a4, a2 # encoding: [0xbb,0x2c,0xc7,0x34]
+
+pwmaccu.h t1, a4, a2
+// CHECK-ASM: pwmaccu.h t1, a4, a2 # encoding: [0xbb,0x26,0xc7,0x38]
+
+wmaccu a2, a0, t1
+// CHECK-ASM: wmaccu a2, a0, t1 # encoding: [0xbb,0x2c,0x65,0x3a]
+
+pwsub.h s0, s2, t3
+// CHECK-ASM: pwsub.h s0, s2, t3 # encoding: [0xbb,0x28,0xc9,0x41]
+
+wsub t1, s2, a4
+// CHECK-ASM: wsub t1, s2, a4 # encoding: [0xbb,0x26,0xe9,0x42]
+
+pwsub.b a4, s2, s2
+// CHECK-ASM: pwsub.b a4, s2, s2 # encoding: [0xbb,0x2e,0x29,0x45]
+
+pw2wsub.h t1, a4, t3
+// CHECK-ASM: pw2wsub.h t1, a4, t3 # encoding: [0xbb,0x26,0xc7,0x47]
+
+pwsuba.h a4, t5, t1
+// CHECK-ASM: pwsuba.h a4, t5, t1 # encoding: [0xbb,0x2e,0x6f,0x48]
+
+wsuba a0, s0, t5
+// CHECK-ASM: wsuba a0, s0, t5 # encoding: [0xbb,0x2a,0xe4,0x4b]
+
+pwsuba.b a0, a2, s2
+// CHECK-ASM: pwsuba.b a0, a2, s2 # encoding: [0xbb,0x2a,0x26,0x4d]
+
+pw2wsuba.h t5, s0, s2
+// CHECK-ASM: pw2wsuba.h t5, s0, s2 # encoding: [0xbb,0x2e,0x24,0x4f]
+
+pwsubu.h t5, s2, a2
+// CHECK-ASM: pwsubu.h t5, s2, a2 # encoding: [0xbb,0x2e,0xc9,0x50]
+
+wsubu a2, a4, a0
+// CHECK-ASM: wsubu a2, a4, a0 # encoding: [0xbb,0x2c,0xa7,0x52]
+
+pwsubu.b a2, a2, t5
+// CHECK-ASM: pwsubu.b a2, a2, t5 # encoding: [0xbb,0x2c,0xe6,0x55]
+
+pw2wsub.hx t5, a2, a0
+// CHECK-ASM: pw2wsub.hx t5, a2, a0 # encoding: [0xbb,0x2e,0xa6,0x56]
+
+pwsubau.h t5, s0, s2
+// CHECK-ASM: pwsubau.h t5, s0, s2 # encoding: [0xbb,0x2e,0x24,0x59]
+
+wsubau t5, a0, t1
+// CHECK-ASM: wsubau t5, a0, t1 # encoding: [0xbb,0x2e,0x65,0x5a]
+
+pwsubau.b a2, a0, a0
+// CHECK-ASM: pwsubau.b a2, a0, a0 # encoding: [0xbb,0x2c,0xa5,0x5c]
+
+pw2wsuba.hx a2, a2, t5
+// CHECK-ASM: pw2wsuba.hx a2, a2, t5 # encoding: [0xbb,0x2c,0xe6,0x5f]
+
+pwmulsu.h s0, a2, t3
+// CHECK-ASM: pwmulsu.h s0, a2, t3 # encoding: [0xbb,0x28,0xc6,0x61]
+
+wmulsu a0, s2, a0
+// CHECK-ASM: wmulsu a0, s2, a0 # encoding: [0xbb,0x2a,0xa9,0x62]
+
+pwmulsu.b t3, t5, t1
+// CHECK-ASM: pwmulsu.b t3, t5, t1 # encoding: [0xbb,0x2c,0x6f,0x64]
+
+pm2waddsu.h a4, a2, s2
+// CHECK-ASM: pm2waddsu.h a4, a2, s2 # encoding: [0xbb,0x2e,0x26,0x67]
+
+pwmaccsu.h t5, s2, a2
+// CHECK-ASM: pwmaccsu.h t5, s2, a2 # encoding: [0xbb,0x2e,0xc9,0x68]
+
+wmaccsu t3, s0, a4
+// CHECK-ASM: wmaccsu t3, s0, a4 # encoding: [0xbb,0x2c,0xe4,0x6a]
+
+pm2waddasu.h t3, t5, a0
+// CHECK-ASM: pm2waddasu.h t3, t5, a0 # encoding: [0xbb,0x2c,0xaf,0x6e]
+
+pmqwacc.h t5, t5, a2
+// CHECK-ASM: pmqwacc.h t5, t5, a2 # encoding: [0xbb,0x2e,0xcf,0x78]
+
+pmqwacc s2, a4, a2
+// CHECK-ASM: pmqwacc s2, a4, a2 # encoding: [0xbb,0x22,0xc7,0x7a]
+
+pmqrwacc.h a4, t3, a4
+// CHECK-ASM: pmqrwacc.h a4, t3, a4 # encoding: [0xbb,0x2e,0xee,0x7c]
+
+pmqrwacc s0, s2, t5
+// CHECK-ASM: pmqrwacc s0, s2, t5 # encoding: [0xbb,0x28,0xe9,0x7f]
+
+predsum.dh s0, t3, a0
+// CHECK-ASM: predsum.dh s0, t3, a0 # encoding: [0x1b,0x44,0xac,0x08]
+
+predsum.db a2, s0, t3
+// CHECK-ASM: predsum.db a2, s0, t3 # encoding: [0x1b,0x46,0xc8,0x0d]
+
+predsumu.dh a2, a2, t3
+// CHECK-ASM: predsumu.dh a2, a2, t3 # encoding: [0x1b,0x46,0xcc,0x39]
+
+predsumu.db a2, a0, s0
+// CHECK-ASM: predsumu.db a2, a0, s0 # encoding: [0x1b,0x46,0x8a,0x3c]
+
+pnsrli.b a2, a0
+// CHECK-ASM: pnsrli.b a2, a0 # encoding: [0x1b,0xc6,0x0a,0x01]
+
+pnsrli.h a0, t3
+// CHECK-ASM: pnsrli.h a0, t3 # encoding: [0x1b,0xc5,0x0c,0x02]
+
+nsrli a2, a0
+// CHECK-ASM: nsrli a2, a0 # encoding: [0x1b,0xc6,0x0a,0x04]
+
+pnclipiu.b a4, t3
+// CHECK-ASM: pnclipiu.b a4, t3 # encoding: [0x1b,0xc7,0x0c,0x21]
+
+pnclipiu.h t1, s2
+// CHECK-ASM: pnclipiu.h t1, s2 # encoding: [0x1b,0xc3,0x02,0x22]
+
+nclipiu s0, a2
+// CHECK-ASM: nclipiu s0, a2 # encoding: [0x1b,0xc4,0x0c,0x24]
+
+pnclipriu.b s2, s0
+// CHECK-ASM: pnclipriu.b s2, s0 # encoding: [0x1b,0xc9,0x08,0x31]
+
+pnclipriu.h s0, s0
+// CHECK-ASM: pnclipriu.h s0, s0 # encoding: [0x1b,0xc4,0x08,0x32]
+
+nclipriu t3, t3
+// CHECK-ASM: nclipriu t3, t3 # encoding: [0x1b,0xce,0x0c,0x34]
+
+pnsrai.b s2, t5
+// CHECK-ASM: pnsrai.b s2, t5 # encoding: [0x1b,0xc9,0x0e,0x41]
+
+pnsrai.h s0, a0
+// CHECK-ASM: pnsrai.h s0, a0 # encoding: [0x1b,0xc4,0x0a,0x42]
+
+nsrai a4, t3
+// CHECK-ASM: nsrai a4, t3 # encoding: [0x1b,0xc7,0x0c,0x44]
+
+pnsari.b t5, t5
+// CHECK-ASM: pnsari.b t5, t5 # encoding: [0x1b,0xcf,0x0e,0x51]
+
+pnsari.h t1, a4
+// CHECK-ASM: pnsari.h t1, a4 # encoding: [0x1b,0xc3,0x0e,0x52]
+
+nsari s0, t1
+// CHECK-ASM: nsari s0, t1 # encoding: [0x1b,0xc4,0x06,0x54]
+
+pnclipi.b t1, a4
+// CHECK-ASM: pnclipi.b t1, a4 # encoding: [0x1b,0xc3,0x0e,0x61]
+
+pnclipi.h a0, a4
+// CHECK-ASM: pnclipi.h a0, a4 # encoding: [0x1b,0xc5,0x0e,0x62]
+
+nclipi t5, t5
+// CHECK-ASM: nclipi t5, t5 # encoding: [0x1b,0xcf,0x0e,0x64]
+
+pnclipri.b a0, s0
+// CHECK-ASM: pnclipri.b a0, s0 # encoding: [0x1b,0xc5,0x08,0x71]
+
+pnclipri.h s2, t5
+// CHECK-ASM: pnclipri.h s2, t5 # encoding: [0x1b,0xc9,0x0e,0x72]
+
+nclipri t3, s0
+// CHECK-ASM: nclipri t3, s0 # encoding: [0x1b,0xce,0x08,0x74]
+
+pnsrl.b.b0 t3, s0, a4
+// CHECK-ASM: pnsrl.b.b0 t3, s0, a4 # encoding: [0x1b,0xce,0xe8,0x08]
+
+pnsrl.h.h0 a2, t1, a4
+// CHECK-ASM: pnsrl.h.h0 a2, t1, a4 # encoding: [0x1b,0xc6,0xe6,0x0a]
+
+nsrl a2, a2, a0
+// CHECK-ASM: nsrl a2, a2, a0 # encoding: [0x1b,0xc6,0xac,0x0e]
+
+pnclipu.b.b0 a4, t5, a2
+// CHECK-ASM: pnclipu.b.b0 a4, t5, a2 # encoding: [0x1b,0xc7,0xce,0x28]
+
+pnclipu.h.h0 t1, a2, a4
+// CHECK-ASM: pnclipu.h.h0 t1, a2, a4 # encoding: [0x1b,0xc3,0xec,0x2a]
+
+nclipu t5, s2, t1
+// CHECK-ASM: nclipu t5, s2, t1 # encoding: [0x1b,0xcf,0x62,0x2e]
+
+pnclipru.b.b0 t5, s2, s2
+// CHECK-ASM: pnclipru.b.b0 t5, s2, s2 # encoding: [0x1b,0xcf,0x22,0x39]
+
+pnclipru.h.h0 t5, s2, a0
+// CHECK-ASM: pnclipru.h.h0 t5, s2, a0 # encoding: [0x1b,0xcf,0xa2,0x3a]
+
+nclipru a4, t5, t5
+// CHECK-ASM: nclipru a4, t5, t5 # encoding: [0x1b,0xc7,0xee,0x3f]
+
+pnsra.b.b0 a4, t1, a4
+// CHECK-ASM: pnsra.b.b0 a4, t1, a4 # encoding: [0x1b,0xc7,0xe6,0x48]
+
+pnsra.h.h0 s0, s2, t3
+// CHECK-ASM: pnsra.h.h0 s0, s2, t3 # encoding: [0x1b,0xc4,0xc2,0x4b]
+
+nsra t1, s0, a4
+// CHECK-ASM: nsra t1, s0, a4 # encoding: [0x1b,0xc3,0xe8,0x4e]
+
+pnsrar.b.b0 a2, s0, a4
+// CHECK-ASM: pnsrar.b.b0 a2, s0, a4 # encoding: [0x1b,0xc6,0xe8,0x58]
+
+pnsrar.h.h0 s0, a4, a0
+// CHECK-ASM: pnsrar.h.h0 s0, a4, a0 # encoding: [0x1b,0xc4,0xae,0x5a]
+
+nsrar a4, a4, s0
+// CHECK-ASM: nsrar a4, a4, s0 # encoding: [0x1b,0xc7,0x8e,0x5e]
+
+pnclip.b.b0 t1, t5, t3
+// CHECK-ASM: pnclip.b.b0 t1, t5, t3 # encoding: [0x1b,0xc3,0xce,0x69]
+
+pnclip.h.h0 a0, a2, a0
+// CHECK-ASM: pnclip.h.h0 a0, a2, a0 # encoding: [0x1b,0xc5,0xac,0x6a]
+
+nclip t3, t5, t3
+// CHECK-ASM: nclip t3, t5, t3 # encoding: [0x1b,0xce,0xce,0x6f]
+
+pnclipr.b.b0 t1, a2, a0
+// CHECK-ASM: pnclipr.b.b0 t1, a2, a0 # encoding: [0x1b,0xc3,0xac,0x78]
+
+pnclipr.h.h0 a4, s2, t3
+// CHECK-ASM: pnclipr.h.h0 a4, s2, t3 # encoding: [0x1b,0xc7,0xc2,0x7b]
+
+nclipr t1, t5, a2
+// CHECK-ASM: nclipr t1, t5, a2 # encoding: [0x1b,0xc3,0xce,0x7e]
+
+pslli.db a0, s2
+// CHECK-ASM: pslli.db a0, s2 # encoding: [0x1b,0x4a,0x82,0x00]
+
+pslli.dh t3, t1
+// CHECK-ASM: pslli.dh t3, t1 # encoding: [0x1b,0x4c,0x06,0x01]
+
+pslli.dw a4, t3
+// CHECK-ASM: pslli.dw a4, t3 # encoding: [0x1b,0x4e,0x0c,0x02]
+
+psslai.dh t1, a4
+// CHECK-ASM: psslai.dh t1, a4 # encoding: [0x1b,0x46,0x0e,0x51]
+
+psslai.dw a0, t3
+// CHECK-ASM: psslai.dw a0, t3 # encoding: [0x1b,0x4a,0x0c,0x52]
+
+psextb.dh t1, t5
+// CHECK-ASM: psextb.dh t1, t5 # encoding: [0x1b,0x26,0x4e,0x60]
+
+psextb.dw t5, t5
+// CHECK-ASM: psextb.dw t5, t5 # encoding: [0x1b,0x2e,0x4e,0x62]
+
+psextw.dw s0, t1
+// CHECK-ASM: psextw.dw s0, t1 # encoding: [0x1b,0x28,0x56,0x62]
+
+psabs.dh s0, s2
+// CHECK-ASM: psabs.dh s0, s2 # encoding: [0x1b,0x28,0x72,0x60]
+
+psabs.db s2, a2
+// CHECK-ASM: psabs.db s2, a2 # encoding: [0x1b,0x22,0x7c,0x64]
+
+psll.dh.h0 s2, t3, a4
+// CHECK-ASM: psll.dh.h0 s2, t3, a4 # encoding: [0x1b,0x62,0xec,0x08]
+
+psll.dw.w a2, t1, t3
+// CHECK-ASM: psll.dw.w a2, t1, t3 # encoding: [0x1b,0x6c,0xc6,0x0b]
+
+psll.db.b0 a0, a4, a2
+// CHECK-ASM: psll.db.b0 a0, a4, a2 # encoding: [0x1b,0x6a,0xce,0x0c]
+
+padd.dh.h0 t1, a4, s2
+// CHECK-ASM: padd.dh.h0 t1, a4, s2 # encoding: [0x1b,0x66,0x2e,0x19]
+
+padd.dw.w a4, a4, t3
+// CHECK-ASM: padd.dw.w a4, a4, t3 # encoding: [0x1b,0x6e,0xce,0x1b]
+
+padd.db.b0 a2, a4, t3
+// CHECK-ASM: padd.db.b0 a2, a4, t3 # encoding: [0x1b,0x6c,0xce,0x1d]
+
+pssha.dh.h0 a0, s0, s2
+// CHECK-ASM: pssha.dh.h0 a0, s0, s2 # encoding: [0x1b,0x6a,0x28,0x69]
+
+pssha.dw.w a0, t1, s2
+// CHECK-ASM: pssha.dw.w a0, t1, s2 # encoding: [0x1b,0x6a,0x26,0x6b]
+
+psshar.dh.h0 a2, a4, t3
+// CHECK-ASM: psshar.dh.h0 a2, a4, t3 # encoding: [0x1b,0x6c,0xce,0x79]
+
+psshar.dw.w s0, t3, s0
+// CHECK-ASM: psshar.dw.w s0, t3, s0 # encoding: [0x1b,0x68,0x8c,0x7a]
+
+psrli.db t5, a2
+// CHECK-ASM: psrli.db t5, a2 # encoding: [0x1b,0xce,0x8c,0x00]
+
+psrli.dh a2, t3
+// CHECK-ASM: psrli.dh a2, t3 # encoding: [0x1b,0xcc,0x0c,0x01]
+
+psrli.dw s2, t1
+// CHECK-ASM: psrli.dw s2, t1 # encoding: [0x1b,0xc2,0x06,0x02]
+
+pusati.dh a0, a4
+// CHECK-ASM: pusati.dh a0, a4 # encoding: [0x1b,0xca,0x0e,0x21]
+
+pusati.dw a0, s2
+// CHECK-ASM: pusati.dw a0, s2 # encoding: [0x1b,0xca,0x02,0x22]
+
+psrai.db t5, t5
+// CHECK-ASM: psrai.db t5, t5 # encoding: [0x1b,0xce,0x8e,0x40]
+
+psrai.dh s0, a2
+// CHECK-ASM: psrai.dh s0, a2 # encoding: [0x1b,0xc8,0x0c,0x41]
+
+psrai.dw t5, a0
+// CHECK-ASM: psrai.dw t5, a0 # encoding: [0x1b,0xce,0x0a,0x42]
+
+psrari.dh a2, a2
+// CHECK-ASM: psrari.dh a2, a2 # encoding: [0x1b,0xcc,0x0c,0x51]
+
+psrari.dw a4, a0
+// CHECK-ASM: psrari.dw a4, a0 # encoding: [0x1b,0xce,0x0a,0x52]
+
+psati.dh s2, s2
+// CHECK-ASM: psati.dh s2, s2 # encoding: [0x1b,0xc2,0x02,0x61]
+
+psati.dw t5, t3
+// CHECK-ASM: psati.dw t5, t3 # encoding: [0x1b,0xce,0x0c,0x62]
+
+psrl.dh.h0 a0, t1, t5
+// CHECK-ASM: psrl.dh.h0 a0, t1, t5 # encoding: [0x1b,0xea,0xe6,0x09]
+
+psrl.dw.w s0, s2, t1
+// CHECK-ASM: psrl.dw.w s0, s2, t1 # encoding: [0x1b,0xe8,0x62,0x0a]
+
+psrl.db.b0 a0, s0, t5
+// CHECK-ASM: psrl.db.b0 a0, s0, t5 # encoding: [0x1b,0xea,0xe8,0x0d]
+
+psra.dh.h0 a4, t3, t1
+// CHECK-ASM: psra.dh.h0 a4, t3, t1 # encoding: [0x1b,0xee,0x6c,0x48]
+
+psra.dw.w a2, s2, t1
+// CHECK-ASM: psra.dw.w a2, s2, t1 # encoding: [0x1b,0xec,0x62,0x4a]
+
+psra.db.b0 s0, t1, t5
+// CHECK-ASM: psra.db.b0 s0, t1, t5 # encoding: [0x1b,0xe8,0xe6,0x4d]
+
+padd.dh s2, a4, a2
+// CHECK-ASM: padd.dh s2, a4, a2 # encoding: [0x1b,0x62,0x8e,0x81]
+
+padd.dw a2, s2, a2
+// CHECK-ASM: padd.dw a2, s2, a2 # encoding: [0x1b,0x6c,0x82,0x83]
+
+padd.db a4, a2, a2
+// CHECK-ASM: padd.db a4, a2, a2 # encoding: [0x1b,0x6e,0x8c,0x85]
+
+addd t1, s2, s0
+// CHECK-ASM: addd t1, s2, s0 # encoding: [0x1b,0x66,0x02,0x87]
+
+psadd.dh t3, s2, t3
+// CHECK-ASM: psadd.dh t3, s2, t3 # encoding: [0x1b,0x6c,0x82,0x91]
+
+psadd.dw a4, t3, t3
+// CHECK-ASM: psadd.dw a4, t3, t3 # encoding: [0x1b,0x6e,0x8c,0x93]
+
+psadd.db t5, s0, a2
+// CHECK-ASM: psadd.db t5, s0, a2 # encoding: [0x1b,0x6e,0x88,0x95]
+
+paadd.dh t1, s2, a0
+// CHECK-ASM: paadd.dh t1, s2, a0 # encoding: [0x1b,0x66,0x42,0x99]
+
+paadd.dw a4, a2, s0
+// CHECK-ASM: paadd.dw a4, a2, s0 # encoding: [0x1b,0x6e,0x0c,0x9b]
+
+paadd.db t5, t3, s0
+// CHECK-ASM: paadd.db t5, t3, s0 # encoding: [0x1b,0x6e,0x0c,0x9d]
+
+psaddu.dh a4, a2, t5
+// CHECK-ASM: psaddu.dh a4, a2, t5 # encoding: [0x1b,0x6e,0xcc,0xb1]
+
+psaddu.dw a4, t5, s2
+// CHECK-ASM: psaddu.dw a4, t5, s2 # encoding: [0x1b,0x6e,0x4e,0xb2]
+
+psaddu.db a4, a0, t1
+// CHECK-ASM: psaddu.db a4, a0, t1 # encoding: [0x1b,0x6e,0xca,0xb4]
+
+paaddu.dh a4, a4, s2
+// CHECK-ASM: paaddu.dh a4, a4, s2 # encoding: [0x1b,0x6e,0x4e,0xb8]
+
+paaddu.dw t3, s0, t5
+// CHECK-ASM: paaddu.dw t3, s0, t5 # encoding: [0x1b,0x6c,0xc8,0xbb]
+
+paaddu.db a0, s0, s0
+// CHECK-ASM: paaddu.db a0, s0, s0 # encoding: [0x1b,0x6a,0x08,0xbd]
+
+psub.dh t5, a4, a4
+// CHECK-ASM: psub.dh t5, a4, a4 # encoding: [0x1b,0x6e,0xce,0xc1]
+
+psub.dw t1, s0, t5
+// CHECK-ASM: psub.dw t1, s0, t5 # encoding: [0x1b,0x66,0xc8,0xc3]
+
+psub.db a4, a0, t5
+// CHECK-ASM: psub.db a4, a0, t5 # encoding: [0x1b,0x6e,0xca,0xc5]
+
+subd a2, a4, t1
+// CHECK-ASM: subd a2, a4, t1 # encoding: [0x1b,0x6c,0xce,0xc6]
+
+pdif.dh t5, t1, t3
+// CHECK-ASM: pdif.dh t5, t1, t3 # encoding: [0x1b,0x6e,0x86,0xc9]
+
+pdif.db t1, t5, a0
+// CHECK-ASM: pdif.db t1, t5, a0 # encoding: [0x1b,0x66,0x4e,0xcd]
+
+pssub.dh s0, s2, s2
+// CHECK-ASM: pssub.dh s0, s2, s2 # encoding: [0x1b,0x68,0x42,0xd0]
+
+pssub.dw t3, a2, t3
+// CHECK-ASM: pssub.dw t3, a2, t3 # encoding: [0x1b,0x6c,0x8c,0xd3]
+
+pssub.db a0, s0, s2
+// CHECK-ASM: pssub.db a0, s0, s2 # encoding: [0x1b,0x6a,0x48,0xd4]
+
+pasub.dh t1, a4, s0
+// CHECK-ASM: pasub.dh t1, a4, s0 # encoding: [0x1b,0x66,0x0e,0xd9]
+
+pasub.dw t1, s2, s2
+// CHECK-ASM: pasub.dw t1, s2, s2 # encoding: [0x1b,0x66,0x42,0xda]
+
+pasub.db a0, a0, a0
+// CHECK-ASM: pasub.db a0, a0, a0 # encoding: [0x1b,0x6a,0x4a,0xdd]
+
+pdifu.dh t5, a4, a4
+// CHECK-ASM: pdifu.dh t5, a4, a4 # encoding: [0x1b,0x6e,0xce,0xe9]
+
+pdifu.db t1, t1, a4
+// CHECK-ASM: pdifu.db t1, t1, a4 # encoding: [0x1b,0x66,0xc6,0xed]
+
+pssubu.dh t5, t1, t5
+// CHECK-ASM: pssubu.dh t5, t1, t5 # encoding: [0x1b,0x6e,0xc6,0xf1]
+
+pssubu.dw a4, a4, t1
+// CHECK-ASM: pssubu.dw a4, a4, t1 # encoding: [0x1b,0x6e,0xce,0xf2]
+
+pssubu.db s0, t5, a2
+// CHECK-ASM: pssubu.db s0, t5, a2 # encoding: [0x1b,0x68,0x8e,0xf5]
+
+pasubu.dh t5, a2, a2
+// CHECK-ASM: pasubu.dh t5, a2, a2 # encoding: [0x1b,0x6e,0x8c,0xf9]
+
+pasubu.dw a0, a2, a4
+// CHECK-ASM: pasubu.dw a0, a2, a4 # encoding: [0x1b,0x6a,0xcc,0xfb]
+
+pasubu.db a0, s0, s0
+// CHECK-ASM: pasubu.db a0, s0, s0 # encoding: [0x1b,0x6a,0x08,0xfd]
+
+psh1add.dh t5, a4, t5
+// CHECK-ASM: psh1add.dh t5, a4, t5 # encoding: [0x1b,0x6e,0xde,0xa1]
+
+psh1add.dw a4, t5, s0
+// CHECK-ASM: psh1add.dw a4, t5, s0 # encoding: [0x1b,0x6e,0x1e,0xa3]
+
+pssh1sadd.dh t3, a4, a0
+// CHECK-ASM: pssh1sadd.dh t3, a4, a0 # encoding: [0x1b,0x6c,0x5e,0xb1]
+
+pssh1sadd.dw t1, t1, a2
+// CHECK-ASM: pssh1sadd.dw t1, t1, a2 # encoding: [0x1b,0x66,0x96,0xb3]
+
+ppack.dh a2, t1, s2
+// CHECK-ASM: ppack.dh a2, t1, s2 # encoding: [0x1b,0xec,0x46,0x80]
+
+ppack.dw t5, t3, a4
+// CHECK-ASM: ppack.dw t5, t3, a4 # encoding: [0x1b,0xee,0xcc,0x83]
+
+ppackbt.dh t1, t3, t1
+// CHECK-ASM: ppackbt.dh t1, t3, t1 # encoding: [0x1b,0xe6,0xcc,0x90]
+
+ppackbt.dw a4, t5, a2
+// CHECK-ASM: ppackbt.dw a4, t5, a2 # encoding: [0x1b,0xee,0x8e,0x93]
+
+ppacktb.dh a4, t1, a2
+// CHECK-ASM: ppacktb.dh a4, t1, a2 # encoding: [0x1b,0xee,0x86,0xa1]
+
+ppacktb.dw a2, t5, s0
+// CHECK-ASM: ppacktb.dw a2, t5, s0 # encoding: [0x1b,0xec,0x0e,0xa3]
+
+ppackt.dh a0, a0, s0
+// CHECK-ASM: ppackt.dh a0, a0, s0 # encoding: [0x1b,0xea,0x0a,0xb1]
+
+ppackt.dw a4, a4, a2
+// CHECK-ASM: ppackt.dw a4, a4, a2 # encoding: [0x1b,0xee,0x8e,0xb3]
+
+pas.dhx t3, t3, s2
+// CHECK-ASM: pas.dhx t3, t3, s2 # encoding: [0x1b,0xec,0x5c,0x80]
+
+psa.dhx a0, s2, a2
+// CHECK-ASM: psa.dhx a0, s2, a2 # encoding: [0x1b,0xea,0x92,0x85]
+
+psas.dhx a2, a2, s0
+// CHECK-ASM: psas.dhx a2, a2, s0 # encoding: [0x1b,0xec,0x1c,0x91]
+
+pssa.dhx t3, t3, t3
+// CHECK-ASM: pssa.dhx t3, t3, t3 # encoding: [0x1b,0xec,0x9c,0x95]
+
+paax.dhx t3, t3, a4
+// CHECK-ASM: paax.dhx t3, t3, a4 # encoding: [0x1b,0xec,0xdc,0x99]
+
+pasa.dhx a0, t1, t1
+// CHECK-ASM: pasa.dhx a0, t1, t1 # encoding: [0x1b,0xea,0xd6,0x9c]
+
+pmseq.dh a4, t1, t3
+// CHECK-ASM: pmseq.dh a4, t1, t3 # encoding: [0x1b,0xee,0x96,0xc1]
+
+pmseq.dw t1, s0, a2
+// CHECK-ASM: pmseq.dw t1, s0, a2 # encoding: [0x1b,0xe6,0x98,0xc3]
+
+pmseq.db a2, a2, t5
+// CHECK-ASM: pmseq.db a2, a2, t5 # encoding: [0x1b,0xec,0xdc,0xc5]
+
+pmslt.dh s2, t5, s2
+// CHECK-ASM: pmslt.dh s2, t5, s2 # encoding: [0x1b,0xe2,0x5e,0xd0]
+
+pmslt.dw t1, t1, a2
+// CHECK-ASM: pmslt.dw t1, t1, a2 # encoding: [0x1b,0xe6,0x96,0xd3]
+
+pmslt.db t5, s0, s2
+// CHECK-ASM: pmslt.db t5, s0, s2 # encoding: [0x1b,0xee,0x58,0xd4]
+
+pmsltu.dh s2, a0, s2
+// CHECK-ASM: pmsltu.dh s2, a0, s2 # encoding: [0x1b,0xe2,0x5a,0xd8]
+
+pmsltu.dw s0, t3, a0
+// CHECK-ASM: pmsltu.dw s0, t3, a0 # encoding: [0x1b,0xe8,0x5c,0xdb]
+
+pmsltu.db s0, t3, t3
+// CHECK-ASM: pmsltu.db s0, t3, t3 # encoding: [0x1b,0xe8,0x9c,0xdd]
+
+pmin.dh a2, s0, t3
+// CHECK-ASM: pmin.dh a2, s0, t3 # encoding: [0x1b,0xec,0x98,0xe1]
+
+pmin.db t3, s2, t3
+// CHECK-ASM: pmin.db t3, s2, t3 # encoding: [0x1b,0xec,0x92,0xe5]
+
+pminu.dh t1, t3, t5
+// CHECK-ASM: pminu.dh t1, t3, t5 # encoding: [0x1b,0xe6,0xdc,0xe9]
+
+pminu.db t1, s0, a2
+// CHECK-ASM: pminu.db t1, s0, a2 # encoding: [0x1b,0xe6,0x98,0xed]
+
+pmax.dh a0, a0, a0
+// CHECK-ASM: pmax.dh a0, a0, a0 # encoding: [0x1b,0xea,0x5a,0xf1]
+
+pmax.db a2, a2, s2
+// CHECK-ASM: pmax.db a2, a2, s2 # encoding: [0x1b,0xec,0x5c,0xf4]
+
+pmaxu.dh a4, t3, s0
+// CHECK-ASM: pmaxu.dh a4, t3, s0 # encoding: [0x1b,0xee,0x1c,0xf9]
+
+pmaxu.db a4, t5, a0
+// CHECK-ASM: pmaxu.db a4, t5, a0 # encoding: [0x1b,0xee,0x5e,0xfd]
diff --git a/llvm/test/MC/RISCV/rv64p-invalid.s b/llvm/test/MC/RISCV/rv64p-invalid.s
new file mode 100644
index 00000000000000..8ab5437ad3166d
--- /dev/null
+++ b/llvm/test/MC/RISCV/rv64p-invalid.s
@@ -0,0 +1,9 @@
+# RUN: not llvm-mc -triple=riscv64 --mattr=+experimental-p %s 2>&1 \
+# RUN: | FileCheck %s --check-prefixes=CHECK-ERROR
+
+# Imm overflow
+pli.h a0, 0x400
+# CHECK-ERROR: immediate must be an integer in the range [-512, 511]
+
+pli.w a1, -0x201
+# CHECK-ERROR: immediate must be an integer in the range [-512, 511]
diff --git a/llvm/test/MC/RISCV/rv64p-valid.s b/llvm/test/MC/RISCV/rv64p-valid.s
new file mode 100644
index 00000000000000..b4200e1cfb0134
--- /dev/null
+++ b/llvm/test/MC/RISCV/rv64p-valid.s
@@ -0,0 +1,911 @@
+// NOTE: Assertions have been autogenerated by utils/update_mc_test_checks.py UTC_ARGS: --llvm-mc-binary ./llvm-mc --tool ./llvm-objdump --version 5
+# RUN: llvm-mc %s -triple=riscv64 -mattr=+experimental-p -riscv-no-aliases -show-encoding \
+# RUN: | FileCheck -check-prefixes=CHECK-ASM %s
+clz a0, a1
+// CHECK-ASM: clz a0, a1 # encoding: [0x13,0x95,0x05,0x60]
+
+cls a1, a2
+// CHECK-ASM: cls a1, a2 # encoding: [0x93,0x15,0x36,0x60]
+
+sext.b a2, a3
+// CHECK-ASM: sext.b a2, a3 # encoding: [0x13,0x96,0x46,0x60]
+
+sext.h t0, t1
+// CHECK-ASM: sext.h t0, t1 # encoding: [0x93,0x12,0x53,0x60]
+
+abs a4, a5
+// CHECK-ASM: abs a4, a5 # encoding: [0x13,0x97,0x77,0x60]
+
+rev16 s0, s1
+// CHECK-ASM: rev16 s0, s1 # encoding: [0x13,0xd4,0x04,0x6b]
+
+rev8 s0, s1
+// CHECK-ASM: rev8 s0, s1 # encoding: [0x13,0xd4,0x84,0x6b]
+
+rev s2, s3
+// CHECK-ASM: rev s2, s3 # encoding: [0x13,0xd9,0xf9,0x7b]
+
+clzw s0, s1
+// CHECK-ASM: clzw s0, s1 # encoding: [0x1b,0x94,0x04,0x60]
+
+clsw s2, s3
+// CHECK-ASM: clsw s2, s3 # encoding: [0x1b,0x99,0x39,0x60]
+
+absw s2, s3
+// CHECK-ASM: absw s2, s3 # encoding: [0x1b,0x99,0x79,0x60]
+
+sh1add a0, a1, a2
+// CHECK-ASM: sh1add a0, a1, a2 # encoding: [0x33,0xa5,0xc5,0x20]
+
+pack s0, s1, s2
+// CHECK-ASM: pack s0, s1, s2 # encoding: [0x33,0xc4,0x24,0x09]
+
+min t0, t1, t2
+// CHECK-ASM: min t0, t1, t2 # encoding: [0xb3,0x42,0x73,0x0a]
+
+minu x1, x2, x3
+// CHECK-ASM: minu ra, sp, gp # encoding: [0xb3,0x50,0x31,0x0a]
+
+max t3, t4, t5
+// CHECK-ASM: max t3, t4, t5 # encoding: [0x33,0xee,0xee,0x0b]
+
+maxu a4, a5, a6
+// CHECK-ASM: maxu a4, a5, a6 # encoding: [0x33,0xf7,0x07,0x0b]
+
+pslli.b a6, a7
+// CHECK-ASM: pslli.b a6, a7 # encoding: [0x1b,0xa8,0x88,0x80]
+
+pslli.h x1, x2
+// CHECK-ASM: pslli.h ra, sp # encoding: [0x9b,0x20,0x01,0x81]
+
+pslli.w x1, x2
+// CHECK-ASM: pslli.w ra, sp # encoding: [0x9b,0x20,0x01,0x82]
+
+psslai.h t0, t1
+// CHECK-ASM: psslai.h t0, t1 # encoding: [0x9b,0x22,0x03,0x51]
+
+psslai.w a4, a5
+// CHECK-ASM: psslai.w a4, a5 # encoding: [0x1b,0xa7,0x07,0x52]
+
+pli.h a5, 0x5
+// CHECK-ASM: pli.h a5, 5 # encoding: [0x9b,0xa7,0x02,0xb0]
+
+pli.w a5, 0x5
+// CHECK-ASM: pli.w a5, 5 # encoding: [0x9b,0xa7,0x02,0xb2]
+
+pli.b a6, 0x6
+// CHECK-ASM: pli.b a6, 6 # encoding: [0x1b,0x28,0x06,0xb4]
+
+psextb.h t3, a2
+// CHECK-ASM: psextb.h t3, a2 # encoding: [0x1b,0x2e,0x46,0xe0]
+
+psextb.w a2, s0
+// CHECK-ASM: psextb.w a2, s0 # encoding: [0x1b,0x26,0x44,0xe2]
+
+psexth.w t1, t3
+// CHECK-ASM: psexth.w t1, t3 # encoding: [0x1b,0x23,0x5e,0xe2]
+
+psabs.h t1, t5
+// CHECK-ASM: psabs.h t1, t5 # encoding: [0x1b,0x23,0x7f,0xe0]
+
+psabs.b a0, s2
+// CHECK-ASM: psabs.b a0, s2 # encoding: [0x1b,0x25,0x79,0xe4]
+
+plui.h s2, 0x4
+// CHECK-ASM: plui.h s2, 4 # encoding: [0x1b,0x29,0x02,0xf0]
+
+plui.w a2, 0x1
+// CHECK-ASM: plui.w a2, 1 # encoding: [0x1b,0xa6,0x00,0xf2]
+
+psll.h.h0 s0, a2, s2
+// CHECK-ASM: psll.h.h0 s0, a2, s2 # encoding: [0x1b,0x24,0x26,0x89]
+
+psll.b.b0 a0, t3, t5
+// CHECK-ASM: psll.b.b0 a0, t3, t5 # encoding: [0x1b,0x25,0xee,0x8d]
+
+padd.h.h0 t1, a2, s0
+// CHECK-ASM: padd.h.h0 t1, a2, s0 # encoding: [0x1b,0x23,0x86,0x98]
+
+padd.b.b0 t3, t1, t3
+// CHECK-ASM: padd.b.b0 t3, t1, t3 # encoding: [0x1b,0x2e,0xc3,0x9d]
+
+pssha.h.h0 s0, t1, a2
+// CHECK-ASM: pssha.h.h0 s0, t1, a2 # encoding: [0x1b,0x24,0xc3,0xe8]
+
+psshar.h.h0 s2, t5, t3
+// CHECK-ASM: psshar.h.h0 s2, t5, t3 # encoding: [0x1b,0x29,0xcf,0xf9]
+
+psll.w.w0 s0, t1, a0
+// CHECK-ASM: psll.w.w0 s0, t1, a0 # encoding: [0x1b,0x24,0xa3,0x8a]
+
+padd.w.w0 s2, a2, a0
+// CHECK-ASM: padd.w.w0 s2, a2, a0 # encoding: [0x1b,0x29,0xa6,0x9a]
+
+pssha.w.w0 a4, a2, t1
+// CHECK-ASM: pssha.w.w0 a4, a2, t1 # encoding: [0x1b,0x27,0x66,0xea]
+
+psshar.w.w0 a2, a0, a4
+// CHECK-ASM: psshar.w.w0 a2, a0, a4 # encoding: [0x1b,0x26,0xe5,0xfa]
+
+sha a0, t5, t5
+// CHECK-ASM: sha a0, t5, t5 # encoding: [0x1b,0x25,0xef,0xef]
+
+shar t5, t5, t3
+// CHECK-ASM: shar t5, t5, t3 # encoding: [0x1b,0x2f,0xcf,0xff]
+
+psrli.b t1, a0
+// CHECK-ASM: psrli.b t1, a0 # encoding: [0x1b,0x43,0x85,0x80]
+
+psrli.h a4, s0
+// CHECK-ASM: psrli.h a4, s0 # encoding: [0x1b,0x47,0x04,0x81]
+
+pusati.h t3, s0
+// CHECK-ASM: pusati.h t3, s0 # encoding: [0x1b,0x4e,0x04,0xa1]
+
+psrai.b t1, t1
+// CHECK-ASM: psrai.b t1, t1 # encoding: [0x1b,0x43,0x83,0xc0]
+
+psrai.h a2, t5
+// CHECK-ASM: psrai.h a2, t5 # encoding: [0x1b,0x46,0x0f,0xc1]
+
+psrari.h t1, t5
+// CHECK-ASM: psrari.h t1, t5 # encoding: [0x1b,0x43,0x0f,0xd1]
+
+psati.h a2, s2
+// CHECK-ASM: psati.h a2, s2 # encoding: [0x1b,0x46,0x09,0xe1]
+
+psrli.w s2, a0
+// CHECK-ASM: psrli.w s2, a0 # encoding: [0x1b,0x49,0x05,0x82]
+
+pusati.w t3, a4
+// CHECK-ASM: pusati.w t3, a4 # encoding: [0x1b,0x4e,0x07,0xa2]
+
+usati s0, a2
+// CHECK-ASM: usati s0, a2 # encoding: [0x1b,0x44,0x06,0xa4]
+
+psrl.h.h0 a2, t3, t3
+// CHECK-ASM: psrl.h.h0 a2, t3, t3 # encoding: [0x1b,0x46,0xce,0x89]
+
+psrl.b.b0 s0, t1, s0
+// CHECK-ASM: psrl.b.b0 s0, t1, s0 # encoding: [0x1b,0x44,0x83,0x8c]
+
+predsum.h t5, a0, a2
+// CHECK-ASM: predsum.h t5, a0, a2 # encoding: [0x1b,0x4f,0xc5,0x98]
+
+predsum.b t5, a4, s2
+// CHECK-ASM: predsum.b t5, a4, s2 # encoding: [0x1b,0x4f,0x27,0x9d]
+
+predsumu.h a2, s2, a0
+// CHECK-ASM: predsumu.h a2, s2, a0 # encoding: [0x1b,0x46,0xa9,0xb8]
+
+predsumu.b s2, s0, t1
+// CHECK-ASM: predsumu.b s2, s0, t1 # encoding: [0x1b,0x49,0x64,0xbc]
+
+psra.h.h0 a0, t3, s2
+// CHECK-ASM: psra.h.h0 a0, t3, s2 # encoding: [0x1b,0x45,0x2e,0xc9]
+
+psra.b.b0 a4, t5, a4
+// CHECK-ASM: psra.b.b0 a4, t5, a4 # encoding: [0x1b,0x47,0xef,0xcc]
+
+psrl.w.w0 t3, t1, a2
+// CHECK-ASM: psrl.w.w0 t3, t1, a2 # encoding: [0x1b,0x4e,0xc3,0x8a]
+
+predsum.w s2, a2, t5
+// CHECK-ASM: predsum.w s2, a2, t5 # encoding: [0x1b,0x49,0xe6,0x9b]
+
+predsumu.w s2, a0, a2
+// CHECK-ASM: predsumu.w s2, a0, a2 # encoding: [0x1b,0x49,0xc5,0xba]
+
+psra.w.w0 t5, a0, t5
+// CHECK-ASM: psra.w.w0 t5, a0, t5 # encoding: [0x1b,0x4f,0xe5,0xcb]
+
+padd.h t1, t5, s2
+// CHECK-ASM: padd.h t1, t5, s2 # encoding: [0x3b,0x03,0x2f,0x81]
+
+padd.b t5, s0, t1
+// CHECK-ASM: padd.b t5, s0, t1 # encoding: [0x3b,0x0f,0x64,0x84]
+
+psadd.h a2, a2, s2
+// CHECK-ASM: psadd.h a2, a2, s2 # encoding: [0x3b,0x06,0x26,0x91]
+
+psadd.b t1, a0, s0
+// CHECK-ASM: psadd.b t1, a0, s0 # encoding: [0x3b,0x03,0x85,0x94]
+
+paadd.h t5, s0, t3
+// CHECK-ASM: paadd.h t5, s0, t3 # encoding: [0x3b,0x0f,0xc4,0x99]
+
+paadd.b a4, s2, a4
+// CHECK-ASM: paadd.b a4, s2, a4 # encoding: [0x3b,0x07,0xe9,0x9c]
+
+psaddu.h a0, t1, t1
+// CHECK-ASM: psaddu.h a0, t1, t1 # encoding: [0x3b,0x05,0x63,0xb0]
+
+psaddu.b t3, a2, a4
+// CHECK-ASM: psaddu.b t3, a2, a4 # encoding: [0x3b,0x0e,0xe6,0xb4]
+
+paaddu.h t3, s2, a2
+// CHECK-ASM: paaddu.h t3, s2, a2 # encoding: [0x3b,0x0e,0xc9,0xb8]
+
+paaddu.b t3, a0, t3
+// CHECK-ASM: paaddu.b t3, a0, t3 # encoding: [0x3b,0x0e,0xc5,0xbd]
+
+psub.h s0, s2, t3
+// CHECK-ASM: psub.h s0, s2, t3 # encoding: [0x3b,0x04,0xc9,0xc1]
+
+psub.b t5, t1, a4
+// CHECK-ASM: psub.b t5, t1, a4 # encoding: [0x3b,0x0f,0xe3,0xc4]
+
+pdif.h t1, a4, a2
+// CHECK-ASM: pdif.h t1, a4, a2 # encoding: [0x3b,0x03,0xc7,0xc8]
+
+pdif.b t3, t1, t5
+// CHECK-ASM: pdif.b t3, t1, t5 # encoding: [0x3b,0x0e,0xe3,0xcd]
+
+pssub.h a0, a2, t3
+// CHECK-ASM: pssub.h a0, a2, t3 # encoding: [0x3b,0x05,0xc6,0xd1]
+
+pssub.b a2, t5, a4
+// CHECK-ASM: pssub.b a2, t5, a4 # encoding: [0x3b,0x06,0xef,0xd4]
+
+pasub.h t5, t3, t3
+// CHECK-ASM: pasub.h t5, t3, t3 # encoding: [0x3b,0x0f,0xce,0xd9]
+
+pasub.b s0, t3, s2
+// CHECK-ASM: pasub.b s0, t3, s2 # encoding: [0x3b,0x04,0x2e,0xdd]
+
+pdifu.h t5, s0, a4
+// CHECK-ASM: pdifu.h t5, s0, a4 # encoding: [0x3b,0x0f,0xe4,0xe8]
+
+pdifu.b t3, a0, t5
+// CHECK-ASM: pdifu.b t3, a0, t5 # encoding: [0x3b,0x0e,0xe5,0xed]
+
+pssubu.h t3, s2, a0
+// CHECK-ASM: pssubu.h t3, s2, a0 # encoding: [0x3b,0x0e,0xa9,0xf0]
+
+pssubu.b t3, a4, t3
+// CHECK-ASM: pssubu.b t3, a4, t3 # encoding: [0x3b,0x0e,0xc7,0xf5]
+
+pasubu.h a2, s0, t5
+// CHECK-ASM: pasubu.h a2, s0, t5 # encoding: [0x3b,0x06,0xe4,0xf9]
+
+pasubu.b s0, t5, a4
+// CHECK-ASM: pasubu.b s0, t5, a4 # encoding: [0x3b,0x04,0xef,0xfc]
+
+padd.w t3, s0, a0
+// CHECK-ASM: padd.w t3, s0, a0 # encoding: [0x3b,0x0e,0xa4,0x82]
+
+psadd.w t3, t1, s2
+// CHECK-ASM: psadd.w t3, t1, s2 # encoding: [0x3b,0x0e,0x23,0x93]
+
+paadd.w t5, t1, a4
+// CHECK-ASM: paadd.w t5, t1, a4 # encoding: [0x3b,0x0f,0xe3,0x9a]
+
+psaddu.w s0, s2, t5
+// CHECK-ASM: psaddu.w s0, s2, t5 # encoding: [0x3b,0x04,0xe9,0xb3]
+
+paaddu.w s0, t1, s0
+// CHECK-ASM: paaddu.w s0, t1, s0 # encoding: [0x3b,0x04,0x83,0xba]
+
+psub.w t3, a0, s0
+// CHECK-ASM: psub.w t3, a0, s0 # encoding: [0x3b,0x0e,0x85,0xc2]
+
+pssub.w t3, a4, t1
+// CHECK-ASM: pssub.w t3, a4, t1 # encoding: [0x3b,0x0e,0x67,0xd2]
+
+pasub.w t3, a2, a4
+// CHECK-ASM: pasub.w t3, a2, a4 # encoding: [0x3b,0x0e,0xe6,0xda]
+
+pssubu.w a0, a4, t3
+// CHECK-ASM: pssubu.w a0, a4, t3 # encoding: [0x3b,0x05,0xc7,0xf3]
+
+pasubu.w a0, t3, a4
+// CHECK-ASM: pasubu.w a0, t3, a4 # encoding: [0x3b,0x05,0xee,0xfa]
+
+slx a0, a2, s2
+// CHECK-ASM: slx a0, a2, s2 # encoding: [0x3b,0x15,0x26,0x8f]
+
+pmul.h.beo a2, a4, a2
+// CHECK-ASM: pmul.h.beo a2, a4, a2 # encoding: [0x3b,0x16,0xc7,0x90]
+
+mvm s0, t1, a2
+// CHECK-ASM: mvm s0, t1, a2 # encoding: [0x3b,0x14,0xc3,0xa8]
+
+mvmn a2, a4, a0
+// CHECK-ASM: mvmn a2, a4, a0 # encoding: [0x3b,0x16,0xa7,0xaa]
+
+merge a4, a2, a2
+// CHECK-ASM: merge a4, a2, a2 # encoding: [0x3b,0x17,0xc6,0xac]
+
+srx t1, t3, a4
+// CHECK-ASM: srx t1, t3, a4 # encoding: [0x3b,0x13,0xee,0xae]
+
+pmulu.h.beo s2, a4, a0
+// CHECK-ASM: pmulu.h.beo s2, a4, a0 # encoding: [0x3b,0x19,0xa7,0xb0]
+
+pdifsumu.b t3, t5, t3
+// CHECK-ASM: pdifsumu.b t3, t5, t3 # encoding: [0x3b,0x1e,0xcf,0xb5]
+
+pdifsumau.b s2, a2, a0
+// CHECK-ASM: pdifsumau.b s2, a2, a0 # encoding: [0x3b,0x19,0xa6,0xbc]
+
+pmul.w.heo s2, t5, t3
+// CHECK-ASM: pmul.w.heo s2, t5, t3 # encoding: [0x3b,0x19,0xcf,0x93]
+
+mul.w01 t5, a4, t1
+// CHECK-ASM: mul.w01 t5, a4, t1 # encoding: [0x3b,0x1f,0x67,0x96]
+
+pmacc.w.heo t1, t1, a0
+// CHECK-ASM: pmacc.w.heo t1, t1, a0 # encoding: [0x3b,0x13,0xa3,0x9a]
+
+macc.w01 s2, a0, t3
+// CHECK-ASM: macc.w01 s2, a0, t3 # encoding: [0x3b,0x19,0xc5,0x9f]
+
+pmulu.w.heo t1, a4, a2
+// CHECK-ASM: pmulu.w.heo t1, a4, a2 # encoding: [0x3b,0x13,0xc7,0xb2]
+
+mulu.w01 t5, t1, t5
+// CHECK-ASM: mulu.w01 t5, t1, t5 # encoding: [0x3b,0x1f,0xe3,0xb7]
+
+pmaccu.w.heo t5, t5, a4
+// CHECK-ASM: pmaccu.w.heo t5, t5, a4 # encoding: [0x3b,0x1f,0xef,0xba]
+
+maccu.w01 a0, a0, t1
+// CHECK-ASM: maccu.w01 a0, a0, t1 # encoding: [0x3b,0x15,0x65,0xbe]
+
+psh1add.h a2, a2, t3
+// CHECK-ASM: psh1add.h a2, a2, t3 # encoding: [0x3b,0x26,0xc6,0xa1]
+
+pssh1sadd.h a2, t3, t3
+// CHECK-ASM: pssh1sadd.h a2, t3, t3 # encoding: [0x3b,0x26,0xce,0xb1]
+
+psh1add.w s2, t5, a2
+// CHECK-ASM: psh1add.w s2, t5, a2 # encoding: [0x3b,0x29,0xcf,0xa2]
+
+pssh1sadd.w a4, t3, s0
+// CHECK-ASM: pssh1sadd.w a4, t3, s0 # encoding: [0x3b,0x27,0x8e,0xb2]
+
+unzip8p a4, t3, t1
+// CHECK-ASM: unzip8p a4, t3, t1 # encoding: [0x3b,0x27,0x6e,0xe0]
+
+unzip16p t5, a4, t3
+// CHECK-ASM: unzip16p t5, a4, t3 # encoding: [0x3b,0x2f,0xc7,0xe3]
+
+unzip8hp s0, a0, t1
+// CHECK-ASM: unzip8hp s0, a0, t1 # encoding: [0x3b,0x24,0x65,0xe4]
+
+unzip16hp a0, a0, a2
+// CHECK-ASM: unzip16hp a0, a0, a2 # encoding: [0x3b,0x25,0xc5,0xe6]
+
+zip8p t5, t3, t3
+// CHECK-ASM: zip8p t5, t3, t3 # encoding: [0x3b,0x2f,0xce,0xf1]
+
+zip16p a0, t5, a0
+// CHECK-ASM: zip16p a0, t5, a0 # encoding: [0x3b,0x25,0xaf,0xf2]
+
+zip8hp t5, a0, a2
+// CHECK-ASM: zip8hp t5, a0, a2 # encoding: [0x3b,0x2f,0xc5,0xf4]
+
+zip16hp t1, t5, a4
+// CHECK-ASM: zip16hp t1, t5, a4 # encoding: [0x3b,0x23,0xef,0xf6]
+
+pmul.h.bee a4, a4, s2
+// CHECK-ASM: pmul.h.bee a4, a4, s2 # encoding: [0x3b,0x37,0x27,0x81]
+
+pmul.h.boo t1, s2, s0
+// CHECK-ASM: pmul.h.boo t1, s2, s0 # encoding: [0x3b,0x33,0x89,0x90]
+
+pmulu.h.bee a4, a2, a0
+// CHECK-ASM: pmulu.h.bee a4, a2, a0 # encoding: [0x3b,0x37,0xa6,0xa0]
+
+pmulu.h.boo a4, s0, a4
+// CHECK-ASM: pmulu.h.boo a4, s0, a4 # encoding: [0x3b,0x37,0xe4,0xb0]
+
+pmulsu.h.bee a2, s0, a4
+// CHECK-ASM: pmulsu.h.bee a2, s0, a4 # encoding: [0x3b,0x36,0xe4,0xe0]
+
+pmulsu.h.boo t3, t1, a4
+// CHECK-ASM: pmulsu.h.boo t3, t1, a4 # encoding: [0x3b,0x3e,0xe3,0xf0]
+
+pmul.w.bee s2, t1, a2
+// CHECK-ASM: pmul.w.bee s2, t1, a2 # encoding: [0x3b,0x39,0xc3,0x82]
+
+mul.w00 a4, a0, a2
+// CHECK-ASM: mul.w00 a4, a0, a2 # encoding: [0x3b,0x37,0xc5,0x86]
+
+pmacc.w.hee s2, t5, a2
+// CHECK-ASM: pmacc.w.hee s2, t5, a2 # encoding: [0x3b,0x39,0xcf,0x8a]
+
+macc.w00 t1, a0, t5
+// CHECK-ASM: macc.w00 t1, a0, t5 # encoding: [0x3b,0x33,0xe5,0x8f]
+
+pmul.w.hoo s0, a4, s0
+// CHECK-ASM: pmul.w.hoo s0, a4, s0 # encoding: [0x3b,0x34,0x87,0x92]
+
+mul.w11 a0, t3, a0
+// CHECK-ASM: mul.w11 a0, t3, a0 # encoding: [0x3b,0x35,0xae,0x96]
+
+pmacc.w.hoo a4, a4, t1
+// CHECK-ASM: pmacc.w.hoo a4, a4, t1 # encoding: [0x3b,0x37,0x67,0x9a]
+
+macc.w11 t3, s2, a2
+// CHECK-ASM: macc.w11 t3, s2, a2 # encoding: [0x3b,0x3e,0xc9,0x9e]
+
+pmulu.w.hee a2, t3, t1
+// CHECK-ASM: pmulu.w.hee a2, t3, t1 # encoding: [0x3b,0x36,0x6e,0xa2]
+
+mulu.w00 a0, t5, s2
+// CHECK-ASM: mulu.w00 a0, t5, s2 # encoding: [0x3b,0x35,0x2f,0xa7]
+
+pmaccu.w.hee t3, t3, t5
+// CHECK-ASM: pmaccu.w.hee t3, t3, t5 # encoding: [0x3b,0x3e,0xee,0xab]
+
+maccu.w00 s2, t1, s2
+// CHECK-ASM: maccu.w00 s2, t1, s2 # encoding: [0x3b,0x39,0x23,0xaf]
+
+pmulu.w.hoo s0, t5, t5
+// CHECK-ASM: pmulu.w.hoo s0, t5, t5 # encoding: [0x3b,0x34,0xef,0xb3]
+
+mulu.w11 s0, t1, a4
+// CHECK-ASM: mulu.w11 s0, t1, a4 # encoding: [0x3b,0x34,0xe3,0xb6]
+
+pmaccu.w.hoo a0, s0, t5
+// CHECK-ASM: pmaccu.w.hoo a0, s0, t5 # encoding: [0x3b,0x35,0xe4,0xbb]
+
+maccu.w11 s2, t3, t5
+// CHECK-ASM: maccu.w11 s2, t3, t5 # encoding: [0x3b,0x39,0xee,0xbf]
+
+pmulsu.w.hee t5, t5, t5
+// CHECK-ASM: pmulsu.w.hee t5, t5, t5 # encoding: [0x3b,0x3f,0xef,0xe3]
+
+mulsu.w00 t1, s0, a4
+// CHECK-ASM: mulsu.w00 t1, s0, a4 # encoding: [0x3b,0x33,0xe4,0xe6]
+
+pmaccsu.w.hee a4, a0, t1
+// CHECK-ASM: pmaccsu.w.hee a4, a0, t1 # encoding: [0x3b,0x37,0x65,0xea]
+
+maccsu.w00 a4, s2, s0
+// CHECK-ASM: maccsu.w00 a4, s2, s0 # encoding: [0x3b,0x37,0x89,0xee]
+
+pmulsu.w.hoo t1, t3, s2
+// CHECK-ASM: pmulsu.w.hoo t1, t3, s2 # encoding: [0x3b,0x33,0x2e,0xf3]
+
+mulsu.w11 a2, s2, a2
+// CHECK-ASM: mulsu.w11 a2, s2, a2 # encoding: [0x3b,0x36,0xc9,0xf6]
+
+pmaccsu.w.hoo a0, a2, t3
+// CHECK-ASM: pmaccsu.w.hoo a0, a2, t3 # encoding: [0x3b,0x35,0xc6,0xfb]
+
+maccsu.w11 t5, a4, s2
+// CHECK-ASM: maccsu.w11 t5, a4, s2 # encoding: [0x3b,0x3f,0x27,0xff]
+
+ppack.h s0, s0, s2
+// CHECK-ASM: ppack.h s0, s0, s2 # encoding: [0x3b,0x44,0x24,0x81]
+
+ppackbt.h a4, s2, t3
+// CHECK-ASM: ppackbt.h a4, s2, t3 # encoding: [0x3b,0x47,0xc9,0x91]
+
+ppacktb.h t3, s0, t3
+// CHECK-ASM: ppacktb.h t3, s0, t3 # encoding: [0x3b,0x4e,0xc4,0xa1]
+
+ppackt.h a0, t1, t5
+// CHECK-ASM: ppackt.h a0, t1, t5 # encoding: [0x3b,0x45,0xe3,0xb1]
+
+ppack.w t5, a2, a4
+// CHECK-ASM: ppack.w t5, a2, a4 # encoding: [0x3b,0x4f,0xe6,0x82]
+
+ppackbt.w t5, s0, t5
+// CHECK-ASM: ppackbt.w t5, s0, t5 # encoding: [0x3b,0x4f,0xe4,0x93]
+
+ppackbt a0, t5, a0
+// CHECK-ASM: ppackbt a0, t5, a0 # encoding: [0x3b,0x45,0xaf,0x96]
+
+ppacktb.w t5, t1, t1
+// CHECK-ASM: ppacktb.w t5, t1, t1 # encoding: [0x3b,0x4f,0x63,0xa2]
+
+ppacktb t5, a4, a4
+// CHECK-ASM: ppacktb t5, a4, a4 # encoding: [0x3b,0x4f,0xe7,0xa6]
+
+ppackt.w t3, a0, s2
+// CHECK-ASM: ppackt.w t3, a0, s2 # encoding: [0x3b,0x4e,0x25,0xb3]
+
+ppackt a2, t3, t1
+// CHECK-ASM: ppackt a2, t3, t1 # encoding: [0x3b,0x46,0x6e,0xb6]
+
+pm2add.h a4, t3, t5
+// CHECK-ASM: pm2add.h a4, t3, t5 # encoding: [0x3b,0x57,0xee,0x81]
+
+pm4add.b t1, s2, s2
+// CHECK-ASM: pm4add.b t1, s2, s2 # encoding: [0x3b,0x53,0x29,0x85]
+
+pm2adda.h a0, t5, s0
+// CHECK-ASM: pm2adda.h a0, t5, s0 # encoding: [0x3b,0x55,0x8f,0x88]
+
+pm4adda.b a0, t5, a2
+// CHECK-ASM: pm4adda.b a0, t5, a2 # encoding: [0x3b,0x55,0xcf,0x8c]
+
+pm2add.hx a0, s0, t3
+// CHECK-ASM: pm2add.hx a0, s0, t3 # encoding: [0x3b,0x55,0xc4,0x91]
+
+pm2adda.hx s0, a0, s2
+// CHECK-ASM: pm2adda.hx s0, a0, s2 # encoding: [0x3b,0x54,0x25,0x99]
+
+pm2addu.h t1, a4, a0
+// CHECK-ASM: pm2addu.h t1, a4, a0 # encoding: [0x3b,0x53,0xa7,0xa0]
+
+pm4addu.b a0, t1, t3
+// CHECK-ASM: pm4addu.b a0, t1, t3 # encoding: [0x3b,0x55,0xc3,0xa5]
+
+pm2addau.h s2, a2, a0
+// CHECK-ASM: pm2addau.h s2, a2, a0 # encoding: [0x3b,0x59,0xa6,0xa8]
+
+pm4addau.b s2, s2, t5
+// CHECK-ASM: pm4addau.b s2, s2, t5 # encoding: [0x3b,0x59,0xe9,0xad]
+
+pmq2add.h s2, s2, t3
+// CHECK-ASM: pmq2add.h s2, s2, t3 # encoding: [0x3b,0x59,0xc9,0xb1]
+
+pmqr2add.h a4, a2, a0
+// CHECK-ASM: pmqr2add.h a4, a2, a0 # encoding: [0x3b,0x57,0xa6,0xb4]
+
+pmq2adda.h a2, s2, t1
+// CHECK-ASM: pmq2adda.h a2, s2, t1 # encoding: [0x3b,0x56,0x69,0xb8]
+
+pmqr2adda.h a2, a0, a0
+// CHECK-ASM: pmqr2adda.h a2, a0, a0 # encoding: [0x3b,0x56,0xa5,0xbc]
+
+pm2sub.h t5, s0, s0
+// CHECK-ASM: pm2sub.h t5, s0, s0 # encoding: [0x3b,0x5f,0x84,0xc0]
+
+pm2sadd.h a0, t5, a0
+// CHECK-ASM: pm2sadd.h a0, t5, a0 # encoding: [0x3b,0x55,0xaf,0xc4]
+
+pm2suba.h s0, a4, t5
+// CHECK-ASM: pm2suba.h s0, a4, t5 # encoding: [0x3b,0x54,0xe7,0xc9]
+
+pm2sub.hx t3, t5, a0
+// CHECK-ASM: pm2sub.hx t3, t5, a0 # encoding: [0x3b,0x5e,0xaf,0xd0]
+
+pm2sadd.hx t1, a0, t3
+// CHECK-ASM: pm2sadd.hx t1, a0, t3 # encoding: [0x3b,0x53,0xc5,0xd5]
+
+pm2suba.hx t3, a0, a4
+// CHECK-ASM: pm2suba.hx t3, a0, a4 # encoding: [0x3b,0x5e,0xe5,0xd8]
+
+pm2addsu.h t3, a0, t3
+// CHECK-ASM: pm2addsu.h t3, a0, t3 # encoding: [0x3b,0x5e,0xc5,0xe1]
+
+pm4addsu.b t1, t5, s0
+// CHECK-ASM: pm4addsu.b t1, t5, s0 # encoding: [0x3b,0x53,0x8f,0xe4]
+
+pm2addasu.h t1, t3, t3
+// CHECK-ASM: pm2addasu.h t1, t3, t3 # encoding: [0x3b,0x53,0xce,0xe9]
+
+pm4addasu.b t3, a0, a0
+// CHECK-ASM: pm4addasu.b t3, a0, a0 # encoding: [0x3b,0x5e,0xa5,0xec]
+
+pm2add.w t3, s0, t5
+// CHECK-ASM: pm2add.w t3, s0, t5 # encoding: [0x3b,0x5e,0xe4,0x83]
+
+pm4add.h s2, s2, t3
+// CHECK-ASM: pm4add.h s2, s2, t3 # encoding: [0x3b,0x59,0xc9,0x87]
+
+pm2adda.w a2, a0, s0
+// CHECK-ASM: pm2adda.w a2, a0, s0 # encoding: [0x3b,0x56,0x85,0x8a]
+
+pm4adda.h s2, s0, t1
+// CHECK-ASM: pm4adda.h s2, s0, t1 # encoding: [0x3b,0x59,0x64,0x8e]
+
+pm2add.wx t1, s0, a4
+// CHECK-ASM: pm2add.wx t1, s0, a4 # encoding: [0x3b,0x53,0xe4,0x92]
+
+pm2adda.wx t5, t3, s0
+// CHECK-ASM: pm2adda.wx t5, t3, s0 # encoding: [0x3b,0x5f,0x8e,0x9a]
+
+pm2addu.w s2, a0, s2
+// CHECK-ASM: pm2addu.w s2, a0, s2 # encoding: [0x3b,0x59,0x25,0xa3]
+
+pm4addu.h a4, a2, a2
+// CHECK-ASM: pm4addu.h a4, a2, a2 # encoding: [0x3b,0x57,0xc6,0xa6]
+
+pm2addau.w s0, s0, a4
+// CHECK-ASM: pm2addau.w s0, s0, a4 # encoding: [0x3b,0x54,0xe4,0xaa]
+
+pm4addau.h a2, a4, t5
+// CHECK-ASM: pm4addau.h a2, a4, t5 # encoding: [0x3b,0x56,0xe7,0xaf]
+
+pmq2add.w t5, t1, t1
+// CHECK-ASM: pmq2add.w t5, t1, t1 # encoding: [0x3b,0x5f,0x63,0xb2]
+
+pmqr2add.w s0, t1, a4
+// CHECK-ASM: pmqr2add.w s0, t1, a4 # encoding: [0x3b,0x54,0xe3,0xb6]
+
+pmq2adda.w a4, s0, t1
+// CHECK-ASM: pmq2adda.w a4, s0, t1 # encoding: [0x3b,0x57,0x64,0xba]
+
+pmqr2adda.w a4, t5, s0
+// CHECK-ASM: pmqr2adda.w a4, t5, s0 # encoding: [0x3b,0x57,0x8f,0xbe]
+
+pm2sub.w t3, a2, t1
+// CHECK-ASM: pm2sub.w t3, a2, t1 # encoding: [0x3b,0x5e,0x66,0xc2]
+
+pm2suba.w t5, t5, t3
+// CHECK-ASM: pm2suba.w t5, t5, t3 # encoding: [0x3b,0x5f,0xcf,0xcb]
+
+pm2sub.wx t5, s2, s0
+// CHECK-ASM: pm2sub.wx t5, s2, s0 # encoding: [0x3b,0x5f,0x89,0xd2]
+
+pm2suba.wx a2, a0, a4
+// CHECK-ASM: pm2suba.wx a2, a0, a4 # encoding: [0x3b,0x56,0xe5,0xda]
+
+pm2addsu.w s0, s0, s2
+// CHECK-ASM: pm2addsu.w s0, s0, s2 # encoding: [0x3b,0x54,0x24,0xe3]
+
+pm4addsu.h a2, s2, s0
+// CHECK-ASM: pm4addsu.h a2, s2, s0 # encoding: [0x3b,0x56,0x89,0xe6]
+
+pm2addasu.w a0, a2, a0
+// CHECK-ASM: pm2addasu.w a0, a2, a0 # encoding: [0x3b,0x55,0xa6,0xea]
+
+pm4addasu.h a0, s0, t5
+// CHECK-ASM: pm4addasu.h a0, s0, t5 # encoding: [0x3b,0x55,0xe4,0xef]
+
+pmqacc.w.heo t5, t1, a4
+// CHECK-ASM: pmqacc.w.heo t5, t1, a4 # encoding: [0x3b,0x5f,0xe3,0xf8]
+
+mqacc.w01 a0, a2, t3
+// CHECK-ASM: mqacc.w01 a0, a2, t3 # encoding: [0x3b,0x55,0xc6,0xfb]
+
+pmqracc.w.heo a4, t1, s2
+// CHECK-ASM: pmqracc.w.heo a4, t1, s2 # encoding: [0x3b,0x57,0x23,0xfd]
+
+mqracc.w01 s0, t5, a4
+// CHECK-ASM: mqracc.w01 s0, t5, a4 # encoding: [0x3b,0x54,0xef,0xfe]
+
+pas.hx a0, t5, t1
+// CHECK-ASM: pas.hx a0, t5, t1 # encoding: [0x3b,0x65,0x6f,0x80]
+
+psa.hx a2, t3, a0
+// CHECK-ASM: psa.hx a2, t3, a0 # encoding: [0x3b,0x66,0xae,0x84]
+
+psas.hx s0, a0, a2
+// CHECK-ASM: psas.hx s0, a0, a2 # encoding: [0x3b,0x64,0xc5,0x90]
+
+pssa.hx a0, t1, t5
+// CHECK-ASM: pssa.hx a0, t1, t5 # encoding: [0x3b,0x65,0xe3,0x95]
+
+pmseq.h t3, s0, t1
+// CHECK-ASM: pmseq.h t3, s0, t1 # encoding: [0x3b,0x6e,0x64,0xc0]
+
+pmseq.b t5, s2, a2
+// CHECK-ASM: pmseq.b t5, s2, a2 # encoding: [0x3b,0x6f,0xc9,0xc4]
+
+pmslt.h t1, a0, a4
+// CHECK-ASM: pmslt.h t1, a0, a4 # encoding: [0x3b,0x63,0xe5,0xd0]
+
+pmslt.b s2, t3, t1
+// CHECK-ASM: pmslt.b s2, t3, t1 # encoding: [0x3b,0x69,0x6e,0xd4]
+
+pmsltu.h t1, a0, t5
+// CHECK-ASM: pmsltu.h t1, a0, t5 # encoding: [0x3b,0x63,0xe5,0xd9]
+
+pmsltu.b t3, a4, s2
+// CHECK-ASM: pmsltu.b t3, a4, s2 # encoding: [0x3b,0x6e,0x27,0xdd]
+
+pmin.h a2, a2, s2
+// CHECK-ASM: pmin.h a2, a2, s2 # encoding: [0x3b,0x66,0x26,0xe1]
+
+pmin.b t3, a2, a0
+// CHECK-ASM: pmin.b t3, a2, a0 # encoding: [0x3b,0x6e,0xa6,0xe4]
+
+pminu.h a2, s2, t1
+// CHECK-ASM: pminu.h a2, s2, t1 # encoding: [0x3b,0x66,0x69,0xe8]
+
+pminu.b a0, t1, a0
+// CHECK-ASM: pminu.b a0, t1, a0 # encoding: [0x3b,0x65,0xa3,0xec]
+
+pmax.h a0, s0, a4
+// CHECK-ASM: pmax.h a0, s0, a4 # encoding: [0x3b,0x65,0xe4,0xf0]
+
+pmax.b t1, t3, a2
+// CHECK-ASM: pmax.b t1, t3, a2 # encoding: [0x3b,0x63,0xce,0xf4]
+
+pmaxu.h t1, a0, s2
+// CHECK-ASM: pmaxu.h t1, a0, s2 # encoding: [0x3b,0x63,0x25,0xf9]
+
+pmaxu.b t1, t3, s2
+// CHECK-ASM: pmaxu.b t1, t3, s2 # encoding: [0x3b,0x63,0x2e,0xfd]
+
+pas.wx t1, a2, s0
+// CHECK-ASM: pas.wx t1, a2, s0 # encoding: [0x3b,0x63,0x86,0x82]
+
+psa.wx t3, t3, a2
+// CHECK-ASM: psa.wx t3, t3, a2 # encoding: [0x3b,0x6e,0xce,0x86]
+
+psas.wx a4, a4, s2
+// CHECK-ASM: psas.wx a4, a4, s2 # encoding: [0x3b,0x67,0x27,0x93]
+
+pssa.wx a0, a2, a0
+// CHECK-ASM: pssa.wx a0, a2, a0 # encoding: [0x3b,0x65,0xa6,0x96]
+
+paas.wx s0, a4, t1
+// CHECK-ASM: paas.wx s0, a4, t1 # encoding: [0x3b,0x64,0x67,0x9a]
+
+pasa.wx t1, s2, s2
+// CHECK-ASM: pasa.wx t1, s2, s2 # encoding: [0x3b,0x63,0x29,0x9f]
+
+pmseq.w t1, a4, s2
+// CHECK-ASM: pmseq.w t1, a4, s2 # encoding: [0x3b,0x63,0x27,0xc3]
+
+pmslt.w t5, t5, t3
+// CHECK-ASM: pmslt.w t5, t5, t3 # encoding: [0x3b,0x6f,0xcf,0xd3]
+
+pmsltu.w s2, a4, t1
+// CHECK-ASM: pmsltu.w s2, a4, t1 # encoding: [0x3b,0x69,0x67,0xda]
+
+pmin.w t5, a4, t5
+// CHECK-ASM: pmin.w t5, a4, t5 # encoding: [0x3b,0x6f,0xe7,0xe3]
+
+pminu.w a0, a2, a0
+// CHECK-ASM: pminu.w a0, a2, a0 # encoding: [0x3b,0x65,0xa6,0xea]
+
+pmax.w a0, s2, t1
+// CHECK-ASM: pmax.w a0, s2, t1 # encoding: [0x3b,0x65,0x69,0xf2]
+
+pmaxu.w a0, a4, a4
+// CHECK-ASM: pmaxu.w a0, a4, a4 # encoding: [0x3b,0x65,0xe7,0xfa]
+
+pmulh.h a0, t5, t1
+// CHECK-ASM: pmulh.h a0, t5, t1 # encoding: [0x3b,0x75,0x6f,0x80]
+
+pmulhr.h s2, t5, t3
+// CHECK-ASM: pmulhr.h s2, t5, t3 # encoding: [0x3b,0x79,0xcf,0x85]
+
+pmhacc.h t5, t3, a4
+// CHECK-ASM: pmhacc.h t5, t3, a4 # encoding: [0x3b,0x7f,0xee,0x88]
+
+pmhracc.h s2, t5, s2
+// CHECK-ASM: pmhracc.h s2, t5, s2 # encoding: [0x3b,0x79,0x2f,0x8d]
+
+pmulhu.h t3, t1, t1
+// CHECK-ASM: pmulhu.h t3, t1, t1 # encoding: [0x3b,0x7e,0x63,0x90]
+
+pmulhru.h s0, t5, t1
+// CHECK-ASM: pmulhru.h s0, t5, t1 # encoding: [0x3b,0x74,0x6f,0x94]
+
+pmhaccu.h t3, a0, t3
+// CHECK-ASM: pmhaccu.h t3, a0, t3 # encoding: [0x3b,0x7e,0xc5,0x99]
+
+pmhraccu.h t5, t3, a2
+// CHECK-ASM: pmhraccu.h t5, t3, a2 # encoding: [0x3b,0x7f,0xce,0x9c]
+
+pmulh.h.be t1, a0, a0
+// CHECK-ASM: pmulh.h.be t1, a0, a0 # encoding: [0x3b,0x73,0xa5,0xa0]
+
+pmulhsu.h.be t3, s0, a4
+// CHECK-ASM: pmulhsu.h.be t3, s0, a4 # encoding: [0x3b,0x7e,0xe4,0xa4]
+
+pmhaccu.h.be t1, a0, a4
+// CHECK-ASM: pmhaccu.h.be t1, a0, a4 # encoding: [0x3b,0x73,0xe5,0xa8]
+
+pmhaccsu.h.be s2, t5, t3
+// CHECK-ASM: pmhaccsu.h.be s2, t5, t3 # encoding: [0x3b,0x79,0xcf,0xad]
+
+pmulh.h.bo a0, s0, a2
+// CHECK-ASM: pmulh.h.bo a0, s0, a2 # encoding: [0x3b,0x75,0xc4,0xb0]
+
+pmulhsu.h.bo t1, t3, t3
+// CHECK-ASM: pmulhsu.h.bo t1, t3, t3 # encoding: [0x3b,0x73,0xce,0xb5]
+
+pmhacc.h.bo t3, t5, s2
+// CHECK-ASM: pmhacc.h.bo t3, t5, s2 # encoding: [0x3b,0x7e,0x2f,0xb9]
+
+pmhaccsu.h.bo t5, t5, t1
+// CHECK-ASM: pmhaccsu.h.bo t5, t5, t1 # encoding: [0x3b,0x7f,0x6f,0xbc]
+
+pmulhsu.h s2, t3, a4
+// CHECK-ASM: pmulhsu.h s2, t3, a4 # encoding: [0x3b,0x79,0xee,0xc0]
+
+pmulhrsu.h a0, a0, t5
+// CHECK-ASM: pmulhrsu.h a0, a0, t5 # encoding: [0x3b,0x75,0xe5,0xc5]
+
+pmhaccsu.h s0, t3, t1
+// CHECK-ASM: pmhaccsu.h s0, t3, t1 # encoding: [0x3b,0x74,0x6e,0xc8]
+
+pmhraccsu.h s0, t5, a4
+// CHECK-ASM: pmhraccsu.h s0, t5, a4 # encoding: [0x3b,0x74,0xef,0xcc]
+
+pmulq.h t3, t1, s0
+// CHECK-ASM: pmulq.h t3, t1, s0 # encoding: [0x3b,0x7e,0x83,0xd0]
+
+pmulqr.h t1, s2, s0
+// CHECK-ASM: pmulqr.h t1, s2, s0 # encoding: [0x3b,0x73,0x89,0xd4]
+
+pmulh.w t5, a4, a4
+// CHECK-ASM: pmulh.w t5, a4, a4 # encoding: [0x3b,0x7f,0xe7,0x82]
+
+pmulhr.w t1, t5, t1
+// CHECK-ASM: pmulhr.w t1, t5, t1 # encoding: [0x3b,0x73,0x6f,0x86]
+
+pmhacc.w t5, s0, t5
+// CHECK-ASM: pmhacc.w t5, s0, t5 # encoding: [0x3b,0x7f,0xe4,0x8b]
+
+pmhracc.w s0, s2, t5
+// CHECK-ASM: pmhracc.w s0, s2, t5 # encoding: [0x3b,0x74,0xe9,0x8f]
+
+pmulhu.w a2, a0, a4
+// CHECK-ASM: pmulhu.w a2, a0, a4 # encoding: [0x3b,0x76,0xe5,0x92]
+
+pmulhru.w t1, t1, a4
+// CHECK-ASM: pmulhru.w t1, t1, a4 # encoding: [0x3b,0x73,0xe3,0x96]
+
+pmhaccu.w a0, s0, a0
+// CHECK-ASM: pmhaccu.w a0, s0, a0 # encoding: [0x3b,0x75,0xa4,0x9a]
+
+pmhraccu.w s2, s0, t3
+// CHECK-ASM: pmhraccu.w s2, s0, t3 # encoding: [0x3b,0x79,0xc4,0x9f]
+
+pmulh.w.he t5, s0, t5
+// CHECK-ASM: pmulh.w.he t5, s0, t5 # encoding: [0x3b,0x7f,0xe4,0xa3]
+
+pmulhsu.w.he a2, t3, a2
+// CHECK-ASM: pmulhsu.w.he a2, t3, a2 # encoding: [0x3b,0x76,0xce,0xa6]
+
+pmhacc.w.he a2, a0, t1
+// CHECK-ASM: pmhacc.w.he a2, a0, t1 # encoding: [0x3b,0x76,0x65,0xaa]
+
+pmhaccsu.w.he t1, a4, t1
+// CHECK-ASM: pmhaccsu.w.he t1, a4, t1 # encoding: [0x3b,0x73,0x67,0xae]
+
+pmulh.w.ho t1, a0, t3
+// CHECK-ASM: pmulh.w.ho t1, a0, t3 # encoding: [0x3b,0x73,0xc5,0xb3]
+
+pmulhsu.w.ho s2, t3, a4
+// CHECK-ASM: pmulhsu.w.ho s2, t3, a4 # encoding: [0x3b,0x79,0xee,0xb6]
+
+pmhacc.w.ho s0, t5, a2
+// CHECK-ASM: pmhacc.w.ho s0, t5, a2 # encoding: [0x3b,0x74,0xcf,0xba]
+
+pmhaccsu.w.ho a0, a0, a0
+// CHECK-ASM: pmhaccsu.w.ho a0, a0, a0 # encoding: [0x3b,0x75,0xa5,0xbe]
+
+pmulhsu.w t3, a2, a4
+// CHECK-ASM: pmulhsu.w t3, a2, a4 # encoding: [0x3b,0x7e,0xe6,0xc2]
+
+pmulhrsu.w t5, a0, a0
+// CHECK-ASM: pmulhrsu.w t5, a0, a0 # encoding: [0x3b,0x7f,0xa5,0xc6]
+
+pmhaccsu.w a4, a0, a0
+// CHECK-ASM: pmhaccsu.w a4, a0, a0 # encoding: [0x3b,0x77,0xa5,0xca]
+
+pmhraccsu.w t5, t1, t3
+// CHECK-ASM: pmhraccsu.w t5, t1, t3 # encoding: [0x3b,0x7f,0xc3,0xcf]
+
+pmulq.w a2, a2, t5
+// CHECK-ASM: pmulq.w a2, a2, t5 # encoding: [0x3b,0x76,0xe6,0xd3]
+
+pmulqr.w a0, t3, t5
+// CHECK-ASM: pmulqr.w a0, t3, t5 # encoding: [0x3b,0x75,0xee,0xd7]
+
+pmqacc.w.hee t5, a4, t1
+// CHECK-ASM: pmqacc.w.hee t5, a4, t1 # encoding: [0x3b,0x7f,0x67,0xe8]
+
+mqacc.w00 t1, t1, a0
+// CHECK-ASM: mqacc.w00 t1, t1, a0 # encoding: [0x3b,0x73,0xa3,0xea]
+
+pmqracc.w.hee t1, a2, t5
+// CHECK-ASM: pmqracc.w.hee t1, a2, t5 # encoding: [0x3b,0x73,0xe6,0xed]
+
+mqracc.w00 s2, s2, a2
+// CHECK-ASM: mqracc.w00 s2, s2, a2 # encoding: [0x3b,0x79,0xc9,0xee]
+
+pmqacc.w.hoo a2, a0, a0
+// CHECK-ASM: pmqacc.w.hoo a2, a0, a0 # encoding: [0x3b,0x76,0xa5,0xf8]
+
+mqacc.w11 a4, a2, a2
+// CHECK-ASM: mqacc.w11 a4, a2, a2 # encoding: [0x3b,0x77,0xc6,0xfa]
+
+pmqracc.w.hoo s0, t1, t3
+// CHECK-ASM: pmqracc.w.hoo s0, t1, t3 # encoding: [0x3b,0x74,0xc3,0xfd]
+
+mqracc.w11 s2, t1, a4
+// CHECK-ASM: mqracc.w11 s2, t1, a4 # encoding: [0x3b,0x79,0xe3,0xfe]
>From 4d5931098e849120c8044005ae6f4d2ccfcb2837 Mon Sep 17 00:00:00 2001
From: Qihan Cai <caiqihan021 at hotmail.com>
Date: Fri, 17 Jan 2025 13:36:10 +1100
Subject: [PATCH 2/6] add comment for Base P in RISCVFeatures.td
---
llvm/lib/Target/RISCV/RISCVFeatures.td | 1 +
1 file changed, 1 insertion(+)
diff --git a/llvm/lib/Target/RISCV/RISCVFeatures.td b/llvm/lib/Target/RISCV/RISCVFeatures.td
index b764d769640335..5314229ac5b4ba 100644
--- a/llvm/lib/Target/RISCV/RISCVFeatures.td
+++ b/llvm/lib/Target/RISCV/RISCVFeatures.td
@@ -1016,6 +1016,7 @@ def HasStdExtSmctrOrSsctr : Predicate<"Subtarget->hasStdExtSmctrOrSsctr()">,
"'Smctr' (Control Transfer Records Machine Level) or "
"'Ssctr' (Control Transfer Records Supervisor Level)">;
+// Packed SIMD Extensions
def FeatureStdExtP
: RISCVExperimentalExtension<1, 0,
"'Base P' (Packed SIMD)">;
>From 0ec3cc19385c18f748b58af45cebb1012347d8c8 Mon Sep 17 00:00:00 2001
From: Qihan Cai <caiqihan021 at hotmail.com>
Date: Fri, 17 Jan 2025 14:50:15 +1100
Subject: [PATCH 3/6] update ISAInfoTest
---
llvm/unittests/TargetParser/RISCVISAInfoTest.cpp | 1 +
1 file changed, 1 insertion(+)
diff --git a/llvm/unittests/TargetParser/RISCVISAInfoTest.cpp b/llvm/unittests/TargetParser/RISCVISAInfoTest.cpp
index 3a7ea4550d4173..a8eadd8a75b483 100644
--- a/llvm/unittests/TargetParser/RISCVISAInfoTest.cpp
+++ b/llvm/unittests/TargetParser/RISCVISAInfoTest.cpp
@@ -1105,6 +1105,7 @@ R"(All available -march extensions for RISC-V
xwchc 2.2
Experimental extensions
+ p 1.0
zicfilp 1.0 This is a long dummy description
zicfiss 1.0
zalasr 0.1
>From 6e73065e73553695c4b342f47705d83f914ee2fd Mon Sep 17 00:00:00 2001
From: Qihan Cai <caiqihan021 at hotmail.com>
Date: Fri, 17 Jan 2025 15:01:45 +1100
Subject: [PATCH 4/6] change version to 0.12
---
llvm/docs/RISCVUsage.rst | 2 +-
llvm/lib/Target/RISCV/RISCVFeatures.td | 2 +-
llvm/test/MC/RISCV/attribute-arch.s | 4 ++--
llvm/unittests/TargetParser/RISCVISAInfoTest.cpp | 2 +-
4 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/llvm/docs/RISCVUsage.rst b/llvm/docs/RISCVUsage.rst
index 89202a825fc643..17c20225cfab6b 100644
--- a/llvm/docs/RISCVUsage.rst
+++ b/llvm/docs/RISCVUsage.rst
@@ -336,7 +336,7 @@ The primary goal of experimental support is to assist in the process of ratifica
LLVM implements the `0.3 draft specification <https://github.com/riscv/riscv-isa-manual/pull/1564>`__.
``experimental-p``, ``experimental-p``
- LLVM implements the `012 specification <https://jhauser.us/RISCV/ext-P/RVP-baseInstrs-012.pdf>`__.
+ LLVM implements the `012 draft specification <https://jhauser.us/RISCV/ext-P/RVP-baseInstrs-012.pdf>`__.
To use an experimental extension from `clang`, you must add `-menable-experimental-extensions` to the command line, and specify the exact version of the experimental extension you are using. To use an experimental extension with LLVM's internal developer tools (e.g. `llc`, `llvm-objdump`, `llvm-mc`), you must prefix the extension name with `experimental-`. Note that you don't need to specify the version with internal tools, and shouldn't include the `experimental-` prefix with `clang`.
diff --git a/llvm/lib/Target/RISCV/RISCVFeatures.td b/llvm/lib/Target/RISCV/RISCVFeatures.td
index 5314229ac5b4ba..7d0b52f1b8bf9c 100644
--- a/llvm/lib/Target/RISCV/RISCVFeatures.td
+++ b/llvm/lib/Target/RISCV/RISCVFeatures.td
@@ -1018,7 +1018,7 @@ def HasStdExtSmctrOrSsctr : Predicate<"Subtarget->hasStdExtSmctrOrSsctr()">,
// Packed SIMD Extensions
def FeatureStdExtP
- : RISCVExperimentalExtension<1, 0,
+ : RISCVExperimentalExtension<0, 12,
"'Base P' (Packed SIMD)">;
def HasStdExtP : Predicate<"Subtarget->hasStdExtP()">,
AssemblerPredicate<(all_of FeatureStdExtP),
diff --git a/llvm/test/MC/RISCV/attribute-arch.s b/llvm/test/MC/RISCV/attribute-arch.s
index 047f020047a63d..641f554e011554 100644
--- a/llvm/test/MC/RISCV/attribute-arch.s
+++ b/llvm/test/MC/RISCV/attribute-arch.s
@@ -475,7 +475,7 @@
# CHECK: attribute 5, "rv32i2p1_sdtrig1p0"
.attribute arch, "rv32i_p1p0"
-# CHECK: attribute 5, "rv32i2p1_p1p0"
+# CHECK: attribute 5, "rv32i2p1_p0p12"
.attribute arch, "rv64i_p1p0"
-# CHECK: attribute 5, "rv64i2p1_p1p0"
\ No newline at end of file
+# CHECK: attribute 5, "rv64i2p1_p0p12"
\ No newline at end of file
diff --git a/llvm/unittests/TargetParser/RISCVISAInfoTest.cpp b/llvm/unittests/TargetParser/RISCVISAInfoTest.cpp
index a8eadd8a75b483..27243baf2dc5a2 100644
--- a/llvm/unittests/TargetParser/RISCVISAInfoTest.cpp
+++ b/llvm/unittests/TargetParser/RISCVISAInfoTest.cpp
@@ -1105,7 +1105,7 @@ R"(All available -march extensions for RISC-V
xwchc 2.2
Experimental extensions
- p 1.0
+ p 0.12
zicfilp 1.0 This is a long dummy description
zicfiss 1.0
zalasr 0.1
>From a406a8dbc6a0dff567d8e16c82fa2e170f9f8e51 Mon Sep 17 00:00:00 2001
From: Qihan Cai <caiqihan021 at hotmail.com>
Date: Mon, 20 Jan 2025 11:15:48 +1100
Subject: [PATCH 5/6] fix tests
---
clang/test/Driver/print-supported-extensions-riscv.c | 1 +
llvm/test/CodeGen/RISCV/attributes.ll | 2 +-
llvm/test/MC/RISCV/attribute-arch.s | 4 ++--
3 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/clang/test/Driver/print-supported-extensions-riscv.c b/clang/test/Driver/print-supported-extensions-riscv.c
index b28e0a07dad241..5284d0aa9052c9 100644
--- a/clang/test/Driver/print-supported-extensions-riscv.c
+++ b/clang/test/Driver/print-supported-extensions-riscv.c
@@ -180,6 +180,7 @@
// CHECK-NEXT: xwchc 2.2 'Xwchc' (WCH/QingKe additional compressed opcodes)
// CHECK-EMPTY:
// CHECK-NEXT: Experimental extensions
+// CHECK-NEXT: p 0.12 'P' ('Base P' (Packed SIMD))
// CHECK-NEXT: zicfilp 1.0 'Zicfilp' (Landing pad)
// CHECK-NEXT: zicfiss 1.0 'Zicfiss' (Shadow stack)
// CHECK-NEXT: zalasr 0.1 'Zalasr' (Load-Acquire and Store-Release Instructions)
diff --git a/llvm/test/CodeGen/RISCV/attributes.ll b/llvm/test/CodeGen/RISCV/attributes.ll
index 072ff59f0dccf9..3d2afda9d0c714 100644
--- a/llvm/test/CodeGen/RISCV/attributes.ll
+++ b/llvm/test/CodeGen/RISCV/attributes.ll
@@ -615,7 +615,7 @@
; RV64SSCTR: .attribute 5, "rv64i2p1_sscsrind1p0_ssctr1p0"
; RV64SDEXT: .attribute 5, "rv64i2p1_sdext1p0"
; RV64SDTRIG: .attribute 5, "rv64i2p1_sdtrig1p0"
-; RV64P: .attribute 5, "rv64i2p1_p1p0"
+; RV64P: .attribute 5, "rv64i2p1_p0p12"
; RVI20U32: .attribute 5, "rv32i2p1"
; RVI20U64: .attribute 5, "rv64i2p1"
diff --git a/llvm/test/MC/RISCV/attribute-arch.s b/llvm/test/MC/RISCV/attribute-arch.s
index 641f554e011554..be040dfcd6cdfb 100644
--- a/llvm/test/MC/RISCV/attribute-arch.s
+++ b/llvm/test/MC/RISCV/attribute-arch.s
@@ -474,8 +474,8 @@
.attribute arch, "rv32i_sdtrig1p0"
# CHECK: attribute 5, "rv32i2p1_sdtrig1p0"
-.attribute arch, "rv32i_p1p0"
+.attribute arch, "rv32i_p0p12"
# CHECK: attribute 5, "rv32i2p1_p0p12"
-.attribute arch, "rv64i_p1p0"
+.attribute arch, "rv64i_p0p12"
# CHECK: attribute 5, "rv64i2p1_p0p12"
\ No newline at end of file
>From a36987a3b2003b0b3237f7b7db0e775b2b4630b9 Mon Sep 17 00:00:00 2001
From: Qihan Cai <caiqihan021 at hotmail.com>
Date: Mon, 20 Jan 2025 12:08:25 +1100
Subject: [PATCH 6/6] fix code format, remove unneeded default arguments, fix
simm10 leaf definition
---
llvm/lib/Target/RISCV/RISCVInstrInfoP.td | 932 +++++++++++------------
llvm/test/CodeGen/RISCV/attributes.ll | 2 +-
2 files changed, 465 insertions(+), 469 deletions(-)
diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoP.td b/llvm/lib/Target/RISCV/RISCVInstrInfoP.td
index fd32bc70a54d68..7372d3b81085f2 100644
--- a/llvm/lib/Target/RISCV/RISCVInstrInfoP.td
+++ b/llvm/lib/Target/RISCV/RISCVInstrInfoP.td
@@ -8,10 +8,10 @@
//
// This file describes the RISC-V instructions from the standard 'Base P'
// Packed SIMD instruction set extension.
-///
-/// This version is still experimental as the 'P' extension hasn't been
-/// ratified yet.
-///
+//
+// This version is still experimental as the 'P' extension hasn't been
+// ratified yet.
+//
//===----------------------------------------------------------------------===//
//===----------------------------------------------------------------------===//
@@ -21,9 +21,9 @@
def simm10 : RISCVSImmLeafOp<10> {
let MCOperandPredicate = [{
int64_t Imm;
- if (MCOp.evaluateAsConstantImm(Imm))
- return isInt<10>(Imm);
- return MCOp.isBareSymbolRef();
+ if (!MCOp.evaluateAsConstantImm(Imm))
+ return false;
+ return isInt<10>(Imm);
}];
}
@@ -37,15 +37,14 @@ class RVPUnary<bits<5> funct5, bits<7> wuimm,
string opcodestr>
: RVInstIBase<funct3, opcode, (outs GPR:$rd), (ins GPR:$rs1),
opcodestr, "$rd, $rs1"> {
- let Inst{31-27} = funct5;
- let Inst{26-20} = wuimm;
+ let Inst{31-27} = funct5;
+ let Inst{26-20} = wuimm;
}
let hasSideEffects = 0, mayLoad = 0, mayStore = 0 in
-class RVPUnaryImm9<bits<7> funct7, RISCVOpcode opcode,
- string opcodestr, DAGOperand TyRd = GPR>
- : RVInstIBase<0b010, opcode, (outs TyRd:$rd), (ins simm10:$simm10),
- opcodestr, "$rd, $simm10"> {
+class RVPUnaryImm9<bits<7> funct7, string opcodestr, DAGOperand TyRd = GPR>
+ : RVInstIBase<0b010, OPC_OP_IMM_32, (outs TyRd:$rd), (ins simm10:$simm10),
+ opcodestr, "$rd, $simm10"> {
bits<10> simm10;
let Inst{31-25} = funct7;
@@ -53,10 +52,9 @@ class RVPUnaryImm9<bits<7> funct7, RISCVOpcode opcode,
}
let hasSideEffects = 0, mayLoad = 0, mayStore = 0 in
-class RVPUnaryImm8<bits<8> funct8, RISCVOpcode opcode,
- string opcodestr, DAGOperand TyRd = GPR>
- : RVInstIBase<0b010, opcode, (outs TyRd:$rd), (ins uimm8:$uimm8),
- opcodestr, "$rd, $uimm8"> {
+class RVPUnaryImm8<bits<8> funct8, string opcodestr, DAGOperand TyRd = GPR>
+ : RVInstIBase<0b010, OPC_OP_IMM_32, (outs TyRd:$rd), (ins uimm8:$uimm8),
+ opcodestr, "$rd, $uimm8"> {
bits<8> uimm8;
let Inst{31-24} = funct8;
let Inst{23-16} = uimm8;
@@ -64,10 +62,9 @@ class RVPUnaryImm8<bits<8> funct8, RISCVOpcode opcode,
}
let hasSideEffects = 0, mayLoad = 0, mayStore = 0 in
-class RVPUnaryWUF<bits<2> w, bits<5> uf,
- string opcodestr>
+class RVPUnaryWUF<bits<2> w, bits<5> uf, string opcodestr>
: RVInstIBase<0b010, OPC_OP_IMM_32, (outs GPR:$rd), (ins GPR:$rs1),
- opcodestr, "$rd, $rs1"> {
+ opcodestr, "$rd, $rs1"> {
let Inst{31-27} = 0b11100;
let Inst{26-25} = w;
let Inst{24-20} = uf;
@@ -75,8 +72,8 @@ class RVPUnaryWUF<bits<2> w, bits<5> uf,
let hasSideEffects = 0, mayLoad = 0, mayStore = 0 in
class RVPUnaryWUFRs1pRdp<bits<2> w, bits<5> uf, string opcodestr>
- : RVInstIBase<0b010, OPC_OP_IMM_32, (outs GPRPairRV32:$rdp), (ins GPRPairRV32:$rs1p),
- opcodestr, "$rdp, $rs1p"> {
+ : RVInstIBase<0b010, OPC_OP_IMM_32, (outs GPRPairRV32:$rdp),
+ (ins GPRPairRV32:$rs1p), opcodestr, "$rdp, $rs1p"> {
bits<4> rs1p;
bits<4> rdp;
@@ -90,10 +87,8 @@ class RVPUnaryWUFRs1pRdp<bits<2> w, bits<5> uf, string opcodestr>
}
let hasSideEffects = 0, mayLoad = 0, mayStore = 0 in
-class RVPUnaryF<bit bfr, bits<3> f, bit aft, bits<7> wuimm,
- string opcodestr, bits<3> funct3 = 0b100,
- dag outs = (outs GPR:$rd), dag ins = (ins GPR:$rs1),
- string argstr = "$rd, $rs1">
+class RVPUnaryF<bit bfr, bits<3> f, bit aft, bits<7> wuimm, string opcodestr,
+ bits<3> funct3, dag outs, dag ins, string argstr>
: RVInstIBase<funct3, OPC_OP_IMM_32, outs, ins, opcodestr, argstr> {
let Inst{31} = bfr;
let Inst{30-28} = f;
@@ -102,7 +97,8 @@ class RVPUnaryF<bit bfr, bits<3> f, bit aft, bits<7> wuimm,
}
class RVPUnary1F0<bits<3> f, bits<7> wuimm, string opcodestr>
- : RVPUnaryF<1, f, 0, wuimm, opcodestr>;
+ : RVPUnaryF<1, f, 0, wuimm, opcodestr, 0b100, (outs GPR:$rd),
+ (ins GPR:$rs1), "$rd, $rs1">;
class RVPUnary0F0Rdp<bits<3> f, bits<7> wuimm, string opcodestr>
: RVPUnaryF<0, f, 0, wuimm, opcodestr, 0b100, (outs GPRPairRV32:$rdp),
@@ -115,7 +111,7 @@ class RVPUnary0F0Rdp<bits<3> f, bits<7> wuimm, string opcodestr>
class RVPUnary0F0Rs1p<bits<3> f, bits<7> wuimm, string opcodestr>
: RVPUnaryF<0, f, 0, wuimm, opcodestr, 0b100, (outs GPR:$rd),
- (ins GPRPairRV32:$rs1p), "$rd, $rs1p"> {
+ (ins GPRPairRV32:$rs1p), "$rd, $rs1p"> {
bits<4> rs1p;
let Inst{19-16} = rs1p;
@@ -125,7 +121,7 @@ class RVPUnary0F0Rs1p<bits<3> f, bits<7> wuimm, string opcodestr>
class RVPUnary0F0Rs1pRdp<bits<3> f, bits<7> wuimm, string opcodestr,
bit aft = 0b0>
: RVPUnaryF<0, f, 0, wuimm, opcodestr, 0b100, (outs GPRPairRV32:$rdp),
- (ins GPRPairRV32:$rs1p), "$rdp, $rs1p"> {
+ (ins GPRPairRV32:$rs1p), "$rdp, $rs1p"> {
bits<4> rs1p;
bits<4> rdp;
@@ -136,10 +132,10 @@ class RVPUnary0F0Rs1pRdp<bits<3> f, bits<7> wuimm, string opcodestr,
}
let hasSideEffects = 0, mayLoad = 0, mayStore = 0 in
-class RVPBinaryFW<bit bfr, bits<3> f, bit aft, bits<2> w,
- string opcodestr, bits<3> funct3, RISCVOpcode Opcode = OPC_OP_32,
- dag outs = (outs GPR:$rd), dag ins = (ins GPR:$rs1, GPR:$rs2),
- string argstr = "$rd, $rs1, $rs2">
+class RVPBinaryFW<bit bfr, bits<3> f, bit aft, bits<2> w, string opcodestr,
+ bits<3> funct3, RISCVOpcode Opcode = OPC_OP_32,
+ dag outs = (outs GPR:$rd), dag ins = (ins GPR:$rs1, GPR:$rs2),
+ string argstr = "$rd, $rs1, $rs2">
: RVInstRBase<funct3, Opcode, outs, ins, opcodestr, argstr> {
let Inst{31} = bfr;
let Inst{30-28} = f;
@@ -148,7 +144,7 @@ class RVPBinaryFW<bit bfr, bits<3> f, bit aft, bits<2> w,
}
class RVPBinary1F1W<bits<3> f, bits<2> w, string opcodestr, bits<3> funct3,
- RISCVOpcode Opcode = OPC_OP_32>
+ RISCVOpcode Opcode = OPC_OP_IMM_32>
: RVPBinaryFW<1, f, 1, w, opcodestr, funct3, Opcode>;
class RVPBinary1F0W<bits<3> f, bits<2> w, string opcodestr, bits<3> funct3,
@@ -156,7 +152,7 @@ class RVPBinary1F0W<bits<3> f, bits<2> w, string opcodestr, bits<3> funct3,
: RVPBinaryFW<1, f, 0, w, opcodestr, funct3, Opcode>;
class RVPBinary0F1WRdp<bits<3> f, bits<2> w, string opcodestr,
- RISCVOpcode Opcode = OPC_OP_IMM_32>
+ RISCVOpcode Opcode = OPC_OP_IMM_32>
: RVPBinaryFW<0, f, 1, w, opcodestr, 0b010, Opcode, (outs GPRPairRV32:$rdp),
(ins GPR:$rs1, GPR:$rs2), "$rdp, $rs1, $rs2"> {
bits<4> rdp;
@@ -191,7 +187,8 @@ class RVPBinary0F1WRs1pRdp<bits<3> f, bits<2> w, string opcodestr,
let hasSideEffects = 0, mayLoad = 0, mayStore = 0 in
class RVPBinary1FWRs2pRs1pRdp<bits<4> f, bits<2> w, string opcodestr,
bit aft = 0b0, RISCVOpcode Opcode = OPC_OP_IMM_32>
- : RVInstRBase<0b110, Opcode, (outs GPRPairRV32:$rdp), (ins GPRPairRV32:$rs1p, GPRPairRV32:$rs2p),
+ : RVInstRBase<0b110, Opcode, (outs GPRPairRV32:$rdp),
+ (ins GPRPairRV32:$rs1p, GPRPairRV32:$rs2p),
opcodestr, "$rdp, $rs1p, $rs2p"> {
bits<4> rs1p;
bits<4> rs2p;
@@ -209,7 +206,8 @@ class RVPBinary1FWRs2pRs1pRdp<bits<4> f, bits<2> w, string opcodestr,
}
class RVPBinary1F0WRs2pRs1pRdp<bits<3> f, bits<2> w, string opcodestr,
- bit bfr = 0b1, bit aft = 0b0, RISCVOpcode Opcode = OPC_OP_IMM_32>
+ bit bfr = 0b1, bit aft = 0b0,
+ RISCVOpcode Opcode = OPC_OP_IMM_32>
: RVPBinaryFW<1, f, 0, w, opcodestr, 0b110, Opcode, (outs GPRPairRV32:$rdp),
(ins GPRPairRV32:$rs1p, GPRPairRV32:$rs2p), "$rdp, $rs1p, $rs2p"> {
bits<4> rs1p;
@@ -225,10 +223,8 @@ class RVPBinary1F0WRs2pRs1pRdp<bits<3> f, bits<2> w, string opcodestr,
}
let hasSideEffects = 0, mayLoad = 0, mayStore = 0 in
-class RVPBinaryLongFW<bit bfr, bits<4> f, bits<2> w,
- string opcodestr, bits<3> funct3, dag outs = (outs GPR:$rd),
- dag ins = (ins GPR:$rs1, GPR:$rs2),
- string argstr = "$rd, $rs1, $rs2">
+class RVPBinaryLongFW<bit bfr = 1, bits<4> f, bits<2> w, string opcodestr,
+ bits<3> funct3, dag outs, dag ins, string argstr>
: RVInstRBase<funct3, OPC_OP_32, outs, ins,
opcodestr, argstr> {
let Inst{31} = bfr;
@@ -236,8 +232,9 @@ class RVPBinaryLongFW<bit bfr, bits<4> f, bits<2> w,
let Inst{26-25} = w;
}
-class RVPBinary1LongFW<bits<4> f, bits<2> w, string opcodestr, bits<3> funct3>
- : RVPBinaryLongFW<1, f, w, opcodestr, funct3>;
+class RVPBinary1LongFW<bits<4> f, bits<2> w, bits<3> funct3, string opcodestr>
+ : RVPBinaryLongFW<1, f, w, opcodestr, funct3, (outs GPR:$rd),
+ (ins GPR:$rs1, GPR:$rs2), "$rd, $rs1, $rs2">;
class RVPBinary0LongFW<bits<4> f, bits<2> w, string opcodestr>
: RVPBinaryLongFW<0, f, w, opcodestr, 0b010, (outs GPRPairRV32:$rdp),
@@ -301,12 +298,11 @@ let Predicates = [HasStdExtP, IsRV64] in {
} // Predicates = [HasStdExtP, IsRV64]
let Predicates = [HasStdExtP] in
-def PLI_H : RVPUnaryImm9<0b1011000, OPC_OP_IMM_32, "pli.h">;
-let Predicates = [HasStdExtP, IsRV64] in {
-def PLI_W : RVPUnaryImm9<0b1011001, OPC_OP_IMM_32, "pli.w">;
-} // Predicates = [HasStdExtP, IsRV64]
+def PLI_H : RVPUnaryImm9<0b1011000, "pli.h">;
+let Predicates = [HasStdExtP, IsRV64] in
+def PLI_W : RVPUnaryImm9<0b1011001, "pli.w">;
let Predicates = [HasStdExtP] in
-def PLI_B : RVPUnaryImm8<0b10110100, OPC_OP_IMM_32, "pli.b">;
+def PLI_B : RVPUnaryImm8<0b10110100, "pli.b">;
let DecoderNamespace = "RISCV32Only_",
Predicates = [HasStdExtP, IsRV32] in {
@@ -324,41 +320,41 @@ def PSABS_B_RV64 : RVPUnaryWUF<0b10, 0b00111, "psabs.b">;
} // Predicates = [HasStdExtP, IsRV64]
let Predicates = [HasStdExtP] in
-def PLUI_H : RVPUnaryImm9<0b1111000, OPC_OP_IMM_32, "plui.h">;
+def PLUI_H : RVPUnaryImm9<0b1111000, "plui.h">;
let Predicates = [HasStdExtP, IsRV64] in
-def PLUI_W : RVPUnaryImm9<0b1111001, OPC_OP_IMM_32, "plui.w">;
+def PLUI_W : RVPUnaryImm9<0b1111001, "plui.w">;
let Predicates = [HasStdExtP] in {
-def PSLL_H_H0 : RVPBinary1F1W<0b000, 0b00, "psll.h.h0", 0b010, OPC_OP_IMM_32>;
-def PSLL_B_B0 : RVPBinary1F1W<0b000, 0b10, "psll.b.b0", 0b010, OPC_OP_IMM_32>;
-def PADD_H_H0 : RVPBinary1F1W<0b001, 0b00, "padd.h.h0", 0b010, OPC_OP_IMM_32>;
-def PADD_B_B0 : RVPBinary1F1W<0b001, 0b10, "padd.b.b0", 0b010, OPC_OP_IMM_32>;
-def PSSHA_H_H0 : RVPBinary1F1W<0b110, 0b00, "pssha.h.h0", 0b010, OPC_OP_IMM_32>;
-def PSSHAR_H_H0 : RVPBinary1F1W<0b111, 0b00, "psshar.h.h0", 0b010, OPC_OP_IMM_32>;
+def PSLL_H_H0 : RVPBinary1F1W<0b000, 0b00, "psll.h.h0", 0b010>;
+def PSLL_B_B0 : RVPBinary1F1W<0b000, 0b10, "psll.b.b0", 0b010>;
+def PADD_H_H0 : RVPBinary1F1W<0b001, 0b00, "padd.h.h0", 0b010>;
+def PADD_B_B0 : RVPBinary1F1W<0b001, 0b10, "padd.b.b0", 0b010>;
+def PSSHA_H_H0 : RVPBinary1F1W<0b110, 0b00, "pssha.h.h0", 0b010>;
+def PSSHAR_H_H0 : RVPBinary1F1W<0b111, 0b00, "psshar.h.h0", 0b010>;
} // Predicates = [HasStdExtP]
let DecoderNamespace = "RISCV32Only_",
Predicates = [HasStdExtP, IsRV32] in {
-def SSHA : RVPBinary1F1W<0b110, 0b01, "ssha", 0b010, OPC_OP_IMM_32>;
-def SSHAR : RVPBinary1F1W<0b111, 0b01, "sshar", 0b010, OPC_OP_IMM_32>;
+def SSHA : RVPBinary1F1W<0b110, 0b01, "ssha", 0b010>;
+def SSHAR : RVPBinary1F1W<0b111, 0b01, "sshar", 0b010>;
} // Predicates = [HasStdExtP, IsRV32]
let Predicates = [HasStdExtP, IsRV64] in {
-def PSLL_W_W0 : RVPBinary1F1W<0b000, 0b01, "psll.w.w0", 0b010, OPC_OP_IMM_32>;
-def PADD_W_W0 : RVPBinary1F1W<0b001, 0b01, "padd.w.w0", 0b010, OPC_OP_IMM_32>;
-def PSSHA_W_W0 : RVPBinary1F1W<0b110, 0b01, "pssha.w.w0", 0b010, OPC_OP_IMM_32>;
-def PSSHAR_W_W0 : RVPBinary1F1W<0b111, 0b01, "psshar.w.w0", 0b010, OPC_OP_IMM_32>;
-def SHA : RVPBinary1F1W<0b110, 0b11, "sha", 0b010, OPC_OP_IMM_32>;
-def SHAR : RVPBinary1F1W<0b111, 0b11, "shar", 0b010, OPC_OP_IMM_32>;
+def PSLL_W_W0 : RVPBinary1F1W<0b000, 0b01, "psll.w.w0", 0b010>;
+def PADD_W_W0 : RVPBinary1F1W<0b001, 0b01, "padd.w.w0", 0b010>;
+def PSSHA_W_W0 : RVPBinary1F1W<0b110, 0b01, "pssha.w.w0", 0b010>;
+def PSSHAR_W_W0 : RVPBinary1F1W<0b111, 0b01, "psshar.w.w0", 0b010>;
+def SHA : RVPBinary1F1W<0b110, 0b11, "sha", 0b010>;
+def SHAR : RVPBinary1F1W<0b111, 0b11, "shar", 0b010>;
} // Predicates = [HasStdExtP, IsRV64]
let Predicates = [HasStdExtP] in {
-def PSRLI_B : RVPUnary1F0<0b000, 0b0001000, "psrli.b">;
-def PSRLI_H : RVPUnary1F0<0b000, 0b0010000, "psrli.h">;
-def PUSATI_H : RVPUnary1F0<0b010, 0b0010000, "pusati.h">;
-def PSRAI_B : RVPUnary1F0<0b100, 0b0001000, "psrai.b">;
-def PSRAI_H : RVPUnary1F0<0b100, 0b0010000, "psrai.h">;
-def PSRARI_H : RVPUnary1F0<0b101, 0b0010000, "psrari.h">;
-def PSATI_H : RVPUnary1F0<0b110, 0b0010000, "psati.h">;
+def PSRLI_B : RVPUnary1F0<0b000, 0b0001000, "psrli.b">;
+def PSRLI_H : RVPUnary1F0<0b000, 0b0010000, "psrli.h">;
+def PUSATI_H : RVPUnary1F0<0b010, 0b0010000, "pusati.h">;
+def PSRAI_B : RVPUnary1F0<0b100, 0b0001000, "psrai.b">;
+def PSRAI_H : RVPUnary1F0<0b100, 0b0010000, "psrai.h">;
+def PSRARI_H : RVPUnary1F0<0b101, 0b0010000, "psrari.h">;
+def PSATI_H : RVPUnary1F0<0b110, 0b0010000, "psati.h">;
} // Predicates = [HasStdExtP]
let DecoderNamespace = "RISCV32Only_",
@@ -368,124 +364,124 @@ def SRARI : RVPUnary1F0<0b101, 0b0100000, "srari">;
def SATI : RVPUnary1F0<0b110, 0b0100000, "sati">;
} // Predicates = [HasStdExtP, IsRV32]
let Predicates = [HasStdExtP, IsRV64] in {
-def PSRLI_W : RVPUnary1F0<0b000, 0b0100000, "psrli.w">;
-def PUSATI_W : RVPUnary1F0<0b010, 0b0100000, "pusati.w">;
-def USATI_RV64 : RVPUnary1F0<0b010, 0b1000000, "usati">;
+def PSRLI_W : RVPUnary1F0<0b000, 0b0100000, "psrli.w">;
+def PUSATI_W : RVPUnary1F0<0b010, 0b0100000, "pusati.w">;
+def USATI_RV64 : RVPUnary1F0<0b010, 0b1000000, "usati">;
} // Predicates = [HasStdExtP, IsRV64]
let Predicates = [HasStdExtP] in {
-def PSRL_H_H0 : RVPBinary1F1W<0b000, 0b00, "psrl.h.h0", 0b100, OPC_OP_IMM_32>;
-def PSRL_B_B0 : RVPBinary1F1W<0b000, 0b10, "psrl.b.b0", 0b100, OPC_OP_IMM_32>;
-def PREDSUM_H : RVPBinary1F1W<0b001, 0b00, "predsum.h", 0b100, OPC_OP_IMM_32>;
-def PREDSUM_B : RVPBinary1F1W<0b001, 0b10, "predsum.b", 0b100, OPC_OP_IMM_32>;
-def PREDSUMU_H : RVPBinary1F1W<0b011, 0b00, "predsumu.h", 0b100, OPC_OP_IMM_32>;
-def PREDSUMU_B : RVPBinary1F1W<0b011, 0b10, "predsumu.b", 0b100, OPC_OP_IMM_32>;
-def PSRA_H_H0 : RVPBinary1F1W<0b100, 0b00, "psra.h.h0", 0b100, OPC_OP_IMM_32>;
-def PSRA_B_B0 : RVPBinary1F1W<0b100, 0b10, "psra.b.b0", 0b100, OPC_OP_IMM_32>;
+def PSRL_H_H0 : RVPBinary1F1W<0b000, 0b00, "psrl.h.h0", 0b100>;
+def PSRL_B_B0 : RVPBinary1F1W<0b000, 0b10, "psrl.b.b0", 0b100>;
+def PREDSUM_H : RVPBinary1F1W<0b001, 0b00, "predsum.h", 0b100>;
+def PREDSUM_B : RVPBinary1F1W<0b001, 0b10, "predsum.b", 0b100>;
+def PREDSUMU_H : RVPBinary1F1W<0b011, 0b00, "predsumu.h", 0b100>;
+def PREDSUMU_B : RVPBinary1F1W<0b011, 0b10, "predsumu.b", 0b100>;
+def PSRA_H_H0 : RVPBinary1F1W<0b100, 0b00, "psra.h.h0", 0b100>;
+def PSRA_B_B0 : RVPBinary1F1W<0b100, 0b10, "psra.b.b0", 0b100>;
} // Predicates = [HasStdExtP]
let Predicates = [HasStdExtP, IsRV64] in {
-def PSRL_W_W0 : RVPBinary1F1W<0b000, 0b01, "psrl.w.w0", 0b100, OPC_OP_IMM_32>;
-def PREDSUM_W : RVPBinary1F1W<0b001, 0b01, "predsum.w", 0b100, OPC_OP_IMM_32>;
-def PREDSUMU_W : RVPBinary1F1W<0b011, 0b01, "predsumu.w", 0b100, OPC_OP_IMM_32>;
-def PSRA_W_W0 : RVPBinary1F1W<0b100, 0b01, "psra.w.w0", 0b100, OPC_OP_IMM_32>;
+def PSRL_W_W0 : RVPBinary1F1W<0b000, 0b01, "psrl.w.w0", 0b100>;
+def PREDSUM_W : RVPBinary1F1W<0b001, 0b01, "predsum.w", 0b100>;
+def PREDSUMU_W : RVPBinary1F1W<0b011, 0b01, "predsumu.w", 0b100>;
+def PSRA_W_W0 : RVPBinary1F1W<0b100, 0b01, "psra.w.w0", 0b100>;
} // Predicates = [HasStdExtP, IsRV64]
let Predicates = [HasStdExtP] in {
-def PADD_H : RVPBinary1LongFW<0b0000, 0b00, "padd.h", 0b000>;
-def PADD_B : RVPBinary1LongFW<0b0000, 0b10, "padd.b", 0b000>;
-def PSADD_H : RVPBinary1LongFW<0b0010, 0b00, "psadd.h", 0b000>;
-def PSADD_B : RVPBinary1LongFW<0b0010, 0b10, "psadd.b", 0b000>;
-def PAADD_H : RVPBinary1LongFW<0b0011, 0b00, "paadd.h", 0b000>;
-def PAADD_B : RVPBinary1LongFW<0b0011, 0b10, "paadd.b", 0b000>;
-
-def PSADDU_H : RVPBinary1LongFW<0b0110, 0b00, "psaddu.h", 0b000>;
-def PSADDU_B : RVPBinary1LongFW<0b0110, 0b10, "psaddu.b", 0b000>;
-def PAADDU_H : RVPBinary1LongFW<0b0111, 0b00, "paaddu.h", 0b000>;
-def PAADDU_B : RVPBinary1LongFW<0b0111, 0b10, "paaddu.b", 0b000>;
-
-def PSUB_H : RVPBinary1LongFW<0b1000, 0b00, "psub.h", 0b000>;
-def PSUB_B : RVPBinary1LongFW<0b1000, 0b10, "psub.b", 0b000>;
-def PDIF_H : RVPBinary1LongFW<0b1001, 0b00, "pdif.h", 0b000>;
-def PDIF_B : RVPBinary1LongFW<0b1001, 0b10, "pdif.b", 0b000>;
-def PSSUB_H : RVPBinary1LongFW<0b1010, 0b00, "pssub.h", 0b000>;
-def PSSUB_B : RVPBinary1LongFW<0b1010, 0b10, "pssub.b", 0b000>;
-def PASUB_H : RVPBinary1LongFW<0b1011, 0b00, "pasub.h", 0b000>;
-def PASUB_B : RVPBinary1LongFW<0b1011, 0b10, "pasub.b", 0b000>;
-
-def PDIFU_H : RVPBinary1LongFW<0b1101, 0b00, "pdifu.h", 0b000>;
-def PDIFU_B : RVPBinary1LongFW<0b1101, 0b10, "pdifu.b", 0b000>;
-def PSSUBU_H : RVPBinary1LongFW<0b1110, 0b00, "pssubu.h", 0b000>;
-def PSSUBU_B : RVPBinary1LongFW<0b1110, 0b10, "pssubu.b", 0b000>;
-def PASUBU_H : RVPBinary1LongFW<0b1111, 0b00, "pasubu.h", 0b000>;
-def PASUBU_B : RVPBinary1LongFW<0b1111, 0b10, "pasubu.b", 0b000>;
+def PADD_H : RVPBinary1LongFW<0b0000, 0b00, 0b000, "padd.h">;
+def PADD_B : RVPBinary1LongFW<0b0000, 0b10, 0b000, "padd.b">;
+def PSADD_H : RVPBinary1LongFW<0b0010, 0b00, 0b000, "psadd.h">;
+def PSADD_B : RVPBinary1LongFW<0b0010, 0b10, 0b000, "psadd.b">;
+def PAADD_H : RVPBinary1LongFW<0b0011, 0b00, 0b000, "paadd.h">;
+def PAADD_B : RVPBinary1LongFW<0b0011, 0b10, 0b000, "paadd.b">;
+
+def PSADDU_H : RVPBinary1LongFW<0b0110, 0b00, 0b000, "psaddu.h">;
+def PSADDU_B : RVPBinary1LongFW<0b0110, 0b10, 0b000, "psaddu.b">;
+def PAADDU_H : RVPBinary1LongFW<0b0111, 0b00, 0b000, "paaddu.h">;
+def PAADDU_B : RVPBinary1LongFW<0b0111, 0b10, 0b000, "paaddu.b">;
+
+def PSUB_H : RVPBinary1LongFW<0b1000, 0b00, 0b000, "psub.h">;
+def PSUB_B : RVPBinary1LongFW<0b1000, 0b10, 0b000, "psub.b">;
+def PDIF_H : RVPBinary1LongFW<0b1001, 0b00, 0b000, "pdif.h">;
+def PDIF_B : RVPBinary1LongFW<0b1001, 0b10, 0b000, "pdif.b">;
+def PSSUB_H : RVPBinary1LongFW<0b1010, 0b00, 0b000, "pssub.h">;
+def PSSUB_B : RVPBinary1LongFW<0b1010, 0b10, 0b000, "pssub.b">;
+def PASUB_H : RVPBinary1LongFW<0b1011, 0b00, 0b000, "pasub.h">;
+def PASUB_B : RVPBinary1LongFW<0b1011, 0b10, 0b000, "pasub.b">;
+
+def PDIFU_H : RVPBinary1LongFW<0b1101, 0b00, 0b000, "pdifu.h">;
+def PDIFU_B : RVPBinary1LongFW<0b1101, 0b10, 0b000, "pdifu.b">;
+def PSSUBU_H : RVPBinary1LongFW<0b1110, 0b00, 0b000, "pssubu.h">;
+def PSSUBU_B : RVPBinary1LongFW<0b1110, 0b10, 0b000, "pssubu.b">;
+def PASUBU_H : RVPBinary1LongFW<0b1111, 0b00, 0b000, "pasubu.h">;
+def PASUBU_B : RVPBinary1LongFW<0b1111, 0b10, 0b000, "pasubu.b">;
} // Predicates = [HasStdExtP]
let DecoderNamespace = "RISCV32Only_",
Predicates = [HasStdExtP, IsRV32] in {
-def SADD : RVPBinary1LongFW<0b0010, 0b01, "sadd", 0b000>;
-def AADD : RVPBinary1LongFW<0b0011, 0b01, "aadd", 0b000>;
+def SADD : RVPBinary1LongFW<0b0010, 0b01, 0b000, "sadd">;
+def AADD : RVPBinary1LongFW<0b0011, 0b01, 0b000, "aadd">;
-def SADDU : RVPBinary1LongFW<0b0110, 0b01, "saddu", 0b000>;
-def AADDU : RVPBinary1LongFW<0b0111, 0b01, "aaddu", 0b000>;
+def SADDU : RVPBinary1LongFW<0b0110, 0b01, 0b000, "saddu">;
+def AADDU : RVPBinary1LongFW<0b0111, 0b01, 0b000, "aaddu">;
-def SSUB : RVPBinary1LongFW<0b1010, 0b01, "ssub", 0b000>;
-def ASUB : RVPBinary1LongFW<0b1011, 0b01, "asub", 0b000>;
+def SSUB : RVPBinary1LongFW<0b1010, 0b01, 0b000, "ssub">;
+def ASUB : RVPBinary1LongFW<0b1011, 0b01, 0b000, "asub">;
-def SSUBU : RVPBinary1LongFW<0b1110, 0b01, "ssubu", 0b000>;
-def ASUBU : RVPBinary1LongFW<0b1111, 0b01, "asubu", 0b000>;
+def SSUBU : RVPBinary1LongFW<0b1110, 0b01, 0b000, "ssubu">;
+def ASUBU : RVPBinary1LongFW<0b1111, 0b01, 0b000, "asubu">;
} // Predicates = [HasStdExtP, IsRV32]
let Predicates = [HasStdExtP, IsRV64] in {
-def PADD_W : RVPBinary1LongFW<0b0000, 0b01, "padd.w", 0b000>;
-def PSADD_W : RVPBinary1LongFW<0b0010, 0b01, "psadd.w", 0b000>;
-def PAADD_W : RVPBinary1LongFW<0b0011, 0b01, "paadd.w", 0b000>;
+def PADD_W : RVPBinary1LongFW<0b0000, 0b01, 0b000, "padd.w">;
+def PSADD_W : RVPBinary1LongFW<0b0010, 0b01, 0b000, "psadd.w">;
+def PAADD_W : RVPBinary1LongFW<0b0011, 0b01, 0b000, "paadd.w">;
-def PSADDU_W : RVPBinary1LongFW<0b0110, 0b01, "psaddu.w", 0b000>;
-def PAADDU_W : RVPBinary1LongFW<0b0111, 0b01, "paaddu.w", 0b000>;
+def PSADDU_W : RVPBinary1LongFW<0b0110, 0b01, 0b000, "psaddu.w">;
+def PAADDU_W : RVPBinary1LongFW<0b0111, 0b01, 0b000, "paaddu.w">;
-def PSUB_W : RVPBinary1LongFW<0b1000, 0b01, "psub.w", 0b000>;
-def PSSUB_W : RVPBinary1LongFW<0b1010, 0b01, "pssub.w", 0b000>;
-def PASUB_W : RVPBinary1LongFW<0b1011, 0b01, "pasub.w", 0b000>;
+def PSUB_W : RVPBinary1LongFW<0b1000, 0b01, 0b000, "psub.w">;
+def PSSUB_W : RVPBinary1LongFW<0b1010, 0b01, 0b000, "pssub.w">;
+def PASUB_W : RVPBinary1LongFW<0b1011, 0b01, 0b000, "pasub.w">;
-def PSSUBU_W : RVPBinary1LongFW<0b1110, 0b01, "pssubu.w", 0b000>;
-def PASUBU_W : RVPBinary1LongFW<0b1111, 0b01, "pasubu.w", 0b000>;
+def PSSUBU_W : RVPBinary1LongFW<0b1110, 0b01, 0b000, "pssubu.w">;
+def PASUBU_W : RVPBinary1LongFW<0b1111, 0b01, 0b000, "pasubu.w">;
} // Predicates = [HasStdExtP, IsRV64]
let Predicates = [HasStdExtP] in {
-def SLX : RVPBinary1LongFW<0b0001, 0b11, "slx", 0b001>;
-def PMUL_H_BEO : RVPBinary1LongFW<0b0010, 0b00, "pmul.h.beo", 0b001>;
-
-def MVM : RVPBinary1LongFW<0b0101, 0b00, "mvm", 0b001>;
-def MVMN : RVPBinary1LongFW<0b0101, 0b01, "mvmn", 0b001>;
-def MERGE : RVPBinary1LongFW<0b0101, 0b10, "merge", 0b001>;
-def SRX : RVPBinary1LongFW<0b0101, 0b11, "srx", 0b001>;
-def PMULU_H_BEO : RVPBinary1LongFW<0b0110, 0b00, "pmulu.h.beo", 0b001>;
-def PDIFSUMU_B : RVPBinary1LongFW<0b0110, 0b10, "pdifsumu.b", 0b001>;
-def PDIFSUMAU_B : RVPBinary1LongFW<0b0111, 0b10, "pdifsumau.b", 0b001>;
+def SLX : RVPBinary1LongFW<0b0001, 0b11, 0b001, "slx">;
+def PMUL_H_BEO : RVPBinary1LongFW<0b0010, 0b00, 0b001, "pmul.h.beo">;
+
+def MVM : RVPBinary1LongFW<0b0101, 0b00, 0b001, "mvm">;
+def MVMN : RVPBinary1LongFW<0b0101, 0b01, 0b001, "mvmn">;
+def MERGE : RVPBinary1LongFW<0b0101, 0b10, 0b001, "merge">;
+def SRX : RVPBinary1LongFW<0b0101, 0b11, 0b001, "srx">;
+def PMULU_H_BEO : RVPBinary1LongFW<0b0110, 0b00, 0b001, "pmulu.h.beo">;
+def PDIFSUMU_B : RVPBinary1LongFW<0b0110, 0b10, 0b001, "pdifsumu.b">;
+def PDIFSUMAU_B : RVPBinary1LongFW<0b0111, 0b10, 0b001, "pdifsumau.b">;
} // Predicates = [HasStdExtP]
let DecoderNamespace = "RISCV32Only_",
Predicates = [HasStdExtP, IsRV32] in {
-def MUL_H01 : RVPBinary1LongFW<0b0010, 0b01, "mul.h01", 0b001>;
-def MACC_H01 : RVPBinary1LongFW<0b0011, 0b01, "macc.h01", 0b001>;
+def MUL_H01 : RVPBinary1LongFW<0b0010, 0b01, 0b001, "mul.h01">;
+def MACC_H01 : RVPBinary1LongFW<0b0011, 0b01, 0b001, "macc.h01">;
-def MULU_H01 : RVPBinary1LongFW<0b0110, 0b01, "mulu.h01", 0b001>;
-def MACCU_H01 : RVPBinary1LongFW<0b0111, 0b01, "maccu.h01", 0b001>;
+def MULU_H01 : RVPBinary1LongFW<0b0110, 0b01, 0b001, "mulu.h01">;
+def MACCU_H01 : RVPBinary1LongFW<0b0111, 0b01, 0b001, "maccu.h01">;
} // Predicates = [HasStdExtP, IsRV32]
let Predicates = [HasStdExtP, IsRV64] in {
-def PMUL_W_HEO : RVPBinary1LongFW<0b0010, 0b01, "pmul.w.heo", 0b001>;
-def MUL_W01 : RVPBinary1LongFW<0b0010, 0b11, "mul.w01", 0b001>;
-def PMACC_W_HEO : RVPBinary1LongFW<0b0011, 0b01, "pmacc.w.heo", 0b001>;
-def MACC_W01 : RVPBinary1LongFW<0b0011, 0b11, "macc.w01", 0b001>;
-
-def PMULU_W_HEO : RVPBinary1LongFW<0b0110, 0b01, "pmulu.w.heo", 0b001>;
-def MULU_W01 : RVPBinary1LongFW<0b0110, 0b11, "mulu.w01", 0b001>;
-def PMACCU_W_HEO : RVPBinary1LongFW<0b0111, 0b01, "pmaccu.w.heo", 0b001>;
-def MACCU_W01 : RVPBinary1LongFW<0b0111, 0b11, "maccu.w01", 0b001>;
+def PMUL_W_HEO : RVPBinary1LongFW<0b0010, 0b01, 0b001, "pmul.w.heo">;
+def MUL_W01 : RVPBinary1LongFW<0b0010, 0b11, 0b001, "mul.w01">;
+def PMACC_W_HEO : RVPBinary1LongFW<0b0011, 0b01, 0b001, "pmacc.w.heo">;
+def MACC_W01 : RVPBinary1LongFW<0b0011, 0b11, 0b001, "macc.w01">;
+
+def PMULU_W_HEO : RVPBinary1LongFW<0b0110, 0b01, 0b001, "pmulu.w.heo">;
+def MULU_W01 : RVPBinary1LongFW<0b0110, 0b11, 0b001, "mulu.w01">;
+def PMACCU_W_HEO : RVPBinary1LongFW<0b0111, 0b01, 0b001, "pmaccu.w.heo">;
+def MACCU_W01 : RVPBinary1LongFW<0b0111, 0b11, 0b001, "maccu.w01">;
} // Predicates = [HasStdExtP, IsRV64]
@@ -514,60 +510,60 @@ def ZIP16HP : RVPBinary1F0W<0b111, 0b11, "zip16hp", 0b010>;
let Predicates = [HasStdExtP] in {
-def PMUL_H_BEE : RVPBinary1LongFW<0b0000, 0b00, "pmul.h.bee", 0b011>;
-def PMUL_H_BOO : RVPBinary1LongFW<0b0010, 0b00, "pmul.h.boo", 0b011>;
+def PMUL_H_BEE : RVPBinary1LongFW<0b0000, 0b00, 0b011, "pmul.h.bee">;
+def PMUL_H_BOO : RVPBinary1LongFW<0b0010, 0b00, 0b011, "pmul.h.boo">;
-def PMULU_H_BEE : RVPBinary1LongFW<0b0100, 0b00, "pmulu.h.bee", 0b011>;
-def PMULU_H_BOO : RVPBinary1LongFW<0b0110, 0b00, "pmulu.h.boo", 0b011>;
+def PMULU_H_BEE : RVPBinary1LongFW<0b0100, 0b00, 0b011, "pmulu.h.bee">;
+def PMULU_H_BOO : RVPBinary1LongFW<0b0110, 0b00, 0b011, "pmulu.h.boo">;
-def PMULSU_H_BEE : RVPBinary1LongFW<0b1100, 0b00, "pmulsu.h.bee", 0b011>;
-def PMULSU_H_BOO : RVPBinary1LongFW<0b1110, 0b00, "pmulsu.h.boo", 0b011>;
+def PMULSU_H_BEE : RVPBinary1LongFW<0b1100, 0b00, 0b011, "pmulsu.h.bee">;
+def PMULSU_H_BOO : RVPBinary1LongFW<0b1110, 0b00, 0b011, "pmulsu.h.boo">;
} // Predicates = [HasStdExtP]
let DecoderNamespace = "RISCV32Only_",
Predicates = [HasStdExtP, IsRV32] in {
-def MUL_H00 : RVPBinary1LongFW<0b0000, 0b01, "mul.h00", 0b011>;
-def MACC_H00 : RVPBinary1LongFW<0b0001, 0b01, "macc.h00", 0b011>;
-def MUL_H11 : RVPBinary1LongFW<0b0010, 0b01, "mul.h11", 0b011>;
-def MACC_H11 : RVPBinary1LongFW<0b0011, 0b01, "macc.h11", 0b011>;
-
-def MULU_H00 : RVPBinary1LongFW<0b0100, 0b01, "mulu.h00", 0b011>;
-def MACCU_H00 : RVPBinary1LongFW<0b0101, 0b01, "maccu.h00", 0b011>;
-def MULU_H11 : RVPBinary1LongFW<0b0110, 0b01, "mulu.h11", 0b011>;
-def MACCU_H11 : RVPBinary1LongFW<0b0111, 0b01, "maccu.h11", 0b011>;
-
-def MULSU_H00 : RVPBinary1LongFW<0b1100, 0b01, "mulsu.h00", 0b011>;
-def MACCSU_H00 : RVPBinary1LongFW<0b1101, 0b01, "maccsu.h00", 0b011>;
-def MULSU_H11 : RVPBinary1LongFW<0b1110, 0b01, "mulsu.h11", 0b011>;
-def MACCSU_H11 : RVPBinary1LongFW<0b1111, 0b01, "maccsu.h11", 0b011>;
+def MUL_H00 : RVPBinary1LongFW<0b0000, 0b01, 0b011, "mul.h00">;
+def MACC_H00 : RVPBinary1LongFW<0b0001, 0b01, 0b011, "macc.h00">;
+def MUL_H11 : RVPBinary1LongFW<0b0010, 0b01, 0b011, "mul.h11">;
+def MACC_H11 : RVPBinary1LongFW<0b0011, 0b01, 0b011, "macc.h11">;
+
+def MULU_H00 : RVPBinary1LongFW<0b0100, 0b01, 0b011, "mulu.h00">;
+def MACCU_H00 : RVPBinary1LongFW<0b0101, 0b01, 0b011, "maccu.h00">;
+def MULU_H11 : RVPBinary1LongFW<0b0110, 0b01, 0b011, "mulu.h11">;
+def MACCU_H11 : RVPBinary1LongFW<0b0111, 0b01, 0b011, "maccu.h11">;
+
+def MULSU_H00 : RVPBinary1LongFW<0b1100, 0b01, 0b011, "mulsu.h00">;
+def MACCSU_H00 : RVPBinary1LongFW<0b1101, 0b01, 0b011, "maccsu.h00">;
+def MULSU_H11 : RVPBinary1LongFW<0b1110, 0b01, 0b011, "mulsu.h11">;
+def MACCSU_H11 : RVPBinary1LongFW<0b1111, 0b01, 0b011, "maccsu.h11">;
} // Predicates = [HasStdExtP, IsRV32]
let Predicates = [HasStdExtP, IsRV64] in {
-def PMUL_W_BEE : RVPBinary1LongFW<0b0000, 0b01, "pmul.w.bee", 0b011>;
-def MUL_W00 : RVPBinary1LongFW<0b0000, 0b11, "mul.w00", 0b011>;
-def PMACC_W_HEE : RVPBinary1LongFW<0b0001, 0b01, "pmacc.w.hee", 0b011>;
-def MACC_W00 : RVPBinary1LongFW<0b0001, 0b11, "macc.w00", 0b011>;
-def PMUL_W_HOO : RVPBinary1LongFW<0b0010, 0b01, "pmul.w.hoo", 0b011>;
-def MUL_W11 : RVPBinary1LongFW<0b0010, 0b11, "mul.w11", 0b011>;
-def PMACC_W_HOO : RVPBinary1LongFW<0b0011, 0b01, "pmacc.w.hoo", 0b011>;
-def MACC_W11 : RVPBinary1LongFW<0b0011, 0b11, "macc.w11", 0b011>;
-
-def PMULU_W_HEE : RVPBinary1LongFW<0b0100, 0b01, "pmulu.w.hee", 0b011>;
-def MULU_W00 : RVPBinary1LongFW<0b0100, 0b11, "mulu.w00", 0b011>;
-def PMACCU_W_HEE : RVPBinary1LongFW<0b0101, 0b01, "pmaccu.w.hee", 0b011>;
-def MACCU_W00 : RVPBinary1LongFW<0b0101, 0b11, "maccu.w00", 0b011>;
-def PMULU_W_HOO : RVPBinary1LongFW<0b0110, 0b01, "pmulu.w.hoo", 0b011>;
-def MULU_W11 : RVPBinary1LongFW<0b0110, 0b11, "mulu.w11", 0b011>;
-def PMACCU_W_HOO : RVPBinary1LongFW<0b0111, 0b01, "pmaccu.w.hoo", 0b011>;
-def MACCU_W11 : RVPBinary1LongFW<0b0111, 0b11, "maccu.w11", 0b011>;
-
-def PMULSU_W_HEE : RVPBinary1LongFW<0b1100, 0b01, "pmulsu.w.hee", 0b011>;
-def MULSU_W00 : RVPBinary1LongFW<0b1100, 0b11, "mulsu.w00", 0b011>;
-def PMACCSU_W_HEE : RVPBinary1LongFW<0b1101, 0b01, "pmaccsu.w.hee", 0b011>;
-def MACCSU_W00 : RVPBinary1LongFW<0b1101, 0b11, "maccsu.w00", 0b011>;
-def PMULSU_W_HOO : RVPBinary1LongFW<0b1110, 0b01, "pmulsu.w.hoo", 0b011>;
-def MULSU_W11 : RVPBinary1LongFW<0b1110, 0b11, "mulsu.w11", 0b011>;
-def PMACCSU_W_HOO : RVPBinary1LongFW<0b1111, 0b01, "pmaccsu.w.hoo", 0b011>;
-def MACCSU_W11 : RVPBinary1LongFW<0b1111, 0b11, "maccsu.w11", 0b011>;
+def PMUL_W_BEE : RVPBinary1LongFW<0b0000, 0b01, 0b011, "pmul.w.bee">;
+def MUL_W00 : RVPBinary1LongFW<0b0000, 0b11, 0b011, "mul.w00">;
+def PMACC_W_HEE : RVPBinary1LongFW<0b0001, 0b01, 0b011, "pmacc.w.hee">;
+def MACC_W00 : RVPBinary1LongFW<0b0001, 0b11, 0b011, "macc.w00">;
+def PMUL_W_HOO : RVPBinary1LongFW<0b0010, 0b01, 0b011, "pmul.w.hoo">;
+def MUL_W11 : RVPBinary1LongFW<0b0010, 0b11, 0b011, "mul.w11">;
+def PMACC_W_HOO : RVPBinary1LongFW<0b0011, 0b01, 0b011, "pmacc.w.hoo">;
+def MACC_W11 : RVPBinary1LongFW<0b0011, 0b11, 0b011, "macc.w11">;
+
+def PMULU_W_HEE : RVPBinary1LongFW<0b0100, 0b01, 0b011, "pmulu.w.hee">;
+def MULU_W00 : RVPBinary1LongFW<0b0100, 0b11, 0b011, "mulu.w00">;
+def PMACCU_W_HEE : RVPBinary1LongFW<0b0101, 0b01, 0b011, "pmaccu.w.hee">;
+def MACCU_W00 : RVPBinary1LongFW<0b0101, 0b11, 0b011, "maccu.w00">;
+def PMULU_W_HOO : RVPBinary1LongFW<0b0110, 0b01, 0b011, "pmulu.w.hoo">;
+def MULU_W11 : RVPBinary1LongFW<0b0110, 0b11, 0b011, "mulu.w11">;
+def PMACCU_W_HOO : RVPBinary1LongFW<0b0111, 0b01, 0b011, "pmaccu.w.hoo">;
+def MACCU_W11 : RVPBinary1LongFW<0b0111, 0b11, 0b011, "maccu.w11">;
+
+def PMULSU_W_HEE : RVPBinary1LongFW<0b1100, 0b01, 0b011, "pmulsu.w.hee">;
+def MULSU_W00 : RVPBinary1LongFW<0b1100, 0b11, 0b011, "mulsu.w00">;
+def PMACCSU_W_HEE : RVPBinary1LongFW<0b1101, 0b01, 0b011, "pmaccsu.w.hee">;
+def MACCSU_W00 : RVPBinary1LongFW<0b1101, 0b11, 0b011, "maccsu.w00">;
+def PMULSU_W_HOO : RVPBinary1LongFW<0b1110, 0b01, 0b011, "pmulsu.w.hoo">;
+def MULSU_W11 : RVPBinary1LongFW<0b1110, 0b11, 0b011, "mulsu.w11">;
+def PMACCSU_W_HOO : RVPBinary1LongFW<0b1111, 0b01, 0b011, "pmaccsu.w.hoo">;
+def MACCSU_W11 : RVPBinary1LongFW<0b1111, 0b11, 0b011, "maccsu.w11">;
} // Predicates = [HasStdExtP, IsRV64]
@@ -596,211 +592,211 @@ def PPACKT : RVPBinary1F0W<0b011, 0b11, "ppackt", 0b100>;
let Predicates = [HasStdExtP] in {
-def PM2ADD_H : RVPBinary1LongFW<0b0000, 0b00, "pm2add.h", 0b101>;
-def PM4ADD_B : RVPBinary1LongFW<0b0000, 0b10, "pm4add.b", 0b101>;
-def PM2ADDA_H : RVPBinary1LongFW<0b0001, 0b00, "pm2adda.h", 0b101>;
-def PM4ADDA_B : RVPBinary1LongFW<0b0001, 0b10, "pm4adda.b", 0b101>;
-def PM2ADD_HX : RVPBinary1LongFW<0b0010, 0b00, "pm2add.hx", 0b101>;
-def PM2ADDA_HX : RVPBinary1LongFW<0b0011, 0b00, "pm2adda.hx", 0b101>;
-
-def PM2ADDU_H : RVPBinary1LongFW<0b0100, 0b00, "pm2addu.h", 0b101>;
-def PM4ADDU_B : RVPBinary1LongFW<0b0100, 0b10, "pm4addu.b", 0b101>;
-def PM2ADDAU_H : RVPBinary1LongFW<0b0101, 0b00, "pm2addau.h", 0b101>;
-def PM4ADDAU_B : RVPBinary1LongFW<0b0101, 0b10, "pm4addau.b", 0b101>;
-def PMQ2ADD_H : RVPBinary1LongFW<0b0110, 0b00, "pmq2add.h", 0b101>;
-def PMQR2ADD_H : RVPBinary1LongFW<0b0110, 0b10, "pmqr2add.h", 0b101>;
-def PMQ2ADDA_H : RVPBinary1LongFW<0b0111, 0b00, "pmq2adda.h", 0b101>;
-def PMQR2ADDA_H : RVPBinary1LongFW<0b0111, 0b10, "pmqr2adda.h", 0b101>;
-
-def PM2SUB_H : RVPBinary1LongFW<0b1000, 0b00, "pm2sub.h", 0b101>;
-def PM2SADD_H : RVPBinary1LongFW<0b1000, 0b10, "pm2sadd.h", 0b101>;
-def PM2SUBA_H : RVPBinary1LongFW<0b1001, 0b00, "pm2suba.h", 0b101>;
-def PM2SUB_HX : RVPBinary1LongFW<0b1010, 0b00, "pm2sub.hx", 0b101>;
-def PM2SADD_HX : RVPBinary1LongFW<0b1010, 0b10, "pm2sadd.hx", 0b101>;
-def PM2SUBA_HX : RVPBinary1LongFW<0b1011, 0b00, "pm2suba.hx", 0b101>;
-
-def PM2ADDSU_H : RVPBinary1LongFW<0b1100, 0b00, "pm2addsu.h", 0b101>;
-def PM4ADDSU_B : RVPBinary1LongFW<0b1100, 0b10, "pm4addsu.b", 0b101>;
-def PM2ADDASU_H : RVPBinary1LongFW<0b1101, 0b00, "pm2addasu.h", 0b101>;
-def PM4ADDASU_B : RVPBinary1LongFW<0b1101, 0b10, "pm4addasu.b", 0b101>;
+def PM2ADD_H : RVPBinary1LongFW<0b0000, 0b00, 0b101, "pm2add.h">;
+def PM4ADD_B : RVPBinary1LongFW<0b0000, 0b10, 0b101, "pm4add.b">;
+def PM2ADDA_H : RVPBinary1LongFW<0b0001, 0b00, 0b101, "pm2adda.h">;
+def PM4ADDA_B : RVPBinary1LongFW<0b0001, 0b10, 0b101, "pm4adda.b">;
+def PM2ADD_HX : RVPBinary1LongFW<0b0010, 0b00, 0b101, "pm2add.hx">;
+def PM2ADDA_HX : RVPBinary1LongFW<0b0011, 0b00, 0b101, "pm2adda.hx">;
+
+def PM2ADDU_H : RVPBinary1LongFW<0b0100, 0b00, 0b101, "pm2addu.h">;
+def PM4ADDU_B : RVPBinary1LongFW<0b0100, 0b10, 0b101, "pm4addu.b">;
+def PM2ADDAU_H : RVPBinary1LongFW<0b0101, 0b00, 0b101, "pm2addau.h">;
+def PM4ADDAU_B : RVPBinary1LongFW<0b0101, 0b10, 0b101, "pm4addau.b">;
+def PMQ2ADD_H : RVPBinary1LongFW<0b0110, 0b00, 0b101, "pmq2add.h">;
+def PMQR2ADD_H : RVPBinary1LongFW<0b0110, 0b10, 0b101, "pmqr2add.h">;
+def PMQ2ADDA_H : RVPBinary1LongFW<0b0111, 0b00, 0b101, "pmq2adda.h">;
+def PMQR2ADDA_H : RVPBinary1LongFW<0b0111, 0b10, 0b101, "pmqr2adda.h">;
+
+def PM2SUB_H : RVPBinary1LongFW<0b1000, 0b00, 0b101, "pm2sub.h">;
+def PM2SADD_H : RVPBinary1LongFW<0b1000, 0b10, 0b101, "pm2sadd.h">;
+def PM2SUBA_H : RVPBinary1LongFW<0b1001, 0b00, 0b101, "pm2suba.h">;
+def PM2SUB_HX : RVPBinary1LongFW<0b1010, 0b00, 0b101, "pm2sub.hx">;
+def PM2SADD_HX : RVPBinary1LongFW<0b1010, 0b10, 0b101, "pm2sadd.hx">;
+def PM2SUBA_HX : RVPBinary1LongFW<0b1011, 0b00, 0b101, "pm2suba.hx">;
+
+def PM2ADDSU_H : RVPBinary1LongFW<0b1100, 0b00, 0b101, "pm2addsu.h">;
+def PM4ADDSU_B : RVPBinary1LongFW<0b1100, 0b10, 0b101, "pm4addsu.b">;
+def PM2ADDASU_H : RVPBinary1LongFW<0b1101, 0b00, 0b101, "pm2addasu.h">;
+def PM4ADDASU_B : RVPBinary1LongFW<0b1101, 0b10, 0b101, "pm4addasu.b">;
} // Predicates = [HasStdExtP]
let DecoderNamespace = "RISCV32Only_",
Predicates = [HasStdExtP, IsRV32] in {
-def MQACC_H01 : RVPBinary1LongFW<0b0111, 0b00, "mqacc.h01", 0b101>;
-def MQRACC_H01 : RVPBinary1LongFW<0b0111, 0b10, "mqracc.h01", 0b101>;
+def MQACC_H01 : RVPBinary1LongFW<0b0111, 0b00, 0b101, "mqacc.h01">;
+def MQRACC_H01 : RVPBinary1LongFW<0b0111, 0b10, 0b101, "mqracc.h01">;
} // Predicates = [HasStdExtP, IsRV32]
let Predicates = [HasStdExtP, IsRV64] in {
-def PM2ADD_W : RVPBinary1LongFW<0b0000, 0b01, "pm2add.w", 0b101>;
-def PM4ADD_H : RVPBinary1LongFW<0b0000, 0b11, "pm4add.h", 0b101>;
-def PM2ADDA_W : RVPBinary1LongFW<0b0001, 0b01, "pm2adda.w", 0b101>;
-def PM4ADDA_H : RVPBinary1LongFW<0b0001, 0b11, "pm4adda.h", 0b101>;
-def PM2ADD_WX : RVPBinary1LongFW<0b0010, 0b01, "pm2add.wx", 0b101>;
-def PM2ADDA_WX : RVPBinary1LongFW<0b0011, 0b01, "pm2adda.wx", 0b101>;
-
-def PM2ADDU_W : RVPBinary1LongFW<0b0100, 0b01, "pm2addu.w", 0b101>;
-def PM4ADDU_H : RVPBinary1LongFW<0b0100, 0b11, "pm4addu.h", 0b101>;
-def PM2ADDAU_W : RVPBinary1LongFW<0b0101, 0b01, "pm2addau.w", 0b101>;
-def PM4ADDAU_H : RVPBinary1LongFW<0b0101, 0b11, "pm4addau.h", 0b101>;
-def PMQ2ADD_W : RVPBinary1LongFW<0b0110, 0b01, "pmq2add.w", 0b101>;
-def PMQR2ADD_W : RVPBinary1LongFW<0b0110, 0b11, "pmqr2add.w", 0b101>;
-def PMQ2ADDA_W : RVPBinary1LongFW<0b0111, 0b01, "pmq2adda.w", 0b101>;
-def PMQR2ADDA_W : RVPBinary1LongFW<0b0111, 0b11, "pmqr2adda.w", 0b101>;
-
-def PM2SUB_W : RVPBinary1LongFW<0b1000, 0b01, "pm2sub.w", 0b101>;
-def PM2SUBA_W : RVPBinary1LongFW<0b1001, 0b01, "pm2suba.w", 0b101>;
-def PM2SUB_WX : RVPBinary1LongFW<0b1010, 0b01, "pm2sub.wx", 0b101>;
-def PM2SUBA_WX : RVPBinary1LongFW<0b1011, 0b01, "pm2suba.wx", 0b101>;
-
-def PM2ADDSU_W : RVPBinary1LongFW<0b1100, 0b01, "pm2addsu.w", 0b101>;
-def PM4ADDSU_H : RVPBinary1LongFW<0b1100, 0b11, "pm4addsu.h", 0b101>;
-def PM2ADDASU_W : RVPBinary1LongFW<0b1101, 0b01, "pm2addasu.w", 0b101>;
-def PM4ADDASU_H : RVPBinary1LongFW<0b1101, 0b11, "pm4addasu.h", 0b101>;
-
-def PMQACC_W_HEO : RVPBinary1LongFW<0b1111, 0b00, "pmqacc.w.heo", 0b101>;
-def MQACC_W01 : RVPBinary1LongFW<0b1111, 0b01, "mqacc.w01", 0b101>;
-def PMQRACC_W_HEO : RVPBinary1LongFW<0b1111, 0b10, "pmqracc.w.heo", 0b101>;
-def MQRACC_W01 : RVPBinary1LongFW<0b1111, 0b11, "mqracc.w01", 0b101>;
+def PM2ADD_W : RVPBinary1LongFW<0b0000, 0b01, 0b101, "pm2add.w">;
+def PM4ADD_H : RVPBinary1LongFW<0b0000, 0b11, 0b101, "pm4add.h">;
+def PM2ADDA_W : RVPBinary1LongFW<0b0001, 0b01, 0b101, "pm2adda.w">;
+def PM4ADDA_H : RVPBinary1LongFW<0b0001, 0b11, 0b101, "pm4adda.h">;
+def PM2ADD_WX : RVPBinary1LongFW<0b0010, 0b01, 0b101, "pm2add.wx">;
+def PM2ADDA_WX : RVPBinary1LongFW<0b0011, 0b01, 0b101, "pm2adda.wx">;
+
+def PM2ADDU_W : RVPBinary1LongFW<0b0100, 0b01, 0b101, "pm2addu.w">;
+def PM4ADDU_H : RVPBinary1LongFW<0b0100, 0b11, 0b101, "pm4addu.h">;
+def PM2ADDAU_W : RVPBinary1LongFW<0b0101, 0b01, 0b101, "pm2addau.w">;
+def PM4ADDAU_H : RVPBinary1LongFW<0b0101, 0b11, 0b101, "pm4addau.h">;
+def PMQ2ADD_W : RVPBinary1LongFW<0b0110, 0b01, 0b101, "pmq2add.w">;
+def PMQR2ADD_W : RVPBinary1LongFW<0b0110, 0b11, 0b101, "pmqr2add.w">;
+def PMQ2ADDA_W : RVPBinary1LongFW<0b0111, 0b01, 0b101, "pmq2adda.w">;
+def PMQR2ADDA_W : RVPBinary1LongFW<0b0111, 0b11, 0b101, "pmqr2adda.w">;
+
+def PM2SUB_W : RVPBinary1LongFW<0b1000, 0b01, 0b101, "pm2sub.w">;
+def PM2SUBA_W : RVPBinary1LongFW<0b1001, 0b01, 0b101, "pm2suba.w">;
+def PM2SUB_WX : RVPBinary1LongFW<0b1010, 0b01, 0b101, "pm2sub.wx">;
+def PM2SUBA_WX : RVPBinary1LongFW<0b1011, 0b01, 0b101, "pm2suba.wx">;
+
+def PM2ADDSU_W : RVPBinary1LongFW<0b1100, 0b01, 0b101, "pm2addsu.w">;
+def PM4ADDSU_H : RVPBinary1LongFW<0b1100, 0b11, 0b101, "pm4addsu.h">;
+def PM2ADDASU_W : RVPBinary1LongFW<0b1101, 0b01, 0b101, "pm2addasu.w">;
+def PM4ADDASU_H : RVPBinary1LongFW<0b1101, 0b11, 0b101, "pm4addasu.h">;
+
+def PMQACC_W_HEO : RVPBinary1LongFW<0b1111, 0b00, 0b101, "pmqacc.w.heo">;
+def MQACC_W01 : RVPBinary1LongFW<0b1111, 0b01, 0b101, "mqacc.w01">;
+def PMQRACC_W_HEO : RVPBinary1LongFW<0b1111, 0b10, 0b101, "pmqracc.w.heo">;
+def MQRACC_W01 : RVPBinary1LongFW<0b1111, 0b11, 0b101, "mqracc.w01">;
} // Predicates = [HasStdExtP, IsRV64]
let Predicates = [HasStdExtP] in {
-def PAS_HX : RVPBinary1LongFW<0b0000, 0b00, "pas.hx", 0b110>;
-def PSA_HX : RVPBinary1LongFW<0b0000, 0b10, "psa.hx", 0b110>;
-def PSAS_HX : RVPBinary1LongFW<0b0010, 0b00, "psas.hx", 0b110>;
-def PSSA_HX : RVPBinary1LongFW<0b0010, 0b10, "pssa.hx", 0b110>;
-
-def PMSEQ_H : RVPBinary1LongFW<0b1000, 0b00, "pmseq.h", 0b110>;
-def PMSEQ_B : RVPBinary1LongFW<0b1000, 0b10, "pmseq.b", 0b110>;
-def PMSLT_H : RVPBinary1LongFW<0b1010, 0b00, "pmslt.h", 0b110>;
-def PMSLT_B : RVPBinary1LongFW<0b1010, 0b10, "pmslt.b", 0b110>;
-def PMSLTU_H : RVPBinary1LongFW<0b1011, 0b00, "pmsltu.h", 0b110>;
-def PMSLTU_B : RVPBinary1LongFW<0b1011, 0b10, "pmsltu.b", 0b110>;
-
-def PMIN_H : RVPBinary1LongFW<0b1100, 0b00, "pmin.h", 0b110>;
-def PMIN_B : RVPBinary1LongFW<0b1100, 0b10, "pmin.b", 0b110>;
-def PMINU_H : RVPBinary1LongFW<0b1101, 0b00, "pminu.h", 0b110>;
-def PMINU_B : RVPBinary1LongFW<0b1101, 0b10, "pminu.b", 0b110>;
-def PMAX_H : RVPBinary1LongFW<0b1110, 0b00, "pmax.h", 0b110>;
-def PMAX_B : RVPBinary1LongFW<0b1110, 0b10, "pmax.b", 0b110>;
-def PMAXU_H : RVPBinary1LongFW<0b1111, 0b00, "pmaxu.h", 0b110>;
-def PMAXU_B : RVPBinary1LongFW<0b1111, 0b10, "pmaxu.b", 0b110>;
+def PAS_HX : RVPBinary1LongFW<0b0000, 0b00, 0b110, "pas.hx">;
+def PSA_HX : RVPBinary1LongFW<0b0000, 0b10, 0b110, "psa.hx">;
+def PSAS_HX : RVPBinary1LongFW<0b0010, 0b00, 0b110, "psas.hx">;
+def PSSA_HX : RVPBinary1LongFW<0b0010, 0b10, 0b110, "pssa.hx">;
+
+def PMSEQ_H : RVPBinary1LongFW<0b1000, 0b00, 0b110, "pmseq.h">;
+def PMSEQ_B : RVPBinary1LongFW<0b1000, 0b10, 0b110, "pmseq.b">;
+def PMSLT_H : RVPBinary1LongFW<0b1010, 0b00, 0b110, "pmslt.h">;
+def PMSLT_B : RVPBinary1LongFW<0b1010, 0b10, 0b110, "pmslt.b">;
+def PMSLTU_H : RVPBinary1LongFW<0b1011, 0b00, 0b110, "pmsltu.h">;
+def PMSLTU_B : RVPBinary1LongFW<0b1011, 0b10, 0b110, "pmsltu.b">;
+
+def PMIN_H : RVPBinary1LongFW<0b1100, 0b00, 0b110, "pmin.h">;
+def PMIN_B : RVPBinary1LongFW<0b1100, 0b10, 0b110, "pmin.b">;
+def PMINU_H : RVPBinary1LongFW<0b1101, 0b00, 0b110, "pminu.h">;
+def PMINU_B : RVPBinary1LongFW<0b1101, 0b10, 0b110, "pminu.b">;
+def PMAX_H : RVPBinary1LongFW<0b1110, 0b00, 0b110, "pmax.h">;
+def PMAX_B : RVPBinary1LongFW<0b1110, 0b10, 0b110, "pmax.b">;
+def PMAXU_H : RVPBinary1LongFW<0b1111, 0b00, 0b110, "pmaxu.h">;
+def PMAXU_B : RVPBinary1LongFW<0b1111, 0b10, 0b110, "pmaxu.b">;
} // Predicates = [HasStdExtP]
let DecoderNamespace = "RISCV32Only_",
Predicates = [HasStdExtP, IsRV32] in {
-def MSEQ : RVPBinary1LongFW<0b1000, 0b01, "mseq", 0b110>;
-def MSLT : RVPBinary1LongFW<0b1010, 0b01, "mslt", 0b110>;
-def MSLTU : RVPBinary1LongFW<0b1011, 0b01, "msltu", 0b110>;
+def MSEQ : RVPBinary1LongFW<0b1000, 0b01, 0b110, "mseq">;
+def MSLT : RVPBinary1LongFW<0b1010, 0b01, 0b110, "mslt">;
+def MSLTU : RVPBinary1LongFW<0b1011, 0b01, 0b110, "msltu">;
} // Predicates = [HasStdExtP, IsRV32]
let Predicates = [HasStdExtP, IsRV64] in {
-def PAS_WX : RVPBinary1LongFW<0b0000, 0b01, "pas.wx", 0b110>;
-def PSA_WX : RVPBinary1LongFW<0b0000, 0b11, "psa.wx", 0b110>;
-def PSAS_WX : RVPBinary1LongFW<0b0010, 0b01, "psas.wx", 0b110>;
-def PSSA_WX : RVPBinary1LongFW<0b0010, 0b11, "pssa.wx", 0b110>;
-def PAAS_WX : RVPBinary1LongFW<0b0011, 0b01, "paas.wx", 0b110>;
-def PASA_WX : RVPBinary1LongFW<0b0011, 0b11, "pasa.wx", 0b110>;
-
-def PMSEQ_W : RVPBinary1LongFW<0b1000, 0b01, "pmseq.w", 0b110>;
-def PMSLT_W : RVPBinary1LongFW<0b1010, 0b01, "pmslt.w", 0b110>;
-def PMSLTU_W : RVPBinary1LongFW<0b1011, 0b01, "pmsltu.w", 0b110>;
-
-def PMIN_W : RVPBinary1LongFW<0b1100, 0b01, "pmin.w", 0b110>;
-def PMINU_W : RVPBinary1LongFW<0b1101, 0b01, "pminu.w", 0b110>;
-def PMAX_W : RVPBinary1LongFW<0b1110, 0b01, "pmax.w", 0b110>;
-def PMAXU_W : RVPBinary1LongFW<0b1111, 0b01, "pmaxu.w", 0b110>;
+def PAS_WX : RVPBinary1LongFW<0b0000, 0b01, 0b110, "pas.wx">;
+def PSA_WX : RVPBinary1LongFW<0b0000, 0b11, 0b110, "psa.wx">;
+def PSAS_WX : RVPBinary1LongFW<0b0010, 0b01, 0b110, "psas.wx">;
+def PSSA_WX : RVPBinary1LongFW<0b0010, 0b11, 0b110, "pssa.wx">;
+def PAAS_WX : RVPBinary1LongFW<0b0011, 0b01, 0b110, "paas.wx">;
+def PASA_WX : RVPBinary1LongFW<0b0011, 0b11, 0b110, "pasa.wx">;
+
+def PMSEQ_W : RVPBinary1LongFW<0b1000, 0b01, 0b110, "pmseq.w">;
+def PMSLT_W : RVPBinary1LongFW<0b1010, 0b01, 0b110, "pmslt.w">;
+def PMSLTU_W : RVPBinary1LongFW<0b1011, 0b01, 0b110, "pmsltu.w">;
+
+def PMIN_W : RVPBinary1LongFW<0b1100, 0b01, 0b110, "pmin.w">;
+def PMINU_W : RVPBinary1LongFW<0b1101, 0b01, 0b110, "pminu.w">;
+def PMAX_W : RVPBinary1LongFW<0b1110, 0b01, 0b110, "pmax.w">;
+def PMAXU_W : RVPBinary1LongFW<0b1111, 0b01, 0b110, "pmaxu.w">;
} // Predicates = [HasStdExtP, IsRV64]
let Predicates = [HasStdExtP] in {
-def PMULH_H : RVPBinary1LongFW<0b0000, 0b00, "pmulh.h", 0b111>;
-def PMULHR_H : RVPBinary1LongFW<0b0000, 0b10, "pmulhr.h", 0b111>;
-def PMHACC_H : RVPBinary1LongFW<0b0001, 0b00, "pmhacc.h", 0b111>;
-def PMHRACC_H : RVPBinary1LongFW<0b0001, 0b10, "pmhracc.h", 0b111>;
-def PMULHU_H : RVPBinary1LongFW<0b0010, 0b00, "pmulhu.h", 0b111>;
-def PMULHRU_H : RVPBinary1LongFW<0b0010, 0b10, "pmulhru.h", 0b111>;
-def PMHACCU_H : RVPBinary1LongFW<0b0011, 0b00, "pmhaccu.h", 0b111>;
-def PMHRACCU_H : RVPBinary1LongFW<0b0011, 0b10, "pmhraccu.h", 0b111>;
-
-def PMULH_H_BE : RVPBinary1LongFW<0b0100, 0b00, "pmulh.h.be", 0b111>;
-def PMULHSU_H_BE : RVPBinary1LongFW<0b0100, 0b10, "pmulhsu.h.be", 0b111>;
-def PMHACCU_H_BE : RVPBinary1LongFW<0b0101, 0b00, "pmhaccu.h.be", 0b111>;
-def PMHACCSU_H_BE : RVPBinary1LongFW<0b0101, 0b10, "pmhaccsu.h.be", 0b111>;
-def PMULH_H_BO : RVPBinary1LongFW<0b0110, 0b00, "pmulh.h.bo", 0b111>;
-def PMULHSU_H_BO : RVPBinary1LongFW<0b0110, 0b10, "pmulhsu.h.bo", 0b111>;
-def PMHACC_H_BO : RVPBinary1LongFW<0b0111, 0b00, "pmhacc.h.bo", 0b111>;
-def PMHACCSU_H_BO : RVPBinary1LongFW<0b0111, 0b10, "pmhaccsu.h.bo", 0b111>;
-
-def PMULHSU_H : RVPBinary1LongFW<0b1000, 0b00, "pmulhsu.h", 0b111>;
-def PMULHRSU_H : RVPBinary1LongFW<0b1000, 0b10, "pmulhrsu.h", 0b111>;
-def PMHACCSU_H : RVPBinary1LongFW<0b1001, 0b00, "pmhaccsu.h", 0b111>;
-def PMHRACCSU_H : RVPBinary1LongFW<0b1001, 0b10, "pmhraccsu.h", 0b111>;
-def PMULQ_H : RVPBinary1LongFW<0b1010, 0b00, "pmulq.h", 0b111>;
-def PMULQR_H : RVPBinary1LongFW<0b1010, 0b10, "pmulqr.h", 0b111>;
+def PMULH_H : RVPBinary1LongFW<0b0000, 0b00, 0b111, "pmulh.h">;
+def PMULHR_H : RVPBinary1LongFW<0b0000, 0b10, 0b111, "pmulhr.h">;
+def PMHACC_H : RVPBinary1LongFW<0b0001, 0b00, 0b111, "pmhacc.h">;
+def PMHRACC_H : RVPBinary1LongFW<0b0001, 0b10, 0b111, "pmhracc.h">;
+def PMULHU_H : RVPBinary1LongFW<0b0010, 0b00, 0b111, "pmulhu.h">;
+def PMULHRU_H : RVPBinary1LongFW<0b0010, 0b10, 0b111, "pmulhru.h">;
+def PMHACCU_H : RVPBinary1LongFW<0b0011, 0b00, 0b111, "pmhaccu.h">;
+def PMHRACCU_H : RVPBinary1LongFW<0b0011, 0b10, 0b111, "pmhraccu.h">;
+
+def PMULH_H_BE : RVPBinary1LongFW<0b0100, 0b00, 0b111, "pmulh.h.be">;
+def PMULHSU_H_BE : RVPBinary1LongFW<0b0100, 0b10, 0b111, "pmulhsu.h.be">;
+def PMHACCU_H_BE : RVPBinary1LongFW<0b0101, 0b00, 0b111, "pmhaccu.h.be">;
+def PMHACCSU_H_BE: RVPBinary1LongFW<0b0101, 0b10, 0b111, "pmhaccsu.h.be">;
+def PMULH_H_BO : RVPBinary1LongFW<0b0110, 0b00, 0b111, "pmulh.h.bo">;
+def PMULHSU_H_BO : RVPBinary1LongFW<0b0110, 0b10, 0b111, "pmulhsu.h.bo">;
+def PMHACC_H_BO : RVPBinary1LongFW<0b0111, 0b00, 0b111, "pmhacc.h.bo">;
+def PMHACCSU_H_BO: RVPBinary1LongFW<0b0111, 0b10, 0b111, "pmhaccsu.h.bo">;
+
+def PMULHSU_H : RVPBinary1LongFW<0b1000, 0b00, 0b111, "pmulhsu.h">;
+def PMULHRSU_H : RVPBinary1LongFW<0b1000, 0b10, 0b111, "pmulhrsu.h">;
+def PMHACCSU_H : RVPBinary1LongFW<0b1001, 0b00, 0b111, "pmhaccsu.h">;
+def PMHRACCSU_H : RVPBinary1LongFW<0b1001, 0b10, 0b111, "pmhraccsu.h">;
+def PMULQ_H : RVPBinary1LongFW<0b1010, 0b00, 0b111, "pmulq.h">;
+def PMULQR_H : RVPBinary1LongFW<0b1010, 0b10, 0b111, "pmulqr.h">;
} // Predicates = [HasStdExtP]
let DecoderNamespace = "RISCV32Only_",
Predicates = [HasStdExtP, IsRV32] in {
-def MULHR : RVPBinary1LongFW<0b0000, 0b11, "mulhr", 0b111>;
-def MHACC : RVPBinary1LongFW<0b0001, 0b01, "mhacc", 0b111>;
-def MHRACC : RVPBinary1LongFW<0b0001, 0b11, "mhracc", 0b111>;
-def MULHRU : RVPBinary1LongFW<0b0010, 0b11, "mulhru", 0b111>;
-def MHACCU : RVPBinary1LongFW<0b0011, 0b01, "mhaccu", 0b111>;
-def MHRACCU : RVPBinary1LongFW<0b0011, 0b11, "mhraccu", 0b111>;
-
-def MULH_H0 : RVPBinary1LongFW<0b0100, 0b01, "mulh.h0", 0b111>;
-def MULHSU_H0 : RVPBinary1LongFW<0b0100, 0b11, "mulhsu.h0", 0b111>;
-def MHACC_H0 : RVPBinary1LongFW<0b0101, 0b01, "mhacc.h0", 0b111>;
-def MHACCSU_H0 : RVPBinary1LongFW<0b0101, 0b11, "mhaccsu.h0", 0b111>;
-def MULH_H1 : RVPBinary1LongFW<0b0110, 0b01, "mulh.h1", 0b111>;
-def MULHSU_H1 : RVPBinary1LongFW<0b0110, 0b11, "mulhsu.h1", 0b111>;
-def MHACC_H1 : RVPBinary1LongFW<0b0111, 0b01, "mhacc.h1", 0b111>;
-def MHACCSU_H1 : RVPBinary1LongFW<0b0111, 0b11, "mhaccsu.h1", 0b111>;
-
-def MULHRSU_H : RVPBinary1LongFW<0b1000, 0b11, "mulhrsu.h", 0b111>;
-def MHACCSU : RVPBinary1LongFW<0b1001, 0b01, "mhaccsu", 0b111>;
-def MHRACCSU : RVPBinary1LongFW<0b1001, 0b11, "mhraccsu", 0b111>;
-def MULQ : RVPBinary1LongFW<0b1010, 0b01, "mulq", 0b111>;
-def MULQR : RVPBinary1LongFW<0b1010, 0b11, "mulqr", 0b111>;
-
-def MQACC_H00 : RVPBinary1LongFW<0b1101, 0b00, "mqacc.h00", 0b111>;
-def MQRACC_H00 : RVPBinary1LongFW<0b1101, 0b10, "mqracc.h00", 0b111>;
-def MQACC_H11 : RVPBinary1LongFW<0b1111, 0b00, "mqacc.h11", 0b111>;
-def MQRACC_H11 : RVPBinary1LongFW<0b1111, 0b10, "mqracc.h11", 0b111>;
+def MULHR : RVPBinary1LongFW<0b0000, 0b11, 0b111, "mulhr">;
+def MHACC : RVPBinary1LongFW<0b0001, 0b01, 0b111, "mhacc">;
+def MHRACC : RVPBinary1LongFW<0b0001, 0b11, 0b111, "mhracc">;
+def MULHRU : RVPBinary1LongFW<0b0010, 0b11, 0b111, "mulhru">;
+def MHACCU : RVPBinary1LongFW<0b0011, 0b01, 0b111, "mhaccu">;
+def MHRACCU : RVPBinary1LongFW<0b0011, 0b11, 0b111, "mhraccu">;
+
+def MULH_H0 : RVPBinary1LongFW<0b0100, 0b01, 0b111, "mulh.h0">;
+def MULHSU_H0 : RVPBinary1LongFW<0b0100, 0b11, 0b111, "mulhsu.h0">;
+def MHACC_H0 : RVPBinary1LongFW<0b0101, 0b01, 0b111, "mhacc.h0">;
+def MHACCSU_H0 : RVPBinary1LongFW<0b0101, 0b11, 0b111, "mhaccsu.h0">;
+def MULH_H1 : RVPBinary1LongFW<0b0110, 0b01, 0b111, "mulh.h1">;
+def MULHSU_H1 : RVPBinary1LongFW<0b0110, 0b11, 0b111, "mulhsu.h1">;
+def MHACC_H1 : RVPBinary1LongFW<0b0111, 0b01, 0b111, "mhacc.h1">;
+def MHACCSU_H1 : RVPBinary1LongFW<0b0111, 0b11, 0b111, "mhaccsu.h1">;
+
+def MULHRSU_H : RVPBinary1LongFW<0b1000, 0b11, 0b111, "mulhrsu.h">;
+def MHACCSU : RVPBinary1LongFW<0b1001, 0b01, 0b111, "mhaccsu">;
+def MHRACCSU : RVPBinary1LongFW<0b1001, 0b11, 0b111, "mhraccsu">;
+def MULQ : RVPBinary1LongFW<0b1010, 0b01, 0b111, "mulq">;
+def MULQR : RVPBinary1LongFW<0b1010, 0b11, 0b111, "mulqr">;
+
+def MQACC_H00 : RVPBinary1LongFW<0b1101, 0b00, 0b111, "mqacc.h00">;
+def MQRACC_H00 : RVPBinary1LongFW<0b1101, 0b10, 0b111, "mqracc.h00">;
+def MQACC_H11 : RVPBinary1LongFW<0b1111, 0b00, 0b111, "mqacc.h11">;
+def MQRACC_H11 : RVPBinary1LongFW<0b1111, 0b10, 0b111, "mqracc.h11">;
} // Predicates = [HasStdExtP, IsRV32]
let Predicates = [HasStdExtP, IsRV64] in {
-def PMULH_W : RVPBinary1LongFW<0b0000, 0b01, "pmulh.w", 0b111>;
-def PMULHR_W : RVPBinary1LongFW<0b0000, 0b11, "pmulhr.w", 0b111>;
-def PMHACC_W : RVPBinary1LongFW<0b0001, 0b01, "pmhacc.w", 0b111>;
-def PMHRACC_W : RVPBinary1LongFW<0b0001, 0b11, "pmhracc.w", 0b111>;
-def PMULHU_W : RVPBinary1LongFW<0b0010, 0b01, "pmulhu.w", 0b111>;
-def PMULHRU_W : RVPBinary1LongFW<0b0010, 0b11, "pmulhru.w", 0b111>;
-def PMHACCU_W : RVPBinary1LongFW<0b0011, 0b01, "pmhaccu.w", 0b111>;
-def PMHRACCU_W : RVPBinary1LongFW<0b0011, 0b11, "pmhraccu.w", 0b111>;
-
-def PMULH_W_HE : RVPBinary1LongFW<0b0100, 0b01, "pmulh.w.he", 0b111>;
-def PMULHSU_W_HE : RVPBinary1LongFW<0b0100, 0b11, "pmulhsu.w.he", 0b111>;
-def PMHACC_W_HE : RVPBinary1LongFW<0b0101, 0b01, "pmhacc.w.he", 0b111>;
-def PMHACCSU_W_HE : RVPBinary1LongFW<0b0101, 0b11, "pmhaccsu.w.he", 0b111>;
-def PMULH_W_HO : RVPBinary1LongFW<0b0110, 0b01, "pmulh.w.ho", 0b111>;
-def PMULHSU_W_HO : RVPBinary1LongFW<0b0110, 0b11, "pmulhsu.w.ho", 0b111>;
-def PMHACC_W_HO : RVPBinary1LongFW<0b0111, 0b01, "pmhacc.w.ho", 0b111>;
-def PMHACCSU_W_HO : RVPBinary1LongFW<0b0111, 0b11, "pmhaccsu.w.ho", 0b111>;
-
-def PMULHSU_W : RVPBinary1LongFW<0b1000, 0b01, "pmulhsu.w", 0b111>;
-def PMULHRSU_W : RVPBinary1LongFW<0b1000, 0b11, "pmulhrsu.w", 0b111>;
-def PMHACCSU_W : RVPBinary1LongFW<0b1001, 0b01, "pmhaccsu.w", 0b111>;
-def PMHRACCSU_W : RVPBinary1LongFW<0b1001, 0b11, "pmhraccsu.w", 0b111>;
-def PMULQ_W : RVPBinary1LongFW<0b1010, 0b01, "pmulq.w", 0b111>;
-def PMULQR_W : RVPBinary1LongFW<0b1010, 0b11, "pmulqr.w", 0b111>;
-
-def PMQACC_W_HEE : RVPBinary1LongFW<0b1101, 0b00, "pmqacc.w.hee", 0b111>;
-def MQACC_W00 : RVPBinary1LongFW<0b1101, 0b01, "mqacc.w00", 0b111>;
-def PMQRACC_W_HEE : RVPBinary1LongFW<0b1101, 0b10, "pmqracc.w.hee", 0b111>;
-def MQRACC_W00 : RVPBinary1LongFW<0b1101, 0b11, "mqracc.w00", 0b111>;
-def PMQACC_W_HOO : RVPBinary1LongFW<0b1111, 0b00, "pmqacc.w.hoo", 0b111>;
-def MQACC_W11 : RVPBinary1LongFW<0b1111, 0b01, "mqacc.w11", 0b111>;
-def PMQRACC_W_HOO : RVPBinary1LongFW<0b1111, 0b10, "pmqracc.w.hoo", 0b111>;
-def MQRACC_W11 : RVPBinary1LongFW<0b1111, 0b11, "mqracc.w11", 0b111>;
+def PMULH_W : RVPBinary1LongFW<0b0000, 0b01, 0b111, "pmulh.w">;
+def PMULHR_W : RVPBinary1LongFW<0b0000, 0b11, 0b111, "pmulhr.w">;
+def PMHACC_W : RVPBinary1LongFW<0b0001, 0b01, 0b111, "pmhacc.w">;
+def PMHRACC_W : RVPBinary1LongFW<0b0001, 0b11, 0b111, "pmhracc.w">;
+def PMULHU_W : RVPBinary1LongFW<0b0010, 0b01, 0b111, "pmulhu.w">;
+def PMULHRU_W : RVPBinary1LongFW<0b0010, 0b11, 0b111, "pmulhru.w">;
+def PMHACCU_W : RVPBinary1LongFW<0b0011, 0b01, 0b111, "pmhaccu.w">;
+def PMHRACCU_W : RVPBinary1LongFW<0b0011, 0b11, 0b111, "pmhraccu.w">;
+
+def PMULH_W_HE : RVPBinary1LongFW<0b0100, 0b01, 0b111, "pmulh.w.he">;
+def PMULHSU_W_HE : RVPBinary1LongFW<0b0100, 0b11, 0b111, "pmulhsu.w.he">;
+def PMHACC_W_HE : RVPBinary1LongFW<0b0101, 0b01, 0b111, "pmhacc.w.he">;
+def PMHACCSU_W_HE: RVPBinary1LongFW<0b0101, 0b11, 0b111, "pmhaccsu.w.he">;
+def PMULH_W_HO : RVPBinary1LongFW<0b0110, 0b01, 0b111, "pmulh.w.ho">;
+def PMULHSU_W_HO : RVPBinary1LongFW<0b0110, 0b11, 0b111, "pmulhsu.w.ho">;
+def PMHACC_W_HO : RVPBinary1LongFW<0b0111, 0b01, 0b111, "pmhacc.w.ho">;
+def PMHACCSU_W_HO: RVPBinary1LongFW<0b0111, 0b11, 0b111, "pmhaccsu.w.ho">;
+
+def PMULHSU_W : RVPBinary1LongFW<0b1000, 0b01, 0b111, "pmulhsu.w">;
+def PMULHRSU_W : RVPBinary1LongFW<0b1000, 0b11, 0b111, "pmulhrsu.w">;
+def PMHACCSU_W : RVPBinary1LongFW<0b1001, 0b01, 0b111, "pmhaccsu.w">;
+def PMHRACCSU_W : RVPBinary1LongFW<0b1001, 0b11, 0b111, "pmhraccsu.w">;
+def PMULQ_W : RVPBinary1LongFW<0b1010, 0b01, 0b111, "pmulq.w">;
+def PMULQR_W : RVPBinary1LongFW<0b1010, 0b11, 0b111, "pmulqr.w">;
+
+def PMQACC_W_HEE : RVPBinary1LongFW<0b1101, 0b00, 0b111, "pmqacc.w.hee">;
+def MQACC_W00 : RVPBinary1LongFW<0b1101, 0b01, 0b111, "mqacc.w00">;
+def PMQRACC_W_HEE: RVPBinary1LongFW<0b1101, 0b10, 0b111, "pmqracc.w.hee">;
+def MQRACC_W00 : RVPBinary1LongFW<0b1101, 0b11, 0b111, "mqracc.w00">;
+def PMQACC_W_HOO : RVPBinary1LongFW<0b1111, 0b00, 0b111, "pmqacc.w.hoo">;
+def MQACC_W11 : RVPBinary1LongFW<0b1111, 0b01, 0b111, "mqacc.w11">;
+def PMQRACC_W_HOO: RVPBinary1LongFW<0b1111, 0b10, 0b111, "pmqracc.w.hoo">;
+def MQRACC_W11 : RVPBinary1LongFW<0b1111, 0b11, 0b111, "mqracc.w11">;
} // Predicates = [HasStdExtP, IsRV64]
@@ -813,9 +809,9 @@ def PWSLAI_B : RVPUnary0F0Rdp<0b100, 0b0010000, "pwslai.b">;
def PWSLAI_H : RVPUnary0F0Rdp<0b100, 0b0100000, "pwslai.h">;
def WSLAI : RVPUnary0F0Rdp<0b100, 0b1000000, "wslai">;
-def PLI_DH : RVPUnaryImm9<0b0011000, OPC_OP_IMM_32, "pli.dh", GPRPairRV32>;
-def PLI_DB : RVPUnaryImm8<0b00110100, OPC_OP_IMM_32, "pli.db", GPRPairRV32>;
-def PLUI_DH : RVPUnaryImm9<0b0111000, OPC_OP_IMM_32, "plui.dh", GPRPairRV32>;
+def PLI_DH : RVPUnaryImm9<0b0011000, "pli.dh", GPRPairRV32>;
+def PLI_DB : RVPUnaryImm8<0b00110100, "pli.db", GPRPairRV32>;
+def PLUI_DH : RVPUnaryImm9<0b0111000, "plui.dh", GPRPairRV32>;
def PWSLLI_B_B0 : RVPBinary0F1WRdp<0b000, 0b00, "pwslli.b.b0">;
@@ -828,22 +824,22 @@ def WSLA : RVPBinary0F1WRdp<0b100, 0b11, "wsla">;
def WZIP8P : RVPBinary0F1WRdp<0b111, 0b00, "wzip8p">;
def WZIP16P : RVPBinary0F1WRdp<0b111, 0b01, "wzip16p">;
-def PWADD_H : RVPBinary0LongFW<0b0000, 0b00, "pwadd.h">;
-def WADD : RVPBinary0LongFW<0b0000, 0b01, "wadd">;
-def PWADD_B : RVPBinary0LongFW<0b0000, 0b10, "pwadd.b">;
-def PW2WADD_H : RVPBinary0LongFW<0b0000, 0b11, "pw2wadd.h">;
-def PWADDA_H : RVPBinary0LongFW<0b0001, 0b00, "pwadda.h">;
-def WADDA : RVPBinary0LongFW<0b0001, 0b01, "wadda">;
-def PWADDA_B : RVPBinary0LongFW<0b0001, 0b10, "pwadda.b">;
-def PW2WADDA_H : RVPBinary0LongFW<0b0001, 0b11, "pw2wadda.h">;
-def PWADDU_H : RVPBinary0LongFW<0b0010, 0b00, "pwaddu.h">;
-def WADDU : RVPBinary0LongFW<0b0010, 0b01, "waddu">;
-def PWADDU_B : RVPBinary0LongFW<0b0010, 0b10, "pwaddu.b">;
-def PW2WADD_HX : RVPBinary0LongFW<0b0010, 0b11, "pw2wadd.hx">;
-def PWADDAU_H : RVPBinary0LongFW<0b0011, 0b00, "pwaddau.h">;
-def WADDAU : RVPBinary0LongFW<0b0011, 0b01, "waddau">;
-def PWADDAU_B : RVPBinary0LongFW<0b0011, 0b10, "pwaddau.b">;
-def PW2WADDA_HX: RVPBinary0LongFW<0b0011, 0b11, "pw2wadda.hx">;
+def PWADD_H : RVPBinary0LongFW<0b0000, 0b00, "pwadd.h">;
+def WADD : RVPBinary0LongFW<0b0000, 0b01, "wadd">;
+def PWADD_B : RVPBinary0LongFW<0b0000, 0b10, "pwadd.b">;
+def PW2WADD_H : RVPBinary0LongFW<0b0000, 0b11, "pw2wadd.h">;
+def PWADDA_H : RVPBinary0LongFW<0b0001, 0b00, "pwadda.h">;
+def WADDA : RVPBinary0LongFW<0b0001, 0b01, "wadda">;
+def PWADDA_B : RVPBinary0LongFW<0b0001, 0b10, "pwadda.b">;
+def PW2WADDA_H : RVPBinary0LongFW<0b0001, 0b11, "pw2wadda.h">;
+def PWADDU_H : RVPBinary0LongFW<0b0010, 0b00, "pwaddu.h">;
+def WADDU : RVPBinary0LongFW<0b0010, 0b01, "waddu">;
+def PWADDU_B : RVPBinary0LongFW<0b0010, 0b10, "pwaddu.b">;
+def PW2WADD_HX : RVPBinary0LongFW<0b0010, 0b11, "pw2wadd.hx">;
+def PWADDAU_H : RVPBinary0LongFW<0b0011, 0b00, "pwaddau.h">;
+def WADDAU : RVPBinary0LongFW<0b0011, 0b01, "waddau">;
+def PWADDAU_B : RVPBinary0LongFW<0b0011, 0b10, "pwaddau.b">;
+def PW2WADDA_HX : RVPBinary0LongFW<0b0011, 0b11, "pw2wadda.hx">;
def PWMUL_H : RVPBinary0LongFW<0b0100, 0b00, "pwmul.h">;
def WMUL : RVPBinary0LongFW<0b0100, 0b01, "wmul">;
@@ -858,22 +854,22 @@ def PWMULU_B : RVPBinary0LongFW<0b0110, 0b10, "pwmulu.b">;
def PWMACCU_H : RVPBinary0LongFW<0b0111, 0b00, "pwmaccu.h">;
def WMACCU : RVPBinary0LongFW<0b0111, 0b01, "wmaccu">;
-def PWSUB_H : RVPBinary0LongFW<0b1000, 0b00, "pwsub.h">;
-def WSUB : RVPBinary0LongFW<0b1000, 0b01, "wsub">;
-def PWSUB_B : RVPBinary0LongFW<0b1000, 0b10, "pwsub.b">;
-def PW2WSUB_H : RVPBinary0LongFW<0b1000, 0b11, "pw2wsub.h">;
-def PWSUBA_H : RVPBinary0LongFW<0b1001, 0b00, "pwsuba.h">;
-def WSUBA : RVPBinary0LongFW<0b1001, 0b01, "wsuba">;
-def PWSUBA_B : RVPBinary0LongFW<0b1001, 0b10, "pwsuba.b">;
-def PW2WSUBA_H : RVPBinary0LongFW<0b1001, 0b11, "pw2wsuba.h">;
-def PWSUBU_H : RVPBinary0LongFW<0b1010, 0b00, "pwsubu.h">;
-def WSUBU : RVPBinary0LongFW<0b1010, 0b01, "wsubu">;
-def PWSUBU_B : RVPBinary0LongFW<0b1010, 0b10, "pwsubu.b">;
-def PW2WSUB_HX : RVPBinary0LongFW<0b1010, 0b11, "pw2wsub.hx">;
-def PWSUBAU_H : RVPBinary0LongFW<0b1011, 0b00, "pwsubau.h">;
-def WSUBAU : RVPBinary0LongFW<0b1011, 0b01, "wsubau">;
-def PWSUBAU_B : RVPBinary0LongFW<0b1011, 0b10, "pwsubau.b">;
-def PW2WSUBA_HX: RVPBinary0LongFW<0b1011, 0b11, "pw2wsuba.hx">;
+def PWSUB_H : RVPBinary0LongFW<0b1000, 0b00, "pwsub.h">;
+def WSUB : RVPBinary0LongFW<0b1000, 0b01, "wsub">;
+def PWSUB_B : RVPBinary0LongFW<0b1000, 0b10, "pwsub.b">;
+def PW2WSUB_H : RVPBinary0LongFW<0b1000, 0b11, "pw2wsub.h">;
+def PWSUBA_H : RVPBinary0LongFW<0b1001, 0b00, "pwsuba.h">;
+def WSUBA : RVPBinary0LongFW<0b1001, 0b01, "wsuba">;
+def PWSUBA_B : RVPBinary0LongFW<0b1001, 0b10, "pwsuba.b">;
+def PW2WSUBA_H : RVPBinary0LongFW<0b1001, 0b11, "pw2wsuba.h">;
+def PWSUBU_H : RVPBinary0LongFW<0b1010, 0b00, "pwsubu.h">;
+def WSUBU : RVPBinary0LongFW<0b1010, 0b01, "wsubu">;
+def PWSUBU_B : RVPBinary0LongFW<0b1010, 0b10, "pwsubu.b">;
+def PW2WSUB_HX : RVPBinary0LongFW<0b1010, 0b11, "pw2wsub.hx">;
+def PWSUBAU_H : RVPBinary0LongFW<0b1011, 0b00, "pwsubau.h">;
+def WSUBAU : RVPBinary0LongFW<0b1011, 0b01, "wsubau">;
+def PWSUBAU_B : RVPBinary0LongFW<0b1011, 0b10, "pwsubau.b">;
+def PW2WSUBA_HX : RVPBinary0LongFW<0b1011, 0b11, "pw2wsuba.hx">;
def PWMULSU_H : RVPBinary0LongFW<0b1100, 0b00, "pwmulsu.h">;
def WMULSU : RVPBinary0LongFW<0b1100, 0b01, "wmulsu">;
@@ -915,28 +911,28 @@ def PNCLIPRI_B : RVPUnary0F0Rs1p<0b111, 0b0010000, "pnclipri.b">;
def PNCLIPRI_H : RVPUnary0F0Rs1p<0b111, 0b0100000, "pnclipri.h">;
def NCLIPRI : RVPUnary0F0Rs1p<0b111, 0b1000000, "nclipri">;
-def PNSRL_B_B0 : RVPBinary0F1WRs1p<0b000, 0b00, "pnsrl.b.b0", 0b1>;
-def PNSRL_H_H0 : RVPBinary0F1WRs1p<0b000, 0b01, "pnsrl.h.h0", 0b1>;
-def NSRL : RVPBinary0F1WRs1p<0b000, 0b11, "nsrl", 0b1>;
-def PNCLIPU_B_B0 : RVPBinary0F1WRs1p<0b010, 0b00, "pnclipu.b.b0", 0b1>;
-def PNCLIPU_H_H0 : RVPBinary0F1WRs1p<0b010, 0b01, "pnclipu.h.h0", 0b1>;
-def NCLIPU : RVPBinary0F1WRs1p<0b010, 0b11, "nclipu", 0b1>;
+def PNSRL_B_B0 : RVPBinary0F1WRs1p<0b000, 0b00, "pnsrl.b.b0", 0b1>;
+def PNSRL_H_H0 : RVPBinary0F1WRs1p<0b000, 0b01, "pnsrl.h.h0", 0b1>;
+def NSRL : RVPBinary0F1WRs1p<0b000, 0b11, "nsrl", 0b1>;
+def PNCLIPU_B_B0 : RVPBinary0F1WRs1p<0b010, 0b00, "pnclipu.b.b0", 0b1>;
+def PNCLIPU_H_H0 : RVPBinary0F1WRs1p<0b010, 0b01, "pnclipu.h.h0", 0b1>;
+def NCLIPU : RVPBinary0F1WRs1p<0b010, 0b11, "nclipu", 0b1>;
def PNCLIPRU_B_B0 : RVPBinary0F1WRs1p<0b011, 0b00, "pnclipru.b.b0", 0b1>;
def PNCLIPRU_H_H0 : RVPBinary0F1WRs1p<0b011, 0b01, "pnclipru.h.h0", 0b1>;
-def NCLIPRU : RVPBinary0F1WRs1p<0b011, 0b11, "nclipru", 0b1>;
-
-def PNSRA_B_B0 : RVPBinary0F1WRs1p<0b100, 0b00, "pnsra.b.b0", 0b1>;
-def PNSRA_H_H0 : RVPBinary0F1WRs1p<0b100, 0b01, "pnsra.h.h0", 0b1>;
-def NSRA : RVPBinary0F1WRs1p<0b100, 0b11, "nsra", 0b1>;
-def PNSRAR_B_B0 : RVPBinary0F1WRs1p<0b101, 0b00, "pnsrar.b.b0", 0b1>;
-def PNSRAR_H_H0 : RVPBinary0F1WRs1p<0b101, 0b01, "pnsrar.h.h0", 0b1>;
-def NSRAR : RVPBinary0F1WRs1p<0b101, 0b11, "nsrar", 0b1>;
-def PNCLIP_B_B0 : RVPBinary0F1WRs1p<0b110, 0b00, "pnclip.b.b0", 0b1>;
-def PNCLIP_H_H0 : RVPBinary0F1WRs1p<0b110, 0b01, "pnclip.h.h0", 0b1>;
-def NCLIP : RVPBinary0F1WRs1p<0b110, 0b11, "nclip", 0b1>;
+def NCLIPRU : RVPBinary0F1WRs1p<0b011, 0b11, "nclipru", 0b1>;
+
+def PNSRA_B_B0 : RVPBinary0F1WRs1p<0b100, 0b00, "pnsra.b.b0", 0b1>;
+def PNSRA_H_H0 : RVPBinary0F1WRs1p<0b100, 0b01, "pnsra.h.h0", 0b1>;
+def NSRA : RVPBinary0F1WRs1p<0b100, 0b11, "nsra", 0b1>;
+def PNSRAR_B_B0 : RVPBinary0F1WRs1p<0b101, 0b00, "pnsrar.b.b0", 0b1>;
+def PNSRAR_H_H0 : RVPBinary0F1WRs1p<0b101, 0b01, "pnsrar.h.h0", 0b1>;
+def NSRAR : RVPBinary0F1WRs1p<0b101, 0b11, "nsrar", 0b1>;
+def PNCLIP_B_B0 : RVPBinary0F1WRs1p<0b110, 0b00, "pnclip.b.b0", 0b1>;
+def PNCLIP_H_H0 : RVPBinary0F1WRs1p<0b110, 0b01, "pnclip.h.h0", 0b1>;
+def NCLIP : RVPBinary0F1WRs1p<0b110, 0b11, "nclip", 0b1>;
def PNCLIPR_B_B0 : RVPBinary0F1WRs1p<0b111, 0b00, "pnclipr.b.b0", 0b1>;
def PNCLIPR_H_H0 : RVPBinary0F1WRs1p<0b111, 0b01, "pnclipr.h.h0", 0b1>;
-def NCLIPR : RVPBinary0F1WRs1p<0b111, 0b11, "nclipr", 0b1>;
+def NCLIPR : RVPBinary0F1WRs1p<0b111, 0b11, "nclipr", 0b1>;
def PSLLI_DB : RVPUnary0F0Rs1pRdp<0b000, 0b0001000, "pslli.db">;
@@ -964,27 +960,27 @@ def PSSHA_DW_W : RVPBinary0F1WRs1pRdp<0b110, 0b01, "pssha.dw.w">;
def PSSHAR_DH_H0 : RVPBinary0F1WRs1pRdp<0b111, 0b00, "psshar.dh.h0">;
def PSSHAR_DW_W : RVPBinary0F1WRs1pRdp<0b111, 0b01, "psshar.dw.w">;
-def PSRLI_DB : RVPUnary0F0Rs1pRdp<0b000, 0b0001000, "psrli.db", 0b1>;
-def PSRLI_DH : RVPUnary0F0Rs1pRdp<0b000, 0b0010000, "psrli.dh", 0b1>;
-def PSRLI_DW : RVPUnary0F0Rs1pRdp<0b000, 0b0100000, "psrli.dw", 0b1>;
+def PSRLI_DB : RVPUnary0F0Rs1pRdp<0b000, 0b0001000, "psrli.db", 0b1>;
+def PSRLI_DH : RVPUnary0F0Rs1pRdp<0b000, 0b0010000, "psrli.dh", 0b1>;
+def PSRLI_DW : RVPUnary0F0Rs1pRdp<0b000, 0b0100000, "psrli.dw", 0b1>;
def PUSATI_DH : RVPUnary0F0Rs1pRdp<0b010, 0b0010000, "pusati.dh", 0b1>;
def PUSATI_DW : RVPUnary0F0Rs1pRdp<0b010, 0b0100000, "pusati.dw", 0b1>;
-def PSRAI_DB : RVPUnary0F0Rs1pRdp<0b100, 0b0001000, "psrai.db", 0b1>;
-def PSRAI_DH : RVPUnary0F0Rs1pRdp<0b100, 0b0010000, "psrai.dh", 0b1>;
-def PSRAI_DW : RVPUnary0F0Rs1pRdp<0b100, 0b0100000, "psrai.dw", 0b1>;
+def PSRAI_DB : RVPUnary0F0Rs1pRdp<0b100, 0b0001000, "psrai.db", 0b1>;
+def PSRAI_DH : RVPUnary0F0Rs1pRdp<0b100, 0b0010000, "psrai.dh", 0b1>;
+def PSRAI_DW : RVPUnary0F0Rs1pRdp<0b100, 0b0100000, "psrai.dw", 0b1>;
def PSRARI_DH : RVPUnary0F0Rs1pRdp<0b101, 0b0010000, "psrari.dh", 0b1>;
def PSRARI_DW : RVPUnary0F0Rs1pRdp<0b101, 0b0100000, "psrari.dw", 0b1>;
-def PSATI_DH : RVPUnary0F0Rs1pRdp<0b110, 0b0010000, "psati.dh", 0b1>;
-def PSATI_DW : RVPUnary0F0Rs1pRdp<0b110, 0b0100000, "psati.dw", 0b1>;
+def PSATI_DH : RVPUnary0F0Rs1pRdp<0b110, 0b0010000, "psati.dh", 0b1>;
+def PSATI_DW : RVPUnary0F0Rs1pRdp<0b110, 0b0100000, "psati.dw", 0b1>;
-def PSRL_DH_H0 :RVPBinary0F1WRs1pRdp<0b000, 0b00, "psrl.dh.h0", 0b1>;
-def PSRL_DW_W :RVPBinary0F1WRs1pRdp<0b000, 0b01, "psrl.dw.w", 0b1>;
-def PSRL_DB_B0 :RVPBinary0F1WRs1pRdp<0b000, 0b10, "psrl.db.b0", 0b1>;
+def PSRL_DH_H0 : RVPBinary0F1WRs1pRdp<0b000, 0b00, "psrl.dh.h0", 0b1>;
+def PSRL_DW_W : RVPBinary0F1WRs1pRdp<0b000, 0b01, "psrl.dw.w", 0b1>;
+def PSRL_DB_B0 : RVPBinary0F1WRs1pRdp<0b000, 0b10, "psrl.db.b0", 0b1>;
-def PSRA_DH_H0 :RVPBinary0F1WRs1pRdp<0b100, 0b00, "psra.dh.h0", 0b1>;
-def PSRA_DW_W :RVPBinary0F1WRs1pRdp<0b100, 0b01, "psra.dw.w", 0b1>;
-def PSRA_DB_B0 :RVPBinary0F1WRs1pRdp<0b100, 0b10, "psra.db.b0", 0b1>;
+def PSRA_DH_H0 : RVPBinary0F1WRs1pRdp<0b100, 0b00, "psra.dh.h0", 0b1>;
+def PSRA_DW_W : RVPBinary0F1WRs1pRdp<0b100, 0b01, "psra.dw.w", 0b1>;
+def PSRA_DB_B0 : RVPBinary0F1WRs1pRdp<0b100, 0b10, "psra.db.b0", 0b1>;
def PADD_DH : RVPBinary1FWRs2pRs1pRdp<0b0000, 0b00, "padd.dh">;
def PADD_DW : RVPBinary1FWRs2pRs1pRdp<0b0000, 0b01, "padd.dw">;
@@ -1031,38 +1027,38 @@ def PSH1ADD_DW : RVPBinary1F0WRs2pRs1pRdp<0b010, 0b01, "psh1add.dw">;
def PSSH1SADD_DH : RVPBinary1F0WRs2pRs1pRdp<0b011, 0b00, "pssh1sadd.dh">;
def PSSH1SADD_DW : RVPBinary1F0WRs2pRs1pRdp<0b011, 0b01, "pssh1sadd.dw">;
-def PPACK_DH : RVPBinary1F0WRs2pRs1pRdp<0b000, 0b00, "ppack.dh", 0b0, 0b1>;
-def PPACK_DW : RVPBinary1F0WRs2pRs1pRdp<0b000, 0b01, "ppack.dw", 0b0, 0b1>;
-def PPACKBT_DH : RVPBinary1F0WRs2pRs1pRdp<0b001, 0b00, "ppackbt.dh", 0b0, 0b1>;
-def PPACKBT_DW : RVPBinary1F0WRs2pRs1pRdp<0b001, 0b01, "ppackbt.dw", 0b0, 0b1>;
-def PPACKTB_DH : RVPBinary1F0WRs2pRs1pRdp<0b010, 0b00, "ppacktb.dh", 0b0, 0b1>;
-def PPACKTB_DW : RVPBinary1F0WRs2pRs1pRdp<0b010, 0b01, "ppacktb.dw", 0b0, 0b1>;
-def PPACKT_DH : RVPBinary1F0WRs2pRs1pRdp<0b011, 0b00, "ppackt.dh", 0b0, 0b1>;
-def PPACKT_DW : RVPBinary1F0WRs2pRs1pRdp<0b011, 0b01, "ppackt.dw", 0b0, 0b1>;
-
-def PAS_DHX : RVPBinary1FWRs2pRs1pRdp<0b0000, 0b00, "pas.dhx", 0b1>;
-def PSA_DHX : RVPBinary1FWRs2pRs1pRdp<0b0000, 0b10, "psa.dhx", 0b1>;
+def PPACK_DH : RVPBinary1F0WRs2pRs1pRdp<0b000, 0b00, "ppack.dh", 0b0, 0b1>;
+def PPACK_DW : RVPBinary1F0WRs2pRs1pRdp<0b000, 0b01, "ppack.dw", 0b0, 0b1>;
+def PPACKBT_DH : RVPBinary1F0WRs2pRs1pRdp<0b001, 0b00, "ppackbt.dh", 0b0, 0b1>;
+def PPACKBT_DW : RVPBinary1F0WRs2pRs1pRdp<0b001, 0b01, "ppackbt.dw", 0b0, 0b1>;
+def PPACKTB_DH : RVPBinary1F0WRs2pRs1pRdp<0b010, 0b00, "ppacktb.dh", 0b0, 0b1>;
+def PPACKTB_DW : RVPBinary1F0WRs2pRs1pRdp<0b010, 0b01, "ppacktb.dw", 0b0, 0b1>;
+def PPACKT_DH : RVPBinary1F0WRs2pRs1pRdp<0b011, 0b00, "ppackt.dh", 0b0, 0b1>;
+def PPACKT_DW : RVPBinary1F0WRs2pRs1pRdp<0b011, 0b01, "ppackt.dw", 0b0, 0b1>;
+
+def PAS_DHX : RVPBinary1FWRs2pRs1pRdp<0b0000, 0b00, "pas.dhx", 0b1>;
+def PSA_DHX : RVPBinary1FWRs2pRs1pRdp<0b0000, 0b10, "psa.dhx", 0b1>;
def PSAS_DHX : RVPBinary1FWRs2pRs1pRdp<0b0010, 0b00, "psas.dhx", 0b1>;
def PSSA_DHX : RVPBinary1FWRs2pRs1pRdp<0b0010, 0b10, "pssa.dhx", 0b1>;
def PAAX_DHX : RVPBinary1FWRs2pRs1pRdp<0b0011, 0b00, "paax.dhx", 0b1>;
def PASA_DHX : RVPBinary1FWRs2pRs1pRdp<0b0011, 0b10, "pasa.dhx", 0b1>;
-def PMSEQ_DH : RVPBinary1FWRs2pRs1pRdp<0b1000, 0b00, "pmseq.dh", 0b1>;
-def PMSEQ_DW : RVPBinary1FWRs2pRs1pRdp<0b1000, 0b01, "pmseq.dw", 0b1>;
-def PMSEQ_DB : RVPBinary1FWRs2pRs1pRdp<0b1000, 0b10, "pmseq.db", 0b1>;
-def PMSLT_DH : RVPBinary1FWRs2pRs1pRdp<0b1010, 0b00, "pmslt.dh", 0b1>;
-def PMSLT_DW : RVPBinary1FWRs2pRs1pRdp<0b1010, 0b01, "pmslt.dw", 0b1>;
-def PMSLT_DB : RVPBinary1FWRs2pRs1pRdp<0b1010, 0b10, "pmslt.db", 0b1>;
+def PMSEQ_DH : RVPBinary1FWRs2pRs1pRdp<0b1000, 0b00, "pmseq.dh", 0b1>;
+def PMSEQ_DW : RVPBinary1FWRs2pRs1pRdp<0b1000, 0b01, "pmseq.dw", 0b1>;
+def PMSEQ_DB : RVPBinary1FWRs2pRs1pRdp<0b1000, 0b10, "pmseq.db", 0b1>;
+def PMSLT_DH : RVPBinary1FWRs2pRs1pRdp<0b1010, 0b00, "pmslt.dh", 0b1>;
+def PMSLT_DW : RVPBinary1FWRs2pRs1pRdp<0b1010, 0b01, "pmslt.dw", 0b1>;
+def PMSLT_DB : RVPBinary1FWRs2pRs1pRdp<0b1010, 0b10, "pmslt.db", 0b1>;
def PMSLTU_DH : RVPBinary1FWRs2pRs1pRdp<0b1011, 0b00, "pmsltu.dh", 0b1>;
def PMSLTU_DW : RVPBinary1FWRs2pRs1pRdp<0b1011, 0b01, "pmsltu.dw", 0b1>;
def PMSLTU_DB : RVPBinary1FWRs2pRs1pRdp<0b1011, 0b10, "pmsltu.db", 0b1>;
-def PMIN_DH : RVPBinary1FWRs2pRs1pRdp<0b1100, 0b00, "pmin.dh", 0b1>;
-def PMIN_DB : RVPBinary1FWRs2pRs1pRdp<0b1100, 0b10, "pmin.db", 0b1>;
+def PMIN_DH : RVPBinary1FWRs2pRs1pRdp<0b1100, 0b00, "pmin.dh", 0b1>;
+def PMIN_DB : RVPBinary1FWRs2pRs1pRdp<0b1100, 0b10, "pmin.db", 0b1>;
def PMINU_DH : RVPBinary1FWRs2pRs1pRdp<0b1101, 0b00, "pminu.dh", 0b1>;
def PMINU_DB : RVPBinary1FWRs2pRs1pRdp<0b1101, 0b10, "pminu.db", 0b1>;
-def PMAX_DH : RVPBinary1FWRs2pRs1pRdp<0b1110, 0b00, "pmax.dh", 0b1>;
-def PMAX_DB : RVPBinary1FWRs2pRs1pRdp<0b1110, 0b10, "pmax.db", 0b1>;
+def PMAX_DH : RVPBinary1FWRs2pRs1pRdp<0b1110, 0b00, "pmax.dh", 0b1>;
+def PMAX_DB : RVPBinary1FWRs2pRs1pRdp<0b1110, 0b10, "pmax.db", 0b1>;
def PMAXU_DH : RVPBinary1FWRs2pRs1pRdp<0b1111, 0b00, "pmaxu.dh", 0b1>;
def PMAXU_DB : RVPBinary1FWRs2pRs1pRdp<0b1111, 0b10, "pmaxu.db", 0b1>;
} // Predicates = [HasStdExtP, IsRV32]
diff --git a/llvm/test/CodeGen/RISCV/attributes.ll b/llvm/test/CodeGen/RISCV/attributes.ll
index 3d2afda9d0c714..605fbd2e87488a 100644
--- a/llvm/test/CodeGen/RISCV/attributes.ll
+++ b/llvm/test/CodeGen/RISCV/attributes.ll
@@ -466,7 +466,7 @@
; RV32SUPM: .attribute 5, "rv32i2p1_supm1p0"
; RV32SMCTR: .attribute 5, "rv32i2p1_smctr1p0_sscsrind1p0"
; RV32SSCTR: .attribute 5, "rv32i2p1_sscsrind1p0_ssctr1p0"
-; RV32P: .attribute 5, "rv32i2p1_p1p0"
+; RV32P: .attribute 5, "rv32i2p1_p0p12"
; RV64M: .attribute 5, "rv64i2p1_m2p0_zmmul1p0"
; RV64ZMMUL: .attribute 5, "rv64i2p1_zmmul1p0"
More information about the llvm-commits
mailing list