https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81800
Bug ID: 81800 Summary: [8 regression] on aarch64 ilp32 lrint should not be inlined as two instructions Product: gcc Version: 8.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: nsz at gcc dot gnu.org Target Milestone: --- recently lrint is inlined as frintx/fcvtzs on aarch64, but this is not valid on ilp32 where a non-integer double may be out-of-bound for a long and then the first instruction raises the inexact, the second one raises invalid exception and only the invalid should be raised in this case. so the inlining is only valid with -fno-trapping-math i think. gcc -O3 -mabi=ilp32 -S -fno-math-errno b.c compiles to f: frintx d0, d0 fcvtzs w0, d0 ret (the patch for the equivalent bug in glibc is https://sourceware.org/ml/libc-alpha/2017-08/msg00299.html which saves and restores the fenv around the instructions.)