From patchwork Sat Aug 12 16:28:45 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tsukasa OI X-Patchwork-Id: 134906 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b824:0:b0:3f2:4152:657d with SMTP id z4csp1795102vqi; Sat, 12 Aug 2023 09:29:00 -0700 (PDT) X-Google-Smtp-Source: AGHT+IH+2Zt2gfNb3k/f8l8pDXRWwpX5YdeSld5498v3YMpZj+Fyi9eDiYIf6s8dLPYiEIebBLHc X-Received: by 2002:a2e:3217:0:b0:2b6:e2c1:6cda with SMTP id y23-20020a2e3217000000b002b6e2c16cdamr3837226ljy.46.1691857740740; Sat, 12 Aug 2023 09:29:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1691857740; cv=none; d=google.com; s=arc-20160816; b=IBkC0ahdQANUZlEMoN9hf86SF8ILIifIbUeHNccULs7L4pomP5RnWJMJZm6Iuhf7At pQkScLXgyYtCACLEzZegSjebaDXxjquGOweaHAjz4HDXXRgTXjOywGLnqB7INlZiH6ev Y6+V3z5a+EfI2D4RabxxQGAvYLIhEjZtSarO1JV+/Cd5Vo26pIC9bV/Rs2zgvhSj8Sss vafL1evbSL8Av5+cxGHJK7PM1nzOKJE93eKnJu+LS3PijtTentRH/Td13/UpiCucFTQX l6IM0ykehtUFmLn3IvT2kegrtoKY0RoDeJSXWQcpx4K6dGTmu3DwPOYjaaXulG0DQ1x9 vcCA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:from:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence :content-transfer-encoding:mime-version:message-id:date:subject:cc :to:dmarc-filter:delivered-to:dkim-signature:dkim-filter; bh=OBy/zfw9Zh8ZVR8NVLUGxlI9uuf8LVaP04SGkY+cAAg=; fh=oLBbkpKGrMjsAiDUocfN7mW0LEnMJsqDdFE8uCs7/vo=; b=QaagRDTiVV2fdv68W+DVNNgIYbzDwL806z2Vvh2k6oeklx0h7HoOB/O2PS5yLcqKB3 GUTnxPt1mUWS5kp6ZO+ZL5K30Z36kplfccsBZi1ykUcXmj9rUMu8DLc813dgS9X0weXF 1OGv+XryR5kw66eP6XfMLC9LVivmZtwoFPXefHZLMd8ftLErqSxYai16xw2hjCUXkw41 L0/jpZWBedL7lU+On9wJ2d+9yJjlJNoVQXi9OFrVOZXr4c5ZfwgkC7ZEFNI8f19KBHw0 DV8J3i0ZOfGG2pa5emUn/P5pT/xhH7p/9x2Jqveg4a/gkX0x7bIcp/b4JP6PKrRuLAfD Cqjg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@sourceware.org header.s=default header.b=cseQQQWO; spf=pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="binutils-bounces+ouuuleilei=gmail.com@sourceware.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=sourceware.org Received: from server2.sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id k19-20020a170906579300b009828298ddd5si5724842ejq.259.2023.08.12.09.29.00 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 12 Aug 2023 09:29:00 -0700 (PDT) Received-SPF: pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) client-ip=2620:52:3:1:0:246e:9693:128c; Authentication-Results: mx.google.com; dkim=pass header.i=@sourceware.org header.s=default header.b=cseQQQWO; spf=pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="binutils-bounces+ouuuleilei=gmail.com@sourceware.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 63C55385840F for ; Sat, 12 Aug 2023 16:28:59 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 63C55385840F DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1691857739; bh=OBy/zfw9Zh8ZVR8NVLUGxlI9uuf8LVaP04SGkY+cAAg=; h=To:Cc:Subject:Date:List-Id:List-Unsubscribe:List-Archive: List-Post:List-Help:List-Subscribe:From:Reply-To:From; b=cseQQQWOOu4ys0GhIPC9Z+FtmgL568+W5uQyT/qLKwC+A5zrR4iIrHxccPYraZqZG HeRcI1LwwNqNXUrUlzwbFLjI+W1Q5mjkvAdAAmEC3+9XTz7Hz6dVGA/ZZWw4QwgycH adRpQaV8BZk65/QVxSOdbVb5cYEPmRyyFt8nTCBI= X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-sender-0.a4lg.com (mail-sender-0.a4lg.com [IPv6:2401:2500:203:30b:4000:6bfe:4757:0]) by sourceware.org (Postfix) with ESMTPS id 6BB603858D20 for ; Sat, 12 Aug 2023 16:28:50 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 6BB603858D20 Received: from [127.0.0.1] (localhost [127.0.0.1]) by mail-sender-0.a4lg.com (Postfix) with ESMTPSA id A9FBB300089; Sat, 12 Aug 2023 16:28:47 +0000 (UTC) To: Tsukasa OI , Palmer Dabbelt , Andrew Waterman , Jim Wilson , Nelson Chu , Kito Cheng Cc: binutils@sourceware.org Subject: [PATCH] RISC-V: Make "fli.h" available to 'Zvfh' + 'Zfa' Date: Sat, 12 Aug 2023 16:28:45 +0000 Message-ID: <846929799c325fad57040e1c7560a0ed4d801065.1691857665.git.research_trasio@irq.a4lg.com> Mime-Version: 1.0 X-Spam-Status: No, score=-12.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, GIT_PATCH_0, KAM_MANYTO, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Tsukasa OI via Binutils From: Tsukasa OI Reply-To: Tsukasa OI Errors-To: binutils-bounces+ouuuleilei=gmail.com@sourceware.org Sender: "Binutils" X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1774041421970217570 X-GMAIL-MSGID: 1774041421970217570 From: Tsukasa OI The documentation of the 'Zfa' extension states that "fli.h" is available "if the Zfh or Zvfh extension is implemented" (both the latest and the oldest editions are checked). This fact was not reflected in Binutils ('Zvfh' implies 'Zfhmin', not full 'Zfh' extension and "fli.h" required 'Zfh' and 'Zfa' extensions). This commit makes "fli.h" also available when both 'Zfa' and 'Zvfh' extensions are implemented. bfd/ChangeLog: * elfxx-riscv.c (riscv_multi_subset_supports): Add new instruction class handling. (riscv_multi_subset_supports_ext): Likewise. gas/ChangeLog: * testsuite/gas/riscv/zfa-zvfh.s: New test. * testsuite/gas/riscv/zfa-zvfh.d: Ditto. include/ChangeLog: * opcode/riscv.h (enum riscv_insn_class): Add new instruction class. opcodes/ChangeLog: * riscv-opc.c (riscv_opcodes): Change instruction class of "fli.h" from INSN_CLASS_ZFH_AND_ZFA to new INSN_CLASS_ZFH_OR_ZVFH_AND_ZFA. --- bfd/elfxx-riscv.c | 15 +++++++++++++++ gas/testsuite/gas/riscv/zfa-zvfh.d | 16 ++++++++++++++++ gas/testsuite/gas/riscv/zfa-zvfh.s | 10 ++++++++++ include/opcode/riscv.h | 1 + opcodes/riscv-opc.c | 2 +- 5 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 gas/testsuite/gas/riscv/zfa-zvfh.d create mode 100644 gas/testsuite/gas/riscv/zfa-zvfh.s base-commit: 8c8224dc1637a3e695c17e4c1026247196813c48 diff --git a/bfd/elfxx-riscv.c b/bfd/elfxx-riscv.c index 9cc0c7b1c109..b78b79dc3c4b 100644 --- a/bfd/elfxx-riscv.c +++ b/bfd/elfxx-riscv.c @@ -2456,6 +2456,10 @@ riscv_multi_subset_supports (riscv_parse_subset_t *rps, case INSN_CLASS_ZFH_AND_ZFA: return riscv_subset_supports (rps, "zfh") && riscv_subset_supports (rps, "zfa"); + case INSN_CLASS_ZFH_OR_ZVFH_AND_ZFA: + return (riscv_subset_supports (rps, "zfh") + || riscv_subset_supports (rps, "zvfh")) + && riscv_subset_supports (rps, "zfa"); case INSN_CLASS_ZBA: return riscv_subset_supports (rps, "zba"); case INSN_CLASS_ZBB: @@ -2684,6 +2688,17 @@ riscv_multi_subset_supports_ext (riscv_parse_subset_t *rps, return "zfh"; else return "zfa"; + case INSN_CLASS_ZFH_OR_ZVFH_AND_ZFA: + if (!riscv_subset_supports (rps, "zfa")) + { + if (!riscv_subset_supports (rps, "zfh") + && !riscv_subset_supports (rps, "zvfh")) + return _("zfh' and `zfa', or `zvfh' and `zfa"); + else + return "zfa"; + } + else + return _("zfh' or `zvfh"); case INSN_CLASS_ZBA: return "zba"; case INSN_CLASS_ZBB: diff --git a/gas/testsuite/gas/riscv/zfa-zvfh.d b/gas/testsuite/gas/riscv/zfa-zvfh.d new file mode 100644 index 000000000000..8fbe06c40c0a --- /dev/null +++ b/gas/testsuite/gas/riscv/zfa-zvfh.d @@ -0,0 +1,16 @@ +#as: -march=rv32iq_zfa_zvfh +#objdump: -d + +.*:[ ]+file format .* + +Disassembly of section .text: + +0+000 : +[ ]+[0-9a-f]+:[ ]+f41c00d3[ ]+fli\.h[ ]+ft1,0x1p\+3 +[ ]+[0-9a-f]+:[ ]+f41c80d3[ ]+fli\.h[ ]+ft1,0x1p\+4 +[ ]+[0-9a-f]+:[ ]+f41d00d3[ ]+fli\.h[ ]+ft1,0x1p\+7 +[ ]+[0-9a-f]+:[ ]+f41d80d3[ ]+fli\.h[ ]+ft1,0x1p\+8 +[ ]+[0-9a-f]+:[ ]+f41e00d3[ ]+fli\.h[ ]+ft1,0x1p\+15 +[ ]+[0-9a-f]+:[ ]+f41e80d3[ ]+fli\.h[ ]+ft1,0x1p\+16 +[ ]+[0-9a-f]+:[ ]+f41f00d3[ ]+fli\.h[ ]+ft1,inf +[ ]+[0-9a-f]+:[ ]+f41f80d3[ ]+fli\.h[ ]+ft1,nan diff --git a/gas/testsuite/gas/riscv/zfa-zvfh.s b/gas/testsuite/gas/riscv/zfa-zvfh.s new file mode 100644 index 000000000000..61c26e66f26f --- /dev/null +++ b/gas/testsuite/gas/riscv/zfa-zvfh.s @@ -0,0 +1,10 @@ +target: + # fli.h is available on (('Zfh' || 'Zvfh') && 'Zfa') + fli.h ft1, 8.0 + fli.h ft1, 0x1p4 + fli.h ft1, 128.0 + fli.h ft1, 0x1p8 + fli.h ft1, 32768.0 + fli.h ft1, 0x1p16 + fli.h ft1, inf + fli.h ft1, nan diff --git a/include/opcode/riscv.h b/include/opcode/riscv.h index 808f36573030..3f2f7abd788f 100644 --- a/include/opcode/riscv.h +++ b/include/opcode/riscv.h @@ -407,6 +407,7 @@ enum riscv_insn_class INSN_CLASS_D_AND_ZFA, INSN_CLASS_Q_AND_ZFA, INSN_CLASS_ZFH_AND_ZFA, + INSN_CLASS_ZFH_OR_ZVFH_AND_ZFA, INSN_CLASS_ZBA, INSN_CLASS_ZBB, INSN_CLASS_ZBC, diff --git a/opcodes/riscv-opc.c b/opcodes/riscv-opc.c index f9e5ded3a6e3..72d31456874e 100644 --- a/opcodes/riscv-opc.c +++ b/opcodes/riscv-opc.c @@ -978,7 +978,7 @@ const struct riscv_opcode riscv_opcodes[] = {"fli.s", 0, INSN_CLASS_ZFA, "D,Wfv", MATCH_FLI_S, MASK_FLI_S, match_opcode, 0 }, {"fli.d", 0, INSN_CLASS_D_AND_ZFA, "D,Wfv", MATCH_FLI_D, MASK_FLI_D, match_opcode, 0 }, {"fli.q", 0, INSN_CLASS_Q_AND_ZFA, "D,Wfv", MATCH_FLI_Q, MASK_FLI_Q, match_opcode, 0 }, -{"fli.h", 0, INSN_CLASS_ZFH_AND_ZFA, "D,Wfv", MATCH_FLI_H, MASK_FLI_H, match_opcode, 0 }, +{"fli.h", 0, INSN_CLASS_ZFH_OR_ZVFH_AND_ZFA, "D,Wfv", MATCH_FLI_H, MASK_FLI_H, match_opcode, 0 }, {"fminm.s", 0, INSN_CLASS_ZFA, "D,S,T", MATCH_FMINM_S, MASK_FMINM_S, match_opcode, 0 }, {"fmaxm.s", 0, INSN_CLASS_ZFA, "D,S,T", MATCH_FMAXM_S, MASK_FMAXM_S, match_opcode, 0 }, {"fminm.d", 0, INSN_CLASS_D_AND_ZFA, "D,S,T", MATCH_FMINM_D, MASK_FMINM_D, match_opcode, 0 },