RISC-V: PR25212, Report errors for invalid march and mabi combinations.

Message ID 20210521091106.25370-1-nelson.chu@sifive.com
State New
Headers show
Series
  • RISC-V: PR25212, Report errors for invalid march and mabi combinations.
Related show

Commit Message

Nelson Chu May 21, 2021, 9:11 a.m.
This patch clarify the following invalid combinations of march and mabi,
* ilp32f/lp64f abi without f extension.
* ilp32d/lp64d abi without d extension.
* ilp32q/lp64q abi without q extension.
* e extension with any abi except ilp32e

GNU assembler reports errors when finding the above invalid combinations.
But LLVM-MC reports warnings and ignores these invalid cases.  It help to
set the correct ilp32/lp64/ilp32e abi according to rv32/rv64/rve.  This
looks good and convenient, so perhaps we can do the same things.  However,
if you don't set the mabi, GNU assembler also try to set the suitable
ABI according to march/elf-attribute.  Compared to LLVM-MC, we will choose
double/quad abi if d/f extension is set.

gas/
    * config/tc-riscv.c (riscv_set_abi_by_arch): If -mabi isn't set, we
    will choose ilp32e abi for rv32e.  Besides, report errors for the
    invalid march and mabi combinations.
    * testsuite/gas/riscv/mabi-attr-rv32e.s: New testcase.  Only accept
    ilp32e abi for rve extension.
    * testsuite/gas/riscv/mabi-fail-rv32e-lp64f.d: Likewise.
    * testsuite/gas/riscv/mabi-fail-rv32e-lp64f.l: Likewise.
    * testsuite/gas/riscv/mabi-fail-rv32e-lp64d.d: Likewise.
    * testsuite/gas/riscv/mabi-fail-rv32e-lp64d.l: Likewise.
    * testsuite/gas/riscv/mabi-fail-rv32e-lp64d.q: Likewise.
    * testsuite/gas/riscv/mabi-fail-rv32e-lp64d.q: Likewise.
    Renamed all mabi testcases to their march-mabi settings.
---
 gas/config/tc-riscv.c                          | 18 ++++++++++++++++++
 gas/testsuite/gas/riscv/mabi-attr-rv32e.s      |  1 +
 .../{mabi-attr-01.s => mabi-attr-rv32i.s}      |  0
 .../{mabi-attr-02.s => mabi-attr-rv32id.s}     |  0
 .../{mabi-attr-03.s => mabi-attr-rv64iq.s}     |  0
 gas/testsuite/gas/riscv/mabi-fail-01.d         |  3 ---
 gas/testsuite/gas/riscv/mabi-fail-02.d         |  3 ---
 .../gas/riscv/mabi-fail-rv32e-lp64d.d          |  3 +++
 .../gas/riscv/mabi-fail-rv32e-lp64d.l          |  4 ++++
 .../gas/riscv/mabi-fail-rv32e-lp64f.d          |  3 +++
 .../gas/riscv/mabi-fail-rv32e-lp64f.l          |  4 ++++
 .../gas/riscv/mabi-fail-rv32e-lp64q.d          |  3 +++
 .../gas/riscv/mabi-fail-rv32e-lp64q.l          |  4 ++++
 gas/testsuite/gas/riscv/mabi-fail-rv32i-lp64.d |  3 +++
 .../{mabi-fail-01.l => mabi-fail-rv32i-lp64.l} |  0
 .../gas/riscv/mabi-fail-rv64iq-ilp32.d         |  3 +++
 ...mabi-fail-02.l => mabi-fail-rv64iq-ilp32.l} |  0
 ...i-attr-01a.d => mabi-noabi-attr-rv32i-01.d} |  4 ++--
 ...i-attr-01b.d => mabi-noabi-attr-rv32i-02.d} |  4 ++--
 ...-attr-02a.d => mabi-noabi-attr-rv32id-01.d} |  2 +-
 ...-attr-02b.d => mabi-noabi-attr-rv32id-02.d} |  2 +-
 ...-attr-03a.d => mabi-noabi-attr-rv64iq-01.d} |  2 +-
 ...-attr-03b.d => mabi-noabi-attr-rv64iq-02.d} |  2 +-
 ...abi-march-01.d => mabi-noabi-march-rv32i.d} |  0
 ...bi-march-02.d => mabi-noabi-march-rv32id.d} |  2 +-
 ...bi-march-03.d => mabi-noabi-march-rv64iq.d} |  2 +-
 26 files changed, 56 insertions(+), 16 deletions(-)
 create mode 100644 gas/testsuite/gas/riscv/mabi-attr-rv32e.s
 rename gas/testsuite/gas/riscv/{mabi-attr-01.s => mabi-attr-rv32i.s} (100%)
 rename gas/testsuite/gas/riscv/{mabi-attr-02.s => mabi-attr-rv32id.s} (100%)
 rename gas/testsuite/gas/riscv/{mabi-attr-03.s => mabi-attr-rv64iq.s} (100%)
 delete mode 100644 gas/testsuite/gas/riscv/mabi-fail-01.d
 delete mode 100644 gas/testsuite/gas/riscv/mabi-fail-02.d
 create mode 100644 gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64d.d
 create mode 100644 gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64d.l
 create mode 100644 gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64f.d
 create mode 100644 gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64f.l
 create mode 100644 gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64q.d
 create mode 100644 gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64q.l
 create mode 100644 gas/testsuite/gas/riscv/mabi-fail-rv32i-lp64.d
 rename gas/testsuite/gas/riscv/{mabi-fail-01.l => mabi-fail-rv32i-lp64.l} (100%)
 create mode 100644 gas/testsuite/gas/riscv/mabi-fail-rv64iq-ilp32.d
 rename gas/testsuite/gas/riscv/{mabi-fail-02.l => mabi-fail-rv64iq-ilp32.l} (100%)
 rename gas/testsuite/gas/riscv/{mabi-noabi-attr-01a.d => mabi-noabi-attr-rv32i-01.d} (58%)
 rename gas/testsuite/gas/riscv/{mabi-noabi-attr-01b.d => mabi-noabi-attr-rv32i-02.d} (71%)
 rename gas/testsuite/gas/riscv/{mabi-noabi-attr-02a.d => mabi-noabi-attr-rv32id-01.d} (82%)
 rename gas/testsuite/gas/riscv/{mabi-noabi-attr-02b.d => mabi-noabi-attr-rv32id-02.d} (86%)
 rename gas/testsuite/gas/riscv/{mabi-noabi-attr-03a.d => mabi-noabi-attr-rv64iq-01.d} (82%)
 rename gas/testsuite/gas/riscv/{mabi-noabi-attr-03b.d => mabi-noabi-attr-rv64iq-02.d} (86%)
 rename gas/testsuite/gas/riscv/{mabi-noabi-march-01.d => mabi-noabi-march-rv32i.d} (100%)
 rename gas/testsuite/gas/riscv/{mabi-noabi-march-02.d => mabi-noabi-march-rv32id.d} (85%)
 rename gas/testsuite/gas/riscv/{mabi-noabi-march-03.d => mabi-noabi-march-rv64iq.d} (84%)

