calls.c (check_sibcall_argument_overlap_1): Adjust for ARGS_GROW_DOWNWARD.
authorAlexandre Oliva <aoliva@redhat.com>
Tue, 22 Aug 2000 19:30:49 +0000 (19:30 +0000)
committerJeff Law <law@gcc.gnu.org>
Tue, 22 Aug 2000 19:30:49 +0000 (13:30 -0600)
        * calls.c (check_sibcall_argument_overlap_1): Adjust for
        ARGS_GROW_DOWNWARD.
        (check_sibcall_argument_overlap): Likewise.

From-SVN: r35887

gcc/ChangeLog
gcc/calls.c

index fe8bbb4b9042435ca2d77b5148f844e7ac19ca36..ce6bf5a9422bf41ee2aeef69d450796b5588f3d4 100644 (file)
         
 2000-08-22  Alexandre Oliva  <aoliva@redhat.com>
 
+       * calls.c (check_sibcall_argument_overlap_1): Adjust for
+       ARGS_GROW_DOWNWARD.
+       (check_sibcall_argument_overlap): Likewise.
+
        * invoke.texi (SH Options): Document -m4-nofpu,
        -m4-single-only, -m4-single, -m4, -mbigtable, -mfmovd,
        -mhitachi, -mnomacsave, -misize, -mpadstruct, -mspace.
index 2d0d52c40f64c53dc600d1626b50d7c60c55618b..6784bca9fe80dac39602ac7c1f6d82717007595b 100644 (file)
@@ -1974,6 +1974,10 @@ check_sibcall_argument_overlap_1 (x)
       else
        return 0;
 
+#ifdef ARGS_GROW_DOWNWARD
+      i = -i - GET_MODE_SIZE (GET_MODE (x));
+#endif
+
       for (k = 0; k < GET_MODE_SIZE (GET_MODE (x)); k++)
        if (i + k < stored_args_map->n_bits
            && TEST_BIT (stored_args_map, i + k))
@@ -2025,7 +2029,12 @@ check_sibcall_argument_overlap (insn, arg)
        check_sibcall_argument_overlap_1 (PATTERN (insn)))
       break;
 
+#ifdef ARGS_GROW_DOWNWARD
+  low = -arg->offset.constant - arg->size.constant;
+#else
   low = arg->offset.constant;
+#endif
+
   for (high = low + arg->size.constant; low < high; low++)
     SET_BIT (stored_args_map, low);
   return insn != NULL_RTX;