From: Adhemerval Zanella Date: Thu, 22 Nov 2012 19:42:45 +0000 (-0600) Subject: gallivm: Fix vector constant for shuffle X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=86902b513469635bb0bc027db0500e2f4d6c498d;p=mesa.git gallivm: Fix vector constant for shuffle This patch fixes the vector constant generation used for vector shuffle for big-endian machines. Reviewed-by: Roland Scheidegger Reviewed-by: Jose Fonseca --- diff --git a/src/gallium/auxiliary/gallivm/lp_bld_pack.c b/src/gallium/auxiliary/gallivm/lp_bld_pack.c index f46c080f687..9eb9ab0261f 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_pack.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_pack.c @@ -129,7 +129,8 @@ lp_build_const_unpack_shuffle_half(struct gallivm_state *gallivm, } /** - * Build shuffle vectors that match PACKxx instructions. + * Build shuffle vectors that match PACKxx (SSE) instructions or + * VPERM (Altivec). */ static LLVMValueRef lp_build_const_pack_shuffle(struct gallivm_state *gallivm, unsigned n) @@ -140,7 +141,11 @@ lp_build_const_pack_shuffle(struct gallivm_state *gallivm, unsigned n) assert(n <= LP_MAX_VECTOR_LENGTH); for(i = 0; i < n; ++i) +#ifdef PIPE_ARCH_LITTLE_ENDIAN elems[i] = lp_build_const_int32(gallivm, 2*i); +#else + elems[i] = lp_build_const_int32(gallivm, 2*i+1); +#endif return LLVMConstVector(elems, n); }