[PATCH, PowerPC] ABI fixes / improvements for powerpc64-linux
hfinkel at anl.gov
Wed Jul 9 13:39:37 PDT 2014
----- Original Message -----
> From: "Ulrich Weigand" <Ulrich.Weigand at de.ibm.com>
> To: "Hal Finkel" <hfinkel at anl.gov>
> Cc: "cfe commits" <cfe-commits at cs.uiuc.edu>
> Sent: Wednesday, July 9, 2014 3:06:27 PM
> Subject: Re: [PATCH, PowerPC] ABI fixes / improvements for powerpc64-linux
> Ulrich Weigand/Germany/IBM wrote on 09.07.2014 21:54:20:
> > Yes, the ABI doc is wrong here. We'll fix this in the new version
> > we're currently working on. What was intended (and what is
> > implemented in GCC today) is somewhat of a mixture of 2 and 3
> > above: if the type's alignment requirement is >= 16 byte, it
> > will be passed in the save area at 16 byte alignment.
> > The rationale is the this: alignment in the parameter save area
> > matters for two reasons:
> > - if you take the address of the parameter, it has to be properly
> > aligned, since code is allowed to assume that property;
> > - when you access a member of the parameter in place in the save
> > area, the ISA may have alignment requirements; on PowerPC, the
> > only such requirement is 16 byte for VMX loads/stores.
> > The reason why an argument in the save area is 16-byte aligned
> > is that this will suffice for the second reason above, i.e. it
> > is possible to access the argument using VMX instructions.
> > If the argument type actually requires > 16 byte alignment,
> > and code indeed takes the address of the argument, then the
> > compiler will have to copy the incoming argument to another
> > place, properly aligned, on the stack.
> Oh, and I forgot another reason: the parameter area is at a fixed
> place relative to the stack frame, and the stack frame itself is
> only guaranteed to be 16 bytes aligned, so we *cannot* guarantee
> more than 16 byte alignment for any component of the save area.
> The only way to do that is by run-time pointer arithmetic within
> a larger block allocated on the stack dynamically, which is how
> larger alignments are guaranteed for local variables (and copies
> of parameters if necessary).
Right. And if you realign the stack frame (which you need to do anyway when you have locals with enhanced alignment requirements), then there is no problem.
Assistant Computational Scientist
Leadership Computing Facility
Argonne National Laboratory
More information about the cfe-commits