]> granicus.if.org Git - libx264/commitdiff
Use aliasing-avoidance macros in array_non_zero
authorFiona Glaser <fiona@x264.com>
Tue, 8 Dec 2009 02:34:05 +0000 (18:34 -0800)
committerFiona Glaser <fiona@x264.com>
Wed, 9 Dec 2009 12:47:56 +0000 (04:47 -0800)
common/macroblock.h

index 5aaf3a68ecfae1bee9e02d46fffd8fa360235872..6c01137011c24c4b1f7e069922ec7ae6a9e72b3a 100644 (file)
@@ -405,21 +405,19 @@ static ALWAYS_INLINE void x264_macroblock_cache_intra8x8_pred( x264_t *h, int x,
 }
 #define array_non_zero(a) array_non_zero_int(a, sizeof(a))
 #define array_non_zero_int array_non_zero_int
-static ALWAYS_INLINE int array_non_zero_int( void *v, int i_count )
+static ALWAYS_INLINE int array_non_zero_int( int16_t *v, int i_count )
 {
-    union {uint16_t s[4]; uint64_t l;} *x = v;
     if(i_count == 8)
-        return !!x[0].l;
+        return !!M64( &v[0] );
     else if(i_count == 16)
-        return !!(x[0].l|x[1].l);
+        return !!(M64( &v[0] ) | M64( &v[4] ));
     else if(i_count == 32)
-        return !!(x[0].l|x[1].l|x[2].l|x[3].l);
+        return !!(M64( &v[0] ) | M64( &v[4] ) | M64( &v[8] ) | M64( &v[12] ));
     else
     {
         int i;
-        i_count /= sizeof(uint64_t);
-        for( i = 0; i < i_count; i++ )
-            if( x[i].l ) return 1;
+        for( i = 0; i < i_count; i+=4 )
+            if( M64( &v[i] ) ) return 1;
         return 0;
     }
 }