https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100217
--- Comment #7 from Jakub Jelinek <jakub at gcc dot gnu.org> --- That said, I'm afraid I don't really understand what wrong happens with the patch I've attached. Trying something like: long double foo (void) { register long double f0 asm ("f0"); f0 = 1.0L; f0 += 127.L; f0 *= 32.L; return f0; } with -O0 -march=z14 -mlong-double-128 so that it is not all folded immediately shows in the end the computations are done in vector registers. And another thing to try is intermix that with inline asm expecting those in "+f" so that intermediate results are pushed to the floating point register pair.