[PATCH 0/3] Updates to the new math code

Corinna Vinschen vinschen@redhat.com
Thu Jul 5 12:07:00 GMT 2018


On Jul  5 12:21, Szabolcs Nagy wrote:
> On 05/07/18 11:01, Szabolcs Nagy wrote:
> > On 05/07/18 09:48, Corinna Vinschen wrote:
> > > 2. You're changing converttoint to return int32_t, but the #else
> > >     branch is casting to long:
> > > 
> > >      # if HAVE_FAST_LROUND
> > >        return lround (x);
> > >      # else
> > >        return (long) round (x);
> > >      # endif
> > >     This looks wrong to me independent of the return type of
> > >     converttoint.  Shouldn't that cast to an int of fixed size, i.e.,
> > >     int32_t?
> > > 
> > 
> > the (long) cast was used so it's the same operation as
> > lround (assuming -fno-math-errno semantics) since the
> > compiler has a builtin for that which targets may inline,
> > but i guess (int32_t) would work too (since out of bound
> > conversion is either undefined or unspecified).
> > 
> 
> the int32_t cast changes code generation with clang (it adds
> sign extension instructions) it seems compilers can figure out
> 
>  (uint64_t)(int32_t)(long)round() << 32;
> 
> but not
> 
>  (uint64_t)(int32_t)round() << 32;
> 
> because the former lowers into a double->int64 conversion
> on 64bit systems the latter lowers into double->int32
> conversion and then the int32 requires a sign extend.
> 
> so i'll keep the code as is for now.
> 
> > > 3. Along the same lines, in newlib/libm/common/sf_exp.c there's the
> > >     following expression:
> > > 
> > >      #if TOINT_INTRINSICS
> > >        kd = roundtoint (z);
> > >        ki = converttoint (z);
> > >      #elif TOINT_RINT
> > >        kd = rint (z);
> > >        ki = (long) kd;
> > >        ^^^^^^^^^^^^^^^
> > > 
> > >     Shouldn't this cast to int32_t as well?
> > > 
> > 
> > likewise.
> > 
> > i'll experiment and if int32_t works i'll change it.
> 
> i think i should remove this part and only use TOINT_INTRINSICS
> vs !TOINT_INTRINSICS instead of various TOINT_* macros that
> nobody uses.

Sounds good.


Thanks,
Corinna

-- 
Corinna Vinschen
Cygwin Maintainer
Red Hat
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://sourceware.org/pipermail/newlib/attachments/20180705/e375606a/attachment.sig>


More information about the Newlib mailing list