https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95921
--- Comment #1 from Rich Felker <bugdal at aerifal dot cx> --- I wonder if the fact that GCC thinks the output of the insn is already double suggests other similar bugs in the m68k backend, though... If extended precision were working correctly, I'd think it would at least expect the result to have extended precision and be trying to drop the excess precision separately. But it's not; it's just returning. Here's my test case: double my_sqrt(double x) { return __builtin_sqrt(x); } with -O2 -std=c11 -fno-math-errno -fomit-frame-pointer The last 2 options are non-critical (GCC still uses the inline insn even with -fmath-errno and branches only for the exceptional case) but clean up the output so it's more clear what's going on.