This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[patch] iq2000: Hookize some target macros.


Hi,

Attached is a patch to hookize some target macros.

Built cc1 of iq2000-elf.  OK to apply?

Kazu Hirata

2004-01-25  Kazu Hirata  <kazu@cs.umass.edu>

	* config/iq2000/iq2000-protos.h: Remove the prorotype for
	iq2000_setup_incoming_varargs.
	* config/iq2000/iq2000.c (TARGET_PROMOTE_FUNCTION_ARGS): New.
	(TARGET_PROMOTE_FUNCTION_RETURN): Likewise.
	(TARGET_PROMOTE_PROTOTYPES): Likewise.
	(TARGET_STRUCT_VALUE_RTX): Likewise.
	(TARGET_RETURN_IN_MEMORY): Likewise.
	(TARGET_SETUP_INCOMING_VARARGS): Likewise.
	(TARGET_STRICT_ARGUMENT_NAMING): Likewise.
	(iq2000_return_in_memory): Likewise.
	(iq2000_setup_incoming_varargs): Make it static.  Receive the
	first argument by reference.
	* config/iq2000/iq2000.h (PROMOTE_FUNCTION_ARGS): Remove.
	(PROMOTE_FUNCTION_RETURN): Likewise.
	(PROMOTE_PROTOTYPES): Likewise.
	(RETURN_IN_MEMORY): Likewise.
	(STRUCT_VALUE): Likewise.
	(SETUP_INCOMING_VARARGS): Likewise.
	(STRICT_ARGUMENT_NAMING): Likewise.

Index: iq2000-protos.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/iq2000/iq2000-protos.h,v
retrieving revision 1.4
diff -c -r1.4 iq2000-protos.h
*** iq2000-protos.h	14 Jan 2004 03:10:51 -0000	1.4
--- iq2000-protos.h	25 Jan 2004 05:22:03 -0000
***************
*** 1,5 ****
  /* Definitions of target machine for GNU compiler for iq2000.
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
     This file is part of GCC.
  
--- 1,5 ----
  /* Definitions of target machine for GNU compiler for iq2000.
!    Copyright (C) 2003, 2004 Free Software Foundation, Inc.
  
     This file is part of GCC.
  
***************
*** 38,44 ****
  extern int              function_arg_pass_by_reference (CUMULATIVE_ARGS *, enum machine_mode, tree, int);
  extern int              iq2000_adjust_insn_length (rtx, int);
  extern char *           iq2000_output_conditional_branch (rtx, rtx *, int, int, int, int);
- extern void             iq2000_setup_incoming_varargs (CUMULATIVE_ARGS, int, tree, int*, int);
  extern void             print_operand_address (FILE *, rtx);
  extern void             print_operand (FILE *, rtx, int);
  
--- 38,43 ----
Index: iq2000.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/iq2000/iq2000.c,v
retrieving revision 1.6
diff -c -r1.6 iq2000.c
*** iq2000.c	14 Jan 2004 03:10:51 -0000	1.6
--- iq2000.c	25 Jan 2004 05:22:04 -0000
***************
*** 1,5 ****
  /* Subroutines used for code generation on Vitesse IQ2000 processors
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
--- 1,5 ----
  /* Subroutines used for code generation on Vitesse IQ2000 processors
!    Copyright (C) 2003, 2004 Free Software Foundation, Inc.
  
  This file is part of GCC.
  
***************
*** 163,171 ****
--- 163,176 ----
  static void iq2000_select_rtx_section (enum machine_mode, rtx, unsigned HOST_WIDE_INT);
  static void iq2000_init_builtins      (void);
  static rtx  iq2000_expand_builtin     (tree, rtx, rtx, enum machine_mode, int);
+ static bool iq2000_return_in_memory   (tree, tree);
+ static void iq2000_setup_incoming_varargs (CUMULATIVE_ARGS *,
+ 					   enum machine_mode, tree, int *,
+ 					   int);
  static bool iq2000_rtx_costs          (rtx, int, int, int *);
  static int  iq2000_address_cost       (rtx);
  static void iq2000_select_section     (tree, int, unsigned HOST_WIDE_INT);
+ static bool iq2000_return_in_memory   (tree, tree);
  
  #undef  TARGET_INIT_BUILTINS
  #define TARGET_INIT_BUILTINS 		iq2000_init_builtins
***************
*** 180,185 ****
--- 185,207 ----
  #undef  TARGET_ASM_SELECT_SECTION
  #define TARGET_ASM_SELECT_SECTION	iq2000_select_section
  
+ #undef  TARGET_PROMOTE_FUNCTION_ARGS
+ #define TARGET_PROMOTE_FUNCTION_ARGS	hook_bool_tree_true
+ #undef  TARGET_PROMOTE_FUNCTION_RETURN
+ #define TARGET_PROMOTE_FUNCTION_RETURN	hook_bool_tree_true
+ #undef  TARGET_PROMOTE_PROTOTYPES
+ #define TARGET_PROMOTE_PROTOTYPES	hook_bool_tree_true
+ 
+ #undef  TARGET_STRUCT_VALUE_RTX
+ #define TARGET_STRUCT_VALUE_RTX		hook_rtx_tree_int_null
+ #undef  TARGET_RETURN_IN_MEMORY
+ #define TARGET_RETURN_IN_MEMORY		iq2000_return_in_memory
+ 
+ #undef  TARGET_SETUP_INCOMING_VARARGS
+ #define TARGET_SETUP_INCOMING_VARARGS	iq2000_setup_incoming_varargs
+ #undef  TARGET_STRICT_ARGUMENT_NAMING
+ #define TARGET_STRICT_ARGUMENT_NAMING	hook_bool_CUMULATIVE_ARGS_true
+ 
  struct gcc_target targetm = TARGET_INITIALIZER;
  
  /* Return 1 if OP can be used as an operand where a register or 16 bit unsigned
***************
*** 2642,2649 ****
    enum machine_mode mode = TYPE_MODE (valtype);
    int unsignedp = TREE_UNSIGNED (valtype);
  
!   /* Since we define PROMOTE_FUNCTION_RETURN, we must promote the mode
!      just as PROMOTE_MODE does.  */
    mode = promote_mode (valtype, mode, &unsignedp, 1);
  
    return gen_rtx_REG (mode, reg);
