------- Comment #3 from hjl dot tools at gmail dot com  2009-03-16 18:47 -------
(In reply to comment #0)
> untyped_call in i386.md has
> 
>   ix86_expand_call ((TARGET_FLOAT_RETURNS_IN_80387
>                      ? gen_rtx_REG (XCmode, FIRST_FLOAT_REG) : NULL),
>                     operands[0], const0_rtx,
>                     GEN_INT ((DEFAULT_ABI == SYSV_ABI ? X86_64_SSE_REGPARM_MAX
>                                                       : X64_SSE_REGPARM_MAX)
>                              - 1),
>                     NULL, 0);
> 
> 
> It doesn't look right for 32bit. Shouldn't it be GEN_INT (SSE_REGPARM_MAX)
> instead?
> 

This was changed by revision 136311:

http://gcc.gnu.org/ml/gcc-cvs/2008-06/msg00067.html

Those changes:

@ -1953,9 +1972,22 @@
    is also used as the pic register in ELF.  So for now, don't allow more than
    3 registers to be passed in registers.  */

-#define REGPARM_MAX (TARGET_64BIT ? 6 : 3)
-
-#define SSE_REGPARM_MAX (TARGET_64BIT ? 8 : (TARGET_SSE ? 3 : 0))
+/* Abi specific values for REGPARM_MAX and SSE_REGPARM_MAX */
+#define X86_64_REGPARM_MAX 6
+#define X64_REGPARM_MAX 4
+#define X86_32_REGPARM_MAX 3
+
+#define X86_64_SSE_REGPARM_MAX 8
+#define X64_SSE_REGPARM_MAX 4
+#define X86_32_SSE_REGPARM_MAX (TARGET_SSE ? 3 : 0)
+
+#define REGPARM_MAX (TARGET_64BIT ? (TARGET_64BIT_MS_ABI ? X64_REGPARM_MAX \
+                                                        : X86_64_REGPARM_MAX)
\
+                                 : X86_32_REGPARM_MAX)
+
+#define SSE_REGPARM_MAX (TARGET_64BIT ? (TARGET_64BIT_MS_ABI ?
X64_SSE_REGPARM_MAX \
+                                                            :
X86_64_SSE_REGPARM_MAX) \
+                                     : X86_32_SSE_REGPARM_MAX)

weren't properly mentioned in ChangeLog.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39473

Reply via email to