mn10300-protos.h (mn10300_va_arg): Remove.
authorRichard Henderson <rth@redhat.com>
Fri, 9 Jul 2004 09:50:10 +0000 (02:50 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Fri, 9 Jul 2004 09:50:10 +0000 (02:50 -0700)
        * config/mn10300/mn10300-protos.h (mn10300_va_arg): Remove.
        * config/mn10300/mn10300.c (TARGET_GIMPLIFY_VA_ARG_EXPR): New.
        (mn10300_gimplify_va_arg_expr): Rewrite from mn10300_va_arg.
        * config/mn10300/mn10300.h (EXPAND_BUILTIN_VA_ARG): Remove.

From-SVN: r84353

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

index e16a2a87e4d25d694ad9419af510096c490d819b..0d86377c70fb44ffecc17600bd99ce3c65118b8b 100644 (file)
@@ -1,3 +1,10 @@
+2004-07-09  Richard Henderson  <rth@redhat.com>
+
+       * config/mn10300/mn10300-protos.h (mn10300_va_arg): Remove.
+       * config/mn10300/mn10300.c (TARGET_GIMPLIFY_VA_ARG_EXPR): New.
+       (mn10300_gimplify_va_arg_expr): Rewrite from mn10300_va_arg.
+       * config/mn10300/mn10300.h (EXPAND_BUILTIN_VA_ARG): Remove.
+
 2004-07-09  Eric Botcazou  <ebotcazou@libertysurf.fr>
 
        * config/sparc/sparc.md (return): Rewrite length formula.
index e5a1a636da3dfb0a39281a67ddb8e7131a29c3fd..3767115a416a072ee179748f2e48b296ef2e691c 100644 (file)
@@ -52,7 +52,6 @@ extern struct rtx_def *function_arg (CUMULATIVE_ARGS *,
                                     enum machine_mode, tree, int);
 extern int function_arg_partial_nregs (CUMULATIVE_ARGS *,
                                       enum machine_mode, tree, int);
-extern struct rtx_def *mn10300_va_arg (tree, tree);
 #endif /* TREE_CODE */
 
 extern void expand_prologue (void);
index da235e39a29400953295f9cae0f2c6278ec36877..22fc6794b855d060302857dd8b50b121f77a931b 100644 (file)
@@ -71,7 +71,7 @@ static bool mn10300_rtx_costs (rtx, int, int, int *);
 static void mn10300_file_start (void);
 static bool mn10300_return_in_memory (tree, tree);
 static rtx mn10300_builtin_saveregs (void);
-
+static tree mn10300_gimplify_va_arg_expr (tree, tree, tree *, tree *);
 \f
 /* Initialize the GCC target structure.  */
 #undef TARGET_ASM_ALIGNED_HI_OP
@@ -98,6 +98,8 @@ static rtx mn10300_builtin_saveregs (void);
 
 #undef TARGET_EXPAND_BUILTIN_SAVEREGS
 #define TARGET_EXPAND_BUILTIN_SAVEREGS mn10300_builtin_saveregs
+#undef TARGET_GIMPLIFY_VA_ARG_EXPR
+#define TARGET_GIMPLIFY_VA_ARG_EXPR mn10300_gimplify_va_arg_expr
 
 static void mn10300_encode_section_info (tree, rtx, int);
 struct gcc_target targetm = TARGET_INITIALIZER;
@@ -1457,40 +1459,13 @@ mn10300_va_start (tree valist, rtx nextarg)
   std_expand_builtin_va_start (valist, nextarg);
 }
 
-rtx
-mn10300_va_arg (tree valist, tree type)
+static tree
+mn10300_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, tree *post_p)
 {
-  HOST_WIDE_INT align, rsize;
-  tree t, ptr, pptr;
-
-  /* Compute the rounded size of the type.  */
-  align = PARM_BOUNDARY / BITS_PER_UNIT;
-  rsize = (((int_size_in_bytes (type) + align - 1) / align) * align);
-
-  t = build (POSTINCREMENT_EXPR, TREE_TYPE (valist), valist, 
-            build_int_2 ((rsize > 8 ? 4 : rsize), 0));
-  TREE_SIDE_EFFECTS (t) = 1;
-
-  ptr = build_pointer_type (type);
-
-  /* "Large" types are passed by reference.  */
-  if (rsize > 8)
-    {
-      pptr = build_pointer_type (ptr);
-      t = build1 (NOP_EXPR, pptr, t);
-      TREE_SIDE_EFFECTS (t) = 1;
-
-      t = build1 (INDIRECT_REF, ptr, t);
-      TREE_SIDE_EFFECTS (t) = 1;
-    }
+  if (FUNCTION_ARG_PASS_BY_REFERENCE (dummy, TYPE_MODE (type), type, dummy))
+    return ind_gimplify_va_arg_expr (valist, type, pre_p, post_p);
   else
-    {
-      t = build1 (NOP_EXPR, ptr, t);
-      TREE_SIDE_EFFECTS (t) = 1;
-    }
-
-  /* Calculate!  */
-  return expand_expr (t, NULL_RTX, Pmode, EXPAND_NORMAL);
+    return std_gimplify_va_arg_expr (valist, type, pre_p, post_p);
 }
 
 /* Return an RTX to represent where a value with mode MODE will be returned
index d980b445cfe9d367ad12f829f93f8fe6a77cca31..e831e28035a92bfa93eaf1fea94f0f2e7c2b1659 100644 (file)
@@ -697,13 +697,6 @@ struct cum_arg {int nbytes; };
 /* Implement `va_start' for varargs and stdarg.  */
 #define EXPAND_BUILTIN_VA_START(valist, nextarg) \
   mn10300_va_start (valist, nextarg)
-
-/* Implement `va_arg'.  */
-#define EXPAND_BUILTIN_VA_ARG(valist, type) \
-  mn10300_va_arg (valist, type)
-
-/* Addressing modes, and classification of registers for them.  */
-
 \f
 /* 1 if X is an rtx for a constant that is a valid address.  */