-- 
2.30.2

Comments

Nelson Chu May 24, 2021, 3:49 a.m. | #1
Committed.  We can fix the problems if found in the future.

Thanks
Nelson

On Fri, May 21, 2021 at 5:11 PM Nelson Chu <nelson.chu@sifive.com> wrote:
>

> This patch clarify the following invalid combinations of march and mabi,

> * ilp32f/lp64f abi without f extension.

> * ilp32d/lp64d abi without d extension.

> * ilp32q/lp64q abi without q extension.

> * e extension with any abi except ilp32e

>

> GNU assembler reports errors when finding the above invalid combinations.

> But LLVM-MC reports warnings and ignores these invalid cases.  It help to

> set the correct ilp32/lp64/ilp32e abi according to rv32/rv64/rve.  This

> looks good and convenient, so perhaps we can do the same things.  However,

> if you don't set the mabi, GNU assembler also try to set the suitable

> ABI according to march/elf-attribute.  Compared to LLVM-MC, we will choose

> double/quad abi if d/f extension is set.

>

> gas/

>     * config/tc-riscv.c (riscv_set_abi_by_arch): If -mabi isn't set, we

>     will choose ilp32e abi for rv32e.  Besides, report errors for the

>     invalid march and mabi combinations.

>     * testsuite/gas/riscv/mabi-attr-rv32e.s: New testcase.  Only accept

>     ilp32e abi for rve extension.

>     * testsuite/gas/riscv/mabi-fail-rv32e-lp64f.d: Likewise.

>     * testsuite/gas/riscv/mabi-fail-rv32e-lp64f.l: Likewise.

>     * testsuite/gas/riscv/mabi-fail-rv32e-lp64d.d: Likewise.

>     * testsuite/gas/riscv/mabi-fail-rv32e-lp64d.l: Likewise.

>     * testsuite/gas/riscv/mabi-fail-rv32e-lp64d.q: Likewise.

>     * testsuite/gas/riscv/mabi-fail-rv32e-lp64d.q: Likewise.

>     Renamed all mabi testcases to their march-mabi settings.

> ---

>  gas/config/tc-riscv.c                          | 18 ++++++++++++++++++

>  gas/testsuite/gas/riscv/mabi-attr-rv32e.s      |  1 +

>  .../{mabi-attr-01.s => mabi-attr-rv32i.s}      |  0

>  .../{mabi-attr-02.s => mabi-attr-rv32id.s}     |  0

>  .../{mabi-attr-03.s => mabi-attr-rv64iq.s}     |  0

>  gas/testsuite/gas/riscv/mabi-fail-01.d         |  3 ---

>  gas/testsuite/gas/riscv/mabi-fail-02.d         |  3 ---

>  .../gas/riscv/mabi-fail-rv32e-lp64d.d          |  3 +++

>  .../gas/riscv/mabi-fail-rv32e-lp64d.l          |  4 ++++

>  .../gas/riscv/mabi-fail-rv32e-lp64f.d          |  3 +++

>  .../gas/riscv/mabi-fail-rv32e-lp64f.l          |  4 ++++

>  .../gas/riscv/mabi-fail-rv32e-lp64q.d          |  3 +++

>  .../gas/riscv/mabi-fail-rv32e-lp64q.l          |  4 ++++

>  gas/testsuite/gas/riscv/mabi-fail-rv32i-lp64.d |  3 +++

>  .../{mabi-fail-01.l => mabi-fail-rv32i-lp64.l} |  0

>  .../gas/riscv/mabi-fail-rv64iq-ilp32.d         |  3 +++

>  ...mabi-fail-02.l => mabi-fail-rv64iq-ilp32.l} |  0

>  ...i-attr-01a.d => mabi-noabi-attr-rv32i-01.d} |  4 ++--

>  ...i-attr-01b.d => mabi-noabi-attr-rv32i-02.d} |  4 ++--

>  ...-attr-02a.d => mabi-noabi-attr-rv32id-01.d} |  2 +-

>  ...-attr-02b.d => mabi-noabi-attr-rv32id-02.d} |  2 +-

>  ...-attr-03a.d => mabi-noabi-attr-rv64iq-01.d} |  2 +-

>  ...-attr-03b.d => mabi-noabi-attr-rv64iq-02.d} |  2 +-

>  ...abi-march-01.d => mabi-noabi-march-rv32i.d} |  0

>  ...bi-march-02.d => mabi-noabi-march-rv32id.d} |  2 +-

>  ...bi-march-03.d => mabi-noabi-march-rv64iq.d} |  2 +-

