diff options
author | Robin Dapp <rdapp@ventanamicro.com> | 2023-07-10 22:00:08 +0200 |
---|---|---|
committer | Robin Dapp <rdapp@ventanamicro.com> | 2023-07-12 13:57:17 +0200 |
commit | a454325bea77a0dd79415480d48233a7c296bc0a (patch) | |
tree | d610bc9d5863440a73049cb2ad5ba3b2ca05243d /gcc | |
parent | 450b05ce54d3f08c583c3b5341233ce0df99725b (diff) | |
download | gcc-a454325bea77a0dd79415480d48233a7c296bc0a.zip gcc-a454325bea77a0dd79415480d48233a7c296bc0a.tar.gz gcc-a454325bea77a0dd79415480d48233a7c296bc0a.tar.bz2 |
genopinit: Allow more than 256 modes.
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.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/genopinit.cc | 5 | ||||
-rw-r--r-- | gcc/gensupport.cc | 2 | ||||
-rw-r--r-- | gcc/optabs-query.h | 4 |
3 files changed, 5 insertions, 6 deletions
diff --git a/gcc/genopinit.cc b/gcc/genopinit.cc index 6bd8858..2a84100 100644 --- a/gcc/genopinit.cc +++ b/gcc/genopinit.cc @@ -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" diff --git a/gcc/gensupport.cc b/gcc/gensupport.cc index e39e6da..959d1d9 100644 --- a/gcc/gensupport.cc +++ b/gcc/gensupport.cc @@ -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; } } diff --git a/gcc/optabs-query.h b/gcc/optabs-query.h index 043e979..920eb6a 100644 --- a/gcc/optabs-query.h +++ b/gcc/optabs-query.h @@ -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); } |