This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]