diff options
author | Richard Sandiford <rsandifo@nildram.co.uk> | 2007-10-18 19:12:17 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2007-10-18 19:12:17 +0000 |
commit | 4103055723a43d6c6da84798e7152030a8675713 (patch) | |
tree | 1292997078bd4bce66e28b629eb55bd2501e1371 | |
parent | 07045266050a099eba38651b6c56730b9674e3be (diff) | |
download | gcc-4103055723a43d6c6da84798e7152030a8675713.zip gcc-4103055723a43d6c6da84798e7152030a8675713.tar.gz gcc-4103055723a43d6c6da84798e7152030a8675713.tar.bz2 |
mips-ftypes.def: New file.
gcc/
* config/mips/mips-ftypes.def: New file.
* config/mips/mips.c (MIPS_FTYPE_NAME1, MIPS_FTYPE_NAME2)
(MIPS_FTYPE_NAME3, MIPS_FTYPE_NAME4): New macros.
(mips_function_type): Redefine using mips-ftypes.def.
(dsp_bdesc): Use POINTER rather than PTR in the MIPS_*_FTYPE_* names.
(mips_builtin_vector_type): New function.
(MIPS_ATYPE_VOID, MIPS_ATYPE_INT, MIPS_ATYPE_POINTER, MIPS_ATYPE_SI)
(MIPS_ATYPE_USI, MIPS_ATYPE_DI, MIPS_ATYPE_SF, MIPS_ATYPE_DF)
(MIPS_ATYPE_V2SF, MIPS_ATYPE_V2HI, MIPS_ATYPE_V4QI, MIPS_FTYPE_ATYPES1)
(MIPS_FTYPE_ATYPES2, MIPS_FTYPE_ATYPES3, MIPS_FTYPE_ATYPES4): New
macros.
(mips_build_function_type): New function.
(mips_init_builtins): Use it to create types lazily.
From-SVN: r129455
-rw-r--r-- | gcc/ChangeLog | 16 | ||||
-rw-r--r-- | gcc/config/mips/mips-ftypes.def | 92 | ||||
-rw-r--r-- | gcc/config/mips/mips.c | 371 |
3 files changed, 185 insertions, 294 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index dcb51c5..b76c4ce 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,21 @@ 2007-10-18 Richard Sandiford <rsandifo@nildram.co.uk> + * config/mips/mips-ftypes.def: New file. + * config/mips/mips.c (MIPS_FTYPE_NAME1, MIPS_FTYPE_NAME2) + (MIPS_FTYPE_NAME3, MIPS_FTYPE_NAME4): New macros. + (mips_function_type): Redefine using mips-ftypes.def. + (dsp_bdesc): Use POINTER rather than PTR in the MIPS_*_FTYPE_* names. + (mips_builtin_vector_type): New function. + (MIPS_ATYPE_VOID, MIPS_ATYPE_INT, MIPS_ATYPE_POINTER, MIPS_ATYPE_SI) + (MIPS_ATYPE_USI, MIPS_ATYPE_DI, MIPS_ATYPE_SF, MIPS_ATYPE_DF) + (MIPS_ATYPE_V2SF, MIPS_ATYPE_V2HI, MIPS_ATYPE_V4QI, MIPS_FTYPE_ATYPES1) + (MIPS_FTYPE_ATYPES2, MIPS_FTYPE_ATYPES3, MIPS_FTYPE_ATYPES4): New + macros. + (mips_build_function_type): New function. + (mips_init_builtins): Use it to create types lazily. + +2007-10-18 Richard Sandiford <rsandifo@nildram.co.uk> + * config/mips/mips.h (set_volatile): Delete. * config/mips/mips.c (set_volatile): Delete. (mips_print_operand_punctuation): New function, split out from diff --git a/gcc/config/mips/mips-ftypes.def b/gcc/config/mips/mips-ftypes.def new file mode 100644 index 0000000..9d46f8c --- /dev/null +++ b/gcc/config/mips/mips-ftypes.def @@ -0,0 +1,92 @@ +/* Definitions of prototypes for MIPS built-in functions. -*- C -*- + Copyright (C) 2007 + Free Software Foundation, Inc. + +This file is part of GCC. + +GCC is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3, or (at your option) +any later version. + +GCC is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GCC; see the file COPYING3. If not see +<http://www.gnu.org/licenses/>. */ + +/* Invoke DEF_MIPS_FTYPE (NARGS, LIST) for each prototype used by + MIPS built-in functions, where: + + NARGS is the number of arguments. + LIST contains the return-type code followed by the codes for each + argument type. + + Argument- and return-type codes are either modes or one of the following: + + VOID for void_type_node + INT for integer_type_node + POINTER for ptr_type_node + + (we don't use PTR because that's a ANSI-compatibillity macro). + + Please keep this list lexicographically sorted by the LIST argument. */ +DEF_MIPS_FTYPE (1, (DF, DF)) +DEF_MIPS_FTYPE (2, (DF, DF, DF)) + +DEF_MIPS_FTYPE (2, (DI, DI, DI)) +DEF_MIPS_FTYPE (2, (DI, DI, SI)) +DEF_MIPS_FTYPE (3, (DI, DI, SI, SI)) +DEF_MIPS_FTYPE (3, (DI, DI, USI, USI)) +DEF_MIPS_FTYPE (3, (DI, DI, V2HI, V2HI)) +DEF_MIPS_FTYPE (3, (DI, DI, V4QI, V4QI)) +DEF_MIPS_FTYPE (2, (DI, SI, SI)) +DEF_MIPS_FTYPE (2, (DI, USI, USI)) + +DEF_MIPS_FTYPE (2, (INT, DF, DF)) +DEF_MIPS_FTYPE (2, (INT, SF, SF)) +DEF_MIPS_FTYPE (2, (INT, V2SF, V2SF)) +DEF_MIPS_FTYPE (4, (INT, V2SF, V2SF, V2SF, V2SF)) + +DEF_MIPS_FTYPE (2, (SI, DI, SI)) +DEF_MIPS_FTYPE (2, (SI, POINTER, SI)) +DEF_MIPS_FTYPE (1, (SI, SI)) +DEF_MIPS_FTYPE (2, (SI, SI, SI)) +DEF_MIPS_FTYPE (3, (SI, SI, SI, SI)) +DEF_MIPS_FTYPE (1, (SI, V2HI)) +DEF_MIPS_FTYPE (2, (SI, V2HI, V2HI)) +DEF_MIPS_FTYPE (1, (SI, V4QI)) +DEF_MIPS_FTYPE (2, (SI, V4QI, V4QI)) +DEF_MIPS_FTYPE (1, (SI, VOID)) + +DEF_MIPS_FTYPE (1, (SF, SF)) +DEF_MIPS_FTYPE (2, (SF, SF, SF)) +DEF_MIPS_FTYPE (1, (SF, V2SF)) + +DEF_MIPS_FTYPE (1, (V2HI, SI)) +DEF_MIPS_FTYPE (2, (V2HI, SI, SI)) +DEF_MIPS_FTYPE (3, (V2HI, SI, SI, SI)) +DEF_MIPS_FTYPE (1, (V2HI, V2HI)) +DEF_MIPS_FTYPE (2, (V2HI, V2HI, SI)) +DEF_MIPS_FTYPE (2, (V2HI, V2HI, V2HI)) +DEF_MIPS_FTYPE (1, (V2HI, V4QI)) +DEF_MIPS_FTYPE (2, (V2HI, V4QI, V2HI)) + +DEF_MIPS_FTYPE (2, (V2SF, SF, SF)) +DEF_MIPS_FTYPE (1, (V2SF, V2SF)) +DEF_MIPS_FTYPE (2, (V2SF, V2SF, V2SF)) +DEF_MIPS_FTYPE (3, (V2SF, V2SF, V2SF, INT)) +DEF_MIPS_FTYPE (4, (V2SF, V2SF, V2SF, V2SF, V2SF)) + +DEF_MIPS_FTYPE (1, (V4QI, SI)) +DEF_MIPS_FTYPE (2, (V4QI, V2HI, V2HI)) +DEF_MIPS_FTYPE (1, (V4QI, V4QI)) +DEF_MIPS_FTYPE (2, (V4QI, V4QI, SI)) +DEF_MIPS_FTYPE (2, (V4QI, V4QI, V4QI)) + +DEF_MIPS_FTYPE (2, (VOID, SI, SI)) +DEF_MIPS_FTYPE (2, (VOID, V2HI, V2HI)) +DEF_MIPS_FTYPE (2, (VOID, V4QI, V4QI)) diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c index 3e69009..77bd08e 100644 --- a/gcc/config/mips/mips.c +++ b/gcc/config/mips/mips.c @@ -147,62 +147,18 @@ enum mips_address_type { ADDRESS_SYMBOLIC }; +/* Macros to create an enumeration identifier for a function prototype. */ +#define MIPS_FTYPE_NAME1(A, B) MIPS_##A##_FTYPE_##B +#define MIPS_FTYPE_NAME2(A, B, C) MIPS_##A##_FTYPE_##B##_##C +#define MIPS_FTYPE_NAME3(A, B, C, D) MIPS_##A##_FTYPE_##B##_##C##_##D +#define MIPS_FTYPE_NAME4(A, B, C, D, E) MIPS_##A##_FTYPE_##B##_##C##_##D##_##E + /* Classifies the prototype of a builtin function. */ enum mips_function_type { - MIPS_V2SF_FTYPE_V2SF, - MIPS_V2SF_FTYPE_V2SF_V2SF, - MIPS_V2SF_FTYPE_V2SF_V2SF_INT, - MIPS_V2SF_FTYPE_V2SF_V2SF_V2SF_V2SF, - MIPS_V2SF_FTYPE_SF_SF, - MIPS_INT_FTYPE_V2SF_V2SF, - MIPS_INT_FTYPE_V2SF_V2SF_V2SF_V2SF, - MIPS_INT_FTYPE_SF_SF, - MIPS_INT_FTYPE_DF_DF, - MIPS_SF_FTYPE_V2SF, - MIPS_SF_FTYPE_SF, - MIPS_SF_FTYPE_SF_SF, - MIPS_DF_FTYPE_DF, - MIPS_DF_FTYPE_DF_DF, - - /* For MIPS DSP ASE */ - MIPS_DI_FTYPE_DI_SI, - MIPS_DI_FTYPE_DI_SI_SI, - MIPS_DI_FTYPE_DI_V2HI_V2HI, - MIPS_DI_FTYPE_DI_V4QI_V4QI, - MIPS_SI_FTYPE_DI_SI, - MIPS_SI_FTYPE_PTR_SI, - MIPS_SI_FTYPE_SI, - MIPS_SI_FTYPE_SI_SI, - MIPS_SI_FTYPE_V2HI, - MIPS_SI_FTYPE_V2HI_V2HI, - MIPS_SI_FTYPE_V4QI, - MIPS_SI_FTYPE_V4QI_V4QI, - MIPS_SI_FTYPE_VOID, - MIPS_V2HI_FTYPE_SI, - MIPS_V2HI_FTYPE_SI_SI, - MIPS_V2HI_FTYPE_V2HI, - MIPS_V2HI_FTYPE_V2HI_SI, - MIPS_V2HI_FTYPE_V2HI_V2HI, - MIPS_V2HI_FTYPE_V4QI, - MIPS_V2HI_FTYPE_V4QI_V2HI, - MIPS_V4QI_FTYPE_SI, - MIPS_V4QI_FTYPE_V2HI_V2HI, - MIPS_V4QI_FTYPE_V4QI_SI, - MIPS_V4QI_FTYPE_V4QI_V4QI, - MIPS_VOID_FTYPE_SI_SI, - MIPS_VOID_FTYPE_V2HI_V2HI, - MIPS_VOID_FTYPE_V4QI_V4QI, - - /* For MIPS DSP REV 2 ASE. */ - MIPS_V4QI_FTYPE_V4QI, - MIPS_SI_FTYPE_SI_SI_SI, - MIPS_DI_FTYPE_DI_USI_USI, - MIPS_DI_FTYPE_SI_SI, - MIPS_DI_FTYPE_USI_USI, - MIPS_V2HI_FTYPE_SI_SI_SI, - - /* The last type. */ +#define DEF_MIPS_FTYPE(NARGS, LIST) MIPS_FTYPE_NAME##NARGS LIST, +#include "config/mips/mips-ftypes.def" +#undef DEF_MIPS_FTYPE MIPS_MAX_FTYPE_MAX }; @@ -10174,9 +10130,9 @@ static const struct builtin_description dsp_bdesc[] = DIRECT_BUILTIN (packrl_ph, MIPS_V2HI_FTYPE_V2HI_V2HI, MASK_DSP), DIRECT_NO_TARGET_BUILTIN (wrdsp, MIPS_VOID_FTYPE_SI_SI, MASK_DSP), DIRECT_BUILTIN (rddsp, MIPS_SI_FTYPE_SI, MASK_DSP), - DIRECT_BUILTIN (lbux, MIPS_SI_FTYPE_PTR_SI, MASK_DSP), - DIRECT_BUILTIN (lhx, MIPS_SI_FTYPE_PTR_SI, MASK_DSP), - DIRECT_BUILTIN (lwx, MIPS_SI_FTYPE_PTR_SI, MASK_DSP), + DIRECT_BUILTIN (lbux, MIPS_SI_FTYPE_POINTER_SI, MASK_DSP), + DIRECT_BUILTIN (lhx, MIPS_SI_FTYPE_POINTER_SI, MASK_DSP), + DIRECT_BUILTIN (lwx, MIPS_SI_FTYPE_POINTER_SI, MASK_DSP), BPOSGE_BUILTIN (32, MASK_DSP), /* The following are for the MIPS DSP ASE REV 2. */ @@ -10287,258 +10243,84 @@ static const struct bdesc_map bdesc_arrays[] = MASK_64BIT } }; -/* Init builtin functions. This is called from TARGET_INIT_BUILTIN. */ +/* MODE is a vector mode whose elements have type TYPE. Return the type + of the vector itself. */ -static void -mips_init_builtins (void) +static tree +mips_builtin_vector_type (tree type, enum machine_mode mode) { - const struct builtin_description *d; - const struct bdesc_map *m; - tree types[(int) MIPS_MAX_FTYPE_MAX]; - tree V2SF_type_node; - tree V2HI_type_node; - tree V4QI_type_node; - unsigned int offset; + static tree types[(int) MAX_MACHINE_MODE]; - /* We have only builtins for -mpaired-single, -mips3d and -mdsp. */ - if (!TARGET_PAIRED_SINGLE_FLOAT && !TARGET_DSP) - return; + if (types[(int) mode] == NULL_TREE) + types[(int) mode] = build_vector_type_for_mode (type, mode); + return types[(int) mode]; +} - if (TARGET_PAIRED_SINGLE_FLOAT) - { - V2SF_type_node = build_vector_type_for_mode (float_type_node, V2SFmode); +/* Source-level argument types. */ +#define MIPS_ATYPE_VOID void_type_node +#define MIPS_ATYPE_INT integer_type_node +#define MIPS_ATYPE_POINTER ptr_type_node - types[MIPS_V2SF_FTYPE_V2SF] - = build_function_type_list (V2SF_type_node, V2SF_type_node, NULL_TREE); +/* Standard mode-based argument types. */ +#define MIPS_ATYPE_SI intSI_type_node +#define MIPS_ATYPE_USI unsigned_intSI_type_node +#define MIPS_ATYPE_DI intDI_type_node +#define MIPS_ATYPE_SF float_type_node +#define MIPS_ATYPE_DF double_type_node - types[MIPS_V2SF_FTYPE_V2SF_V2SF] - = build_function_type_list (V2SF_type_node, - V2SF_type_node, V2SF_type_node, NULL_TREE); +/* Vector argument types. */ +#define MIPS_ATYPE_V2SF mips_builtin_vector_type (float_type_node, V2SFmode) +#define MIPS_ATYPE_V2HI mips_builtin_vector_type (intHI_type_node, V2HImode) +#define MIPS_ATYPE_V4QI mips_builtin_vector_type (intQI_type_node, V4QImode) - 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); +/* MIPS_FTYPE_ATYPESN takes N MIPS_FTYPES-like type codes and lists + their associated MIPS_ATYPEs. */ +#define MIPS_FTYPE_ATYPES1(A, B) \ + MIPS_ATYPE_##A, MIPS_ATYPE_##B - 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); +#define MIPS_FTYPE_ATYPES2(A, B, C) \ + MIPS_ATYPE_##A, MIPS_ATYPE_##B, MIPS_ATYPE_##C - types[MIPS_V2SF_FTYPE_SF_SF] - = build_function_type_list (V2SF_type_node, - float_type_node, float_type_node, NULL_TREE); +#define MIPS_FTYPE_ATYPES3(A, B, C, D) \ + MIPS_ATYPE_##A, MIPS_ATYPE_##B, MIPS_ATYPE_##C, MIPS_ATYPE_##D - types[MIPS_INT_FTYPE_V2SF_V2SF] - = build_function_type_list (integer_type_node, - V2SF_type_node, V2SF_type_node, NULL_TREE); +#define MIPS_FTYPE_ATYPES4(A, B, C, D, E) \ + MIPS_ATYPE_##A, MIPS_ATYPE_##B, MIPS_ATYPE_##C, MIPS_ATYPE_##D, \ + MIPS_ATYPE_##E - 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); +/* Return the function type associated with function prototype TYPE. */ - types[MIPS_INT_FTYPE_SF_SF] - = build_function_type_list (integer_type_node, - float_type_node, float_type_node, NULL_TREE); +static tree +mips_build_function_type (enum mips_function_type type) +{ + static tree types[(int) MIPS_MAX_FTYPE_MAX]; - types[MIPS_INT_FTYPE_DF_DF] - = build_function_type_list (integer_type_node, - double_type_node, double_type_node, NULL_TREE); + if (types[(int) type] == NULL_TREE) + switch (type) + { +#define DEF_MIPS_FTYPE(NUM, ARGS) \ + case MIPS_FTYPE_NAME##NUM ARGS: \ + types[(int) type] \ + = build_function_type_list (MIPS_FTYPE_ATYPES##NUM ARGS, \ + NULL_TREE); \ + break; +#include "config/mips/mips-ftypes.def" +#undef DEF_MIPS_FTYPE + default: + gcc_unreachable (); + } - 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); - } - - if (TARGET_DSP) - { - V2HI_type_node = build_vector_type_for_mode (intHI_type_node, V2HImode); - V4QI_type_node = build_vector_type_for_mode (intQI_type_node, V4QImode); - - types[MIPS_V2HI_FTYPE_V2HI_V2HI] - = build_function_type_list (V2HI_type_node, - V2HI_type_node, V2HI_type_node, - NULL_TREE); - - types[MIPS_SI_FTYPE_SI_SI] - = build_function_type_list (intSI_type_node, - intSI_type_node, intSI_type_node, - NULL_TREE); - - types[MIPS_V4QI_FTYPE_V4QI_V4QI] - = build_function_type_list (V4QI_type_node, - V4QI_type_node, V4QI_type_node, - NULL_TREE); - - types[MIPS_SI_FTYPE_V4QI] - = build_function_type_list (intSI_type_node, - V4QI_type_node, - NULL_TREE); - - types[MIPS_V2HI_FTYPE_V2HI] - = build_function_type_list (V2HI_type_node, - V2HI_type_node, - NULL_TREE); - - types[MIPS_SI_FTYPE_SI] - = build_function_type_list (intSI_type_node, - intSI_type_node, - NULL_TREE); - - types[MIPS_V4QI_FTYPE_V2HI_V2HI] - = build_function_type_list (V4QI_type_node, - V2HI_type_node, V2HI_type_node, - NULL_TREE); - - types[MIPS_V2HI_FTYPE_SI_SI] - = build_function_type_list (V2HI_type_node, - intSI_type_node, intSI_type_node, - NULL_TREE); - - types[MIPS_SI_FTYPE_V2HI] - = build_function_type_list (intSI_type_node, - V2HI_type_node, - NULL_TREE); - - types[MIPS_V2HI_FTYPE_V4QI] - = build_function_type_list (V2HI_type_node, - V4QI_type_node, - NULL_TREE); - - types[MIPS_V4QI_FTYPE_V4QI_SI] - = build_function_type_list (V4QI_type_node, - V4QI_type_node, intSI_type_node, - NULL_TREE); - - types[MIPS_V2HI_FTYPE_V2HI_SI] - = build_function_type_list (V2HI_type_node, - V2HI_type_node, intSI_type_node, - NULL_TREE); - - types[MIPS_V2HI_FTYPE_V4QI_V2HI] - = build_function_type_list (V2HI_type_node, - V4QI_type_node, V2HI_type_node, - NULL_TREE); - - types[MIPS_SI_FTYPE_V2HI_V2HI] - = build_function_type_list (intSI_type_node, - V2HI_type_node, V2HI_type_node, - NULL_TREE); - - types[MIPS_DI_FTYPE_DI_V4QI_V4QI] - = build_function_type_list (intDI_type_node, - intDI_type_node, V4QI_type_node, V4QI_type_node, - NULL_TREE); - - types[MIPS_DI_FTYPE_DI_V2HI_V2HI] - = build_function_type_list (intDI_type_node, - intDI_type_node, V2HI_type_node, V2HI_type_node, - NULL_TREE); - - types[MIPS_DI_FTYPE_DI_SI_SI] - = build_function_type_list (intDI_type_node, - intDI_type_node, intSI_type_node, intSI_type_node, - NULL_TREE); - - types[MIPS_V4QI_FTYPE_SI] - = build_function_type_list (V4QI_type_node, - intSI_type_node, - NULL_TREE); - - types[MIPS_V2HI_FTYPE_SI] - = build_function_type_list (V2HI_type_node, - intSI_type_node, - NULL_TREE); - - types[MIPS_VOID_FTYPE_V4QI_V4QI] - = build_function_type_list (void_type_node, - V4QI_type_node, V4QI_type_node, - NULL_TREE); - - types[MIPS_SI_FTYPE_V4QI_V4QI] - = build_function_type_list (intSI_type_node, - V4QI_type_node, V4QI_type_node, - NULL_TREE); - - types[MIPS_VOID_FTYPE_V2HI_V2HI] - = build_function_type_list (void_type_node, - V2HI_type_node, V2HI_type_node, - NULL_TREE); - - types[MIPS_SI_FTYPE_DI_SI] - = build_function_type_list (intSI_type_node, - intDI_type_node, intSI_type_node, - NULL_TREE); - - types[MIPS_DI_FTYPE_DI_SI] - = build_function_type_list (intDI_type_node, - intDI_type_node, intSI_type_node, - NULL_TREE); - - types[MIPS_VOID_FTYPE_SI_SI] - = build_function_type_list (void_type_node, - intSI_type_node, intSI_type_node, - NULL_TREE); - - types[MIPS_SI_FTYPE_PTR_SI] - = build_function_type_list (intSI_type_node, - ptr_type_node, intSI_type_node, - NULL_TREE); - - types[MIPS_SI_FTYPE_VOID] - = build_function_type (intSI_type_node, void_list_node); - - if (TARGET_DSPR2) - { - types[MIPS_V4QI_FTYPE_V4QI] - = build_function_type_list (V4QI_type_node, - V4QI_type_node, - NULL_TREE); - - types[MIPS_SI_FTYPE_SI_SI_SI] - = build_function_type_list (intSI_type_node, - intSI_type_node, intSI_type_node, - intSI_type_node, NULL_TREE); - - types[MIPS_DI_FTYPE_DI_USI_USI] - = build_function_type_list (intDI_type_node, - intDI_type_node, - unsigned_intSI_type_node, - unsigned_intSI_type_node, NULL_TREE); - - types[MIPS_DI_FTYPE_SI_SI] - = build_function_type_list (intDI_type_node, - intSI_type_node, intSI_type_node, - NULL_TREE); - - types[MIPS_DI_FTYPE_USI_USI] - = build_function_type_list (intDI_type_node, - unsigned_intSI_type_node, - unsigned_intSI_type_node, NULL_TREE); - - types[MIPS_V2HI_FTYPE_SI_SI_SI] - = build_function_type_list (V2HI_type_node, - intSI_type_node, intSI_type_node, - intSI_type_node, NULL_TREE); + return types[(int) type]; +} - } - } +/* Init builtin functions. This is called from TARGET_INIT_BUILTIN. */ + +static void +mips_init_builtins (void) +{ + const struct builtin_description *d; + const struct bdesc_map *m; + unsigned int offset; /* Iterate through all of the bdesc arrays, initializing all of the builtin functions. */ @@ -10550,7 +10332,8 @@ mips_init_builtins (void) && (m->unsupported_target_flags & target_flags) == 0) for (d = m->bdesc; d < &m->bdesc[m->size]; d++) if ((d->target_flags & target_flags) == d->target_flags) - add_builtin_function (d->name, types[d->function_type], + add_builtin_function (d->name, + mips_build_function_type (d->function_type), d - m->bdesc + offset, BUILT_IN_MD, NULL, NULL); offset += m->size; |