[Mesa-dev] [PATCH 1/3] gallivm: add bitarit xor and not ops.

Brian Paul brianp at vmware.com
Fri Feb 17 11:16:27 PST 2012


On 02/17/2012 12:02 PM, Dave Airlie wrote:
> From: Dave Airlie<airlied at redhat.com>
>
> Signed-off-by: Dave Airlie<airlied at redhat.com>
> ---
>   src/gallium/auxiliary/gallivm/lp_bld_bitarit.c |   42 ++++++++++++++++++++++++
>   src/gallium/auxiliary/gallivm/lp_bld_bitarit.h |    5 +++
>   2 files changed, 47 insertions(+), 0 deletions(-)
>
> diff --git a/src/gallium/auxiliary/gallivm/lp_bld_bitarit.c b/src/gallium/auxiliary/gallivm/lp_bld_bitarit.c
> index a9c57d6..0a1ace1 100644
> --- a/src/gallium/auxiliary/gallivm/lp_bld_bitarit.c
> +++ b/src/gallium/auxiliary/gallivm/lp_bld_bitarit.c
> @@ -62,6 +62,30 @@ lp_build_or(struct lp_build_context *bld, LLVMValueRef a, LLVMValueRef b)
>      return res;
>   }
>
> +LLVMValueRef
> +lp_build_xor(struct lp_build_context *bld, LLVMValueRef a, LLVMValueRef b)
> +{
> +   LLVMBuilderRef builder = bld->gallivm->builder;
> +   const struct lp_type type = bld->type;
> +   LLVMValueRef res;
> +
> +   assert(lp_check_value(type, a));
> +   assert(lp_check_value(type, b));
> +
> +   /* can't do bitwise ops on floating-point values */
> +   if (type.floating) {
> +      a = LLVMBuildBitCast(builder, a, bld->int_vec_type, "");
> +      b = LLVMBuildBitCast(builder, b, bld->int_vec_type, "");
> +   }
> +
> +   res = LLVMBuildXor(builder, a, b, "");
> +
> +   if (type.floating) {
> +      res = LLVMBuildBitCast(builder, res, bld->vec_type, "");
> +   }
> +
> +   return res;
> +}
>
>   /**
>    * Return (a&  b)
> @@ -121,6 +145,24 @@ lp_build_andnot(struct lp_build_context *bld, LLVMValueRef a, LLVMValueRef b)
>      return res;
>   }
>
> +LLVMValueRef
> +lp_build_not(struct lp_build_context *bld, LLVMValueRef a)
> +{
> +   LLVMBuilderRef builder = bld->gallivm->builder;
> +   const struct lp_type type = bld->type;
> +   LLVMValueRef res;
> +
> +   assert(lp_check_value(type, a));
> +
> +   if (type.floating) {
> +      a = LLVMBuildBitCast(builder, a, bld->int_vec_type, "");
> +   }
> +   res = LLVMBuildNot(builder, a, "");
> +   if (type.floating) {
> +      res = LLVMBuildBitCast(builder, res, bld->vec_type, "");
> +   }
> +   return res;
> +}
>
>   /**
>    * Shift left.

Looks good, but would you mind adding comments to those function just 
be clear about whether the operations are bitwise or logical?

-Brian


More information about the mesa-dev mailing list