Mesa (master): llvmpipe: Use lp_build_ifloor_fract for exp2 calculation.
Jose Fonseca
jrfonseca at kemper.freedesktop.org
Sun Oct 16 13:19:53 UTC 2011
Module: Mesa
Branch: master
Commit: e9c1d87ce73eb3da829d5124cc5f4716d79e8973
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=e9c1d87ce73eb3da829d5124cc5f4716d79e8973
Author: José Fonseca <jose.r.fonseca at gmail.com>
Date: Sun Oct 16 01:42:57 2011 +0100
llvmpipe: Use lp_build_ifloor_fract for exp2 calculation.
Instead of separate ifloor / fract calls.
No change for SSE4.1 code, but less FP<->SI conversions on non SSE4.1
systems.
---
src/gallium/auxiliary/gallivm/lp_bld_arit.c | 6 +-----
src/gallium/drivers/llvmpipe/lp_test_arit.c | 10 ++++++++++
2 files changed, 11 insertions(+), 5 deletions(-)
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_arit.c b/src/gallium/auxiliary/gallivm/lp_bld_arit.c
index 2be8598..a15dcb0 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_arit.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_arit.c
@@ -2255,7 +2255,6 @@ lp_build_exp2_approx(struct lp_build_context *bld,
LLVMBuilderRef builder = bld->gallivm->builder;
const struct lp_type type = bld->type;
LLVMTypeRef vec_type = lp_build_vec_type(bld->gallivm, type);
- LLVMTypeRef int_vec_type = lp_build_int_vec_type(bld->gallivm, type);
LLVMValueRef ipart = NULL;
LLVMValueRef fpart = NULL;
LLVMValueRef expipart = NULL;
@@ -2278,15 +2277,12 @@ lp_build_exp2_approx(struct lp_build_context *bld,
x = lp_build_max(bld, x, lp_build_const_vec(bld->gallivm, type, -126.99999));
/* ipart = floor(x) */
- ipart = lp_build_floor(bld, x);
-
/* fpart = x - ipart */
- fpart = LLVMBuildFSub(builder, x, ipart, "");
+ lp_build_ifloor_fract(bld, x, &ipart, &fpart);
}
if(p_exp2_int_part || p_exp2) {
/* expipart = (float) (1 << ipart) */
- ipart = LLVMBuildFPToSI(builder, ipart, int_vec_type, "");
expipart = LLVMBuildAdd(builder, ipart,
lp_build_const_int_vec(bld->gallivm, type, 127), "");
expipart = LLVMBuildShl(builder, expipart,
diff --git a/src/gallium/drivers/llvmpipe/lp_test_arit.c b/src/gallium/drivers/llvmpipe/lp_test_arit.c
index ea2a659..0b74dee 100644
--- a/src/gallium/drivers/llvmpipe/lp_test_arit.c
+++ b/src/gallium/drivers/llvmpipe/lp_test_arit.c
@@ -91,6 +91,10 @@ const float exp2_values[] = {
-1e-007,
0,
1e-007,
+ 0.01,
+ 0.1,
+ 0.9,
+ 0.99,
1,
2,
4,
@@ -107,8 +111,14 @@ const float log2_values[] = {
1.4012984643248171e-45,
#endif
1e-007,
+ 0.1,
0.5,
+ 0.99,
1,
+ 1.01,
+ 1.1,
+ 1.9,
+ 1.99,
2,
4,
100000,
More information about the mesa-commit
mailing list