[Beignet] [PATCH] libocl: refine implementation of logb().

Zhigang Gong zhigang.gong at linux.intel.com
Thu Jan 29 18:31:48 PST 2015


LGTM, will push latter. Thanks.

On Thu, Jan 29, 2015 at 04:05:42PM +0800, Ruiling Song wrote:
> Avoid if-branching.
> 
> Signed-off-by: Ruiling Song <ruiling.song at intel.com>
> ---
>  backend/src/libocl/tmpl/ocl_math.tmpl.cl |   14 ++++++--------
>  1 file changed, 6 insertions(+), 8 deletions(-)
> 
> diff --git a/backend/src/libocl/tmpl/ocl_math.tmpl.cl b/backend/src/libocl/tmpl/ocl_math.tmpl.cl
> index 49c4efa..3483945 100644
> --- a/backend/src/libocl/tmpl/ocl_math.tmpl.cl
> +++ b/backend/src/libocl/tmpl/ocl_math.tmpl.cl
> @@ -1280,18 +1280,16 @@ OVERLOADABLE float logb(float x) {
>    if (__ocl_math_fastpath_flag)
>      return __gen_ocl_internal_fastpath_logb(x);
>  
> -union {float f; unsigned i;} u;
> +  union {float f; unsigned i;} u;
>    u.f = x;
>    int e =  ((u.i & 0x7f800000) >> 23);
> -  if(e == 0) {
> +  float r1 = e-127;
> +  float r2 = -INFINITY;
> +  float r3 = x*x;
>      /* sub normal or +/-0 */
> -    return -INFINITY;
> -  } else if(e == 0xff) {
> +  float r = e == 0 ? r2 : r1;
>      /* inf & nan */
> -    return x*x;
> -  } else {
> -    return (float)(e-127);
> -  }
> +  return e == 0xff ? r3 : r;
>  }
>  
>  OVERLOADABLE int ilogb(float x) {
> -- 
> 1.7.10.4
> 
> _______________________________________________
> Beignet mailing list
> Beignet at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/beignet


More information about the Beignet mailing list