diff options
author | Juergen Keil <jkeil@users.sourceforge.net> | 2003-08-19 16:38:19 +0000 |
---|---|---|
committer | Juergen Keil <jkeil@users.sourceforge.net> | 2003-08-19 16:38:19 +0000 |
commit | 6f0985e32284cbec07202f6ac91c23ff0bbe48cd (patch) | |
tree | 7b3fdfd113e2111588cd1db007269f48a31d7d79 /src | |
parent | dfcde6cb6f14757fc012936621a7eebf0e492566 (diff) | |
download | xine-lib-6f0985e32284cbec07202f6ac91c23ff0bbe48cd.tar.gz xine-lib-6f0985e32284cbec07202f6ac91c23ff0bbe48cd.tar.bz2 |
GCC 3.3 on SPARC produces illegal code for 32-bit types, shifted by 32 bits.
See gcc bug 11965 (<URL:http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11965>)
Add a workaround, so that xine-lib can be compiled with gcc-3.3 on SPARC.
CVS patchset: 5298
CVS date: 2003/08/19 16:38:19
Diffstat (limited to 'src')
-rw-r--r-- | src/libffmpeg/libavcodec/common.h | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/src/libffmpeg/libavcodec/common.h b/src/libffmpeg/libavcodec/common.h index 3c65c44d6..5cbda9126 100644 --- a/src/libffmpeg/libavcodec/common.h +++ b/src/libffmpeg/libavcodec/common.h @@ -350,14 +350,23 @@ static inline void put_bits(PutBitContext *s, int n, unsigned int value) bit_buf = s->bit_buf; bit_left = s->bit_left; + assert(bit_left >= 0 && bit_left <= 32); + // printf("n=%d value=%x cnt=%d buf=%x\n", n, value, bit_cnt, bit_buf); /* XXX: optimize */ if (n < bit_left) { - bit_buf = (bit_buf<<n) | value; + if (n == 32) + bit_buf = value; + else + bit_buf = (bit_buf<<n) | value; bit_left-=n; } else { - bit_buf<<=bit_left; - bit_buf |= value >> (n - bit_left); + if (bit_left == 32) + bit_buf=0; + else + bit_buf<<=bit_left; + if (n - bit_left < 32) + bit_buf |= value >> (n - bit_left); #ifdef UNALIGNED_STORES_ARE_BAD if (3 & (int) s->buf_ptr) { s->buf_ptr[0] = bit_buf >> 24; |