public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Palmer Dabbelt <palmer@rivosinc.com>
To: gcc-patches@gcc.gnu.org
Cc: Palmer Dabbelt <palmer@rivosinc.com>
Subject: [PATCH] RISC-V: Update multilib-generator to handle V
Date: Thu, 13 Apr 2023 13:52:09 -0700	[thread overview]
Message-ID: <20230413205208.465-1-palmer@rivosinc.com> (raw)

It looks like multilib-generator hasn't been run for t-linux-multilib in
a while and it's pretty broken.  In order to regenerate the stub with
support for V I needed a pair of fixes:

* All extensions were being prefixed with an underscore, which leads to
  some odd combinations like "rv32gc_v", this just adds underscores to
  the multi-letter extensions.
* The input base ISAs were being canonicalized, which resulted in some
  odd multilib default search paths.  I'm not sure if anything breaks
  due to this, but it seems safer to just leave them alone.

We've likely got a bunch more issues here related to multlib path
mangling in the presence of underscores and for other extensions, but
this at leasts lets me run the testsuite with V enabled.

gcc/ChangeLog:

	* config/riscv/multilib-generator (maybe_add_underscore): New
	  function
	  (_expand_combination): Canonicalize differently.
	* config/riscv/t-linux-multilib: Regenerate.
---
We're probably going to need a bunch more work here to handle the
ISA-dependent multilib resolution, but I don't think that's gcc-13
material -- certainly I don't have the time to do it, and even if it was
ready now I'd bet it's too invasive for this point in the development
cycle.

We probably also want to handle the various B extensions in here, since
those are upstream and useful.  I'm going to hold off on that for a bit
as I've got some V-related testsuite failures that I'd rather look at
first.  I figured it'd be better to just send this now, though, as at
least I can run the V test suite under multilib.

OK for trunk?

---
 gcc/config/riscv/multilib-generator | 18 +++---
 gcc/config/riscv/t-linux-multilib   | 86 ++++++++++++++++++++++-------
 2 files changed, 78 insertions(+), 26 deletions(-)

diff --git a/gcc/config/riscv/multilib-generator b/gcc/config/riscv/multilib-generator
index 0a3d4c07757..58b7198b243 100755
--- a/gcc/config/riscv/multilib-generator
+++ b/gcc/config/riscv/multilib-generator
@@ -62,6 +62,15 @@ def arch_canonicalize(arch, isa_spec):
   out, err = proc.communicate()
   return out.decode().strip()
 
+#
+# Multi-letter extensions are seperated by underscores, but single-letter
+# extensions are not.
+#
+def maybe_add_underscore(ext):
+  if len(ext) is 1:
+    return ext
+  return '_' + ext
+
 #
 # Handle expansion operation.
 #
@@ -70,11 +79,7 @@ def arch_canonicalize(arch, isa_spec):
 #
 def _expand_combination(ext):
   exts = list(ext.split("*"))
-
-  # Add underline to every extension.
-  # e.g.
-  #  _b * zvamo => _b * _zvamo
-  exts = list(map(lambda x: '_' + x, exts))
+  exts = list(map(lambda x: maybe_add_underscore(x), exts))
 
   # No need to expand if there is no `*`.
   if len(exts) == 1:
@@ -163,14 +168,13 @@ for cmodel in cmodels:
     if cmodel == "compact" and arch.startswith("rv32"):
       continue
 
-    arch = arch_canonicalize (arch, args.misa_spec)
     arches[arch] = 1
     abis[abi] = 1
     extra = list(filter(None, extra.split(',')))
     ext_combs = expand_combination(ext)
     alts = sum([[x] + [x + y for y in ext_combs] for x in [arch] + extra], [])
     alts = filter(lambda x: len(x) != 0, alts)
-    alts = list(map(lambda a : arch_canonicalize(a, args.misa_spec), alts))
+    alts = alts + list(map(lambda a : arch_canonicalize(a, args.misa_spec), alts))
 
     # Drop duplicated entry.
     alts = unique(alts)
diff --git a/gcc/config/riscv/t-linux-multilib b/gcc/config/riscv/t-linux-multilib
index 298547fee38..400cf7f0634 100644
--- a/gcc/config/riscv/t-linux-multilib
+++ b/gcc/config/riscv/t-linux-multilib
@@ -1,46 +1,94 @@
 # This file was generated by multilib-generator with the command:
