[Beignet] [PATCH] enable unsigned 64bit version of "abs_diff"

Zhigang Gong zhigang.gong at linux.intel.com
Mon Aug 19 00:50:07 PDT 2013


LGTM, pushed, thanks.

On Mon, Aug 19, 2013 at 10:38:00AM +0800, Homer Hsing wrote:
> tested by piglit,
> 
> piglit/framework/../bin/cl-program-tester generated_tests/cl/builtin/int/builtin-ulong-abs_diff-1.0.generated.cl
> 
> piglit test case passed.
> 
> Signed-off-by: Homer Hsing <homer.xing at intel.com>
> ---
>  backend/src/backend/gen_context.cpp | 10 ++++++++++
>  backend/src/ocl_stdlib.tmpl.h       |  2 +-
>  2 files changed, 11 insertions(+), 1 deletion(-)
> 
> diff --git a/backend/src/backend/gen_context.cpp b/backend/src/backend/gen_context.cpp
> index fcd16ec..8d4bc7a 100644
> --- a/backend/src/backend/gen_context.cpp
> +++ b/backend/src/backend/gen_context.cpp
> @@ -562,8 +562,11 @@ namespace gbe
>          loadBottomHalf(tmp1, src1);
>          p->CMP(insn.extra.function, tmp0, tmp1);
>          saveFlag(f3, 0, 1);
> +        p->push();
> +        p->curr.execWidth = 1;
>          p->AND(f2, f2, f3);
>          p->OR(f1, f1, f2);
> +        p->pop();
>          break;
>        case GEN_CONDITIONAL_EQ:
>          p->CMP(GEN_CONDITIONAL_EQ, tmp0, tmp1);
> @@ -573,7 +576,10 @@ namespace gbe
>          loadBottomHalf(tmp1, src1);
>          p->CMP(GEN_CONDITIONAL_EQ, tmp0, tmp1);
>          saveFlag(f2, 0, 1);
> +        p->push();
> +        p->curr.execWidth = 1;
>          p->AND(f1, f1, f2);
> +        p->pop();
>          break;
>        case GEN_CONDITIONAL_NEQ:
>          p->CMP(GEN_CONDITIONAL_NEQ, tmp0, tmp1);
> @@ -583,12 +589,16 @@ namespace gbe
>          loadBottomHalf(tmp1, src1);
>          p->CMP(GEN_CONDITIONAL_NEQ, tmp0, tmp1);
>          saveFlag(f2, 0, 1);
> +        p->push();
> +        p->curr.execWidth = 1;
>          p->OR(f1, f1, f2);
> +        p->pop();
>          break;
>        default:
>          NOT_IMPLEMENTED;
>      }
>      saveFlag(f2, flag, subFlag);
> +    p->curr.execWidth = 1;
>      p->AND(f1, f1, f2);
>      p->MOV(GenRegister::flag(flag, subFlag), f1);
>      p->pop();
> diff --git a/backend/src/ocl_stdlib.tmpl.h b/backend/src/ocl_stdlib.tmpl.h
> index 8d4220c..59c0f6b 100644
> --- a/backend/src/ocl_stdlib.tmpl.h
> +++ b/backend/src/ocl_stdlib.tmpl.h
> @@ -511,7 +511,7 @@ INLINE_OVERLOADABLE ulong abs_diff (long x, long y) {
>    return 0;
>  }
>  INLINE_OVERLOADABLE ulong abs_diff (ulong x, ulong y) {
> -  return 0;
> +  return y > x ? (y - x) : (x - y);
>  }
>  
>  /////////////////////////////////////////////////////////////////////////////
> -- 
> 1.8.1.2
> 
> _______________________________________________
> Beignet mailing list
> Beignet at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/beignet


More information about the Beignet mailing list