This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: (subreg:SF (reg:SC)) question - 20020227-1.c failure
- From: Ulrich Weigand <weigand at immd1 dot informatik dot uni-erlangen dot de>
- To: matz at suse dot de (Michael Matz)
- Cc: weigand at immd1 dot informatik dot uni-erlangen dot de (Ulrich Weigand), gcc at gcc dot gnu dot org
- Date: Sat, 3 May 2003 22:03:19 +0200 (MET DST)
- Subject: Re: (subreg:SF (reg:SC)) question - 20020227-1.c failure
Michael Matz wrote:
> So, is it possible for s390x to store a complete SCmode value into _one_
> register (also into float regs)?
We can store a SCmode value either in one general register, or else
in two floating point registers (that would be preferred).
I guess we could enforce the use of two general registers as well
(even though not strictly necessary), if that helps things. But
that wouldn't change the flow.c test either.
> If yes, than the subreg-set correctly
> clobbers the other bits, i.e. flow.c correctly determines the single-ret
> case. In that case the generated code was incorrect, and should use
> strict_low_part.
>From a quick look through the source, the result of gen_realpart and
gen_imagpart are used throughout as both source and destination,
so you can't just add strict_low_part there.
If we do indeed need to use strict_low_part, it would appear the
whole handling of complex values needs to be reworked ...
> If OTOH you need two registers for SCmode, the code was correct (and the
> subreg would be limited to one of the two regs). In that case the
> condition in flow.c would be wrong.
That would contradict the documentation Geoff has pointed out.
Bye,
Ulrich
--
Dr. Ulrich Weigand
weigand@informatik.uni-erlangen.de