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: Michael Matz <matz at suse dot de>
- To: Ulrich Weigand <weigand at immd1 dot informatik dot uni-erlangen dot de>
- Cc: gcc at gcc dot gnu dot org
- Date: Sat, 3 May 2003 21:50:00 +0200 (CEST)
- Subject: Re: (subreg:SF (reg:SC)) question - 20020227-1.c failure
Hi,
On Sat, 3 May 2003, Ulrich Weigand wrote:
> (set (subreg:M1 (reg:M2)) (...)) can have two meanings
... which depend on the wordsize of the machine. I don't like the use of
wordsize in the definition, but it's correct. The intent of these two
effects is to be able to set a whole register, whenever (set (subreg...))
happens, without _having_ to care to preserve the other bits. Of course
this then depends on the size of that register, and traditionally all
registers are conceptually sized one word.
> which classifies the subreg as the single-reg case on
> 64-bit platforms (as both SFmode and SCmode fit into
> UNITS_PER_WORD).
So, is it possible for s390x to store a complete SCmode value into _one_
register (also into float regs)? 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.
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.
Ciao,
Michael.