-#  ./multilib-generator rv32imac-ilp32-rv32ima,rv32imaf,rv32imafd,rv32imafc,rv32imafdc- rv32imafdc-ilp32d-rv32imafd- rv64imac-lp64-rv64ima,rv64imaf,rv64imafd,rv64imafc,rv64imafdc- rv64imafdc-lp64d-rv64imafd-
-MULTILIB_OPTIONS = march=rv32imac/march=rv32ima/march=rv32imaf/march=rv32imafd/march=rv32imafc/march=rv32imafdc/march=rv32g/march=rv32gc/march=rv64imac/march=rv64ima/march=rv64imaf/march=rv64imafd/march=rv64imafc/march=rv64imafdc/march=rv64g/march=rv64gc mabi=ilp32/mabi=ilp32d/mabi=lp64/mabi=lp64d
+#  ./multilib-generator rv32imac-ilp32-rv32ima,rv32imaf,rv32imafd,rv32imafc,rv32imafdc-v rv32imafdc-ilp32d-rv32imafd-v rv64imac-lp64-rv64ima,rv64imaf,rv64imafd,rv64imafc,rv64imafdc-v rv64imafdc-lp64d-rv64imafd-v
+MULTILIB_OPTIONS = march=rv32imac/march=rv32ima/march=rv32imacv/march=rv32imaf/march=rv32imaf_zicsr/march=rv32imafc/march=rv32imafc_zicsr/march=rv32imafcv/march=rv32imafd/march=rv32imafd_zicsr/march=rv32imafdc/march=rv32imafdc_zicsr/march=rv32imafdcv/march=rv32imafdcv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/march=rv32imafdv/march=rv32imafdv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/march=rv32imafv/march=rv32imav/march=rv64imac/march=rv64ima/march=rv64imacv/march=rv64imaf/march=rv64imaf_zicsr/march=rv64imafc/march=rv64imafc_zicsr/march=rv64imafcv/march=rv64imafd/march=rv64imafd_zicsr/march=rv64imafdc/march=rv64imafdc_zicsr/march=rv64imafdcv/march=rv64imafdcv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/march=rv64imafdv/march=rv64imafdv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/march=rv64imafv/march=rv64imav mabi=ilp32/mabi=ilp32d/mabi=lp64/mabi=lp64d 
 MULTILIB_DIRNAMES = rv32imac \
 rv32ima \
+rv32imacv \
 rv32imaf \
-rv32imafd \
+rv32imaf_zicsr \
 rv32imafc \
+rv32imafc_zicsr \
+rv32imafcv \
+rv32imafd \
+rv32imafd_zicsr \
 rv32imafdc \
-rv32g \
-rv32gc \
+rv32imafdc_zicsr \
+rv32imafdcv \
+rv32imafdcv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b \
+rv32imafdv \
+rv32imafdv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b \
+rv32imafv \
+rv32imav \
 rv64imac \
 rv64ima \
+rv64imacv \
 rv64imaf \
-rv64imafd \
+rv64imaf_zicsr \
 rv64imafc \
+rv64imafc_zicsr \
+rv64imafcv \
+rv64imafd \
+rv64imafd_zicsr \
 rv64imafdc \
-rv64g \
-rv64gc ilp32 \
+rv64imafdc_zicsr \
+rv64imafdcv \
+rv64imafdcv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b \
+rv64imafdv \
+rv64imafdv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b \
+rv64imafv \
+rv64imav ilp32 \
 ilp32d \
 lp64 \
-lp64d
+lp64d 
 MULTILIB_REQUIRED = march=rv32imac/mabi=ilp32 \
 march=rv32imafdc/mabi=ilp32d \
 march=rv64imac/mabi=lp64 \
 march=rv64imafdc/mabi=lp64d
 MULTILIB_REUSE = march.rv32imac/mabi.ilp32=march.rv32ima/mabi.ilp32 \
+march.rv32imac/mabi.ilp32=march.rv32imacv/mabi.ilp32 \
 march.rv32imac/mabi.ilp32=march.rv32imaf/mabi.ilp32 \
-march.rv32imac/mabi.ilp32=march.rv32imafd/mabi.ilp32 \
+march.rv32imac/mabi.ilp32=march.rv32imaf_zicsr/mabi.ilp32 \
 march.rv32imac/mabi.ilp32=march.rv32imafc/mabi.ilp32 \
+march.rv32imac/mabi.ilp32=march.rv32imafc_zicsr/mabi.ilp32 \
+march.rv32imac/mabi.ilp32=march.rv32imafcv/mabi.ilp32 \
+march.rv32imac/mabi.ilp32=march.rv32imafd/mabi.ilp32 \
+march.rv32imac/mabi.ilp32=march.rv32imafd_zicsr/mabi.ilp32 \
 march.rv32imac/mabi.ilp32=march.rv32imafdc/mabi.ilp32 \
-march.rv32imac/mabi.ilp32=march.rv32g/mabi.ilp32 \
-march.rv32imac/mabi.ilp32=march.rv32gc/mabi.ilp32 \
+march.rv32imac/mabi.ilp32=march.rv32imafdc_zicsr/mabi.ilp32 \
+march.rv32imac/mabi.ilp32=march.rv32imafdcv/mabi.ilp32 \
+march.rv32imac/mabi.ilp32=march.rv32imafdcv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/mabi.ilp32 \
+march.rv32imac/mabi.ilp32=march.rv32imafdv/mabi.ilp32 \
+march.rv32imac/mabi.ilp32=march.rv32imafdv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/mabi.ilp32 \
+march.rv32imac/mabi.ilp32=march.rv32imafv/mabi.ilp32 \
+march.rv32imac/mabi.ilp32=march.rv32imav/mabi.ilp32 \
 march.rv32imafdc/mabi.ilp32d=march.rv32imafd/mabi.ilp32d \
