• Scott Turner's avatar
    Sometimes the compiler is very right! Found bug in bessel routines for float. · c1f8dd9f
    Scott Turner authored
    Original compiler error:
    
    target arm C: libm <= bionic/libm/src/e_j0f.c
    bionic/libm/src/e_j0f.c: In function 'j0f':
    bionic/libm/src/e_j0f.c:66: warning: comparison between signed and unsigned integer expressions
    bionic/libm/src/e_j0f.c: In function 'y0f':
    bionic/libm/src/e_j0f.c:140: warning: comparison between signed and unsigned integer expressions
    target arm C: libm <= bionic/libm/src/e_j1.c
    
    It's subtle but ix is masked with 0x7f000000 so it can never ever have a value
    greater than 0x80000000. So I switched to using the unmasked hx and added a
    cast as a reward to the compiler for being right.
    
    I checked the original routines that e_j0f.c was ported from (in e_j0.c) and
    the double's don't use 0x80000000 so this issue didn't exist there.
    
    Let that be a warning to those that just slap on casts to shut up the compiler,
    sometimes it's sniffed out a bug for you. :-)
    
    Similar fixes in the other functions.
    
    Change-Id: I7a776e5d4721fc3a9e3bd89179b67e9af3a2ebfa
    c1f8dd9f
e_jnf.c 4.74 KB