Browse Source

Fix a possible miscompilation of cabac with old (broken) compilers.

tags/n0.9
Carl Eugen Hoyos 14 years ago
parent
commit
324b8adca4
1 changed files with 9 additions and 3 deletions
  1. +9
    -3
      libavcodec/x86/cabac.h

+ 9
- 3
libavcodec/x86/cabac.h View File

@@ -87,13 +87,19 @@
static av_always_inline int get_cabac_inline_x86(CABACContext *c, static av_always_inline int get_cabac_inline_x86(CABACContext *c,
uint8_t *const state) uint8_t *const state)
{ {
int bit, tmp;
int bit, low, range, tmp;


__asm__ volatile( __asm__ volatile(
"movl %a6(%5), %2 \n\t"
"movl %a7(%5), %1 \n\t"
BRANCHLESS_GET_CABAC("%0", "%5", "(%4)", "%1", "%w1", "%2", 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), :"r"(state), "r"(c),
"i"(offsetof(CABACContext, range)), "i"(offsetof(CABACContext, low)),
"i"(offsetof(CABACContext, bytestream)) "i"(offsetof(CABACContext, bytestream))
: "%"REG_c, "memory" : "%"REG_c, "memory"
); );


Loading…
Cancel
Save