diff options
author | Carl Eugen Hoyos <cehoyos@ag.or.at> | 2011-08-03 13:09:42 +0200 |
---|---|---|
committer | Carl Eugen Hoyos <cehoyos@ag.or.at> | 2011-08-03 13:09:42 +0200 |
commit | 324b8adca4455cff861b6587921ce68df6cee286 (patch) | |
tree | 34c4110ea76ca8130a002c8353d37799005742b3 /libavcodec/x86 | |
parent | 08d2cee49c323715b66df0e4ff45ec0e07aaea7b (diff) | |
download | ffmpeg-324b8adca4455cff861b6587921ce68df6cee286.tar.gz |
Fix a possible miscompilation of cabac with old (broken) compilers.
Diffstat (limited to 'libavcodec/x86')
-rw-r--r-- | libavcodec/x86/cabac.h | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/libavcodec/x86/cabac.h b/libavcodec/x86/cabac.h index 545cf7c464..5c46342808 100644 --- a/libavcodec/x86/cabac.h +++ b/libavcodec/x86/cabac.h @@ -87,13 +87,19 @@ static av_always_inline int get_cabac_inline_x86(CABACContext *c, uint8_t *const state) { - int bit, tmp; + int bit, low, range, tmp; __asm__ volatile( + "movl %a6(%5), %2 \n\t" + "movl %a7(%5), %1 \n\t" BRANCHLESS_GET_CABAC("%0", "%5", "(%4)", "%1", "%w1", "%2", - "%3", "%b3", "%a6") - :"=&r"(bit), "+&r"(c->low), "+&r"(c->range), "=&q"(tmp) + "%3", "%b3", "%a8") + "movl %2, %a6(%5) \n\t" + "movl %1, %a7(%5) \n\t" + + :"=&r"(bit), "=&r"(low), "=&r"(range), "=&q"(tmp) :"r"(state), "r"(c), + "i"(offsetof(CABACContext, range)), "i"(offsetof(CABACContext, low)), "i"(offsetof(CABACContext, bytestream)) : "%"REG_c, "memory" ); |