[PATCH 5/6] AArch64: Simplify lrint
Adhemerval Zanella Netto
adhemerval.zanella@linaro.org
Fri Feb 21 16:33:38 GMT 2025
On 20/02/25 17:07, Wilco Dijkstra wrote:
>
> Simplify lrint.
>
> OK for commit?
LGTM, thanks.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
>
> ---
>
> diff --git a/sysdeps/aarch64/fpu/s_lrint.c b/sysdeps/aarch64/fpu/s_lrint.c
> index 904c42ccd9418ff743575b1cf6ef9e83b3038770..66b3cca39952d3d4b1a3d0350620b05e96a170d2 100644
> --- a/sysdeps/aarch64/fpu/s_lrint.c
> +++ b/sysdeps/aarch64/fpu/s_lrint.c
> @@ -22,60 +22,9 @@
> #include <math-barriers.h>
> #include <libm-alias-double.h>
>
> -# define IREG_SIZE 64
> -
> -# ifdef __ILP32__
> -# define OREG_SIZE 32
> -# else
> -# define OREG_SIZE 64
> -# endif
> -
> -# define IREGS "d"
> -
> -#if OREG_SIZE == 32
> -# define OREGS "w"
> -#else
> -# define OREGS "x"
> -#endif
> -
> -
> long int
> __lrint (double x)
> {
> -
> -#if IREG_SIZE == 64 && OREG_SIZE == 32
> - long int result;
> -
> - if (__builtin_fabs (x) > INT32_MAX)
> - {
> - /* Converting large values to a 32 bit int may cause the frintx/fcvtza
> - sequence to set both FE_INVALID and FE_INEXACT. To avoid this
> - check the rounding mode and do a single instruction with the
> - appropriate rounding mode. */
> -
> - switch (get_rounding_mode ())
> - {
> - case FE_TONEAREST:
> - asm volatile ("fcvtns" "\t%" OREGS "0, %" IREGS "1"
> - : "=r" (result) : "w" (x));
> - break;
> - case FE_UPWARD:
> - asm volatile ("fcvtps" "\t%" OREGS "0, %" IREGS "1"
> - : "=r" (result) : "w" (x));
> - break;
> - case FE_DOWNWARD:
> - asm volatile ("fcvtms" "\t%" OREGS "0, %" IREGS "1"
> - : "=r" (result) : "w" (x));
> - break;
> - case FE_TOWARDZERO:
> - default:
> - asm volatile ("fcvtzs" "\t%" OREGS "0, %" IREGS "1"
> - : "=r" (result) : "w" (x));
> - }
> - return result;
> - }
> -#endif
> -
> double r = __builtin_rint (x);
>
> /* Prevent gcc from calling lrint directly when compiled with
>
More information about the Libc-alpha
mailing list