Mesa (master): gallivm: handle scalar floats in lp_build_floor() and lp_build_iround()
Brian Paul
brianp at kemper.freedesktop.org
Wed Mar 10 17:14:07 PST 2010
Module: Mesa
Branch: master
Commit: a599f552f2ee86004216fe062bf4885de9c9ae96
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a599f552f2ee86004216fe062bf4885de9c9ae96
Author: Brian Paul <brianp at vmware.com>
Date: Wed Mar 10 18:07:13 2010 -0700
gallivm: handle scalar floats in lp_build_floor() and lp_build_iround()
---
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 e2c6788..f55d2b6 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) {
More information about the mesa-commit
mailing list