c4x-protos.h (c4x_va_arg): Remove.
authorRichard Henderson <rth@redhat.com>
Thu, 8 Jul 2004 20:34:26 +0000 (13:34 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Thu, 8 Jul 2004 20:34:26 +0000 (13:34 -0700)
        * config/c4x/c4x-protos.h (c4x_va_arg): Remove.
        * config/c4x/c4x.c (TARGET_GIMPLIFY_VA_ARG_EXPR): New.
        (c4x_gimplify_va_arg_expr): Rewrite from c4x_va_arg.
        * config/c4x/c4x.h (EXPAND_BUILTIN_VA_ARG): Remove.

From-SVN: r84311

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

index e568892111a03164eb2787c87f69163d639167da..9f84fcc577a47cc6c99e8c150788254abe53151c 100644 (file)
@@ -1,3 +1,10 @@
+2004-07-08  Richard Henderson  <rth@redhat.com>
+
+       * config/c4x/c4x-protos.h (c4x_va_arg): Remove.
+       * config/c4x/c4x.c (TARGET_GIMPLIFY_VA_ARG_EXPR): New.
+       (c4x_gimplify_va_arg_expr): Rewrite from c4x_va_arg.
+       * config/c4x/c4x.h (EXPAND_BUILTIN_VA_ARG): Remove.
+
 2004-07-08  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
 
        * pa.md (prefetch_32, prefetch_64): Simplify constraint checks.
index 5e79c1fd53a7971b5e2560f857ddd74bf85cd194..6189f7d201c9dcf5c223b945a619fb6b3e2fe588 100644 (file)
@@ -56,8 +56,6 @@ extern struct rtx_def *c4x_function_arg (CUMULATIVE_ARGS *,
 #if defined(RTX_CODE) && defined(TREE_CODE)
 extern void c4x_init_cumulative_args (CUMULATIVE_ARGS *c, tree, rtx);
 
-extern struct rtx_def *c4x_va_arg (tree, tree);
-
 extern rtx c4x_expand_builtin (tree, rtx, rtx, enum machine_mode, int);
 
 extern void c4x_init_builtins (void);
index 22aab7dce794b97c6089aa2a3b91418aec0aad5d..dff0da4ed5dfe27b6e66d4c31b0ef4ada0812b1a 100644 (file)
@@ -202,6 +202,7 @@ static int c4x_address_cost (rtx);
 static void c4x_init_libfuncs (void);
 static void c4x_external_libcall (rtx);
 static rtx c4x_struct_value_rtx (tree, int);
+static tree c4x_gimplify_va_arg_expr (tree, tree, tree *, tree *);
 \f
 /* Initialize the GCC target structure.  */
 #undef TARGET_ASM_BYTE_OP
@@ -255,6 +256,9 @@ static rtx c4x_struct_value_rtx (tree, int);
 #undef TARGET_STRUCT_VALUE_RTX
 #define TARGET_STRUCT_VALUE_RTX c4x_struct_value_rtx
 
+#undef TARGET_GIMPLIFY_VA_ARG_EXPR
+#define TARGET_GIMPLIFY_VA_ARG_EXPR c4x_gimplify_va_arg_expr
+
 struct gcc_target targetm = TARGET_INITIALIZER;
 \f
 /* Override command line options.
@@ -722,16 +726,20 @@ c4x_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode mode,
 
 /* C[34]x arguments grow in weird ways (downwards) that the standard
    varargs stuff can't handle..  */
-rtx
-c4x_va_arg (tree valist, tree type)
+
+static tree
+c4x_gimplify_va_arg_expr (tree valist, tree type,
+                         tree *pre_p ATTRIBUTE_UNUSED,
+                         tree *post_p ATTRIBUTE_UNUSED)
 {
   tree t;
 
   t = build (PREDECREMENT_EXPR, TREE_TYPE (valist), valist,
             build_int_2 (int_size_in_bytes (type), 0));
-  TREE_SIDE_EFFECTS (t) = 1;
+  t = fold_convert (build_pointer_type (type), t);
+  t = build_fold_indirect_ref (t);
 
-  return expand_expr (t, NULL_RTX, Pmode, EXPAND_NORMAL);
+  return t;
 }
 
 
index cff2548df775c3f9519f35d31ec7a605bef78556..823a6085da63a1ae8eff6a3b70f7185951f0a056 100644 (file)
@@ -1162,11 +1162,6 @@ CUMULATIVE_ARGS;
 
 #define DEFAULT_PCC_STRUCT_RETURN      0
 
-/* Varargs handling.  */
-
-#define EXPAND_BUILTIN_VA_ARG(valist, type) \
-  c4x_va_arg (valist, type)
-
 /* Generating Code for Profiling.  */
 
 /* Note that the generated assembly uses the ^ operator to load the 16