util/format: fix big endian compilation by not trying to byteswap single bytes
authorLuca Barbieri <luca@luca-barbieri.com>
Thu, 1 Apr 2010 04:17:10 +0000 (06:17 +0200)
committerLuca Barbieri <luca@luca-barbieri.com>
Thu, 1 Apr 2010 04:23:30 +0000 (06:23 +0200)
Conceivably, we could also have a dummy util_bswap8, but it seems better
to not emit it in the first place.

src/gallium/auxiliary/util/u_format_pack.py

index 95c0c79be9be5ff3706db1c87205bd934c6470bf..90c1ae9e2149129755063a671d520642210347fd 100644 (file)
@@ -147,7 +147,7 @@ def generate_srgb_tables():
 def bswap_format(format):
     '''Generate a structure that describes the format.'''
 
-    if format.is_bitmask() and not format.is_array():
+    if format.is_bitmask() and not format.is_array() and format.block_size() > 8:
         print '#ifdef PIPE_ARCH_BIG_ENDIAN'
         print '   pixel.value = util_bswap%u(pixel.value);' % format.block_size()
         print '#endif'
@@ -353,9 +353,10 @@ def generate_unpack_kernel(format, dst_channel, dst_native_type):
             elif src_channel.type == SIGNED:
                 print '         int%u_t %s;' % (depth, src_channel.name)
 
-        print '#ifdef PIPE_ARCH_BIG_ENDIAN'
-        print '         value = util_bswap%u(value);' % depth
-        print '#endif'
+        if depth > 8:
+            print '#ifdef PIPE_ARCH_BIG_ENDIAN'
+            print '         value = util_bswap%u(value);' % depth
+            print '#endif'
 
         # Compute the intermediate unshifted values 
         shift = 0
@@ -476,9 +477,10 @@ def generate_pack_kernel(format, src_channel, src_native_type):
                 
             shift += dst_channel.size
 
-        print '#ifdef PIPE_ARCH_BIG_ENDIAN'
-        print '         value = util_bswap%u(value);' % depth
-        print '#endif'
+        if depth > 8:
+            print '#ifdef PIPE_ARCH_BIG_ENDIAN'
+            print '         value = util_bswap%u(value);' % depth
+            print '#endif'
         
         print '         *(uint%u_t *)dst = value;' % depth