Why does GCC call libc's sqrt() without using its result?
It doesn't need to call sqrt
to compute the result; it's already been calculated by the SQRTSD instruction. It calls sqrt
to generate the required behaviour according to the standard when a negative number is passed to sqrt
(for example, set errno
and/or raise a floating-point exception). The PXOR, UCOMISD, and JBE instructions test whether the argument is less than 0 and skip the call to sqrt
if this isn't true.