On Tue, 17 Aug 2021, James Almer wrote:

On 8/17/2021 12:35 PM, Christopher Degawa wrote:
Fixes https://trac.ffmpeg.org/ticket/8903

relevant https://github.com/msys2/MINGW-packages/discussions/9258

Signed-off-by: Christopher Degawa <c...@randomderp.com>
---
  libavcodec/x86/cabac.h | 9 +++++++--
  1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/libavcodec/x86/cabac.h b/libavcodec/x86/cabac.h
index 53d74c541e..b046a56a6b 100644
--- a/libavcodec/x86/cabac.h
+++ b/libavcodec/x86/cabac.h
@@ -177,8 +177,13 @@
    #if HAVE_7REGS && !BROKEN_COMPILER
  #define get_cabac_inline get_cabac_inline_x86
-static av_always_inline int get_cabac_inline_x86(CABACContext *c,
-                                                 uint8_t *const state)
+static
+#if defined(_WIN32) && !defined(_WIN64) && defined(__clang__)

Can you do some benchmarks to see how not inlining this compares to simply disabling this code for this target? Because it sounds like you may want to add this case to the BROKEN_COMPILER macro, and not use this code at all.

I tried benchmarking it, and in short, this patch seems to be the best solution.

I tested 3 configurations; with this patch (changing av_always_inline into av_noinline), setting BROKEN_COMPILER (skipping these inline asm functions) and configuring with --cpu=i686 (which means it passes -march=i686 to the compiler, which disallows the use of inline MMX/SSE). I benchmarked singlethreaded decoding of a high bitrate H264 clip (listing the lowest measured time out of 3 runs):

av_noinline: 90.94 seconds
BROKEN_COMPILER: 98.92 seconds
-march=i686: 94.63 seconds

(The fact that building with -march=i686 is faster than using some but not all inline MMX/SSE is a bit surprising.)

I also tested the same setup on x86_64 (on a different machine, with Apple Clang), where I tested the above and compare it with the default configuration using av_always_inline):

av_always_inline: 74.65 seconds
av_noinline: 73.74 seconds
BROKEN_COMPILER: 78.10 seconds

So av_noinline actually seems to be generally favourable here (and for some reason, actually a bit faster than the always_inline case, although I'm not sure if that bit is deterministic in general or not).


// Martin

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to