OSDN Git Service

* config/mmix/t-mmix (TARGET_LIBGCC2_CFLAGS): Don't -Dinhibit_libc
authorhp <hp@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 6 Apr 2002 08:20:35 +0000 (08:20 +0000)
committerhp <hp@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 6 Apr 2002 08:20:35 +0000 (08:20 +0000)
here.

* config/mmix/mmix.h (INITIAL_ELIMINATION_OFFSET): Remove spurious
semicolon.

* config/mmix/mmix.c (mmix_expand_builtin_va_arg): Variable-size
types come in by-reference.  Fix typo in comment.

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

gcc/ChangeLog
gcc/config/mmix/mmix.c
gcc/config/mmix/mmix.h
gcc/config/mmix/t-mmix

index 51f332e..98e4138 100644 (file)
@@ -1,3 +1,14 @@
+2002-04-06  Hans-Peter Nilsson  <hp@bitrange.com>
+
+       * config/mmix/t-mmix (TARGET_LIBGCC2_CFLAGS): Don't -Dinhibit_libc
+       here.
+
+       * config/mmix/mmix.h (INITIAL_ELIMINATION_OFFSET): Remove spurious
+       semicolon.
+
+       * config/mmix/mmix.c (mmix_expand_builtin_va_arg): Variable-size
+       types come in by-reference.  Fix typo in comment.
+
 2002-04-05  David S. Miller  <davem@redhat.com>
 
        * config/sparc/freebsd.h (ENDFILE_SPEC): Add crtfastmath bits.
index c59baf3..d1f21d6 100644 (file)
@@ -1273,7 +1273,7 @@ mmix_expand_builtin_va_arg (valist, type)
   if (type == error_mark_node
       || (type_size = TYPE_SIZE_UNIT (TYPE_MAIN_VARIANT (type))) == NULL
       || TREE_OVERFLOW (type_size))
-    /* Presumable an error; the size isn't computable.  A message has
+    /* Presumably an error; the size isn't computable.  A message has
        supposedly been emitted elsewhere.  */
     rounded_size = size_zero_node;
   else
@@ -1302,30 +1302,38 @@ mmix_expand_builtin_va_arg (valist, type)
    }
  else if (!integer_zerop (rounded_size))
    {
-     /* If the size is less than a register, the we need to pad the
-        address by adding the difference.  */
-     tree addend
-       = fold (build (COND_EXPR, sizetype,
-                     fold (build (GT_EXPR, sizetype,
-                                  rounded_size,
-                                  align)),
-                     size_zero_node,
-                     fold (build (MINUS_EXPR, sizetype,
-                                  rounded_size,
-                                  type_size))));
-     tree addr_tree1
-       = fold (build (PLUS_EXPR, TREE_TYPE (addr_tree), addr_tree, addend));
-
-     /* If this type is larger than what fits in a register, then it is
-       passed by reference.  */
-     addr_tree
-       = fold (build (COND_EXPR, TREE_TYPE (addr_tree1),
-                     fold (build (GT_EXPR, sizetype,
-                                  rounded_size,
-                                  ptr_size)),
-                     build1 (INDIRECT_REF, build_pointer_type (type),
-                             addr_tree1),
-                     addr_tree1));
+     if (!really_constant_p (type_size))
+       /* Varying-size types come in by reference.  */
+       addr_tree
+        = build1 (INDIRECT_REF, build_pointer_type (type), addr_tree);
+     else
+       {
+        /* If the size is less than a register, then we need to pad the
+           address by adding the difference.  */
+        tree addend
+          = fold (build (COND_EXPR, sizetype,
+                         fold (build (GT_EXPR, sizetype,
+                                      rounded_size,
+                                      align)),
+                         size_zero_node,
+                         fold (build (MINUS_EXPR, sizetype,
+                                      rounded_size,
+                                      type_size))));
+        tree addr_tree1
+          = fold (build (PLUS_EXPR, TREE_TYPE (addr_tree), addr_tree,
+                         addend));
+
+        /* If this type is larger than what fits in a register, then it
+           is passed by reference.  */
+        addr_tree
+          = fold (build (COND_EXPR, TREE_TYPE (addr_tree1),
+                         fold (build (GT_EXPR, sizetype,
+                                      rounded_size,
+                                      ptr_size)),
+                         build1 (INDIRECT_REF, build_pointer_type (type),
+                                 addr_tree1),
+                         addr_tree1));
+       }
    }
 
   addr = expand_expr (addr_tree, NULL_RTX, Pmode, EXPAND_NORMAL);
index 93c286b..6171e58 100644 (file)
@@ -695,7 +695,7 @@ enum reg_class
 #define CAN_ELIMINATE(FROM, TO) 1
 
 #define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \
- (OFFSET) = mmix_initial_elimination_offset (FROM, TO);
+ (OFFSET) = mmix_initial_elimination_offset (FROM, TO)
 
 
 /* Node: Stack Arguments */
index adf883a..84231ac 100644 (file)
@@ -6,7 +6,7 @@ LIBGCC1 =
 LIBGCC1_TEST =
 CROSS_LIBGCC1 =
 
-TARGET_LIBGCC2_CFLAGS = -mlibfuncs -Dinhibit_libc -O2
+TARGET_LIBGCC2_CFLAGS = -mlibfuncs -O2
 
 EXTRA_MULTILIB_PARTS = crti.o crtn.o crtbegin.o crtend.o