Hi! On Thu, Jul 20, 2017 at 02:46:41PM +0200, Sebastian Huber wrote: > xgcc -B/build/git-build/b-gcc-git-powerpc-rtems4.12/./gcc/ -mcpu=e6500 > -m64 -O2 -fpreprocessed -S test-v0.i -o /dev/null 2>&1 > test-v0.i: In function 'f': > test-v0.i:8:1: error: unrecognizable insn: > } > ^ > (insn 12 11 13 2 (set (reg:CCFP 126) > (compare:CCFP (reg:TF 123) > (reg:TF 124))) "test-v0.i":5 -1 > (nil)) > during RTL pass: vregs > test-v0.i:8:1: internal compiler error: in extract_insn, at recog.c:2311 > 0x40a233 _fatal_insn(char const*, rtx_def const*, char const*, int, char > const*)
So, this instruction is what was expanded, but it is not a valid instruction for your configuration. > So, I looked for " __gcc_qsub" in the GCC sources. It seems this is > generated by rs6000_init_libfuncs() for some "sub_optab" stuff. It ends up in libgcc.a, from ibm-ldouble.c . > I don't know how I can figure out the corresponding GCC sources that are > involved here. In your testcase you use TFmode directly. This either is the "double-double" ("IBM128") format, or IEEE 128-bit format (another option for "long double" is to make it the same as "double"). Using a 64-bit long double has as downside that it is not bigger than double. Using double-double has as downsides that we are trying to move away from it, it has funny rounding, historically it has had quite a few bugs. IEEE 128-bit is currently only supported on systems with VSX. If you want to use it on other systems you'll have to make emulation support for it in libgcc -- which then will work on *all* systems. Maybe this is a bit much work. Segher