[PATCH] MIPS gas: Cleanup address insn conditionals

Thiemo Seufer ica2_ts@csv.ica.uni-stuttgart.de
Mon Jun 16 14:02:00 GMT 2003


Maciej W. Rozycki wrote:
> On Mon, 16 Jun 2003, Thiemo Seufer wrote:
> 
> > I changed it to:
> > 
> > /* Addresses are loaded in different ways, depending on the address
> >    size in use and the ABI.  N32_ABI uses additions with overflow
> >    checking, this allows to catch code generation errors which would
> >    distort the proper sign extension of the 64-bit wide registers.  */
> > #define ADDRESS_ADD_INSN						\
> >    (HAVE_32BIT_ADDRESSES ? (HAVE_NEWABI ? "add" : "addu") : "daddu")
> > 
> > #define ADDRESS_ADDI_INSN						\
> >    (HAVE_32BIT_ADDRESSES ? (HAVE_NEWABI ? "addi" : "addiu") : "daddiu")
> 
>  Hmm, this effectively disables addresses in the ranges of 0x7fff8000 -
> 0x7fffffff and 0xffff8000 - 0xffffffff for certain operations for the n32
> ABI.  The latter is probably out of the scope of the ABI, but the former
> certainly is not.

Well, IRIX works this way, and the n32 ABI documentation mandates the
use of add/addi.

> Does any of the ABI documents contain any specific
> comment on a special treatment of the range?  Why do you think such an
> overflow check should be done -- what advantages are there?  Certainly
> "addu" and "addiu" cannot result in improper sign-extension of low 32-bit
> halfs of registers. 

Right, the idea of catching improper sign-extension was only valid
for n64 (where it isn't done). I'll fix the comment.


Thiemo



More information about the Binutils mailing list