i386.c (function_arg_advance): Pass SSE arguments in registers.
authorCatherine Moore <clm@redhat.com>
Wed, 21 Feb 2001 18:49:33 +0000 (18:49 +0000)
committerJan Hubicka <hubicka@gcc.gnu.org>
Wed, 21 Feb 2001 18:49:33 +0000 (18:49 +0000)
        * i386.c (function_arg_advance):  Pass SSE arguments in registers.
(function_arg): Likewise.

Co-Authored-By: Bernd Schmidt <bernds@redhat.com>
Co-Authored-By: Jan Hubicka <jh@suse.cz>
From-SVN: r39955

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

index fdad97d..cc3a3e3 100644 (file)
@@ -1,3 +1,10 @@
+Wed Feb 21 18:57:28 CET 2001  Catherine Moore  <clm@redhat.com>
+                             Bernd Schmidt  <bernds@redhat.com>
+                             Jan Hubicka  <jh@suse.cz>
+
+        * i386.c (function_arg_advance):  Pass SSE arguments in registers.
+       (function_arg): Likewise.
+
 Wed Feb 21 18:12:41 CET 2001  Jan Hubicka  <jh@suse.cz>
 
        * i386.md (mmx_lshrdi3, mmx_ashldi3): Guard by unspec.
index 0333ce3..7456519 100644 (file)
@@ -916,17 +916,29 @@ function_arg_advance (cum, mode, type, named)
     fprintf (stderr,
             "function_adv (sz=%d, wds=%2d, nregs=%d, mode=%s, named=%d)\n\n",
             words, cum->words, cum->nregs, GET_MODE_NAME (mode), named);
-
-  cum->words += words;
-  cum->nregs -= words;
-  cum->regno += words;
-
-  if (cum->nregs <= 0)
+  if (TARGET_SSE && mode == TImode)
     {
-      cum->nregs = 0;
-      cum->regno = 0;
+      cum->sse_words += words;
+      cum->sse_nregs -= 1;
+      cum->sse_regno += 1;
+      if (cum->sse_nregs <= 0)
+       {
+         cum->sse_nregs = 0;
+         cum->sse_regno = 0;
+       }
     }
+  else         
+    {
+      cum->words += words;
+      cum->nregs -= words;
+      cum->regno += words;
 
+      if (cum->nregs <= 0)
+       {
+         cum->nregs = 0;
+         cum->regno = 0;
+       }
+    }
   return;
 }
 
@@ -969,6 +981,10 @@ function_arg (cum, mode, type, named)
       if (words <= cum->nregs)
        ret = gen_rtx_REG (mode, cum->regno);
       break;
+    case TImode:
+      if (cum->sse_nregs)
+        ret = gen_rtx_REG (mode, cum->sse_regno);
+      break;    
     }
 
   if (TARGET_DEBUG_ARG)