Commit 9e79fa38 authored by Anton Mitrofanov's avatar Anton Mitrofanov Committed by Fiona Glaser

Work around gcc/ld alignment bug on win32

Fixes problems due to misalignment of static zero arrays (win32 ld can't align .bss properly).
parent 5043c173
......@@ -368,7 +368,7 @@ case $host_cpu in
x86_64)
ARCH="X86_64"
AS="yasm"
if [ "$SYS" = MACOSX ];then
if [ "$SYS" = MACOSX ]; then
ASFLAGS="$ASFLAGS -f macho64 -m amd64 -DPIC -DPREFIX"
if cc_check '' "-arch x86_64"; then
CFLAGS="$CFLAGS -arch x86_64"
......@@ -718,6 +718,11 @@ if cc_check '' -fno-tree-vectorize ; then
CFLAGS="$CFLAGS -fno-tree-vectorize"
fi
if [ $SYS = MINGW -a $ARCH = X86 ] ; then
# workaround gcc/ld bug with alignment of static variables/arrays that are initialized to zero
cc_check '' -fno-zero-initialized-in-bss && CFLAGS="$CFLAGS -fno-zero-initialized-in-bss"
fi
if cc_check "stdio.h" "" "fseeko(stdin,0,0);" ; then
define fseek fseeko
define ftell ftello
......
......@@ -589,8 +589,6 @@ void x264_me_search_ref( x264_t *h, x264_me_t *m, int16_t (*mvc)[2], int i_mvc,
/* successive elimination by comparing DC before a full SAD,
* because sum(abs(diff)) >= abs(diff(sum)). */
uint16_t *sums_base = m->integral;
/* due to a GCC bug on some platforms (win32?), zero[] may not actually be aligned.
* this is not a problem because it is not used for any SSE instructions. */
ALIGNED_16( static pixel zero[8*FENC_STRIDE] );
ALIGNED_ARRAY_16( int, enc_dc,[4] );
int sad_size = i_pixel <= PIXEL_8x8 ? PIXEL_8x8 : PIXEL_4x4;
......
......@@ -119,7 +119,7 @@ static ALWAYS_INLINE int cached_satd( x264_t *h, int size, int x, int y )
static inline int ssd_plane( x264_t *h, int size, int p, int x, int y )
{
ALIGNED_16(static pixel zero[16]);
ALIGNED_16( static pixel zero[16] );
int satd = 0;
pixel *fdec = h->mb.pic.p_fdec[p] + x + y*FDEC_STRIDE;
pixel *fenc = h->mb.pic.p_fenc[p] + x + y*FENC_STRIDE;
......
......@@ -191,7 +191,7 @@ static NOINLINE unsigned int x264_weight_cost_chroma( x264_t *h, x264_frame_t *f
pixel *src = ref + i_offset;
ALIGNED_ARRAY_16( pixel, buf, [8*8] );
int pixoff = 0;
ALIGNED_16( static pixel flat[9] ) = {0,0,0,0,0,0,0,0,1}; //hack for win32
ALIGNED_16( static pixel flat[8] );
if( w )
{
for( int y = 0; y < i_lines; y += 8, pixoff = y*i_stride )
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment