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