This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[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()