[PATCH v3] Change default to -fno-math-errno

Jeff Law law@redhat.com
Mon Jun 18 16:17:00 GMT 2018

On 06/18/2018 08:01 AM, Wilco Dijkstra wrote:
> GCC currently defaults to -fmath-errno.  This generates code assuming math
> functions set errno and the application checks errno.  Few applications
> test errno and various systems and math libraries no longer set errno since it
> is optional.  GCC generates much faster code for simple math functions with
> -fno-math-errno such as sqrt and lround (avoiding a call and PLT redirection).
> Therefore it is reasonable to change the default to -fno-math-errno.  This is
> already the case for non-C languages.  Only change the default for C99 and
> later.
> long f(float x) { return lroundf(x) + 1; }
> by default:
> f:
> 	str	x30, [sp, -16]!
> 	bl	lroundf
> 	add	x0, x0, 1
> 	ldr	x30, [sp], 16
> 	ret
> With -fno-math-errno:
> f:
> 	fcvtas	x0, s0
> 	add	x0, x0, 1
> 	ret
> Passes regress on AArch64. OK for commit?
> ChangeLog:
> 2018-06-18  Wilco Dijkstra  <wdijkstr@arm.com>
> 	* common.opt (fmath-errno): Change default to 0.
> 	* opts.c (set_fast_math_flags): Force -fno-math-errno with -ffast-math.
> 	* c-family/c-opts.c (c_common_init_options_struct): Set flag_errno_math
> 	to special value.
> 	(c_common_post_options): Set flag_errno_math default based on language.
> doc/
> 	* invoke.texi (-fmath-errno) Update documentation.
> testsuite/
> 	* gcc.dg/errno-1.c: Add -fmath-errno.
> 	* gcc.dg/torture/pr68264.c: Likewise.
> 	* gcc.dg/tree-ssa/ssa-dse-15.c: Likewise.
> 	* gcc.target/aarch64/no-inline-lrint_1.c: Likewise.
So do we need to set or check math_errhandling & MATH_ERRNO at all?  Or
are those really meant for the user to test?  (which I think just
indicates we need to make sure they're set correctly).

WRT library behavior, I thought it was only complex arithmetic that had
the option of setting errno.  I thought float/double math functions had
a requirement to set errno?

While I would love to see us drop the need to ensure errno is set as it
allows us to exploit processor capabilities, I want to make sure that we
stay conformant with the relevant standards.



More information about the Gcc-patches mailing list