From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 38213 invoked by alias); 12 Feb 2020 10:19:03 -0000 Mailing-List: contact binutils-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: binutils-owner@sourceware.org Received: (qmail 38131 invoked by uid 89); 12 Feb 2020 10:19:03 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-24.2 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.1 spammy= X-HELO: mail-pf1-f193.google.com Received: from mail-pf1-f193.google.com (HELO mail-pf1-f193.google.com) (209.85.210.193) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 12 Feb 2020 10:19:01 +0000 Received: by mail-pf1-f193.google.com with SMTP id i6so1029607pfc.1 for ; Wed, 12 Feb 2020 02:19:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:subject:date:message-id:in-reply-to:references; bh=u/JcGuAEbUdKDZKerfazIYRhyXiiH1Ft5ibIkcULc04=; b=Fguh/OZe4J+k3XdWjZq3n28fcgKaSHPsw0nJfqKPau3xKvInoZe1JCSCwMDcEUAS2E NjA4jjPhdYABksQD3UDQmgEaT1Nln3gCgkpASm1IHPQ2T19/plXY2DWjDDZpK86L5Dm0 JL/T65T++Nd/CDaRwBocxhnjb3AJSU5WKVB8TcGvT4FprAkeEeYQO2qgwJQY7tGvmRk/ 4VNljSuJQUzrKInFA+aYB+MAmV4jMaMQj8FsAgcNn5/Y3Yf25deZQeMelo3Y1tXBJcON XPITLl3ERSCCSaC8IfSa9WJ+UIs8lbtPb70mze9kmZ+O0qaunBDH3Hz4Rdz8gVf1H/Nh qFww== Return-Path: Received: from gamma05.internal.sifive.com ([64.62.193.194]) by smtp.gmail.com with ESMTPSA id w2sm7427260pgj.41.2020.02.12.02.18.58 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 12 Feb 2020 02:18:58 -0800 (PST) From: Nelson Chu To: binutils@sourceware.org, jimw@sifive.com, andrew.burgess@embecosm.com Subject: [PATCH 2/3] RISC-V: Disable the CSR checking by default. Date: Wed, 12 Feb 2020 10:19:00 -0000 Message-Id: <1581502731-28327-3-git-send-email-nelson.chu@sifive.com> In-Reply-To: <1581502731-28327-1-git-send-email-nelson.chu@sifive.com> References: <1581502731-28327-1-git-send-email-nelson.chu@sifive.com> X-IsSubscribed: yes X-SW-Source: 2020-02/txt/msg00214.txt.bz2 Add new .option `csr-check/no-csr-check` and GAS option `-mcsr-check /-mno-csr-check` to enbale/disable the CSR checking. Disable the CSR checking by default. gas/ * config/tc-riscv.c: Add new .option and GAS options to enbale/disable the CSR checking. We disable the CSR checking by default. (reg_lookup_internal): Check the `riscv_opts.csr_check` before we doing the CSR checking. * doc/c-riscv.texi: Add description for the new .option and assembler options. * testsuite/gas/riscv/priv-reg-fail-fext.d: Add `-mcsr-check` to enable the CSR checking. * testsuite/gas/riscv/priv-reg-fail-rv32-only.d: Likewise. --- gas/config/tc-riscv.c | 22 +++++++++++++++++++++- gas/doc/c-riscv.texi | 13 +++++++++++++ gas/testsuite/gas/riscv/priv-reg-fail-fext.d | 2 +- gas/testsuite/gas/riscv/priv-reg-fail-rv32-only.d | 2 +- 4 files changed, 36 insertions(+), 3 deletions(-) diff --git a/gas/config/tc-riscv.c b/gas/config/tc-riscv.c index 2f95d41..5972f02 100644 --- a/gas/config/tc-riscv.c +++ b/gas/config/tc-riscv.c @@ -83,6 +83,7 @@ struct riscv_set_options int rve; /* Generate RVE code. */ int relax; /* Emit relocs the linker is allowed to relax. */ int arch_attr; /* Emit arch attribute. */ + int csr_check; /* Enable the CSR checking. */ }; static struct riscv_set_options riscv_opts = @@ -92,6 +93,7 @@ static struct riscv_set_options riscv_opts = 0, /* rve */ 1, /* relax */ DEFAULT_RISCV_ATTR, /* arch_attr */ + 0. /* csr_check */ }; static void @@ -572,7 +574,9 @@ reg_lookup_internal (const char *s, enum reg_class class) if (riscv_opts.rve && class == RCLASS_GPR && DECODE_REG_NUM (r) > 15) return -1; - if (class == RCLASS_CSR && !reg_csr_lookup_internal (s)) + if (class == RCLASS_CSR + && riscv_opts.csr_check + && !reg_csr_lookup_internal (s)) return -1; return DECODE_REG_NUM (r); @@ -2272,6 +2276,8 @@ enum options OPTION_NO_RELAX, OPTION_ARCH_ATTR, OPTION_NO_ARCH_ATTR, + OPTION_CSR_CHECK, + OPTION_NO_CSR_CHECK, OPTION_END_OF_ENUM }; @@ -2286,6 +2292,8 @@ struct option md_longopts[] = {"mno-relax", no_argument, NULL, OPTION_NO_RELAX}, {"march-attr", no_argument, NULL, OPTION_ARCH_ATTR}, {"mno-arch-attr", no_argument, NULL, OPTION_NO_ARCH_ATTR}, + {"mcsr-check", no_argument, NULL, OPTION_CSR_CHECK}, + {"mno-csr-check", no_argument, NULL, OPTION_NO_CSR_CHECK}, {NULL, no_argument, NULL, 0} }; @@ -2364,6 +2372,14 @@ md_parse_option (int c, const char *arg) riscv_opts.arch_attr = FALSE; break; + case OPTION_CSR_CHECK: + riscv_opts.csr_check = TRUE; + break; + + case OPTION_NO_CSR_CHECK: + riscv_opts.csr_check = FALSE; + break; + default: return 0; } @@ -2756,6 +2772,10 @@ s_riscv_option (int x ATTRIBUTE_UNUSED) riscv_opts.relax = TRUE; else if (strcmp (name, "norelax") == 0) riscv_opts.relax = FALSE; + else if (strcmp (name, "csr-check") == 0) + riscv_opts.csr_check = TRUE; + else if (strcmp (name, "no-csr-check") == 0) + riscv_opts.csr_check = FALSE; else if (strcmp (name, "push") == 0) { struct riscv_option_stack *s; diff --git a/gas/doc/c-riscv.texi b/gas/doc/c-riscv.texi index 0976651..83187dc 100644 --- a/gas/doc/c-riscv.texi +++ b/gas/doc/c-riscv.texi @@ -59,6 +59,15 @@ required to materialize symbol addresses. (default) @item -mno-relax Don't do linker relaxations. +@cindex @samp{-mcsr-check} option, RISC-V +@item -mcsr-check +Enable the CSR checking for the ISA-dependent CRS and the read-only CSR. +The ISA-dependent CSR are only valid when the specific ISA is set. The +read-only CSR can not be written by the CSR instructions. + +@cindex @samp{-mno-csr-check} option, RISC-V +@item -mno-csr-check +Don't do CSR cheching. @end table @c man end @@ -160,6 +169,10 @@ opportunistically relax some code sequences, but sometimes this behavior is not desirable. @end table +@item csr-check +@itemx no-csr-check +Enables or disables the CSR checking. + @cindex INSN directives @item .insn @var{value} @itemx .insn @var{value} diff --git a/gas/testsuite/gas/riscv/priv-reg-fail-fext.d b/gas/testsuite/gas/riscv/priv-reg-fail-fext.d index 78ab758..da53566 100644 --- a/gas/testsuite/gas/riscv/priv-reg-fail-fext.d +++ b/gas/testsuite/gas/riscv/priv-reg-fail-fext.d @@ -1,3 +1,3 @@ -#as: -march=rv32i +#as: -march=rv32i -mcsr-check #source: priv-reg.s #warning_output: priv-reg-fail-fext.l diff --git a/gas/testsuite/gas/riscv/priv-reg-fail-rv32-only.d b/gas/testsuite/gas/riscv/priv-reg-fail-rv32-only.d index 5dc840a..d71b261 100644 --- a/gas/testsuite/gas/riscv/priv-reg-fail-rv32-only.d +++ b/gas/testsuite/gas/riscv/priv-reg-fail-rv32-only.d @@ -1,3 +1,3 @@ -#as: -march=rv64if +#as: -march=rv64if -mcsr-check #source: priv-reg.s #warning_output: priv-reg-fail-rv32-only.l -- 2.7.4