From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr1-x42e.google.com (mail-wr1-x42e.google.com [IPv6:2a00:1450:4864:20::42e]) by sourceware.org (Postfix) with ESMTPS id 1522D3881D33 for ; Mon, 13 Feb 2023 13:39:59 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 1522D3881D33 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=vrull.eu Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=vrull.eu Received: by mail-wr1-x42e.google.com with SMTP id m14so12235817wrg.13 for ; Mon, 13 Feb 2023 05:39:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vrull.eu; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=5dC1+SlOAVZ4LmdtccdkRYK6LqxASsypIBQmREP+hMI=; b=LLS2qP4gq0MwXK+9K6n0O9CjVy8+KW5MMFP8cF90Uh6I0Gi58pt0Aiok1LAH8dDhc3 baz/B6/4A5TMKT/MplWeGtl5J6i67XTsyxDjwMSXroQuU2o2XCnzUmfs9pdAg31Djaw/ LLxe0jz4aN1lsIzVHLiqY9wXwtNEnmluqse23VntffDWOSZKs2ny3UGXWKSxHrN2opUb mFJNFoXVJIbfA1tZlbTjko2PLDR9DdNm/foWgAujbQB0BbthAjpRH4edNjIQg0zTPZEN VH7DauUT41Z+n6HdEWoeag0pl69HAaYRsmRgv/8tNnWoWQD28HFSRYIv8GM/q8/oee9j GK9w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=5dC1+SlOAVZ4LmdtccdkRYK6LqxASsypIBQmREP+hMI=; b=X5zTuWmrIINK/L4jIB4hB2PRk9+muoHZH28V8lx08r1AR/I1cNPrAD+k098yXtY6Sa Ftm9AxZo4G2jxJwsw3O346wt0i7YFGAvKb+FuDMObynrWHNAXBSSFx1Wjv16yR5fuT0P CGz9gxTo5tG/gw3nMxHNJJR3cZvuIfWZAMSnMEZTff4NsLrDJzX8m+angtYzONvRWwRc mZeQmlXlwfICE2AqNxxqduPw1nMRf0feJflVsfZurgxsTZiRTTqTAKutm6XT3LdijYAf u5N+EeRFmGjPmzM1vl5JgtR4idKqZzh3lJGf6vkHsgy35zJHtTKHPORZ/x9F+0padeZB Annw== X-Gm-Message-State: AO0yUKV3lJGJftPw/poLwL4dM0JrbY/NHjsExtc3O30WRVPI4YqPZ1DJ /t3kRDSffOAjLKfAti3IbaZ6dkofvJi8rw55 X-Google-Smtp-Source: AK7set9ECk1PIxntn44QLnCBEE2jQgPZ/hivND53hutG2yf7DFRbuhBwZu30KWTb0Ez+CRVxys4/ew== X-Received: by 2002:adf:b34f:0:b0:2c3:be89:7c2a with SMTP id k15-20020adfb34f000000b002c3be897c2amr13529110wrd.13.1676295597438; Mon, 13 Feb 2023 05:39:57 -0800 (PST) Received: from beast.fritz.box (62-178-148-172.cable.dynamic.surfer.at. [62.178.148.172]) by smtp.gmail.com with ESMTPSA id d1-20020adffd81000000b002bfe08c566fsm10406542wrr.106.2023.02.13.05.39.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Feb 2023 05:39:56 -0800 (PST) From: Christoph Muellner To: binutils@sourceware.org, Nelson Chu , Andrew Waterman , Palmer Dabbelt , Jim Wilson , Philipp Tomsich , Elda Kuka , Aaron Durbin , Andrew de los Reyes , Eric Gouriou , Barna Ibrahim , Jeff Law Cc: =?UTF-8?q?Christoph=20M=C3=BCllner?= Subject: [RFC PATCH v3 3/8] RISC-V: Add Zvkned ISA extension support Date: Mon, 13 Feb 2023 14:39:44 +0100 Message-Id: <20230213133949.3773320-4-christoph.muellner@vrull.eu> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20230213133949.3773320-1-christoph.muellner@vrull.eu> References: <20230213133949.3773320-1-christoph.muellner@vrull.eu> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-12.7 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,JMQ_SPF_NEUTRAL,KAM_MANYTO,RCVD_IN_DNSWL_NONE,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 List-Id: From: Christoph Müllner This commit adds the Zvkned ISA extension instructions, which are part of the vector crypto extensions. Signed-off-by: Christoph Müllner --- Changes in v3: - Rename Zvkns -> Zvkned Changes in v2: - Rename Zvkn -> Zvkns bfd/elfxx-riscv.c | 5 +++++ gas/testsuite/gas/riscv/zvkned.d | 21 +++++++++++++++++++ gas/testsuite/gas/riscv/zvkned.s | 13 ++++++++++++ include/opcode/riscv-opc.h | 35 ++++++++++++++++++++++++++++++++ include/opcode/riscv.h | 1 + opcodes/riscv-opc.c | 13 ++++++++++++ 6 files changed, 88 insertions(+) create mode 100644 gas/testsuite/gas/riscv/zvkned.d create mode 100644 gas/testsuite/gas/riscv/zvkned.s diff --git a/bfd/elfxx-riscv.c b/bfd/elfxx-riscv.c index 9e0dee9cc72..51ddaace420 100644 --- a/bfd/elfxx-riscv.c +++ b/bfd/elfxx-riscv.c @@ -1207,6 +1207,7 @@ static struct riscv_supported_ext riscv_supported_std_z_ext[] = {"zve64d", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 }, {"zvkb", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 }, {"zvkg", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 }, + {"zvkned", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 }, {"zvl32b", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 }, {"zvl64b", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 }, {"zvl128b", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 }, @@ -2361,6 +2362,8 @@ riscv_multi_subset_supports (riscv_parse_subset_t *rps, return riscv_subset_supports (rps, "zvkb"); case INSN_CLASS_ZVKG: return riscv_subset_supports (rps, "zvkg"); + case INSN_CLASS_ZVKNED: + return riscv_subset_supports (rps, "zvkned"); case INSN_CLASS_SVINVAL: return riscv_subset_supports (rps, "svinval"); case INSN_CLASS_H: @@ -2523,6 +2526,8 @@ riscv_multi_subset_supports_ext (riscv_parse_subset_t *rps, return _("zvkb"); case INSN_CLASS_ZVKG: return _("zvkg"); + case INSN_CLASS_ZVKNED: + return _("zvkned"); case INSN_CLASS_SVINVAL: return "svinval"; case INSN_CLASS_H: diff --git a/gas/testsuite/gas/riscv/zvkned.d b/gas/testsuite/gas/riscv/zvkned.d new file mode 100644 index 00000000000..0b09da9dbc2 --- /dev/null +++ b/gas/testsuite/gas/riscv/zvkned.d @@ -0,0 +1,21 @@ +#as: -march=rv64gc_zvkned +#objdump: -dr + +.*:[ ]+file format .* + + +Disassembly of section .text: +0+000 <.text>: +[ ]+[0-9a-f]+:[ ]+a280a277[ ]+vaesdf.vv[ ]+v4,v8 +[ ]+[0-9a-f]+:[ ]+a680a277[ ]+vaesdf.vs[ ]+v4,v8 +[ ]+[0-9a-f]+:[ ]+a2802277[ ]+vaesdm.vv[ ]+v4,v8 +[ ]+[0-9a-f]+:[ ]+a6802277[ ]+vaesdm.vs[ ]+v4,v8 +[ ]+[0-9a-f]+:[ ]+a281a277[ ]+vaesef.vv[ ]+v4,v8 +[ ]+[0-9a-f]+:[ ]+a681a277[ ]+vaesef.vs[ ]+v4,v8 +[ ]+[0-9a-f]+:[ ]+a2812277[ ]+vaesem.vv[ ]+v4,v8 +[ ]+[0-9a-f]+:[ ]+a6812277[ ]+vaesem.vs[ ]+v4,v8 +[ ]+[0-9a-f]+:[ ]+8a812277[ ]+vaeskf1.vi[ ]+v4,v8,2 +[ ]+[0-9a-f]+:[ ]+8a872277[ ]+vaeskf1.vi[ ]+v4,v8,14 +[ ]+[0-9a-f]+:[ ]+aa812277[ ]+vaeskf2.vi[ ]+v4,v8,2 +[ ]+[0-9a-f]+:[ ]+aa872277[ ]+vaeskf2.vi[ ]+v4,v8,14 +[ ]+[0-9a-f]+:[ ]+a683a277[ ]+vaesz.vs[ ]+v4,v8 diff --git a/gas/testsuite/gas/riscv/zvkned.s b/gas/testsuite/gas/riscv/zvkned.s new file mode 100644 index 00000000000..f0f3811eaec --- /dev/null +++ b/gas/testsuite/gas/riscv/zvkned.s @@ -0,0 +1,13 @@ + vaesdf.vv v4, v8 + vaesdf.vs v4, v8 + vaesdm.vv v4, v8 + vaesdm.vs v4, v8 + vaesef.vv v4, v8 + vaesef.vs v4, v8 + vaesem.vv v4, v8 + vaesem.vs v4, v8 + vaeskf1.vi v4, v8, 2 + vaeskf1.vi v4, v8, 14 + vaeskf2.vi v4, v8, 2 + vaeskf2.vi v4, v8, 14 + vaesz.vs v4, v8 diff --git a/include/opcode/riscv-opc.h b/include/opcode/riscv-opc.h index 03eda5a9e49..5f593222ea6 100644 --- a/include/opcode/riscv-opc.h +++ b/include/opcode/riscv-opc.h @@ -2089,6 +2089,29 @@ #define MASK_VGHSHVV 0xfe00707f #define MATCH_VGMULVV 0xa208a077 #define MASK_VGMULVV 0xfe0ff07f +/* Zvkned instructions. */ +#define MATCH_VAESDFVV 0xa200a077 +#define MASK_VAESDFVV 0xfe0ff07f +#define MATCH_VAESDFVS 0xa600a077 +#define MASK_VAESDFVS 0xfe0ff07f +#define MATCH_VAESDMVV 0xa2002077 +#define MASK_VAESDMVV 0xfe0ff07f +#define MATCH_VAESDMVS 0xa6002077 +#define MASK_VAESDMVS 0xfe0ff07f +#define MATCH_VAESEFVV 0xa201a077 +#define MASK_VAESEFVV 0xfe0ff07f +#define MATCH_VAESEFVS 0xa601a077 +#define MASK_VAESEFVS 0xfe0ff07f +#define MATCH_VAESEMVV 0xa2012077 +#define MASK_VAESEMVV 0xfe0ff07f +#define MATCH_VAESEMVS 0xa6012077 +#define MASK_VAESEMVS 0xfe0ff07f +#define MATCH_VAESKF1VI 0x8a002077 +#define MASK_VAESKF1VI 0xfe00707f +#define MATCH_VAESKF2VI 0xaa002077 +#define MASK_VAESKF2VI 0xfe00707f +#define MATCH_VAESZVS 0xa603a077 +#define MASK_VAESZVS 0xfe0ff07f /* Svinval instruction. */ #define MATCH_SINVAL_VMA 0x16000073 #define MASK_SINVAL_VMA 0xfe007fff @@ -3170,6 +3193,18 @@ DECLARE_INSN(vandnvi, MATCH_VANDNVI, MASK_VANDNVI) /* Zvkg instructions. */ DECLARE_INSN(vghshvv, MATCH_VGHASHVV, MASK_VGHASHVV) DECLARE_INSN(vgmulvv, MATCH_VGMULTVV, MASK_VGMULTVV) +/* Zvkned instructions. */ +DECLARE_INSN(vaesdfvv, MATCH_VAESDFVV, MASK_VAESDFVV) +DECLARE_INSN(vaesdfvs, MATCH_VAESDFVS, MASK_VAESDFVS) +DECLARE_INSN(vaesdmvv, MATCH_VAESDMVV, MASK_VAESDMVV) +DECLARE_INSN(vaesdmvs, MATCH_VAESDMVS, MASK_VAESDMVS) +DECLARE_INSN(vaesefvv, MATCH_VAESEFVV, MASK_VAESEFVV) +DECLARE_INSN(vaesefvs, MATCH_VAESEFVS, MASK_VAESEFVS) +DECLARE_INSN(vaesemvv, MATCH_VAESEMVV, MASK_VAESEMVV) +DECLARE_INSN(vaesemvs, MATCH_VAESEMVS, MASK_VAESEMVS) +DECLARE_INSN(vaeskf1vi, MATCH_VAESKF1VI, MASK_VAESKF1VI) +DECLARE_INSN(vaeskf2vi, MATCH_VAESKF2VI, MASK_VAESKF2VI) +DECLARE_INSN(vaeszvs, MATCH_VAESZVS, MASK_VAESZVS) /* Vendor-specific (T-Head) XTheadBa instructions. */ DECLARE_INSN(th_addsl, MATCH_TH_ADDSL, MASK_TH_ADDSL) /* Vendor-specific (T-Head) XTheadBb instructions. */ diff --git a/include/opcode/riscv.h b/include/opcode/riscv.h index 9e883f030d6..4b7e72150e5 100644 --- a/include/opcode/riscv.h +++ b/include/opcode/riscv.h @@ -411,6 +411,7 @@ enum riscv_insn_class INSN_CLASS_ZVEF, INSN_CLASS_ZVKB, INSN_CLASS_ZVKG, + INSN_CLASS_ZVKNED, INSN_CLASS_SVINVAL, INSN_CLASS_ZICBOM, INSN_CLASS_ZICBOP, diff --git a/opcodes/riscv-opc.c b/opcodes/riscv-opc.c index 0bb0bb4cce7..3465670d951 100644 --- a/opcodes/riscv-opc.c +++ b/opcodes/riscv-opc.c @@ -1835,6 +1835,19 @@ const struct riscv_opcode riscv_opcodes[] = {"vghsh.vv", 0, INSN_CLASS_ZVKG, "Vd,Vt,Vs", MATCH_VGHSHVV, MASK_VGHSHVV, match_opcode, 0}, {"vgmul.vv", 0, INSN_CLASS_ZVKG, "Vd,Vt", MATCH_VGMULVV, MASK_VGMULVV, match_opcode, 0}, +/* Zvkned instructions. */ +{"vaesdf.vv", 0, INSN_CLASS_ZVKNED, "Vd,Vt", MATCH_VAESDFVV, MASK_VAESDFVV, match_opcode, 0}, +{"vaesdf.vs", 0, INSN_CLASS_ZVKNED, "Vd,Vt", MATCH_VAESDFVS, MASK_VAESDFVV, match_opcode, 0}, +{"vaesdm.vv", 0, INSN_CLASS_ZVKNED, "Vd,Vt", MATCH_VAESDMVV, MASK_VAESDMVV, match_opcode, 0}, +{"vaesdm.vs", 0, INSN_CLASS_ZVKNED, "Vd,Vt", MATCH_VAESDMVS, MASK_VAESDMVV, match_opcode, 0}, +{"vaesef.vv", 0, INSN_CLASS_ZVKNED, "Vd,Vt", MATCH_VAESEFVV, MASK_VAESEFVV, match_opcode, 0}, +{"vaesef.vs", 0, INSN_CLASS_ZVKNED, "Vd,Vt", MATCH_VAESEFVS, MASK_VAESEFVV, match_opcode, 0}, +{"vaesem.vv", 0, INSN_CLASS_ZVKNED, "Vd,Vt", MATCH_VAESEMVV, MASK_VAESEMVV, match_opcode, 0}, +{"vaesem.vs", 0, INSN_CLASS_ZVKNED, "Vd,Vt", MATCH_VAESEMVS, MASK_VAESEMVV, match_opcode, 0}, +{"vaeskf1.vi", 0, INSN_CLASS_ZVKNED, "Vd,Vt,Vj", MATCH_VAESKF1VI, MASK_VAESKF1VI, match_opcode, 0}, +{"vaeskf2.vi", 0, INSN_CLASS_ZVKNED, "Vd,Vt,Vj", MATCH_VAESKF2VI, MASK_VAESKF2VI, match_opcode, 0}, +{"vaesz.vs", 0, INSN_CLASS_ZVKNED, "Vd,Vt", MATCH_VAESZVS, MASK_VAESZVS, match_opcode, 0}, + /* Supervisor instructions. */ {"csrr", 0, INSN_CLASS_ZICSR, "d,E", MATCH_CSRRS, MASK_CSRRS|MASK_RS1, match_opcode, INSN_ALIAS }, {"csrw", 0, INSN_CLASS_ZICSR, "E,s", MATCH_CSRRW, MASK_CSRRW|MASK_RD, match_opcode, INSN_ALIAS }, -- 2.39.1