The source file: double helperDoubleTan(double * a, double * b) { double tmpA, tmpB;
tmpA = *a; { double y[3] = { 0.0, 0.0, 0.0 }; double r; int lq; lq = __ieee754_rem_pio2(tmpA, y); r = y[0]; if (lq & 0x1) { __asm__ __volatile__("fptan; fdivp;fchs;": "=&t"(tmpB):"f"(r)); tmpB = __kernel_tan(y[0], y[1], 1 - ((lq & 1) << 1)); } else { tmpB = tan(r); } } *b = tmpB; return 0; } compiled with gcc -O -c testcase.c results in: testcase.c: In function helperDoubleTan: testcase.c:17: warning: incompatible implicit declaration of built-in function tan testcase.c:22: error: unrecognizable insn: (insn 36 34 96 (parallel [ (set (reg/v:DF 8 st [orig:58 tmpB.26 ] [58]) (asm_operands/v:DF ("fptan; fdivp;fchs;") ("=&t") 0 [ (reg:DF 8 st) ] [ (asm_input:DF ("f")) ] ("testcase.c") 14)) (clobber (reg:QI 19 dirflag)) (clobber (reg:QI 18 fpsr)) (clobber (reg:QI 17 flags)) ]) -1 (nil) (expr_list:REG_UNUSED (reg:QI 17 flags) (expr_list:REG_UNUSED (reg:QI 18 fpsr) (expr_list:REG_UNUSED (reg:QI 19 dirflag) (expr_list:REG_UNUSED (reg/v:DF 8 st [orig:58 tmpB.26 ] [58]) (nil)))))) Output from gcc -v: gcc -v Using built-in specs. Target: i486-linux-gnu Configured with: ../src/configure -v --enable-languages=c,c++,fortran,objc,obj-c++,treelang --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --program-suffix=-4.1 --enable-__cxa_atexit --enable-clocale=gnu --enable-libstdcxx-debug --enable-mpfr --enable-checking=release i486-linux-gnu Thread model: posix gcc version 4.1.2 (Ubuntu 4.1.2-0ubuntu4) -- Summary: inline assembler causes ICE: extract_constrain_insn_cached, at recog.c:2002 Product: gcc Version: 4.1.2 Status: UNCONFIRMED Severity: normal Priority: P3 Component: inline-asm AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: fultonm at ca dot ibm 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=31705