OSDN Git Service

* config/mips/mips-protos.h: Remove the prototypes for
authorkazu <kazu@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 25 Jan 2004 17:23:01 +0000 (17:23 +0000)
committerkazu <kazu@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 25 Jan 2004 17:23:01 +0000 (17:23 +0000)
mips_setup_incoming_varargs and mips_return_in_memory.
* config/mips/mips.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.
(mips_setup_incoming_varargs): Match the prototype for
TARGET_SETUP_INCOMING_VARARGS.
(mips_return_in_memory): Make it static.  Add argument fntype.
(mips_strict_argument_naming): New.
* config/mips/mips.h (PROMOTE_PROTOTYPES): Remove.
(PROMOTE_FUNCTION_ARGS): Likewise.
(PROMOTE_FUNCTION_RETURN): Likewise.
(STRUCT_VALUE): Likewise.
(RETURN_IN_MEMORY): Likewise.
(SETUP_INCOMING_VARARGS): Likewise.
(STRICT_ARGUMENT_NAMING): Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@76568 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/mips/mips-protos.h
gcc/config/mips/mips.c
gcc/config/mips/mips.h

index fd6e414..816043b 100644 (file)
@@ -1,5 +1,28 @@
 2004-01-25  Kazu Hirata  <kazu@cs.umass.edu>
 
+       * config/mips/mips-protos.h: Remove the prototypes for
+       mips_setup_incoming_varargs and mips_return_in_memory.
+       * config/mips/mips.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.
+       (mips_setup_incoming_varargs): Match the prototype for
+       TARGET_SETUP_INCOMING_VARARGS.
+       (mips_return_in_memory): Make it static.  Add argument fntype.
+       (mips_strict_argument_naming): New.
+       * config/mips/mips.h (PROMOTE_PROTOTYPES): Remove.
+       (PROMOTE_FUNCTION_ARGS): Likewise.
+       (PROMOTE_FUNCTION_RETURN): Likewise.
+       (STRUCT_VALUE): Likewise.
+       (RETURN_IN_MEMORY): Likewise.
+       (SETUP_INCOMING_VARARGS): Likewise.
+       (STRICT_ARGUMENT_NAMING): Likewise.
+
+2004-01-25  Kazu Hirata  <kazu@cs.umass.edu>
+
        * config/ip2k/ip2k.c (TARGET_STRUCT_VALUE_RTX): New.
        (TARGET_RETURN_IN_MEMORY): Likewise.
        (TARGET_SETUP_INCOMING_VARARGS): Likewise.
index dfc1467..5c0081f 100644 (file)
@@ -83,8 +83,6 @@ extern int function_arg_partial_nregs (const CUMULATIVE_ARGS *,
                                       enum machine_mode, tree, int);
 extern bool mips_pad_arg_upward (enum machine_mode, tree);
 extern bool mips_pad_reg_upward (enum machine_mode, tree);
-extern int mips_setup_incoming_varargs (const CUMULATIVE_ARGS *,
-                                       enum machine_mode, tree, int);
 extern void mips_va_start (tree, rtx);
 extern struct rtx_def *mips_va_arg (tree, tree);
 
@@ -141,7 +139,6 @@ extern const char *mips_output_conditional_branch (rtx, rtx *, int, int,
                                                   int, int);
 extern const char *mips_output_division (const char *, rtx *);
 extern unsigned int mips_hard_regno_nregs (int, enum machine_mode);
-extern int mips_return_in_memory (tree);
 extern const char *mips_emit_prefetch (rtx *);
 
 extern void irix_asm_output_align (FILE *, unsigned);
index d7bec70..1c87e11 100644 (file)
@@ -279,9 +279,13 @@ static bool mips_matching_cpu_name_p (const char *, const char *);
 static const struct mips_cpu_info *mips_parse_cpu (const char *, const char *);
 static const struct mips_cpu_info *mips_cpu_info_from_isa (int);
 static int mips_adjust_cost (rtx, rtx, rtx, int);
