]> gcc.gnu.org Git - gcc.git/commitdiff
re PR target/39473 (Typo in untyped_call in i386.md)
authorH.J. Lu <hongjiu.lu@intel.com>
Tue, 17 Mar 2009 12:50:52 +0000 (12:50 +0000)
committerH.J. Lu <hjl@gcc.gnu.org>
Tue, 17 Mar 2009 12:50:52 +0000 (05:50 -0700)
2009-03-16  H.J. Lu  <hongjiu.lu@intel.com>

PR target/39473
* config/i386/i386.c (ix86_expand_call): Check extra clobbers
for ms->sysv ABI calls only in 64bit mode.

* config/i386/i386.md (untyped_call): Support 32bit.

From-SVN: r144901

gcc/ChangeLog
gcc/config/i386/i386.c
gcc/config/i386/i386.md

index 6edb3a66338aab13141beb932659d3a07877f182..be2837f2854d6871be8180fead3fac4716d05326 100644 (file)
@@ -1,3 +1,11 @@
+2009-03-16  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR target/39473
+       * config/i386/i386.c (ix86_expand_call): Check extra clobbers
+       for ms->sysv ABI calls only in 64bit mode.
+
+       * config/i386/i386.md (untyped_call): Support 32bit.
+
 2009-03-16  H.J. Lu  <hongjiu.lu@intel.com>
 
        * doc/extend.texi: Replace x86_65 with x86_64.
index e993dce0bde4f8d3cb0a6812c2b94a5e9cb265d2..bc912b60b5af8fe285fac9450dd84909abdbd173 100644 (file)
@@ -18617,12 +18617,7 @@ ix86_expand_call (rtx retval, rtx fnaddr, rtx callarg1,
                  rtx pop, int sibcall)
 {
   rtx use = NULL, call;
-  enum calling_abi function_call_abi;
 
-  if (callarg2 && INTVAL (callarg2) == -2)
-    function_call_abi = MS_ABI;
-  else
-    function_call_abi = SYSV_ABI;
   if (pop == const0_rtx)
     pop = NULL;
   gcc_assert (!TARGET_64BIT || !pop);
@@ -18678,12 +18673,13 @@ ix86_expand_call (rtx retval, rtx fnaddr, rtx callarg1,
       pop = gen_rtx_PLUS (Pmode, stack_pointer_rtx, pop);
       pop = gen_rtx_SET (VOIDmode, stack_pointer_rtx, pop);
       call = gen_rtx_PARALLEL (VOIDmode, gen_rtvec (2, call, pop));
-      gcc_assert (ix86_cfun_abi () != MS_ABI || function_call_abi != SYSV_ABI);
     }
-  /* We need to represent that SI and DI registers are clobbered
-     by SYSV calls.  */
-  if (ix86_cfun_abi () == MS_ABI && function_call_abi == SYSV_ABI)
+  if (TARGET_64BIT
+      && ix86_cfun_abi () == MS_ABI
+      && (!callarg2 || INTVAL (callarg2) != -2))
     {
+      /* We need to represent that SI and DI registers are clobbered
+        by SYSV calls.  */
       static int clobbered_registers[] = {
        XMM6_REG, XMM7_REG, XMM8_REG,
        XMM9_REG, XMM10_REG, XMM11_REG,
index d68d0c832394c784ba3b64b0db883aad80bdd1d5..023f2e19f9817004456817daadd1745dc9106f0e 100644 (file)
   /* In order to give reg-stack an easier job in validating two
      coprocessor registers as containing a possible return value,
      simply pretend the untyped call returns a complex long double
-     value.  */
+     value. 
+
+     We can't use SSE_REGPARM_MAX here since callee is unprototyped
+     and should have the default ABI.  */
 
   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)
+                   GEN_INT ((TARGET_64BIT
+                             ? (DEFAULT_ABI == SYSV_ABI
+                                ? X86_64_SSE_REGPARM_MAX
+                                : X64_SSE_REGPARM_MAX)
+                             : X86_32_SSE_REGPARM_MAX)
                             - 1),
                    NULL, 0);
 
This page took 0.138736 seconds and 5 git commands to generate.