-march.rv32imafdc/mabi.ilp32d=march.rv32gc/mabi.ilp32d \
-march.rv32imafdc/mabi.ilp32d=march.rv32g/mabi.ilp32d \
+march.rv32imafdc/mabi.ilp32d=march.rv32imafd_zicsr/mabi.ilp32d \
+march.rv32imafdc/mabi.ilp32d=march.rv32imafdc_zicsr/mabi.ilp32d \
+march.rv32imafdc/mabi.ilp32d=march.rv32imafdcv/mabi.ilp32d \
+march.rv32imafdc/mabi.ilp32d=march.rv32imafdcv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/mabi.ilp32d \
+march.rv32imafdc/mabi.ilp32d=march.rv32imafdv/mabi.ilp32d \
+march.rv32imafdc/mabi.ilp32d=march.rv32imafdv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/mabi.ilp32d \
 march.rv64imac/mabi.lp64=march.rv64ima/mabi.lp64 \
+march.rv64imac/mabi.lp64=march.rv64imacv/mabi.lp64 \
 march.rv64imac/mabi.lp64=march.rv64imaf/mabi.lp64 \
-march.rv64imac/mabi.lp64=march.rv64imafd/mabi.lp64 \
+march.rv64imac/mabi.lp64=march.rv64imaf_zicsr/mabi.lp64 \
 march.rv64imac/mabi.lp64=march.rv64imafc/mabi.lp64 \
+march.rv64imac/mabi.lp64=march.rv64imafc_zicsr/mabi.lp64 \
+march.rv64imac/mabi.lp64=march.rv64imafcv/mabi.lp64 \
+march.rv64imac/mabi.lp64=march.rv64imafd/mabi.lp64 \
+march.rv64imac/mabi.lp64=march.rv64imafd_zicsr/mabi.lp64 \
 march.rv64imac/mabi.lp64=march.rv64imafdc/mabi.lp64 \
-march.rv64imac/mabi.lp64=march.rv64g/mabi.lp64 \
-march.rv64imac/mabi.lp64=march.rv64gc/mabi.lp64 \
+march.rv64imac/mabi.lp64=march.rv64imafdc_zicsr/mabi.lp64 \
+march.rv64imac/mabi.lp64=march.rv64imafdcv/mabi.lp64 \
+march.rv64imac/mabi.lp64=march.rv64imafdcv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/mabi.lp64 \
+march.rv64imac/mabi.lp64=march.rv64imafdv/mabi.lp64 \
+march.rv64imac/mabi.lp64=march.rv64imafdv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/mabi.lp64 \
+march.rv64imac/mabi.lp64=march.rv64imafv/mabi.lp64 \
+march.rv64imac/mabi.lp64=march.rv64imav/mabi.lp64 \
 march.rv64imafdc/mabi.lp64d=march.rv64imafd/mabi.lp64d \
-march.rv64imafdc/mabi.lp64d=march.rv64gc/mabi.lp64d \
-march.rv64imafdc/mabi.lp64d=march.rv64g/mabi.lp64d
+march.rv64imafdc/mabi.lp64d=march.rv64imafd_zicsr/mabi.lp64d \
+march.rv64imafdc/mabi.lp64d=march.rv64imafdc_zicsr/mabi.lp64d \
+march.rv64imafdc/mabi.lp64d=march.rv64imafdcv/mabi.lp64d \
+march.rv64imafdc/mabi.lp64d=march.rv64imafdcv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/mabi.lp64d \
+march.rv64imafdc/mabi.lp64d=march.rv64imafdv/mabi.lp64d \
+march.rv64imafdc/mabi.lp64d=march.rv64imafdv_zicsr_zve32f_zve32x_zve64d_zve64f_zve64x_zvl128b_zvl32b_zvl64b/mabi.lp64d
-- 
2.39.2


             reply	other threads:[~2023-04-13 20:55 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-04-13 20:52 Palmer Dabbelt [this message]
2023-04-14  1:53 ` Kito Cheng
2023-04-14  7:15 ` Kito Cheng
2023-04-17 15:24   ` Palmer Dabbelt
2023-04-17 17:57     ` Palmer Dabbelt
2023-04-18 15:44       ` Kito Cheng
2023-04-18 20:01         ` Palmer Dabbelt
2023-04-19  0:47           ` Kito Cheng
2023-04-19  0:51             ` Palmer Dabbelt
2023-04-19  1:26               ` Kito Cheng
2023-04-19  1:29                 ` Palmer Dabbelt
2023-04-19  1:38                   ` Kito Cheng
2023-04-19  3:57                     ` Kito Cheng

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230413205208.465-1-palmer@rivosinc.com \
    --to=palmer@rivosinc.com \
    --cc=gcc-patches@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).