From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from azure-sdnproxy.icoremail.net (azure-sdnproxy.icoremail.net [52.237.72.81]) by sourceware.org (Postfix) with ESMTP id BB5FE38FA3F5 for ; Wed, 5 Jun 2024 01:30:20 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org BB5FE38FA3F5 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=eswincomputing.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=eswincomputing.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org BB5FE38FA3F5 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=52.237.72.81 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1717551026; cv=none; b=Lo75OaOQtmZyXX+PuI+Z4DUZX8mGtjSCeqoZw4is6pBYFaeMO/VQfbbSdWRCv9frwAyshDqaYksK8w31vQU/5649RLIr+mr0TWq5GUla9Kl/BI0WmdVAPnhy07ZthymEdVv1HIqRN8jVsLCwMnkYPkdgha13LjrmxAeC1gsdMVc= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1717551026; c=relaxed/simple; bh=Z3u5K4bYFCKdBLLc8O++QQz9kBUFEsoGZCMM30cbHiQ=; h=From:To:Subject:Date:Message-Id; b=ng0XC815VpJ6crKPXESJRxGXInDeyNYXwhUFz9ZVdu3JkkO+amFaztPRYaEQEzEaZVmknG+LOnmChrOUqrCYKAJNeBwtdzQJsIfkNCyNSfB84iGNjzAS9ALcTGMoPRy0UvhJCNvq2BKRkTmn7cY/oG568FJuhHX/o878IlXY+6M= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from localhost.localdomain (unknown [10.12.130.38]) by app1 (Coremail) with SMTP id TAJkCgBX+OQPv19m6F0OAA--.37881S7; Wed, 05 Jun 2024 09:27:51 +0800 (CST) From: Xiao Zeng To: binutils@sourceware.org Cc: kito.cheng@gmail.com, palmer@dabbelt.com, nelson@rivosinc.com, zhengyu@eswincomputing.com, Xiao Zeng Subject: [PING] [PATCH 3/3] RISC-V: Add support for Zvfbfwma extension Date: Wed, 5 Jun 2024 09:36:13 +0800 Message-Id: <20240605013613.78830-4-zengxiao@eswincomputing.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20240605013613.78830-1-zengxiao@eswincomputing.com> References: <20240605013613.78830-1-zengxiao@eswincomputing.com> X-CM-TRANSID:TAJkCgBX+OQPv19m6F0OAA--.37881S7 X-Coremail-Antispam: 1UD129KBjvJXoW3AFy8Wr18ArW8tw4DZr1UKFg_yoWDGw1fpF WkCF1qkr95XFnrJrn3uF1UKr12vw4IgF90k3ySva13Aw4SgrWUtFnFyw13AF4kZF4jkanx Wa1aqr45ZayUAa7anT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUB214x267AKxVWrJVCq3wAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2048vs2IY020E87I2jVAFwI0_JrWl82xGYIkIc2 x26xkF7I0E14v26r4j6ryUM28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48ve4kI8wA2z4x0 Y4vE2Ix0cI8IcVAFwI0_tr0E3s1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI0_Gr1j6F4UJw A2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xvwVC2z280aVCY1x0267AKxVW0oVCq3wAS 0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFcxC0VAKzVAqx4xG6I80ewAv7VC0I7IYx2 IY67AKxVWUJVWUGwAv7VC2z280aVAFwI0_Jr0_Gr1lOx8S6xCaFVCjc4AY6r1j6r4UM4x0 Y48IcxkI7VAKI48JM4x0x7Aq67IIx4CEVc8vx2IErcIFxwCY02Avz4vE-syl42xK82IYc2 Ij64vIr41l4I8I3I0E4IkC6x0Yz7v_Jr0_Gr1lx2IqxVAqx4xG67AKxVWUJVWUGwC20s02 6x8GjcxK67AKxVWUGVWUWwC2zVAF1VAY17CE14v26r126r1DMIIYrxkI7VAKI48JMIIF0x vE2Ix0cI8IcVAFwI0_Jr0_JF4lIxAIcVC0I7IYx2IY6xkF7I0E14v26r4j6F4UMIIF0xvE 42xK8VAvwI8IcIk0rVWUJVWUCwCI42IY6I8E87Iv67AKxVWUJVW8JwCI42IY6I8E87Iv6x kF7I0E14v26r4j6r4UJbIYCTnIWIevJa73UjIFyTuYvjfU8tx6UUUUU X-CM-SenderInfo: p2hqw5xldrqvxvzl0uprps33xlqjhudrp/ X-Spam-Status: No, score=-12.4 required=5.0 tests=BAYES_00,GIT_PATCH_0,KAM_DMARC_STATUS,KAM_SHORT,RCVD_IN_DNSWL_LOW,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This implements the Zvfbfwma extension, as of version 1.0. View detailed information in: 1 In spec: "Zvfbfwma requires the Zvfbfmin extension and the Zfbfmin extension." 1.1 In Embedded Processor: Zvfbfwma -> Zvfbfmin -> Zve32f 1.2 In Application Processor: Zvfbfwma -> Zvfbfmin -> V 1.3 In both scenarios, there are: Zvfbfwma -> Zfbfmin 2 Depending on different usage scenarios, the Zvfbfwma extension may depend on 'V' or 'Zve32f'. This patch only implements dependencies in scenario of Embedded Processor. This is consistent with the processing strategy in Zvfbfmin. In scenario of Application Processor, it is necessary to explicitly indicate the dependent 'V' extension. For relevant information in gcc, please refer to: bfd/ChangeLog: * elfxx-riscv.c (riscv_multi_subset_supports): Handle Zvfbfwma. (riscv_multi_subset_supports_ext): Ditto. gas/ChangeLog: * NEWS: Updated. * testsuite/gas/riscv/march-help.l: Ditto. * testsuite/gas/riscv/zvfbfwma-rv32.d: New test. * testsuite/gas/riscv/zvfbfwma-rv32.s: New test. * testsuite/gas/riscv/zvfbfwma-rv64.d: New test. * testsuite/gas/riscv/zvfbfwma-rv64.s: New test. include/ChangeLog: * opcode/riscv-opc.h (MATCH_VFWMACCBF16_VF): Define. (MASK_VFWMACCBF16_VF): Ditto. (MATCH_VFWMACCBF16_VV): Ditto. (MASK_VFWMACCBF16_VV): Ditto. (DECLARE_INSN): New declarations for Zvfbfwma. * opcode/riscv.h (enum riscv_insn_class): Add INSN_CLASS_ZVFBFWMA opcodes/ChangeLog: * riscv-opc.c: Add Zvfbfwma instructions. --- bfd/elfxx-riscv.c | 7 +++++++ gas/NEWS | 2 ++ gas/testsuite/gas/riscv/march-help.l | 1 + gas/testsuite/gas/riscv/zvfbfwma-rv32.d | 12 ++++++++++++ gas/testsuite/gas/riscv/zvfbfwma-rv32.s | 7 +++++++ gas/testsuite/gas/riscv/zvfbfwma-rv64.d | 12 ++++++++++++ gas/testsuite/gas/riscv/zvfbfwma-rv64.s | 7 +++++++ include/opcode/riscv-opc.h | 8 ++++++++ include/opcode/riscv.h | 1 + opcodes/riscv-opc.c | 4 ++++ 10 files changed, 61 insertions(+) create mode 100644 gas/testsuite/gas/riscv/zvfbfwma-rv32.d create mode 100644 gas/testsuite/gas/riscv/zvfbfwma-rv32.s create mode 100644 gas/testsuite/gas/riscv/zvfbfwma-rv64.d create mode 100644 gas/testsuite/gas/riscv/zvfbfwma-rv64.s diff --git a/bfd/elfxx-riscv.c b/bfd/elfxx-riscv.c index 3d303f02b58..1182c25cab2 100644 --- a/bfd/elfxx-riscv.c +++ b/bfd/elfxx-riscv.c @@ -1193,6 +1193,8 @@ static struct riscv_implicit_subset riscv_implicit_subsets[] = {"v", "zvl128b", check_implicit_always}, {"zabha", "a", check_implicit_always}, {"zvfbfmin", "zve32f", check_implicit_always}, + {"zvfbfwma", "zve32f", check_implicit_always}, + {"zvfbfwma", "zfbfmin", check_implicit_always}, {"zvfh", "zvfhmin", check_implicit_always}, {"zvfh", "zfhmin", check_implicit_always}, {"zvfhmin", "zve32f", check_implicit_always}, @@ -1396,6 +1398,7 @@ static struct riscv_supported_ext riscv_supported_std_z_ext[] = {"zvbc", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 }, {"zvfh", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 }, {"zvfbfmin", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 }, + {"zvfbfwma", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 }, {"zvfhmin", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 }, {"zvkb", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 }, {"zvkg", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 }, @@ -2648,6 +2651,8 @@ riscv_multi_subset_supports (riscv_parse_subset_t *rps, return riscv_subset_supports (rps, "zvbc"); case INSN_CLASS_ZVFBFMIN: return riscv_subset_supports (rps, "zvfbfmin"); + case INSN_CLASS_ZVFBFWMA: + return riscv_subset_supports (rps, "zvfbfwma"); case INSN_CLASS_ZVKB: return riscv_subset_supports (rps, "zvkb"); case INSN_CLASS_ZVKG: @@ -2914,6 +2919,8 @@ riscv_multi_subset_supports_ext (riscv_parse_subset_t *rps, return _("zvbc"); case INSN_CLASS_ZVFBFMIN: return "zvfbfmin"; + case INSN_CLASS_ZVFBFWMA: + return "zvfbfwma"; case INSN_CLASS_ZVKB: return _("zvkb"); case INSN_CLASS_ZVKG: diff --git a/gas/NEWS b/gas/NEWS index 2c75966d0ce..45eafeff38f 100644 --- a/gas/NEWS +++ b/gas/NEWS @@ -1,5 +1,7 @@ -*- text -*- +* Add support for RISC-V Zvfbfwma extension with version 1.0. + * Add support for RISC-V Zvfbfmin extension with version 1.0. * Add support for RISC-V Zfbfmin extension with version 1.0. diff --git a/gas/testsuite/gas/riscv/march-help.l b/gas/testsuite/gas/riscv/march-help.l index 1a2ac1eaa08..4b051b189b4 100644 --- a/gas/testsuite/gas/riscv/march-help.l +++ b/gas/testsuite/gas/riscv/march-help.l @@ -60,6 +60,7 @@ All available -march extensions for RISC-V: zvbc 1.0 zvfh 1.0 zvfbfmin 1.0 + zvfbfwma 1.0 zvfhmin 1.0 zvkb 1.0 zvkg 1.0 diff --git a/gas/testsuite/gas/riscv/zvfbfwma-rv32.d b/gas/testsuite/gas/riscv/zvfbfwma-rv32.d new file mode 100644 index 00000000000..2c00dabc32a --- /dev/null +++ b/gas/testsuite/gas/riscv/zvfbfwma-rv32.d @@ -0,0 +1,12 @@ +#as: -march=rv32i_zvfbfwma +#objdump: -d + +.*:[ ]+file format .* + +Disassembly of section .text: + +0+000 : +[ ]+[0-9a-f]+:[ ]+ee865257[ ]+vfwmaccbf16.vf[ ]+v4,fa2,v8 +[ ]+[0-9a-f]+:[ ]+ec865257[ ]+vfwmaccbf16.vf[ ]+v4,fa2,v8,v0.t +[ ]+[0-9a-f]+:[ ]+ee861257[ ]+vfwmaccbf16.vv[ ]+v4,v12,v8 +[ ]+[0-9a-f]+:[ ]+ec861257[ ]+vfwmaccbf16.vv[ ]+v4,v12,v8,v0.t diff --git a/gas/testsuite/gas/riscv/zvfbfwma-rv32.s b/gas/testsuite/gas/riscv/zvfbfwma-rv32.s new file mode 100644 index 00000000000..f824af98361 --- /dev/null +++ b/gas/testsuite/gas/riscv/zvfbfwma-rv32.s @@ -0,0 +1,7 @@ +target: + # vfwmaccbf16.vf + vfwmaccbf16.vf v4, fa2, v8 + vfwmaccbf16.vf v4, fa2, v8, v0.t + # vfwmaccbf16.vv + vfwmaccbf16.vv v4, v12, v8 + vfwmaccbf16.vv v4, v12, v8, v0.t diff --git a/gas/testsuite/gas/riscv/zvfbfwma-rv64.d b/gas/testsuite/gas/riscv/zvfbfwma-rv64.d new file mode 100644 index 00000000000..05da1328eea --- /dev/null +++ b/gas/testsuite/gas/riscv/zvfbfwma-rv64.d @@ -0,0 +1,12 @@ +#as: -march=rv64iv_zvfbfwma +#objdump: -d + +.*:[ ]+file format .* + +Disassembly of section .text: + +0+000 : +[ ]+[0-9a-f]+:[ ]+ee865257[ ]+vfwmaccbf16.vf[ ]+v4,fa2,v8 +[ ]+[0-9a-f]+:[ ]+ec865257[ ]+vfwmaccbf16.vf[ ]+v4,fa2,v8,v0.t +[ ]+[0-9a-f]+:[ ]+ee861257[ ]+vfwmaccbf16.vv[ ]+v4,v12,v8 +[ ]+[0-9a-f]+:[ ]+ec861257[ ]+vfwmaccbf16.vv[ ]+v4,v12,v8,v0.t diff --git a/gas/testsuite/gas/riscv/zvfbfwma-rv64.s b/gas/testsuite/gas/riscv/zvfbfwma-rv64.s new file mode 100644 index 00000000000..f824af98361 --- /dev/null +++ b/gas/testsuite/gas/riscv/zvfbfwma-rv64.s @@ -0,0 +1,7 @@ +target: + # vfwmaccbf16.vf + vfwmaccbf16.vf v4, fa2, v8 + vfwmaccbf16.vf v4, fa2, v8, v0.t + # vfwmaccbf16.vv + vfwmaccbf16.vv v4, v12, v8 + vfwmaccbf16.vv v4, v12, v8, v0.t diff --git a/include/opcode/riscv-opc.h b/include/opcode/riscv-opc.h index 32b971fb2b3..7db3dd1a1ed 100644 --- a/include/opcode/riscv-opc.h +++ b/include/opcode/riscv-opc.h @@ -2375,6 +2375,11 @@ #define MASK_VFNCVTBF16_F_F_W 0xfc0ff07f #define MATCH_VFWCVTBF16_F_F_V 0x48069057 #define MASK_VFWCVTBF16_F_F_V 0xfc0ff07f +/* Zvfbfwma intructions. */ +#define MATCH_VFWMACCBF16_VF 0xec005057 +#define MASK_VFWMACCBF16_VF 0xfc00707f +#define MATCH_VFWMACCBF16_VV 0xec001057 +#define MASK_VFWMACCBF16_VV 0xfc00707f /* Vendor-specific (CORE-V) Xcvmac instructions. */ #define MATCH_CV_MAC 0x9000302b #define MASK_CV_MAC 0xfe00707f @@ -3928,6 +3933,9 @@ DECLARE_INSN(FCVT_S_BF16, MATCH_FCVT_S_BF16, MASK_FCVT_S_BF16) /* Zvfbfmin instructions. */ DECLARE_INSN(VFNCVTBF16_F_F_W, MATCH_VFNCVTBF16_F_F_W, MASK_VFNCVTBF16_F_F_W) DECLARE_INSN(VFWCVTBF16_F_F_V, MATCH_VFWCVTBF16_F_F_V, MASK_VFWCVTBF16_F_F_V) +/* Zvfbfwma instructions. */ +DECLARE_INSN(VFWMACCBF16_VF, MATCH_VFWMACCBF16_VF, MASK_VFWMACCBF16_VF) +DECLARE_INSN(VFWMACCBF16_VV, MATCH_VFWMACCBF16_VV, MASK_VFWMACCBF16_VV) /* Zvbb/Zvkb instructions. */ DECLARE_INSN(vandn_vv, MATCH_VANDN_VV, MASK_VANDN_VV) DECLARE_INSN(vandn_vx, MATCH_VANDN_VX, MASK_VANDN_VX) diff --git a/include/opcode/riscv.h b/include/opcode/riscv.h index 4d21b6c3926..1ebfc5210ca 100644 --- a/include/opcode/riscv.h +++ b/include/opcode/riscv.h @@ -472,6 +472,7 @@ enum riscv_insn_class INSN_CLASS_ZVBB, INSN_CLASS_ZVBC, INSN_CLASS_ZVFBFMIN, + INSN_CLASS_ZVFBFWMA, INSN_CLASS_ZVKB, INSN_CLASS_ZVKG, INSN_CLASS_ZVKNED, diff --git a/opcodes/riscv-opc.c b/opcodes/riscv-opc.c index 0a470aee7cc..670e986978c 100644 --- a/opcodes/riscv-opc.c +++ b/opcodes/riscv-opc.c @@ -2045,6 +2045,10 @@ const struct riscv_opcode riscv_opcodes[] = {"vfncvtbf16.f.f.w", 0, INSN_CLASS_ZVFBFMIN, "Vd,VtVm", MATCH_VFNCVTBF16_F_F_W, MASK_VFNCVTBF16_F_F_W, match_opcode, 0}, {"vfwcvtbf16.f.f.v", 0, INSN_CLASS_ZVFBFMIN, "Vd,VtVm", MATCH_VFWCVTBF16_F_F_V, MASK_VFWCVTBF16_F_F_V, match_opcode, 0}, +/* Zvfbfwma instructions. */ +{"vfwmaccbf16.vf", 0, INSN_CLASS_ZVFBFWMA, "Vd,S,VtVm", MATCH_VFWMACCBF16_VF, MASK_VFWMACCBF16_VF, match_opcode, 0}, +{"vfwmaccbf16.vv", 0, INSN_CLASS_ZVFBFWMA, "Vd,Vs,VtVm", MATCH_VFWMACCBF16_VV, MASK_VFWMACCBF16_VV, match_opcode, 0}, + /* Zvkg instructions. */ {"vghsh.vv", 0, INSN_CLASS_ZVKG, "Vd,Vt,Vs", MATCH_VGHSH_VV, MASK_VGHSH_VV, match_opcode, 0}, {"vgmul.vv", 0, INSN_CLASS_ZVKG, "Vd,Vt", MATCH_VGMUL_VV, MASK_VGMUL_VV, match_opcode, 0}, -- 2.17.1