>  26 files changed, 56 insertions(+), 16 deletions(-)

>  create mode 100644 gas/testsuite/gas/riscv/mabi-attr-rv32e.s

>  rename gas/testsuite/gas/riscv/{mabi-attr-01.s => mabi-attr-rv32i.s} (100%)

>  rename gas/testsuite/gas/riscv/{mabi-attr-02.s => mabi-attr-rv32id.s} (100%)

>  rename gas/testsuite/gas/riscv/{mabi-attr-03.s => mabi-attr-rv64iq.s} (100%)

>  delete mode 100644 gas/testsuite/gas/riscv/mabi-fail-01.d

>  delete mode 100644 gas/testsuite/gas/riscv/mabi-fail-02.d

>  create mode 100644 gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64d.d

>  create mode 100644 gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64d.l

>  create mode 100644 gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64f.d

>  create mode 100644 gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64f.l

>  create mode 100644 gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64q.d

>  create mode 100644 gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64q.l

>  create mode 100644 gas/testsuite/gas/riscv/mabi-fail-rv32i-lp64.d

>  rename gas/testsuite/gas/riscv/{mabi-fail-01.l => mabi-fail-rv32i-lp64.l} (100%)

>  create mode 100644 gas/testsuite/gas/riscv/mabi-fail-rv64iq-ilp32.d

>  rename gas/testsuite/gas/riscv/{mabi-fail-02.l => mabi-fail-rv64iq-ilp32.l} (100%)

>  rename gas/testsuite/gas/riscv/{mabi-noabi-attr-01a.d => mabi-noabi-attr-rv32i-01.d} (58%)

>  rename gas/testsuite/gas/riscv/{mabi-noabi-attr-01b.d => mabi-noabi-attr-rv32i-02.d} (71%)

>  rename gas/testsuite/gas/riscv/{mabi-noabi-attr-02a.d => mabi-noabi-attr-rv32id-01.d} (82%)

>  rename gas/testsuite/gas/riscv/{mabi-noabi-attr-02b.d => mabi-noabi-attr-rv32id-02.d} (86%)

>  rename gas/testsuite/gas/riscv/{mabi-noabi-attr-03a.d => mabi-noabi-attr-rv64iq-01.d} (82%)

>  rename gas/testsuite/gas/riscv/{mabi-noabi-attr-03b.d => mabi-noabi-attr-rv64iq-02.d} (86%)

>  rename gas/testsuite/gas/riscv/{mabi-noabi-march-01.d => mabi-noabi-march-rv32i.d} (100%)

>  rename gas/testsuite/gas/riscv/{mabi-noabi-march-02.d => mabi-noabi-march-rv32id.d} (85%)

>  rename gas/testsuite/gas/riscv/{mabi-noabi-march-03.d => mabi-noabi-march-rv64iq.d} (84%)

>

> diff --git a/gas/config/tc-riscv.c b/gas/config/tc-riscv.c

> index 3fff33e9a11..a76e53d51c3 100644

> --- a/gas/config/tc-riscv.c

> +++ b/gas/config/tc-riscv.c

> @@ -441,6 +441,8 @@ riscv_set_abi_by_arch (void)

>         riscv_set_abi (xlen, FLOAT_ABI_QUAD, false);

>        else if (riscv_subset_supports ("d"))

>         riscv_set_abi (xlen, FLOAT_ABI_DOUBLE, false);

> +      else if (riscv_subset_supports ("e"))

> +       riscv_set_abi (xlen, FLOAT_ABI_SOFT, true);

>        else

>         riscv_set_abi (xlen, FLOAT_ABI_SOFT, false);

>      }

> @@ -451,6 +453,22 @@ riscv_set_abi_by_arch (void)

>         as_bad ("can't have %d-bit ABI on %d-bit ISA", abi_xlen, xlen);

>        else if (abi_xlen < xlen)

>         as_bad ("%d-bit ABI not yet supported on %d-bit ISA", abi_xlen, xlen);

> +

> +      if (riscv_subset_supports ("e") && !rve_abi)

> +       as_bad ("only the ilp32e ABI is supported for e extension");

> +

> +      if (float_abi == FLOAT_ABI_SINGLE

> +         && !riscv_subset_supports ("f"))

> +       as_bad ("ilp32f/lp64f ABI can't be used when f extension "

> +               "isn't supported");

> +      else if (float_abi == FLOAT_ABI_DOUBLE

> +              && !riscv_subset_supports ("d"))

> +       as_bad ("ilp32d/lp64d ABI can't be used when d extension "

> +               "isn't supported");

> +      else if (float_abi == FLOAT_ABI_QUAD

> +              && !riscv_subset_supports ("q"))

> +       as_bad ("ilp32q/lp64q ABI can't be used when q extension "

> +               "isn't supported");

>      }

>

>    /* Update the EF_RISCV_FLOAT_ABI field of elf_flags.  */

> diff --git a/gas/testsuite/gas/riscv/mabi-attr-rv32e.s b/gas/testsuite/gas/riscv/mabi-attr-rv32e.s

> new file mode 100644

> index 00000000000..846c0236bcb

> --- /dev/null

> +++ b/gas/testsuite/gas/riscv/mabi-attr-rv32e.s

> @@ -0,0 +1 @@

> +       .attribute arch,"rv32e"

> diff --git a/gas/testsuite/gas/riscv/mabi-attr-01.s b/gas/testsuite/gas/riscv/mabi-attr-rv32i.s

> similarity index 100%

> rename from gas/testsuite/gas/riscv/mabi-attr-01.s

> rename to gas/testsuite/gas/riscv/mabi-attr-rv32i.s

> diff --git a/gas/testsuite/gas/riscv/mabi-attr-02.s b/gas/testsuite/gas/riscv/mabi-attr-rv32id.s

