46 lines
1.9 KiB
Diff
46 lines
1.9 KiB
Diff
From fcf3f45728a22250ad15db7e230545147fc28c2e Mon Sep 17 00:00:00 2001
|
|
From: Dave Airlie <airlied@redhat.com>
|
|
Date: Mon, 29 Jun 2020 14:59:20 +1000
|
|
Subject: [PATCH] gallivm/nir: fix big-endian 64-bit splitting/merging.
|
|
|
|
The shuffles need to be swapped to do this properly on big-endian
|
|
---
|
|
src/gallium/auxiliary/gallivm/lp_bld_nir.c | 10 ++++++++++
|
|
1 file changed, 10 insertions(+)
|
|
|
|
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_nir.c b/src/gallium/auxiliary/gallivm/lp_bld_nir.c
|
|
index f14475e839d..2c4135ccc05 100644
|
|
--- a/src/gallium/auxiliary/gallivm/lp_bld_nir.c
|
|
+++ b/src/gallium/auxiliary/gallivm/lp_bld_nir.c
|
|
@@ -353,8 +353,13 @@ static LLVMValueRef split_64bit(struct lp_build_nir_context *bld_base,
|
|
LLVMValueRef shuffles2[LP_MAX_VECTOR_WIDTH/32];
|
|
int len = bld_base->base.type.length * 2;
|
|
for (unsigned i = 0; i < bld_base->base.type.length; i++) {
|
|
+#if UTIL_ARCH_LITTLE_ENDIAN
|
|
shuffles[i] = lp_build_const_int32(gallivm, i * 2);
|
|
shuffles2[i] = lp_build_const_int32(gallivm, (i * 2) + 1);
|
|
+#else
|
|
+ shuffles[i] = lp_build_const_int32(gallivm, (i * 2) + 1);
|
|
+ shuffles2[i] = lp_build_const_int32(gallivm, (i * 2));
|
|
+#endif
|
|
}
|
|
|
|
src = LLVMBuildBitCast(gallivm->builder, src, LLVMVectorType(LLVMInt32TypeInContext(gallivm->context), len), "");
|
|
@@ -378,8 +383,13 @@ merge_64bit(struct lp_build_nir_context *bld_base,
|
|
assert(len <= (2 * (LP_MAX_VECTOR_WIDTH/32)));
|
|
|
|
for (i = 0; i < bld_base->base.type.length * 2; i+=2) {
|
|
+#if UTIL_ARCH_LITTLE_ENDIAN
|
|
shuffles[i] = lp_build_const_int32(gallivm, i / 2);
|
|
shuffles[i + 1] = lp_build_const_int32(gallivm, i / 2 + bld_base->base.type.length);
|
|
+#else
|
|
+ shuffles[i] = lp_build_const_int32(gallivm, i / 2 + bld_base->base.type.length);
|
|
+ shuffles[i + 1] = lp_build_const_int32(gallivm, i / 2);
|
|
+#endif
|
|
}
|
|
return LLVMBuildShuffleVector(builder, input, input2, LLVMConstVector(shuffles, len), "");
|
|
}
|
|
--
|
|
2.26.2
|
|
|