From patchwork Wed Jul 8 02:47:29 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bohan Lei X-Patchwork-Id: 138706 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 58C554BA2E0A for ; Wed, 8 Jul 2026 02:48:42 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 58C554BA2E0A Authentication-Results: sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=linux.alibaba.com header.i=@linux.alibaba.com header.a=rsa-sha256 header.s=default header.b=hd3br981 X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from out30-133.freemail.mail.aliyun.com (out30-133.freemail.mail.aliyun.com [115.124.30.133]) by sourceware.org (Postfix) with ESMTPS id 2D5AE4BA2E0D for ; Wed, 8 Jul 2026 02:48:03 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 2D5AE4BA2E0D Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=linux.alibaba.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=linux.alibaba.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 2D5AE4BA2E0D Authentication-Results: sourceware.org; arc=none smtp.remote-ip=115.124.30.133 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1783478885; cv=none; b=j4VVspBA9dpa85j4T8DUkcXzL3Q0NqstgPZr71BmVq1L6lSech8NHwLkQPbbaZ9StwpPSTgKn8RIC2wc1HMi4sHNaeGvkVbqkb7YmAHSQ5nqbs6qLkUApZmgxyyVcCQlgorY1ZqkpKsy3WmC2JygPCPcfuioOPE2i7XtPz+Da8I= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1783478885; c=relaxed/simple; bh=YoGtHtcd/93+KJRBDDRych0wTtSUg3eibw9/KCp1zd8=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=kUjSICc+RUqsHEZvNW58K+8CVWu4C0lEf+bH45Qg52chuHPDxmiaG8tXmDpkAcX3ASpgBAqJDc5YAcztlUSOcJ1fisXgyv150AND2d7v60m4IRUkKZnVshD4hruvZPRGH5nCCxsf/t4Ee3LvJHAeOYs3sU01g07lkADeTLwKfaY= ARC-Authentication-Results: i=1; sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=linux.alibaba.com header.i=@linux.alibaba.com header.a=rsa-sha256 header.s=default header.b=hd3br981 DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 2D5AE4BA2E0D DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.alibaba.com; s=default; t=1783478880; h=From:To:Subject:Date:Message-ID:MIME-Version; bh=9VGRHf5ayq9cGSf0N4nBlZw+q0wt4GTAsM5XEDThKoo=; b=hd3br981TtVijImp+0ffMjoMbWZPnQ5fmsU7Z9mhcNQYC7dYN96yVMhANA7eiTF+3OWvt/nZaxKl6sX2O3e8lKVYvsT9VXu8n1k9yeD7axBILv6ZtD1hom8VJeei7k6kkiRQpFDoEvaRNaK8D3h6vxCf0DD4hsq9N6hXSn0NY2k= X-Alimail-AntiSpam: AC=PASS; BC=-1|-1; BR=01201311R191e4; CH=green; DM=||false|; DS=||; FP=0|-1|-1|-1|0|-1|-1|-1; HT=maildocker-contentspam011083073210; MF=garthlei@linux.alibaba.com; NM=1; PH=DS; RN=4; SR=0; TI=SMTPD_---0X6g2iz4_1783478866; Received: from localhost(mailfrom:garthlei@linux.alibaba.com fp:SMTPD_---0X6g2iz4_1783478866 cluster:ay36) by smtp.aliyun-inc.com; Wed, 08 Jul 2026 10:47:57 +0800 From: Bohan Lei To: binutils@sourceware.org Cc: jeffrey.law@oss.qualcomm.com, Bohan Lei , Lifang Xia Subject: [PATCH] RISC-V: Add support for XXTVarith and XXTVcoder extensions Date: Wed, 8 Jul 2026 10:47:29 +0800 Message-ID: <20260708024729.54397-1-garthlei@linux.alibaba.com> X-Mailer: git-send-email 2.50.1 MIME-Version: 1.0 X-Spam-Status: No, score=-27.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, ENV_AND_HDR_SPF_MATCH, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, UNPARSEABLE_RELAY, USER_IN_DEF_DKIM_WL, USER_IN_DEF_SPF_WL shortcircuit=no autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: binutils-bounces~patchwork=sourceware.org@sourceware.org This patch adds support for XuanTie vendor-specific XXTVarith [1] and XXTVcoder [2] extensions. XXTVarith contains arithmetic instructions like vector interleave, Galois-field multiply-xor, and fast CRC folding operations. XXTVcoder contains similar instructions to those in Zvabd. The vendor prefix used in XXTVarith and XXTVcoder is "xt." [3]. [1] https://github.com/XUANTIE-RV/thead-extension-spec/blob/master/xxtvarith.adoc [2] https://github.com/XUANTIE-RV/thead-extension-spec/blob/master/xxtvcoder.adoc [3] https://github.com/riscv-non-isa/riscv-toolchain-conventions/blob/main/src/toolchain-conventions.adoc Co-Authored-By: Lifang Xia bfd/ChangeLog: * elfxx-riscv.c (riscv_multi_subset_supports): Add implication info of XXTVarith and XXTVcoder. (riscv_multi_subset_supports_ext): Add XXTVarith and XXTVcoder. gas/ChangeLog: * testsuite/gas/riscv/x-xt-varith.d: New test. * testsuite/gas/riscv/x-xt-varith.s: New test. * testsuite/gas/riscv/x-xt-vcoder.d: New test. * testsuite/gas/riscv/x-xt-vcoder.s: New test. include/ChangeLog: * opcode/riscv-opc.h (MATCH_XT_VILE_VV): New macro. (MASK_XT_VILE_VV): Ditto. (MATCH_XT_VILO_VV): Ditto. (MASK_XT_VILO_VV): Ditto. (MATCH_XT_VGMULXOR_VV): Ditto. (MASK_XT_VGMULXOR_VV): Ditto. (MATCH_XT_VCRCFOLDR_VV): Ditto. (MASK_XT_VCRCFOLDR_VV): Ditto. (MATCH_XT_VCRCFOLDN_VV): Ditto. (MASK_XT_VCRCFOLDN_VV): Ditto. (MATCH_XT_VABD_VV): Ditto. (MASK_XT_VABD_VV): Ditto. (MATCH_XT_VABD_VX): Ditto. (MASK_XT_VABD_VX): Ditto. (MATCH_XT_VABD_VI): Ditto. (MASK_XT_VABD_VI): Ditto. (MATCH_XT_VABA_VV): Ditto. (MASK_XT_VABA_VV): Ditto. (MATCH_XT_VABA_VX): Ditto. (MASK_XT_VABA_VX): Ditto. (MATCH_XT_VABA_VI): Ditto. (MASK_XT_VABA_VI): Ditto. (MATCH_XT_VABDU_VV): Ditto. (MASK_XT_VABDU_VV): Ditto. (MATCH_XT_VABDU_VX): Ditto. (MASK_XT_VABDU_VX): Ditto. (MATCH_XT_VABDU_VI): Ditto. (MASK_XT_VABDU_VI): Ditto. (MATCH_XT_VABAU_VV): Ditto. (MASK_XT_VABAU_VV): Ditto. (MATCH_XT_VABAU_VX): Ditto. (MASK_XT_VABAU_VX): Ditto. (MATCH_XT_VABAU_VI): Ditto. (MASK_XT_VABAU_VI): Ditto. (MATCH_XT_VWABD_VV): Ditto. (MASK_XT_VWABD_VV): Ditto. (MATCH_XT_VWABD_VX): Ditto. (MASK_XT_VWABD_VX): Ditto. (MATCH_XT_VWABA_VV): Ditto. (MASK_XT_VWABA_VV): Ditto. (MATCH_XT_VWABA_VX): Ditto. (MASK_XT_VWABA_VX): Ditto. (MATCH_XT_VWABAU_VV): Ditto. (MASK_XT_VWABAU_VV): Ditto. (MATCH_XT_VWABAU_VX): Ditto. (MASK_XT_VWABAU_VX): Ditto. (MATCH_XT_VWABDU_VV): Ditto. (MASK_XT_VWABDU_VV): Ditto. (MATCH_XT_VWABDU_VX): Ditto. (MASK_XT_VWABDU_VX): Ditto. (MATCH_XT_VFABD_VV): Ditto. (MASK_XT_VFABD_VV): Ditto. (MATCH_XT_VFABD_VF): Ditto. (MASK_XT_VFABD_VF): Ditto. (MATCH_XT_VABSMAX_VV): Ditto. (MASK_XT_VABSMAX_VV): Ditto. * opcode/riscv.h (enum riscv_insn_class): Add classes for XXTVarith and XXTVcoder. opcodes/ChangeLog: * riscv-opc.c: Add XXTVarith and XXTVcoder instructions. Signed-off-by: Bohan Lei --- bfd/elfxx-riscv.c | 13 ++++++ gas/testsuite/gas/riscv/march-help.l | 2 + gas/testsuite/gas/riscv/x-xt-varith.d | 13 ++++++ gas/testsuite/gas/riscv/x-xt-varith.s | 5 +++ gas/testsuite/gas/riscv/x-xt-vcoder.d | 32 +++++++++++++++ gas/testsuite/gas/riscv/x-xt-vcoder.s | 24 +++++++++++ include/opcode/riscv-opc.h | 58 +++++++++++++++++++++++++++ include/opcode/riscv.h | 2 + opcodes/riscv-opc.c | 32 +++++++++++++++ 9 files changed, 181 insertions(+) create mode 100644 gas/testsuite/gas/riscv/x-xt-varith.d create mode 100644 gas/testsuite/gas/riscv/x-xt-varith.s create mode 100644 gas/testsuite/gas/riscv/x-xt-vcoder.d create mode 100644 gas/testsuite/gas/riscv/x-xt-vcoder.s diff --git a/bfd/elfxx-riscv.c b/bfd/elfxx-riscv.c index e1639cbc2cb..c05ac4629c7 100644 --- a/bfd/elfxx-riscv.c +++ b/bfd/elfxx-riscv.c @@ -1230,6 +1230,9 @@ static const struct riscv_implicit_subset riscv_implicit_subsets[] = {"xtheadvector", "+zicsr", check_implicit_always}, {"xtheadzvamo", "+zaamo", check_implicit_always}, + {"xxtvarith", "+v", check_implicit_always}, + {"xxtvcoder", "+v", check_implicit_always}, + {"xsmtvdot", "+zve32x", check_implicit_always}, {"xsmtvdotii", "+xsmtvdot", check_implicit_always}, @@ -1661,6 +1664,8 @@ static const struct riscv_supported_ext riscv_supported_vendor_x_ext[] = {"xtheadvector", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 }, {"xtheadvdot", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 }, {"xtheadzvamo", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 }, + {"xxtvarith", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 }, + {"xxtvcoder", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 }, {"xventanacondops", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 }, {"xsfvcp", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 }, {"xsfcease", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 }, @@ -3112,6 +3117,10 @@ riscv_multi_subset_supports (riscv_parse_subset_t *rps, return riscv_subset_supports (rps, "xtheadvector"); case INSN_CLASS_XTHEADVDOT: return riscv_subset_supports (rps, "xtheadvdot"); + case INSN_CLASS_XXTVARITH: + return riscv_subset_supports (rps, "xxtvarith"); + case INSN_CLASS_XXTVCODER: + return riscv_subset_supports (rps, "xxtvcoder"); case INSN_CLASS_XTHEADZVAMO: return riscv_subset_supports (rps, "xtheadzvamo"); case INSN_CLASS_XVENTANACONDOPS: @@ -3456,6 +3465,10 @@ riscv_multi_subset_supports_ext (riscv_parse_subset_t *rps, return "xtheadvector"; case INSN_CLASS_XTHEADVDOT: return "xtheadvdot"; + case INSN_CLASS_XXTVARITH: + return "xxtvarith"; + case INSN_CLASS_XXTVCODER: + return "xxtvcoder"; case INSN_CLASS_XTHEADZVAMO: return "xtheadzvamo"; case INSN_CLASS_XVENTANACONDOPS: diff --git a/gas/testsuite/gas/riscv/march-help.l b/gas/testsuite/gas/riscv/march-help.l index 142369b6b1d..5d5b361b237 100644 --- a/gas/testsuite/gas/riscv/march-help.l +++ b/gas/testsuite/gas/riscv/march-help.l @@ -189,6 +189,8 @@ All available -march extensions for RISC-V: xtheadvector 1.0 xtheadvdot 1.0 xtheadzvamo 1.0 + xxtvarith 1.0 + xxtvcoder 1.0 xventanacondops 1.0 xsfvcp 1.0 xsfcease 1.0 diff --git a/gas/testsuite/gas/riscv/x-xt-varith.d b/gas/testsuite/gas/riscv/x-xt-varith.d new file mode 100644 index 00000000000..3512d050f80 --- /dev/null +++ b/gas/testsuite/gas/riscv/x-xt-varith.d @@ -0,0 +1,13 @@ +#as: -march=rv64i_xxtvarith +#objdump: -dr + +.*:[ ]+file format .* + +Disassembly of section .text: + +0+000 <.text>: +[ ]+[0-9a-f]+:[ ]+da11600b[ ]+xt.vile.vv[ ]+v0,v1,v2 +[ ]+[0-9a-f]+:[ ]+f211600b[ ]+xt.vilo.vv[ ]+v0,v1,v2 +[ ]+[0-9a-f]+:[ ]+fa11600b[ ]+xt.vcrcfoldr.vv[ ]+v0,v1,v2 +[ ]+[0-9a-f]+:[ ]+fe11600b[ ]+xt.vcrcfoldn.vv[ ]+v0,v1,v2 +[ ]+[0-9a-f]+:[ ]+7a11600b[ ]+xt.vgmulxor.vv[ ]+v0,v1,v2 diff --git a/gas/testsuite/gas/riscv/x-xt-varith.s b/gas/testsuite/gas/riscv/x-xt-varith.s new file mode 100644 index 00000000000..33be84ea501 --- /dev/null +++ b/gas/testsuite/gas/riscv/x-xt-varith.s @@ -0,0 +1,5 @@ + xt.vile.vv v0, v1, v2 + xt.vilo.vv v0, v1, v2 + xt.vcrcfoldr.vv v0, v1, v2 + xt.vcrcfoldn.vv v0, v1, v2 + xt.vgmulxor.vv v0, v1, v2 diff --git a/gas/testsuite/gas/riscv/x-xt-vcoder.d b/gas/testsuite/gas/riscv/x-xt-vcoder.d new file mode 100644 index 00000000000..bfbee008b2d --- /dev/null +++ b/gas/testsuite/gas/riscv/x-xt-vcoder.d @@ -0,0 +1,32 @@ +#as: -march=rv64i_xxtvcoder +#objdump: -dr + +.*:[ ]+file format .* + +Disassembly of section .text: + +0+000 <.text>: +[ ]+[0-9a-f]+:[ ]+c211700b[ ]+xt.vabd.vv[ ]+v0,v1,v2 +[ ]+[0-9a-f]+:[ ]+c615700b[ ]+xt.vabd.vx[ ]+v0,v1,a0 +[ ]+[0-9a-f]+:[ ]+ca12f00b[ ]+xt.vabd.vi[ ]+v0,v1,5 +[ ]+[0-9a-f]+:[ ]+da11700b[ ]+xt.vaba.vv[ ]+v0,v1,v2 +[ ]+[0-9a-f]+:[ ]+de15700b[ ]+xt.vaba.vx[ ]+v0,v1,a0 +[ ]+[0-9a-f]+:[ ]+ce12700b[ ]+xt.vaba.vi[ ]+v0,v1,4 +[ ]+[0-9a-f]+:[ ]+a211600b[ ]+xt.vabdu.vv[ ]+v0,v1,v2 +[ ]+[0-9a-f]+:[ ]+a615600b[ ]+xt.vabdu.vx[ ]+v0,v1,a0 +[ ]+[0-9a-f]+:[ ]+aa12600b[ ]+xt.vabdu.vi[ ]+v0,v1,4 +[ ]+[0-9a-f]+:[ ]+b211600b[ ]+xt.vabau.vv[ ]+v0,v1,v2 +[ ]+[0-9a-f]+:[ ]+b615600b[ ]+xt.vabau.vx[ ]+v0,v1,a0 +[ ]+[0-9a-f]+:[ ]+ae12600b[ ]+xt.vabau.vi[ ]+v0,v1,4 +[ ]+[0-9a-f]+:[ ]+e211700b[ ]+xt.vwabd.vv[ ]+v0,v1,v2 +[ ]+[0-9a-f]+:[ ]+e616700b[ ]+xt.vwabd.vx[ ]+v0,v1,a2 +[ ]+[0-9a-f]+:[ ]+f211700b[ ]+xt.vwaba.vv[ ]+v0,v1,v2 +[ ]+[0-9a-f]+:[ ]+f616700b[ ]+xt.vwaba.vx[ ]+v0,v1,a2 +[ ]+[0-9a-f]+:[ ]+fa11700b[ ]+xt.vwabau.vv[ ]+v0,v1,v2 +[ ]+[0-9a-f]+:[ ]+fe16700b[ ]+xt.vwabau.vx[ ]+v0,v1,a2 +[ ]+[0-9a-f]+:[ ]+ea11700b[ ]+xt.vwabdu.vv[ ]+v0,v1,v2 +[ ]+[0-9a-f]+:[ ]+ee16700b[ ]+xt.vwabdu.vx[ ]+v0,v1,a2 +[ ]+[0-9a-f]+:[ ]+d211700b[ ]+xt.vfabd.vv[ ]+v0,v1,v2 +[ ]+[0-9a-f]+:[ ]+d616700b[ ]+xt.vfabd.vf[ ]+v0,v1,fa2 +[ ]+[0-9a-f]+:[ ]+6a21f08b[ ]+xt.vabsmax.vv[ ]+v1,v2,v3 +[ ]+[0-9a-f]+:[ ]+6821f08b[ ]+xt.vabsmax.vv[ ]+v1,v2,v3,v0.t diff --git a/gas/testsuite/gas/riscv/x-xt-vcoder.s b/gas/testsuite/gas/riscv/x-xt-vcoder.s new file mode 100644 index 00000000000..4f11a0ac8ec --- /dev/null +++ b/gas/testsuite/gas/riscv/x-xt-vcoder.s @@ -0,0 +1,24 @@ + xt.vabd.vv v0, v1, v2 + xt.vabd.vx v0, v1, a0 + xt.vabd.vi v0, v1, 5 + xt.vaba.vv v0, v1, v2 + xt.vaba.vx v0, v1, a0 + xt.vaba.vi v0, v1, 4 + xt.vabdu.vv v0, v1, v2 + xt.vabdu.vx v0, v1, a0 + xt.vabdu.vi v0, v1, 4 + xt.vabau.vv v0, v1, v2 + xt.vabau.vx v0, v1, a0 + xt.vabau.vi v0, v1, 4 + xt.vwabd.vv v0, v1, v2 + xt.vwabd.vx v0, v1, a2 + xt.vwaba.vv v0, v1, v2 + xt.vwaba.vx v0, v1, a2 + xt.vwabau.vv v0, v1, v2 + xt.vwabau.vx v0, v1, a2 + xt.vwabdu.vv v0, v1, v2 + xt.vwabdu.vx v0, v1, a2 + xt.vfabd.vv v0, v1, v2 + xt.vfabd.vf v0, v1, fa2 + xt.vabsmax.vv v1,v2,v3 + xt.vabsmax.vv v1,v2,v3,v0.t diff --git a/include/opcode/riscv-opc.h b/include/opcode/riscv-opc.h index 6846655aeed..463ddabee4b 100644 --- a/include/opcode/riscv-opc.h +++ b/include/opcode/riscv-opc.h @@ -3798,6 +3798,64 @@ #define MASK_TH_VMAQASU_VX 0xfc00707f #define MATCH_TH_VMAQAUS_VX 0x9c00600b #define MASK_TH_VMAQAUS_VX 0xfc00707f +/* Vendor-specific (XuanTie) XXTVarith instructions. */ +#define MATCH_XT_VILE_VV 0xda00600b +#define MASK_XT_VILE_VV 0xfe00707f +#define MATCH_XT_VILO_VV 0xf200600b +#define MASK_XT_VILO_VV 0xfe00707f +#define MATCH_XT_VGMULXOR_VV 0x7a00600b +#define MASK_XT_VGMULXOR_VV 0xfe00707f +#define MATCH_XT_VCRCFOLDR_VV 0xfa00600b +#define MASK_XT_VCRCFOLDR_VV 0xfe00707f +#define MATCH_XT_VCRCFOLDN_VV 0xfe00600b +#define MASK_XT_VCRCFOLDN_VV 0xfe00707f +/* Vendor-specific (XuanTie) XXTVcoder instructions. */ +#define MATCH_XT_VABD_VV 0xc000700b +#define MASK_XT_VABD_VV 0xfc00707f +#define MATCH_XT_VABD_VX 0xc400700b +#define MASK_XT_VABD_VX 0xfc00707f +#define MATCH_XT_VABD_VI 0xc800700b +#define MASK_XT_VABD_VI 0xfc00707f +#define MATCH_XT_VABA_VV 0xd800700b +#define MASK_XT_VABA_VV 0xfc00707f +#define MATCH_XT_VABA_VX 0xdc00700b +#define MASK_XT_VABA_VX 0xfc00707f +#define MATCH_XT_VABA_VI 0xcc00700b +#define MASK_XT_VABA_VI 0xfc00707f +#define MATCH_XT_VABDU_VV 0xa000600b +#define MASK_XT_VABDU_VV 0xfc00707f +#define MATCH_XT_VABDU_VX 0xa400600b +#define MASK_XT_VABDU_VX 0xfc00707f +#define MATCH_XT_VABDU_VI 0xa800600b +#define MASK_XT_VABDU_VI 0xfc00707f +#define MATCH_XT_VABAU_VV 0xb000600b +#define MASK_XT_VABAU_VV 0xfc00707f +#define MATCH_XT_VABAU_VX 0xb400600b +#define MASK_XT_VABAU_VX 0xfc00707f +#define MATCH_XT_VABAU_VI 0xac00600b +#define MASK_XT_VABAU_VI 0xfc00707f +#define MATCH_XT_VWABD_VV 0xe000700b +#define MASK_XT_VWABD_VV 0xfc00707f +#define MATCH_XT_VWABD_VX 0xe400700b +#define MASK_XT_VWABD_VX 0xfc00707f +#define MATCH_XT_VWABA_VV 0xf000700b +#define MASK_XT_VWABA_VV 0xfc00707f +#define MATCH_XT_VWABA_VX 0xf400700b +#define MASK_XT_VWABA_VX 0xfc00707f +#define MATCH_XT_VWABAU_VV 0xf800700b +#define MASK_XT_VWABAU_VV 0xfc00707f +#define MATCH_XT_VWABAU_VX 0xfc00700b +#define MASK_XT_VWABAU_VX 0xfc00707f +#define MATCH_XT_VWABDU_VV 0xe800700b +#define MASK_XT_VWABDU_VV 0xfc00707f +#define MATCH_XT_VWABDU_VX 0xec00700b +#define MASK_XT_VWABDU_VX 0xfc00707f +#define MATCH_XT_VFABD_VV 0xd000700b +#define MASK_XT_VFABD_VV 0xfc00707f +#define MATCH_XT_VFABD_VF 0xd400700b +#define MASK_XT_VFABD_VF 0xfc00707f +#define MATCH_XT_VABSMAX_VV 0x6800700b +#define MASK_XT_VABSMAX_VV 0xfc00707f /* Vendor-specific (Ventana Microsystems) XVentanaCondOps instructions */ #define MATCH_VT_MASKC 0x607b #define MASK_VT_MASKC 0xfe00707f diff --git a/include/opcode/riscv.h b/include/opcode/riscv.h index f500b877ca6..18757a946e2 100644 --- a/include/opcode/riscv.h +++ b/include/opcode/riscv.h @@ -624,6 +624,8 @@ enum riscv_insn_class INSN_CLASS_XTHEADVECTOR, INSN_CLASS_XTHEADVDOT, INSN_CLASS_XTHEADZVAMO, + INSN_CLASS_XXTVARITH, + INSN_CLASS_XXTVCODER, INSN_CLASS_XVENTANACONDOPS, INSN_CLASS_XSFVCP, INSN_CLASS_XSFCEASE, diff --git a/opcodes/riscv-opc.c b/opcodes/riscv-opc.c index cd1e2910307..60ac0def100 100644 --- a/opcodes/riscv-opc.c +++ b/opcodes/riscv-opc.c @@ -3570,6 +3570,38 @@ const struct riscv_opcode riscv_opcodes[] = {"th.vmaqasu.vx", 0, INSN_CLASS_XTHEADVDOT, "Vd,s,VtVm", MATCH_TH_VMAQASU_VX, MASK_TH_VMAQASU_VX, match_opcode, 0}, {"th.vmaqaus.vx", 0, INSN_CLASS_XTHEADVDOT, "Vd,s,VtVm", MATCH_TH_VMAQAUS_VX, MASK_TH_VMAQAUS_VX, match_opcode, 0}, +/* Vendor-specific (XuanTie) XXTVarith instructions. */ +{"xt.vile.vv", 0, INSN_CLASS_XXTVARITH, "Vd,Vt,Vs", MATCH_XT_VILE_VV, MASK_XT_VILE_VV, match_opcode, 0 }, +{"xt.vilo.vv", 0, INSN_CLASS_XXTVARITH, "Vd,Vt,Vs", MATCH_XT_VILO_VV, MASK_XT_VILO_VV, match_opcode, 0 }, +{"xt.vcrcfoldr.vv", 0, INSN_CLASS_XXTVARITH, "Vd,Vt,Vs", MATCH_XT_VCRCFOLDR_VV, MASK_XT_VCRCFOLDR_VV, match_opcode, 0 }, +{"xt.vcrcfoldn.vv", 0, INSN_CLASS_XXTVARITH, "Vd,Vt,Vs", MATCH_XT_VCRCFOLDN_VV, MASK_XT_VCRCFOLDN_VV, match_opcode, 0 }, +{"xt.vgmulxor.vv", 0, INSN_CLASS_XXTVARITH, "Vd,Vt,Vs", MATCH_XT_VGMULXOR_VV, MASK_XT_VGMULXOR_VV, match_opcode, 0 }, + +/* Vendor-specific (XuanTie) XXTVcoder instructions. */ +{"xt.vabd.vv", 0, INSN_CLASS_XXTVCODER, "Vd,Vt,VsVm", MATCH_XT_VABD_VV, MASK_XT_VABD_VV, match_opcode, 0 }, +{"xt.vabd.vx", 0, INSN_CLASS_XXTVCODER, "Vd,Vt,sVm", MATCH_XT_VABD_VX, MASK_XT_VABD_VX, match_opcode, 0 }, +{"xt.vabd.vi", 0, INSN_CLASS_XXTVCODER, "Vd,Vt,ViVm", MATCH_XT_VABD_VI, MASK_XT_VABD_VI, match_opcode, 0 }, +{"xt.vabdu.vv", 0, INSN_CLASS_XXTVCODER, "Vd,Vt,VsVm", MATCH_XT_VABDU_VV, MASK_XT_VABDU_VV, match_opcode, 0 }, +{"xt.vabdu.vx", 0, INSN_CLASS_XXTVCODER, "Vd,Vt,sVm", MATCH_XT_VABDU_VX, MASK_XT_VABDU_VX, match_opcode, 0 }, +{"xt.vabdu.vi", 0, INSN_CLASS_XXTVCODER, "Vd,Vt,VjVm", MATCH_XT_VABDU_VI, MASK_XT_VABDU_VI, match_opcode, 0 }, +{"xt.vaba.vv", 0, INSN_CLASS_XXTVCODER, "Vd,Vt,VsVm", MATCH_XT_VABA_VV, MASK_XT_VABA_VV, match_opcode, 0 }, +{"xt.vaba.vx", 0, INSN_CLASS_XXTVCODER, "Vd,Vt,sVm", MATCH_XT_VABA_VX, MASK_XT_VABA_VX, match_opcode, 0 }, +{"xt.vaba.vi", 0, INSN_CLASS_XXTVCODER, "Vd,Vt,ViVm", MATCH_XT_VABA_VI, MASK_XT_VABA_VI, match_opcode, 0 }, +{"xt.vabau.vv", 0, INSN_CLASS_XXTVCODER, "Vd,Vt,VsVm", MATCH_XT_VABAU_VV, MASK_XT_VABAU_VV, match_opcode, 0 }, +{"xt.vabau.vx", 0, INSN_CLASS_XXTVCODER, "Vd,Vt,sVm", MATCH_XT_VABAU_VX, MASK_XT_VABAU_VX, match_opcode, 0 }, +{"xt.vabau.vi", 0, INSN_CLASS_XXTVCODER, "Vd,Vt,VjVm", MATCH_XT_VABAU_VI, MASK_XT_VABAU_VI, match_opcode, 0 }, +{"xt.vwabd.vv", 0, INSN_CLASS_XXTVCODER, "Vd,Vt,VsVm", MATCH_XT_VWABD_VV, MASK_XT_VWABD_VV, match_opcode, 0 }, +{"xt.vwabd.vx", 0, INSN_CLASS_XXTVCODER, "Vd,Vt,sVm", MATCH_XT_VWABD_VX, MASK_XT_VWABD_VX, match_opcode, 0 }, +{"xt.vwaba.vv", 0, INSN_CLASS_XXTVCODER, "Vd,Vt,VsVm", MATCH_XT_VWABA_VV, MASK_XT_VWABA_VV, match_opcode, 0 }, +{"xt.vwaba.vx", 0, INSN_CLASS_XXTVCODER, "Vd,Vt,sVm", MATCH_XT_VWABA_VX, MASK_XT_VWABA_VX, match_opcode, 0 }, +{"xt.vwabau.vv", 0, INSN_CLASS_XXTVCODER, "Vd,Vt,VsVm", MATCH_XT_VWABAU_VV, MASK_XT_VWABAU_VV, match_opcode, 0 }, +{"xt.vwabau.vx", 0, INSN_CLASS_XXTVCODER, "Vd,Vt,sVm", MATCH_XT_VWABAU_VX, MASK_XT_VWABAU_VX, match_opcode, 0 }, +{"xt.vwabdu.vv", 0, INSN_CLASS_XXTVCODER, "Vd,Vt,VsVm", MATCH_XT_VWABDU_VV, MASK_XT_VWABDU_VV, match_opcode, 0 }, +{"xt.vwabdu.vx", 0, INSN_CLASS_XXTVCODER, "Vd,Vt,sVm", MATCH_XT_VWABDU_VX, MASK_XT_VWABDU_VX, match_opcode, 0 }, +{"xt.vfabd.vv", 0, INSN_CLASS_XXTVCODER, "Vd,Vt,VsVm", MATCH_XT_VFABD_VV, MASK_XT_VFABD_VV, match_opcode, 0 }, +{"xt.vfabd.vf", 0, INSN_CLASS_XXTVCODER, "Vd,Vt,SVm", MATCH_XT_VFABD_VF, MASK_XT_VFABD_VF, match_opcode, 0 }, +{"xt.vabsmax.vv", 0, INSN_CLASS_XXTVCODER, "Vd,Vt,VsVm", MATCH_XT_VABSMAX_VV, MASK_XT_VABSMAX_VV, match_opcode, 0 }, + /* Vendor-specific (Ventana Microsystems) XVentanaCondOps instructions */ {"vt.maskc", 64, INSN_CLASS_XVENTANACONDOPS, "d,s,t", MATCH_VT_MASKC, MASK_VT_MASKC, match_opcode, 0 }, {"vt.maskcn", 64, INSN_CLASS_XVENTANACONDOPS, "d,s,t", MATCH_VT_MASKCN, MASK_VT_MASKCN, match_opcode, 0 },