From 82a127a9ecabb5e007e7f460df20c924d530bc4d Mon Sep 17 00:00:00 2001 From: Catherine Moore Date: Wed, 21 Feb 2001 18:49:33 +0000 Subject: [PATCH] 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 Co-Authored-By: Jan Hubicka From-SVN: r39955 --- gcc/ChangeLog | 7 +++++++ gcc/config/i386/i386.c | 32 ++++++++++++++++++++++++-------- 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index fdad97dd2ce..cc3a3e32864 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +Wed Feb 21 18:57:28 CET 2001 Catherine Moore + Bernd Schmidt + Jan Hubicka + + * i386.c (function_arg_advance): Pass SSE arguments in registers. + (function_arg): Likewise. + Wed Feb 21 18:12:41 CET 2001 Jan Hubicka * i386.md (mmx_lshrdi3, mmx_ashldi3): Guard by unspec. diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 0333ce36e82..74565198ab8 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) -- 2.30.2