Martin Storsjö <[email protected]> writes: > Originally, prior to 8742a4ff8, the caller code was compiled > within this condition: > > ARCH_X86 && HAVE_7REGS && HAVE_EBX_AVAILABLE && !defined(BROKEN_RELOCATIONS) > > Since HAVE_7REGS is defined as > (ARCH_X86_64 || (HAVE_EBX_AVAILABLE && HAVE_EBP_AVAILABLE)) > the subcondition HAVE_7REGS && HAVE_EBX_AVAILABLE is equal > to HAVE_7REGS (for 32 bit at least). The correct simplification > of the original condition thus is HAVE_7REGS, not > HAVE_EBX_AVAILABLE. > > This fixes compilation in some cases where HAVE_EBP_AVAILABLE = 0 > and HAVE_EBX_AVAILABLE = 1. > > --- > > Reinhard, does this fix compilation in your cases? > > libavcodec/h264_cabac.c | 2 +- > libavcodec/x86/h264_i386.h | 4 ++-- > 2 files changed, 3 insertions(+), 3 deletions(-) > > diff --git a/libavcodec/h264_cabac.c b/libavcodec/h264_cabac.c > index a96f52e..feadf49 100644 > --- a/libavcodec/h264_cabac.c > +++ b/libavcodec/h264_cabac.c > @@ -1656,7 +1656,7 @@ decode_cabac_residual_internal(H264Context *h, DCTELEM > *block, > index[coeff_count++] = last;\ > } > const uint8_t *sig_off = significant_coeff_flag_offset_8x8[MB_FIELD]; > -#if ARCH_X86 && HAVE_EBX_AVAILABLE && !defined(BROKEN_RELOCATIONS) > +#if ARCH_X86 && HAVE_7REGS && !defined(BROKEN_RELOCATIONS) > coeff_count= decode_significance_8x8_x86(CC, > significant_coeff_ctx_base, index, > last_coeff_ctx_base, > sig_off);
7REGS is a bit weird here since the asm only has 6 register operands (including an ecx clobber). Presumably the memory operands need a register as well. In any case, there is no explicit mention of ebx in the asm, so that condition is wrong for sure. Patch OK if it fixes things. -- Måns Rullgård [email protected] _______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
