aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCatherine Moore <clm@redhat.com>2001-02-21 18:49:33 +0000
committerJan Hubicka <hubicka@gcc.gnu.org>2001-02-21 18:49:33 +0000
commit82a127a9ecabb5e007e7f460df20c924d530bc4d (patch)
tree143c0d236320e5bad0f03d5bd697680f73a2ef42
parenta43f528e5ab9ddc9053f881e1056872ac4341f80 (diff)
downloadgcc-82a127a9ecabb5e007e7f460df20c924d530bc4d.zip
gcc-82a127a9ecabb5e007e7f460df20c924d530bc4d.tar.gz
gcc-82a127a9ecabb5e007e7f460df20c924d530bc4d.tar.bz2
i386.c (function_arg_advance): Pass SSE arguments in registers.
* 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
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/i386/i386.c32
2 files changed, 31 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index fdad97d..cc3a3e3 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 0333ce3..7456519 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -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)