[Libclc-dev] [PATCH 1/2] frexp: Reuse types provided by gentype.inc

Jan Vesely via Libclc-dev libclc-dev at lists.llvm.org
Sat Sep 30 00:35:17 PDT 2017


On Thu, 2017-09-28 at 21:37 -0500, Aaron Watry wrote:
> On Thu, Sep 28, 2017 at 9:18 PM, Aaron Watry <awatry at gmail.com> wrote:
> > On Fri, Sep 22, 2017 at 8:25 PM, Jan Vesely via Libclc-dev
> > <libclc-dev at lists.llvm.org> wrote:
> > > Signed-off-by: Jan Vesely <jan.vesely at rutgers.edu>
> > > ---
> > >  generic/lib/math/frexp.cl  | 14 ++++++---
> > >  generic/lib/math/frexp.inc | 75 +++++++++++++++++++---------------------------
> > >  2 files changed, 40 insertions(+), 49 deletions(-)
> > > 
> > > diff --git a/generic/lib/math/frexp.cl b/generic/lib/math/frexp.cl
> > > index acd5d93..b331ff8 100644
> > > --- a/generic/lib/math/frexp.cl
> > > +++ b/generic/lib/math/frexp.cl
> > > @@ -1,10 +1,16 @@
> > >  #include <clc/clc.h>
> > > 
> > > -#include "math.h"
> > > +#define __CLC_BODY <frexp.inc>
> > > +#define __CLC_ADDRESS_SPACE private
> > > +#include <clc/math/gentype.inc>
> > > +#undef __CLC_ADDRESS_SPACE
> > > 
> > > -#ifdef cl_khr_fp64
> > > -#pragma OPENCL EXTENSION cl_khr_fp64 : enable
> > > -#endif
> > 
> > Pretty sure we need to keep this hunk at the top of the file,
> > otherwise the double variants fail to compile for me.
> > 
> 
> Otherwise, this looks ok to me. No changes in CTS pass/fail rate.
> We've got a failure in double, but that was there before this patch
> for the same input value.

thanks. It was a part of clean series in preparation for cl_khr_fp16
builtins that, among other things, moved extension enablement to
gentype.inc files.
I'll repost both patches (this and lgamma) as part of the series.

Jan

