Commit a337e8ddaa for ffmpeg
commit a337e8ddaa095a3cf82564272ec518cced09641e
Author: Ramiro Polla <ramiro.polla@gmail.com>
Date: Tue Nov 10 16:41:25 2026 +0100
avcodec/x86/cabac: share the get_cabac refill between x86-64 and x86-32
Both versions of get_cabac now use the same tzcnt refill, so define it
only once. Its norm_off and tables parameters are no longer used, so
remove them.
The generated code is unchanged.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Ramiro Polla <ramiro.polla@gmail.com>
diff --git a/libavcodec/x86/cabac.h b/libavcodec/x86/cabac.h
index 810a1b0525..0282e76397 100644
--- a/libavcodec/x86/cabac.h
+++ b/libavcodec/x86/cabac.h
@@ -37,6 +37,21 @@
#if HAVE_INLINE_ASM
+/*
+ * refill shift = tzcnt(low) - 16
+ * low is never 0 here, so this also works on CPUs without BMI1, which
+ * execute tzcnt as bsf.
+ */
+#define BRANCHLESS_GET_CABAC_REFILL(low, tmp) \
+ "movzwl (%%"FF_REG_c") , "tmp" \n\t"\
+ "tzcnt "low" , %%ecx \n\t"\
+ "bswap "tmp" \n\t"\
+ "shr $15 , "tmp" \n\t"\
+ "sub $16 , %%ecx \n\t"\
+ "sub $0xFFFF , "tmp" \n\t"\
+ "shl %%cl , "tmp" \n\t"\
+ "add "tmp" , "low" \n\t"
+
#ifndef UNCHECKED_BITSTREAM_READER
#define UNCHECKED_BITSTREAM_READER !CONFIG_SAFE_BITSTREAM_READER
#endif
@@ -54,21 +69,6 @@
#define CABAC_TMP_DECL int cabac_t1, cabac_t2;
#define CABAC_TMP_OPERANDS , [cabac_t1]"=&r"(cabac_t1), [cabac_t2]"=&r"(cabac_t2)
-/*
- * refill shift = tzcnt(low) - 16
- * low is never 0 here, so this also works on CPUs without BMI1, which
- * execute tzcnt as bsf.
- */
-#define BRANCHLESS_GET_CABAC_REFILL(low, tmp, norm_off, tables) \
- "movzwl (%%"FF_REG_c") , "tmp" \n\t"\
- "tzcnt "low" , %%ecx \n\t"\
- "bswap "tmp" \n\t"\
- "shr $15 , "tmp" \n\t"\
- "sub $16 , %%ecx \n\t"\
- "sub $0xFFFF , "tmp" \n\t"\
- "shl %%cl , "tmp" \n\t"\
- "add "tmp" , "low" \n\t"
-
#define BRANCHLESS_GET_CABAC(ret, retq, statep, low, lowword, range, rangeq, tmp, tmpbyte, t1, t1q, t2, byte, end, norm_off, lps_off, mlps_off, tables) \
"movzbl "statep" , "ret" \n\t"\
"mov "low" , "t1" \n\t"\
@@ -101,7 +101,7 @@
END_CHECK(end)\
"add"FF_OPSIZE" $2 , "byte" \n\t"\
"1: \n\t"\
- BRANCHLESS_GET_CABAC_REFILL(low, tmp, norm_off, tables) \
+ BRANCHLESS_GET_CABAC_REFILL(low, tmp) \
"2: \n\t"
#else /* ARCH_X86_64 */
@@ -142,15 +142,6 @@
#define BRANCHLESS_GET_CABAC_RENORM(range, rangeq, norm_off, tables) \
"movzbl "MANGLE(ff_h264_cabac_tables)"+"norm_off"("range"), %%ecx \n\t"
#endif /* __LZCNT__ */
-#define BRANCHLESS_GET_CABAC_REFILL(low, tmp, norm_off, tables) \
- "movzwl (%%"FF_REG_c") , "tmp" \n\t"\
- "tzcnt "low" , %%ecx \n\t"\
- "bswap "tmp" \n\t"\
- "shr $15 , "tmp" \n\t"\
- "sub $16 , %%ecx \n\t"\
- "sub $0xFFFF , "tmp" \n\t"\
- "shl %%cl , "tmp" \n\t"\
- "add "tmp" , "low" \n\t"
#define BRANCHLESS_GET_CABAC(ret, retq, statep, low, lowword, range, rangeq, tmp, tmpbyte, t1, t1q, t2, byte, end, norm_off, lps_off, mlps_off, tables) \
"movzbl "statep" , "ret" \n\t"\
@@ -170,7 +161,7 @@
END_CHECK(end)\
"add"FF_OPSIZE" $2 , "byte" \n\t"\
"1: \n\t"\
- BRANCHLESS_GET_CABAC_REFILL(low, tmp, norm_off, tables) \
+ BRANCHLESS_GET_CABAC_REFILL(low, tmp) \
"2: \n\t"
#endif /* ARCH_X86_64 */