(FUNCTION_ARG): Don't make an EXPR_LIST if making a libcall.
authorRichard Kenner <kenner@gcc.gnu.org>
Fri, 21 Aug 1992 11:52:12 +0000 (07:52 -0400)
committerRichard Kenner <kenner@gcc.gnu.org>
Fri, 21 Aug 1992 11:52:12 +0000 (07:52 -0400)
From-SVN: r1925

gcc/config/rs6000/rs6000.h

index ebdf819c91865fe2fdb8363488f8d2bce8f6dd7d..820ee4f04a92bec52149e91411045973dcaf6a5b 100644 (file)
@@ -715,13 +715,16 @@ struct rs6000_args {int words, fregno, nargs_prototype; };
    and the rest are pushed.  The first 13 FP args are in registers.
 
    If this is floating-point and no prototype is specified, we use
-   both an FP and integer register (or possibly FP reg and stack).  */
+   both an FP and integer register (or possibly FP reg and stack).  Library
+   functions (when TYPE is zero) always have the proper types for args,
+   so we can pass the FP value just in one register.  emit_library_function
+   doesn't support EXPR_LIST anyway.  */
 
 #define FUNCTION_ARG(CUM, MODE, TYPE, NAMED)                           \
   (! (NAMED) ? 0                                                       \
    : ((TYPE) != 0 && TREE_CODE (TYPE_SIZE (TYPE)) != INTEGER_CST) ? 0  \
    : USE_FP_FOR_ARG_P (CUM, MODE, TYPE)                                        \
-   ? ((CUM).nargs_prototype > 0                                                \
+   ? ((CUM).nargs_prototype > 0 || (TYPE) == 0                         \
       ? gen_rtx (REG, MODE, (CUM).fregno)                              \
       : ((CUM).words < 8                                               \
         ? gen_rtx (EXPR_LIST, VOIDmode,                                \