+static bool mips_return_in_memory (tree, tree);
+static bool mips_strict_argument_naming (CUMULATIVE_ARGS *);
 static int mips_issue_rate (void);
 static int mips_use_dfa_pipeline_interface (void);
 static void mips_init_libfuncs (void);
+static void mips_setup_incoming_varargs (CUMULATIVE_ARGS *, enum machine_mode,
+                                        tree, int *, int);
 static tree mips_build_builtin_va_list (void);
 
 #if TARGET_IRIX
@@ -795,6 +799,18 @@ const struct mips_cpu_info mips_cpu_info_table[] = {
 
 #undef TARGET_BUILD_BUILTIN_VA_LIST
 #define TARGET_BUILD_BUILTIN_VA_LIST mips_build_builtin_va_list
+
+#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 mips_return_in_memory
 #undef TARGET_RETURN_IN_MSB
 #define TARGET_RETURN_IN_MSB mips_return_in_msb
 
@@ -803,6 +819,11 @@ const struct mips_cpu_info mips_cpu_info_table[] = {
 #undef TARGET_ASM_CAN_OUTPUT_MI_THUNK
 #define TARGET_ASM_CAN_OUTPUT_MI_THUNK hook_bool_tree_hwi_hwi_tree_true
 
+#undef TARGET_SETUP_INCOMING_VARARGS
+#define TARGET_SETUP_INCOMING_VARARGS mips_setup_incoming_varargs
+#undef TARGET_STRICT_ARGUMENT_NAMING
+#define TARGET_STRICT_ARGUMENT_NAMING mips_strict_argument_naming
+
 struct gcc_target targetm = TARGET_INITIALIZER;
 \f
 /* Classify symbol X, which must be a SYMBOL_REF or a LABEL_REF.  */
@@ -3885,9 +3906,9 @@ mips_pad_reg_upward (enum machine_mode mode, tree type)
   return mips_pad_arg_upward (mode, type);
 }
 \f
-int
-mips_setup_incoming_varargs (const CUMULATIVE_ARGS *cum,
-                            enum machine_mode mode, tree type, int no_rtl)
+static void
+mips_setup_incoming_varargs (CUMULATIVE_ARGS *cum, enum machine_mode mode,
+                            tree type, int *pretend_size, int no_rtl)
 {
   CUMULATIVE_ARGS local_cum;
   int gp_saved, fp_saved;
@@ -3958,10 +3979,13 @@ mips_setup_incoming_varargs (const CUMULATIVE_ARGS *cum,
        }
     }
   if (mips_abi == ABI_32 || mips_abi == ABI_O64)
-    /* No need for pretend arguments: the register parameter area was
-       allocated by the caller.  */
-    return 0;
-  return (gp_saved * UNITS_PER_WORD) + (fp_saved * UNITS_PER_FPREG);
+    {
+      /* No need for pretend arguments: the register parameter area was
+        allocated by the caller.  */
+      *pretend_size = 0;
+      return;
+    }
+  *pretend_size = (gp_saved * UNITS_PER_WORD) + (fp_saved * UNITS_PER_FPREG);
 }
 
 /* Create the va_list data type.
@@ -7466,8 +7490,8 @@ mips_function_value (tree valtype, tree func ATTRIBUTE_UNUSED,
       mode = TYPE_MODE (valtype);
       unsignedp = TREE_UNSIGNED (valtype);
 
-      /* Since we define PROMOTE_FUNCTION_RETURN, we must promote
-        the mode just as PROMOTE_MODE does.  */
+      /* 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);
 
       /* Handle structures whose fields are returned in $f0/$f2.  */
@@ -9517,14 +9541,14 @@ mips_hard_regno_nregs (int regno, enum machine_mode mode)
     return ((GET_MODE_SIZE (mode) + UNITS_PER_FPREG - 1) / UNITS_PER_FPREG);
 }
 
