From 9461f2b5df2f243896748d65d375ed12e1befe04 Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Wed, 20 Nov 2019 11:44:22 +1000 Subject: gallivm: add cttz wrapper this will be used to write find_lsb support Reviewed-by: Roland Scheidegger --- src/gallium/auxiliary/gallivm/lp_bld_bitarit.c | 14 ++++++++++++++ src/gallium/auxiliary/gallivm/lp_bld_bitarit.h | 3 +++ 2 files changed, 17 insertions(+) diff --git a/src/gallium/auxiliary/gallivm/lp_bld_bitarit.c b/src/gallium/auxiliary/gallivm/lp_bld_bitarit.c index 998d3592199..c717b988f27 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_bitarit.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_bitarit.c @@ -252,3 +252,17 @@ lp_build_popcount(struct lp_build_context *bld, LLVMValueRef a) result = lp_build_intrinsic_unary(builder, intr_str, bld->vec_type, a); return result; } + +LLVMValueRef +lp_build_cttz(struct lp_build_context *bld, LLVMValueRef a) +{ + LLVMBuilderRef builder = bld->gallivm->builder; + LLVMValueRef result; + char intr_str[256]; + + lp_format_intrinsic(intr_str, sizeof(intr_str), "llvm.cttz", bld->vec_type); + + LLVMValueRef undef_val = LLVMConstNull(LLVMInt1TypeInContext(bld->gallivm->context)); + result = lp_build_intrinsic_binary(builder, intr_str, bld->vec_type, a, undef_val); + return result; +} diff --git a/src/gallium/auxiliary/gallivm/lp_bld_bitarit.h b/src/gallium/auxiliary/gallivm/lp_bld_bitarit.h index e0f4f4aa3bc..989ce5ca568 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_bitarit.h +++ b/src/gallium/auxiliary/gallivm/lp_bld_bitarit.h @@ -73,4 +73,7 @@ lp_build_not(struct lp_build_context *bld, LLVMValueRef a); LLVMValueRef lp_build_popcount(struct lp_build_context *bld, LLVMValueRef a); + +LLVMValueRef +lp_build_cttz(struct lp_build_context *bld, LLVMValueRef a); #endif /* !LP_BLD_ARIT_H */ -- cgit v1.2.3