Merge commit '1a8d0cf77ed2611e542ae98f341d4c43a04467bd'
authorMichael Niedermayer <michaelni@gmx.at>
Sat, 22 Mar 2014 21:11:17 +0000 (22:11 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Sat, 22 Mar 2014 21:11:27 +0000 (22:11 +0100)
* commit '1a8d0cf77ed2611e542ae98f341d4c43a04467bd':
  x86: dsputil: Move inline assembly macros to a separate header

Conflicts:
libavcodec/x86/dsputil_mmx.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavcodec/x86/dsputil_mmx.c
libavcodec/x86/dsputil_qns_template.c
libavcodec/x86/dsputil_x86.h
libavcodec/x86/fpel_mmx.c
libavcodec/x86/hpeldsp_mmx.c
libavcodec/x86/inline_asm.h
libavcodec/x86/rnd_mmx.c
libavcodec/x86/rnd_template.c

   */
  
  #include "config.h"
 +#include "libavutil/avassert.h"
  #include "libavutil/cpu.h"
  #include "libavutil/x86/asm.h"
 +#include "libavcodec/videodsp.h"
  #include "constants.h"
- #include "dsputil_x86.h"
 +#include "diracdsp_mmx.h"
+ #include "dsputil_x86.h"
+ #include "inline_asm.h"
  
  #if HAVE_INLINE_ASM
  
Simple merge
Simple merge
Simple merge
Simple merge
index 0000000,e4affab..c2f1bf0
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,100 +1,100 @@@
 - * This file is part of Libav.
+ /*
+  * inline assembly helper macros
+  *
 - * Libav is free software; you can redistribute it and/or
++ * This file is part of FFmpeg.
+  *
 - * Libav is distributed in the hope that it will be useful,
++ * 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.
+  *
 - * License along with Libav; if not, write to the Free Software
++ * 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 FFmpeg; if not, write to the Free Software
+  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+  */
+ #ifndef AVCODEC_X86_INLINE_ASM_H
+ #define AVCODEC_X86_INLINE_ASM_H
+ #include "constants.h"
+ #define MOVQ_WONE(regd) \
+     __asm__ volatile ( \
+     "pcmpeqd %%" #regd ", %%" #regd " \n\t" \
+     "psrlw $15, %%" #regd ::)
+ #define JUMPALIGN()     __asm__ volatile (".p2align 3"::)
+ #define MOVQ_ZERO(regd) __asm__ volatile ("pxor %%"#regd", %%"#regd ::)
+ #define MOVQ_BFE(regd)                                  \
+     __asm__ volatile (                                  \
+         "pcmpeqd %%"#regd", %%"#regd"   \n\t"           \
+         "paddb   %%"#regd", %%"#regd"   \n\t" ::)
+ #ifndef PIC
+ #define MOVQ_WTWO(regd) __asm__ volatile ("movq %0, %%"#regd" \n\t" :: "m"(ff_wtwo))
+ #else
+ // for shared library it's better to use this way for accessing constants
+ // pcmpeqd -> -1
+ #define MOVQ_WTWO(regd)                                 \
+     __asm__ volatile (                                  \
+         "pcmpeqd %%"#regd", %%"#regd"   \n\t"           \
+         "psrlw         $15, %%"#regd"   \n\t"           \
+         "psllw          $1, %%"#regd"   \n\t"::)
+ #endif
+ // using regr as temporary and for the output result
+ // first argument is unmodifed and second is trashed
+ // regfe is supposed to contain 0xfefefefefefefefe
+ #define PAVGB_MMX_NO_RND(rega, regb, regr, regfe)                \
+     "movq   "#rega", "#regr"            \n\t"                    \
+     "pand   "#regb", "#regr"            \n\t"                    \
+     "pxor   "#rega", "#regb"            \n\t"                    \
+     "pand  "#regfe", "#regb"            \n\t"                    \
+     "psrlq       $1, "#regb"            \n\t"                    \
+     "paddb  "#regb", "#regr"            \n\t"
+ #define PAVGB_MMX(rega, regb, regr, regfe)                       \
+     "movq   "#rega", "#regr"            \n\t"                    \
+     "por    "#regb", "#regr"            \n\t"                    \
+     "pxor   "#rega", "#regb"            \n\t"                    \
+     "pand  "#regfe", "#regb"            \n\t"                    \
+     "psrlq       $1, "#regb"            \n\t"                    \
+     "psubb  "#regb", "#regr"            \n\t"
+ // mm6 is supposed to contain 0xfefefefefefefefe
+ #define PAVGBP_MMX_NO_RND(rega, regb, regr,  regc, regd, regp)   \
+     "movq  "#rega", "#regr"             \n\t"                    \
+     "movq  "#regc", "#regp"             \n\t"                    \
+     "pand  "#regb", "#regr"             \n\t"                    \
+     "pand  "#regd", "#regp"             \n\t"                    \
+     "pxor  "#rega", "#regb"             \n\t"                    \
+     "pxor  "#regc", "#regd"             \n\t"                    \
+     "pand    %%mm6, "#regb"             \n\t"                    \
+     "pand    %%mm6, "#regd"             \n\t"                    \
+     "psrlq      $1, "#regb"             \n\t"                    \
+     "psrlq      $1, "#regd"             \n\t"                    \
+     "paddb "#regb", "#regr"             \n\t"                    \
+     "paddb "#regd", "#regp"             \n\t"
+ #define PAVGBP_MMX(rega, regb, regr, regc, regd, regp)           \
+     "movq  "#rega", "#regr"             \n\t"                    \
+     "movq  "#regc", "#regp"             \n\t"                    \
+     "por   "#regb", "#regr"             \n\t"                    \
+     "por   "#regd", "#regp"             \n\t"                    \
+     "pxor  "#rega", "#regb"             \n\t"                    \
+     "pxor  "#regc", "#regd"             \n\t"                    \
+     "pand    %%mm6, "#regb"             \n\t"                    \
+     "pand    %%mm6, "#regd"             \n\t"                    \
+     "psrlq      $1, "#regd"             \n\t"                    \
+     "psrlq      $1, "#regb"             \n\t"                    \
+     "psubb "#regb", "#regr"             \n\t"                    \
+     "psubb "#regd", "#regp"             \n\t"
+ #endif /* AVCODEC_X86_INLINE_ASM_H */
Simple merge
Simple merge