---
 src/gallium/auxiliary/util/u_math.h      | 22 ++++++++++++++++++++++
 src/gallium/drivers/radeonsi/si_shader.c |  8 +-------
 2 files changed, 23 insertions(+), 7 deletions(-)

diff --git a/src/gallium/auxiliary/util/u_math.h 
b/src/gallium/auxiliary/util/u_math.h
index b9ed197..cd3cf04 100644
--- a/src/gallium/auxiliary/util/u_math.h
+++ b/src/gallium/auxiliary/util/u_math.h
@@ -812,6 +812,28 @@ util_bswap16(uint16_t n)
           (n << 8);
 }
 
+static INLINE void*
+util_memcpy_cpu_to_le(void *dest, void *src, size_t n)
+{
+#ifdef PIPE_ARCH_BIG_ENDIAN
+       size_t i, e;
+       for (i = 0, e = n % 8; i < e; i++) {
+               char *d = (char*)dest;
+               char *s = (char*)src;
+               d[i] = s[e - i - 1];
+       }
+       dest += i;
+       n -= i;
+       for (i = 0, e = n / 8; i < e; i++) {
+               uint64_t *d = (uint64_t*)dest;
+               uint64_t *s = (uint64_t*)src;
+               d[i] = util_bswap64(s[e - i - 1]);
+       }
+       return dest;
+#else
+       return memcpy(dest, src, n);
+#endif
+}
 
 /**
  * Clamp X to [MIN, MAX].
diff --git a/src/gallium/drivers/radeonsi/si_shader.c 
b/src/gallium/drivers/radeonsi/si_shader.c
index f0650f4..6f0504b 100644
--- a/src/gallium/drivers/radeonsi/si_shader.c
+++ b/src/gallium/drivers/radeonsi/si_shader.c
@@ -2559,13 +2559,7 @@ int si_compile_llvm(struct si_context *sctx, struct 
si_pipe_shader *shader,
        }
 
        ptr = (uint32_t*)sctx->b.ws->buffer_map(shader->bo->cs_buf, 
sctx->b.rings.gfx.cs, PIPE_TRANSFER_WRITE);
-       if (SI_BIG_ENDIAN) {
-               for (i = 0; i < binary.code_size / 4; ++i) {
-                       ptr[i] = util_cpu_to_le32((*(uint32_t*)(binary.code + 
i*4)));
-               }
-       } else {
-               memcpy(ptr, binary.code, binary.code_size);
-       }
+       util_memcpy_cpu_to_le(ptr, binary.code, binary.code_size);
        sctx->b.ws->buffer_unmap(shader->bo->cs_buf);
 
        free(binary.code);
-- 
1.8.1.5

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to