From 90f0ac10a74b2d43b5a65aab4be40565e359be43 Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Tue, 28 Sep 2021 23:31:35 +0000 Subject: Add fmaximum, fminimum functions C2X adds new functions for floating-point maximum and minimum, corresponding to the new operations that were added in IEEE 754-2019 because of concerns about the old operations not being associative in the presence of signaling NaNs. fmaximum and fminimum handle NaNs like most functions (any NaN argument means the result is a quiet NaN). fmaximum_num and fminimum_num handle both quiet and signaling NaNs the way fmax and fmin handle quiet NaNs (if one argument is a number and the other is a NaN, return the number), but still raise "invalid" for a signaling NaN argument, making them exceptions to the normal rule that a function with a floating-point result raising "invalid" also returns a quiet NaN. fmaximum_mag, fminimum_mag, fmaximum_mag_num and fminimum_mag_num are corresponding functions returning the argument with greatest or least absolute value. All these functions also treat +0 as greater than -0. There are also corresponding type-generic macros. Add these functions to glibc. The implementations use type-generic templates based on those for fmax, fmin, fmaxmag and fminmag, and test inputs are based on those for those functions with appropriate adjustments to the expected results. The RISC-V maintainers might wish to add optimized versions of fmaximum_num and fminimum_num (for float and double), since RISC-V (F extension version 2.2 and later) provides instructions corresponding to those functions - though it might be at least as useful to add architecture-independent built-in functions to GCC and teach the RISC-V back end to expand those functions inline, which is what you generally want for functions that can be implemented with a single instruction. Tested for x86_64 and x86, and with build-many-glibcs.py. --- sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist | 48 ++++++++++++++++++++++++ 1 file changed, 48 insertions(+) (limited to 'sysdeps/unix/sysv/linux/m68k/m680x0') diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist index 3503533664..58316c96ae 100644 --- a/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist +++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist @@ -832,5 +832,53 @@ GLIBC_2.35 f32xfmaf64 F GLIBC_2.35 f32xsqrtf64 F GLIBC_2.35 ffma F GLIBC_2.35 ffmal F +GLIBC_2.35 fmaximum F +GLIBC_2.35 fmaximum_mag F +GLIBC_2.35 fmaximum_mag_num F +GLIBC_2.35 fmaximum_mag_numf F +GLIBC_2.35 fmaximum_mag_numf32 F +GLIBC_2.35 fmaximum_mag_numf32x F +GLIBC_2.35 fmaximum_mag_numf64 F +GLIBC_2.35 fmaximum_mag_numl F +GLIBC_2.35 fmaximum_magf F +GLIBC_2.35 fmaximum_magf32 F +GLIBC_2.35 fmaximum_magf32x F +GLIBC_2.35 fmaximum_magf64 F +GLIBC_2.35 fmaximum_magl F +GLIBC_2.35 fmaximum_num F +GLIBC_2.35 fmaximum_numf F +GLIBC_2.35 fmaximum_numf32 F +GLIBC_2.35 fmaximum_numf32x F +GLIBC_2.35 fmaximum_numf64 F +GLIBC_2.35 fmaximum_numl F +GLIBC_2.35 fmaximumf F +GLIBC_2.35 fmaximumf32 F +GLIBC_2.35 fmaximumf32x F +GLIBC_2.35 fmaximumf64 F +GLIBC_2.35 fmaximuml F +GLIBC_2.35 fminimum F +GLIBC_2.35 fminimum_mag F +GLIBC_2.35 fminimum_mag_num F +GLIBC_2.35 fminimum_mag_numf F +GLIBC_2.35 fminimum_mag_numf32 F +GLIBC_2.35 fminimum_mag_numf32x F +GLIBC_2.35 fminimum_mag_numf64 F +GLIBC_2.35 fminimum_mag_numl F +GLIBC_2.35 fminimum_magf F +GLIBC_2.35 fminimum_magf32 F +GLIBC_2.35 fminimum_magf32x F +GLIBC_2.35 fminimum_magf64 F +GLIBC_2.35 fminimum_magl F +GLIBC_2.35 fminimum_num F +GLIBC_2.35 fminimum_numf F +GLIBC_2.35 fminimum_numf32 F +GLIBC_2.35 fminimum_numf32x F +GLIBC_2.35 fminimum_numf64 F +GLIBC_2.35 fminimum_numl F +GLIBC_2.35 fminimumf F +GLIBC_2.35 fminimumf32 F +GLIBC_2.35 fminimumf32x F +GLIBC_2.35 fminimumf64 F +GLIBC_2.35 fminimuml F GLIBC_2.35 fsqrt F GLIBC_2.35 fsqrtl F -- cgit 1.4.1