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 <sroland@vmware.com> Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
This commit is contained in:
parent
29ba79b2c9
commit
86902b5134
|
@ -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
|
static LLVMValueRef
|
||||||
lp_build_const_pack_shuffle(struct gallivm_state *gallivm, unsigned n)
|
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);
|
assert(n <= LP_MAX_VECTOR_LENGTH);
|
||||||
|
|
||||||
for(i = 0; i < n; ++i)
|
for(i = 0; i < n; ++i)
|
||||||
|
#ifdef PIPE_ARCH_LITTLE_ENDIAN
|
||||||
elems[i] = lp_build_const_int32(gallivm, 2*i);
|
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);
|
return LLVMConstVector(elems, n);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue