Mesa (master): gallivm: Fix lp_build_print_value of smaller integer types.

Jose Fonseca jrfonseca at kemper.freedesktop.org
Thu Dec 6 15:59:18 UTC 2012


Module: Mesa
Branch: master
Commit: 33ffca713a5e593beda34d6bcbee8fb1af472cf7
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=33ffca713a5e593beda34d6bcbee8fb1af472cf7

Author: José Fonseca <jfonseca at vmware.com>
Date:   Thu Dec  6 08:50:46 2012 +0000

gallivm: Fix lp_build_print_value of smaller integer types.

They need to be converted to the native integer type to prevent garbage
in higher order bits from being printed.

Reviewed-by: Brian Paul <brianp at vmware.com>

---

 src/gallium/auxiliary/gallivm/lp_bld_printf.c |   13 ++++++++++++-
 1 files changed, 12 insertions(+), 1 deletions(-)

diff --git a/src/gallium/auxiliary/gallivm/lp_bld_printf.c b/src/gallium/auxiliary/gallivm/lp_bld_printf.c
index 0de6a08..7a6bbd9 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_printf.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_printf.c
@@ -125,8 +125,19 @@ lp_build_print_value(struct gallivm_state *gallivm,
       params[2] = value;
    } else {
       for (i = 0; i < length; ++i) {
+         LLVMValueRef param;
          util_strncat(format, type_fmt, sizeof(format) - strlen(format) - 1);
-         params[2 + i] = LLVMBuildExtractElement(builder, value, lp_build_const_int32(gallivm, i), "");
+         param = LLVMBuildExtractElement(builder, value, lp_build_const_int32(gallivm, i), "");
+         if (type_kind == LLVMIntegerTypeKind &&
+             LLVMGetIntTypeWidth(type_ref) < sizeof(int) * 8) {
+            LLVMTypeRef int_type = LLVMIntTypeInContext(gallivm->context, sizeof(int) * 8);
+            if (LLVMGetIntTypeWidth(type_ref) == 8) {
+               param = LLVMBuildZExt(builder, param, int_type, "");
+            } else {
+               param = LLVMBuildSExt(builder, param, int_type, "");
+            }
+         }
+         params[2 + i] = param;
       }
    }
 




More information about the mesa-commit mailing list