------- 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