> similarity index 100%

> rename from gas/testsuite/gas/riscv/mabi-attr-02.s

> rename to gas/testsuite/gas/riscv/mabi-attr-rv32id.s

> diff --git a/gas/testsuite/gas/riscv/mabi-attr-03.s b/gas/testsuite/gas/riscv/mabi-attr-rv64iq.s

> similarity index 100%

> rename from gas/testsuite/gas/riscv/mabi-attr-03.s

> rename to gas/testsuite/gas/riscv/mabi-attr-rv64iq.s

> diff --git a/gas/testsuite/gas/riscv/mabi-fail-01.d b/gas/testsuite/gas/riscv/mabi-fail-01.d

> deleted file mode 100644

> index 78049349330..00000000000

> --- a/gas/testsuite/gas/riscv/mabi-fail-01.d

> +++ /dev/null

> @@ -1,3 +0,0 @@

> -#as: -march-attr -mabi=lp64d

> -#source: mabi-attr-01.s

> -#error_output: mabi-fail-01.l

> diff --git a/gas/testsuite/gas/riscv/mabi-fail-02.d b/gas/testsuite/gas/riscv/mabi-fail-02.d

> deleted file mode 100644

> index 2d6cfb02465..00000000000

> --- a/gas/testsuite/gas/riscv/mabi-fail-02.d

> +++ /dev/null

> @@ -1,3 +0,0 @@

> -#as: -march-attr -mabi=ilp32

> -#source: mabi-attr-03.s

> -#error_output: mabi-fail-02.l

> diff --git a/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64d.d b/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64d.d

> new file mode 100644

> index 00000000000..04d402aa976

> --- /dev/null

> +++ b/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64d.d

> @@ -0,0 +1,3 @@

> +#as: -march-attr -mabi=lp64d

> +#source: mabi-attr-rv32e.s

> +#error_output: mabi-fail-rv32e-lp64d.l

> diff --git a/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64d.l b/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64d.l

> new file mode 100644

> index 00000000000..f7306cb24d2

> --- /dev/null

> +++ b/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64d.l

> @@ -0,0 +1,4 @@

> +.*Assembler messages:

> +.*Error: can't have 64-bit ABI on 32-bit ISA

> +.*Error: only the ilp32e ABI is supported for e extension

> +.*Error: ilp32d/lp64d ABI can't be used when d extension isn't supported

> diff --git a/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64f.d b/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64f.d

> new file mode 100644

> index 00000000000..b7a346465c7

> --- /dev/null

> +++ b/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64f.d

> @@ -0,0 +1,3 @@

> +#as: -march-attr -mabi=lp64f

> +#source: mabi-attr-rv32e.s

> +#error_output: mabi-fail-rv32e-lp64f.l

> diff --git a/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64f.l b/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64f.l

> new file mode 100644

> index 00000000000..706690ac9c6

> --- /dev/null

> +++ b/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64f.l

> @@ -0,0 +1,4 @@

> +.*Assembler messages:

> +.*Error: can't have 64-bit ABI on 32-bit ISA

> +.*Error: only the ilp32e ABI is supported for e extension

> +.*Error: ilp32f/lp64f ABI can't be used when f extension isn't supported

> diff --git a/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64q.d b/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64q.d

> new file mode 100644

> index 00000000000..e5d3c4e5d15

> --- /dev/null

> +++ b/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64q.d

> @@ -0,0 +1,3 @@

> +#as: -march-attr -mabi=lp64q

> +#source: mabi-attr-rv32e.s

> +#error_output: mabi-fail-rv32e-lp64q.l

> diff --git a/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64q.l b/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64q.l

> new file mode 100644

> index 00000000000..ab64b1546f6

> --- /dev/null

> +++ b/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64q.l

> @@ -0,0 +1,4 @@

> +.*Assembler messages:

> +.*Error: can't have 64-bit ABI on 32-bit ISA

> +.*Error: only the ilp32e ABI is supported for e extension

> +.*Error: ilp32q/lp64q ABI can't be used when q extension isn't supported

> diff --git a/gas/testsuite/gas/riscv/mabi-fail-rv32i-lp64.d b/gas/testsuite/gas/riscv/mabi-fail-rv32i-lp64.d

> new file mode 100644

> index 00000000000..469a53611fb

> --- /dev/null

> +++ b/gas/testsuite/gas/riscv/mabi-fail-rv32i-lp64.d

> @@ -0,0 +1,3 @@

> +#as: -march-attr -mabi=lp64

> +#source: mabi-attr-rv32i.s

> +#error_output: mabi-fail-rv32i-lp64.l

> diff --git a/gas/testsuite/gas/riscv/mabi-fail-01.l b/gas/testsuite/gas/riscv/mabi-fail-rv32i-lp64.l

> similarity index 100%

> rename from gas/testsuite/gas/riscv/mabi-fail-01.l

> rename to gas/testsuite/gas/riscv/mabi-fail-rv32i-lp64.l

> diff --git a/gas/testsuite/gas/riscv/mabi-fail-rv64iq-ilp32.d b/gas/testsuite/gas/riscv/mabi-fail-rv64iq-ilp32.d

> new file mode 100644

> index 00000000000..e3155f48956

> --- /dev/null

> +++ b/gas/testsuite/gas/riscv/mabi-fail-rv64iq-ilp32.d

> @@ -0,0 +1,3 @@

> +#as: -march-attr -mabi=ilp32

> +#source: mabi-attr-rv64iq.s

> +#error_output: mabi-fail-rv64iq-ilp32.l

> diff --git a/gas/testsuite/gas/riscv/mabi-fail-02.l b/gas/testsuite/gas/riscv/mabi-fail-rv64iq-ilp32.l

> similarity index 100%

> rename from gas/testsuite/gas/riscv/mabi-fail-02.l

