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]

[committed] Simplify mips_init_builtins


OK, this one definitely _is_ busy work.  mips_init_builtins has
the structure:

    tree foo0 = ...
    tree foo1 = ...
    ...
    switch (selector)
      {
      case 0: ... foo0 ...; break;
      case 1: ... foo1 ...; break;
      ...
      }

where the case statements are identical apart from the choice of fooX.
This patch converts the foo*s into an array.  It also simplifies the
target_flags check a little and avoids creating V2SF_type_node if it
won't be needed.

Tested as described earlier.  Applied to head.

Richard


	* config/mips/mips.c (mips_init_builtins): Simplify.  Only create
	V2SF_type_node if it will be needed.

Index: config/mips/mips.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/mips/mips.c,v
retrieving revision 1.460
diff -c -p -F^\([(a-zA-Z0-9_]\|#define\) -r1.460 mips.c
*** config/mips/mips.c	29 Aug 2004 11:10:05 -0000	1.460
--- config/mips/mips.c	29 Aug 2004 11:17:50 -0000
*************** void
*** 10449,10623 ****
  mips_init_builtins (void)
  {
    const struct builtin_description *d;
!   size_t i;
!   tree v2sf_ftype_v2sf_v2sf;
!   tree v2sf_ftype_sf_sf;
!   tree sf_ftype_v2sf;
!   tree v2sf_ftype_v2sf;
!   tree int_ftype_v2sf_v2sf;
!   tree int_ftype_v2sf_v2sf_v2sf_v2sf;
!   tree v2sf_ftype_v2sf_v2sf_int;
!   tree int_ftype_sf_sf;
!   tree int_ftype_df_df;
!   tree sf_ftype_sf;
!   tree df_ftype_df;
!   tree sf_ftype_sf_sf;
!   tree df_ftype_df_df;
!   tree v2sf_ftype_v2sf_v2sf_v2sf_v2sf;
!   tree V2SF_type_node = build_vector_type_for_mode (float_type_node, V2SFmode);
  
    /* We have only builtins for -mpaired-single and -mips3d.  */
    if (!TARGET_PAIRED_SINGLE_FLOAT)
      return;
  
!   int_ftype_sf_sf
!     = build_function_type_list (integer_type_node, 
! 				float_type_node, float_type_node, 
! 				NULL_TREE);
! 
!   int_ftype_df_df 
!     = build_function_type_list (integer_type_node, 
! 				double_type_node, double_type_node, 
! 				NULL_TREE);
  
!   v2sf_ftype_v2sf_v2sf 
!     = build_function_type_list (V2SF_type_node, 
  				V2SF_type_node, V2SF_type_node, NULL_TREE);
  
!   v2sf_ftype_sf_sf 
!     = build_function_type_list (V2SF_type_node, 
! 				float_type_node, float_type_node, 
! 				NULL_TREE);
  
!   sf_ftype_v2sf 
!     = build_function_type_list (float_type_node, V2SF_type_node, NULL_TREE);
  
!   v2sf_ftype_v2sf 
!     = build_function_type_list (V2SF_type_node, V2SF_type_node, NULL_TREE);
  
!   int_ftype_v2sf_v2sf 
      = build_function_type_list (integer_type_node,
  				V2SF_type_node, V2SF_type_node, NULL_TREE);
  
!   int_ftype_v2sf_v2sf_v2sf_v2sf
      = build_function_type_list (integer_type_node,
  				V2SF_type_node, V2SF_type_node,
  				V2SF_type_node, V2SF_type_node, NULL_TREE);
  
!   v2sf_ftype_v2sf_v2sf_v2sf_v2sf
!     = build_function_type_list (V2SF_type_node,
! 				V2SF_type_node, V2SF_type_node, 
! 				V2SF_type_node, V2SF_type_node, NULL_TREE);
  
!   v2sf_ftype_v2sf_v2sf_int
!     = build_function_type_list (V2SF_type_node, 
! 				V2SF_type_node, V2SF_type_node, 
! 				integer_type_node, NULL_TREE);
  
!   sf_ftype_sf
!     = build_function_type_list (float_type_node, 
  				float_type_node, NULL_TREE);
  
!   df_ftype_df
!     = build_function_type_list (double_type_node, 
! 				double_type_node, NULL_TREE);
  
!   sf_ftype_sf_sf
!     = build_function_type_list (float_type_node, 
! 				float_type_node, float_type_node, 
! 				NULL_TREE);
! 
!   df_ftype_df_df
!     = build_function_type_list (double_type_node, 
! 				double_type_node, double_type_node, 
! 				NULL_TREE);
  
!   for (i = 0, d = mips_bdesc; i < ARRAY_SIZE (mips_bdesc); i++, d++)
!     {
!       if ((d->target_flags & MASK_PAIRED_SINGLE)
! 	  && !TARGET_PAIRED_SINGLE_FLOAT)
! 	continue;
! 
!       if ((d->target_flags & MASK_MIPS3D) 
! 	  && !TARGET_MIPS3D)
! 	continue;
! 
!       switch (d->ftype)
! 	{
! 	case MIPS_V2SF_FTYPE_V2SF_V2SF:
! 	  lang_hooks.builtin_function (d->name, v2sf_ftype_v2sf_v2sf,
! 				       d->code, BUILT_IN_MD, NULL, NULL_TREE);
! 	  break;
! 
! 	case MIPS_V2SF_FTYPE_SF_SF:
! 	  lang_hooks.builtin_function (d->name, v2sf_ftype_sf_sf,
! 				       d->code, BUILT_IN_MD, NULL, NULL_TREE);
! 	  break;
! 
! 	case MIPS_SF_FTYPE_V2SF:
! 	  lang_hooks.builtin_function (d->name, sf_ftype_v2sf,
! 				       d->code, BUILT_IN_MD, NULL, NULL_TREE);
! 	  break;
! 
! 	case MIPS_V2SF_FTYPE_V2SF:
! 	  lang_hooks.builtin_function (d->name, v2sf_ftype_v2sf,
! 				       d->code, BUILT_IN_MD, NULL, NULL_TREE);
! 	  break;
! 
! 	case MIPS_INT_FTYPE_V2SF_V2SF:
! 	  lang_hooks.builtin_function (d->name, int_ftype_v2sf_v2sf,
! 				       d->code, BUILT_IN_MD, NULL, NULL_TREE);
! 	  break;
! 
! 	case MIPS_INT_FTYPE_V2SF_V2SF_V2SF_V2SF:
! 	  lang_hooks.builtin_function (d->name, int_ftype_v2sf_v2sf_v2sf_v2sf,
! 				       d->code, BUILT_IN_MD, NULL, NULL_TREE);
! 	  break;
! 
! 	case MIPS_V2SF_FTYPE_V2SF_V2SF_INT:
! 	  lang_hooks.builtin_function (d->name, v2sf_ftype_v2sf_v2sf_int,
! 				       d->code, BUILT_IN_MD, NULL, NULL_TREE);
! 	  break;
! 
! 	case MIPS_V2SF_FTYPE_V2SF_V2SF_V2SF_V2SF:
! 	  lang_hooks.builtin_function (d->name, v2sf_ftype_v2sf_v2sf_v2sf_v2sf,
! 				       d->code, BUILT_IN_MD, NULL, NULL_TREE);
! 	  break;
! 
! 	case MIPS_SF_FTYPE_SF:
! 	  lang_hooks.builtin_function (d->name, sf_ftype_sf,
! 				       d->code, BUILT_IN_MD, NULL, NULL_TREE);
! 	  break;
! 
! 	case MIPS_DF_FTYPE_DF:
! 	  lang_hooks.builtin_function (d->name, df_ftype_df,
! 				       d->code, BUILT_IN_MD, NULL, NULL_TREE);
! 	  break;
! 
! 	case MIPS_INT_FTYPE_SF_SF:
! 	  lang_hooks.builtin_function (d->name, int_ftype_sf_sf,
! 				       d->code, BUILT_IN_MD, NULL, NULL_TREE);
! 	  break;
! 
! 	case MIPS_INT_FTYPE_DF_DF:
! 	  lang_hooks.builtin_function (d->name, int_ftype_df_df,
! 				       d->code, BUILT_IN_MD, NULL, NULL_TREE);
! 	  break;
! 
! 	case MIPS_SF_FTYPE_SF_SF:
! 	  lang_hooks.builtin_function (d->name, sf_ftype_sf_sf,
! 				       d->code, BUILT_IN_MD, NULL, NULL_TREE);
! 	  break;
! 
! 	case MIPS_DF_FTYPE_DF_DF:
! 	  lang_hooks.builtin_function (d->name, df_ftype_df_df,
! 				       d->code, BUILT_IN_MD, NULL, NULL_TREE);
! 	  break;
! 
! 	default:
! 	  break;
! 	}
!     }
  }
  
  /* Expand a __builtin_mips_movt_*_ps() or __builtin_mips_movf_*_ps()
--- 10449,10524 ----
  mips_init_builtins (void)
  {
    const struct builtin_description *d;
!   tree types[(int) MIPS_MAX_FTYPE_MAX];
!   tree V2SF_type_node;
  
    /* We have only builtins for -mpaired-single and -mips3d.  */
    if (!TARGET_PAIRED_SINGLE_FLOAT)
      return;
  
!   V2SF_type_node = build_vector_type_for_mode (float_type_node, V2SFmode);
  
!   types[MIPS_V2SF_FTYPE_V2SF]
!     = build_function_type_list (V2SF_type_node, V2SF_type_node, NULL_TREE);
! 
!   types[MIPS_V2SF_FTYPE_V2SF_V2SF]
!     = build_function_type_list (V2SF_type_node,
  				V2SF_type_node, V2SF_type_node, NULL_TREE);
  
!   types[MIPS_V2SF_FTYPE_V2SF_V2SF_INT]
!     = build_function_type_list (V2SF_type_node,
! 				V2SF_type_node, V2SF_type_node,
! 				integer_type_node, NULL_TREE);
  
!   types[MIPS_V2SF_FTYPE_V2SF_V2SF_V2SF_V2SF]
!     = build_function_type_list (V2SF_type_node,
! 				V2SF_type_node, V2SF_type_node,
! 				V2SF_type_node, V2SF_type_node, NULL_TREE);
  
!   types[MIPS_V2SF_FTYPE_SF_SF]
!     = build_function_type_list (V2SF_type_node,
! 				float_type_node, float_type_node, NULL_TREE);
  
!   types[MIPS_INT_FTYPE_V2SF_V2SF]
      = build_function_type_list (integer_type_node,
  				V2SF_type_node, V2SF_type_node, NULL_TREE);
  
!   types[MIPS_INT_FTYPE_V2SF_V2SF_V2SF_V2SF]
      = build_function_type_list (integer_type_node,
  				V2SF_type_node, V2SF_type_node,
  				V2SF_type_node, V2SF_type_node, NULL_TREE);
  
!   types[MIPS_INT_FTYPE_SF_SF]
!     = build_function_type_list (integer_type_node,
! 				float_type_node, float_type_node, NULL_TREE);
  
!   types[MIPS_INT_FTYPE_DF_DF]
!     = build_function_type_list (integer_type_node,
! 				double_type_node, double_type_node, NULL_TREE);
  
!   types[MIPS_SF_FTYPE_V2SF]
!     = build_function_type_list (float_type_node, V2SF_type_node, NULL_TREE);
! 
!   types[MIPS_SF_FTYPE_SF]
!     = build_function_type_list (float_type_node,
  				float_type_node, NULL_TREE);
  
!   types[MIPS_SF_FTYPE_SF_SF]
!     = build_function_type_list (float_type_node,
! 				float_type_node, float_type_node, NULL_TREE);
  
!   types[MIPS_DF_FTYPE_DF]
!     = build_function_type_list (double_type_node,
! 				double_type_node, NULL_TREE);
  
!   types[MIPS_DF_FTYPE_DF_DF]
!     = build_function_type_list (double_type_node,
! 				double_type_node, double_type_node, NULL_TREE);
! 
!   for (d = mips_bdesc; d < &mips_bdesc[ARRAY_SIZE (mips_bdesc)]; d++)
!     if ((d->target_flags & target_flags) == d->target_flags)
!       lang_hooks.builtin_function (d->name, types[d->ftype],
! 				   d->code, BUILT_IN_MD, NULL, NULL_TREE);
  }
  
  /* Expand a __builtin_mips_movt_*_ps() or __builtin_mips_movf_*_ps()


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