m32r-protos.h (m32r_va_arg): Remove.
authorRichard Henderson <rth@redhat.com>
Fri, 9 Jul 2004 00:19:25 +0000 (17:19 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Fri, 9 Jul 2004 00:19:25 +0000 (17:19 -0700)
        * config/m32r/m32r-protos.h (m32r_va_arg): Remove.
        * config/m32r/m32r.c (TARGET_GIMPLIFY_VA_ARG_EXPR): New.
        (m32r_gimplify_va_arg_expr): Rewrite from m32r_va_arg.
        * config/m32r/m32r.h (EXPAND_BUILTIN_VA_ARG): Remove.

From-SVN: r84335

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

index 330f1756a95fb3a906f92b47c69ad3ab6b1f30f9..fdf2971a84b009bb61b167314502278b76685915 100644 (file)
@@ -1,5 +1,10 @@
 2004-07-08  Richard Henderson  <rth@redhat.com>
 
+       * config/m32r/m32r-protos.h (m32r_va_arg): Remove.
+       * config/m32r/m32r.c (TARGET_GIMPLIFY_VA_ARG_EXPR): New.
+       (m32r_gimplify_va_arg_expr): Rewrite from m32r_va_arg.
+       * config/m32r/m32r.h (EXPAND_BUILTIN_VA_ARG): Remove.
+
        * config/iq2000/iq2000-protos.h (iq2000_va_arg): Remove.
        * config/iq2000/iq2000.c (TARGET_GIMPLIFY_VA_ARG_EXPR): New.
        (iq2000_gimplify_va_arg_expr): Rewrite from iq2000_va_arg.
index 17ab18d6c364bd3fc6b6d3e280e8c27450bb2873..89a4cbe28f93836d32288a5f2fe20723432b35d1 100644 (file)
@@ -95,7 +95,6 @@ extern int    reg_or_zero_operand (rtx, Mmode);
 #endif /* HAVE_MACHINE_MODES */
 
 #ifdef TREE_CODE
-extern struct rtx_def * m32r_va_arg (tree, tree);
 extern int m32r_pass_by_reference (tree);
 #endif /* TREE_CODE */
 #endif /* RTX_CODE */
index 4105b4e04f5f6df8a9997539b64ffab3971bbdab..871369a9e98137c07ee6bd9b9faba582a232db86 100644 (file)
@@ -99,6 +99,7 @@ static void m32r_setup_incoming_varargs (CUMULATIVE_ARGS *, enum machine_mode,
                                         tree, int *, int);
 static void init_idents (void);
 static bool m32r_rtx_costs (rtx, int, int, int *);
+static tree m32r_gimplify_va_arg_expr (tree, tree, tree *, tree *);
 \f
 /* Initialize the GCC target structure.  */
 #undef  TARGET_ATTRIBUTE_TABLE
@@ -142,6 +143,8 @@ static bool m32r_rtx_costs (rtx, int, int, int *);
 
 #undef  TARGET_SETUP_INCOMING_VARARGS
 #define TARGET_SETUP_INCOMING_VARARGS m32r_setup_incoming_varargs
+#undef  TARGET_GIMPLIFY_VA_ARG_EXPR
+#define TARGET_GIMPLIFY_VA_ARG_EXPR m32r_gimplify_va_arg_expr
 
 struct gcc_target targetm = TARGET_INITIALIZER;
 \f
@@ -1394,61 +1397,13 @@ m32r_setup_incoming_varargs (CUMULATIVE_ARGS *cum, enum machine_mode mode,
 \f
 /* Implement `va_arg'.  */
 
-rtx
-m32r_va_arg (tree valist, tree type)
+static tree
+m32r_gimplify_va_arg_expr (tree valist, tree type, tree *pre_p, tree *post_p)
 {
-  HOST_WIDE_INT size, rsize;
-  tree t;
-  rtx addr_rtx;
-
-  size = int_size_in_bytes (type);
-  rsize = (size + UNITS_PER_WORD - 1) & -UNITS_PER_WORD;
-
   if (m32r_pass_by_reference (type))
-    {
-      tree type_ptr, type_ptr_ptr;
-
-      /* Pass by reference.  */
-      type_ptr = build_pointer_type (type);
-      type_ptr_ptr = build_pointer_type (type_ptr);
-
-      t = build (POSTINCREMENT_EXPR, va_list_type_node, valist, 
-                build_int_2 (UNITS_PER_WORD, 0));
-      TREE_SIDE_EFFECTS (t) = 1;
-      t = build1 (NOP_EXPR, type_ptr_ptr, t);
-      TREE_SIDE_EFFECTS (t) = 1;
-      t = build1 (INDIRECT_REF, type_ptr, t);
-
-      addr_rtx = expand_expr (t, NULL_RTX, Pmode, EXPAND_NORMAL);
-    }
+    return ind_gimplify_va_arg_expr (valist, type, pre_p, post_p);
   else
-    {
-      /* Pass by value.  */
-      if (size < UNITS_PER_WORD)
-       {
-         /* Care for bigendian correction on the aligned address.  */
-         t = build (PLUS_EXPR, ptr_type_node, valist,
-                    build_int_2 (rsize - size, 0));
-         addr_rtx = expand_expr (t, NULL_RTX, Pmode, EXPAND_NORMAL);
-         addr_rtx = copy_to_reg (addr_rtx);
-
-         /* Increment AP.  */
-         t = build (PLUS_EXPR, va_list_type_node, valist,
-                    build_int_2 (rsize, 0));
-         t = build (MODIFY_EXPR, va_list_type_node, valist, t);
-         TREE_SIDE_EFFECTS (t) = 1;
-         expand_expr (t, const0_rtx, VOIDmode, EXPAND_NORMAL);
-       }
-      else
-       {
-         t = build (POSTINCREMENT_EXPR, va_list_type_node, valist, 
-                    build_int_2 (rsize, 0));
-         TREE_SIDE_EFFECTS (t) = 1;
-         addr_rtx = expand_expr (t, NULL_RTX, Pmode, EXPAND_NORMAL);
-       }
-    }
-
-  return addr_rtx;
+    return std_gimplify_va_arg_expr (valist, type, pre_p, post_p);
 }
 \f
 /* Return true if INSN is real instruction bearing insn.  */
index 0f119447a20c53e460a84fe44d8c4499ed2273c5..4a2e01f51da34b7feb5a72ca2c4694f275832307 100644 (file)
@@ -1141,10 +1141,6 @@ extern enum reg_class m32r_regno_reg_class[FIRST_PSEUDO_REGISTER];
   (((TYPE) ? TYPE_ALIGN (TYPE) : GET_MODE_BITSIZE (MODE)) <= PARM_BOUNDARY \
    ? PARM_BOUNDARY : 2 * PARM_BOUNDARY)
 #endif
-
-/* Implement `va_arg'.  */
-#define EXPAND_BUILTIN_VA_ARG(valist, type) \
-  m32r_va_arg (valist, type)
 \f
 /* Function results.  */