util: Add util_memcpy_cpu_to_le32() v3
authorTom Stellard <thomas.stellard@amd.com>
Fri, 18 Jul 2014 19:55:08 +0000 (15:55 -0400)
committerTom Stellard <thomas.stellard@amd.com>
Mon, 28 Jul 2014 14:10:43 +0000 (10:10 -0400)
v2:
  - Preserve word boundaries.

v3:
  - Use const and restrict.
  - Fix indentation.

Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
src/gallium/auxiliary/util/u_math.h

index b9ed197d72d0a1a3f9db781f6f8a9f3eada4aa60..f6dcb228fa5fdb66cb1eb648968a3fa189e657c9 100644 (file)
@@ -812,6 +812,23 @@ util_bswap16(uint16_t n)
           (n << 8);
 }
 
+static INLINE void*
+util_memcpy_cpu_to_le32(void * restrict dest, const void * restrict src, size_t n)
+{
+#ifdef PIPE_ARCH_BIG_ENDIAN
+   size_t i, e;
+   asset(n % 4 == 0);
+
+   for (i = 0, e = n / 4; i < e; i++) {
+      uint32_t * restrict d = (uint32_t* restrict)dest;
+      const uint32_t * restrict s = (const uint32_t* restrict)src;
+      d[i] = util_bswap32(s[i]);
+   }
+   return dest;
+#else
+   return memcpy(dest, src, n);
+#endif
+}
 
 /**
  * Clamp X to [MIN, MAX].