--- 2664,2671 ----
    enum machine_mode mode = TYPE_MODE (valtype);
    int unsignedp = TREE_UNSIGNED (valtype);
  
!   /* Since we define TARGET_PROMOTE_FUNCTION_RETURN that returns true,
!      we must promote the mode just as PROMOTE_MODE does.  */
    mode = promote_mode (valtype, mode, &unsignedp, 1);
  
    return gen_rtx_REG (mode, reg);
***************
*** 3262,3281 ****
    return NULL_RTX;
  }
  
! void
! iq2000_setup_incoming_varargs (CUMULATIVE_ARGS cum, int mode ATTRIBUTE_UNUSED,
  			       tree type ATTRIBUTE_UNUSED, int * pretend_size,
  			       int no_rtl)
  {
!   unsigned int iq2000_off = (! (cum).last_arg_fp); 
!   unsigned int iq2000_fp_off = ((cum).last_arg_fp); 
  
!   if (((cum).arg_words < MAX_ARGS_IN_REGISTERS - iq2000_off))
      {
        int iq2000_save_gp_regs 
! 	= MAX_ARGS_IN_REGISTERS - (cum).arg_words - iq2000_off; 
        int iq2000_save_fp_regs 
!         = (MAX_ARGS_IN_REGISTERS - (cum).fp_arg_words - iq2000_fp_off); 
  
        if (iq2000_save_gp_regs < 0) 
  	iq2000_save_gp_regs = 0; 
--- 3284,3311 ----
    return NULL_RTX;
  }
  
! static bool
! iq2000_return_in_memory (tree type, tree fntype ATTRIBUTE_UNUSED)
! {
!   return ((int_size_in_bytes (type) > (2 * UNITS_PER_WORD))
! 	  || (int_size_in_bytes (type) == -1));
! }
! 
! static void
! iq2000_setup_incoming_varargs (CUMULATIVE_ARGS *cum,
! 			       enum machine_mode mode ATTRIBUTE_UNUSED,
  			       tree type ATTRIBUTE_UNUSED, int * pretend_size,
  			       int no_rtl)
  {
!   unsigned int iq2000_off = ! cum->last_arg_fp; 
!   unsigned int iq2000_fp_off = cum->last_arg_fp; 
  
!   if ((cum->arg_words < MAX_ARGS_IN_REGISTERS - iq2000_off))
      {
        int iq2000_save_gp_regs 
! 	= MAX_ARGS_IN_REGISTERS - cum->arg_words - iq2000_off; 
        int iq2000_save_fp_regs 
!         = (MAX_ARGS_IN_REGISTERS - cum->fp_arg_words - iq2000_fp_off); 
  
        if (iq2000_save_gp_regs < 0) 
  	iq2000_save_gp_regs = 0; 
***************
*** 3287,3293 ****
  
        if (! (no_rtl)) 
  	{
! 	  if ((cum).arg_words < MAX_ARGS_IN_REGISTERS - iq2000_off) 
  	    {
  	      rtx ptr, mem; 
  	      ptr = plus_constant (virtual_incoming_args_rtx, 
--- 3317,3323 ----
  
        if (! (no_rtl)) 
  	{
! 	  if (cum->arg_words < MAX_ARGS_IN_REGISTERS - iq2000_off) 
  	    {
  	      rtx ptr, mem; 
  	      ptr = plus_constant (virtual_incoming_args_rtx, 
***************
*** 3295,3301 ****
  				      * UNITS_PER_WORD)); 
  	      mem = gen_rtx_MEM (BLKmode, ptr); 
  	      move_block_from_reg 
! 		((cum).arg_words + GP_ARG_FIRST + iq2000_off, 
  		 mem, 
  		 iq2000_save_gp_regs);
  	    } 
--- 3325,3331 ----
  				      * UNITS_PER_WORD)); 
  	      mem = gen_rtx_MEM (BLKmode, ptr); 
  	      move_block_from_reg 
! 		(cum->arg_words + GP_ARG_FIRST + iq2000_off, 
  		 mem, 
  		 iq2000_save_gp_regs);
  	    } 
Index: iq2000.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/iq2000/iq2000.h,v
retrieving revision 1.8
diff -c -r1.8 iq2000.h
*** iq2000.h	16 Dec 2003 15:20:51 -0000	1.8
--- iq2000.h	25 Jan 2004 05:22:05 -0000
***************
*** 1,6 ****
  /* Definitions of target machine for GNU compiler.  
     Vitesse IQ2000 processors
!    Copyright (C) 2003 Free Software Foundation, Inc.
  
     This file is part of GCC.
  
--- 1,6 ----
  /* Definitions of target machine for GNU compiler.  
     Vitesse IQ2000 processors
!    Copyright (C) 2003, 2004 Free Software Foundation, Inc.
  
     This file is part of GCC.
  
***************
*** 155,164 ****
        && GET_MODE_SIZE (MODE) < 4)		\
      (MODE) = SImode;
  
- #define PROMOTE_FUNCTION_ARGS
- 
- #define PROMOTE_FUNCTION_RETURN
- 
  #define PARM_BOUNDARY 32
  
  #define STACK_BOUNDARY 64
--- 155,160 ----
***************
*** 427,434 ****
  
  /* Passing Function Arguments on the Stack.  */
  
- #define PROMOTE_PROTOTYPES 1
- 
  /* #define PUSH_ROUNDING(BYTES) 0 */
  
  #define ACCUMULATE_OUTGOING_ARGS 1
--- 423,428 ----
***************
*** 520,534 ****
  
  /* How Large Values are Returned.  */
  
- #define RETURN_IN_MEMORY(TYPE)						 \
-   (((int_size_in_bytes (TYPE)						 \
-        > (2 * UNITS_PER_WORD)) 						 \
-       || (int_size_in_bytes (TYPE) == -1)))
- 
  #define DEFAULT_PCC_STRUCT_RETURN 0
- 
- #define STRUCT_VALUE 0
- 
  
  /* Function Entry and Exit.  */
  
--- 514,520 ----
***************
*** 556,566 ****
  
  
  /* Implementing the Varargs Macros.  */
- 
- #define SETUP_INCOMING_VARARGS(CUM,MODE,TYPE,PRETEND_SIZE,NO_RTL)	\
-   iq2000_setup_incoming_varargs (CUM,MODE,TYPE,&PRETEND_SIZE,NO_RTL);
- 
- #define STRICT_ARGUMENT_NAMING  1
  
  #define EXPAND_BUILTIN_VA_START(valist, nextarg) \
    iq2000_va_start (valist, nextarg)
--- 542,547 ----


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]