From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 2607 invoked by alias); 22 Nov 2010 20:52:09 -0000 Received: (qmail 2589 invoked by uid 22791); 22 Nov 2010 20:52:03 -0000 X-SWARE-Spam-Status: No, hits=-1.1 required=5.0 tests=AWL,BAYES_50,MIME_QP_LONG_LINE,RCVD_IN_DNSWL_LOW X-Spam-Check-By: sourceware.org Received: from c60.cesmail.net (HELO c60.cesmail.net) (216.154.195.49) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 22 Nov 2010 20:51:53 +0000 Received: from unknown (HELO epsilon2) ([192.168.1.60]) by c60.cesmail.net with ESMTP; 22 Nov 2010 15:51:40 -0500 Received: from 89.241.145.88 ([89.241.145.88]) by webmail.spamcop.net (Horde MIME library) with HTTP; Mon, 22 Nov 2010 15:51:40 -0500 Message-ID: <20101122155140.zjou1fzgu8kogk4k-nzlynne@webmail.spamcop.net> Date: Mon, 22 Nov 2010 21:49:00 -0000 From: Joern Rennecke To: gcc-patches@gcc.gnu.org Subject: P.P.S.: Updated: RFA: Fix middle-end/46500 (void * encapsulated) References: <20101116234626.u7kpzzukn34kogkk-nzlynne@webmail.spamcop.net> <20101118223203.muhg2uba8gww48co-nzlynne@webmail.spamcop.net> <20101119130418.1yd645j4u8wc44ck-nzlynne@webmail.spamcop.net> In-Reply-To: <20101119130418.1yd645j4u8wc44ck-nzlynne@webmail.spamcop.net> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_3nurgamtqm70" Content-Transfer-Encoding: 7bit User-Agent: Internet Messaging Program (IMP) H3 (4.1.4) Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2010-11/txt/msg02292.txt.bz2 This message is in MIME format. --=_3nurgamtqm70 Content-Type: text/plain; charset=ISO-8859-15; DelSp="Yes"; format="flowed" Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Content-length: 2454 Quoting Joern Rennecke : > Quoting Joern Rennecke : > If it helps the review process, I could decouple the middle-end end the > target part, by checking config/${cpu_type}/${cpu_type}.c if it mentions > cumulative_args_t, and set a macro if that is the case. > > Then for unconverted ports, target.h can continue to include "tm.h" and d= o: > typedef CUMULATIVE_ARGS *cumulative_args_t; > > to provide backward compatibility. This patch set shows how this can be implemented. I originally though about putting the test for cumulative_args_t being used by the target into configure, but we can't put the result into tm_defines - we want to get away from including tm.h, messing with the compiler flags is ... messy ... because that would interfere with flag overrides, and there are way to many Makefile rules affected to change them all for a temporary phasing-in hack. Therefore, I use a generated file, insn-cumulative_args_t, to convey the result of the test. As this file needs new Makefile rules, I put the check straight in the Makefile rule that generates this file. Unconverted ports will miss a dependency on $(TM_H) in $(TARGET_H), but that should only matter if CUMULATIVE_ARGS is changed in config/${cpu_type}/${cpu_type}.h - and when a port maintainer does that, (s= )he might as well update the argument types for the CUMULATIVE_ARGS taking hook functions; the patches for all the official ports are in the second=20=20 attachment, and any new / unoffical ports should also be easy to adjust. N.B. this patch makes PR target/46608 more likely to be visible. Bootstrapped without target specific patches on i686-pc-linux-gnu Bootstrapped & regression tested with target specific patches on i686-pc-linux-gnu . build-gcc cross-test succeeded with target-specific patches on i686-pc-linux-gnu for the following targets: alpha-linux-gnu hppa-linux-gnu mips-elf sh-elf arc-elf ia64-elf mmix-knuth-mmixware sparc-elf arm-eabi iq2000-elf mn10300-elf spu-elf avr-elf lm32-elf moxie-elf v850-elf bfin-elf pdp11-aout vax-linux-gnu cris-elf m32r-elf xstormy16-elf m68hc11-elf ppc-elf xtensa-elf fr30-elf m68k-elf rx-elf frv-elf mcore-elf s390-linux-gnu h8300-elf mep-elf score-elf picochip-elf is affected by PR46608 - build succeeds with manual make of generated files or with the proposed patch for PR46608 applied. m32c-elf does not build since r167020. crx-elf is still affected by PR46434 . --=_3nurgamtqm70 Content-Type: text/plain; charset=UTF-8; name="pr46500-struct-notgt-20101122" Content-Disposition: inline; filename="pr46500-struct-notgt-20101122" Content-Transfer-Encoding: quoted-printable Content-length: 36263 2010-11-19 Joern Rennecke PR middle-end/46500 gcc: * doc/tm.texi: Regenerate. * targhooks.c (default_setup_incoming_varargs): Replace CUMULATIVE_ARGS* argument type with cumulative_args_t. (default_pretend_outgoing_varargs_named): Likewise. (hook_pass_by_reference_must_pass_in_stack): Likewise. (hook_callee_copies_named): Likewise. (default_function_arg_advance): Likewise. (default_function_arg): Likewise. (default_function_incoming_arg): Likewise. (hook_bool_CUMULATIVE_ARGS_false): Likewise. (hook_bool_CUMULATIVE_ARGS_true): Likewise. (hook_bool_CUMULATIVE_ARGS_mode_tree_bool_false): Likewise. (hook_bool_CUMULATIVE_ARGS_mode_tree_bool_true): Likewise. (hook_int_CUMULATIVE_ARGS_mode_tree_bool_0): Likewise. * targhooks.h (default_setup_incoming_varargs): Likewise. (default_pretend_outgoing_varargs_named): Likewise. (hook_pass_by_reference_must_pass_in_stack): Likewise. (hook_callee_copies_named): Likewise. (default_function_arg_advance): Likewise. (default_function_arg): Likewise. (default_function_incoming_arg): Likewise. (hook_bool_CUMULATIVE_ARGS_false): Likewise. (hook_bool_CUMULATIVE_ARGS_true): Likewise. (hook_bool_CUMULATIVE_ARGS_mode_tree_bool_false): Likewise. (hook_bool_CUMULATIVE_ARGS_mode_tree_bool_true): Likewise. (hook_int_CUMULATIVE_ARGS_mode_tree_bool_0): Likewise. * target.def (pass_by_reference): Likewise. (setup_incoming_varargs, strict_argument_naming): Likewise. (pretend_outgoing_varargs_named, callee_copies): Likewise. (arg_partial_bytes, function_arg_advance, function_arg): Likewise. (function_incoming_arg): Likewise. * target.h: Don't include "tm.h" . Include "insn-cumulative_args_t.h" . (cumulative_args_t): New typedef. [GCC_TM_H] (get_cumulative_args): New static inline function. [GCC_TM_H] (pack_cumulative_args): Likewise. * calls.c (initialize_argument_information): Use pack_cumulative_args. (expand_call, emit_library_call_value_1): Likewise. * dse.c (get_call_args): Likewise. * expr.c (block_move_libcall_safe_for_call_parm): Likewise. * function.c (pass_by_reference, reference_callee_copied): Likewise. (assign_parm_find_data_types, assign_parms_setup_varargs): Likewise. (assign_parm_find_entry_rtl, assign_parms): Likewise. (gimplify_parameters): Likewise. * Makefile.in (TARGET_H): Replace $(TM_H) with insn-cumulative_args_t.h. (insn-cumulative_args_t.h, s-cumulative_args_t): New rules. gcc/c-family: * c-opts.c: Include "tm.h" . gcc/java: * expr.c: Include "tm.h" . gcc/fortran: * trans-types.c: Include "tm.h" . Index: gcc/doc/tm.texi =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- gcc/doc/tm.texi (revision 167032) +++ gcc/doc/tm.texi (working copy) @@ -4051,7 +4051,7 @@ @defmac FUNCTION_INCOMING_ARG (@var{cum} serves both purposes. @end defmac =20 -@deftypefn {Target Hook} int TARGET_ARG_PARTIAL_BYTES (CUMULATIVE_ARGS *@v= ar{cum}, enum machine_mode @var{mode}, tree @var{type}, bool @var{named}) +@deftypefn {Target Hook} int TARGET_ARG_PARTIAL_BYTES (cumulative_args_t @= var{cum}, enum machine_mode @var{mode}, tree @var{type}, bool @var{named}) This target hook returns the number of bytes at the beginning of an argument that must be put in registers. The value must be zero for arguments that are passed entirely in registers or that are entirely @@ -4070,7 +4070,7 @@ structure) crosses that boundary, its fi @code{FUNCTION_INCOMING_ARG}, for the called function. @end deftypefn =20 -@deftypefn {Target Hook} bool TARGET_PASS_BY_REFERENCE (CUMULATIVE_ARGS *@= var{cum}, enum machine_mode @var{mode}, const_tree @var{type}, bool @var{na= med}) +@deftypefn {Target Hook} bool TARGET_PASS_BY_REFERENCE (cumulative_args_t = @var{cum}, enum machine_mode @var{mode}, const_tree @var{type}, bool @var{n= amed}) This target hook should return @code{true} if an argument at the position indicated by @var{cum} should be passed by reference. This predicate is queried after target independent reasons for being @@ -4082,7 +4082,7 @@ passed by reference, such as @code{TREE_ to that type. @end deftypefn =20 -@deftypefn {Target Hook} bool TARGET_CALLEE_COPIES (CUMULATIVE_ARGS *@var{= cum}, enum machine_mode @var{mode}, const_tree @var{type}, bool @var{named}) +@deftypefn {Target Hook} bool TARGET_CALLEE_COPIES (cumulative_args_t @var= {cum}, enum machine_mode @var{mode}, const_tree @var{type}, bool @var{named= }) The function argument described by the parameters to this hook is known to be passed by reference. The hook should return true if the function argument should be copied by the callee instead of copied @@ -5016,7 +5016,7 @@ @deftypefn {Target Hook} rtx TARGET_EXPA to use as the return of @code{__builtin_saveregs}. @end deftypefn =20 -@deftypefn {Target Hook} void TARGET_SETUP_INCOMING_VARARGS (CUMULATIVE_AR= GS *@var{args_so_far}, enum machine_mode @var{mode}, tree @var{type}, int *= @var{pretend_args_size}, int @var{second_time}) +@deftypefn {Target Hook} void TARGET_SETUP_INCOMING_VARARGS (cumulative_ar= gs_t @var{args_so_far}, enum machine_mode @var{mode}, tree @var{type}, int = *@var{pretend_args_size}, int @var{second_time}) This target hook offers an alternative to using @code{__builtin_saveregs} and defining the hook @code{TARGET_EXPAND_BUILTIN_SAVEREGS}. Use it to store the anonymous @@ -5050,7 +5050,7 @@ structure, containing the values that ar not generate any instructions in this case. @end deftypefn =20 -@deftypefn {Target Hook} bool TARGET_STRICT_ARGUMENT_NAMING (CUMULATIVE_AR= GS *@var{ca}) +@deftypefn {Target Hook} bool TARGET_STRICT_ARGUMENT_NAMING (cumulative_ar= gs_t @var{ca}) Define this hook to return @code{true} if the location where a function argument is passed depends on whether or not it is a named argument. =20 @@ -5065,7 +5065,7 @@ @deftypefn {Target Hook} bool TARGET_STR You need not define this hook if it always returns @code{false}. @end deftypefn =20 -@deftypefn {Target Hook} bool TARGET_PRETEND_OUTGOING_VARARGS_NAMED (CUMUL= ATIVE_ARGS *@var{ca}) +@deftypefn {Target Hook} bool TARGET_PRETEND_OUTGOING_VARARGS_NAMED (cumul= ative_args_t @var{ca}) If you need to conditionally change ABIs so that one works with @code{TARGET_SETUP_INCOMING_VARARGS}, but the other works like neither @code{TARGET_SETUP_INCOMING_VARARGS} nor @code{TARGET_STRICT_ARGUMENT_NAMI= NG} was Index: gcc/targhooks.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- gcc/targhooks.c (revision 167032) +++ gcc/targhooks.c (working copy) @@ -167,7 +167,7 @@ default_expand_builtin_saveregs (void) } =20 void -default_setup_incoming_varargs (CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED, +default_setup_incoming_varargs (cumulative_args_t ca ATTRIBUTE_UNUSED, enum machine_mode mode ATTRIBUTE_UNUSED, tree type ATTRIBUTE_UNUSED, int *pretend_arg_size ATTRIBUTE_UNUSED, @@ -186,13 +186,13 @@ default_builtin_setjmp_frame_value (void /* Generic hook that takes a CUMULATIVE_ARGS pointer and returns false. */ =20 bool -hook_bool_CUMULATIVE_ARGS_false (CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED) +hook_bool_CUMULATIVE_ARGS_false (cumulative_args_t ca ATTRIBUTE_UNUSED) { return false; } =20 bool -default_pretend_outgoing_varargs_named (CUMULATIVE_ARGS *ca ATTRIBUTE_UNUS= ED) +default_pretend_outgoing_varargs_named (cumulative_args_t ca ATTRIBUTE_UNU= SED) { return (targetm.calls.setup_incoming_varargs !=3D default_setup_incoming_varargs); @@ -250,7 +250,7 @@ default_mode_rep_extended (enum machine_ /* Generic hook that takes a CUMULATIVE_ARGS pointer and returns true. */ =20 bool -hook_bool_CUMULATIVE_ARGS_true (CUMULATIVE_ARGS * a ATTRIBUTE_UNUSED) +hook_bool_CUMULATIVE_ARGS_true (cumulative_args_t a ATTRIBUTE_UNUSED) { return true; } @@ -299,7 +299,7 @@ default_cxx_get_cookie_size (tree type) of the TARGET_PASS_BY_REFERENCE hook uses just MUST_PASS_IN_STACK. */ =20 bool -hook_pass_by_reference_must_pass_in_stack (CUMULATIVE_ARGS *c ATTRIBUTE_UN= USED, +hook_pass_by_reference_must_pass_in_stack (cumulative_args_t c ATTRIBUTE_U= NUSED, enum machine_mode mode ATTRIBUTE_UNUSED, const_tree type ATTRIBUTE_UNUSED, bool named_arg ATTRIBUTE_UNUSED) { @@ -310,7 +310,7 @@ hook_pass_by_reference_must_pass_in_stac version of the hook is true for all named arguments. */ =20 bool -hook_callee_copies_named (CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED, +hook_callee_copies_named (cumulative_args_t ca ATTRIBUTE_UNUSED, enum machine_mode mode ATTRIBUTE_UNUSED, const_tree type ATTRIBUTE_UNUSED, bool named) { @@ -541,7 +541,7 @@ default_builtin_reciprocal (unsigned int =20 bool hook_bool_CUMULATIVE_ARGS_mode_tree_bool_false ( - CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED, + cumulative_args_t ca ATTRIBUTE_UNUSED, enum machine_mode mode ATTRIBUTE_UNUSED, const_tree type ATTRIBUTE_UNUSED, bool named ATTRIBUTE_UNUSED) { @@ -550,7 +550,7 @@ hook_bool_CUMULATIVE_ARGS_mode_tree_bool =20 bool hook_bool_CUMULATIVE_ARGS_mode_tree_bool_true ( - CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED, + cumulative_args_t ca ATTRIBUTE_UNUSED, enum machine_mode mode ATTRIBUTE_UNUSED, const_tree type ATTRIBUTE_UNUSED, bool named ATTRIBUTE_UNUSED) { @@ -559,7 +559,7 @@ hook_bool_CUMULATIVE_ARGS_mode_tree_bool =20 int hook_int_CUMULATIVE_ARGS_mode_tree_bool_0 ( - CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED, + cumulative_args_t ca ATTRIBUTE_UNUSED, enum machine_mode mode ATTRIBUTE_UNUSED, tree type ATTRIBUTE_UNUSED, bool named ATTRIBUTE_UNUSED) { @@ -567,41 +567,43 @@ hook_int_CUMULATIVE_ARGS_mode_tree_bool_ } =20 void -default_function_arg_advance (CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED, +default_function_arg_advance (cumulative_args_t ca ATTRIBUTE_UNUSED, enum machine_mode mode ATTRIBUTE_UNUSED, const_tree type ATTRIBUTE_UNUSED, bool named ATTRIBUTE_UNUSED) { #ifdef FUNCTION_ARG_ADVANCE - CUMULATIVE_ARGS args =3D *ca; + CUMULATIVE_ARGS args =3D *get_cumulative_args (ca); FUNCTION_ARG_ADVANCE (args, mode, CONST_CAST_TREE (type), named); - *ca =3D args; + *ca =3D pack_cumulative_args (args); #else gcc_unreachable (); #endif } =20 rtx -default_function_arg (CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED, +default_function_arg (cumulative_args_t ca ATTRIBUTE_UNUSED, enum machine_mode mode ATTRIBUTE_UNUSED, const_tree type ATTRIBUTE_UNUSED, bool named ATTRIBUTE_UNUSED) { #ifdef FUNCTION_ARG - return FUNCTION_ARG (*ca, mode, CONST_CAST_TREE (type), named); + return FUNCTION_ARG (*get_cumulative_args (ca), mode, CONST_CAST_TREE (t= ype), + named); #else gcc_unreachable (); #endif } =20 rtx -default_function_incoming_arg (CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED, +default_function_incoming_arg (cumulative_args_t ca ATTRIBUTE_UNUSED, enum machine_mode mode ATTRIBUTE_UNUSED, const_tree type ATTRIBUTE_UNUSED, bool named ATTRIBUTE_UNUSED) { #ifdef FUNCTION_INCOMING_ARG - return FUNCTION_INCOMING_ARG (*ca, mode, CONST_CAST_TREE (type), named); + return FUNCTION_INCOMING_ARG (*get_cumulative_args (ca), mode, + CONST_CAST_TREE (type), named); #else gcc_unreachable (); #endif Index: gcc/targhooks.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- gcc/targhooks.h (revision 167032) +++ gcc/targhooks.h (working copy) @@ -35,9 +35,9 @@ extern enum machine_mode default_cc_mode extern bool default_return_in_memory (const_tree, const_tree); =20 extern rtx default_expand_builtin_saveregs (void); -extern void default_setup_incoming_varargs (CUMULATIVE_ARGS *, enum machin= e_mode, tree, int *, int); +extern void default_setup_incoming_varargs (cumulative_args_t, enum machin= e_mode, tree, int *, int); extern rtx default_builtin_setjmp_frame_value (void); -extern bool default_pretend_outgoing_varargs_named (CUMULATIVE_ARGS *); +extern bool default_pretend_outgoing_varargs_named (cumulative_args_t); =20 extern enum machine_mode default_eh_return_filter_mode (void); extern enum machine_mode default_libgcc_cmp_return_mode (void); @@ -58,9 +58,9 @@ extern tree default_cxx_guard_type (void extern tree default_cxx_get_cookie_size (tree); =20 extern bool hook_pass_by_reference_must_pass_in_stack - (CUMULATIVE_ARGS *, enum machine_mode mode, const_tree, bool); + (cumulative_args_t, enum machine_mode mode, const_tree, bool); extern bool hook_callee_copies_named - (CUMULATIVE_ARGS *ca, enum machine_mode, const_tree, bool); + (cumulative_args_t ca, enum machine_mode, const_tree, bool); =20 extern void default_print_operand (FILE *, rtx, int); extern void default_print_operand_address (FILE *, rtx); @@ -94,23 +94,23 @@ extern unsigned int default_autovectoriz /* These are here, and not in hooks.[ch], because not all users of hooks.h include tm.h, and thus we don't have CUMULATIVE_ARGS. */ =20 -extern bool hook_bool_CUMULATIVE_ARGS_false (CUMULATIVE_ARGS *); -extern bool hook_bool_CUMULATIVE_ARGS_true (CUMULATIVE_ARGS *); +extern bool hook_bool_CUMULATIVE_ARGS_false (cumulative_args_t); +extern bool hook_bool_CUMULATIVE_ARGS_true (cumulative_args_t); =20 extern bool hook_bool_CUMULATIVE_ARGS_mode_tree_bool_false - (CUMULATIVE_ARGS *, enum machine_mode, const_tree, bool); + (cumulative_args_t, enum machine_mode, const_tree, bool); extern bool hook_bool_CUMULATIVE_ARGS_mode_tree_bool_true - (CUMULATIVE_ARGS *, enum machine_mode, const_tree, bool); + (cumulative_args_t, enum machine_mode, const_tree, bool); extern int hook_int_CUMULATIVE_ARGS_mode_tree_bool_0 - (CUMULATIVE_ARGS *, enum machine_mode, tree, bool); + (cumulative_args_t, enum machine_mode, tree, bool); extern const char *hook_invalid_arg_for_unprototyped_fn (const_tree, const_tree, const_tree); extern void default_function_arg_advance - (CUMULATIVE_ARGS *, enum machine_mode, const_tree, bool); + (cumulative_args_t, enum machine_mode, const_tree, bool); extern rtx default_function_arg - (CUMULATIVE_ARGS *, enum machine_mode, const_tree, bool); + (cumulative_args_t, enum machine_mode, const_tree, bool); extern rtx default_function_incoming_arg - (CUMULATIVE_ARGS *, enum machine_mode, const_tree, bool); + (cumulative_args_t, enum machine_mode, const_tree, bool); extern unsigned int default_function_arg_boundary (enum machine_mode, const_tree); extern bool hook_bool_const_rtx_commutative_p (const_rtx, int); Index: gcc/c-family/c-opts.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- gcc/c-family/c-opts.c (revision 167032) +++ gcc/c-family/c-opts.c (working copy) @@ -22,6 +22,7 @@ Software Foundation; either version 3, o #include "config.h" #include "system.h" #include "coretypes.h" +#include "tm.h" #include "tree.h" #include "c-common.h" #include "c-pragma.h" Index: gcc/java/expr.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- gcc/java/expr.c (revision 167032) +++ gcc/java/expr.c (working copy) @@ -27,6 +27,7 @@ the Free Software Foundation; either ver #include "config.h" #include "system.h" #include "coretypes.h" +#include "tm.h" #include "tree.h" #include "flags.h" #include "java-tree.h" Index: gcc/target.def =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- gcc/target.def (revision 167032) +++ gcc/target.def (working copy) @@ -1890,7 +1890,7 @@ HOOK_VECTOR (TARGET_CALLS, calls) (pass_by_reference, "", bool, - (CUMULATIVE_ARGS *cum, enum machine_mode mode, const_tree type, bool name= d), + (cumulative_args_t cum, enum machine_mode mode, const_tree type, bool nam= ed), hook_bool_CUMULATIVE_ARGS_mode_tree_bool_false) =20 DEFHOOK @@ -1903,14 +1903,14 @@ HOOK_VECTOR (TARGET_CALLS, calls) DEFHOOK (setup_incoming_varargs, "", - void, (CUMULATIVE_ARGS *args_so_far, enum machine_mode mode, tree type, + void, (cumulative_args_t args_so_far, enum machine_mode mode, tree type, int *pretend_args_size, int second_time), default_setup_incoming_varargs) =20 DEFHOOK (strict_argument_naming, "", - bool, (CUMULATIVE_ARGS *ca), + bool, (cumulative_args_t ca), hook_bool_CUMULATIVE_ARGS_false) =20 /* Returns true if we should use @@ -1919,7 +1919,7 @@ HOOK_VECTOR (TARGET_CALLS, calls) DEFHOOK (pretend_outgoing_varargs_named, "", - bool, (CUMULATIVE_ARGS *ca), + bool, (cumulative_args_t ca), default_pretend_outgoing_varargs_named) =20 /* Given a complex type T, return true if a parameter of type T @@ -1946,7 +1946,7 @@ HOOK_VECTOR (TARGET_CALLS, calls) (callee_copies, "", bool, - (CUMULATIVE_ARGS *cum, enum machine_mode mode, const_tree type, bool name= d), + (cumulative_args_t cum, enum machine_mode mode, const_tree type, bool nam= ed), hook_bool_CUMULATIVE_ARGS_mode_tree_bool_false) =20 /* Return zero for arguments passed entirely on the stack or entirely @@ -1955,7 +1955,7 @@ HOOK_VECTOR (TARGET_CALLS, calls) DEFHOOK (arg_partial_bytes, "", - int, (CUMULATIVE_ARGS *cum, enum machine_mode mode, tree type, bool named= ), + int, (cumulative_args_t cum, enum machine_mode mode, tree type, bool name= d), hook_int_CUMULATIVE_ARGS_mode_tree_bool_0) =20 /* Update the state in CA to advance past an argument in the @@ -1966,7 +1966,7 @@ HOOK_VECTOR (TARGET_CALLS, calls) (function_arg_advance, "", void, - (CUMULATIVE_ARGS *ca, enum machine_mode mode, const_tree type, bool named= ), + (cumulative_args_t ca, enum machine_mode mode, const_tree type, bool name= d), default_function_arg_advance) =20 /* Return zero if the argument described by the state of CA should @@ -1977,7 +1977,7 @@ HOOK_VECTOR (TARGET_CALLS, calls) DEFHOOK_UNDOC (function_arg, "", - rtx, (CUMULATIVE_ARGS *ca, enum machine_mode mode, const_tree type, + rtx, (cumulative_args_t ca, enum machine_mode mode, const_tree type, bool named), default_function_arg) =20 @@ -1987,7 +1987,7 @@ HOOK_VECTOR (TARGET_CALLS, calls) DEFHOOK_UNDOC (function_incoming_arg, "", - rtx, (CUMULATIVE_ARGS *ca, enum machine_mode mode, const_tree type, + rtx, (cumulative_args_t ca, enum machine_mode mode, const_tree type, bool named), default_function_incoming_arg) =20 Index: gcc/target.h =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- gcc/target.h (revision 167032) +++ gcc/target.h (working copy) @@ -49,9 +49,31 @@ #ifndef GCC_TARGET_H #define GCC_TARGET_H =20 -#include "tm.h" #include "insn-modes.h" =20 +#include "insn-cumulative_args_t.h" + +#ifndef TARGET_USES_CUMULATIVE_ARGS_T + +#include "tm.h" +typedef CUMULATIVE_ARGS *cumulative_args_t; + +#elif defined (ENABLE_CHECKING) + +typedef struct { void *magic; void *p; } cumulative_args_t; + +#else /* !ENABLE_CHECKING */ + +#ifdef __GNUC__ +#define ATTRIBUTE_TRANSPARENT_UNION __attribute__((transparent_union)) +#else +#define ATTRIBUTE_TRANSPARENT_UNION +#endif + +typedef union ATTRIBUTE_TRANSPARENT_UNION { void *p; } cumulative_args_t; + +#endif /* !ENABLE_CHECKING */ + /* Types used by the record_gcc_switches() target function. */ typedef enum { @@ -176,4 +198,50 @@ struct default_options /* Each target can provide their own. */ extern struct gcc_targetcm targetcm; =20 +#ifdef GCC_TM_H + +#ifdef TARGET_USES_CUMULATIVE_ARGS_T + +#ifndef CUMULATIVE_ARGS_MAGIC +#define CUMULATIVE_ARGS_MAGIC ((void *) &targetm.calls) +#endif + +static inline CUMULATIVE_ARGS * +get_cumulative_args (cumulative_args_t arg) +{ +#ifdef ENABLE_CHECKING + gcc_assert (arg.magic =3D=3D CUMULATIVE_ARGS_MAGIC); +#endif /* ENABLE_CHECKING */ + return (CUMULATIVE_ARGS *) arg.p; +} + +static inline cumulative_args_t +pack_cumulative_args (CUMULATIVE_ARGS *arg) +{ + cumulative_args_t ret; + +#ifdef ENABLE_CHECKING + ret.magic =3D CUMULATIVE_ARGS_MAGIC; +#endif /* ENABLE_CHECKING */ + ret.p =3D (void *) arg; + return ret; +} + +#else /* !TARGET_USES_CUMULATIVE_ARGS_T */ + +static inline CUMULATIVE_ARGS * +get_cumulative_args (cumulative_args_t arg) +{ + return arg; +} + +static inline cumulative_args_t +pack_cumulative_args (CUMULATIVE_ARGS *arg) +{ + return arg; +} + +#endif /* !TARGET_USES_CUMULATIVE_ARGS_T */ +#endif /* GCC_TM_H */ + #endif /* GCC_TARGET_H */ Index: gcc/expr.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- gcc/expr.c (revision 167032) +++ gcc/expr.c (working copy) @@ -1238,14 +1238,16 @@ block_move_libcall_safe_for_call_parm (v for ( ; arg !=3D void_list_node ; arg =3D TREE_CHAIN (arg)) { enum machine_mode mode =3D TYPE_MODE (TREE_VALUE (arg)); - rtx tmp =3D targetm.calls.function_arg (&args_so_far, mode, - NULL_TREE, true); + rtx tmp + =3D targetm.calls.function_arg (pack_cumulative_args (&args_so_far), + mode, NULL_TREE, true); if (!tmp || !REG_P (tmp)) return false; - if (targetm.calls.arg_partial_bytes (&args_so_far, mode, NULL, 1)) + if (targetm.calls.arg_partial_bytes + (pack_cumulative_args (&args_so_far), mode, NULL, 1)) return false; - targetm.calls.function_arg_advance (&args_so_far, mode, - NULL_TREE, true); + targetm.calls.function_arg_advance (pack_cumulative_args (&args_so_far), + mode, NULL_TREE, true); } } return true; Index: gcc/dse.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- gcc/dse.c (revision 167032) +++ gcc/dse.c (working copy) @@ -2322,7 +2322,8 @@ get_call_args (rtx call_insn, tree fn, r { enum machine_mode mode =3D TYPE_MODE (TREE_VALUE (arg)); rtx reg, link, tmp; - reg =3D targetm.calls.function_arg (&args_so_far, mode, NULL_TREE, t= rue); + reg =3D targetm.calls.function_arg (pack_cumulative_args (&args_so_f= ar), + mode, NULL_TREE, true); if (!reg || !REG_P (reg) || GET_MODE (reg) !=3D mode || GET_MODE_CLASS (mode) !=3D MODE_INT) return false; @@ -2356,7 +2357,8 @@ get_call_args (rtx call_insn, tree fn, r if (tmp) args[idx] =3D tmp; =20 - targetm.calls.function_arg_advance (&args_so_far, mode, NULL_TREE, t= rue); + targetm.calls.function_arg_advance (pack_cumulative_args (&args_so_f= ar), + mode, NULL_TREE, true); } if (arg !=3D void_list_node || idx !=3D nargs) return false; Index: gcc/fortran/trans-types.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- gcc/fortran/trans-types.c (revision 167032) +++ gcc/fortran/trans-types.c (working copy) @@ -26,6 +26,7 @@ Software Foundation; either version 3, o #include "config.h" #include "system.h" #include "coretypes.h" +#include "tm.h" #include "tree.h" #include "langhooks.h" /* For iso-c-bindings.def. */ #include "target.h" Index: gcc/function.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- gcc/function.c (revision 167032) +++ gcc/function.c (working copy) @@ -2106,7 +2106,8 @@ pass_by_reference (CUMULATIVE_ARGS *ca,=20 } } =20 - return targetm.calls.pass_by_reference (ca, mode, type, named_arg); + return targetm.calls.pass_by_reference (pack_cumulative_args (ca), mode, + type, named_arg); } =20 /* Return true if TYPE, which is passed by reference, should be callee @@ -2118,7 +2119,7 @@ reference_callee_copied (CUMULATIVE_ARGS { if (type && TREE_ADDRESSABLE (type)) return false; - return targetm.calls.callee_copies (ca, mode, type, named_arg); + return targetm.calls.callee_copies (pack_cumulative_args (ca), mode, typ= e, named_arg); } =20 /* Structures to communicate between the subroutines of assign_parms. @@ -2291,7 +2292,8 @@ assign_parm_find_data_types (struct assi data->named_arg =3D 1; /* No variadic parms. */ else if (DECL_CHAIN (parm)) data->named_arg =3D 1; /* Not the last non-variadic parm. */ - else if (targetm.calls.strict_argument_naming (&all->args_so_far)) + else if (targetm.calls.strict_argument_naming + (pack_cumulative_args (&all->args_so_far))) data->named_arg =3D 1; /* Only variadic ones are unnamed. */ else data->named_arg =3D 0; /* Treat as variadic. */ @@ -2356,10 +2358,9 @@ assign_parms_setup_varargs (struct assig { int varargs_pretend_bytes =3D 0; =20 - targetm.calls.setup_incoming_varargs (&all->args_so_far, - data->promoted_mode, - data->passed_type, - &varargs_pretend_bytes, no_rtl); + (targetm.calls.setup_incoming_varargs + (pack_cumulative_args (&all->args_so_far), data->promoted_mode, + data->passed_type, &varargs_pretend_bytes, no_rtl)); =20 /* If the back-end has requested extra stack space, record how much is needed. Do not change pretend_args_size otherwise since it may be @@ -2385,10 +2386,9 @@ assign_parm_find_entry_rtl (struct assig return; } =20 - entry_parm =3D targetm.calls.function_incoming_arg (&all->args_so_far, - data->promoted_mode, - data->passed_type, - data->named_arg); + entry_parm =3D (targetm.calls.function_incoming_arg + (pack_cumulative_args (&all->args_so_far), + data->promoted_mode, data->passed_type, data->named_arg)); =20 if (entry_parm =3D=3D 0) data->promoted_mode =3D data->passed_mode; @@ -2409,12 +2409,13 @@ assign_parm_find_entry_rtl (struct assig #endif if (!in_regs && !data->named_arg) { - if (targetm.calls.pretend_outgoing_varargs_named (&all->args_so_far)) + if (targetm.calls.pretend_outgoing_varargs_named + (pack_cumulative_args (&all->args_so_far))) { rtx tem; - tem =3D targetm.calls.function_incoming_arg (&all->args_so_far, - data->promoted_mode, - data->passed_type, true); + tem =3D (targetm.calls.function_incoming_arg + (pack_cumulative_args (&all->args_so_far), + data->promoted_mode, data->passed_type, true)); in_regs =3D tem !=3D NULL; } } @@ -2429,10 +2430,9 @@ assign_parm_find_entry_rtl (struct assig { int partial; =20 - partial =3D targetm.calls.arg_partial_bytes (&all->args_so_far, - data->promoted_mode, - data->passed_type, - data->named_arg); + partial =3D (targetm.calls.arg_partial_bytes + (pack_cumulative_args (&all->args_so_far), + data->promoted_mode, data->passed_type, data->named_arg)); data->partial =3D partial; =20 /* The caller might already have allocated stack space for the @@ -3363,8 +3363,9 @@ assign_parms (tree fndecl) set_decl_incoming_rtl (parm, data.entry_parm, data.passed_pointer); =20 /* Update info on where next arg arrives in registers. */ - targetm.calls.function_arg_advance (&all.args_so_far, data.promoted_= mode, - data.passed_type, data.named_arg); + (targetm.calls.function_arg_advance + (pack_cumulative_args (&all.args_so_far), data.promoted_mode, + data.passed_type, data.named_arg)); =20 assign_parm_adjust_stack_rtl (&data); =20 @@ -3553,8 +3554,9 @@ gimplify_parameters (void) continue; =20 /* Update info on where next arg arrives in registers. */ - targetm.calls.function_arg_advance (&all.args_so_far, data.promoted_= mode, - data.passed_type, data.named_arg); + (targetm.calls.function_arg_advance + (pack_cumulative_args (&all.args_so_far), data.promoted_mode, + data.passed_type, data.named_arg)); =20 /* ??? Once upon a time variable_size stuffed parameter list SAVE_EXPRs (amongst others) onto a pending sizes list. This Index: gcc/calls.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- gcc/calls.c (revision 167032) +++ gcc/calls.c (working copy) @@ -1138,23 +1138,25 @@ initialize_argument_information (int num args[i].unsignedp =3D unsignedp; args[i].mode =3D mode; =20 - args[i].reg =3D targetm.calls.function_arg (args_so_far, mode, type, - argpos < n_named_args); + args[i].reg + =3D targetm.calls.function_arg (pack_cumulative_args (args_so_far), mode, + type, argpos < n_named_args); =20 /* If this is a sibling call and the machine has register windows, t= he register window has to be unwinded before calling the routine, so arguments have to go into the incoming registers. */ if (targetm.calls.function_incoming_arg !=3D targetm.calls.function_= arg) args[i].tail_call_reg - =3D targetm.calls.function_incoming_arg (args_so_far, mode, type, - argpos < n_named_args); + =3D (targetm.calls.function_incoming_arg + (pack_cumulative_args (args_so_far), mode, type, + argpos < n_named_args)); else args[i].tail_call_reg =3D args[i].reg; =20 if (args[i].reg) args[i].partial - =3D targetm.calls.arg_partial_bytes (args_so_far, mode, type, - argpos < n_named_args); + =3D targetm.calls.arg_partial_bytes (pack_cumulative_args (args_so_far), + mode, type, argpos < n_named_args); =20 args[i].pass_on_stack =3D targetm.calls.must_pass_in_stack (mode, ty= pe); =20 @@ -1204,7 +1206,8 @@ initialize_argument_information (int num /* Increment ARGS_SO_FAR, which has info about which arg-registers have been used, etc. */ =20 - targetm.calls.function_arg_advance (args_so_far, TYPE_MODE (type), + targetm.calls.function_arg_advance (pack_cumulative_args (args_so_fa= r), + TYPE_MODE (type), type, argpos < n_named_args); } } @@ -2247,10 +2250,12 @@ expand_call (tree exp, rtx target, int i registers, so we must force them into memory. */ =20 if (type_arg_types !=3D 0 - && targetm.calls.strict_argument_naming (&args_so_far)) + && (targetm.calls.strict_argument_naming + (pack_cumulative_args (&args_so_far)))) ; else if (type_arg_types !=3D 0 - && ! targetm.calls.pretend_outgoing_varargs_named (&args_so_far)) + && ! (targetm.calls.pretend_outgoing_varargs_named + (pack_cumulative_args (&args_so_far)))) /* Don't include the last named arg. */ --n_named_args; else @@ -2861,14 +2866,13 @@ expand_call (tree exp, rtx target, int i /* Set up next argument register. For sibling calls on machines with register windows this should be the incoming register. */ if (pass =3D=3D 0) - next_arg_reg =3D targetm.calls.function_incoming_arg (&args_so_far, - VOIDmode, - void_type_node, - true); + next_arg_reg =3D (targetm.calls.function_incoming_arg + (pack_cumulative_args (&args_so_far), VOIDmode, + void_type_node, true)); else - next_arg_reg =3D targetm.calls.function_arg (&args_so_far, - VOIDmode, void_type_node, - true); + next_arg_reg + =3D targetm.calls.function_arg (pack_cumulative_args (&args_so_far), + VOIDmode, void_type_node, true); =20 /* All arguments and registers used for the call must be set up by now! */ @@ -3455,10 +3459,12 @@ emit_library_call_value_1 (int retval, r argvec[count].mode =3D Pmode; argvec[count].partial =3D 0; =20 - argvec[count].reg =3D targetm.calls.function_arg (&args_so_far, - Pmode, NULL_TREE, true); - gcc_assert (targetm.calls.arg_partial_bytes (&args_so_far, Pmode, - NULL_TREE, 1) =3D=3D 0); + argvec[count].reg + =3D targetm.calls.function_arg (pack_cumulative_args (&args_so_far), + Pmode, NULL_TREE, true); + gcc_assert ((targetm.calls.arg_partial_bytes + (pack_cumulative_args (&args_so_far), Pmode, NULL_TREE, 1)) + =3D=3D 0); =20 locate_and_pad_parm (Pmode, NULL_TREE, #ifdef STACK_PARMS_IN_REG_PARM_AREA @@ -3472,7 +3478,8 @@ emit_library_call_value_1 (int retval, r || reg_parm_stack_space > 0) args_size.constant +=3D argvec[count].locate.size.constant; =20 - targetm.calls.function_arg_advance (&args_so_far, Pmode, (tree) 0, t= rue); + targetm.calls.function_arg_advance (pack_cumulative_args (&args_so_f= ar), + Pmode, (tree) 0, true); =20 count++; } @@ -3531,11 +3538,13 @@ emit_library_call_value_1 (int retval, r argvec[count].value =3D val; argvec[count].mode =3D mode; =20 - argvec[count].reg =3D targetm.calls.function_arg (&args_so_far, mode, - NULL_TREE, true); + argvec[count].reg + =3D targetm.calls.function_arg (pack_cumulative_args (&args_so_far), + mode, NULL_TREE, true); =20 argvec[count].partial - =3D targetm.calls.arg_partial_bytes (&args_so_far, mode, NULL_TREE, 1); + =3D targetm.calls.arg_partial_bytes (pack_cumulative_args (&args_so_far), + mode, NULL_TREE, 1); =20 locate_and_pad_parm (mode, NULL_TREE, #ifdef STACK_PARMS_IN_REG_PARM_AREA @@ -3552,7 +3561,8 @@ emit_library_call_value_1 (int retval, r || reg_parm_stack_space > 0) args_size.constant +=3D argvec[count].locate.size.constant; =20 - targetm.calls.function_arg_advance (&args_so_far, mode, (tree) 0, tr= ue); + targetm.calls.function_arg_advance (pack_cumulative_args (&args_so_f= ar), + mode, (tree) 0, true); } =20 /* If this machine requires an external definition for library @@ -3868,7 +3878,7 @@ emit_library_call_value_1 (int retval, r build_function_type (tfom, NULL_TREE), original_args_size.constant, args_size.constant, struct_value_size, - targetm.calls.function_arg (&args_so_far, + targetm.calls.function_arg (pack_cumulative_args (&args_so_far), VOIDmode, void_type_node, true), valreg, old_inhibit_defer_pop + 1, call_fusage, flags, & args_so_far); Index: gcc/Makefile.in =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- gcc/Makefile.in (revision 167032) +++ gcc/Makefile.in (working copy) @@ -874,7 +874,7 @@ REVISION_s :=3D "\"$(if $(DEVPHASE_c), $( VEC_H =3D vec.h statistics.h EXCEPT_H =3D except.h $(HASHTAB_H) vecprim.h vecir.h TOPLEV_H =3D toplev.h $(INPUT_H) bversion.h $(DIAGNOSTIC_CORE_H) -TARGET_H =3D $(TM_H) target.h target.def insn-modes.h +TARGET_H =3D insn-cumulative_args_t.h target.h target.def insn-modes.h MACHMODE_H =3D machmode.h mode-classes.def insn-modes.h HOOKS_H =3D hooks.h $(MACHMODE_H) HOSTHOOKS_DEF_H =3D hosthooks-def.h $(HOOKS_H) @@ -3708,6 +3708,13 @@ s-constrs-h: $(MD_DEPS) build/genpreds$( $(SHELL) $(srcdir)/../move-if-change tmp-constrs.h tm-constrs.h $(STAMP) s-constrs-h =20 +insn-cumulative_args_t.h : s-cumulative_args_t; @true +s-cumulative_args_t: $(out_file:.o=3D.c) + if test -n "`grep cumulative_args_t $^`"; then \ + echo '#define TARGET_USES_CUMULATIVE_ARGS_T 1'; \ + fi > tmp-cumulative_args_t.h + $(SHELL) $(srcdir)/../move-if-change tmp-cumulative_args_t.h insn-cumulat= ive_args_t.h + target-hooks-def.h: s-target-hooks-def-h; @true # make sure that when we build info files, the used tm.texi is up to date. $(srcdir)/doc/tm.texi: s-tm-texi; @true --=_3nurgamtqm70 Content-Type: application/x-bzip2; name="pr46500-struct-tgt-20101122.bz2" Content-Disposition: attachment; filename="pr46500-struct-tgt-20101122.bz2" Content-Transfer-Encoding: base64 Content-length: 22859 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 --=_3nurgamtqm70--