Mercurial > hg > CbC > CbC_gcc
diff gcc/gengenrtl.c @ 145:1830386684a0
gcc-9.2.0
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 11:34:05 +0900 |
parents | 84e7813d76e9 |
children |
line wrap: on
line diff
--- a/gcc/gengenrtl.c Thu Oct 25 07:37:49 2018 +0900 +++ b/gcc/gengenrtl.c Thu Feb 13 11:34:05 2020 +0900 @@ -1,5 +1,5 @@ /* Generate code to allocate RTL structures. - Copyright (C) 1997-2018 Free Software Foundation, Inc. + Copyright (C) 1997-2020 Free Software Foundation, Inc. This file is part of GCC. @@ -231,8 +231,7 @@ puts (")"); } -/* Generate the code for the function to generate RTL whose - format is FORMAT. */ +/* Generate the code for functions to generate RTL whose format is FORMAT. */ static void gendef (const char *format) @@ -240,22 +239,18 @@ const char *p; int i, j; - /* Start by writing the definition of the function name and the types + /* Write the definition of the init function name and the types of the arguments. */ - printf ("static inline rtx\ngen_rtx_fmt_%s_stat (RTX_CODE code, machine_mode mode", format); + puts ("static inline rtx"); + printf ("init_rtx_fmt_%s (rtx rt, machine_mode mode", format); for (p = format, i = 0; *p != 0; p++) if (*p != '0') printf (",\n\t%sarg%d", type_from_format (*p), i++); - - puts (" MEM_STAT_DECL)"); + puts (")"); - /* Now write out the body of the function itself, which allocates - the memory and initializes it. */ + /* Now write out the body of the init function itself. */ puts ("{"); - puts (" rtx rt;"); - puts (" rt = rtx_alloc (code PASS_MEM_STAT);\n"); - puts (" PUT_MODE_RAW (rt, mode);"); for (p = format, i = j = 0; *p ; ++p, ++i) @@ -266,16 +261,53 @@ else printf (" %s (rt, %d) = arg%d;\n", accessor_from_format (*p), i, j++); - puts ("\n return rt;\n}\n"); + puts (" return rt;\n}\n"); + + /* Write the definition of the gen function name and the types + of the arguments. */ + + puts ("static inline rtx"); + printf ("gen_rtx_fmt_%s_stat (RTX_CODE code, machine_mode mode", format); + for (p = format, i = 0; *p != 0; p++) + if (*p != '0') + printf (",\n\t%sarg%d", type_from_format (*p), i++); + puts (" MEM_STAT_DECL)"); + + /* Now write out the body of the function itself, which allocates + the memory and initializes it. */ + puts ("{"); + puts (" rtx rt;\n"); + + puts (" rt = rtx_alloc (code PASS_MEM_STAT);"); + printf (" return init_rtx_fmt_%s (rt, mode", format); + for (p = format, i = 0; *p != 0; p++) + if (*p != '0') + printf (", arg%d", i++); + puts (");\n}\n"); + + /* Write the definition of gen macro. */ + printf ("#define gen_rtx_fmt_%s(c, m", format); for (p = format, i = 0; *p != 0; p++) if (*p != '0') - printf (", p%i",i++); - printf (")\\\n gen_rtx_fmt_%s_stat (c, m", format); + printf (", arg%d", i++); + printf (") \\\n gen_rtx_fmt_%s_stat ((c), (m)", format); for (p = format, i = 0; *p != 0; p++) if (*p != '0') - printf (", p%i",i++); + printf (", (arg%d)", i++); printf (" MEM_STAT_INFO)\n\n"); + + /* Write the definition of alloca macro. */ + + printf ("#define alloca_rtx_fmt_%s(c, m", format); + for (p = format, i = 0; *p != 0; p++) + if (*p != '0') + printf (", arg%d", i++); + printf (") \\\n init_rtx_fmt_%s (rtx_alloca ((c)), (m)", format); + for (p = format, i = 0; *p != 0; p++) + if (*p != '0') + printf (", (arg%d)", i++); + printf (")\n\n"); } /* Generate the documentation header for files we write. */