Merge commit '930e26a3ea9d223e04bac4cdde13697cec770031'
authorMichael Niedermayer <michaelni@gmx.at>
Mon, 5 Nov 2012 21:36:05 +0000 (22:36 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Mon, 5 Nov 2012 21:36:05 +0000 (22:36 +0100)
* commit '930e26a3ea9d223e04bac4cdde13697cec770031':
  x86: h264qpel: Only define mmxext QPEL functions if H264QPEL is enabled
  x86: PABSW: port to cpuflags
  x86: vc1dsp: port to cpuflags
  rtmp: Use av_strlcat instead of strncat

Conflicts:
libavcodec/x86/h264_qpel.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavcodec/x86/h264_qpel.c
libavcodec/x86/vc1dsp.asm
libavutil/x86/x86util.asm

@@@ -2,20 -2,20 +2,20 @@@
   * Copyright (c) 2004-2005 Michael Niedermayer, Loren Merritt
   * Copyright (c) 2011 Daniel Kang
   *
 - * This file is part of Libav.
 + * This file is part of FFmpeg.
   *
 - * Libav is free software; you can redistribute it and/or
 + * FFmpeg is free software; you can redistribute it and/or
   * modify it under the terms of the GNU Lesser General Public
   * License as published by the Free Software Foundation; either
   * version 2.1 of the License, or (at your option) any later version.
   *
 - * Libav is distributed in the hope that it will be useful,
 + * FFmpeg is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   * Lesser General Public License for more details.
   *
   * You should have received a copy of the GNU Lesser General Public
 - * License along with Libav; if not, write to the Free Software
 + * License along with FFmpeg; if not, write to the Free Software
   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
   */
  
@@@ -1286,6 -1286,6 +1286,6 @@@ QPEL16_OP(mc31, MMX)
  QPEL16_OP(mc32, MMX)\
  QPEL16_OP(mc33, MMX)
  
- #if CONFIG_H264QPEL && ARCH_X86_32 && HAVE_YASM // ARCH_X86_64 implies sse2+
+ #if ARCH_X86_32 && HAVE_YASM && CONFIG_H264QPEL // ARCH_X86_64 implies SSE2+
  QPEL16(mmxext)
  #endif
@@@ -2,20 -2,20 +2,20 @@@
  ;* VC1 deblocking optimizations
  ;* Copyright (c) 2009 David Conrad
  ;*
 -;* This file is part of Libav.
 +;* This file is part of FFmpeg.
  ;*
 -;* Libav is free software; you can redistribute it and/or
 +;* FFmpeg is free software; you can redistribute it and/or
  ;* modify it under the terms of the GNU Lesser General Public
  ;* License as published by the Free Software Foundation; either
  ;* version 2.1 of the License, or (at your option) any later version.
  ;*
 -;* Libav is distributed in the hope that it will be useful,
 +;* FFmpeg is distributed in the hope that it will be useful,
  ;* but WITHOUT ANY WARRANTY; without even the implied warranty of
  ;* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  ;* Lesser General Public License for more details.
  ;*
  ;* You should have received a copy of the GNU Lesser General Public
 -;* License along with Libav; if not, write to the Free Software
 +;* License along with FFmpeg; if not, write to the Free Software
  ;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  ;******************************************************************************
  
@@@ -34,7 -34,13 +34,13 @@@ section .tex
      punpckl%1 m%2, m%4
  %endmacro
  
- %macro STORE_4_WORDS_MMX 6
+ %macro STORE_4_WORDS 6
+ %if cpuflag(sse4)
+     pextrw %1, %5, %6+0
+     pextrw %2, %5, %6+1
+     pextrw %3, %5, %6+2
+     pextrw %4, %5, %6+3
+ %else
      movd  %6d, %5
  %if mmsize==16
      psrldq %5, 4
      mov    %3, %6w
      shr    %6, 16
      mov    %4, %6w
- %endmacro
- %macro STORE_4_WORDS_SSE4 6
-     pextrw %1, %5, %6+0
-     pextrw %2, %5, %6+1
-     pextrw %3, %5, %6+2
-     pextrw %4, %5, %6+3
+ %endif
  %endmacro
  
  ; in:  p1 p0 q0 q1, clobbers p0
      VC1_FILTER %1
      punpcklbw m0, m1
  %if %0 > 1
-     STORE_4_WORDS_MMX [r0-1], [r0+r1-1], [r0+2*r1-1], [r0+r3-1], m0, %2
+     STORE_4_WORDS [r0-1], [r0+r1-1], [r0+2*r1-1], [r0+r3-1], m0, %2
  %if %1 > 4
      psrldq m0, 4
-     STORE_4_WORDS_MMX [r4-1], [r4+r1-1], [r4+2*r1-1], [r4+r3-1], m0, %2
+     STORE_4_WORDS [r4-1], [r4+r1-1], [r4+2*r1-1], [r4+r3-1], m0, %2
  %endif
  %else
-     STORE_4_WORDS_SSE4 [r0-1], [r0+r1-1], [r0+2*r1-1], [r0+r3-1], m0, 0
-     STORE_4_WORDS_SSE4 [r4-1], [r4+r1-1], [r4+2*r1-1], [r4+r3-1], m0, 4
+     STORE_4_WORDS [r0-1], [r0+r1-1], [r0+2*r1-1], [r0+r3-1], m0, 0
+     STORE_4_WORDS [r4-1], [r4+r1-1], [r4+2*r1-1], [r4+r3-1], m0, 4
  %endif
  %endmacro
  
      imul r2, 0x01010101
  %endmacro
  
- %macro VC1_LF_MMX 1
- INIT_MMX
- cglobal vc1_v_loop_filter_internal_%1
+ %macro VC1_LF 0
+ cglobal vc1_v_loop_filter_internal
      VC1_V_LOOP_FILTER 4, d
      ret
  
- cglobal vc1_h_loop_filter_internal_%1
+ cglobal vc1_h_loop_filter_internal
      VC1_H_LOOP_FILTER 4, r4
      ret
  
- ; void ff_vc1_v_loop_filter4_mmx2(uint8_t *src, int stride, int pq)
- cglobal vc1_v_loop_filter4_%1, 3,5,0
+ ; void ff_vc1_v_loop_filter4_mmxext(uint8_t *src, int stride, int pq)
+ cglobal vc1_v_loop_filter4, 3,5,0
      START_V_FILTER
-     call vc1_v_loop_filter_internal_%1
+     call vc1_v_loop_filter_internal
      RET
  
- ; void ff_vc1_h_loop_filter4_mmx2(uint8_t *src, int stride, int pq)
- cglobal vc1_h_loop_filter4_%1, 3,5,0
+ ; void ff_vc1_h_loop_filter4_mmxext(uint8_t *src, int stride, int pq)
+ cglobal vc1_h_loop_filter4, 3,5,0
      START_H_FILTER 4
-     call vc1_h_loop_filter_internal_%1
+     call vc1_h_loop_filter_internal
      RET
  
- ; void ff_vc1_v_loop_filter8_mmx2(uint8_t *src, int stride, int pq)
- cglobal vc1_v_loop_filter8_%1, 3,5,0
+ ; void ff_vc1_v_loop_filter8_mmxext(uint8_t *src, int stride, int pq)
+ cglobal vc1_v_loop_filter8, 3,5,0
      START_V_FILTER
-     call vc1_v_loop_filter_internal_%1
+     call vc1_v_loop_filter_internal
      add  r4, 4
      add  r0, 4
-     call vc1_v_loop_filter_internal_%1
+     call vc1_v_loop_filter_internal
      RET
  
- ; void ff_vc1_h_loop_filter8_mmx2(uint8_t *src, int stride, int pq)
- cglobal vc1_h_loop_filter8_%1, 3,5,0
+ ; void ff_vc1_h_loop_filter8_mmxext(uint8_t *src, int stride, int pq)
+ cglobal vc1_h_loop_filter8, 3,5,0
      START_H_FILTER 4
-     call vc1_h_loop_filter_internal_%1
+     call vc1_h_loop_filter_internal
      lea  r0, [r0+4*r1]
-     call vc1_h_loop_filter_internal_%1
+     call vc1_h_loop_filter_internal
      RET
  %endmacro
  
- %define PABSW PABSW_MMXEXT
- VC1_LF_MMX mmx2
+ INIT_MMX mmxext
+ VC1_LF
  
- INIT_XMM
+ INIT_XMM sse2
  ; void ff_vc1_v_loop_filter8_sse2(uint8_t *src, int stride, int pq)
- cglobal vc1_v_loop_filter8_sse2, 3,5,8
+ cglobal vc1_v_loop_filter8, 3,5,8
      START_V_FILTER
      VC1_V_LOOP_FILTER 8, q
      RET
  
  ; void ff_vc1_h_loop_filter8_sse2(uint8_t *src, int stride, int pq)
- cglobal vc1_h_loop_filter8_sse2, 3,6,8
+ cglobal vc1_h_loop_filter8, 3,6,8
      START_H_FILTER 8
      VC1_H_LOOP_FILTER 8, r5
      RET
  
- %define PABSW PABSW_SSSE3
- INIT_MMX
+ INIT_MMX ssse3
  ; void ff_vc1_v_loop_filter4_ssse3(uint8_t *src, int stride, int pq)
- cglobal vc1_v_loop_filter4_ssse3, 3,5,0
+ cglobal vc1_v_loop_filter4, 3,5,0
      START_V_FILTER
      VC1_V_LOOP_FILTER 4, d
      RET
  
  ; void ff_vc1_h_loop_filter4_ssse3(uint8_t *src, int stride, int pq)
- cglobal vc1_h_loop_filter4_ssse3, 3,5,0
+ cglobal vc1_h_loop_filter4, 3,5,0
      START_H_FILTER 4
      VC1_H_LOOP_FILTER 4, r4
      RET
  
- INIT_XMM
+ INIT_XMM ssse3
  ; void ff_vc1_v_loop_filter8_ssse3(uint8_t *src, int stride, int pq)
- cglobal vc1_v_loop_filter8_ssse3, 3,5,8
+ cglobal vc1_v_loop_filter8, 3,5,8
      START_V_FILTER
      VC1_V_LOOP_FILTER 8, q
      RET
  
  ; void ff_vc1_h_loop_filter8_ssse3(uint8_t *src, int stride, int pq)
- cglobal vc1_h_loop_filter8_ssse3, 3,6,8
+ cglobal vc1_h_loop_filter8, 3,6,8
      START_H_FILTER 8
      VC1_H_LOOP_FILTER 8, r5
      RET
  
+ INIT_XMM sse4
  ; void ff_vc1_h_loop_filter8_sse4(uint8_t *src, int stride, int pq)
- cglobal vc1_h_loop_filter8_sse4, 3,5,8
+ cglobal vc1_h_loop_filter8, 3,5,8
      START_H_FILTER 8
      VC1_H_LOOP_FILTER 8
      RET
@@@ -6,20 -6,20 +6,20 @@@
  ;* Authors: Loren Merritt <lorenm@u.washington.edu>
  ;*          Holger Lubitz <holger@lubitz.org>
  ;*
 -;* This file is part of Libav.
 +;* This file is part of FFmpeg.
  ;*
 -;* Libav is free software; you can redistribute it and/or
 +;* FFmpeg is free software; you can redistribute it and/or
  ;* modify it under the terms of the GNU Lesser General Public
  ;* License as published by the Free Software Foundation; either
  ;* version 2.1 of the License, or (at your option) any later version.
  ;*
 -;* Libav is distributed in the hope that it will be useful,
 +;* FFmpeg is distributed in the hope that it will be useful,
  ;* but WITHOUT ANY WARRANTY; without even the implied warranty of
  ;* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  ;* Lesser General Public License for more details.
  ;*
  ;* You should have received a copy of the GNU Lesser General Public
 -;* License along with Libav; if not, write to the Free Software
 +;* License along with FFmpeg; if not, write to the Free Software
  ;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  ;******************************************************************************
  
  %endif
  %endmacro
  
- ; PABSW macros assume %1 != %2, while ABS1/2 macros work in-place
- %macro PABSW_MMX 2
+ ; PABSW macro assumes %1 != %2, while ABS1/2 macros work in-place
+ %macro PABSW 2
+ %if cpuflag(ssse3)
+     pabsw      %1, %2
+ %elif cpuflag(mmxext)
+     pxor    %1, %1
+     psubw   %1, %2
+     pmaxsw  %1, %2
+ %else
      pxor       %1, %1
      pcmpgtw    %1, %2
      pxor       %2, %1
      psubw      %2, %1
      SWAP       %1, %2
+ %endif
  %endmacro
  
  %macro PSIGNW_MMX 2
      psubw      %1, %2
  %endmacro
  
- %macro PABSW_MMXEXT 2
-     pxor    %1, %1
-     psubw   %1, %2
-     pmaxsw  %1, %2
- %endmacro
- %macro PABSW_SSSE3 2
-     pabsw      %1, %2
- %endmacro
  %macro PSIGNW_SSSE3 2
      psignw     %1, %2
  %endmacro