[PATCH v2] RISC-V: Add support for zilsd and zclsd extensions.
chendongyan
chendongyan@isrc.iscas.ac.cn
Wed Mar 19 10:32:21 GMT 2025
Hi Nelson,
I asked Dongya for his opinion, and Dongya will resubmit his patch alone.
Thanks
Dongyan Chen
在 2025/3/18 15:09, Nelson Chu 写道:
> Hi Dongyan,
>
> Seems like these extensions, zilsd and zclsd, not only need the
> architecture string support, but also need instructions support. I
> found there was a reviewing patch as follows,
> https://inbox.sourceware.org/binutils/CAPpQWtDzWvuuD91qU46+vwEiBWQWaWdSxba10kPN-ewo1sJfcg@mail.gmail.com/
>
>
> I don't know if Dongya from Nucleisys wants to continue the pending
> patch and add the sign off for DCO. But if that doesn't work, do you
> mind continuing his remaining work and then list him as co-author
> after getting his signoff? Or, rewriting your patch to support the
> zilsd and zclsd instructions, but without looking at his patch. I am
> fine with both ways.
>
> Thanks
> Nelson
>
> On Mon, Mar 17, 2025 at 10:21 PM Dongyan Chen
> <chendongyan@isrc.iscas.ac.cn> wrote:
>
> This implements the zilsd extensons and the zclsd extensions,
> version1.0[1].
>
> The code was expanded and modified based on the GitHub link[2],
> incorporating the following changes:
>
> 1. According to the manual specifications, zcmlsd was changed to
> zclsd.
>
> 2. Constraints were added for zilsd and zclsd.
>
> 3. Testsuites were included.
>
> [1] https://github.com/riscv/riscv-zilsd
>
> [2] https://github.com/nxp-auto-tools/binutils_zilsd/tree/zilsd
>
> Changes for v2:
> - Fix a bug with zilsd extension dependency in bfd/elfxx-riscv.c
> b/bfd/elfxx-riscv.c
>
> bfd/ChangeLog:
>
> * elfxx-riscv.c (riscv_parse_check_conflicts): Add
> implicit rules for zclsd extensions.
> (riscv_multi_subset_supports): Handle zilsd and zclsd.
> (riscv_multi_subset_supports_ext): Ditto.
>
> gas/ChangeLog:
>
> * NEWS: Updated.
> * testsuite/gas/riscv/march-help.l: Ditto.
> * testsuite/gas/riscv/march-fail-zclsd-01.d: New test.
> * testsuite/gas/riscv/march-fail-zclsd-01.l: New test.
> * testsuite/gas/riscv/march-fail-zclsd-02.d: New test.
> * testsuite/gas/riscv/march-fail-zclsd-02.l: New test.
> * testsuite/gas/riscv/march-fail-zilsd.d: New test.
> * testsuite/gas/riscv/march-fail-zilsd.l: New test.
>
> include/ChangeLog:
>
> * opcode/riscv.h (enum riscv_insn_class): New operand.
>
> ---
> bfd/elfxx-riscv.c | 35
> +++++++++++++++++++
> gas/NEWS | 2 ++
> gas/testsuite/gas/riscv/march-fail-zclsd-01.d | 3 ++
> gas/testsuite/gas/riscv/march-fail-zclsd-01.l | 2 ++
> gas/testsuite/gas/riscv/march-fail-zclsd-02.d | 3 ++
> gas/testsuite/gas/riscv/march-fail-zclsd-02.l | 2 ++
> gas/testsuite/gas/riscv/march-fail-zilsd.d | 3 ++
> gas/testsuite/gas/riscv/march-fail-zilsd.l | 2 ++
> gas/testsuite/gas/riscv/march-help.l | 2 ++
> include/opcode/riscv.h | 2 ++
> 10 files changed, 56 insertions(+)
> create mode 100644 gas/testsuite/gas/riscv/march-fail-zclsd-01.d
> create mode 100644 gas/testsuite/gas/riscv/march-fail-zclsd-01.l
> create mode 100644 gas/testsuite/gas/riscv/march-fail-zclsd-02.d
> create mode 100644 gas/testsuite/gas/riscv/march-fail-zclsd-02.l
> create mode 100644 gas/testsuite/gas/riscv/march-fail-zilsd.d
> create mode 100644 gas/testsuite/gas/riscv/march-fail-zilsd.l
>
> diff --git a/bfd/elfxx-riscv.c b/bfd/elfxx-riscv.c
> index fd2cb74df80..4a936b9c0de 100644
> --- a/bfd/elfxx-riscv.c
> +++ b/bfd/elfxx-riscv.c
> @@ -1220,6 +1220,8 @@ static struct riscv_implicit_subset
> riscv_implicit_subsets[] =
> {"zcmop", "+zca", check_implicit_always},
> {"zcmt", "+zca,+zicsr", check_implicit_always},
>
> + {"zclsd", "+zca,+zilsd", check_implicit_always},
> +
> {"zicfilp", "+zicsr", check_implicit_always},
> {"zicfiss", "+zimop,+zicsr", check_implicit_always},
>
> @@ -1439,6 +1441,8 @@ static struct riscv_supported_ext
> riscv_supported_std_z_ext[] =
> {"zcmop", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
> {"zcmp", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
> {"zcmt", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
> + {"zilsd", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
> + {"zclsd", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
> {NULL, 0, 0, 0, 0}
> };
>
> @@ -2117,6 +2121,29 @@ riscv_parse_check_conflicts
> (riscv_parse_subset_t *rps)
> (_("`zfinx' is conflict with the `f/d/q/zfh/zfhmin'
> extension"));
> no_conflict = false;
> }
> + if (riscv_lookup_subset (rps->subset_list, "zilsd", &subset)
> + && xlen > 32)
> + {
> + rps->error_handler
> + (_("rv%d does not support the `zilsd' extension"), xlen);
> + no_conflict = false;
> + }
> + if (riscv_lookup_subset (rps->subset_list, "zclsd", &subset)
> + && xlen > 32)
> + {
> + rps->error_handler
> + (_("rv%d does not support the `zclsd' extension"), xlen);
> + no_conflict = false;
> + }
> + if (riscv_lookup_subset (rps->subset_list, "zclsd", &subset)
> + && ((riscv_lookup_subset (rps->subset_list, "c", &subset)
> + && riscv_lookup_subset (rps->subset_list, "f", &subset))
> + || riscv_lookup_subset (rps->subset_list, "zcf",
> &subset)))
> + {
> + rps->error_handler
> + (_("`zclsd' is conflict with the `c+f'/ `zcf' extension"));
> + no_conflict = false;
> + }
> if (riscv_lookup_subset (rps->subset_list, "xtheadvector", &subset)
> && riscv_lookup_subset (rps->subset_list, "v", &subset))
> {
> @@ -2752,6 +2779,10 @@ riscv_multi_subset_supports
> (riscv_parse_subset_t *rps,
> return riscv_subset_supports (rps, "zcmp");
> case INSN_CLASS_ZCMT:
> return riscv_subset_supports (rps, "zcmt");
> + case INSN_CLASS_ZILSD:
> + return riscv_subset_supports (rps, "zilsd");
> + case INSN_CLASS_ZCLSD:
> + return riscv_subset_supports (rps, "zclsd");
> case INSN_CLASS_SMCTR_OR_SSCTR:
> return (riscv_subset_supports (rps, "smctr")
> || riscv_subset_supports (rps, "ssctr"));
> @@ -3058,6 +3089,10 @@ riscv_multi_subset_supports_ext
> (riscv_parse_subset_t *rps,
> return "zcmp";
> case INSN_CLASS_ZCMT:
> return "zcmt";
> + case INSN_CLASS_ZILSD:
> + return "zilsd";
> + case INSN_CLASS_ZCLSD:
> + return "zclsd";
> case INSN_CLASS_SMCTR_OR_SSCTR:
> return _("smctr' or `ssctr");
> case INSN_CLASS_SVINVAL:
> diff --git a/gas/NEWS b/gas/NEWS
> index 6c5af12178f..258d8b126c6 100644
> --- a/gas/NEWS
> +++ b/gas/NEWS
> @@ -2,6 +2,8 @@
>
> * Add support for the x86 Zhaoxin PadLock XMODX instructions.
>
> +* Add support for RISC-V z[i/c]lsd extension, version 1.0.
> +
> Changes in 2.44:
>
> * Add support for the x86 Intel Diamond Rapids AMX instructions,
> including
> diff --git a/gas/testsuite/gas/riscv/march-fail-zclsd-01.d
> b/gas/testsuite/gas/riscv/march-fail-zclsd-01.d
> new file mode 100644
> index 00000000000..a98b1f03bbf
> --- /dev/null
> +++ b/gas/testsuite/gas/riscv/march-fail-zclsd-01.d
> @@ -0,0 +1,3 @@
> +#as: -march=rv64i_zca_zclsd
> +#source: empty.s
> +#error_output: march-fail-zclsd-01.l
> diff --git a/gas/testsuite/gas/riscv/march-fail-zclsd-01.l
> b/gas/testsuite/gas/riscv/march-fail-zclsd-01.l
> new file mode 100644
> index 00000000000..0af9281f284
> --- /dev/null
> +++ b/gas/testsuite/gas/riscv/march-fail-zclsd-01.l
> @@ -0,0 +1,2 @@
> +.*Assembler messages:
> +.*Error: .*rv64 does not support the `zclsd' extension
> diff --git a/gas/testsuite/gas/riscv/march-fail-zclsd-02.d
> b/gas/testsuite/gas/riscv/march-fail-zclsd-02.d
> new file mode 100644
> index 00000000000..6d8d19e6093
> --- /dev/null
> +++ b/gas/testsuite/gas/riscv/march-fail-zclsd-02.d
> @@ -0,0 +1,3 @@
> +#as: -march=rv32i_zcf_zclsd
> +#source: empty.s
> +#error_output: march-fail-zclsd-02.l
> diff --git a/gas/testsuite/gas/riscv/march-fail-zclsd-02.l
> b/gas/testsuite/gas/riscv/march-fail-zclsd-02.l
> new file mode 100644
> index 00000000000..68812c7d3dc
> --- /dev/null
> +++ b/gas/testsuite/gas/riscv/march-fail-zclsd-02.l
> @@ -0,0 +1,2 @@
> +.*Assembler messages:
> +.*Error: .*`zclsd' is conflict with the `c+f'/ `zcf' extension
> diff --git a/gas/testsuite/gas/riscv/march-fail-zilsd.d
> b/gas/testsuite/gas/riscv/march-fail-zilsd.d
> new file mode 100644
> index 00000000000..951ae6324d4
> --- /dev/null
> +++ b/gas/testsuite/gas/riscv/march-fail-zilsd.d
> @@ -0,0 +1,3 @@
> +#as: -march=rv64i_zilsd
> +#source: empty.s
> +#error_output: march-fail-zilsd.l
> diff --git a/gas/testsuite/gas/riscv/march-fail-zilsd.l
> b/gas/testsuite/gas/riscv/march-fail-zilsd.l
> new file mode 100644
> index 00000000000..e40a89bdc07
> --- /dev/null
> +++ b/gas/testsuite/gas/riscv/march-fail-zilsd.l
> @@ -0,0 +1,2 @@
> +.*Assembler messages:
> +.*Error: .*rv64 does not support the `zilsd' extension
> diff --git a/gas/testsuite/gas/riscv/march-help.l
> b/gas/testsuite/gas/riscv/march-help.l
> index b7975ff9ade..73308777a33 100644
> --- a/gas/testsuite/gas/riscv/march-help.l
> +++ b/gas/testsuite/gas/riscv/march-help.l
> @@ -107,6 +107,8 @@ All available -march extensions for RISC-V:
> zcmop 1.0
> zcmp 1.0
> zcmt 1.0
> + zilsd 1.0
> + zclsd 1.0
> shcounterenw 1.0
> shgatpa 1.0
> shtvala 1.0
> diff --git a/include/opcode/riscv.h b/include/opcode/riscv.h
> index 6bcea638025..90621d09ca5 100644
> --- a/include/opcode/riscv.h
> +++ b/include/opcode/riscv.h
> @@ -525,6 +525,8 @@ enum riscv_insn_class
> INSN_CLASS_ZCMOP,
> INSN_CLASS_ZCMP,
> INSN_CLASS_ZCMT,
> + INSN_CLASS_ZILSD,
> + INSN_CLASS_ZCLSD,
> INSN_CLASS_SMCTR_OR_SSCTR,
> INSN_CLASS_SVINVAL,
> INSN_CLASS_ZICBOM,
> --
> 2.43.0
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://sourceware.org/pipermail/binutils/attachments/20250319/85a72955/attachment-0001.htm>
More information about the Binutils
mailing list