gallivm: fix pointer type for stmxcsr/ldmxcsr

The argument is a i8 pointer not a i32 pointer (even though the value actually
stored/loaded IS i32). Older llvm versions didn't care but 3.2 and newer do
leading to crashes.

Reviewed-by: Zack Rusin <zackr@vmware.com>
This commit is contained in:
Roland Scheidegger 2013-12-13 21:20:05 +01:00
parent 7c027666da
commit 27d47bd42f
1 changed files with 7 additions and 2 deletions

View File

@ -3510,10 +3510,12 @@ lp_build_fpstate_get(struct gallivm_state *gallivm)
gallivm,
LLVMInt32TypeInContext(gallivm->context),
"mxcsr_ptr");
LLVMValueRef mxcsr_ptr8 = LLVMBuildPointerCast(builder, mxcsr_ptr,
LLVMPointerType(LLVMInt8TypeInContext(gallivm->context), 0), "");
lp_build_intrinsic(builder,
"llvm.x86.sse.stmxcsr",
LLVMVoidTypeInContext(gallivm->context),
&mxcsr_ptr, 1);
&mxcsr_ptr8, 1);
return mxcsr_ptr;
}
return 0;
@ -3554,7 +3556,10 @@ lp_build_fpstate_set(struct gallivm_state *gallivm,
LLVMValueRef mxcsr_ptr)
{
if (util_cpu_caps.has_sse) {
lp_build_intrinsic(gallivm->builder,
LLVMBuilderRef builder = gallivm->builder;
mxcsr_ptr = LLVMBuildPointerCast(builder, mxcsr_ptr,
LLVMPointerType(LLVMInt8TypeInContext(gallivm->context), 0), "");
lp_build_intrinsic(builder,
"llvm.x86.sse.ldmxcsr",
LLVMVoidTypeInContext(gallivm->context),
&mxcsr_ptr, 1);