2 * This file is part of Libav.
4 * Libav is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * Libav is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with Libav; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 #include "libavutil/attributes.h"
21 #include "libavutil/cpu.h"
22 #include "libavutil/x86/asm.h"
23 #include "libavutil/x86/cpu.h"
24 #include "libavcodec/svq1enc.h"
28 static int ssd_int8_vs_int16_mmx(const int8_t *pix1
, const int16_t *pix2
,
35 "pxor %%mm4, %%mm4 \n"
38 "movq (%2, %0), %%mm2 \n"
39 "movq (%3, %0, 2), %%mm0 \n"
40 "movq 8(%3, %0, 2), %%mm1 \n"
41 "punpckhbw %%mm2, %%mm3 \n"
42 "punpcklbw %%mm2, %%mm2 \n"
45 "psubw %%mm3, %%mm1 \n"
46 "psubw %%mm2, %%mm0 \n"
47 "pmaddwd %%mm1, %%mm1 \n"
48 "pmaddwd %%mm0, %%mm0 \n"
49 "paddd %%mm1, %%mm4 \n"
50 "paddd %%mm0, %%mm4 \n"
52 "movq %%mm4, %%mm3 \n"
54 "paddd %%mm3, %%mm4 \n"
56 : "+r" (i
), "=r" (sum
)
57 : "r" (pix1
), "r" (pix2
));
62 #endif /* HAVE_INLINE_ASM */
64 av_cold
void ff_svq1enc_init_x86(SVQ1EncContext
*c
)
67 int cpu_flags
= av_get_cpu_flags();
69 if (INLINE_MMX(cpu_flags
)) {
70 c
->ssd_int8_vs_int16
= ssd_int8_vs_int16_mmx
;
72 #endif /* HAVE_INLINE_ASM */