[Mesa-dev] [PATCH 3/3] gallivm: add integer and unsigned mod arit functions.

Jose Fonseca jfonseca at vmware.com
Fri Feb 17 13:46:48 PST 2012


Dave,

Ideally there should be only one lp_build_mod() which will invoke LLVMBuildSRem or LLVMBuildURem depending on the value of bld->type.sign.  The point being that this allows the same code generation logic to seemingly target any type without having to worry too much which target it is targeting.

Jose

----- Original Message -----
> From: Dave Airlie <airlied at redhat.com>
> 
> Signed-off-by: Dave Airlie <airlied at redhat.com>
> ---
>  src/gallium/auxiliary/gallivm/lp_bld_arit.c |   28
>  +++++++++++++++++++++++++++
>  src/gallium/auxiliary/gallivm/lp_bld_arit.h |   10 +++++++++
>  2 files changed, 38 insertions(+), 0 deletions(-)
> 
> diff --git a/src/gallium/auxiliary/gallivm/lp_bld_arit.c
> b/src/gallium/auxiliary/gallivm/lp_bld_arit.c
> index 1b97722..ed4b0b3 100644
> --- a/src/gallium/auxiliary/gallivm/lp_bld_arit.c
> +++ b/src/gallium/auxiliary/gallivm/lp_bld_arit.c
> @@ -2591,3 +2591,31 @@ lp_build_ilog2(struct lp_build_context *bld,
>  
>     return ipart;
>  }
> +
> +LLVMValueRef
> +lp_build_mod(struct lp_build_context *bld,
> +             LLVMValueRef x,
> +             LLVMValueRef y)
> +{
> +   LLVMBuilderRef builder = bld->gallivm->builder;
> +   LLVMValueRef res;
> +   assert(lp_check_value(bld->type, x));
> +   assert(lp_check_value(bld->type, y));
> +
> +   res = LLVMBuildSRem(builder, x, y, "");
> +   return res;
> +}
> +
> +LLVMValueRef
> +lp_build_umod(struct lp_build_context *bld,
> +              LLVMValueRef x,
> +              LLVMValueRef y)
> +{
> +   LLVMBuilderRef builder = bld->gallivm->builder;
> +   LLVMValueRef res;
> +   assert(lp_check_value(bld->type, x));
> +   assert(lp_check_value(bld->type, y));
> +
> +   res = LLVMBuildURem(builder, x, y, "");
> +   return res;
> +}
> diff --git a/src/gallium/auxiliary/gallivm/lp_bld_arit.h
> b/src/gallium/auxiliary/gallivm/lp_bld_arit.h
> index 0c753b7..a09bd84 100644
> --- a/src/gallium/auxiliary/gallivm/lp_bld_arit.h
> +++ b/src/gallium/auxiliary/gallivm/lp_bld_arit.h
> @@ -253,4 +253,14 @@ lp_build_log2_approx(struct lp_build_context
> *bld,
>                       LLVMValueRef *p_floor_log2,
>                       LLVMValueRef *p_log2);
>  
> +LLVMValueRef
> +lp_build_mod(struct lp_build_context *bld,
> +             LLVMValueRef x,
> +             LLVMValueRef y);
> +
> +LLVMValueRef
> +lp_build_umod(struct lp_build_context *bld,
> +              LLVMValueRef x,
> +              LLVMValueRef y);
> +
>  #endif /* !LP_BLD_ARIT_H */
> --
> 1.7.7.6
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
> 


More information about the mesa-dev mailing list