[Libclc-dev] [PATCH] math: Add ilogb ported from amd-builtins

Aaron Watry via Libclc-dev libclc-dev at lists.llvm.org
Thu Feb 11 18:00:10 PST 2016


On Thu, Feb 11, 2016 at 2:19 PM, Jan Vesely <jan.vesely at rutgers.edu> wrote:

> On Wed, 2016-02-10 at 21:08 -0600, Aaron Watry via Libclc-dev wrote:
> > The scalar float/double function bodies are a direct copy/paste
> > with usage of the CLC wrappers to vectorize them.
> >
> > Signed-off-by: Aaron Watry <awatry at gmail.com>
> > ---
> > These have been tested using the tests I just sent to the piglit
> > list.
> >
> > Those tests only handle float, and ignore the ilogb(0) and ilogb(nan)
> > cases due to
> > the fact that ilogb(0||nan) can return either MAX_INT or MIN_INT
> > depending on the
> > implementation's desires.
>
> shouldn't we add FP_ILOGB0 FP_ILOGNAN macros that go with this
> implementation?
>
>
Yeah, I guess we can do that now as well.

--Aaron


> >
> > If you want more input values tested, and have good candidates, let
> > me know. Otherwise, I
> > wouldn't turn down a run through the CTS if someone has a few minutes
> > (since I don't have access).
> >
> >  generic/include/clc/clc.h          |  1 +
> >  generic/include/clc/math/ilogb.h   |  5 ++++
> >  generic/include/clc/math/ilogb.inc |  1 +
> >  generic/lib/SOURCES                |  1 +
> >  generic/lib/math/ilogb.cl          | 57
> > ++++++++++++++++++++++++++++++++++++++
> >  5 files changed, 65 insertions(+)
> >  create mode 100644 generic/include/clc/math/ilogb.h
> >  create mode 100644 generic/include/clc/math/ilogb.inc
> >  create mode 100644 generic/lib/math/ilogb.cl
> >
> > diff --git a/generic/include/clc/clc.h b/generic/include/clc/clc.h
> > index 4060ea1..b106923 100644
> > --- a/generic/include/clc/clc.h
> > +++ b/generic/include/clc/clc.h
> > @@ -62,6 +62,7 @@
> >  #include <clc/math/half_rsqrt.h>
> >  #include <clc/math/half_sqrt.h>
> >  #include <clc/math/hypot.h>
> > +#include <clc/math/ilogb.h>
> >  #include <clc/math/ldexp.h>
> >  #include <clc/math/log.h>
> >  #include <clc/math/log10.h>
> > diff --git a/generic/include/clc/math/ilogb.h
> > b/generic/include/clc/math/ilogb.h
> > new file mode 100644
> > index 0000000..2bb9e9c
> > --- /dev/null
> > +++ b/generic/include/clc/math/ilogb.h
> > @@ -0,0 +1,5 @@
> > +#define __CLC_BODY <clc/math/ilogb.inc>
> > +
> > +#include <clc/math/gentype.inc>
> > +
> > +#undef __CLC_BODY
> > diff --git a/generic/include/clc/math/ilogb.inc
> > b/generic/include/clc/math/ilogb.inc
> > new file mode 100644
> > index 0000000..7f99fb4
> > --- /dev/null
> > +++ b/generic/include/clc/math/ilogb.inc
> > @@ -0,0 +1 @@
> > +_CLC_OVERLOAD _CLC_DECL __CLC_INTN ilogb(__CLC_GENTYPE x);
> > diff --git a/generic/lib/SOURCES b/generic/lib/SOURCES
> > index c3a5a8a..facb58b 100644
> > --- a/generic/lib/SOURCES
> > +++ b/generic/lib/SOURCES
> > @@ -90,6 +90,7 @@ math/frexp.cl
> >  math/half_rsqrt.cl
> >  math/half_sqrt.cl
> >  math/hypot.cl
> > +math/ilogb.cl
> >  math/clc_ldexp.cl
> >  math/ldexp.cl
> >  math/log.cl
> > diff --git a/generic/lib/math/ilogb.cl b/generic/lib/math/ilogb.cl
> > new file mode 100644
> > index 0000000..b783b7e
> > --- /dev/null
> > +++ b/generic/lib/math/ilogb.cl
> > @@ -0,0 +1,57 @@
> > +/*
> > + * Copyright (c) 2015 Advanced Micro Devices, Inc.
> > + * Copyright (c) 2016 Aaron Watry
> > + *
> > + * Permission is hereby granted, free of charge, to any person
> > obtaining a copy
> > + * of this software and associated documentation files (the
> > "Software"), to deal
> > + * in the Software without restriction, including without limitation
> > the rights
> > + * to use, copy, modify, merge, publish, distribute, sublicense,
> > and/or sell
> > + * copies of the Software, and to permit persons to whom the
> > Software is
> > + * furnished to do so, subject to the following conditions:
> > + *
> > + * The above copyright notice and this permission notice shall be
> > included in
> > + * all copies or substantial portions of the Software.
> > + *
> > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> > EXPRESS OR
> > + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> > MERCHANTABILITY,
> > + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
> > SHALL THE
> > + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
> > OTHER
> > + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
> > ARISING FROM,
> > + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
> > DEALINGS IN
> > + * THE SOFTWARE.
> > + */
> > +
> > +#include <clc/clc.h>
> > +#include "../clcmacro.h"
> > +#include "math.h"
> > +
> > +_CLC_OVERLOAD _CLC_DEF int ilogb(float x) {
> > +    uint ux = as_uint(x);
> > +    uint ax = ux & EXSIGNBIT_SP32;
> > +    int rs = -118 - (int) clz(ux & MANTBITS_SP32);
> > +    int r = (int) (ax >> EXPSHIFTBITS_SP32) - EXPBIAS_SP32;
> > +    r = ax < 0x00800000U ? rs : r;
> > +    r = ax > EXPBITS_SP32 | ax == 0 ? 0x80000000 : r;
> > +    r = ax == EXPBITS_SP32 ? 0x7fffffff : r;
> > +    return r;
> > +}
> > +
> > +_CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, int, ilogb, float);
> > +
> > +#ifdef cl_khr_fp64
> > +#pragma OPENCL EXTENSION cl_khr_fp64 : enable
> > +
> > +_CLC_OVERLOAD _CLC_DEF ilogb(double x) {
> > +    ulong ux = as_ulong(x);
> > +    ulong ax = ux & ~SIGNBIT_DP64;
> > +    int r = (int) (ax >> EXPSHIFTBITS_DP64) - EXPBIAS_DP64;
> > +    int rs = -1011 - (int) clz(ax & MANTBITS_DP64);
> > +    r = ax < 0x0010000000000000UL ? rs : r;
> > +    r = ax > 0x7ff0000000000000UL | ax == 0UL ? 0x80000000 : r;
> > +    r = ax == 0x7ff0000000000000UL ? 0x7fffffff : r;
> > +    return r;
> > +}
> > +
> > +_CLC_UNARY_VECTORIZE(_CLC_OVERLOAD _CLC_DEF, int, ilogb, double);
> > +
> > +#endif // cl_khr_fp64
> --
> Jan Vesely <jan.vesely at rutgers.edu>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/libclc-dev/attachments/20160211/0b7f7903/attachment.html>


More information about the Libclc-dev mailing list