On 05/16/2011 02:44 PM, Diego Biurrun wrote:
Older nasm versions have trouble assembling some of our AVX code. Protect
these sections by preprocessor macros to allow compilation to pass.
---
  libavcodec/x86/fft_mmx.asm            |    8 ++++++++
  libavcodec/x86/fft_sse.c              |    2 ++
  libavcodec/x86/h264_deblock_10bit.asm |    4 ++++
  libavcodec/x86/h264dsp_mmx.c          |    2 ++
  4 files changed, 16 insertions(+), 0 deletions(-)

diff --git a/libavcodec/x86/fft_mmx.asm b/libavcodec/x86/fft_mmx.asm
index fc5cb98..f67f2f0 100644
--- a/libavcodec/x86/fft_mmx.asm
+++ b/libavcodec/x86/fft_mmx.asm
@@ -299,6 +299,7 @@ IF%1 mova  Z(1), m5

  INIT_YMM

+%ifdef HAVE_AVX
  align 16
  fft8_avx:
      mova      m0, Z(0)
@@ -387,6 +388,7 @@ fft32_interleave_avx:
      sub r2d, mmsize/4
      jg .deint_loop
      ret
+%endif

  INIT_XMM
  %define movdqa  movaps
@@ -532,6 +534,7 @@ DEFINE_ARGS z, w, n, o1, o3

  INIT_YMM

+%ifdef HAVE_AVX
  %macro INTERL_AVX 5
      vunpckhps      %3, %2, %1
      vunpcklps      %2, %2, %1
@@ -545,6 +548,7 @@ INIT_YMM

  DECL_PASS pass_avx, PASS_BIG 1
  DECL_PASS pass_interleave_avx, PASS_BIG 0
+%endif

  INIT_XMM

@@ -634,8 +638,10 @@ cglobal fft_dispatch%3%2, 2,5,8, z, nbits
      RET
  %endmacro ; DECL_FFT

+%ifdef HAVE_AVX
  DECL_FFT 6, _avx
  DECL_FFT 6, _avx, _interleave
+%endif
  DECL_FFT 5, _sse
  DECL_FFT 5, _sse, _interleave
  DECL_FFT 4, _3dn
@@ -847,4 +853,6 @@ DECL_IMDCT _sse, POSROTATESHUF

  INIT_YMM

+%ifdef HAVE_AVX
  DECL_IMDCT _avx, POSROTATESHUF_AVX
+%endif
diff --git a/libavcodec/x86/fft_sse.c b/libavcodec/x86/fft_sse.c
index 5b52988..a83c140 100644
--- a/libavcodec/x86/fft_sse.c
+++ b/libavcodec/x86/fft_sse.c
@@ -30,10 +30,12 @@ void ff_fft_dispatch_sse(FFTComplex *z, int nbits);
  void ff_fft_dispatch_interleave_sse(FFTComplex *z, int nbits);
  void ff_fft_dispatch_interleave_avx(FFTComplex *z, int nbits);

+#if HAVE_AVX
  void ff_fft_calc_avx(FFTContext *s, FFTComplex *z)
  {
      ff_fft_dispatch_interleave_avx(z, s->nbits);
  }
+#endif

  void ff_fft_calc_sse(FFTContext *s, FFTComplex *z)
  {

Those are ok.

diff --git a/libavcodec/x86/h264_deblock_10bit.asm 
b/libavcodec/x86/h264_deblock_10bit.asm
index f5a13f1..c373f65 100644
--- a/libavcodec/x86/h264_deblock_10bit.asm
+++ b/libavcodec/x86/h264_deblock_10bit.asm
@@ -418,10 +418,12 @@ cglobal deblock_h_luma_10_%1, 5,7,15
  %endmacro

  INIT_XMM
+%ifdef HAVE_AVX
  DEBLOCK_LUMA_64 sse2
  INIT_AVX
  DEBLOCK_LUMA_64 avx
  %endif
+%endif

  %macro SWAPMOVA 2
  %ifid %1
@@ -904,7 +906,9 @@ cglobal deblock_v_chroma_intra_10_%1, 
4,6-(mmsize/16),8*(mmsize/16)
  INIT_MMX
  DEBLOCK_CHROMA mmxext
  %endif
+%ifdef HAVE_AVX
  INIT_XMM
  DEBLOCK_CHROMA sse2
  INIT_AVX
  DEBLOCK_CHROMA avx
+%endif
diff --git a/libavcodec/x86/h264dsp_mmx.c b/libavcodec/x86/h264dsp_mmx.c
index 01b1116..aa30322 100644
--- a/libavcodec/x86/h264dsp_mmx.c
+++ b/libavcodec/x86/h264dsp_mmx.c
@@ -416,6 +416,7 @@ void ff_h264dsp_init_x86(H264DSPContext *c, const int 
bit_depth)
              c->h264_v_loop_filter_luma_intra = 
ff_deblock_v_luma_intra_10_mmxext;
              c->h264_h_loop_filter_luma_intra = 
ff_deblock_h_luma_intra_10_mmxext;
  #endif
+#if HAVE_AVX
              if (mm_flags&AV_CPU_FLAG_SSE2) {
                  c->h264_v_loop_filter_chroma= ff_deblock_v_chroma_10_sse2;
                  c->h264_v_loop_filter_chroma_intra= 
ff_deblock_v_chroma_intra_10_sse2;
@@ -436,6 +437,7 @@ void ff_h264dsp_init_x86(H264DSPContext *c, const int 
bit_depth)
                  c->h264_h_loop_filter_luma_intra = 
ff_deblock_h_luma_intra_10_avx;
  #endif
              }
+#endif /* HAVE_AVX */

Why put SSE2 code under HAVE_AVX? Also, isn't

if (HAVE_AVX && mm_flags&AV_CPU_FLAG_AVX) {

cleaner than ifdefs?

-Vitor
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to