public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c/16584] New: -msse2 also enabling -mfpmath=sse option causing illegal instruction errors
@ 2004-07-16 2:47 aron-gcc at sightspeed dot com
2004-07-16 6:32 ` [Bug c/16584] " pinskia at gcc dot gnu dot org
` (6 more replies)
0 siblings, 7 replies; 8+ messages in thread
From: aron-gcc at sightspeed dot com @ 2004-07-16 2:47 UTC (permalink / raw)
To: gcc-bugs
The gcc command line option -msse2 seems to be implicitly turning on the -
mfpmath=sse option. The man pages describe the -msse2 as only enabling the use
of SSE2 intrinsics rather than automatic use.
This bug is very dangorous since it breaks using runtime detection of SSE2
support. We use the -msse2 option to only generate SSE2 code in areas where we
have written intrinsics so that a single binary is platform safe.
A simple example is:
gcc -msse2 test.c
<file test.c>
int main(void)
{
int i = 1;
float temp2 = 1.0 * (i*i); // Allow for an optimal sse2 int to float
conversion
return 0;
}
<test.s> output
.file "test.c"
.text
.globl main
.type main, @function
main:
pushl %ebp
movl %esp, %ebp
subl $24, %esp
andl $-16, %esp
movl $0, %eax
addl $15, %eax
addl $15, %eax
shrl $4, %eax
sall $4, %eax
subl %eax, %esp
movl $1, -4(%ebp)
movl -4(%ebp), %eax
imull -4(%ebp), %eax
cvtsi2sd %eax, %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -8(%ebp)
movl $0, %eax
leave
ret
.size main, .-main
.section .note.GNU-stack,"",@progbits
.ident "GCC: (GNU) 3.4.0"
<end>
Note that the movss, cvtsi2sd and cvtsd2ss instructions are used which should
not happen.
When this is compiled and run on a Pentium 3 machine a SIGILL is generated.
<Additional Information>
<file test.i>
# 1 "test.c"
# 1 "<built-in>"
# 1 "<command line>"
# 1 "test.c"
int main(void)
{
int i = 1;
float temp2 = 1.0 * (i*i);
return 0;
}
<end file>
Reading specs from /usr/lib/gcc/i486-slackware-linux/3.4.0/specs
Configured with: ../gcc-3.4.0/configure --prefix=/usr --enable-shared --enable-
threads=posix --enable-__cxa_atexit --disable-checking --with-gnu-ld --verbose -
-target=i486-slackware-linux --host=i486-slackware-linux
Thread model: posix
gcc version 3.4.0
/usr/libexec/gcc/i486-slackware-linux/3.4.0/cc1 -E -quiet -v test.c -msse2 -
mtune=i486 -o test.i
ignoring nonexistent directory "/usr/lib/gcc/i486-slackware-
linux/3.4.0/../../../../i486-slackware-linux/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/local/include
/usr/lib/gcc/i486-slackware-linux/3.4.0/include
/usr/include
End of search list.
/usr/libexec/gcc/i486-slackware-linux/3.4.0/cc1 -fpreprocessed test.i -quiet -
dumpbase test.c -msse2 -mtune=i486 -auxbase test -version -o test.s
GNU C version 3.4.0 (i486-slackware-linux)
compiled by GNU C version 3.4.0.
GGC heuristics: --param ggc-min-expand=64 --param ggc-min-heapsize=64518
/usr/lib/gcc/i486-slackware-linux/3.4.0/../../../../i486-slackware-
linux/bin/as -V -Qy -o test.o test.s
GNU assembler version 2.15.90.0.3 (i486-slackware-linux) using BFD version
2.15.90.0.3 20040415
/usr/libexec/gcc/i486-slackware-linux/3.4.0/collect2 --eh-frame-hdr -m
elf_i386 -dynamic-linker /lib/ld-linux.so.2 /usr/lib/gcc/i486-slackware-
linux/3.4.0/../../../crt1.o /usr/lib/gcc/i486-slackware-
linux/3.4.0/../../../crti.o /usr/lib/gcc/i486-slackware-linux/3.4.0/crtbegin.o -
L/usr/lib/gcc/i486-slackware-linux/3.4.0 -L/usr/lib/gcc/i486-slackware-
linux/3.4.0 -L/usr/lib/gcc/i486-slackware-linux/3.4.0/../../../../i486-
slackware-linux/lib -L/usr/lib/gcc/i486-slackware-linux/3.4.0/../../.. test.o -
lgcc -lgcc_eh -lc -lgcc -lgcc_eh /usr/lib/gcc/i486-slackware-
linux/3.4.0/crtend.o /usr/lib/gcc/i486-slackware-linux/3.4.0/../../../crtn.o
Also tested and found under gcc-3.3.4
--
Summary: -msse2 also enabling -mfpmath=sse option causing illegal
instruction errors
Product: gcc
Version: 3.4.0
Status: UNCONFIRMED
Severity: critical
Priority: P2
Component: c
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: aron-gcc at sightspeed dot com
CC: gcc-bugs at gcc dot gnu dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=16584
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug c/16584] -msse2 also enabling -mfpmath=sse option causing illegal instruction errors
2004-07-16 2:47 [Bug c/16584] New: -msse2 also enabling -mfpmath=sse option causing illegal instruction errors aron-gcc at sightspeed dot com
@ 2004-07-16 6:32 ` pinskia at gcc dot gnu dot org
2004-07-16 17:11 ` aron-gcc at sightspeed dot com
` (5 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2004-07-16 6:32 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From pinskia at gcc dot gnu dot org 2004-07-16 06:32 -------
Read the documenation: " -msse2 Support MMX, SSE and SSE2 built-in functions and code
generation", see the "and code generation" which means it can generate SSE2 instructions any time,
sorry.
--
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |RESOLVED
Resolution| |INVALID
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=16584
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug c/16584] -msse2 also enabling -mfpmath=sse option causing illegal instruction errors
2004-07-16 2:47 [Bug c/16584] New: -msse2 also enabling -mfpmath=sse option causing illegal instruction errors aron-gcc at sightspeed dot com
2004-07-16 6:32 ` [Bug c/16584] " pinskia at gcc dot gnu dot org
@ 2004-07-16 17:11 ` aron-gcc at sightspeed dot com
2004-07-16 18:25 ` [Bug target/16584] " pinskia at gcc dot gnu dot org
` (4 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: aron-gcc at sightspeed dot com @ 2004-07-16 17:11 UTC (permalink / raw)
To: gcc-bugs
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 3121 bytes --]
------- Additional Comments From aron-gcc at sightspeed dot com 2004-07-16 17:11 -------
Three responses too this:
1. Just using -msse does not trigger the same behiavor with SSE1 floating point
calls in regular code.
2. Even if (1) was performing this: The man page section under -mfpmath states
that the -mfpmath option must explicitly be passed for normal floating point
code to be repalced with SSE code. Even if you explicity pass -mfpmath=387 -
msse2, it will still generate SSE2 for non-intrinsics code.
3. If you description is correct, How are you supposed to generate binaries
that are processor safe on x86. We ship a Linux program that has sections
optimized (using Intrinsics) that are protected by runtime CPUID detection.
The man pages that I have for GCC state for -msse2
These switches enable or disable the use of built-in
functions that allow direct access to the MMX, SSE,
SSE2, SSE3 and 3Dnow extensions of the instruction
set.
------> To have SSE/SSE2 instructions generated automatically
from floating-point code, see -mfpmath=sse.
<man page section on -mfpmath >
-mfpmath=unit
Generate floating point arithmetics for selected unit
unit. The choices for unit are:
387 Use the standard 387 floating point coprocessor
present majority of chips and emulated otherwise.
Code compiled with this option will run almost
everywhere. The temporary results are computed in
80bit precision instead of precision specified by
the type resulting in slightly different results
compared to most of other chips. See -ffloat-store
for more detailed description.
This is the default choice for i386 compiler.
sse Use scalar floating point instructions present in
the SSE instruction set. This instruction set is
supported by Pentium3 and newer chips, in the AMD
line by Athlon-4, Athlon-xp and Athlon-mp chips.
The earlier version of SSE instruction set sup
ports only single precision arithmetics, thus the
double and extended precision arithmetics is still
done using 387. Later version, present only in
Pentium4 and the future AMD x86-64 chips supports
double precision arithmetics too.
For i387 you need to use -march=cpu-type, -msse or
-msse2 switches to enable SSE extensions and make
this option effective. For x86-64 compiler, these
extensions are enabled by default.
Thank You.
Aron Rosenberg
<a href="http://www.sightspeed.com">http://www.sightspeed.com</a>
--
What |Removed |Added
----------------------------------------------------------------------------
Status|RESOLVED |UNCONFIRMED
Resolution|INVALID |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=16584
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug target/16584] -msse2 also enabling -mfpmath=sse option causing illegal instruction errors
2004-07-16 2:47 [Bug c/16584] New: -msse2 also enabling -mfpmath=sse option causing illegal instruction errors aron-gcc at sightspeed dot com
2004-07-16 6:32 ` [Bug c/16584] " pinskia at gcc dot gnu dot org
2004-07-16 17:11 ` aron-gcc at sightspeed dot com
@ 2004-07-16 18:25 ` pinskia at gcc dot gnu dot org
2004-07-30 17:46 ` aron-gcc at sightspeed dot com
` (3 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2004-07-16 18:25 UTC (permalink / raw)
To: gcc-bugs
--
What |Removed |Added
----------------------------------------------------------------------------
Severity|critical |normal
Component|c |target
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=16584
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug target/16584] -msse2 also enabling -mfpmath=sse option causing illegal instruction errors
2004-07-16 2:47 [Bug c/16584] New: -msse2 also enabling -mfpmath=sse option causing illegal instruction errors aron-gcc at sightspeed dot com
` (2 preceding siblings ...)
2004-07-16 18:25 ` [Bug target/16584] " pinskia at gcc dot gnu dot org
@ 2004-07-30 17:46 ` aron-gcc at sightspeed dot com
2004-12-24 14:29 ` uros at kss-loka dot si
` (2 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: aron-gcc at sightspeed dot com @ 2004-07-30 17:46 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From aron-gcc at sightspeed dot com 2004-07-30 17:46 -------
Confirmed that it is still present in 3.4.1
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=16584
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug target/16584] -msse2 also enabling -mfpmath=sse option causing illegal instruction errors
2004-07-16 2:47 [Bug c/16584] New: -msse2 also enabling -mfpmath=sse option causing illegal instruction errors aron-gcc at sightspeed dot com
` (3 preceding siblings ...)
2004-07-30 17:46 ` aron-gcc at sightspeed dot com
@ 2004-12-24 14:29 ` uros at kss-loka dot si
2004-12-28 15:33 ` uros at kss-loka dot si
2005-01-05 10:00 ` uros at kss-loka dot si
6 siblings, 0 replies; 8+ messages in thread
From: uros at kss-loka dot si @ 2004-12-24 14:29 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From uros at kss-loka dot si 2004-12-24 14:29 -------
With current TARGET_SSE_MATH work, mainline gcc produces:
main:
pushl %ebp
movl %esp, %ebp
subl $24, %esp
andl $-16, %esp
movl $0, %eax
addl $15, %eax
addl $15, %eax
shrl $4, %eax
sall $4, %eax
subl %eax, %esp
movl $1, -8(%ebp)
movl -8(%ebp), %eax
imull -8(%ebp), %eax
pushl %eax
fildl (%esp)
leal 4(%esp), %esp
fstps -4(%ebp)
movl $0, %eax
leave
ret
However, -mfpmath just tells which instruction set is preferred. It is -msse,
-mmmx etc. that tells the compiler which instructions it can use, independently
of -mfpmath setting. For example, cvttss2si insn will be generated when -msse is
specified, no matter what -mfpmath setting you use.
-mmmx, -msse and -msse2 are treated the same way as -march=pentium3, etc. You
can not run the code, compiled with -march=pentium4 on i586.
However, this part of documentation should be fixed:
For i387 you need to use `-march=CPU-TYPE', `-msse' or
`-msse2' switches to enable SSE extensions and make this
I belive, it should read:
For i386 compiler, you need to use `-march=CPU-TYPE', `-msse' or
`-msse2' switches to enable SSE extensions and make this
Uros.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=16584
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug target/16584] -msse2 also enabling -mfpmath=sse option causing illegal instruction errors
2004-07-16 2:47 [Bug c/16584] New: -msse2 also enabling -mfpmath=sse option causing illegal instruction errors aron-gcc at sightspeed dot com
` (4 preceding siblings ...)
2004-12-24 14:29 ` uros at kss-loka dot si
@ 2004-12-28 15:33 ` uros at kss-loka dot si
2005-01-05 10:00 ` uros at kss-loka dot si
6 siblings, 0 replies; 8+ messages in thread
From: uros at kss-loka dot si @ 2004-12-28 15:33 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From uros at kss-loka dot si 2004-12-28 15:33 -------
A documentation patch is waiting for review:
http://gcc.gnu.org/ml/gcc-patches/2004-12/msg01895.html
I guess that documentation patches doesn't qualify for 'patch' keyword. However,
this bug should be marked as INVALID.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=16584
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug target/16584] -msse2 also enabling -mfpmath=sse option causing illegal instruction errors
2004-07-16 2:47 [Bug c/16584] New: -msse2 also enabling -mfpmath=sse option causing illegal instruction errors aron-gcc at sightspeed dot com
` (5 preceding siblings ...)
2004-12-28 15:33 ` uros at kss-loka dot si
@ 2005-01-05 10:00 ` uros at kss-loka dot si
6 siblings, 0 replies; 8+ messages in thread
From: uros at kss-loka dot si @ 2005-01-05 10:00 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From uros at kss-loka dot si 2005-01-05 09:59 -------
CVSROOT: /cvs/gcc
Module name: gcc
Changes by: uros@gcc.gnu.org 2005-01-05 09:55:57
Modified files:
gcc : ChangeLog
gcc/doc : invoke.texi
Log message:
* doc/invoke.texi (Intel 386 and AMD x86-64 Options):
Replace i387 with 'i386 compiler' in -mfpmath=sse option.
Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/ChangeLog.diff?cvsroot=gcc&r1=2.7028&r2=2.7029
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/doc/invoke.texi.diff?cvsroot=gcc&r1=1.563&r2=1.564
--
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |RESOLVED
Resolution| |INVALID
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=16584
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2005-01-05 10:00 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-07-16 2:47 [Bug c/16584] New: -msse2 also enabling -mfpmath=sse option causing illegal instruction errors aron-gcc at sightspeed dot com
2004-07-16 6:32 ` [Bug c/16584] " pinskia at gcc dot gnu dot org
2004-07-16 17:11 ` aron-gcc at sightspeed dot com
2004-07-16 18:25 ` [Bug target/16584] " pinskia at gcc dot gnu dot org
2004-07-30 17:46 ` aron-gcc at sightspeed dot com
2004-12-24 14:29 ` uros at kss-loka dot si
2004-12-28 15:33 ` uros at kss-loka dot si
2005-01-05 10:00 ` uros at kss-loka dot si
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).