[Beignet] [PATCH 2/2] libocl: refine implementation of abs_diff()

Zhigang Gong zhigang.gong at linux.intel.com
Wed Jan 28 20:42:17 PST 2015


LGTM, will push latter.

Thanks.

On Wed, Jan 28, 2015 at 03:07:59PM +0800, Ruiling Song wrote:
> Make it generate less instructions.
> 
> Signed-off-by: Ruiling Song <ruiling.song at intel.com>
> ---
>  backend/src/libocl/tmpl/ocl_integer.tmpl.cl |   28 +++++----------------------
>  1 file changed, 5 insertions(+), 23 deletions(-)
> 
> diff --git a/backend/src/libocl/tmpl/ocl_integer.tmpl.cl b/backend/src/libocl/tmpl/ocl_integer.tmpl.cl
> index b46cf25..7357e16 100644
> --- a/backend/src/libocl/tmpl/ocl_integer.tmpl.cl
> +++ b/backend/src/libocl/tmpl/ocl_integer.tmpl.cl
> @@ -350,35 +350,17 @@ DEC(ulong)
>  /* Char and short type abs diff */
>  /* promote char and short to int and will be no module overflow */
>  #define DEC(TYPE, UTYPE) OVERLOADABLE UTYPE abs_diff(TYPE x, TYPE y) \
> -                         { return (UTYPE) (abs((int)x - (int)y)); }
> +      { return y > x ? (y -x) : (x - y); }
>  DEC(char, uchar)
>  DEC(uchar, uchar)
>  DEC(short, ushort)
>  DEC(ushort, ushort)
> +DEC(int, uint)
> +DEC(uint, uint)
> +DEC(long, ulong)
> +DEC(ulong, ulong)
>  #undef DEC
>  
> -OVERLOADABLE uint abs_diff (uint x, uint y) {
> -    /* same signed will never overflow. */
> -    return y > x ? (y -x) : (x - y);
> -}
> -
> -OVERLOADABLE uint abs_diff (int x, int y) {
> -    /* same signed will never module overflow. */
> -    if ((x >= 0 && y >= 0) || (x <= 0 && y <= 0))
> -        return abs(x - y);
> -
> -    return (abs(x) + abs(y));
> -}
> -
> -OVERLOADABLE ulong abs_diff (long x, long y) {
> -  if ((x >= 0 && y >= 0) || (x <= 0 && y <= 0))
> -    return abs(x - y);
> -  return abs(x) + abs(y);
> -}
> -OVERLOADABLE ulong abs_diff (ulong x, ulong y) {
> -  return y > x ? (y - x) : (x - y);
> -}
> -
>  
>  #define DECL_MIN_MAX_CLAMP(TYPE) \
>  OVERLOADABLE TYPE max(TYPE a, TYPE b) { \
> -- 
> 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