-/* Implement RETURN_IN_MEMORY.  Under the old (i.e., 32 and O64 ABIs)
+/* Implement TARGET_RETURN_IN_MEMORY.  Under the old (i.e., 32 and O64 ABIs)
    all BLKmode objects are returned in memory.  Under the new (N32 and
    64-bit MIPS ABIs) small structures are returned in a register.
    Objects with varying size must still be returned in memory, of
    course.  */
 
-int
-mips_return_in_memory (tree type)
+static bool
+mips_return_in_memory (tree type, tree fndecl ATTRIBUTE_UNUSED)
 {
   if (mips_abi == ABI_32 || mips_abi == ABI_O64)
     return (TYPE_MODE (type) == BLKmode);
@@ -9533,6 +9557,12 @@ mips_return_in_memory (tree type)
            || (int_size_in_bytes (type) == -1));
 }
 
+static bool
+mips_strict_argument_naming (CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED)
+{
+  return (mips_abi != ABI_32 && mips_abi != ABI_O64);
+}
+
 static int
 mips_issue_rate (void)
 {
index 74b8c54..ae1f55f 100644 (file)
@@ -1424,10 +1424,6 @@ extern const struct mips_cpu_info *mips_tune_info;
 #define PAD_VARARGS_DOWN \
   (FUNCTION_ARG_PADDING (TYPE_MODE (type), type) == downward)
 
-/* Arguments declared as 'char' or 'short' in a prototype should be
-   passed as 'int's.  */
-#define PROMOTE_PROTOTYPES 1
-
 /* Define if operations between registers always perform the operation
    on the full register even if a narrower mode is specified.  */
 #define WORD_REGISTER_OPERATIONS
@@ -1455,15 +1451,6 @@ extern const struct mips_cpu_info *mips_tune_info;
 
 /* Define if loading short immediate values into registers sign extends.  */
 #define SHORT_IMMEDIATES_SIGN_EXTEND
-
-
-/* Define this if function arguments should also be promoted using the above
-   procedure.  */
-#define PROMOTE_FUNCTION_ARGS
-
-/* Likewise, if the function return value is promoted.  */
-#define PROMOTE_FUNCTION_RETURN
-
 \f
 /* Standard register usage.  */
 
@@ -1683,9 +1670,6 @@ extern char mips_hard_regno_mode_ok[][FIRST_PSEUDO_REGISTER];
 /* Register in which static-chain is passed to a function.  */
 #define STATIC_CHAIN_REGNUM (GP_REG_FIRST + 2)
 
-/* Pass structure addresses as an "invisible" first argument.  */
-#define STRUCT_VALUE 0
-
 /* Registers used as temporaries in prologue/epilogue code.  If we're
    generating mips16 code, these registers must come from the core set
    of 8.  The prologue register mustn't conflict with any incoming
@@ -2225,15 +2209,7 @@ extern enum reg_class mips_char_to_class[256];
     || (IN_RANGE((N), FP_ARG_FIRST, FP_ARG_LAST)               \
        && ((N) % FP_INC == 0) && mips_abi != ABI_O64))         \
    && !fixed_regs[N])
-
-#define RETURN_IN_MEMORY(TYPE) mips_return_in_memory (TYPE)
-
-#define SETUP_INCOMING_VARARGS(CUM,MODE,TYPE,PRETEND_SIZE,NO_RTL)      \
-       (PRETEND_SIZE) = mips_setup_incoming_varargs (&(CUM), (MODE),   \
-                                                     (TYPE), (NO_RTL))
 \f
-#define STRICT_ARGUMENT_NAMING (mips_abi != ABI_32 && mips_abi != ABI_O64)
-
 /* This structure has to cope with two different argument allocation
    schemes.  Most MIPS ABIs view the arguments as a struct, of which the
    first N words go in registers and the rest go on the stack.  If I < N,