]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
genopinit: Allow more than 256 modes.
authorRobin Dapp <rdapp@ventanamicro.com>
Mon, 10 Jul 2023 20:00:08 +0000 (22:00 +0200)
committerRobin Dapp <rdapp@ventanamicro.com>
Wed, 12 Jul 2023 11:57:17 +0000 (13:57 +0200)
Upcoming changes for RISC-V will have us exceed 255 modes or 8 bits.
This patch increases the limit to 10 bits and adjusts the hashing
function for the gen* and optabs-query lookups accordingly.
Consequently, the number of optabs is limited to 4095.

gcc/ChangeLog:

* genopinit.cc (main): Adjust maximal number of optabs and
machine modes.
* gensupport.cc (find_optab): Shift optab by 20 and mode by
10 bits.
* optabs-query.h (optab_handler): Ditto.
(convert_optab_handler): Ditto.

gcc/genopinit.cc
gcc/gensupport.cc
gcc/optabs-query.h

index 6bd8858a1d9da8cae57c5066ccc2eb4d29ef7be6..2a841006884f08e923b4fb294b633abb63722446 100644 (file)
@@ -182,8 +182,7 @@ main (int argc, const char **argv)
 
   progname = "genopinit";
 
-  if (NUM_OPTABS > 0xffff
-    || MAX_MACHINE_MODE >= ((1 << MACHINE_MODE_BITSIZE) - 1))
+  if (NUM_OPTABS > 0xfff || NUM_MACHINE_MODES > 0x3ff)
     fatal ("genopinit range assumptions invalid");
 
   if (!init_rtx_reader_args_cb (argc, argv, handle_arg))
@@ -439,7 +438,7 @@ main (int argc, const char **argv)
           "bool\n"
           "swap_optab_enable (optab op, machine_mode m, bool set)\n"
           "{\n"
-          "  unsigned scode = (op << 16) | m;\n"
+          "  unsigned scode = (op << 20) | m;\n"
           "  int i = lookup_handler (scode);\n"
           "  if (i >= 0)\n"
           "    {\n"
index e39e6dacce25009df1ef83a0ab9ed309704ca74b..959d1d9c83cf397fcb344e8d3db0f339a967587f 100644 (file)
@@ -3806,7 +3806,7 @@ find_optab (optab_pattern *p, const char *name)
        {
          p->name = name;
          p->op = optabs[pindex].op;
-         p->sort_num = (p->op << 16) | (p->m2 << 8) | p->m1;
+         p->sort_num = (p->op << 20) | (p->m2 << 10) | p->m1;
          return true;
        }
     }
index 043e9791bc1b88bff29eb54d4121feb1431f31f1..920eb6a1b67b4a731febe87d67318844efe28033 100644 (file)
@@ -37,7 +37,7 @@ convert_optab_p (optab op)
 inline enum insn_code
 optab_handler (optab op, machine_mode mode)
 {
-  unsigned scode = (op << 16) | mode;
+  unsigned scode = (op << 20) | mode;
   gcc_assert (op > LAST_CONV_OPTAB);
   return raw_optab_handler (scode);
 }
@@ -50,7 +50,7 @@ inline enum insn_code
 convert_optab_handler (convert_optab op, machine_mode to_mode,
                       machine_mode from_mode)
 {
-  unsigned scode = (op << 16) | (from_mode << 8) | to_mode;
+  unsigned scode = (op << 20) | (from_mode << 10) | to_mode;
   gcc_assert (convert_optab_p (op));
   return raw_optab_handler (scode);
 }