> 
> --Aaron
> 
> > --Aaron
> > 
> > > +#define __CLC_BODY <frexp.inc>
> > > +#define __CLC_ADDRESS_SPACE global
> > > +#include <clc/math/gentype.inc>
> > > +#undef __CLC_ADDRESS_SPACE
> > > 
> > >  #define __CLC_BODY <frexp.inc>
> > > +#define __CLC_ADDRESS_SPACE local
> > >  #include <clc/math/gentype.inc>
> > > +#undef __CLC_ADDRESS_SPACE
> > > diff --git a/generic/lib/math/frexp.inc b/generic/lib/math/frexp.inc
> > > index 0f5ddea..cf3841c 100644
> > > --- a/generic/lib/math/frexp.inc
> > > +++ b/generic/lib/math/frexp.inc
> > > @@ -22,45 +22,44 @@
> > >   */
> > >  #if __CLC_FPSIZE == 32
> > >  #ifdef __CLC_SCALAR
> > > -_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE frexp(float x, private int *ep) {
> > > -    int i = as_int(x);
> > > -    int ai = i & 0x7fffffff;
> > > -    int d = ai > 0 & ai < 0x00800000;
> > > +_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE frexp(float x, __CLC_ADDRESS_SPACE __CLC_INTN *ep) {
> > > +    __CLC_INTN i = as_int(x);
> > > +    __CLC_INTN ai = i & 0x7fffffff;
> > > +    __CLC_INTN d = ai > 0 & ai < 0x00800000;
> > >      // scale subnormal by 2^26 without multiplying
> > > -    float s = as_float(ai | 0x0d800000) - 0x1.0p-100F;
> > > +    __CLC_GENTYPE s = as_float(ai | 0x0d800000) - 0x1.0p-100F;
> > >      ai = d ? as_int(s) : ai;
> > > -    int e = (ai >> 23) - 126 - (d ? 26 : 0);
> > > -    int t = ai == 0 | e == 129;
> > > +    __CLC_INTN e = (ai >> 23) - 126 - (d ? 26 : 0);
> > > +    __CLC_INTN t = ai == 0 | e == 129;
> > >      i = (i & 0x80000000) | 0x3f000000 | (ai & 0x007fffff);
> > >      *ep = t ? 0 : e;
> > >      return t ? x : as_float(i);
> > >  }
> > > +#else
> > >  #define __CLC_FREXP_VEC(width) \
> > > -_CLC_OVERLOAD _CLC_DEF float##width frexp(float##width x, private int##width *ep) { \
> > > -    int##width i = as_int##width(x); \
> > > -    int##width ai = i & 0x7fffffff; \
> > > -    int##width d = ai > 0 & ai < 0x00800000; \
> > > +_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE frexp(__CLC_GENTYPE x, __CLC_ADDRESS_SPACE __CLC_INTN *ep) { \
> > > +    __CLC_INTN i = as_int##width(x); \
> > > +    __CLC_INTN ai = i & 0x7fffffff; \
> > > +    __CLC_INTN d = ai > 0 & ai < 0x00800000; \
> > >      /* scale subnormal by 2^26 without multiplying */ \
> > > -    float##width s = as_float##width(ai | 0x0d800000) - 0x1.0p-100F; \
> > > +    __CLC_GENTYPE s = as_float##width(ai | 0x0d800000) - 0x1.0p-100F; \
> > >      ai = bitselect(ai, as_int##width(s), d); \
> > > -    int##width e = (ai >> 23) - 126 - bitselect((int##width)0, (int##width)26, d); \
> > > -    int##width t = ai == (int##width)0 | e == (int##width)129; \
> > > -    i = (i & (int##width)0x80000000) | (int##width)0x3f000000 | (ai & 0x007fffff); \
> > > -    *ep = bitselect(e, (int##width)0, t); \
> > > +    __CLC_INTN e = (ai >> 23) - 126 - bitselect((__CLC_INTN)0, (__CLC_INTN)26, d); \
> > > +    __CLC_INTN t = ai == (__CLC_INTN)0 | e == (__CLC_INTN)129; \
> > > +    i = (i & (__CLC_INTN)0x80000000) | (__CLC_INTN)0x3f000000 | (ai & 0x007fffff); \
> > > +    *ep = bitselect(e, (__CLC_INTN)0, t); \
> > >      return bitselect(as_float##width(i), x, as_float##width(t)); \
> > >  }
> > > -__CLC_FREXP_VEC(2)
> > > -__CLC_FREXP_VEC(3)
> > > -__CLC_FREXP_VEC(4)
> > > -__CLC_FREXP_VEC(8)
> > > -__CLC_FREXP_VEC(16)
> > > +#define __CLC_FREXP_VEC2(x) __CLC_FREXP_VEC(x)
> > > +__CLC_FREXP_VEC2(__CLC_VECSIZE)
> > > +#undef __CLC_FREXP_VEC2
> > >  #undef __CLC_FREXP_VEC
> > >  #endif
> > >  #endif
> > > 
> > >  #if __CLC_FPSIZE == 64
> > >  #ifdef __CLC_SCALAR
> > > -_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE frexp(__CLC_GENTYPE x, private __CLC_INTN *ep) {
> > > +_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE frexp(__CLC_GENTYPE x, __CLC_ADDRESS_SPACE __CLC_INTN *ep) {
> > >      long i = as_long(x);
> > >      long ai = i & 0x7fffffffffffffffL;
> > >      int d = ai > 0 & ai < 0x0010000000000000L;
> > > @@ -73,38 +72,24 @@ _CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE frexp(__CLC_GENTYPE x, private __CLC_INTN *
> > >      *ep = t ? 0 : e;
> > >      return t ? x : as_double(i);
> > >  }
> > > +#else
> > >  #define __CLC_FREXP_VEC(width) \
> > > -_CLC_OVERLOAD _CLC_DEF double##width frexp(double##width x, private int##width *ep) { \
> > > +_CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE frexp(__CLC_GENTYPE x, __CLC_ADDRESS_SPACE __CLC_INTN *ep) { \
> > >      long##width i = as_long##width(x); \
> > >      long##width ai = i & 0x7fffffffffffffffL; \
> > >      long##width d = ai > 0 & ai < 0x0010000000000000L; \
> > >      /* scale subnormal by 2^54 without multiplying */ \
> > > -    double##width s = as_double##width(ai | 0x0370000000000000L) - 0x1.0p-968; \
> > > +    __CLC_GENTYPE s = as_double##width(ai | 0x0370000000000000L) - 0x1.0p-968; \
> > >      ai = bitselect(ai, as_long##width(s), d); \
> > > -    int##width e = convert_int##width(ai >> 52) - 1022 - bitselect((int##width)0, (int##width)54, convert_int##width(d)); \
> > > -    int##width t = convert_int##width(ai == (long##width)0) | (e == (int##width)129); \
> > > +    __CLC_INTN e = convert_int##width(ai >> 52) - 1022 - bitselect((__CLC_INTN)0, (__CLC_INTN)54, convert_int##width(d)); \
> > > +    __CLC_INTN t = convert_int##width(ai == (long##width)0) | (e == (__CLC_INTN)129); \
> > >      i = (i & (long##width)0x8000000000000000L) | (long##width)0x3fe0000000000000L | (ai & 0x000fffffffffffffL); \
> > > -    *ep = bitselect(e, (int##width)0, t); \
> > > +    *ep = bitselect(e, (__CLC_INTN)0, t); \
> > >      return bitselect(as_double##width(i), x, as_double##width(convert_long##width(t))); \
> > >  }
> > > -__CLC_FREXP_VEC(2)
> > > -__CLC_FREXP_VEC(3)
> > > -__CLC_FREXP_VEC(4)
> > > -__CLC_FREXP_VEC(8)
> > > -__CLC_FREXP_VEC(16)
> > > +#define __CLC_FREXP_VEC2(x) __CLC_FREXP_VEC(x)
> > > +__CLC_FREXP_VEC2(__CLC_VECSIZE)
> > > +#undef __CLC_FREXP_VEC2
> > >  #undef __CLC_FREXP_VEC
> > >  #endif
> > >  #endif
> > > -
> > > -#define __CLC_FREXP_DEF(addrspace) \
> > > -  _CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE frexp(__CLC_GENTYPE x, addrspace __CLC_INTN *iptr) { \
> > > -    __CLC_INTN private_iptr; \
> > > -    __CLC_GENTYPE ret = frexp(x, &private_iptr); \
> > > -    *iptr = private_iptr; \
> > > -    return ret; \
> > > -}
> > > -
> > > -__CLC_FREXP_DEF(local);
> > > -__CLC_FREXP_DEF(global);
> > > -
> > > -#undef __CLC_FREXP_DEF
> > > --
> > > 2.13.5
> > > 
> > > _______________________________________________
> > > Libclc-dev mailing list
> > > Libclc-dev at lists.llvm.org
> > > http://lists.llvm.org/cgi-bin/mailman/listinfo/libclc-dev

-- 
Jan Vesely <jan.vesely at rutgers.edu>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: This is a digitally signed message part
URL: <http://lists.llvm.org/pipermail/libclc-dev/attachments/20170930/11fc2e86/attachment.sig>


More information about the Libclc-dev mailing list