Mark Mitchell:
Richard Henderson wrote:
H.J. Lu wrote:
Can we declare that Linux/ia32 generates i486 insn by default?

We the gcc team?  I'm not sure.  For now I'll say no.

We an individual linux distributor?  Certainly.
In fact I would be surprised if i586 wasn't a
decent minimum these days.

I agree.  We the GCC team have to accept that some CPUs may not have the
ability to do this.  That might be old x86 CPUs; it might also be
brand-new embedded CPUs.

Setting the default to -march=i486 will still let people who target i386 to use -march=i386.

The problem, from the point of view of a library such as boost::shared_ptr, is that there is no way to distinguish between user A, who just types g++ foo.cpp and expects to get a program that works well on a typical machine, and user B, who types g++ -march=i386 foo.cpp, with the explicit intent to run the result on a 386.

Since A users outnumber B users, boost::shared_ptr assumes A and uses 486 atomic instructions even though __i486__ is not defined.

Has the default been 486, I'd be able to recognize user B's intent and not use 486 instructions.

(Not that I've ever received a bug report about shared_ptr not working on 386.)

Reply via email to