> rename to gas/testsuite/gas/riscv/mabi-fail-rv64iq-ilp32.l

> diff --git a/gas/testsuite/gas/riscv/mabi-noabi-attr-01a.d b/gas/testsuite/gas/riscv/mabi-noabi-attr-rv32i-01.d

> similarity index 58%

> rename from gas/testsuite/gas/riscv/mabi-noabi-attr-01a.d

> rename to gas/testsuite/gas/riscv/mabi-noabi-attr-rv32i-01.d

> index 11d3ed91617..b58b9043729 100644

> --- a/gas/testsuite/gas/riscv/mabi-noabi-attr-01a.d

> +++ b/gas/testsuite/gas/riscv/mabi-noabi-attr-rv32i-01.d

> @@ -1,6 +1,6 @@

> -#as: -march-attr -march=rv64ifd

> +#as: -march-attr -march=rv64id

>  #readelf: -h

> -#source: mabi-attr-01.s

> +#source: mabi-attr-rv32i.s

>

>  ELF Header:

>  #...

> diff --git a/gas/testsuite/gas/riscv/mabi-noabi-attr-01b.d b/gas/testsuite/gas/riscv/mabi-noabi-attr-rv32i-02.d

> similarity index 71%

> rename from gas/testsuite/gas/riscv/mabi-noabi-attr-01b.d

> rename to gas/testsuite/gas/riscv/mabi-noabi-attr-rv32i-02.d

> index b50ac3c240a..56dcd0ff31a 100644

> --- a/gas/testsuite/gas/riscv/mabi-noabi-attr-01b.d

> +++ b/gas/testsuite/gas/riscv/mabi-noabi-attr-rv32i-02.d

> @@ -1,6 +1,6 @@

> -#as: -march-attr -march=rv64ifd

> +#as: -march-attr -march=rv64id

>  #objdump: -d

> -#source: mabi-attr-01.s

> +#source: mabi-attr-rv32i.s

>

>  .*:[   ]+file format elf32.*

>

> diff --git a/gas/testsuite/gas/riscv/mabi-noabi-attr-02a.d b/gas/testsuite/gas/riscv/mabi-noabi-attr-rv32id-01.d

> similarity index 82%

> rename from gas/testsuite/gas/riscv/mabi-noabi-attr-02a.d

> rename to gas/testsuite/gas/riscv/mabi-noabi-attr-rv32id-01.d

> index 9668066aadd..425e5d15e32 100644

> --- a/gas/testsuite/gas/riscv/mabi-noabi-attr-02a.d

> +++ b/gas/testsuite/gas/riscv/mabi-noabi-attr-rv32id-01.d

> @@ -1,6 +1,6 @@

>  #as: -march-attr -march=rv64i

>  #readelf: -h

> -#source: mabi-attr-02.s

> +#source: mabi-attr-rv32id.s

>

>  ELF Header:

>  #...

> diff --git a/gas/testsuite/gas/riscv/mabi-noabi-attr-02b.d b/gas/testsuite/gas/riscv/mabi-noabi-attr-rv32id-02.d

> similarity index 86%

> rename from gas/testsuite/gas/riscv/mabi-noabi-attr-02b.d

> rename to gas/testsuite/gas/riscv/mabi-noabi-attr-rv32id-02.d

> index a69d0bc8db4..8b7ee68c12d 100644

> --- a/gas/testsuite/gas/riscv/mabi-noabi-attr-02b.d

> +++ b/gas/testsuite/gas/riscv/mabi-noabi-attr-rv32id-02.d

> @@ -1,6 +1,6 @@

>  #as: -march-attr -march=rv64i

>  #objdump: -d

> -#source: mabi-attr-02.s

> +#source: mabi-attr-rv32id.s

>

>  .*:[   ]+file format elf32.*

>

> diff --git a/gas/testsuite/gas/riscv/mabi-noabi-attr-03a.d b/gas/testsuite/gas/riscv/mabi-noabi-attr-rv64iq-01.d

> similarity index 82%

> rename from gas/testsuite/gas/riscv/mabi-noabi-attr-03a.d

> rename to gas/testsuite/gas/riscv/mabi-noabi-attr-rv64iq-01.d

> index 4392b5cf088..0251a009c84 100644

> --- a/gas/testsuite/gas/riscv/mabi-noabi-attr-03a.d

> +++ b/gas/testsuite/gas/riscv/mabi-noabi-attr-rv64iq-01.d

> @@ -1,6 +1,6 @@

>  #as: -march-attr -march=rv32i

>  #readelf: -h

> -#source: mabi-attr-03.s

> +#source: mabi-attr-rv64iq.s

>

>  ELF Header:

>  #...

> diff --git a/gas/testsuite/gas/riscv/mabi-noabi-attr-03b.d b/gas/testsuite/gas/riscv/mabi-noabi-attr-rv64iq-02.d

> similarity index 86%

> rename from gas/testsuite/gas/riscv/mabi-noabi-attr-03b.d

> rename to gas/testsuite/gas/riscv/mabi-noabi-attr-rv64iq-02.d

> index 917ab8c131d..6a33ba0f15e 100644

> --- a/gas/testsuite/gas/riscv/mabi-noabi-attr-03b.d

> +++ b/gas/testsuite/gas/riscv/mabi-noabi-attr-rv64iq-02.d

> @@ -1,6 +1,6 @@

>  #as: -march-attr -march=rv32i

>  #objdump: -d

> -#source: mabi-attr-03.s

> +#source: mabi-attr-rv64iq.s

>

>  .*:[   ]+file format elf64.*

>

> diff --git a/gas/testsuite/gas/riscv/mabi-noabi-march-01.d b/gas/testsuite/gas/riscv/mabi-noabi-march-rv32i.d

> similarity index 100%

> rename from gas/testsuite/gas/riscv/mabi-noabi-march-01.d

