From: Fiona Glaser Date: Tue, 8 Dec 2009 02:34:05 +0000 (-0800) Subject: Use aliasing-avoidance macros in array_non_zero X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=073d32e5801899fa516da54bf06527c0ab74dd7b;p=libx264 Use aliasing-avoidance macros in array_non_zero --- diff --git a/common/macroblock.h b/common/macroblock.h index 5aaf3a68..6c011370 100644 --- a/common/macroblock.h +++ b/common/macroblock.h @@ -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; } }