[Mesa-dev] [PATCH] gallivm: fix pointer type for stmxcsr/ldmxcsr
Zack Rusin
zackr at vmware.com
Fri Dec 13 13:19:01 PST 2013
Looks good. Thanks Roland!
----- Original Message -----
> From: Roland Scheidegger <sroland at vmware.com>
>
> 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.
> ---
> src/gallium/auxiliary/gallivm/lp_bld_arit.c | 9 +++++++--
> 1 file changed, 7 insertions(+), 2 deletions(-)
>
> diff --git a/src/gallium/auxiliary/gallivm/lp_bld_arit.c
> b/src/gallium/auxiliary/gallivm/lp_bld_arit.c
> index 440dd0b..e516ae8 100644
> --- a/src/gallium/auxiliary/gallivm/lp_bld_arit.c
> +++ b/src/gallium/auxiliary/gallivm/lp_bld_arit.c
> @@ -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);
> --
> 1.7.9.5
>
More information about the mesa-dev
mailing list