diff options
author | Brian Paul <brianp@vmware.com> | 2010-03-10 18:07:13 -0700 |
---|---|---|
committer | Brian Paul <brianp@vmware.com> | 2010-03-10 18:09:49 -0700 |
commit | a599f552f2ee86004216fe062bf4885de9c9ae96 (patch) | |
tree | 862650746cca3e756d9f1885f8f6994e83516723 | |
parent | 22bb7ffd04ca9296bcafa929f448203880cbcb2b (diff) |
gallivm: handle scalar floats in lp_build_floor() and lp_build_iround()
-rw-r--r-- | src/gallium/auxiliary/gallivm/lp_bld_arit.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_arit.c b/src/gallium/auxiliary/gallivm/lp_bld_arit.c index e2c6788397..f55d2b6d15 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_arit.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_arit.c @@ -883,6 +883,10 @@ lp_build_floor(struct lp_build_context *bld, assert(type.floating); + if (type.length == 1) { + return LLVMBuildFPTrunc(bld->builder, a, LLVMFloatType(), ""); + } + if(util_cpu_caps.has_sse4_1) return lp_build_round_sse41(bld, a, LP_BUILD_ROUND_SSE41_FLOOR); else { @@ -953,6 +957,9 @@ lp_build_itrunc(struct lp_build_context *bld, } +/** + * Convert float[] to int[] with round(). + */ LLVMValueRef lp_build_iround(struct lp_build_context *bld, LLVMValueRef a) @@ -1013,6 +1020,14 @@ lp_build_ifloor(struct lp_build_context *bld, LLVMValueRef res; assert(type.floating); + + if (type.length == 1) { + /* scalar float to int */ + LLVMTypeRef int_type = LLVMIntType(type.width); + res = LLVMBuildFPToSI(bld->builder, a, int_type, ""); + return res; + } + assert(lp_check_value(type, a)); if(util_cpu_caps.has_sse4_1) { |