Alexandre Oliva writes:
sorry for the late reply: start of term is taking most of my time.
On Oct 9, 2003, Rainer Orth <ro@TechFak.Uni-Bielefeld.DE> wrote:
* config/mips/{iris6.h, linux.h} used to define _MIPS_SIM for the O32 ABI
in terms of another macro not defined by gcc itself (or SGI's MIPSpro C,
for that matter), namely _MIPS_SIM_ABI32.
My understanding is that this made things backward-compatible. Even
if your sgidefs.h doesn't define _MIPS_SIM_ABI32 (because it pre-dates
the existence of multiple ABIs), they will still compare equal. If
But do any such systems exist and do we still care for them? Even IRIX 5.3
(which is quite ancient by todays standards) defines _MIPS_SIM in terms of
_ABIO32 and has _MIPS_SIM_ABI32=1 in <sgidefs.h>.
your code is written with multiple ABIs in mind, it's entitled to
require _MIPS_SIM to be defined to non-zero, after including
<sgidefs.h>.
If your proposal still guarantees this set of assumptions, I don't
have any problem with it.
I'm not sure i really get what you mean: consider this input:
#if _MIPS_SIM == _MIPS_SIM_ABI32
O32 with "_MIPS_SIM_ABI32"
#endif
#if _MIPS_SIM == _ABIO32
O32 with "_ABIO32"
#endif
Right now, with -D_MIPS_SIM=_MIPS_SIM_ABI32 only (i.e. _MIPS_SIM_ABI32 and
_ABIO32 undefined), you get
O32 with "_MIPS_SIM_ABI32"
O32 with "_ABIO32"
because both undefined macros evaluate to 0.
With my proposed patch (-D_MIPS_SIM=_ABIO32 -D_ABIO32=1) and without
<sgidefs.h> (i.e. _MIPS_SIM_ABI32 undefined), you get
O32 with "_ABIO32"
But it is simply wrong to use _MIPS_SIM without <sgidefs.h>, so you get
what you deserve ;-(
With my proposed patch and <sgidefs.h> (i.e. _MIPS_SIM_ABI32 defined), you
get again
O32 with "_MIPS_SIM_ABI32"
O32 with "_ABIO32"
Rainer