This is the mail archive of the gcc@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: Preprocessor macro for -mfpmath=sse ?


On Sat, May 04, 2002 at 08:17:49PM -0700, Tim Prince wrote:
> On Saturday 04 May 2002 18:14, Sylvain Pion wrote:
> > On Fri, May 03, 2002 at 08:16:03PM -0700, Tim Prince wrote:
> > > On Friday 03 May 2002 11:56, Sylvain Pion wrote:
> > > > I have implemented some interval arithmetic code which has to work
> > > > around the well known non-compliance (IEEE 754) issues of x86's
> > > > floating point unit. I would like to get rid of these costly
> > > > workarounds when I compile with -mfpmath=sse.
> > > > Would you consider adding a preprocessor macro that I could test for ?
> > >
> > > I believe the pre-defined macros __SSE__ and __SSE2__ are intended for
> > > such purposes.
> >
> > Where are they predefined ?
> > I don't see these macros :
> >
> > ~> gcc -v -c -mfpmath=sse -msse foo.c
> > Reading specs from [...]
> > Thread model: single
> > gcc version 3.2 20020502 (experimental)
> >  ./gcc/Linux_trunc/bin/../lib/gcc-lib/i686-pc-linux-gnu/3.2/cc1 -lang-c
> > -quiet -v -iprefix
> > ./gcc/Linux_trunc/bin/../lib/gcc-lib/i686-pc-linux-gnu/3.2/ -D__GNUC__=3
> > -D__GNUC_MINOR__=2 -D__GNUC_PATCHLEVEL__=0 -D__ELF__ -Dunix -D__gnu_linux__
> > -Dlinux -D__ELF__ -D__unix__ -D__gnu_linux__ -D__linux__ -D__unix -D__linux
> > -Asystem=posix -D__NO_INLINE__ -D__STDC_HOSTED__=1 -Acpu=i386
> > -Amachine=i386 -Di386 -D__i386 -D__i386__ -D__tune_i686__
> > -D__tune_pentiumpro__ foo.c -quiet -dumpbase foo.c -mfpmath=sse -msse
> > -version -o /tmp/ccFd2R6k.s
> >
> >
> > I would expect to see -D__SSE__ or such here.
> Both appear in gcc-3.1 when -mfpmath=sse is invoked together with 
> -march=pentium4.   __SSE__ alone appears with -march=pentium4 instead.

OK, but "-mfpmath=sse -msse2" is enough to generate SSE2 code, without the
need for -march=pentium4 (I checked the assembly).

The documentation of -mfpmath states : "you need to use -march=cpu-type, -msse
or -msse2 switches to enable SSE extensions".  (see the "or" ?)

So I think that -msse2 should be enough to have __SSE2__, but currently it's
not.  Similarly for -msse => __SSE__.


While at it : how do I detect the use of "-mfpmath=sse,387" ?
This option will define __SSE__, but I still need to have my workarounds in
place, since gcc might use the i387...
It would be nice to have a macro for this as well.


BTW, are these __SSE__ and such macros documented somewhere ?
I would expect something in the paragraph concerning -mfpmath.

-- 
Sylvain


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