From patchwork Tue Mar 31 09:06:51 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kito Cheng X-Patchwork-Id: 1264606 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=sourceware.org; envelope-from=gcc-patches-bounces@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=sifive.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=sifive.com header.i=@sifive.com header.a=rsa-sha256 header.s=google header.b=ijxarbbm; dkim-atps=neutral Received: from sourceware.org (unknown [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 48s3P73b73z9sSG for ; Tue, 31 Mar 2020 20:07:06 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id BBC07385DC04; Tue, 31 Mar 2020 09:07:03 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-pj1-x102e.google.com (mail-pj1-x102e.google.com [IPv6:2607:f8b0:4864:20::102e]) by sourceware.org (Postfix) with ESMTPS id 4E075385B835 for ; Tue, 31 Mar 2020 09:07:00 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 4E075385B835 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=sifive.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=kito.cheng@sifive.com Received: by mail-pj1-x102e.google.com with SMTP id v13so814841pjb.0 for ; Tue, 31 Mar 2020 02:07:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=7Bd4gaRIhcl6z5jZOZ7mamd64Xy5Dmf0xj4W1LIuFGA=; b=ijxarbbmOVDQOesvfYw0ibv614KUdgqOpgd932n9nl0n9Onv3KEn9MWrS29cgsuSVI onLXTSpaCh94pLEK5CILYrqr+fH8vEDWun7fpe/9fl44ubpn4L2uQXjITo6N3p0rQn9L xr/PJcAFcn1f6F4nMexIJvKaxNx3S3u+UPhS3LlWcsJ9jkAAw3rBFVi3EbnVKva2rIss XChooZYJCk8h3jSUTnQZTj9+2OdIH1KF/K41wKqinfvZST3JlwVRhERwLgn+TS93H11x TMQI2FxpfDr0mn4ftuK0kwfl6v9t2s3Jd73sWbACqYxQjJNmPnJW46SvXFY+Z0ND16d7 i7Gg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=7Bd4gaRIhcl6z5jZOZ7mamd64Xy5Dmf0xj4W1LIuFGA=; b=gjcTp6fdOG7ec8MFsU98Mtg9tTJD9MZpWvx4OXMjrVM+oHH7JR95yuAm3x12lFek/O VLftCPCAqV4cm9DC2fVVHWNYpXNMvlN1++c+29fn8uXfgmJyYCmpvMlPYFoQXXRGRLPP 7Q0TZiklwAYkEtlDrF5yysUjvHs4t6okhvKlFjMqkAhE+AOudK7K/zbR36wDTZVq22f6 JhYo14Byza4ZVVgcIuDYJc50nhoq8+2P03UsRHS2y1yfceN0dUg2w8Wm8Qg64UFuck7g w0GyrmCKl51sjK5sAm4bLIBb74yBcLNpPjTA2smiY+4CFshr8may2JT8CFU2ochob+vv QSrQ== X-Gm-Message-State: AGi0PuZT4UnMQWzP+s9S0ODkQUgSOrozJNU4xFL/NM7hy6sejoWg1sBR Ws54WZ+JL0ZZK69skir/CBQXO/kbLpeM4w== X-Google-Smtp-Source: APiQypKao0n5kv/zEeA8XJFtI1dqsyh6LcfsnvavCfmZuINpPoja18b+jh0nhKIg3mUO2cNhdSuNIQ== X-Received: by 2002:a17:90a:7184:: with SMTP id i4mr2672738pjk.40.1585645618831; Tue, 31 Mar 2020 02:06:58 -0700 (PDT) Received: from hsinchu02.internal.sifive.com (220-132-236-182.HINET-IP.hinet.net. [220.132.236.182]) by smtp.gmail.com with ESMTPSA id r7sm11970963pfg.38.2020.03.31.02.06.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 31 Mar 2020 02:06:58 -0700 (PDT) From: Kito Cheng To: gcc-patches@gcc.gnu.org, kito.cheng@gmail.com, jimw@sifive.com Subject: [PATCH 1/2] RISC-V: Update march parser Date: Tue, 31 Mar 2020 17:06:51 +0800 Message-Id: <20200331090652.65252-1-kito.cheng@sifive.com> X-Mailer: git-send-email 2.25.2 MIME-Version: 1.0 X-Spam-Status: No, score=-27.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) 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@gcc.gnu.org Sender: "Gcc-patches" - The arch string rule has changed in latest spec, it introduced new multi-letter extension prefix with 'h' and 'z', and drop `sx`. also adjust parsing order for 's' and 'x'. gcc/ChangeLog * riscv-common.c (parse_sv_or_non_std_ext): Rename to parse_multiletter_ext. (parse_multiletter_ext): Add parsing `h` and `z`, drop `sx`, adjust parsing order for 's' and 'x'. gcc/testsuite/ChangeLog * gcc.target/riscv/arch-3.c: Adjust option. * gcc.target/riscv/arch-5.c: New. * gcc.target/riscv/attribute-9.c: Adjust option and test condition. --- gcc/common/config/riscv/riscv-common.c | 40 ++++++++++---------- gcc/testsuite/gcc.target/riscv/arch-3.c | 2 +- gcc/testsuite/gcc.target/riscv/arch-5.c | 5 +++ gcc/testsuite/gcc.target/riscv/attribute-9.c | 4 +- 4 files changed, 28 insertions(+), 23 deletions(-) create mode 100644 gcc/testsuite/gcc.target/riscv/arch-5.c diff --git a/gcc/common/config/riscv/riscv-common.c b/gcc/common/config/riscv/riscv-common.c index d2ef83b1971..a2e8d7003cc 100644 --- a/gcc/common/config/riscv/riscv-common.c +++ b/gcc/common/config/riscv/riscv-common.c @@ -70,8 +70,8 @@ private: const char *parse_std_ext (const char *); - const char *parse_sv_or_non_std_ext (const char *, const char *, - const char *); + const char *parse_multiletter_ext (const char *, const char *, + const char *); public: ~riscv_subset_list (); @@ -357,7 +357,7 @@ riscv_subset_list::parse_std_ext (const char *p) { char subset[2] = {0, 0}; - if (*p == 'x' || *p == 's') + if (*p == 'x' || *p == 's' || *p == 'h' || *p == 'z') break; if (*p == '_') @@ -399,20 +399,20 @@ riscv_subset_list::parse_std_ext (const char *p) return p; } -/* Parsing function for non-standard and supervisor extensions. +/* Parsing function for multi-letter extensions. Return Value: Points to the end of extensions. Arguments: `p`: Current parsing position. - `ext_type`: What kind of extensions, 'x', 's' or 'sx'. + `ext_type`: What kind of extensions, 's', 'h', 'z' or 'x'. `ext_type_str`: Full name for kind of extension. */ const char * -riscv_subset_list::parse_sv_or_non_std_ext (const char *p, - const char *ext_type, - const char *ext_type_str) +riscv_subset_list::parse_multiletter_ext (const char *p, + const char *ext_type, + const char *ext_type_str) { unsigned major_version = 0; unsigned minor_version = 0; @@ -429,11 +429,6 @@ riscv_subset_list::parse_sv_or_non_std_ext (const char *p, if (strncmp (p, ext_type, ext_type_len) != 0) break; - /* It's non-standard supervisor extension if it prefix with sx. */ - if ((ext_type[0] == 's') && (ext_type_len == 1) - && (*(p + 1) == 'x')) - break; - char *subset = xstrdup (p); char *q = subset; const char *end_of_version; @@ -494,21 +489,26 @@ riscv_subset_list::parse (const char *arch, location_t loc) if (p == NULL) goto fail; - /* Parsing non-standard extension. */ - p = subset_list->parse_sv_or_non_std_ext (p, "x", "non-standard extension"); + /* Parsing supervisor extension. */ + p = subset_list->parse_multiletter_ext (p, "s", "supervisor extension"); if (p == NULL) goto fail; - /* Parsing supervisor extension. */ - p = subset_list->parse_sv_or_non_std_ext (p, "s", "supervisor extension"); + /* Parsing hypervisor extension. */ + p = subset_list->parse_multiletter_ext (p, "h", "hypervisor extension"); if (p == NULL) goto fail; - /* Parsing non-standard supervisor extension. */ - p = subset_list->parse_sv_or_non_std_ext - (p, "sx", "non-standard supervisor extension"); + /* Parsing sub-extensions. */ + p = subset_list->parse_multiletter_ext (p, "z", "sub-extension"); + + if (p == NULL) + goto fail; + + /* Parsing non-standard extension. */ + p = subset_list->parse_multiletter_ext (p, "x", "non-standard extension"); if (p == NULL) goto fail; diff --git a/gcc/testsuite/gcc.target/riscv/arch-3.c b/gcc/testsuite/gcc.target/riscv/arch-3.c index 6aaa0a650fa..124699405c5 100644 --- a/gcc/testsuite/gcc.target/riscv/arch-3.c +++ b/gcc/testsuite/gcc.target/riscv/arch-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O -march=rv32ixbar_sabc_sxfoo -mabi=ilp32" } */ +/* { dg-options "-O -march=rv32isabc_xbar -mabi=ilp32" } */ int foo() { } diff --git a/gcc/testsuite/gcc.target/riscv/arch-5.c b/gcc/testsuite/gcc.target/riscv/arch-5.c new file mode 100644 index 00000000000..b0a1bd445fe --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/arch-5.c @@ -0,0 +1,5 @@ +/* { dg-do compile } */ +/* { dg-options "-O -march=rv32isabc_hghi_zfoo_xbar -mabi=ilp32" } */ +int foo() +{ +} diff --git a/gcc/testsuite/gcc.target/riscv/attribute-9.c b/gcc/testsuite/gcc.target/riscv/attribute-9.c index 670944a1cbe..bc4db0eb647 100644 --- a/gcc/testsuite/gcc.target/riscv/attribute-9.c +++ b/gcc/testsuite/gcc.target/riscv/attribute-9.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ -/* { dg-options "-O -mriscv-attribute -march=rv32i2p0xbar_sabc_sxfoo -mabi=ilp32e" } */ +/* { dg-options "-O -mriscv-attribute -march=rv32i2p0sabc_xbar -mabi=ilp32e" } */ int foo() { } -/* { dg-final { scan-assembler ".attribute arch, \"rv32i2p0_xbar2p0_sabc2p0_sxfoo2p0\"" } } */ +/* { dg-final { scan-assembler ".attribute arch, \"rv32i2p0_sabc2p0_xbar2p0\"" } } */