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: RFC: remove the "tile" architecture from glibc



On 01/02/2018 11:39, Joseph Myers wrote:
> On Thu, 1 Feb 2018, Adhemerval Zanella wrote:
> 
>> However the math tests seems to shows a lot of corner cases issues which
>> has been fixed in generic implementations. As I commented with Jason Duerstock,
>> John Paul Adrian, and James Clarke in a private thread I think easier solution
>> for 2.28 is we remove the arch-specific faulty ia64 math implementation and
>> use the generic ones. If performance is an issue we reimplement and fixed
>> them if it is the case.
> 
> (a) Note that various functions don't have a generic ldbl-96 
> implementation, because all of x86_64, i386, ia64 and m68k have 
> architecture-specific implementations.  So in those cases you can't simply 
> remove the ia64 implementation because there isn't an alternative one.

My idea is to focus first on flt-32 and dbl-64 ones to check how many
failures we can remove by using generic implementations.

> 
> (b) Where the issue is just errno setting, that code is often in C rather 
> than ia64 assembly and so the existing implementation is probably easy to 
> fix - indeed, there is a patch (from 2009) attached to bug 10163 to fix 
> some such cases (including some where .S files are involved).  I've not 
> checked whether that patch works, whether it applies to current sources, 
> whether any of the issues there are already fixed or whether it's correct, 
> but it's at least plausible for fixing some such bugs if it does indeed 
> eliminate failures for the affected functions without introducing 
> regressions.

Mostly of the issues indeed seems to be just errno related and BZ#10163 fix
should help these out. However some are issue with non-default rounding mode,
sNAN/qNAN, and exceptions handling. For test-double tests, for a quick
overview I see:

math/test-double-atan2
math/test-double-atanh
math/test-double-cos
math/test-double-erfc
math/test-double-fdim
math/test-double-fmod
math/test-double-remainder
math/test-double-sin
math/test-double-sincos
math/test-double-tan
- Wrong errno

math/test-double-ceil
math/test-double-finite-ceil
math/test-double-finite-floor
math/test-double-floor
- Setting inexact

math/test-double-cosh
math/test-double-exp
math/test-double-exp10
math/test-double-exp2
- Return INF for non default rounding values

math/test-double-fabs
- sNAN and invalid exception

math/test-double-pow
math/test-double-finite-pow

testing double (finite-math-only)
Failure: Test: pow (-0x2.00004p+0, -0x3.fep+8)
Result:
 is:          0.0000000000000000e+00   0x0.0000000000000p+0
 should be:   2.2207407279229960e-308   0x0.ff805fe2b3544p-1022
 difference:  2.2207407279229960e-308   0x0.ff805fe2b3544p-1022
 ulp       :  4494829273429316.0000
 max.ulp   :  0.0000
Failure: Test: pow (-0x2.00004p+0, -0x3.fffp+12)
Result:
 is:          0.0000000000000000e+00   0x0.0000000000000p+0
 should be:  -0.0000000000000000e+00  -0x0.0000000000000p+0
 difference:  0.0000000000000000e+00   0x0.0000000000000p+0
 ulp       :  0.0000
 max.ulp   :  0.0000
Failure: Test: pow (-0x2.00008p+0, -0x3.fep+8)
Result:
 is:          0.0000000000000000e+00   0x0.0000000000000p+0
 should be:   2.2164160439602859e-308   0x0.ff00ff758ff33p-1022
 difference:  2.2164160439602859e-308   0x0.ff00ff758ff33p-1022
 ulp       :  4486076015640371.0000
 max.ulp   :  0.0000
Failure: Test: pow (-0x2.00008p+0, -0x3.fffp+12)
Result:
 is:          0.0000000000000000e+00   0x0.0000000000000p+0
 should be:  -0.0000000000000000e+00  -0x0.0000000000000p+0
 difference:  0.0000000000000000e+00   0x0.0000000000000p+0
 ulp       :  0.0000

math/test-double-scalb
math/test-double-finite-scalb
math/test-double-lgamma
math/test-double-tgamma
- Wrong errno and some non-default rounding issues:

Result:
 is:          inf   inf
 should be:   1.7976931348623157e+308   0x1.fffffffffffffp+1023
Failure: Test: scalb_downward (1, max_value)
Result:
 is:          inf   inf
 should be:   1.7976931348623157e+308   0x1.fffffffffffffp+1023
Failure: Test: scalb_downward (min_value, max_value)

Failure: Test: lgamma_downward (0x5.d53649e2d46c8p+1012)
Result:
 is:          inf   inf
 should be:   1.7976931348623157e+308   0x1.fffffffffffffp+1023
Failure: Test: lgamma_downward (0xf.ffffffffffff8p+1020)
Result:
 is:          inf   inf
 should be:   1.7976931348623157e+308   0x1.fffffffffffffp+1023

Failure: Test: tgamma (-0x1p-1024)
Result:
 is:          inf   inf
 should be:  -inf  -inf

math/test-double-fmax
math/test-double-frexp
math/test-double-hypot
- sNaN not resulting in qNaN

math/test-double-sinh
- some non-default rounding issues:

testing double (without inline functions)
Failure: Test: sinh_downward (0x2.c5d374p+12)
Result:
 is:          inf   inf
 should be:   1.7976931348623157e+308   0x1.fffffffffffffp+1023
Failure: Test: sinh_downward (0x2.c5d37700c6bb2p+12)
Result:
 is:          inf   inf
 should be:   1.7976931348623157e+308   0x1.fffffffffffffp+1023
Failure: Test: sinh_downward (0x2.c5d37700c6bbp+12)


Based on results for some tests I still think using generic implementation
for some symbols seems a better strategy (for ceil, floor, and fabs at
least).

> 
> (c) Of course, any fix, whether by removing an ia64-specific 
> implementation or by fixing it, should have a bug filed in Bugzilla first 
> stating what the actual bug is (we already have three such bugs).

Right, I will open bug for current issues.

> 
> (d) If you remove ia64-specific implementations you need to be careful not 
> to introduce __*_finite symbols at old symbol versions (the ia64 
> implementation doesn't have such symbols - it's probably not useful to add 
> them piecemeal without having an ia64 bits/math-finite.h that would use 
> them, but if added they should of course be at a new symbol version, not 
> the version where they were originally added for other architectures).
> 


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