This is the mail archive of the gcc-bugs@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]

[Bug c++/30470] Compiling C++ programs with -mno-80387 and -O3 failes



------- Comment #8 from bugzilla at bennee dot com  2007-01-16 11:28 -------
(In reply to comment #7)
> >However if the -mno-80387 option is meant to disable x87 instructions then it
> > should be possible to build something without causing and x87 instructions to
> > be emitted shouldn't it?
> 
> Yes and that means you can not use (or reference, even via a prototype) any
> function that would cause x87 which is all functions which return a
> float/double.

I can see why it breaks now. The headers instantiate something passed "long
double" hence the code generation. Looking at my SuSE and Redhat box headers
the headers are different. This could be an Ubuntu-ism - it's glibc seems to be
older than that of RHAT4.

It should be perfectly possible to use the -mno-80387 build flag as long as the
program your compiling doesn't use the "long double" data type or call anything
that returns it.

According to the X86_64 ABI (3.2.3 Parameter Passing):

"
6. If the class is X87, the value is returned on the X87 stack in %st0 as
80-bit
   x87 number.
7. If the class is X87UP, the value is returned together with the previous X87
   value in %st0.
8. If the class is COMPLEX_X87, the real part of the value is returned in
   %st0 and the imaginary part in %st1.
"

Where the X87 classes are:

"
The 64-bit mantissa of arguments of type long double belongs to class
X87, the 16-bit exponent plus 6 bytes of padding belongs to class X87UP.
"

and 

"
A variable of type complex long double is classified as type COM-
PLEX_X87.
"


-- 

bugzilla at bennee dot com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
          Component|target                      |c++


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30470


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