From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1725) id 811C23959C69; Mon, 26 Apr 2021 20:49:43 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 811C23959C69 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: William Schmidt To: gcc-cvs@gcc.gnu.org Subject: [gcc(refs/users/wschmidt/heads/builtins10)] rs6000: Write output to the builtins init file, part 1 of 3 X-Act-Checkin: gcc X-Git-Author: Bill Schmidt X-Git-Refname: refs/users/wschmidt/heads/builtins10 X-Git-Oldrev: 99f6a99e4db9674ec5f14ddafd6fdd619e540944 X-Git-Newrev: a883e914311f35f2a4e1df291e37fdf261028dde Message-Id: <20210426204943.811C23959C69@sourceware.org> Date: Mon, 26 Apr 2021 20:49:43 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 26 Apr 2021 20:49:43 -0000 https://gcc.gnu.org/g:a883e914311f35f2a4e1df291e37fdf261028dde commit a883e914311f35f2a4e1df291e37fdf261028dde Author: Bill Schmidt Date: Thu Apr 1 13:01:45 2021 -0500 rs6000: Write output to the builtins init file, part 1 of 3 2021-04-01 Bill Schmidt gcc/ * config/rs6000/rs6000-gen-builtins.c (write_fntype): New function. (write_fntype_init): New stub function. (write_init_bif_table): Likewise. (write_init_ovld_table): New function. (write_init_file): Implement. Diff: --- gcc/config/rs6000/rs6000-gen-builtins.c | 153 ++++++++++++++++++++++++++++++++ 1 file changed, 153 insertions(+) diff --git a/gcc/config/rs6000/rs6000-gen-builtins.c b/gcc/config/rs6000/rs6000-gen-builtins.c index 48d28af6366..28810f56ec2 100644 --- a/gcc/config/rs6000/rs6000-gen-builtins.c +++ b/gcc/config/rs6000/rs6000-gen-builtins.c @@ -2236,6 +2236,18 @@ write_extern_fntype (char *str) fprintf (header_file, "extern GTY(()) tree %s;\n", str); } +void +write_fntype (char *str) +{ + fprintf (init_file, "tree %s;\n", str); +} + +/* Write an initializer for a function type identified by STR. */ +void +write_fntype_init (char *str) +{ +} + /* Write everything to the header file (rs6000-builtins.h). */ static int write_header_file () @@ -2256,10 +2268,151 @@ write_header_file () return 1; } +/* Write code to initialize the built-in function table. */ +static void +write_init_bif_table () +{ +} + +/* Write code to initialize the overload table. */ +static void +write_init_ovld_table () +{ + fprintf (init_file, " int base = RS6000_OVLD_NONE;\n\n"); + + for (int i = 0; i <= curr_ovld; i++) + { + fprintf (init_file, + " rs6000_instance_info[RS6000_INST_%s].fntype" + "\n = %s;\n", + ovlds[i].ovld_id_name, ovlds[i].fndecl); + + if (i == 0 || ovlds[i].stanza != ovlds[i-1].stanza) + { + ovld_stanza *stanza = &ovld_stanzas[ovlds[i].stanza]; + fprintf (init_file, "\n"); + + /* Check whether we have a "tf" token in this string, representing + a float128_type_node. It's possible that float128_type_node is + undefined (occurs for -maltivec -mno-vsx, for example), so we + must guard against that. */ + int tf_found = strstr (ovlds[i].fndecl, "tf") != NULL; + + /* The fndecl for an overload is arbitrarily the first one + for the overload. We sort out the real types when + processing the overload in the gcc front end. */ + fprintf (init_file, + " if (new_builtins_are_live)\n"); + fprintf (init_file, " {\n"); + + if (tf_found) + { + fprintf (init_file, " if (float128_type_node)\n"); + fprintf (init_file, " {\n"); + } + + fprintf (init_file, + " rs6000_builtin_decls_x[(int)RS6000_OVLD_%s] = t\n", + stanza->stanza_id); + fprintf (init_file, + " = add_builtin_function (\"%s\",\n", + stanza->intern_name); + fprintf (init_file, + " %s,\n", + ovlds[i].fndecl); + fprintf (init_file, + " (int)RS6000_OVLD_%s," + " BUILT_IN_MD,\n", + stanza->stanza_id); + fprintf (init_file, + " NULL, NULL_TREE);\n"); + + if (tf_found) + fprintf (init_file, " }\n"); + + fprintf (init_file, " }\n\n"); + + fprintf (init_file, + " rs6000_overload_info[RS6000_OVLD_%s - base]" + ".first_instance\n", + stanza->stanza_id); + fprintf (init_file, + " = &rs6000_instance_info[RS6000_INST_%s];\n\n", + ovlds[i].ovld_id_name); + } + } +} + /* Write everything to the initialization file (rs6000-builtins.c). */ static int write_init_file () { + write_autogenerated_header (init_file); + + fprintf (init_file, "#include \"config.h\"\n"); + fprintf (init_file, "#include \"system.h\"\n"); + fprintf (init_file, "#include \"coretypes.h\"\n"); + fprintf (init_file, "#include \"backend.h\"\n"); + fprintf (init_file, "#include \"rtl.h\"\n"); + fprintf (init_file, "#include \"tree.h\"\n"); + fprintf (init_file, "#include \"langhooks.h\"\n"); + fprintf (init_file, "#include \"insn-codes.h\"\n"); + fprintf (init_file, "#include \"rs6000-builtins.h\"\n"); + fprintf (init_file, "\n"); + + fprintf (init_file, "int new_builtins_are_live = 0;\n\n"); + + fprintf (init_file, "tree rs6000_builtin_decls_x[RS6000_OVLD_MAX];\n\n"); + + rbt_inorder_callback (&fntype_rbt, fntype_rbt.rbt_root, write_fntype); + fprintf (init_file, "\n"); + + fprintf (init_file, "void\n"); + fprintf (init_file, "rs6000_autoinit_builtins ()\n"); + fprintf (init_file, "{\n"); + fprintf (init_file, " tree t;\n"); + rbt_inorder_callback (&fntype_rbt, fntype_rbt.rbt_root, write_fntype_init); + fprintf (init_file, "\n"); + + fprintf (init_file, + " rs6000_builtin_decls_x[RS6000_BIF_NONE] = NULL_TREE;\n"); + fprintf (init_file, + " rs6000_builtin_decls_x[RS6000_BIF_MAX] = NULL_TREE;\n"); + fprintf (init_file, + " rs6000_builtin_decls_x[RS6000_OVLD_NONE] = NULL_TREE;\n\n"); + + write_init_bif_table (); + write_init_ovld_table (); + + fprintf (init_file, "}\n\n"); + + fprintf (init_file, + "void gt_ggc_mx (bifdata *bd)\n"); + fprintf (init_file, + "{\n gt_ggc_mx (bd->fntype);\n}\n\n"); + fprintf (init_file, + "void gt_pch_nx (bifdata *bd)\n"); + fprintf (init_file, + "{\n gt_pch_nx (bd->fntype);\n}\n\n"); + fprintf (init_file, + "void gt_pch_nx (bifdata *bd, gt_pointer_operator op, " + "void *cookie)\n"); + fprintf (init_file, + "{\n op(&(bd->fntype), cookie);\n}\n\n"); + fprintf (init_file, + "void gt_ggc_mx (ovlddata *od)\n"); + fprintf (init_file, + "{\n gt_ggc_mx (od->fntype);\n}\n\n"); + fprintf (init_file, + "void gt_pch_nx (ovlddata *od)\n"); + fprintf (init_file, + "{\n gt_pch_nx (od->fntype);\n}\n\n"); + fprintf (init_file, + "void gt_pch_nx (ovlddata *od, gt_pointer_operator op, " + "void *cookie)\n"); + fprintf (init_file, + "{\n op(&(od->fntype), cookie);\n}\n"); + return 1; }