http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53228
Bug #: 53228
Summary: [4.6/4.7/4.8 Regression] target attributes in
libcpp/lex.c cause illegal instructions to be used
elsewhere
Classification: Unclassified
Product: gcc
Version: 4.7.1
Status: UNCONFIRMED
Keywords: wrong-code
Severity: major
Priority: P3
Component: target
AssignedTo: [email protected]
ReportedBy: [email protected]
When building libcpp/lex.c for -march=i586 and -mtune=generic on i586-linux-gnu
generic code contains cmov* instructions which will SIGILL on
finger@mtech:~> cat /proc/cpuinfo
processor : 0
vendor_id : AuthenticAMD
cpu family : 5
model : 8
model name : AMD-K6(tm) 3D processor
stepping : 12
microcode : 0x8b
cpu MHz : 428.811
cache size : 64 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 1
wp : yes
flags : fpu vme de pse tsc msr cx8 pge mmx syscall 3dnow k6_mtrr up
bogomips : 857.62
clflush size : 32
cache_alignment : 32
address sizes : 32 bits physical, 32 bits virtual
power management:
CPUs which are perfectly fine matching -march=i586.
When you remove all target attribute annotated code from lex.c these
instructions disappear.
Thus, a compiler built for i586 does not work.
The bug persists with GCC 4.6, 4.7 and 4.8.