This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug inline-asm/36923] New: Crashes with FPU inline-assembly
- From: "tobias dot doerffel at gmail dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 24 Jul 2008 20:50:49 -0000
- Subject: [Bug inline-asm/36923] New: Crashes with FPU inline-assembly
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
Trying to compile the following (already pre-processed) code causes ICE:
# 1 "gcc-ice.cpp"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "gcc-ice.cpp"
static float fraction( float _x )
{
int tmp;
asm ( "fld %0\n"
"fld %%st(0)\n"
"fisttp %1\n"
"fild %1\n"
"fxch\n"
"fsub %%st(1),%%st(0)\n"
: "=&t"( _x ), "=m"( tmp )
: "f"( _x )
: );
return( _x );
}
int main( void )
{
float x = fraction( 2.34634 );
}
Command-line:
g++ -O2 gcc-ice.cpp -save-temps
Output:
Using built-in specs.
Target: i486-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.3.1-7ubuntu1'
--with-bugurl=file:///usr/share/doc/gcc-4.3/README.Bugs
--enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared
--with-system-zlib --libexecdir=/usr/lib --without-included-gettext
--enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/4.3
--program-suffix=-4.3 --enable-clocale=gnu --enable-libstdcxx-debug
--enable-objc-gc --enable-mpfr --enable-targets=all --enable-checking=release
--build=i486-linux-gnu --host=i486-linux-gnu --target=i486-linux-gnu
Thread model: posix
gcc version 4.3.1 (Ubuntu 4.3.1-7ubuntu1)
COLLECT_GCC_OPTIONS='-v' '-O2' '-save-temps' '-msse3' '-mtune=generic'
/usr/lib/gcc/i486-linux-gnu/4.3.1/cc1plus -E -quiet -v -D_GNU_SOURCE
gcc-ice.cpp -D_FORTIFY_SOURCE=2 -msse3 -mtune=generic -O2 -fpch-preprocess -o
gcc-ice.ii
ignoring nonexistent directory "/usr/local/include/i486-linux-gnu"
ignoring nonexistent directory
"/usr/lib/gcc/i486-linux-gnu/4.3.1/../../../../i486-linux-gnu/include"
ignoring nonexistent directory "/usr/include/i486-linux-gnu"
#include "..." search starts here:
#include <...> search starts here:
/usr/include/c++/4.3
/usr/include/c++/4.3/i486-linux-gnu
/usr/include/c++/4.3/backward
/usr/local/include
/usr/lib/gcc/i486-linux-gnu/4.3.1/include
/usr/lib/gcc/i486-linux-gnu/4.3.1/include-fixed
/usr/include
End of search list.
COLLECT_GCC_OPTIONS='-v' '-O2' '-save-temps' '-msse3' '-mtune=generic'
/usr/lib/gcc/i486-linux-gnu/4.3.1/cc1plus -fpreprocessed gcc-ice.ii -quiet
-dumpbase gcc-ice.cpp -msse3 -mtune=generic -auxbase gcc-ice -O2 -version
-fstack-protector -o gcc-ice.s
GNU C++ (Ubuntu 4.3.1-7ubuntu1) version 4.3.1 (i486-linux-gnu)
compiled by GNU C version 4.3.1, GMP version 4.2.2, MPFR version 2.3.1.
GGC heuristics: --param ggc-min-expand=98 --param ggc-min-heapsize=129034
Compiler executable checksum: 8789ae6462ba1c03375bc751bf9f310c
gcc-ice.cpp: In function ?int main()?:
gcc-ice.cpp:20: error: unrecognizable insn:
(insn:TI 7 6 41 gcc-ice.cpp:13 (parallel [
(set (reg:SF 8 st)
(asm_operands:SF ("fld %0
fld %%st(0)
fisttp %1
fild %1
fxch
fsub %%st(1),%%st(0)
") ("=&t") 0 [
(reg:SF 8 st)
]
[
(asm_input:SF ("f") 0)
] 2058))
(set (mem/c/i:SI (plus:SI (reg/f:SI 6 bp)
(const_int -8 [0xfffffffffffffff8])) [2 tmp+0 S4 A32])
(asm_operands:SI ("fld %0
fld %%st(0)
fisttp %1
fild %1
fxch
fsub %%st(1),%%st(0)
") ("=m") 1 [
(reg:SF 8 st)
]
[
(asm_input:SF ("f") 0)
] 2058))
(clobber (reg:QI 18 fpsr))
(clobber (reg:QI 17 flags))
]) -1 (expr_list:REG_DEAD (reg:SF 8 st)
(expr_list:REG_UNUSED (reg:QI 18 fpsr)
(expr_list:REG_UNUSED (reg:QI 17 flags)
(expr_list:REG_UNUSED (reg:SF 8 st)
(nil))))))
gcc-ice.cpp:20: internal compiler error: in extract_constrain_insn_cached, at
recog.c:1907
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-4.3/README.Bugs> for instructions.
--
Summary: Crashes with FPU inline-assembly
Product: gcc
Version: 4.3.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: inline-asm
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: tobias dot doerffel at gmail dot com
GCC build triplet: i486-linux-gnu
GCC host triplet: i486-linux-gnu
GCC target triplet: i486-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36923