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: Your change to emit_group_{load,store}


On Wed, Oct 27, 2004 at 01:52:56PM -0400, Aldy Hernandez wrote:
> I know rth already fixed this, but I still think the PPC back-end
> is generating confusing RTL:
> 
> > (parallel:TF [
> >         (expr_list:REG_DEP_TRUE (reg:DF 45 f13 [ g ])
> >             (const_int 0 [0x0]))
> >     ])
> 
> What does this mean exactly?

It's more or less the same as returning (reg:DF f13).  Admittedly, I
can't see now why I used a parallel in this particular case.  It was
possibly to cover bugs elsewhere that have now been fixed.

> It *doesn't* mean that the value goes partly in the stack,

No, not by itself.  Partly in memory is implied by
function_arg_partial_nregs returning non-zero, which it will do in this
case.

> because that's specified with the first operand
> of the first expr_list being zero.

No, a zero there says that the *whole* arg goes in memory, and also in
regs as specified by other elements of the parallel.

> If TF should go in multiple locations (in DF registers), it would be 
> something like this:
> 
> 	(parallel:TF [
> 		(expr_list (reg:DF f13) (const_int 0))
> 		(expr_list (reg:DF f14) (const_int 8)))
> 
> For that matter, I don't understand why we can't just return:
> 
> 	(reg:TF f13)

Because that would say the arg goes in f13 and f14.  And the ABI says we
only use f1..f13 for function params.

-- 
Alan Modra
IBM OzLabs - Linux Technology Centre


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