> rename to gas/testsuite/gas/riscv/mabi-noabi-march-rv32i.d

> diff --git a/gas/testsuite/gas/riscv/mabi-noabi-march-02.d b/gas/testsuite/gas/riscv/mabi-noabi-march-rv32id.d

> similarity index 85%

> rename from gas/testsuite/gas/riscv/mabi-noabi-march-02.d

> rename to gas/testsuite/gas/riscv/mabi-noabi-march-rv32id.d

> index 453fe7b07e2..9ef28abade2 100644

> --- a/gas/testsuite/gas/riscv/mabi-noabi-march-02.d

> +++ b/gas/testsuite/gas/riscv/mabi-noabi-march-rv32id.d

> @@ -1,4 +1,4 @@

> -#as: -march=rv32ifd

> +#as: -march=rv32id

>  #readelf: -h

>  #source: empty.s

>

> diff --git a/gas/testsuite/gas/riscv/mabi-noabi-march-03.d b/gas/testsuite/gas/riscv/mabi-noabi-march-rv64iq.d

> similarity index 84%

> rename from gas/testsuite/gas/riscv/mabi-noabi-march-03.d

> rename to gas/testsuite/gas/riscv/mabi-noabi-march-rv64iq.d

> index ab2ffc351a0..3de0eb7743b 100644

> --- a/gas/testsuite/gas/riscv/mabi-noabi-march-03.d

> +++ b/gas/testsuite/gas/riscv/mabi-noabi-march-rv64iq.d

> @@ -1,4 +1,4 @@

> -#as: -march=rv64ifdq

> +#as: -march=rv64iq

>  #readelf: -h

>  #source: empty.s

>

> --

> 2.30.2

>

Patch

diff --git a/gas/config/tc-riscv.c b/gas/config/tc-riscv.c
index 3fff33e9a11..a76e53d51c3 100644
--- a/gas/config/tc-riscv.c
+++ b/gas/config/tc-riscv.c
@@ -441,6 +441,8 @@  riscv_set_abi_by_arch (void)
 	riscv_set_abi (xlen, FLOAT_ABI_QUAD, false);
       else if (riscv_subset_supports ("d"))
 	riscv_set_abi (xlen, FLOAT_ABI_DOUBLE, false);
+      else if (riscv_subset_supports ("e"))
+	riscv_set_abi (xlen, FLOAT_ABI_SOFT, true);
       else
 	riscv_set_abi (xlen, FLOAT_ABI_SOFT, false);
     }
@@ -451,6 +453,22 @@  riscv_set_abi_by_arch (void)
 	as_bad ("can't have %d-bit ABI on %d-bit ISA", abi_xlen, xlen);
       else if (abi_xlen < xlen)
 	as_bad ("%d-bit ABI not yet supported on %d-bit ISA", abi_xlen, xlen);
+
+      if (riscv_subset_supports ("e") && !rve_abi)
+	as_bad ("only the ilp32e ABI is supported for e extension");
+
+      if (float_abi == FLOAT_ABI_SINGLE
+	  && !riscv_subset_supports ("f"))
+	as_bad ("ilp32f/lp64f ABI can't be used when f extension "
+		"isn't supported");
+      else if (float_abi == FLOAT_ABI_DOUBLE
+	       && !riscv_subset_supports ("d"))
+	as_bad ("ilp32d/lp64d ABI can't be used when d extension "
+		"isn't supported");
+      else if (float_abi == FLOAT_ABI_QUAD
+	       && !riscv_subset_supports ("q"))
+	as_bad ("ilp32q/lp64q ABI can't be used when q extension "
+		"isn't supported");
     }
 
   /* Update the EF_RISCV_FLOAT_ABI field of elf_flags.  */
