- util_snprintf(format, sizeof(format), "%s %%f %%f %%f %%f\n", msg);
- return lp_build_printf(gallivm, format, x, y, z, w);
+ /* Create format string and arguments */
+ assert(strlen(format) + strlen(type_fmt) * length + 2 <= sizeof format);
+
+ params[1] = lp_build_const_string(gallivm, msg);
+ if (length == 1) {
+ util_strncat(format, type_fmt, sizeof(format) - strlen(format) - 1);
+ params[2] = value;
+ } else {
+ for (i = 0; i < length; ++i) {
+ LLVMValueRef param;
+ util_strncat(format, type_fmt, sizeof(format) - strlen(format) - 1);
+ 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;
+ }
+ }
+
+ util_strncat(format, "\n", sizeof(format) - strlen(format) - 1);
+
+ params[0] = lp_build_const_string(gallivm, format);
+ return lp_build_print_args(gallivm, 2 + length, params);