From patchwork Mon Oct 24 09:55:30 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kito Cheng X-Patchwork-Id: 59346 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id EBADE385AC3F for ; Mon, 24 Oct 2022 09:56:00 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-pl1-x631.google.com (mail-pl1-x631.google.com [IPv6:2607:f8b0:4864:20::631]) by sourceware.org (Postfix) with ESMTPS id 7783A3858421 for ; Mon, 24 Oct 2022 09:55:40 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 7783A3858421 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=sifive.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=sifive.com Received: by mail-pl1-x631.google.com with SMTP id u6so7989276plq.12 for ; Mon, 24 Oct 2022 02:55:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=R3EXiox0tXh3H2cBmcer1/7KJ/XCVPsG8IBAFERssPo=; b=OHKh+9f6SnAORssSOotI7ZiaXEMIKO9+OO7y8ZEua37ehzdMlnYYmT8JvNJ7ZSNWwk 1ARJvSMWN9wEjO6OEJSzG4ca9GkkvF5mWFOZ3C6bJDjefKjAqAkzc2PP/DupfgK9nyCj imNI3sKDp4maI818K5+H+EUlDts9D/9eD85Qi3S9omIZgyNYWf+ckijP6E8cv5oTeaeJ QV03GuoS5CWTqns2KPVc2PiQwe1IlHZkk+dQbsBVmy2hLVc50CSoLIhMpwl0onUgzwSf 9piuC7JddEcIa2Ex5hauPtbz2FxLlEGKpfwajkEB6Ds5KSk0AehAIDveKfZ4BUAISnBn UL3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=R3EXiox0tXh3H2cBmcer1/7KJ/XCVPsG8IBAFERssPo=; b=RyOGl9rdypaoKDcDwf6tTd9rIuJY5cgCpUMIj6GAZCVdkiXDYAOvAtmZkjrk6qe9w/ 66bIwt+MAlfs71MJMHFnf+oO0PoPeLdXKHtXTeoaedqXIS7cILrrjfSXqtTLaER2aG98 jtnMHmSE2tHHI8fb4DfxqHRNpLSRpXbXH5ea27BsFXKQ228A08z2XrR+dzE/3laafAX1 momvEl/76pOddi4Vngb2fqWWvB0Tyn1gntj9+ZXrfQcg6A+eqSePFjrRpd6WGqir+2cx fr6fp17hlN/iDXTfqrjFKgsnjSIOjR0jxnltpkQXFFTXPbOcq/GHbOfZD0zQDRmniKEj 8ZAw== X-Gm-Message-State: ACrzQf2N7R1iS2zYfdCEP8fdYbTk99bf4WJvckTW20Ty6f2d0pfy3RE6 BdDWJZJi2pJpSlgRLf1ibb7HBtSCdlEi7TgscCAyTtMissnnhvJbY3Nd3gqu9TpgsX9+ZpBr51d O8wQ4WcSEuVbAQc60lnG1SeUo+UDCwk4qb8ejYwQuOqorc7JBywN4znWz1eSsgs7zd8Rj5OO8Ew == X-Google-Smtp-Source: AMsMyM7lPDzjcJiUUOZgic3mdwChDAmMPszgYNDygGVjG5DCQq+/6RrAdP5v5AVfxGu9HasZX+yZtA== X-Received: by 2002:a17:902:e804:b0:186:5736:2b6d with SMTP id u4-20020a170902e80400b0018657362b6dmr25938574plg.85.1666605338336; Mon, 24 Oct 2022 02:55:38 -0700 (PDT) Received: from hsinchu02.internal.sifive.com (59-124-168-89.hinet-ip.hinet.net. [59.124.168.89]) by smtp.gmail.com with ESMTPSA id bf1-20020a170902b90100b0017f7d7e95d3sm19063578plb.167.2022.10.24.02.55.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Oct 2022 02:55:37 -0700 (PDT) From: Kito Cheng To: gcc-patches@gcc.gnu.org, kito.cheng@gmail.com, jim.wilson.gcc@gmail.com, palmer@dabbelt.com, andrew@sifive.com, christoph.muellner@vrull.eu Subject: [PATCH] RISC-V: Add h extension support Date: Mon, 24 Oct 2022 17:55:30 +0800 Message-Id: <20221024095530.16284-1-kito.cheng@sifive.com> X-Mailer: git-send-email 2.37.2 MIME-Version: 1.0 X-Spam-Status: No, score=-13.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kito Cheng Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" `h` was the prefix of multi-letter extension name, but it become a extension in later RISC-V isa spec. Fortunately we don't have any extension really defined is prefixed with `h`, so we can just change that. gcc/ChangeLog: * common/config/riscv/riscv-common.cc (riscv_ext_version_table): Add `h`. (riscv_supported_std_ext): Ditto. (multi_letter_subset_rank): Remove `h`. (riscv_subset_list::parse_std_ext): Handle `h` as single letter extension. (riscv_subset_list::parse): Ditto. gcc/testsuite/ChangeLog: * testsuite/gcc.target/riscv/arch-18.c: New. * testsuite/gcc.target/riscv/arch-5.c: Remove test for prefixed with `h`. * testsuite/gcc.target/riscv/predef-23.c: New. --- gcc/common/config/riscv/riscv-common.cc | 23 +++----- gcc/testsuite/gcc.target/riscv/arch-18.c | 5 ++ gcc/testsuite/gcc.target/riscv/arch-5.c | 2 +- gcc/testsuite/gcc.target/riscv/predef-23.c | 63 ++++++++++++++++++++++ 4 files changed, 77 insertions(+), 16 deletions(-) create mode 100644 gcc/testsuite/gcc.target/riscv/arch-18.c create mode 100644 gcc/testsuite/gcc.target/riscv/predef-23.c diff --git a/gcc/common/config/riscv/riscv-common.cc b/gcc/common/config/riscv/riscv-common.cc index c39ed2e2696..595cff03cdc 100644 --- a/gcc/common/config/riscv/riscv-common.cc +++ b/gcc/common/config/riscv/riscv-common.cc @@ -145,6 +145,8 @@ static const struct riscv_ext_version riscv_ext_version_table[] = {"c", ISA_SPEC_CLASS_20190608, 2, 0}, {"c", ISA_SPEC_CLASS_2P2, 2, 0}, + {"h", ISA_SPEC_CLASS_NONE, 1, 0}, + {"v", ISA_SPEC_CLASS_NONE, 1, 0}, {"zicsr", ISA_SPEC_CLASS_20191213, 2, 0}, @@ -353,21 +355,18 @@ multi_letter_subset_rank (const std::string &subset) gcc_assert (subset.length () >= 2); int high_order = -1; int low_order = 0; - /* The order between multi-char extensions: s -> h -> z -> x. */ + /* The order between multi-char extensions: s -> z -> x. */ char multiletter_class = subset[0]; switch (multiletter_class) { case 's': high_order = 0; break; - case 'h': - high_order = 1; - break; case 'z': - high_order = 2; + high_order = 1; break; case 'x': - high_order = 3; + high_order = 2; break; default: gcc_unreachable (); @@ -663,7 +662,7 @@ riscv_subset_list::lookup (const char *subset, int major_version, static const char * riscv_supported_std_ext (void) { - return "mafdqlcbkjtpvn"; + return "mafdqlcbkjtpvnh"; } /* Parsing subset version. @@ -822,7 +821,7 @@ riscv_subset_list::parse_std_ext (const char *p) { char subset[2] = {0, 0}; - if (*p == 'x' || *p == 's' || *p == 'h' || *p == 'z') + if (*p == 'x' || *p == 's' || *p == 'z') break; if (*p == '_') @@ -947,7 +946,7 @@ riscv_subset_list::handle_combine_ext () Arguments: `p`: Current parsing position. - `ext_type`: What kind of extensions, 's', 'h', 'z' or 'x'. + `ext_type`: What kind of extensions, 's', 'z' or 'x'. `ext_type_str`: Full name for kind of extension. */ const char * @@ -1086,12 +1085,6 @@ riscv_subset_list::parse (const char *arch, location_t loc) /* Parsing supervisor extension. */ p = subset_list->parse_multiletter_ext (p, "s", "supervisor extension"); - if (p == NULL) - goto fail; - - /* Parsing hypervisor extension. */ - p = subset_list->parse_multiletter_ext (p, "h", "hypervisor extension"); - if (p == NULL) goto fail; diff --git a/gcc/testsuite/gcc.target/riscv/arch-18.c b/gcc/testsuite/gcc.target/riscv/arch-18.c new file mode 100644 index 00000000000..bb045360ce1 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/arch-18.c @@ -0,0 +1,5 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -march=rv32gcvh -mabi=ilp32 -mcmodel=medlow" } */ +int foo() +{ +} diff --git a/gcc/testsuite/gcc.target/riscv/arch-5.c b/gcc/testsuite/gcc.target/riscv/arch-5.c index 2a0f3b782a8..b945a643cc1 100644 --- a/gcc/testsuite/gcc.target/riscv/arch-5.c +++ b/gcc/testsuite/gcc.target/riscv/arch-5.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-march=rv32isabc_hghi_zfoo_xbar -mabi=ilp32" } */ +/* { dg-options "-march=rv32isabc_zfoo_xbar -mabi=ilp32" } */ int foo() { } diff --git a/gcc/testsuite/gcc.target/riscv/predef-23.c b/gcc/testsuite/gcc.target/riscv/predef-23.c new file mode 100644 index 00000000000..676023f2a75 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/predef-23.c @@ -0,0 +1,63 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -march=rv64ih_zfhmin -mabi=lp64f -mcmodel=medlow -misa-spec=20191213" } */ + +int main () { + +#ifndef __riscv_arch_test +#error "__riscv_arch_test" +#endif + +#if __riscv_xlen != 64 +#error "__riscv_xlen" +#endif + +#if !defined(__riscv_i) +#error "__riscv_i" +#endif + +#if defined(__riscv_c) +#error "__riscv_c" +#endif + +#if defined(__riscv_e) +#error "__riscv_e" +#endif + +#if defined(__riscv_a) +#error "__riscv_a" +#endif + +#if defined(__riscv_m) +#error "__riscv_m" +#endif + +#if !defined(__riscv_f) +#error "__riscv_f" +#endif + +#if defined(__riscv_d) +#error "__riscv_d" +#endif + +#if defined(__riscv_v) +#error "__riscv_v" +#endif + +#if defined(__riscv_zfh) +#error "__riscv_zfh" +#endif + +#if !defined(__riscv_zfhmin) +#error "__riscv_zfhmin" +#endif + +#if !defined(__riscv_zicsr) +#error "__riscv_zicsr" +#endif + +#if !defined(__riscv_h) +#error "__riscv_h" +#endif + + return 0; +}