This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Remove alpha specific fmax, fmin to fix sNaN handling [BZ #20947]


On 12/31/2017 08:38 AM, Aurelien Jarno wrote:
> Various fmax and fmin function implementations mishandle sNaN
> arguments:
> 
> (a) When both arguments are NaNs, the return value should be a qNaN,
> but sometimes it is an sNaN if at least one argument is an sNaN.
> 
> (b) Under TS 18661-1 semantics, if either argument is an sNaN then the
> result should be a qNaN (whereas if one argument is a qNaN and the
> other is not a NaN, the result should be the non-NaN argument).
> Various implementations treat sNaNs like qNaNs here.
> 
> One way to fix that is to detect the sNaN and add a special case. That
> said there is no FPU instruction to do that, so it requires transfering
> the FP value to an integer register and testing bits. This becomes quite
> complicated so it's probably better to just use the generic versions of
> these functions which just do that through issignaling.
> 
> Changelog:
> 	[BZ #20947]
> 	* sysdeps/alpha/fpu/s_fmax.S: Remove file.
> 	* sysdeps/alpha/fpu/s_fmaxf.S: Likewise.
> 	* sysdeps/alpha/fpu/s_fmin.S: Likewise.
> 	* sysdeps/alpha/fpu/s_fminf.S: Likewise.
> ---

LGTM.


r~


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]