diff options
author | José Fonseca <[email protected]> | 2010-06-02 16:00:40 +0100 |
---|---|---|
committer | José Fonseca <[email protected]> | 2010-06-02 16:00:40 +0100 |
commit | 952d188c3c8ab90bd2919b88457c81b491fcc3c8 (patch) | |
tree | e03c987e4142090c90f5590ca039c9f203bfb284 /src/gallium | |
parent | 21a6bf8624b64520645bcbe6e63cf192647feadc (diff) |
gallivm: Add a lp_build_const_elem().
Diffstat (limited to 'src/gallium')
-rw-r--r-- | src/gallium/auxiliary/gallivm/lp_bld_const.c | 39 | ||||
-rw-r--r-- | src/gallium/auxiliary/gallivm/lp_bld_const.h | 4 |
2 files changed, 29 insertions, 14 deletions
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_const.c b/src/gallium/auxiliary/gallivm/lp_bld_const.c index 031ce9d1a37..e42ff31ac7a 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_const.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_const.c @@ -280,34 +280,45 @@ lp_build_one(struct lp_type type) /** - * Build constant-valued vector from a scalar value. + * Build constant-valued element from a scalar value. */ LLVMValueRef -lp_build_const_vec(struct lp_type type, - double val) +lp_build_const_elem(struct lp_type type, + double val) { LLVMTypeRef elem_type = lp_build_elem_type(type); - LLVMValueRef elems[LP_MAX_VECTOR_LENGTH]; - unsigned i; - - assert(type.length <= LP_MAX_VECTOR_LENGTH); + LLVMValueRef elem; if(type.floating) { - elems[0] = LLVMConstReal(elem_type, val); + elem = LLVMConstReal(elem_type, val); } else { double dscale = lp_const_scale(type); - elems[0] = LLVMConstInt(elem_type, val*dscale + 0.5, 0); + elem = LLVMConstInt(elem_type, val*dscale + 0.5, 0); } - if (type.length == 1) - return elems[0]; + return elem; +} - for(i = 1; i < type.length; ++i) - elems[i] = elems[0]; - return LLVMConstVector(elems, type.length); +/** + * Build constant-valued vector from a scalar value. + */ +LLVMValueRef +lp_build_const_vec(struct lp_type type, + double val) +{ + if (type.length == 1) { + return lp_build_const_elem(type, val); + } else { + LLVMValueRef elems[LP_MAX_VECTOR_LENGTH]; + unsigned i; + elems[0] = lp_build_const_elem(type, val); + for(i = 1; i < type.length; ++i) + elems[i] = elems[0]; + return LLVMConstVector(elems, type.length); + } } diff --git a/src/gallium/auxiliary/gallivm/lp_bld_const.h b/src/gallium/auxiliary/gallivm/lp_bld_const.h index 9ca2f0664eb..d46b9f882b0 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_const.h +++ b/src/gallium/auxiliary/gallivm/lp_bld_const.h @@ -85,6 +85,10 @@ lp_build_one(struct lp_type type); LLVMValueRef +lp_build_const_elem(struct lp_type type, + double val); + +LLVMValueRef lp_build_const_vec(struct lp_type type, double val); |