From: Maarten Lankhorst Date: Sun, 23 May 2010 06:52:32 +0000 (+0200) Subject: re PR target/43869 (ms_abi -> sysv_abi passing float arguments incorrectly) X-Git-Tag: upstream/12.2.0~92954 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7b37a805ed682d3d76982b1518ed82a1d4deeb72;p=platform%2Fupstream%2Fgcc.git re PR target/43869 (ms_abi -> sysv_abi passing float arguments incorrectly) 2010-05-23 Naarten Lankhorst PR target/43869 * config/i386/i386.c: Make sure that the correct regparm is passed. From-SVN: r159755 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c1baa8e..8c566ea 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2010-05-23 Naarten Lankhorst + + PR target/43869 + * config/i386/i386.c: Make sure that the correct regparm is passed. + 2010-05-23 Steven Bosscher * sbitmap.h (sbitmap_ptr, const_sbitmap_ptr): Move from here... diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index e4e758d..adcc256 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -5061,19 +5061,18 @@ init_cumulative_args (CUMULATIVE_ARGS *cum, /* Argument info to initialize */ cum->nregs = ix86_regparm; if (TARGET_64BIT) { - if (cum->call_abi != ix86_abi) - cum->nregs = (ix86_abi != SYSV_ABI - ? X86_64_REGPARM_MAX : X86_64_MS_REGPARM_MAX); + cum->nregs = (cum->call_abi == SYSV_ABI + ? X86_64_REGPARM_MAX + : X86_64_MS_REGPARM_MAX); } if (TARGET_SSE) { cum->sse_nregs = SSE_REGPARM_MAX; if (TARGET_64BIT) { - if (cum->call_abi != ix86_abi) - cum->sse_nregs = (ix86_abi != SYSV_ABI - ? X86_64_SSE_REGPARM_MAX - : X86_64_MS_SSE_REGPARM_MAX); + cum->sse_nregs = (cum->call_abi == SYSV_ABI + ? X86_64_SSE_REGPARM_MAX + : X86_64_MS_SSE_REGPARM_MAX); } } if (TARGET_MMX) @@ -6191,11 +6190,7 @@ function_arg_64 (CUMULATIVE_ARGS *cum, enum machine_mode mode, if (mode == VOIDmode) return GEN_INT (cum->maybe_vaarg ? (cum->sse_nregs < 0 - ? (cum->call_abi == ix86_abi - ? SSE_REGPARM_MAX - : (ix86_abi != SYSV_ABI - ? X86_64_SSE_REGPARM_MAX - : X86_64_MS_SSE_REGPARM_MAX)) + ? X86_64_SSE_REGPARM_MAX : cum->sse_regno) : -1); @@ -6899,11 +6894,6 @@ setup_incoming_varargs_64 (CUMULATIVE_ARGS *cum) rtx nsse_reg; alias_set_type set; int i; - int regparm = ix86_regparm; - - if (cum->call_abi != ix86_abi) - regparm = (ix86_abi != SYSV_ABI - ? X86_64_REGPARM_MAX : X86_64_MS_REGPARM_MAX); /* GPR size of varargs save area. */ if (cfun->va_list_gpr_size) @@ -6925,7 +6915,7 @@ setup_incoming_varargs_64 (CUMULATIVE_ARGS *cum) set = get_varargs_alias_set (); for (i = cum->regno; - i < regparm + i < X86_64_REGPARM_MAX && i < cum->regno + cfun->va_list_gpr_size / UNITS_PER_WORD; i++) {