This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Code generation clarification (Submodels)


Hi Arturas,

On Tuesday 03 May 2005 17:36, Arturas Moskvinas wrote:
> > Simple question, but I'm not entirely clear from reading the
> > documentation
> >
> > If I have a gcc configured for i686-* target system and I use that
> > compiler to build a package without any -m submodel options , is the
> > generated code 1) only suitable for i686 and better, or
> >  2) tuned for i686 and better but still OK for i386
>
> From gcc manual:
> While picking a specific cpu-type will schedule things appropriately
> for that particular chip, the compiler will not generate any code that
> does not run on the i386 without the -march=cpu-type option being
> used.

Yes, I have read that, but it does _not_ answer my question, which is 
concerned with the default behaviour of a compiler configured and built for a 
specific sub-model target. :)

> It means even if you make -march=pentium-4 and run this code on 386 it
> will run (maybe you'll have problems with SSE (but i think gcc inserts
> code to bypass sse if you do not have it)).

No - you are wrong here. If you use -mpcu or mtune, it will run on i386, but 
if you use -march, it most certainly will not.

>
> > What about 32bit code generated with x86_64 targeted gcc (with -m32)?
>
> From the same gcc manual:

Yes, I have read this but it still doesn't answer my question ;)

This, from Ian Lance Taylor on the main gcc ML, answers my question:

> Andrew Walrond <andrew@walrond.org> writes:
> > If I have a gcc configured for i686-* target system and I use that
> > compiler to build a package without any -m submodel options , is the
> > generated code 1) only suitable for i686 and better, or
> >  2) tuned for i686 and better but still OK for i386
>
> The latter.  Configuring for i686-* is equivalent to configuring for
> i386-* with the option --with-cpu=i686.  This causes the compiler to
> be built as though you specified -mtune=i686 for each compile which
> does not explicitly use -mtune, -march, or -mcpu.
>
> > Whatever the answer, is it a generic rule that holds true for submodels
> > of all architectures?
>
> It should always be true, although of course there may be bugs.
>
> > What about 32bit code generated with x86_64 targeted gcc (with -m32)?
>
> If you configure for x86-64, I believe the default architecture will
> be MMX, SSE, and SSE2.  I believe that will apply even if you use
> -m32.  But I haven't really tested it.
>
> Ian

Thanks for the reply though. I admit Ian had to read between the lines to 
understand exactly what I was getting at :)

Andrew Walrond


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]