diff --git a/gas/testsuite/gas/riscv/mabi-attr-rv32e.s b/gas/testsuite/gas/riscv/mabi-attr-rv32e.s
new file mode 100644
index 00000000000..846c0236bcb
--- /dev/null
+++ b/gas/testsuite/gas/riscv/mabi-attr-rv32e.s
@@ -0,0 +1 @@ 
+	.attribute arch,"rv32e"
diff --git a/gas/testsuite/gas/riscv/mabi-attr-01.s b/gas/testsuite/gas/riscv/mabi-attr-rv32i.s
similarity index 100%
rename from gas/testsuite/gas/riscv/mabi-attr-01.s
rename to gas/testsuite/gas/riscv/mabi-attr-rv32i.s
diff --git a/gas/testsuite/gas/riscv/mabi-attr-02.s b/gas/testsuite/gas/riscv/mabi-attr-rv32id.s
similarity index 100%
rename from gas/testsuite/gas/riscv/mabi-attr-02.s
rename to gas/testsuite/gas/riscv/mabi-attr-rv32id.s
diff --git a/gas/testsuite/gas/riscv/mabi-attr-03.s b/gas/testsuite/gas/riscv/mabi-attr-rv64iq.s
similarity index 100%
rename from gas/testsuite/gas/riscv/mabi-attr-03.s
rename to gas/testsuite/gas/riscv/mabi-attr-rv64iq.s
diff --git a/gas/testsuite/gas/riscv/mabi-fail-01.d b/gas/testsuite/gas/riscv/mabi-fail-01.d
deleted file mode 100644
index 78049349330..00000000000
--- a/gas/testsuite/gas/riscv/mabi-fail-01.d
+++ /dev/null
@@ -1,3 +0,0 @@ 
-#as: -march-attr -mabi=lp64d
-#source: mabi-attr-01.s
-#error_output: mabi-fail-01.l
diff --git a/gas/testsuite/gas/riscv/mabi-fail-02.d b/gas/testsuite/gas/riscv/mabi-fail-02.d
deleted file mode 100644
index 2d6cfb02465..00000000000
--- a/gas/testsuite/gas/riscv/mabi-fail-02.d
+++ /dev/null
@@ -1,3 +0,0 @@ 
-#as: -march-attr -mabi=ilp32
-#source: mabi-attr-03.s
-#error_output: mabi-fail-02.l
diff --git a/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64d.d b/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64d.d
new file mode 100644
index 00000000000..04d402aa976
--- /dev/null
+++ b/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64d.d
@@ -0,0 +1,3 @@ 
+#as: -march-attr -mabi=lp64d
+#source: mabi-attr-rv32e.s
+#error_output: mabi-fail-rv32e-lp64d.l
diff --git a/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64d.l b/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64d.l
new file mode 100644
index 00000000000..f7306cb24d2
--- /dev/null
+++ b/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64d.l
@@ -0,0 +1,4 @@ 
+.*Assembler messages:
+.*Error: can't have 64-bit ABI on 32-bit ISA
+.*Error: only the ilp32e ABI is supported for e extension
+.*Error: ilp32d/lp64d ABI can't be used when d extension isn't supported
diff --git a/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64f.d b/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64f.d
new file mode 100644
index 00000000000..b7a346465c7
--- /dev/null
+++ b/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64f.d
@@ -0,0 +1,3 @@ 
+#as: -march-attr -mabi=lp64f
+#source: mabi-attr-rv32e.s
+#error_output: mabi-fail-rv32e-lp64f.l
diff --git a/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64f.l b/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64f.l
new file mode 100644
index 00000000000..706690ac9c6
--- /dev/null
+++ b/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64f.l
@@ -0,0 +1,4 @@ 
+.*Assembler messages:
+.*Error: can't have 64-bit ABI on 32-bit ISA
+.*Error: only the ilp32e ABI is supported for e extension
+.*Error: ilp32f/lp64f ABI can't be used when f extension isn't supported
diff --git a/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64q.d b/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64q.d
new file mode 100644
index 00000000000..e5d3c4e5d15
--- /dev/null
+++ b/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64q.d
@@ -0,0 +1,3 @@ 
+#as: -march-attr -mabi=lp64q
+#source: mabi-attr-rv32e.s
+#error_output: mabi-fail-rv32e-lp64q.l
diff --git a/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64q.l b/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64q.l
new file mode 100644
index 00000000000..ab64b1546f6
--- /dev/null
+++ b/gas/testsuite/gas/riscv/mabi-fail-rv32e-lp64q.l
@@ -0,0 +1,4 @@ 
+.*Assembler messages:
+.*Error: can't have 64-bit ABI on 32-bit ISA
+.*Error: only the ilp32e ABI is supported for e extension
+.*Error: ilp32q/lp64q ABI can't be used when q extension isn't supported
diff --git a/gas/testsuite/gas/riscv/mabi-fail-rv32i-lp64.d b/gas/testsuite/gas/riscv/mabi-fail-rv32i-lp64.d
new file mode 100644
index 00000000000..469a53611fb
--- /dev/null
+++ b/gas/testsuite/gas/riscv/mabi-fail-rv32i-lp64.d
@@ -0,0 +1,3 @@ 
+#as: -march-attr -mabi=lp64
+#source: mabi-attr-rv32i.s
+#error_output: mabi-fail-rv32i-lp64.l
diff --git a/gas/testsuite/gas/riscv/mabi-fail-01.l b/gas/testsuite/gas/riscv/mabi-fail-rv32i-lp64.l
similarity index 100%
rename from gas/testsuite/gas/riscv/mabi-fail-01.l
rename to gas/testsuite/gas/riscv/mabi-fail-rv32i-lp64.l
diff --git a/gas/testsuite/gas/riscv/mabi-fail-rv64iq-ilp32.d b/gas/testsuite/gas/riscv/mabi-fail-rv64iq-ilp32.d
new file mode 100644
index 00000000000..e3155f48956
--- /dev/null
+++ b/gas/testsuite/gas/riscv/mabi-fail-rv64iq-ilp32.d
@@ -0,0 +1,3 @@ 
+#as: -march-attr -mabi=ilp32
+#source: mabi-attr-rv64iq.s
+#error_output: mabi-fail-rv64iq-ilp32.l
diff --git a/gas/testsuite/gas/riscv/mabi-fail-02.l b/gas/testsuite/gas/riscv/mabi-fail-rv64iq-ilp32.l
similarity index 100%
rename from gas/testsuite/gas/riscv/mabi-fail-02.l
rename to gas/testsuite/gas/riscv/mabi-fail-rv64iq-ilp32.l
diff --git a/gas/testsuite/gas/riscv/mabi-noabi-attr-01a.d b/gas/testsuite/gas/riscv/mabi-noabi-attr-rv32i-01.d
similarity index 58%
rename from gas/testsuite/gas/riscv/mabi-noabi-attr-01a.d
rename to gas/testsuite/gas/riscv/mabi-noabi-attr-rv32i-01.d
index 11d3ed91617..b58b9043729 100644
--- a/gas/testsuite/gas/riscv/mabi-noabi-attr-01a.d
+++ b/gas/testsuite/gas/riscv/mabi-noabi-attr-rv32i-01.d
@@ -1,6 +1,6 @@ 
-#as: -march-attr -march=rv64ifd
+#as: -march-attr -march=rv64id
 #readelf: -h
-#source: mabi-attr-01.s
+#source: mabi-attr-rv32i.s
 
 ELF Header:
 #...
diff --git a/gas/testsuite/gas/riscv/mabi-noabi-attr-01b.d b/gas/testsuite/gas/riscv/mabi-noabi-attr-rv32i-02.d
similarity index 71%
rename from gas/testsuite/gas/riscv/mabi-noabi-attr-01b.d
rename to gas/testsuite/gas/riscv/mabi-noabi-attr-rv32i-02.d
index b50ac3c240a..56dcd0ff31a 100644
--- a/gas/testsuite/gas/riscv/mabi-noabi-attr-01b.d
+++ b/gas/testsuite/gas/riscv/mabi-noabi-attr-rv32i-02.d
@@ -1,6 +1,6 @@ 
-#as: -march-attr -march=rv64ifd
+#as: -march-attr -march=rv64id
 #objdump: -d
