From 33ffca713a5e593beda34d6bcbee8fb1af472cf7 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jos=C3=A9=20Fonseca?= Date: Thu, 6 Dec 2012 08:50:46 +0000 Subject: [PATCH] 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 --- src/gallium/auxiliary/gallivm/lp_bld_printf.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) 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; } } -- 2.7.4