On Wed, 21 Oct 2015, Jeff Law wrote:

> > Now I know that we can't get rid of these truncation/extensions
> > entirely, but do we need both?  It seems like foo could say that
> > if the original registers (198 and 200) are argument registers
> > that were extended to SImode due to TARGET_PROMOTE_PROTOTYPES
> > then we don't need to do the truncation/extension in the callee
> > and could just use the SImode values directly.  Am I missing
> > something?  Or are we doing both just to have belts and suspenders
> > and want to keep it that way?
> From reading the docs for TARGET_PROMOTE_PROTYPES, it would seem like it's the
> caller's responsibility.
> 
> However, it's not clear from the docs if it's something the callee can rely
> on, particularly when interoperating with a non-GCC compiler.
> 
> Does the ABI say anything about sub-word argument handling on the caller or
> callee side?

 The 32-bit (o32) MIPS psABI[1] does:

"All integer-valued arguments are passed as 32-bit words, with signed or
unsigned bytes and halfwords expanded (promoted) as necessary."

The 64-bit documents[2][3] then say:

"All integer parameters are promoted (that is, sign- or zero-extended to 
64-bit integers and passed in a single register).  Normally, no code is 
required for the promotion."

Which I understand as making the caller responsible for the promotion.

References:

[1] "SYSTEM V APPLICATION BINARY INTERFACE, MIPS RISC Processor 
    Supplement, 3rd Edition", "Argument Passing", p. 3-18
    <http://www.linux-mips.org/pub/linux/mips/doc/ABI/mipsabi.pdf>

[2] "MIPSpro 64-Bit Porting and Transition Guide", "Native 64-Bit 
    Subprogram Interface for MIPS Architectures", p. 21
    
<http://techpubs.sgi.com/library/manuals/2000/007-2391-006/pdf/007-2391-006.pdf>

[3] "MIPSpro N32 ABI Handbook", "N32 and Native 64-Bit (N64) Subprogram 
    Interface for MIPS Architectures", p. 5
    
<http://techpubs.sgi.com/library/manuals/2000/007-2816-004/pdf/007-2816-004.pdf>

  Maciej

Reply via email to