Re: [RFA] sh-tdep.c (sh_use_struct_convention): Restructure and fix

Elena Zannoni
2003-10-10T17:56:35Z

Corinna Vinschen writes:
> On Fri, Oct 10, 2003 at 12:43:27PM -0400, Elena Zannoni wrote:
> > Corinna Vinschen writes:
> > > static int
> > > sh_use_struct_convention (int gcc_p, struct type *type)
> > > {
> > > int len = TYPE_LENGTH (type);
> > > int nelem = TYPE_NFIELDS (type);
> > >
> > > /* Non-power of 2 length types and types bigger than 8 bytes (which don't
> > > fit in two registers anyway) use struct convention. */
> > > if (len != 1 && len != 2 && len != 4 && len != 8)
> > > return 1;
> > >
> > > /* Scalar types and aggregate types with exactly one field are aligned
> > > by definition. They are returned in registers. */
> > > if (nelem <= 1)
> > > return 0;
> > >
> > > /* If the first field in the aggregate has the same length as the entire
> > > aggregate type, the type is returned in registers. */
> > > if (TYPE_LENGTH (TYPE_FIELD_TYPE (type, 0)) == len)
> > > return 0;
> > >
> > > /* If the size of the aggregate is 8 bytes and the first field is
> > > of size 4 bytes its alignment is equal to long long's alignment,
> > > so it's returned in registers. */
> > > if (len == 8 && TYPE_LENGTH (TYPE_FIELD_TYPE (type, 0)) == 4)
> > > return 0;
> > >
> > > /* Otherwise use struct convention. */
> > > return 1;
> > > }
> >
> > Much better, however, I would still like to know what the behavior is
> > for a struct of 2 chars. Probably this needs another test case.
>
> A struct of two chars is returned in memory. That's correct.

OK, after careful re-re-re-parsing of the description, I think so too.

I'll add another comment to explain that case better.

This can go in.

elena

>
> Corinna
>
> --
> Corinna Vinschen
> Cygwin Developer
> Red Hat, Inc.