History

avcodec/hpeldsp_init: Detemplatize

Since a51279bbdea0d6db920d71980262bccd0ce78226, hpeldsp_rnd_template.c was only included once and one of the two functions in rnd_template.c was only enabled once.

Andreas Rheinhardt committed 1 year ago

Commit 09aeeeb1 parent 83b34693 files · +252 −287Browse files

Unified · Split

3 files
  1. libavcodec/x86/hpeldsp_init.c +252 −6
  2. libavcodec/x86/hpeldsp_rnd_template.c +0 −202
  3. libavcodec/x86/rnd_template.c +0 −79
libavcodec/x86/hpeldsp_init.c+252−6
@@ -22,6 +22,9 @@ · 21 unmodified lines
2222 * MMX optimization by Nick Kurshev <nickols_k@mail.ru>
2323 */
2424
25+#include <stddef.h>
26+#include <stdint.h>
27+
2528 #include "libavutil/attributes.h"
2629 #include "libavutil/cpu.h"
2730 #include "libavutil/x86/cpu.h"
@@ -74,19 +77,263 @@ void ff_avg_approx_pixels8_xy2_mmxext(uint8_t *block, const uint8_t *pixels, · 46 unmodified lines
7477 /* MMX no rounding */
7578 #define DEF(x, y) x ## _no_rnd_ ## y ## _mmx
7679 #define SET_RND MOVQ_WONE
77−#define PAVGBP(a, b, c, d, e, f) PAVGBP_MMX_NO_RND(a, b, c, d, e, f)
78−#define PAVGB(a, b, c, e) PAVGB_MMX_NO_RND(a, b, c, e)
7980 #define STATIC static
8081
8182 #include "rnd_template.c"
82−#include "hpeldsp_rnd_template.c"
8383
8484 #undef DEF
8585 #undef SET_RND
86−#undef PAVGBP
87−#undef PAVGB
8886 #undef STATIC
8987
88+// this routine is 'slightly' suboptimal but mostly unused
89+static void avg_no_rnd_pixels8_xy2_mmx(uint8_t *block, const uint8_t *pixels,
90+ ptrdiff_t line_size, int h)
91+{
92+ MOVQ_ZERO(mm7);
93+ MOVQ_WONE(mm6); // =2 for rnd and =1 for no_rnd version
94+ __asm__ volatile(
95+ "movq (%1), %%mm0 \n\t"
96+ "movq 1(%1), %%mm4 \n\t"
97+ "movq %%mm0, %%mm1 \n\t"
98+ "movq %%mm4, %%mm5 \n\t"
99+ "punpcklbw %%mm7, %%mm0 \n\t"
100+ "punpcklbw %%mm7, %%mm4 \n\t"
101+ "punpckhbw %%mm7, %%mm1 \n\t"
102+ "punpckhbw %%mm7, %%mm5 \n\t"
103+ "paddusw %%mm0, %%mm4 \n\t"
104+ "paddusw %%mm1, %%mm5 \n\t"
105+ "xor %%"FF_REG_a", %%"FF_REG_a" \n\t"
106+ "add %3, %1 \n\t"
107+ ".p2align 3 \n\t"
108+ "1: \n\t"
109+ "movq (%1, %%"FF_REG_a"), %%mm0 \n\t"
110+ "movq 1(%1, %%"FF_REG_a"), %%mm2 \n\t"
111+ "movq %%mm0, %%mm1 \n\t"
112+ "movq %%mm2, %%mm3 \n\t"
113+ "punpcklbw %%mm7, %%mm0 \n\t"
114+ "punpcklbw %%mm7, %%mm2 \n\t"
115+ "punpckhbw %%mm7, %%mm1 \n\t"
116+ "punpckhbw %%mm7, %%mm3 \n\t"
117+ "paddusw %%mm2, %%mm0 \n\t"
118+ "paddusw %%mm3, %%mm1 \n\t"
119+ "paddusw %%mm6, %%mm4 \n\t"
120+ "paddusw %%mm6, %%mm5 \n\t"
121+ "paddusw %%mm0, %%mm4 \n\t"
122+ "paddusw %%mm1, %%mm5 \n\t"
123+ "psrlw $2, %%mm4 \n\t"
124+ "psrlw $2, %%mm5 \n\t"
125+ "movq (%2, %%"FF_REG_a"), %%mm3 \n\t"
126+ "packuswb %%mm5, %%mm4 \n\t"
127+ "pcmpeqd %%mm2, %%mm2 \n\t"
128+ "paddb %%mm2, %%mm2 \n\t"
129+ PAVGB_MMX(%%mm3, %%mm4, %%mm5, %%mm2)
130+ "movq %%mm5, (%2, %%"FF_REG_a") \n\t"
131+ "add %3, %%"FF_REG_a" \n\t"
132+
133+ "movq (%1, %%"FF_REG_a"), %%mm2 \n\t" // 0 <-> 2 1 <-> 3
134+ "movq 1(%1, %%"FF_REG_a"), %%mm4 \n\t"
135+ "movq %%mm2, %%mm3 \n\t"
136+ "movq %%mm4, %%mm5 \n\t"
137+ "punpcklbw %%mm7, %%mm2 \n\t"
138+ "punpcklbw %%mm7, %%mm4 \n\t"
139+ "punpckhbw %%mm7, %%mm3 \n\t"
140+ "punpckhbw %%mm7, %%mm5 \n\t"
141+ "paddusw %%mm2, %%mm4 \n\t"
142+ "paddusw %%mm3, %%mm5 \n\t"
143+ "paddusw %%mm6, %%mm0 \n\t"
144+ "paddusw %%mm6, %%mm1 \n\t"
145+ "paddusw %%mm4, %%mm0 \n\t"
146+ "paddusw %%mm5, %%mm1 \n\t"
147+ "psrlw $2, %%mm0 \n\t"
148+ "psrlw $2, %%mm1 \n\t"
149+ "movq (%2, %%"FF_REG_a"), %%mm3 \n\t"
150+ "packuswb %%mm1, %%mm0 \n\t"
151+ "pcmpeqd %%mm2, %%mm2 \n\t"
152+ "paddb %%mm2, %%mm2 \n\t"
153+ PAVGB_MMX(%%mm3, %%mm0, %%mm1, %%mm2)
154+ "movq %%mm1, (%2, %%"FF_REG_a") \n\t"
155+ "add %3, %%"FF_REG_a" \n\t"
156+
157+ "subl $2, %0 \n\t"
158+ "jnz 1b \n\t"
159+ :"+g"(h), "+S"(pixels)
160+ :"D"(block), "r"((x86_reg)line_size)
161+ :FF_REG_a, "memory");
162+}
163+
164+static void put_no_rnd_pixels8_x2_mmx(uint8_t *block, const uint8_t *pixels, ptrdiff_t line_size, int h)
165+{
166+ MOVQ_BFE(mm6);
167+ __asm__ volatile(
168+ "lea (%3, %3), %%"FF_REG_a" \n\t"
169+ ".p2align 3 \n\t"
170+ "1: \n\t"
171+ "movq (%1), %%mm0 \n\t"
172+ "movq 1(%1), %%mm1 \n\t"
173+ "movq (%1, %3), %%mm2 \n\t"
174+ "movq 1(%1, %3), %%mm3 \n\t"
175+ PAVGBP_MMX_NO_RND(%%mm0, %%mm1, %%mm4, %%mm2, %%mm3, %%mm5)
176+ "movq %%mm4, (%2) \n\t"
177+ "movq %%mm5, (%2, %3) \n\t"
178+ "add %%"FF_REG_a", %1 \n\t"
179+ "add %%"FF_REG_a", %2 \n\t"
180+ "movq (%1), %%mm0 \n\t"
181+ "movq 1(%1), %%mm1 \n\t"
182+ "movq (%1, %3), %%mm2 \n\t"
183+ "movq 1(%1, %3), %%mm3 \n\t"
184+ PAVGBP_MMX_NO_RND(%%mm0, %%mm1, %%mm4, %%mm2, %%mm3, %%mm5)
185+ "movq %%mm4, (%2) \n\t"
186+ "movq %%mm5, (%2, %3) \n\t"
187+ "add %%"FF_REG_a", %1 \n\t"
188+ "add %%"FF_REG_a", %2 \n\t"
189+ "subl $4, %0 \n\t"
190+ "jnz 1b \n\t"
191+ :"+g"(h), "+S"(pixels), "+D"(block)
192+ :"r"((x86_reg)line_size)
193+ :FF_REG_a, "memory");
194+}
195+
196+static void put_no_rnd_pixels16_x2_mmx(uint8_t *block, const uint8_t *pixels, ptrdiff_t line_size, int h)
197+{
198+ MOVQ_BFE(mm6);
199+ __asm__ volatile(
200+ "lea (%3, %3), %%"FF_REG_a" \n\t"
201+ ".p2align 3 \n\t"
202+ "1: \n\t"
203+ "movq (%1), %%mm0 \n\t"
204+ "movq 1(%1), %%mm1 \n\t"
205+ "movq (%1, %3), %%mm2 \n\t"
206+ "movq 1(%1, %3), %%mm3 \n\t"
207+ PAVGBP_MMX_NO_RND(%%mm0, %%mm1, %%mm4, %%mm2, %%mm3, %%mm5)
208+ "movq %%mm4, (%2) \n\t"
209+ "movq %%mm5, (%2, %3) \n\t"
210+ "movq 8(%1), %%mm0 \n\t"
211+ "movq 9(%1), %%mm1 \n\t"
212+ "movq 8(%1, %3), %%mm2 \n\t"
213+ "movq 9(%1, %3), %%mm3 \n\t"
214+ PAVGBP_MMX_NO_RND(%%mm0, %%mm1, %%mm4, %%mm2, %%mm3, %%mm5)
215+ "movq %%mm4, 8(%2) \n\t"
216+ "movq %%mm5, 8(%2, %3) \n\t"
217+ "add %%"FF_REG_a", %1 \n\t"
218+ "add %%"FF_REG_a", %2 \n\t"
219+ "movq (%1), %%mm0 \n\t"
220+ "movq 1(%1), %%mm1 \n\t"
221+ "movq (%1, %3), %%mm2 \n\t"
222+ "movq 1(%1, %3), %%mm3 \n\t"
223+ PAVGBP_MMX_NO_RND(%%mm0, %%mm1, %%mm4, %%mm2, %%mm3, %%mm5)
224+ "movq %%mm4, (%2) \n\t"
225+ "movq %%mm5, (%2, %3) \n\t"
226+ "movq 8(%1), %%mm0 \n\t"
227+ "movq 9(%1), %%mm1 \n\t"
228+ "movq 8(%1, %3), %%mm2 \n\t"
229+ "movq 9(%1, %3), %%mm3 \n\t"
230+ PAVGBP_MMX_NO_RND(%%mm0, %%mm1, %%mm4, %%mm2, %%mm3, %%mm5)
231+ "movq %%mm4, 8(%2) \n\t"
232+ "movq %%mm5, 8(%2, %3) \n\t"
233+ "add %%"FF_REG_a", %1 \n\t"
234+ "add %%"FF_REG_a", %2 \n\t"
235+ "subl $4, %0 \n\t"
236+ "jnz 1b \n\t"
237+ :"+g"(h), "+S"(pixels), "+D"(block)
238+ :"r"((x86_reg)line_size)
239+ :FF_REG_a, "memory");
240+}
241+
242+static void put_no_rnd_pixels8_y2_mmx(uint8_t *block, const uint8_t *pixels, ptrdiff_t line_size, int h)
243+{
244+ MOVQ_BFE(mm6);
245+ __asm__ volatile(
246+ "lea (%3, %3), %%"FF_REG_a" \n\t"
247+ "movq (%1), %%mm0 \n\t"
248+ ".p2align 3 \n\t"
249+ "1: \n\t"
250+ "movq (%1, %3), %%mm1 \n\t"
251+ "movq (%1, %%"FF_REG_a"),%%mm2\n\t"
252+ PAVGBP_MMX_NO_RND(%%mm1, %%mm0, %%mm4, %%mm2, %%mm1, %%mm5)
253+ "movq %%mm4, (%2) \n\t"
254+ "movq %%mm5, (%2, %3) \n\t"
255+ "add %%"FF_REG_a", %1 \n\t"
256+ "add %%"FF_REG_a", %2 \n\t"
257+ "movq (%1, %3), %%mm1 \n\t"
258+ "movq (%1, %%"FF_REG_a"),%%mm0\n\t"
259+ PAVGBP_MMX_NO_RND(%%mm1, %%mm2, %%mm4, %%mm0, %%mm1, %%mm5)
260+ "movq %%mm4, (%2) \n\t"
261+ "movq %%mm5, (%2, %3) \n\t"
262+ "add %%"FF_REG_a", %1 \n\t"
263+ "add %%"FF_REG_a", %2 \n\t"
264+ "subl $4, %0 \n\t"
265+ "jnz 1b \n\t"
266+ :"+g"(h), "+S"(pixels), "+D"(block)
267+ :"r"((x86_reg)line_size)
268+ :FF_REG_a, "memory");
269+}
270+
271+static void avg_no_rnd_pixels16_x2_mmx(uint8_t *block, const uint8_t *pixels, ptrdiff_t line_size, int h)
272+{
273+ MOVQ_BFE(mm6);
274+ __asm__ volatile(
275+ ".p2align 3 \n\t"
276+ "1: \n\t"
277+ "movq (%1), %%mm0 \n\t"
278+ "movq 1(%1), %%mm1 \n\t"
279+ "movq (%2), %%mm3 \n\t"
280+ PAVGB_MMX_NO_RND(%%mm0, %%mm1, %%mm2, %%mm6)
281+ PAVGB_MMX(%%mm3, %%mm2, %%mm0, %%mm6)
282+ "movq %%mm0, (%2) \n\t"
283+ "movq 8(%1), %%mm0 \n\t"
284+ "movq 9(%1), %%mm1 \n\t"
285+ "movq 8(%2), %%mm3 \n\t"
286+ PAVGB_MMX_NO_RND(%%mm0, %%mm1, %%mm2, %%mm6)
287+ PAVGB_MMX(%%mm3, %%mm2, %%mm0, %%mm6)
288+ "movq %%mm0, 8(%2) \n\t"
289+ "add %3, %1 \n\t"
290+ "add %3, %2 \n\t"
291+ "subl $1, %0 \n\t"
292+ "jnz 1b \n\t"
293+ :"+g"(h), "+S"(pixels), "+D"(block)
294+ :"r"((x86_reg)line_size)
295+ :"memory");
296+}
297+
298+static void avg_no_rnd_pixels8_y2_mmx(uint8_t *block, const uint8_t *pixels, ptrdiff_t line_size, int h)
299+{
300+ MOVQ_BFE(mm6);
301+ __asm__ volatile(
302+ "lea (%3, %3), %%"FF_REG_a" \n\t"
303+ "movq (%1), %%mm0 \n\t"
304+ ".p2align 3 \n\t"
305+ "1: \n\t"
306+ "movq (%1, %3), %%mm1 \n\t"
307+ "movq (%1, %%"FF_REG_a"), %%mm2 \n\t"
308+ PAVGBP_MMX_NO_RND(%%mm1, %%mm0, %%mm4, %%mm2, %%mm1, %%mm5)
309+ "movq (%2), %%mm3 \n\t"
310+ PAVGB_MMX(%%mm3, %%mm4, %%mm0, %%mm6)
311+ "movq (%2, %3), %%mm3 \n\t"
312+ PAVGB_MMX(%%mm3, %%mm5, %%mm1, %%mm6)
313+ "movq %%mm0, (%2) \n\t"
314+ "movq %%mm1, (%2, %3) \n\t"
315+ "add %%"FF_REG_a", %1 \n\t"
316+ "add %%"FF_REG_a", %2 \n\t"
317+
318+ "movq (%1, %3), %%mm1 \n\t"
319+ "movq (%1, %%"FF_REG_a"), %%mm0 \n\t"
320+ PAVGBP_MMX_NO_RND(%%mm1, %%mm2, %%mm4, %%mm0, %%mm1, %%mm5)
321+ "movq (%2), %%mm3 \n\t"
322+ PAVGB_MMX(%%mm3, %%mm4, %%mm2, %%mm6)
323+ "movq (%2, %3), %%mm3 \n\t"
324+ PAVGB_MMX(%%mm3, %%mm5, %%mm1, %%mm6)
325+ "movq %%mm2, (%2) \n\t"
326+ "movq %%mm1, (%2, %3) \n\t"
327+ "add %%"FF_REG_a", %1 \n\t"
328+ "add %%"FF_REG_a", %2 \n\t"
329+
330+ "subl $4, %0 \n\t"
331+ "jnz 1b \n\t"
332+ :"+g"(h), "+S"(pixels), "+D"(block)
333+ :"r"((x86_reg)line_size)
334+ :FF_REG_a, "memory");
335+}
336+
90337 #if HAVE_MMX
91338 CALL_2X_PIXELS(avg_no_rnd_pixels16_y2_mmx, avg_no_rnd_pixels8_y2_mmx, 8)
92339 CALL_2X_PIXELS(put_no_rnd_pixels16_y2_mmx, put_no_rnd_pixels8_y2_mmx, 8)
@@ -101,7 +348,6 @@ CALL_2X_PIXELS(put_no_rnd_pixels16_xy2_mmx, put_no_rnd_pixels8_xy2_mmx, 8) · 8 unmodified lines
101348 #define SET_RND MOVQ_WTWO
102349 #define DEF(x, y) ff_ ## x ## _ ## y ## _mmx
103350 #define STATIC
104−#define NO_AVG
105351
106352 #include "rnd_template.c"
107353
libavcodec/x86/hpeldsp_rnd_template.c+0−202
@@ -1,202 +0,0 @@
1−/*
2− * SIMD-optimized halfpel functions are compiled twice for rnd/no_rnd
3− * Copyright (c) 2000, 2001 Fabrice Bellard
4− * Copyright (c) 2003-2004 Michael Niedermayer <michaelni@gmx.at>
5− *
6− * MMX optimization by Nick Kurshev <nickols_k@mail.ru>
7− * mostly rewritten by Michael Niedermayer <michaelni@gmx.at>
8− * and improved by Zdenek Kabelac <kabi@users.sf.net>
9− *
10− * This file is part of FFmpeg.
11− *
12− * FFmpeg is free software; you can redistribute it and/or
13− * modify it under the terms of the GNU Lesser General Public
14− * License as published by the Free Software Foundation; either
15− * version 2.1 of the License, or (at your option) any later version.
16− *
17− * FFmpeg is distributed in the hope that it will be useful,
18− * but WITHOUT ANY WARRANTY; without even the implied warranty of
19− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20− * Lesser General Public License for more details.
21− *
22− * You should have received a copy of the GNU Lesser General Public
23− * License along with FFmpeg; if not, write to the Free Software
24− * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
25− */
26−
27−#include <stddef.h>
28−#include <stdint.h>
29−
30−// put_pixels
31−av_unused static void DEF(put, pixels8_x2)(uint8_t *block, const uint8_t *pixels, ptrdiff_t line_size, int h)
32−{
33− MOVQ_BFE(mm6);
34− __asm__ volatile(
35− "lea (%3, %3), %%"FF_REG_a" \n\t"
36− ".p2align 3 \n\t"
37− "1: \n\t"
38− "movq (%1), %%mm0 \n\t"
39− "movq 1(%1), %%mm1 \n\t"
40− "movq (%1, %3), %%mm2 \n\t"
41− "movq 1(%1, %3), %%mm3 \n\t"
42− PAVGBP(%%mm0, %%mm1, %%mm4, %%mm2, %%mm3, %%mm5)
43− "movq %%mm4, (%2) \n\t"
44− "movq %%mm5, (%2, %3) \n\t"
45− "add %%"FF_REG_a", %1 \n\t"
46− "add %%"FF_REG_a", %2 \n\t"
47− "movq (%1), %%mm0 \n\t"
48− "movq 1(%1), %%mm1 \n\t"
49− "movq (%1, %3), %%mm2 \n\t"
50− "movq 1(%1, %3), %%mm3 \n\t"
51− PAVGBP(%%mm0, %%mm1, %%mm4, %%mm2, %%mm3, %%mm5)
52− "movq %%mm4, (%2) \n\t"
53− "movq %%mm5, (%2, %3) \n\t"
54− "add %%"FF_REG_a", %1 \n\t"
55− "add %%"FF_REG_a", %2 \n\t"
56− "subl $4, %0 \n\t"
57− "jnz 1b \n\t"
58− :"+g"(h), "+S"(pixels), "+D"(block)
59− :"r"((x86_reg)line_size)
60− :FF_REG_a, "memory");
61−}
62−
63−av_unused static void DEF(put, pixels16_x2)(uint8_t *block, const uint8_t *pixels, ptrdiff_t line_size, int h)
64−{
65− MOVQ_BFE(mm6);
66− __asm__ volatile(
67− "lea (%3, %3), %%"FF_REG_a" \n\t"
68− ".p2align 3 \n\t"
69− "1: \n\t"
70− "movq (%1), %%mm0 \n\t"
71− "movq 1(%1), %%mm1 \n\t"
72− "movq (%1, %3), %%mm2 \n\t"
73− "movq 1(%1, %3), %%mm3 \n\t"
74− PAVGBP(%%mm0, %%mm1, %%mm4, %%mm2, %%mm3, %%mm5)
75− "movq %%mm4, (%2) \n\t"
76− "movq %%mm5, (%2, %3) \n\t"
77− "movq 8(%1), %%mm0 \n\t"
78− "movq 9(%1), %%mm1 \n\t"
79− "movq 8(%1, %3), %%mm2 \n\t"
80− "movq 9(%1, %3), %%mm3 \n\t"
81− PAVGBP(%%mm0, %%mm1, %%mm4, %%mm2, %%mm3, %%mm5)
82− "movq %%mm4, 8(%2) \n\t"
83− "movq %%mm5, 8(%2, %3) \n\t"
84− "add %%"FF_REG_a", %1 \n\t"
85− "add %%"FF_REG_a", %2 \n\t"
86− "movq (%1), %%mm0 \n\t"
87− "movq 1(%1), %%mm1 \n\t"
88− "movq (%1, %3), %%mm2 \n\t"
89− "movq 1(%1, %3), %%mm3 \n\t"
90− PAVGBP(%%mm0, %%mm1, %%mm4, %%mm2, %%mm3, %%mm5)
91− "movq %%mm4, (%2) \n\t"
92− "movq %%mm5, (%2, %3) \n\t"
93− "movq 8(%1), %%mm0 \n\t"
94− "movq 9(%1), %%mm1 \n\t"
95− "movq 8(%1, %3), %%mm2 \n\t"
96− "movq 9(%1, %3), %%mm3 \n\t"
97− PAVGBP(%%mm0, %%mm1, %%mm4, %%mm2, %%mm3, %%mm5)
98− "movq %%mm4, 8(%2) \n\t"
99− "movq %%mm5, 8(%2, %3) \n\t"
100− "add %%"FF_REG_a", %1 \n\t"
101− "add %%"FF_REG_a", %2 \n\t"
102− "subl $4, %0 \n\t"
103− "jnz 1b \n\t"
104− :"+g"(h), "+S"(pixels), "+D"(block)
105− :"r"((x86_reg)line_size)
106− :FF_REG_a, "memory");
107−}
108−
109−av_unused static void DEF(put, pixels8_y2)(uint8_t *block, const uint8_t *pixels, ptrdiff_t line_size, int h)
110−{
111− MOVQ_BFE(mm6);
112− __asm__ volatile(
113− "lea (%3, %3), %%"FF_REG_a" \n\t"
114− "movq (%1), %%mm0 \n\t"
115− ".p2align 3 \n\t"
116− "1: \n\t"
117− "movq (%1, %3), %%mm1 \n\t"
118− "movq (%1, %%"FF_REG_a"),%%mm2\n\t"
119− PAVGBP(%%mm1, %%mm0, %%mm4, %%mm2, %%mm1, %%mm5)
120− "movq %%mm4, (%2) \n\t"
121− "movq %%mm5, (%2, %3) \n\t"
122− "add %%"FF_REG_a", %1 \n\t"
123− "add %%"FF_REG_a", %2 \n\t"
124− "movq (%1, %3), %%mm1 \n\t"
125− "movq (%1, %%"FF_REG_a"),%%mm0\n\t"
126− PAVGBP(%%mm1, %%mm2, %%mm4, %%mm0, %%mm1, %%mm5)
127− "movq %%mm4, (%2) \n\t"
128− "movq %%mm5, (%2, %3) \n\t"
129− "add %%"FF_REG_a", %1 \n\t"
130− "add %%"FF_REG_a", %2 \n\t"
131− "subl $4, %0 \n\t"
132− "jnz 1b \n\t"
133− :"+g"(h), "+S"(pixels), "+D"(block)
134− :"r"((x86_reg)line_size)
135− :FF_REG_a, "memory");
136−}
137−
138−av_unused static void DEF(avg, pixels16_x2)(uint8_t *block, const uint8_t *pixels, ptrdiff_t line_size, int h)
139−{
140− MOVQ_BFE(mm6);
141− __asm__ volatile(
142− ".p2align 3 \n\t"
143− "1: \n\t"
144− "movq (%1), %%mm0 \n\t"
145− "movq 1(%1), %%mm1 \n\t"
146− "movq (%2), %%mm3 \n\t"
147− PAVGB(%%mm0, %%mm1, %%mm2, %%mm6)
148− PAVGB_MMX(%%mm3, %%mm2, %%mm0, %%mm6)
149− "movq %%mm0, (%2) \n\t"
150− "movq 8(%1), %%mm0 \n\t"
151− "movq 9(%1), %%mm1 \n\t"
152− "movq 8(%2), %%mm3 \n\t"
153− PAVGB(%%mm0, %%mm1, %%mm2, %%mm6)
154− PAVGB_MMX(%%mm3, %%mm2, %%mm0, %%mm6)
155− "movq %%mm0, 8(%2) \n\t"
156− "add %3, %1 \n\t"
157− "add %3, %2 \n\t"
158− "subl $1, %0 \n\t"
159− "jnz 1b \n\t"
160− :"+g"(h), "+S"(pixels), "+D"(block)
161− :"r"((x86_reg)line_size)
162− :"memory");
163−}
164−
165−av_unused static void DEF(avg, pixels8_y2)(uint8_t *block, const uint8_t *pixels, ptrdiff_t line_size, int h)
166−{
167− MOVQ_BFE(mm6);
168− __asm__ volatile(
169− "lea (%3, %3), %%"FF_REG_a" \n\t"
170− "movq (%1), %%mm0 \n\t"
171− ".p2align 3 \n\t"
172− "1: \n\t"
173− "movq (%1, %3), %%mm1 \n\t"
174− "movq (%1, %%"FF_REG_a"), %%mm2 \n\t"
175− PAVGBP(%%mm1, %%mm0, %%mm4, %%mm2, %%mm1, %%mm5)
176− "movq (%2), %%mm3 \n\t"
177− PAVGB_MMX(%%mm3, %%mm4, %%mm0, %%mm6)
178− "movq (%2, %3), %%mm3 \n\t"
179− PAVGB_MMX(%%mm3, %%mm5, %%mm1, %%mm6)
180− "movq %%mm0, (%2) \n\t"
181− "movq %%mm1, (%2, %3) \n\t"
182− "add %%"FF_REG_a", %1 \n\t"
183− "add %%"FF_REG_a", %2 \n\t"
184−
185− "movq (%1, %3), %%mm1 \n\t"
186− "movq (%1, %%"FF_REG_a"), %%mm0 \n\t"
187− PAVGBP(%%mm1, %%mm2, %%mm4, %%mm0, %%mm1, %%mm5)
188− "movq (%2), %%mm3 \n\t"
189− PAVGB_MMX(%%mm3, %%mm4, %%mm2, %%mm6)
190− "movq (%2, %3), %%mm3 \n\t"
191− PAVGB_MMX(%%mm3, %%mm5, %%mm1, %%mm6)
192− "movq %%mm2, (%2) \n\t"
193− "movq %%mm1, (%2, %3) \n\t"
194− "add %%"FF_REG_a", %1 \n\t"
195− "add %%"FF_REG_a", %2 \n\t"
196−
197− "subl $4, %0 \n\t"
198− "jnz 1b \n\t"
199− :"+g"(h), "+S"(pixels), "+D"(block)
200− :"r"((x86_reg)line_size)
201− :FF_REG_a, "memory");
202−}
libavcodec/x86/rnd_template.c+0−79
@@ -96,82 +96,3 @@ av_unused STATIC void DEF(put, pixels8_xy2)(uint8_t *block, const uint8_t *pixel · 95 unmodified lines
9696 :"D"(block), "r"((x86_reg)line_size)
9797 :FF_REG_a, "memory");
9898 }
99−
100−#ifndef NO_AVG
101−// avg_pixels
102−// this routine is 'slightly' suboptimal but mostly unused
103−av_unused STATIC void DEF(avg, pixels8_xy2)(uint8_t *block, const uint8_t *pixels,
104− ptrdiff_t line_size, int h)
105−{
106− MOVQ_ZERO(mm7);
107− SET_RND(mm6); // =2 for rnd and =1 for no_rnd version
108− __asm__ volatile(
109− "movq (%1), %%mm0 \n\t"
110− "movq 1(%1), %%mm4 \n\t"
111− "movq %%mm0, %%mm1 \n\t"
112− "movq %%mm4, %%mm5 \n\t"
113− "punpcklbw %%mm7, %%mm0 \n\t"
114− "punpcklbw %%mm7, %%mm4 \n\t"
115− "punpckhbw %%mm7, %%mm1 \n\t"
116− "punpckhbw %%mm7, %%mm5 \n\t"
117− "paddusw %%mm0, %%mm4 \n\t"
118− "paddusw %%mm1, %%mm5 \n\t"
119− "xor %%"FF_REG_a", %%"FF_REG_a" \n\t"
120− "add %3, %1 \n\t"
121− ".p2align 3 \n\t"
122− "1: \n\t"
123− "movq (%1, %%"FF_REG_a"), %%mm0 \n\t"
124− "movq 1(%1, %%"FF_REG_a"), %%mm2 \n\t"
125− "movq %%mm0, %%mm1 \n\t"
126− "movq %%mm2, %%mm3 \n\t"
127− "punpcklbw %%mm7, %%mm0 \n\t"
128− "punpcklbw %%mm7, %%mm2 \n\t"
129− "punpckhbw %%mm7, %%mm1 \n\t"
130− "punpckhbw %%mm7, %%mm3 \n\t"
131− "paddusw %%mm2, %%mm0 \n\t"
132− "paddusw %%mm3, %%mm1 \n\t"
133− "paddusw %%mm6, %%mm4 \n\t"
134− "paddusw %%mm6, %%mm5 \n\t"
135− "paddusw %%mm0, %%mm4 \n\t"
136− "paddusw %%mm1, %%mm5 \n\t"
137− "psrlw $2, %%mm4 \n\t"
138− "psrlw $2, %%mm5 \n\t"
139− "movq (%2, %%"FF_REG_a"), %%mm3 \n\t"
140− "packuswb %%mm5, %%mm4 \n\t"
141− "pcmpeqd %%mm2, %%mm2 \n\t"
142− "paddb %%mm2, %%mm2 \n\t"
143− PAVGB_MMX(%%mm3, %%mm4, %%mm5, %%mm2)
144− "movq %%mm5, (%2, %%"FF_REG_a") \n\t"
145− "add %3, %%"FF_REG_a" \n\t"
146−
147− "movq (%1, %%"FF_REG_a"), %%mm2 \n\t" // 0 <-> 2 1 <-> 3
148− "movq 1(%1, %%"FF_REG_a"), %%mm4 \n\t"
149− "movq %%mm2, %%mm3 \n\t"
150− "movq %%mm4, %%mm5 \n\t"
151− "punpcklbw %%mm7, %%mm2 \n\t"
152− "punpcklbw %%mm7, %%mm4 \n\t"
153− "punpckhbw %%mm7, %%mm3 \n\t"
154− "punpckhbw %%mm7, %%mm5 \n\t"
155− "paddusw %%mm2, %%mm4 \n\t"
156− "paddusw %%mm3, %%mm5 \n\t"
157− "paddusw %%mm6, %%mm0 \n\t"
158− "paddusw %%mm6, %%mm1 \n\t"
159− "paddusw %%mm4, %%mm0 \n\t"
160− "paddusw %%mm5, %%mm1 \n\t"
161− "psrlw $2, %%mm0 \n\t"
162− "psrlw $2, %%mm1 \n\t"
163− "movq (%2, %%"FF_REG_a"), %%mm3 \n\t"
164− "packuswb %%mm1, %%mm0 \n\t"
165− "pcmpeqd %%mm2, %%mm2 \n\t"
166− "paddb %%mm2, %%mm2 \n\t"
167− PAVGB_MMX(%%mm3, %%mm0, %%mm1, %%mm2)
168− "movq %%mm1, (%2, %%"FF_REG_a") \n\t"
169− "add %3, %%"FF_REG_a" \n\t"
170−
171− "subl $2, %0 \n\t"
172− "jnz 1b \n\t"
173− :"+g"(h), "+S"(pixels)
174− :"D"(block), "r"((x86_reg)line_size)
175− :FF_REG_a, "memory");
176−}
177−#endif

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t