]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
va-sh.h (__va_arg_sh1): Define.
authorJ"orn Rennecke <amylaar@cygnus.co.uk>
Tue, 25 Nov 1997 21:09:44 +0000 (21:09 +0000)
committerJeff Law <law@gcc.gnu.org>
Tue, 25 Nov 1997 21:09:44 +0000 (14:09 -0700)
        * va-sh.h (__va_arg_sh1): Define.
        (va_arg): Use it.
        SH3E doesn't use any integer registers for subsequent arguments
        once a non-float value was passed in the stack.
        * sh.h (PASS_IN_REG_P): Fix SH3E case.

From-SVN: r16706

gcc/ChangeLog
gcc/config/sh/sh.h

index 5d73cfd54f57ae0cbb39015b1104639d2708e557..2d8cacd1e02ff6697ac991642058ff958365d1da 100644 (file)
@@ -1,3 +1,11 @@
+Tue Nov 25 10:00:42 1997  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * va-sh.h (__va_arg_sh1): Define.
+       (va_arg): Use it.
+       SH3E doesn't use any integer registers for subsequent arguments
+       once a non-float value was passed in the stack.
+       * sh.h (PASS_IN_REG_P): Fix SH3E case.
+
 Tue Nov 25 10:00:42 1997  Richard Henderson  (rth@cygnus.com)
 
        * alpha.h (CONST_OK_FOR_LETTER): Fix 'L' handling.
index 5210fdc76b438e97dd60f98f9bbb49e8c7f6e4c5..2c91182be17bf7dc725829e062b673ba274b5d4d 100644 (file)
@@ -769,9 +769,16 @@ struct sh_args {
    This macro is only used in this file. */
 
 #define PASS_IN_REG_P(CUM, MODE, TYPE) \
-  (ROUND_REG ((CUM), (MODE)) < NPARM_REGS (MODE)               \
-   && ((TYPE) == 0 || ! TREE_ADDRESSABLE ((tree)(TYPE)))       \
-   && (! TARGET_SH3E || (ROUND_REG((CUM), (MODE)) + (GET_MODE_SIZE(MODE)/4) <= NPARM_REGS (MODE))))
+  (((TYPE) == 0 || ! TREE_ADDRESSABLE ((tree)(TYPE))) \
+   && (TARGET_SH3E \
+       ? ((MODE) == BLKmode \
+         ? (((CUM).arg_count[(int) SH_ARG_INT] * UNITS_PER_WORD \
+             + int_size_in_bytes (TYPE)) \
+            <= NPARM_REGS (SImode) * UNITS_PER_WORD) \
+         : ((ROUND_REG((CUM), (MODE)) \
+             + HARD_REGNO_NREGS (BASE_ARG_REG (MODE), (MODE))) \
+            <= NPARM_REGS (MODE))) \
+       : ROUND_REG ((CUM), (MODE)) < NPARM_REGS (MODE)))
 
 /* Define where to put the arguments to a function.
    Value is zero to push the argument on the stack,