-#source: mabi-attr-01.s
+#source: mabi-attr-rv32i.s
 
 .*:[ 	]+file format elf32.*
 
diff --git a/gas/testsuite/gas/riscv/mabi-noabi-attr-02a.d b/gas/testsuite/gas/riscv/mabi-noabi-attr-rv32id-01.d
similarity index 82%
rename from gas/testsuite/gas/riscv/mabi-noabi-attr-02a.d
rename to gas/testsuite/gas/riscv/mabi-noabi-attr-rv32id-01.d
index 9668066aadd..425e5d15e32 100644
--- a/gas/testsuite/gas/riscv/mabi-noabi-attr-02a.d
+++ b/gas/testsuite/gas/riscv/mabi-noabi-attr-rv32id-01.d
@@ -1,6 +1,6 @@ 
 #as: -march-attr -march=rv64i
 #readelf: -h
-#source: mabi-attr-02.s
+#source: mabi-attr-rv32id.s
 
 ELF Header:
 #...
diff --git a/gas/testsuite/gas/riscv/mabi-noabi-attr-02b.d b/gas/testsuite/gas/riscv/mabi-noabi-attr-rv32id-02.d
similarity index 86%
rename from gas/testsuite/gas/riscv/mabi-noabi-attr-02b.d
rename to gas/testsuite/gas/riscv/mabi-noabi-attr-rv32id-02.d
index a69d0bc8db4..8b7ee68c12d 100644
--- a/gas/testsuite/gas/riscv/mabi-noabi-attr-02b.d
+++ b/gas/testsuite/gas/riscv/mabi-noabi-attr-rv32id-02.d
@@ -1,6 +1,6 @@ 
 #as: -march-attr -march=rv64i
 #objdump: -d
-#source: mabi-attr-02.s
+#source: mabi-attr-rv32id.s
 
 .*:[ 	]+file format elf32.*
 
diff --git a/gas/testsuite/gas/riscv/mabi-noabi-attr-03a.d b/gas/testsuite/gas/riscv/mabi-noabi-attr-rv64iq-01.d
similarity index 82%
rename from gas/testsuite/gas/riscv/mabi-noabi-attr-03a.d
rename to gas/testsuite/gas/riscv/mabi-noabi-attr-rv64iq-01.d
index 4392b5cf088..0251a009c84 100644
--- a/gas/testsuite/gas/riscv/mabi-noabi-attr-03a.d
+++ b/gas/testsuite/gas/riscv/mabi-noabi-attr-rv64iq-01.d
@@ -1,6 +1,6 @@ 
 #as: -march-attr -march=rv32i
 #readelf: -h
-#source: mabi-attr-03.s
+#source: mabi-attr-rv64iq.s
 
 ELF Header:
 #...
diff --git a/gas/testsuite/gas/riscv/mabi-noabi-attr-03b.d b/gas/testsuite/gas/riscv/mabi-noabi-attr-rv64iq-02.d
similarity index 86%
rename from gas/testsuite/gas/riscv/mabi-noabi-attr-03b.d
rename to gas/testsuite/gas/riscv/mabi-noabi-attr-rv64iq-02.d
index 917ab8c131d..6a33ba0f15e 100644
--- a/gas/testsuite/gas/riscv/mabi-noabi-attr-03b.d
+++ b/gas/testsuite/gas/riscv/mabi-noabi-attr-rv64iq-02.d
@@ -1,6 +1,6 @@ 
 #as: -march-attr -march=rv32i
 #objdump: -d
-#source: mabi-attr-03.s
+#source: mabi-attr-rv64iq.s
 
 .*:[ 	]+file format elf64.*
 
diff --git a/gas/testsuite/gas/riscv/mabi-noabi-march-01.d b/gas/testsuite/gas/riscv/mabi-noabi-march-rv32i.d
similarity index 100%
rename from gas/testsuite/gas/riscv/mabi-noabi-march-01.d
rename to gas/testsuite/gas/riscv/mabi-noabi-march-rv32i.d
diff --git a/gas/testsuite/gas/riscv/mabi-noabi-march-02.d b/gas/testsuite/gas/riscv/mabi-noabi-march-rv32id.d
similarity index 85%
rename from gas/testsuite/gas/riscv/mabi-noabi-march-02.d
rename to gas/testsuite/gas/riscv/mabi-noabi-march-rv32id.d
index 453fe7b07e2..9ef28abade2 100644
--- a/gas/testsuite/gas/riscv/mabi-noabi-march-02.d
+++ b/gas/testsuite/gas/riscv/mabi-noabi-march-rv32id.d
@@ -1,4 +1,4 @@ 
-#as: -march=rv32ifd
+#as: -march=rv32id
 #readelf: -h
 #source: empty.s
 
diff --git a/gas/testsuite/gas/riscv/mabi-noabi-march-03.d b/gas/testsuite/gas/riscv/mabi-noabi-march-rv64iq.d
similarity index 84%
rename from gas/testsuite/gas/riscv/mabi-noabi-march-03.d
rename to gas/testsuite/gas/riscv/mabi-noabi-march-rv64iq.d
index ab2ffc351a0..3de0eb7743b 100644
--- a/gas/testsuite/gas/riscv/mabi-noabi-march-03.d
+++ b/gas/testsuite/gas/riscv/mabi-noabi-march-rv64iq.d
@@ -1,4 +1,4 @@ 
-#as: -march=rv64ifdq
+#as: -march=rv64iq
 #readelf: -h
 #source: empty.s