annotate libswscale/rgb2rgb_template.c @ 31368:f73663d84979

Replace common options template by a common options array. This solution works just as well, but avoids a separate template file that needs to be #included from multiple places. The end result is simpler since common options and those MPlayer and MEncoder are now in only one file.
author diego
date Wed, 16 Jun 2010 18:59:10 +0000
parents 50b51e6987bd
children 54b48f83d02b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1 /*
27158
65b8334df960 spelling/grammar/wording overhaul
diego
parents: 26925
diff changeset
2 * software RGB to RGB converter
65b8334df960 spelling/grammar/wording overhaul
diego
parents: 26925
diff changeset
3 * pluralize by software PAL8 to RGB converter
65b8334df960 spelling/grammar/wording overhaul
diego
parents: 26925
diff changeset
4 * software YUV to YUV converter
65b8334df960 spelling/grammar/wording overhaul
diego
parents: 26925
diff changeset
5 * software YUV to RGB converter
65b8334df960 spelling/grammar/wording overhaul
diego
parents: 26925
diff changeset
6 * Written by Nick Kurshev.
65b8334df960 spelling/grammar/wording overhaul
diego
parents: 26925
diff changeset
7 * palette & YUV & runtime CPU stuff by Michael (michaelni@gmx.at)
65b8334df960 spelling/grammar/wording overhaul
diego
parents: 26925
diff changeset
8 * lot of big-endian byte order fixes by Alex Beregszaszi
19703
ad7f49a1ba95 Add official GPL header to make license explicit as discussed on ffmpeg-devel.
diego
parents: 19396
diff changeset
9 *
20094
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 19703
diff changeset
10 * This file is part of FFmpeg.
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 19703
diff changeset
11 *
30923
0be6ed163321 libswscale: Relicense almost all x86 assembler optimizations as LGPL.
diego
parents: 30264
diff changeset
12 * FFmpeg is free software; you can redistribute it and/or
0be6ed163321 libswscale: Relicense almost all x86 assembler optimizations as LGPL.
diego
parents: 30264
diff changeset
13 * modify it under the terms of the GNU Lesser General Public
0be6ed163321 libswscale: Relicense almost all x86 assembler optimizations as LGPL.
diego
parents: 30264
diff changeset
14 * License as published by the Free Software Foundation; either
0be6ed163321 libswscale: Relicense almost all x86 assembler optimizations as LGPL.
diego
parents: 30264
diff changeset
15 * version 2.1 of the License, or (at your option) any later version.
19703
ad7f49a1ba95 Add official GPL header to make license explicit as discussed on ffmpeg-devel.
diego
parents: 19396
diff changeset
16 *
20094
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 19703
diff changeset
17 * FFmpeg is distributed in the hope that it will be useful,
19703
ad7f49a1ba95 Add official GPL header to make license explicit as discussed on ffmpeg-devel.
diego
parents: 19396
diff changeset
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
30923
0be6ed163321 libswscale: Relicense almost all x86 assembler optimizations as LGPL.
diego
parents: 30264
diff changeset
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
0be6ed163321 libswscale: Relicense almost all x86 assembler optimizations as LGPL.
diego
parents: 30264
diff changeset
20 * Lesser General Public License for more details.
19703
ad7f49a1ba95 Add official GPL header to make license explicit as discussed on ffmpeg-devel.
diego
parents: 19396
diff changeset
21 *
30923
0be6ed163321 libswscale: Relicense almost all x86 assembler optimizations as LGPL.
diego
parents: 30264
diff changeset
22 * You should have received a copy of the GNU Lesser General Public
0be6ed163321 libswscale: Relicense almost all x86 assembler optimizations as LGPL.
diego
parents: 30264
diff changeset
23 * License along with FFmpeg; if not, write to the Free Software
23702
5159b5f8784e license header consistency cosmetics
diego
parents: 23536
diff changeset
24 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
25 */
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
26
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
27 #include <stddef.h>
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
28
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
29 #undef PREFETCH
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
30 #undef MOVNTQ
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
31 #undef EMMS
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
32 #undef SFENCE
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
33 #undef MMREG_SIZE
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
34 #undef PAVGB
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
35
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
36 #if HAVE_SSE2
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
37 #define MMREG_SIZE 16
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
38 #else
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
39 #define MMREG_SIZE 8
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
40 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
41
28323
99c49467ebbc HAVE_3DNOW --> HAVE_AMD3DNOW to sync with latest configure changes.
diego
parents: 28276
diff changeset
42 #if HAVE_AMD3DNOW
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
43 #define PREFETCH "prefetch"
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
44 #define PAVGB "pavgusb"
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
45 #elif HAVE_MMX2
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
46 #define PREFETCH "prefetchnta"
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
47 #define PAVGB "pavgb"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
48 #else
20724
b8fe18a742ce Fix MacIntel build: "/nop" is illegal on Apple's older version of GAS
gpoirier
parents: 20094
diff changeset
49 #define PREFETCH " # nop"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
50 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
51
28323
99c49467ebbc HAVE_3DNOW --> HAVE_AMD3DNOW to sync with latest configure changes.
diego
parents: 28276
diff changeset
52 #if HAVE_AMD3DNOW
27782
13b72e7bf7ac cosmetics: typo fix
diego
parents: 27744
diff changeset
53 /* On K6 femms is faster than emms. On K7 femms is directly mapped to emms. */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
54 #define EMMS "femms"
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
55 #else
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
56 #define EMMS "emms"
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
57 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
58
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
59 #if HAVE_MMX2
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
60 #define MOVNTQ "movntq"
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
61 #define SFENCE "sfence"
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
62 #else
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
63 #define MOVNTQ "movq"
20724
b8fe18a742ce Fix MacIntel build: "/nop" is illegal on Apple's older version of GAS
gpoirier
parents: 20094
diff changeset
64 #define SFENCE " # nop"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
65 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
66
27486
e05965c550fc rgb vs bgr fix for the unscaled converters.
michael
parents: 27158
diff changeset
67 static inline void RENAME(rgb24tobgr32)(const uint8_t *src, uint8_t *dst, long src_size)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
68 {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
69 uint8_t *dest = dst;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
70 const uint8_t *s = src;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
71 const uint8_t *end;
29612
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
72 #if HAVE_MMX
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
73 const uint8_t *mm_end;
29612
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
74 #endif
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
75 end = s + src_size;
29612
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
76 #if HAVE_MMX
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
77 __asm__ volatile(PREFETCH" %0"::"m"(*s):"memory");
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
78 mm_end = end - 23;
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
79 __asm__ volatile("movq %0, %%mm7"::"m"(mask32a):"memory");
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
80 while (s < mm_end) {
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
81 __asm__ volatile(
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
82 PREFETCH" 32%1 \n\t"
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
83 "movd %1, %%mm0 \n\t"
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
84 "punpckldq 3%1, %%mm0 \n\t"
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
85 "movd 6%1, %%mm1 \n\t"
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
86 "punpckldq 9%1, %%mm1 \n\t"
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
87 "movd 12%1, %%mm2 \n\t"
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
88 "punpckldq 15%1, %%mm2 \n\t"
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
89 "movd 18%1, %%mm3 \n\t"
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
90 "punpckldq 21%1, %%mm3 \n\t"
28721
267dd38c800e When converting from a non alpha format to an alpha format, defaults to all ones rather than all zeroes
sdrik
parents: 28323
diff changeset
91 "por %%mm7, %%mm0 \n\t"
267dd38c800e When converting from a non alpha format to an alpha format, defaults to all ones rather than all zeroes
sdrik
parents: 28323
diff changeset
92 "por %%mm7, %%mm1 \n\t"
267dd38c800e When converting from a non alpha format to an alpha format, defaults to all ones rather than all zeroes
sdrik
parents: 28323
diff changeset
93 "por %%mm7, %%mm2 \n\t"
267dd38c800e When converting from a non alpha format to an alpha format, defaults to all ones rather than all zeroes
sdrik
parents: 28323
diff changeset
94 "por %%mm7, %%mm3 \n\t"
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
95 MOVNTQ" %%mm0, %0 \n\t"
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
96 MOVNTQ" %%mm1, 8%0 \n\t"
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
97 MOVNTQ" %%mm2, 16%0 \n\t"
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
98 MOVNTQ" %%mm3, 24%0"
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
99 :"=m"(*dest)
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
100 :"m"(*s)
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
101 :"memory");
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
102 dest += 32;
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
103 s += 24;
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
104 }
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
105 __asm__ volatile(SFENCE:::"memory");
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
106 __asm__ volatile(EMMS:::"memory");
29612
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
107 #endif
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
108 while (s < end) {
29612
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
109 #if HAVE_BIGENDIAN
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
110 /* RGB24 (= R,G,B) -> RGB32 (= A,B,G,R) */
28721
267dd38c800e When converting from a non alpha format to an alpha format, defaults to all ones rather than all zeroes
sdrik
parents: 28323
diff changeset
111 *dest++ = 255;
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
112 *dest++ = s[2];
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
113 *dest++ = s[1];
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
114 *dest++ = s[0];
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
115 s+=3;
29612
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
116 #else
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
117 *dest++ = *s++;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
118 *dest++ = *s++;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
119 *dest++ = *s++;
28721
267dd38c800e When converting from a non alpha format to an alpha format, defaults to all ones rather than all zeroes
sdrik
parents: 28323
diff changeset
120 *dest++ = 255;
29612
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
121 #endif
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
122 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
123 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
124
30936
50b51e6987bd Replace some "m" constraints by MANGLE to avoid issues with some compilers not
reimar
parents: 30923
diff changeset
125 #define STORE_BGR24_MMX \
50b51e6987bd Replace some "m" constraints by MANGLE to avoid issues with some compilers not
reimar
parents: 30923
diff changeset
126 "psrlq $8, %%mm2 \n\t" \
50b51e6987bd Replace some "m" constraints by MANGLE to avoid issues with some compilers not
reimar
parents: 30923
diff changeset
127 "psrlq $8, %%mm3 \n\t" \
50b51e6987bd Replace some "m" constraints by MANGLE to avoid issues with some compilers not
reimar
parents: 30923
diff changeset
128 "psrlq $8, %%mm6 \n\t" \
50b51e6987bd Replace some "m" constraints by MANGLE to avoid issues with some compilers not
reimar
parents: 30923
diff changeset
129 "psrlq $8, %%mm7 \n\t" \
50b51e6987bd Replace some "m" constraints by MANGLE to avoid issues with some compilers not
reimar
parents: 30923
diff changeset
130 "pand "MANGLE(mask24l)", %%mm0\n\t" \
50b51e6987bd Replace some "m" constraints by MANGLE to avoid issues with some compilers not
reimar
parents: 30923
diff changeset
131 "pand "MANGLE(mask24l)", %%mm1\n\t" \
50b51e6987bd Replace some "m" constraints by MANGLE to avoid issues with some compilers not
reimar
parents: 30923
diff changeset
132 "pand "MANGLE(mask24l)", %%mm4\n\t" \
50b51e6987bd Replace some "m" constraints by MANGLE to avoid issues with some compilers not
reimar
parents: 30923
diff changeset
133 "pand "MANGLE(mask24l)", %%mm5\n\t" \
50b51e6987bd Replace some "m" constraints by MANGLE to avoid issues with some compilers not
reimar
parents: 30923
diff changeset
134 "pand "MANGLE(mask24h)", %%mm2\n\t" \
50b51e6987bd Replace some "m" constraints by MANGLE to avoid issues with some compilers not
reimar
parents: 30923
diff changeset
135 "pand "MANGLE(mask24h)", %%mm3\n\t" \
50b51e6987bd Replace some "m" constraints by MANGLE to avoid issues with some compilers not
reimar
parents: 30923
diff changeset
136 "pand "MANGLE(mask24h)", %%mm6\n\t" \
50b51e6987bd Replace some "m" constraints by MANGLE to avoid issues with some compilers not
reimar
parents: 30923
diff changeset
137 "pand "MANGLE(mask24h)", %%mm7\n\t" \
50b51e6987bd Replace some "m" constraints by MANGLE to avoid issues with some compilers not
reimar
parents: 30923
diff changeset
138 "por %%mm2, %%mm0 \n\t" \
50b51e6987bd Replace some "m" constraints by MANGLE to avoid issues with some compilers not
reimar
parents: 30923
diff changeset
139 "por %%mm3, %%mm1 \n\t" \
50b51e6987bd Replace some "m" constraints by MANGLE to avoid issues with some compilers not
reimar
parents: 30923
diff changeset
140 "por %%mm6, %%mm4 \n\t" \
50b51e6987bd Replace some "m" constraints by MANGLE to avoid issues with some compilers not
reimar
parents: 30923
diff changeset
141 "por %%mm7, %%mm5 \n\t" \
50b51e6987bd Replace some "m" constraints by MANGLE to avoid issues with some compilers not
reimar
parents: 30923
diff changeset
142 \
50b51e6987bd Replace some "m" constraints by MANGLE to avoid issues with some compilers not
reimar
parents: 30923
diff changeset
143 "movq %%mm1, %%mm2 \n\t" \
50b51e6987bd Replace some "m" constraints by MANGLE to avoid issues with some compilers not
reimar
parents: 30923
diff changeset
144 "movq %%mm4, %%mm3 \n\t" \
50b51e6987bd Replace some "m" constraints by MANGLE to avoid issues with some compilers not
reimar
parents: 30923
diff changeset
145 "psllq $48, %%mm2 \n\t" \
50b51e6987bd Replace some "m" constraints by MANGLE to avoid issues with some compilers not
reimar
parents: 30923
diff changeset
146 "psllq $32, %%mm3 \n\t" \
50b51e6987bd Replace some "m" constraints by MANGLE to avoid issues with some compilers not
reimar
parents: 30923
diff changeset
147 "pand "MANGLE(mask24hh)", %%mm2\n\t" \
50b51e6987bd Replace some "m" constraints by MANGLE to avoid issues with some compilers not
reimar
parents: 30923
diff changeset
148 "pand "MANGLE(mask24hhh)", %%mm3\n\t" \
50b51e6987bd Replace some "m" constraints by MANGLE to avoid issues with some compilers not
reimar
parents: 30923
diff changeset
149 "por %%mm2, %%mm0 \n\t" \
50b51e6987bd Replace some "m" constraints by MANGLE to avoid issues with some compilers not
reimar
parents: 30923
diff changeset
150 "psrlq $16, %%mm1 \n\t" \
50b51e6987bd Replace some "m" constraints by MANGLE to avoid issues with some compilers not
reimar
parents: 30923
diff changeset
151 "psrlq $32, %%mm4 \n\t" \
50b51e6987bd Replace some "m" constraints by MANGLE to avoid issues with some compilers not
reimar
parents: 30923
diff changeset
152 "psllq $16, %%mm5 \n\t" \
50b51e6987bd Replace some "m" constraints by MANGLE to avoid issues with some compilers not
reimar
parents: 30923
diff changeset
153 "por %%mm3, %%mm1 \n\t" \
50b51e6987bd Replace some "m" constraints by MANGLE to avoid issues with some compilers not
reimar
parents: 30923
diff changeset
154 "pand "MANGLE(mask24hhhh)", %%mm5\n\t" \
50b51e6987bd Replace some "m" constraints by MANGLE to avoid issues with some compilers not
reimar
parents: 30923
diff changeset
155 "por %%mm5, %%mm4 \n\t" \
50b51e6987bd Replace some "m" constraints by MANGLE to avoid issues with some compilers not
reimar
parents: 30923
diff changeset
156 \
50b51e6987bd Replace some "m" constraints by MANGLE to avoid issues with some compilers not
reimar
parents: 30923
diff changeset
157 MOVNTQ" %%mm0, %0 \n\t" \
50b51e6987bd Replace some "m" constraints by MANGLE to avoid issues with some compilers not
reimar
parents: 30923
diff changeset
158 MOVNTQ" %%mm1, 8%0 \n\t" \
50b51e6987bd Replace some "m" constraints by MANGLE to avoid issues with some compilers not
reimar
parents: 30923
diff changeset
159 MOVNTQ" %%mm4, 16%0"
50b51e6987bd Replace some "m" constraints by MANGLE to avoid issues with some compilers not
reimar
parents: 30923
diff changeset
160
50b51e6987bd Replace some "m" constraints by MANGLE to avoid issues with some compilers not
reimar
parents: 30923
diff changeset
161
27486
e05965c550fc rgb vs bgr fix for the unscaled converters.
michael
parents: 27158
diff changeset
162 static inline void RENAME(rgb32tobgr24)(const uint8_t *src, uint8_t *dst, long src_size)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
163 {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
164 uint8_t *dest = dst;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
165 const uint8_t *s = src;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
166 const uint8_t *end;
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
167 #if HAVE_MMX
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
168 const uint8_t *mm_end;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
169 #endif
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
170 end = s + src_size;
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
171 #if HAVE_MMX
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
172 __asm__ volatile(PREFETCH" %0"::"m"(*s):"memory");
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
173 mm_end = end - 31;
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
174 while (s < mm_end) {
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
175 __asm__ volatile(
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
176 PREFETCH" 32%1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
177 "movq %1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
178 "movq 8%1, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
179 "movq 16%1, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
180 "movq 24%1, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
181 "movq %%mm0, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
182 "movq %%mm1, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
183 "movq %%mm4, %%mm6 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
184 "movq %%mm5, %%mm7 \n\t"
30936
50b51e6987bd Replace some "m" constraints by MANGLE to avoid issues with some compilers not
reimar
parents: 30923
diff changeset
185 STORE_BGR24_MMX
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
186 :"=m"(*dest)
30936
50b51e6987bd Replace some "m" constraints by MANGLE to avoid issues with some compilers not
reimar
parents: 30923
diff changeset
187 :"m"(*s)
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
188 :"memory");
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
189 dest += 24;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
190 s += 32;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
191 }
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
192 __asm__ volatile(SFENCE:::"memory");
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
193 __asm__ volatile(EMMS:::"memory");
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
194 #endif
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
195 while (s < end) {
29397
2d985cc879c9 Replace WORDS_BIGENDIAN with HAVE_BIGENDIAN
mru
parents: 29148
diff changeset
196 #if HAVE_BIGENDIAN
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
197 /* RGB32 (= A,B,G,R) -> RGB24 (= R,G,B) */
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
198 s++;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
199 dest[2] = *s++;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
200 dest[1] = *s++;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
201 dest[0] = *s++;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
202 dest += 3;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
203 #else
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
204 *dest++ = *s++;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
205 *dest++ = *s++;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
206 *dest++ = *s++;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
207 s++;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
208 #endif
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
209 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
210 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
211
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
212 /*
27158
65b8334df960 spelling/grammar/wording overhaul
diego
parents: 26925
diff changeset
213 original by Strepto/Astral
65b8334df960 spelling/grammar/wording overhaul
diego
parents: 26925
diff changeset
214 ported to gcc & bugfixed: A'rpi
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
215 MMX2, 3DNOW optimization by Nick Kurshev
27158
65b8334df960 spelling/grammar/wording overhaul
diego
parents: 26925
diff changeset
216 32-bit C version, and and&add trick by Michael Niedermayer
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
217 */
25750
06bf0eb70a55 Cosmetics: whitespaces
benoit
parents: 25749
diff changeset
218 static inline void RENAME(rgb15to16)(const uint8_t *src, uint8_t *dst, long src_size)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
219 {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
220 register const uint8_t* s=src;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
221 register uint8_t* d=dst;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
222 register const uint8_t *end;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
223 const uint8_t *mm_end;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
224 end = s + src_size;
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
225 #if HAVE_MMX
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
226 __asm__ volatile(PREFETCH" %0"::"m"(*s));
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
227 __asm__ volatile("movq %0, %%mm4"::"m"(mask15s));
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
228 mm_end = end - 15;
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
229 while (s<mm_end) {
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
230 __asm__ volatile(
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
231 PREFETCH" 32%1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
232 "movq %1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
233 "movq 8%1, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
234 "movq %%mm0, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
235 "movq %%mm2, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
236 "pand %%mm4, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
237 "pand %%mm4, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
238 "paddw %%mm1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
239 "paddw %%mm3, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
240 MOVNTQ" %%mm0, %0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
241 MOVNTQ" %%mm2, 8%0"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
242 :"=m"(*d)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
243 :"m"(*s)
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
244 );
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
245 d+=16;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
246 s+=16;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
247 }
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
248 __asm__ volatile(SFENCE:::"memory");
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
249 __asm__ volatile(EMMS:::"memory");
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
250 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
251 mm_end = end - 3;
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
252 while (s < mm_end) {
26910
da8e02081774 add const, suppress warnings
bcoudurier
parents: 26909
diff changeset
253 register unsigned x= *((const uint32_t *)s);
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
254 *((uint32_t *)d) = (x&0x7FFF7FFF) + (x&0x7FE07FE0);
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
255 d+=4;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
256 s+=4;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
257 }
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
258 if (s < end) {
26910
da8e02081774 add const, suppress warnings
bcoudurier
parents: 26909
diff changeset
259 register unsigned short x= *((const uint16_t *)s);
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
260 *((uint16_t *)d) = (x&0x7FFF) + (x&0x7FE0);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
261 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
262 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
263
25750
06bf0eb70a55 Cosmetics: whitespaces
benoit
parents: 25749
diff changeset
264 static inline void RENAME(rgb16to15)(const uint8_t *src, uint8_t *dst, long src_size)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
265 {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
266 register const uint8_t* s=src;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
267 register uint8_t* d=dst;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
268 register const uint8_t *end;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
269 const uint8_t *mm_end;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
270 end = s + src_size;
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
271 #if HAVE_MMX
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
272 __asm__ volatile(PREFETCH" %0"::"m"(*s));
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
273 __asm__ volatile("movq %0, %%mm7"::"m"(mask15rg));
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
274 __asm__ volatile("movq %0, %%mm6"::"m"(mask15b));
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
275 mm_end = end - 15;
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
276 while (s<mm_end) {
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
277 __asm__ volatile(
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
278 PREFETCH" 32%1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
279 "movq %1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
280 "movq 8%1, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
281 "movq %%mm0, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
282 "movq %%mm2, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
283 "psrlq $1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
284 "psrlq $1, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
285 "pand %%mm7, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
286 "pand %%mm7, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
287 "pand %%mm6, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
288 "pand %%mm6, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
289 "por %%mm1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
290 "por %%mm3, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
291 MOVNTQ" %%mm0, %0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
292 MOVNTQ" %%mm2, 8%0"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
293 :"=m"(*d)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
294 :"m"(*s)
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
295 );
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
296 d+=16;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
297 s+=16;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
298 }
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
299 __asm__ volatile(SFENCE:::"memory");
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
300 __asm__ volatile(EMMS:::"memory");
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
301 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
302 mm_end = end - 3;
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
303 while (s < mm_end) {
26925
3f6d2ca29727 restore needed cast to correct type with const
bcoudurier
parents: 26910
diff changeset
304 register uint32_t x= *((const uint32_t*)s);
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
305 *((uint32_t *)d) = ((x>>1)&0x7FE07FE0) | (x&0x001F001F);
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
306 s+=4;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
307 d+=4;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
308 }
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
309 if (s < end) {
26925
3f6d2ca29727 restore needed cast to correct type with const
bcoudurier
parents: 26910
diff changeset
310 register uint16_t x= *((const uint16_t*)s);
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
311 *((uint16_t *)d) = ((x>>1)&0x7FE0) | (x&0x001F);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
312 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
313 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
314
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
315 static inline void RENAME(rgb32to16)(const uint8_t *src, uint8_t *dst, long src_size)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
316 {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
317 const uint8_t *s = src;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
318 const uint8_t *end;
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
319 #if HAVE_MMX
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
320 const uint8_t *mm_end;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
321 #endif
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
322 uint16_t *d = (uint16_t *)dst;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
323 end = s + src_size;
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
324 #if HAVE_MMX
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
325 mm_end = end - 15;
25109
a362a3b42e24 comment spelling/grammar fixes
diego
parents: 23702
diff changeset
326 #if 1 //is faster only if multiplies are reasonably fast (FIXME figure out on which CPUs this is faster, on Athlon it is slightly faster)
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
327 __asm__ volatile(
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
328 "movq %3, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
329 "movq %4, %%mm6 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
330 "movq %5, %%mm7 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
331 "jmp 2f \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
332 ASMALIGN(4)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
333 "1: \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
334 PREFETCH" 32(%1) \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
335 "movd (%1), %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
336 "movd 4(%1), %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
337 "punpckldq 8(%1), %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
338 "punpckldq 12(%1), %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
339 "movq %%mm0, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
340 "movq %%mm3, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
341 "pand %%mm6, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
342 "pand %%mm6, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
343 "pmaddwd %%mm7, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
344 "pmaddwd %%mm7, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
345 "pand %%mm5, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
346 "pand %%mm5, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
347 "por %%mm1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
348 "por %%mm4, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
349 "psrld $5, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
350 "pslld $11, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
351 "por %%mm3, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
352 MOVNTQ" %%mm0, (%0) \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
353 "add $16, %1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
354 "add $8, %0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
355 "2: \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
356 "cmp %2, %1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
357 " jb 1b \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
358 : "+r" (d), "+r"(s)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
359 : "r" (mm_end), "m" (mask3216g), "m" (mask3216br), "m" (mul3216)
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
360 );
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
361 #else
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
362 __asm__ volatile(PREFETCH" %0"::"m"(*src):"memory");
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
363 __asm__ volatile(
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
364 "movq %0, %%mm7 \n\t"
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
365 "movq %1, %%mm6 \n\t"
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
366 ::"m"(red_16mask),"m"(green_16mask));
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
367 while (s < mm_end) {
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
368 __asm__ volatile(
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
369 PREFETCH" 32%1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
370 "movd %1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
371 "movd 4%1, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
372 "punpckldq 8%1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
373 "punpckldq 12%1, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
374 "movq %%mm0, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
375 "movq %%mm0, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
376 "movq %%mm3, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
377 "movq %%mm3, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
378 "psrlq $3, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
379 "psrlq $3, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
380 "pand %2, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
381 "pand %2, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
382 "psrlq $5, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
383 "psrlq $5, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
384 "pand %%mm6, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
385 "pand %%mm6, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
386 "psrlq $8, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
387 "psrlq $8, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
388 "pand %%mm7, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
389 "pand %%mm7, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
390 "por %%mm1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
391 "por %%mm4, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
392 "por %%mm2, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
393 "por %%mm5, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
394 "psllq $16, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
395 "por %%mm3, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
396 MOVNTQ" %%mm0, %0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
397 :"=m"(*d):"m"(*s),"m"(blue_16mask):"memory");
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
398 d += 4;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
399 s += 16;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
400 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
401 #endif
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
402 __asm__ volatile(SFENCE:::"memory");
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
403 __asm__ volatile(EMMS:::"memory");
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
404 #endif
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
405 while (s < end) {
26910
da8e02081774 add const, suppress warnings
bcoudurier
parents: 26909
diff changeset
406 register int rgb = *(const uint32_t*)s; s += 4;
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
407 *d++ = ((rgb&0xFF)>>3) + ((rgb&0xFC00)>>5) + ((rgb&0xF80000)>>8);
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
408 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
409 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
410
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
411 static inline void RENAME(rgb32tobgr16)(const uint8_t *src, uint8_t *dst, long src_size)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
412 {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
413 const uint8_t *s = src;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
414 const uint8_t *end;
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
415 #if HAVE_MMX
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
416 const uint8_t *mm_end;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
417 #endif
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
418 uint16_t *d = (uint16_t *)dst;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
419 end = s + src_size;
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
420 #if HAVE_MMX
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
421 __asm__ volatile(PREFETCH" %0"::"m"(*src):"memory");
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
422 __asm__ volatile(
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
423 "movq %0, %%mm7 \n\t"
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
424 "movq %1, %%mm6 \n\t"
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
425 ::"m"(red_16mask),"m"(green_16mask));
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
426 mm_end = end - 15;
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
427 while (s < mm_end) {
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
428 __asm__ volatile(
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
429 PREFETCH" 32%1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
430 "movd %1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
431 "movd 4%1, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
432 "punpckldq 8%1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
433 "punpckldq 12%1, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
434 "movq %%mm0, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
435 "movq %%mm0, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
436 "movq %%mm3, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
437 "movq %%mm3, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
438 "psllq $8, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
439 "psllq $8, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
440 "pand %%mm7, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
441 "pand %%mm7, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
442 "psrlq $5, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
443 "psrlq $5, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
444 "pand %%mm6, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
445 "pand %%mm6, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
446 "psrlq $19, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
447 "psrlq $19, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
448 "pand %2, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
449 "pand %2, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
450 "por %%mm1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
451 "por %%mm4, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
452 "por %%mm2, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
453 "por %%mm5, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
454 "psllq $16, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
455 "por %%mm3, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
456 MOVNTQ" %%mm0, %0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
457 :"=m"(*d):"m"(*s),"m"(blue_16mask):"memory");
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
458 d += 4;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
459 s += 16;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
460 }
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
461 __asm__ volatile(SFENCE:::"memory");
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
462 __asm__ volatile(EMMS:::"memory");
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
463 #endif
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
464 while (s < end) {
26910
da8e02081774 add const, suppress warnings
bcoudurier
parents: 26909
diff changeset
465 register int rgb = *(const uint32_t*)s; s += 4;
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
466 *d++ = ((rgb&0xF8)<<8) + ((rgb&0xFC00)>>5) + ((rgb&0xF80000)>>19);
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
467 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
468 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
469
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
470 static inline void RENAME(rgb32to15)(const uint8_t *src, uint8_t *dst, long src_size)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
471 {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
472 const uint8_t *s = src;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
473 const uint8_t *end;
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
474 #if HAVE_MMX
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
475 const uint8_t *mm_end;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
476 #endif
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
477 uint16_t *d = (uint16_t *)dst;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
478 end = s + src_size;
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
479 #if HAVE_MMX
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
480 mm_end = end - 15;
25109
a362a3b42e24 comment spelling/grammar fixes
diego
parents: 23702
diff changeset
481 #if 1 //is faster only if multiplies are reasonably fast (FIXME figure out on which CPUs this is faster, on Athlon it is slightly faster)
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
482 __asm__ volatile(
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
483 "movq %3, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
484 "movq %4, %%mm6 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
485 "movq %5, %%mm7 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
486 "jmp 2f \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
487 ASMALIGN(4)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
488 "1: \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
489 PREFETCH" 32(%1) \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
490 "movd (%1), %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
491 "movd 4(%1), %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
492 "punpckldq 8(%1), %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
493 "punpckldq 12(%1), %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
494 "movq %%mm0, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
495 "movq %%mm3, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
496 "pand %%mm6, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
497 "pand %%mm6, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
498 "pmaddwd %%mm7, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
499 "pmaddwd %%mm7, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
500 "pand %%mm5, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
501 "pand %%mm5, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
502 "por %%mm1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
503 "por %%mm4, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
504 "psrld $6, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
505 "pslld $10, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
506 "por %%mm3, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
507 MOVNTQ" %%mm0, (%0) \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
508 "add $16, %1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
509 "add $8, %0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
510 "2: \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
511 "cmp %2, %1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
512 " jb 1b \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
513 : "+r" (d), "+r"(s)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
514 : "r" (mm_end), "m" (mask3215g), "m" (mask3216br), "m" (mul3215)
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
515 );
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
516 #else
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
517 __asm__ volatile(PREFETCH" %0"::"m"(*src):"memory");
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
518 __asm__ volatile(
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
519 "movq %0, %%mm7 \n\t"
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
520 "movq %1, %%mm6 \n\t"
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
521 ::"m"(red_15mask),"m"(green_15mask));
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
522 while (s < mm_end) {
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
523 __asm__ volatile(
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
524 PREFETCH" 32%1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
525 "movd %1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
526 "movd 4%1, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
527 "punpckldq 8%1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
528 "punpckldq 12%1, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
529 "movq %%mm0, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
530 "movq %%mm0, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
531 "movq %%mm3, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
532 "movq %%mm3, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
533 "psrlq $3, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
534 "psrlq $3, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
535 "pand %2, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
536 "pand %2, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
537 "psrlq $6, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
538 "psrlq $6, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
539 "pand %%mm6, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
540 "pand %%mm6, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
541 "psrlq $9, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
542 "psrlq $9, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
543 "pand %%mm7, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
544 "pand %%mm7, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
545 "por %%mm1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
546 "por %%mm4, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
547 "por %%mm2, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
548 "por %%mm5, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
549 "psllq $16, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
550 "por %%mm3, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
551 MOVNTQ" %%mm0, %0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
552 :"=m"(*d):"m"(*s),"m"(blue_15mask):"memory");
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
553 d += 4;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
554 s += 16;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
555 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
556 #endif
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
557 __asm__ volatile(SFENCE:::"memory");
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
558 __asm__ volatile(EMMS:::"memory");
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
559 #endif
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
560 while (s < end) {
26910
da8e02081774 add const, suppress warnings
bcoudurier
parents: 26909
diff changeset
561 register int rgb = *(const uint32_t*)s; s += 4;
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
562 *d++ = ((rgb&0xFF)>>3) + ((rgb&0xF800)>>6) + ((rgb&0xF80000)>>9);
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
563 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
564 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
565
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
566 static inline void RENAME(rgb32tobgr15)(const uint8_t *src, uint8_t *dst, long src_size)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
567 {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
568 const uint8_t *s = src;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
569 const uint8_t *end;
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
570 #if HAVE_MMX
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
571 const uint8_t *mm_end;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
572 #endif
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
573 uint16_t *d = (uint16_t *)dst;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
574 end = s + src_size;
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
575 #if HAVE_MMX
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
576 __asm__ volatile(PREFETCH" %0"::"m"(*src):"memory");
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
577 __asm__ volatile(
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
578 "movq %0, %%mm7 \n\t"
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
579 "movq %1, %%mm6 \n\t"
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
580 ::"m"(red_15mask),"m"(green_15mask));
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
581 mm_end = end - 15;
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
582 while (s < mm_end) {
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
583 __asm__ volatile(
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
584 PREFETCH" 32%1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
585 "movd %1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
586 "movd 4%1, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
587 "punpckldq 8%1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
588 "punpckldq 12%1, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
589 "movq %%mm0, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
590 "movq %%mm0, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
591 "movq %%mm3, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
592 "movq %%mm3, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
593 "psllq $7, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
594 "psllq $7, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
595 "pand %%mm7, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
596 "pand %%mm7, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
597 "psrlq $6, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
598 "psrlq $6, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
599 "pand %%mm6, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
600 "pand %%mm6, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
601 "psrlq $19, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
602 "psrlq $19, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
603 "pand %2, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
604 "pand %2, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
605 "por %%mm1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
606 "por %%mm4, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
607 "por %%mm2, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
608 "por %%mm5, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
609 "psllq $16, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
610 "por %%mm3, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
611 MOVNTQ" %%mm0, %0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
612 :"=m"(*d):"m"(*s),"m"(blue_15mask):"memory");
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
613 d += 4;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
614 s += 16;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
615 }
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
616 __asm__ volatile(SFENCE:::"memory");
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
617 __asm__ volatile(EMMS:::"memory");
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
618 #endif
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
619 while (s < end) {
26910
da8e02081774 add const, suppress warnings
bcoudurier
parents: 26909
diff changeset
620 register int rgb = *(const uint32_t*)s; s += 4;
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
621 *d++ = ((rgb&0xF8)<<7) + ((rgb&0xF800)>>6) + ((rgb&0xF80000)>>19);
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
622 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
623 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
624
27486
e05965c550fc rgb vs bgr fix for the unscaled converters.
michael
parents: 27158
diff changeset
625 static inline void RENAME(rgb24tobgr16)(const uint8_t *src, uint8_t *dst, long src_size)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
626 {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
627 const uint8_t *s = src;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
628 const uint8_t *end;
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
629 #if HAVE_MMX
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
630 const uint8_t *mm_end;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
631 #endif
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
632 uint16_t *d = (uint16_t *)dst;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
633 end = s + src_size;
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
634 #if HAVE_MMX
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
635 __asm__ volatile(PREFETCH" %0"::"m"(*src):"memory");
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
636 __asm__ volatile(
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
637 "movq %0, %%mm7 \n\t"
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
638 "movq %1, %%mm6 \n\t"
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
639 ::"m"(red_16mask),"m"(green_16mask));
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
640 mm_end = end - 11;
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
641 while (s < mm_end) {
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
642 __asm__ volatile(
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
643 PREFETCH" 32%1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
644 "movd %1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
645 "movd 3%1, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
646 "punpckldq 6%1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
647 "punpckldq 9%1, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
648 "movq %%mm0, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
649 "movq %%mm0, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
650 "movq %%mm3, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
651 "movq %%mm3, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
652 "psrlq $3, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
653 "psrlq $3, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
654 "pand %2, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
655 "pand %2, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
656 "psrlq $5, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
657 "psrlq $5, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
658 "pand %%mm6, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
659 "pand %%mm6, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
660 "psrlq $8, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
661 "psrlq $8, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
662 "pand %%mm7, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
663 "pand %%mm7, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
664 "por %%mm1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
665 "por %%mm4, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
666 "por %%mm2, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
667 "por %%mm5, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
668 "psllq $16, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
669 "por %%mm3, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
670 MOVNTQ" %%mm0, %0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
671 :"=m"(*d):"m"(*s),"m"(blue_16mask):"memory");
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
672 d += 4;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
673 s += 12;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
674 }
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
675 __asm__ volatile(SFENCE:::"memory");
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
676 __asm__ volatile(EMMS:::"memory");
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
677 #endif
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
678 while (s < end) {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
679 const int b = *s++;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
680 const int g = *s++;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
681 const int r = *s++;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
682 *d++ = (b>>3) | ((g&0xFC)<<3) | ((r&0xF8)<<8);
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
683 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
684 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
685
27486
e05965c550fc rgb vs bgr fix for the unscaled converters.
michael
parents: 27158
diff changeset
686 static inline void RENAME(rgb24to16)(const uint8_t *src, uint8_t *dst, long src_size)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
687 {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
688 const uint8_t *s = src;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
689 const uint8_t *end;
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
690 #if HAVE_MMX
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
691 const uint8_t *mm_end;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
692 #endif
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
693 uint16_t *d = (uint16_t *)dst;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
694 end = s + src_size;
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
695 #if HAVE_MMX
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
696 __asm__ volatile(PREFETCH" %0"::"m"(*src):"memory");
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
697 __asm__ volatile(
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
698 "movq %0, %%mm7 \n\t"
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
699 "movq %1, %%mm6 \n\t"
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
700 ::"m"(red_16mask),"m"(green_16mask));
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
701 mm_end = end - 15;
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
702 while (s < mm_end) {
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
703 __asm__ volatile(
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
704 PREFETCH" 32%1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
705 "movd %1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
706 "movd 3%1, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
707 "punpckldq 6%1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
708 "punpckldq 9%1, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
709 "movq %%mm0, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
710 "movq %%mm0, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
711 "movq %%mm3, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
712 "movq %%mm3, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
713 "psllq $8, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
714 "psllq $8, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
715 "pand %%mm7, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
716 "pand %%mm7, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
717 "psrlq $5, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
718 "psrlq $5, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
719 "pand %%mm6, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
720 "pand %%mm6, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
721 "psrlq $19, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
722 "psrlq $19, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
723 "pand %2, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
724 "pand %2, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
725 "por %%mm1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
726 "por %%mm4, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
727 "por %%mm2, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
728 "por %%mm5, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
729 "psllq $16, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
730 "por %%mm3, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
731 MOVNTQ" %%mm0, %0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
732 :"=m"(*d):"m"(*s),"m"(blue_16mask):"memory");
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
733 d += 4;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
734 s += 12;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
735 }
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
736 __asm__ volatile(SFENCE:::"memory");
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
737 __asm__ volatile(EMMS:::"memory");
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
738 #endif
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
739 while (s < end) {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
740 const int r = *s++;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
741 const int g = *s++;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
742 const int b = *s++;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
743 *d++ = (b>>3) | ((g&0xFC)<<3) | ((r&0xF8)<<8);
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
744 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
745 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
746
27486
e05965c550fc rgb vs bgr fix for the unscaled converters.
michael
parents: 27158
diff changeset
747 static inline void RENAME(rgb24tobgr15)(const uint8_t *src, uint8_t *dst, long src_size)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
748 {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
749 const uint8_t *s = src;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
750 const uint8_t *end;
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
751 #if HAVE_MMX
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
752 const uint8_t *mm_end;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
753 #endif
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
754 uint16_t *d = (uint16_t *)dst;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
755 end = s + src_size;
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
756 #if HAVE_MMX
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
757 __asm__ volatile(PREFETCH" %0"::"m"(*src):"memory");
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
758 __asm__ volatile(
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
759 "movq %0, %%mm7 \n\t"
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
760 "movq %1, %%mm6 \n\t"
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
761 ::"m"(red_15mask),"m"(green_15mask));
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
762 mm_end = end - 11;
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
763 while (s < mm_end) {
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
764 __asm__ volatile(
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
765 PREFETCH" 32%1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
766 "movd %1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
767 "movd 3%1, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
768 "punpckldq 6%1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
769 "punpckldq 9%1, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
770 "movq %%mm0, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
771 "movq %%mm0, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
772 "movq %%mm3, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
773 "movq %%mm3, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
774 "psrlq $3, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
775 "psrlq $3, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
776 "pand %2, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
777 "pand %2, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
778 "psrlq $6, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
779 "psrlq $6, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
780 "pand %%mm6, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
781 "pand %%mm6, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
782 "psrlq $9, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
783 "psrlq $9, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
784 "pand %%mm7, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
785 "pand %%mm7, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
786 "por %%mm1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
787 "por %%mm4, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
788 "por %%mm2, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
789 "por %%mm5, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
790 "psllq $16, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
791 "por %%mm3, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
792 MOVNTQ" %%mm0, %0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
793 :"=m"(*d):"m"(*s),"m"(blue_15mask):"memory");
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
794 d += 4;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
795 s += 12;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
796 }
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
797 __asm__ volatile(SFENCE:::"memory");
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
798 __asm__ volatile(EMMS:::"memory");
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
799 #endif
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
800 while (s < end) {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
801 const int b = *s++;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
802 const int g = *s++;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
803 const int r = *s++;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
804 *d++ = (b>>3) | ((g&0xF8)<<2) | ((r&0xF8)<<7);
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
805 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
806 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
807
27486
e05965c550fc rgb vs bgr fix for the unscaled converters.
michael
parents: 27158
diff changeset
808 static inline void RENAME(rgb24to15)(const uint8_t *src, uint8_t *dst, long src_size)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
809 {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
810 const uint8_t *s = src;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
811 const uint8_t *end;
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
812 #if HAVE_MMX
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
813 const uint8_t *mm_end;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
814 #endif
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
815 uint16_t *d = (uint16_t *)dst;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
816 end = s + src_size;
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
817 #if HAVE_MMX
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
818 __asm__ volatile(PREFETCH" %0"::"m"(*src):"memory");
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
819 __asm__ volatile(
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
820 "movq %0, %%mm7 \n\t"
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
821 "movq %1, %%mm6 \n\t"
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
822 ::"m"(red_15mask),"m"(green_15mask));
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
823 mm_end = end - 15;
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
824 while (s < mm_end) {
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
825 __asm__ volatile(
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
826 PREFETCH" 32%1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
827 "movd %1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
828 "movd 3%1, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
829 "punpckldq 6%1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
830 "punpckldq 9%1, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
831 "movq %%mm0, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
832 "movq %%mm0, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
833 "movq %%mm3, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
834 "movq %%mm3, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
835 "psllq $7, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
836 "psllq $7, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
837 "pand %%mm7, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
838 "pand %%mm7, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
839 "psrlq $6, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
840 "psrlq $6, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
841 "pand %%mm6, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
842 "pand %%mm6, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
843 "psrlq $19, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
844 "psrlq $19, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
845 "pand %2, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
846 "pand %2, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
847 "por %%mm1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
848 "por %%mm4, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
849 "por %%mm2, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
850 "por %%mm5, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
851 "psllq $16, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
852 "por %%mm3, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
853 MOVNTQ" %%mm0, %0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
854 :"=m"(*d):"m"(*s),"m"(blue_15mask):"memory");
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
855 d += 4;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
856 s += 12;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
857 }
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
858 __asm__ volatile(SFENCE:::"memory");
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
859 __asm__ volatile(EMMS:::"memory");
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
860 #endif
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
861 while (s < end) {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
862 const int r = *s++;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
863 const int g = *s++;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
864 const int b = *s++;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
865 *d++ = (b>>3) | ((g&0xF8)<<2) | ((r&0xF8)<<7);
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
866 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
867 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
868
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
869 /*
25109
a362a3b42e24 comment spelling/grammar fixes
diego
parents: 23702
diff changeset
870 I use less accurate approximation here by simply left-shifting the input
a362a3b42e24 comment spelling/grammar fixes
diego
parents: 23702
diff changeset
871 value and filling the low order bits with zeroes. This method improves PNG
a362a3b42e24 comment spelling/grammar fixes
diego
parents: 23702
diff changeset
872 compression but this scheme cannot reproduce white exactly, since it does
a362a3b42e24 comment spelling/grammar fixes
diego
parents: 23702
diff changeset
873 not generate an all-ones maximum value; the net effect is to darken the
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
874 image slightly.
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
875
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
876 The better method should be "left bit replication":
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
877
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
878 4 3 2 1 0
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
879 ---------
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
880 1 1 0 1 1
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
881
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
882 7 6 5 4 3 2 1 0
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
883 ----------------
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
884 1 1 0 1 1 1 1 0
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
885 |=======| |===|
27158
65b8334df960 spelling/grammar/wording overhaul
diego
parents: 26925
diff changeset
886 | leftmost bits repeated to fill open bits
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
887 |
27158
65b8334df960 spelling/grammar/wording overhaul
diego
parents: 26925
diff changeset
888 original bits
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
889 */
27486
e05965c550fc rgb vs bgr fix for the unscaled converters.
michael
parents: 27158
diff changeset
890 static inline void RENAME(rgb15tobgr24)(const uint8_t *src, uint8_t *dst, long src_size)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
891 {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
892 const uint16_t *end;
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
893 #if HAVE_MMX
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
894 const uint16_t *mm_end;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
895 #endif
26909
b7eeb3590bc9 remove useless casts
bcoudurier
parents: 26059
diff changeset
896 uint8_t *d = dst;
26910
da8e02081774 add const, suppress warnings
bcoudurier
parents: 26909
diff changeset
897 const uint16_t *s = (const uint16_t*)src;
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
898 end = s + src_size/2;
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
899 #if HAVE_MMX
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
900 __asm__ volatile(PREFETCH" %0"::"m"(*s):"memory");
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
901 mm_end = end - 7;
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
902 while (s < mm_end) {
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
903 __asm__ volatile(
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
904 PREFETCH" 32%1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
905 "movq %1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
906 "movq %1, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
907 "movq %1, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
908 "pand %2, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
909 "pand %3, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
910 "pand %4, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
911 "psllq $3, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
912 "psrlq $2, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
913 "psrlq $7, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
914 "movq %%mm0, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
915 "movq %%mm1, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
916 "movq %%mm2, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
917 "punpcklwd %5, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
918 "punpcklwd %5, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
919 "punpcklwd %5, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
920 "punpckhwd %5, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
921 "punpckhwd %5, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
922 "punpckhwd %5, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
923 "psllq $8, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
924 "psllq $16, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
925 "por %%mm1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
926 "por %%mm2, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
927 "psllq $8, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
928 "psllq $16, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
929 "por %%mm4, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
930 "por %%mm5, %%mm3 \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
931
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
932 "movq %%mm0, %%mm6 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
933 "movq %%mm3, %%mm7 \n\t"
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 23004
diff changeset
934
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
935 "movq 8%1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
936 "movq 8%1, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
937 "movq 8%1, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
938 "pand %2, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
939 "pand %3, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
940 "pand %4, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
941 "psllq $3, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
942 "psrlq $2, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
943 "psrlq $7, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
944 "movq %%mm0, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
945 "movq %%mm1, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
946 "movq %%mm2, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
947 "punpcklwd %5, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
948 "punpcklwd %5, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
949 "punpcklwd %5, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
950 "punpckhwd %5, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
951 "punpckhwd %5, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
952 "punpckhwd %5, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
953 "psllq $8, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
954 "psllq $16, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
955 "por %%mm1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
956 "por %%mm2, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
957 "psllq $8, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
958 "psllq $16, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
959 "por %%mm4, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
960 "por %%mm5, %%mm3 \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
961
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
962 :"=m"(*d)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
963 :"m"(*s),"m"(mask15b),"m"(mask15g),"m"(mask15r), "m"(mmx_null)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
964 :"memory");
27158
65b8334df960 spelling/grammar/wording overhaul
diego
parents: 26925
diff changeset
965 /* borrowed 32 to 24 */
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
966 __asm__ volatile(
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
967 "movq %%mm0, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
968 "movq %%mm3, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
969 "movq %%mm6, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
970 "movq %%mm7, %%mm1 \n\t"
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 23004
diff changeset
971
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
972 "movq %%mm4, %%mm6 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
973 "movq %%mm5, %%mm7 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
974 "movq %%mm0, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
975 "movq %%mm1, %%mm3 \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
976
30936
50b51e6987bd Replace some "m" constraints by MANGLE to avoid issues with some compilers not
reimar
parents: 30923
diff changeset
977 STORE_BGR24_MMX
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
978
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
979 :"=m"(*d)
30936
50b51e6987bd Replace some "m" constraints by MANGLE to avoid issues with some compilers not
reimar
parents: 30923
diff changeset
980 :"m"(*s)
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
981 :"memory");
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
982 d += 24;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
983 s += 8;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
984 }
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
985 __asm__ volatile(SFENCE:::"memory");
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
986 __asm__ volatile(EMMS:::"memory");
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
987 #endif
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
988 while (s < end) {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
989 register uint16_t bgr;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
990 bgr = *s++;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
991 *d++ = (bgr&0x1F)<<3;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
992 *d++ = (bgr&0x3E0)>>2;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
993 *d++ = (bgr&0x7C00)>>7;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
994 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
995 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
996
27486
e05965c550fc rgb vs bgr fix for the unscaled converters.
michael
parents: 27158
diff changeset
997 static inline void RENAME(rgb16tobgr24)(const uint8_t *src, uint8_t *dst, long src_size)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
998 {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
999 const uint16_t *end;
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
1000 #if HAVE_MMX
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1001 const uint16_t *mm_end;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1002 #endif
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1003 uint8_t *d = (uint8_t *)dst;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1004 const uint16_t *s = (const uint16_t *)src;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1005 end = s + src_size/2;
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
1006 #if HAVE_MMX
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
1007 __asm__ volatile(PREFETCH" %0"::"m"(*s):"memory");
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1008 mm_end = end - 7;
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
1009 while (s < mm_end) {
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
1010 __asm__ volatile(
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1011 PREFETCH" 32%1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1012 "movq %1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1013 "movq %1, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1014 "movq %1, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1015 "pand %2, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1016 "pand %3, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1017 "pand %4, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1018 "psllq $3, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1019 "psrlq $3, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1020 "psrlq $8, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1021 "movq %%mm0, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1022 "movq %%mm1, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1023 "movq %%mm2, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1024 "punpcklwd %5, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1025 "punpcklwd %5, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1026 "punpcklwd %5, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1027 "punpckhwd %5, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1028 "punpckhwd %5, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1029 "punpckhwd %5, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1030 "psllq $8, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1031 "psllq $16, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1032 "por %%mm1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1033 "por %%mm2, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1034 "psllq $8, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1035 "psllq $16, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1036 "por %%mm4, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1037 "por %%mm5, %%mm3 \n\t"
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 23004
diff changeset
1038
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1039 "movq %%mm0, %%mm6 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1040 "movq %%mm3, %%mm7 \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1041
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1042 "movq 8%1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1043 "movq 8%1, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1044 "movq 8%1, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1045 "pand %2, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1046 "pand %3, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1047 "pand %4, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1048 "psllq $3, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1049 "psrlq $3, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1050 "psrlq $8, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1051 "movq %%mm0, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1052 "movq %%mm1, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1053 "movq %%mm2, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1054 "punpcklwd %5, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1055 "punpcklwd %5, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1056 "punpcklwd %5, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1057 "punpckhwd %5, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1058 "punpckhwd %5, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1059 "punpckhwd %5, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1060 "psllq $8, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1061 "psllq $16, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1062 "por %%mm1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1063 "por %%mm2, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1064 "psllq $8, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1065 "psllq $16, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1066 "por %%mm4, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1067 "por %%mm5, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1068 :"=m"(*d)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1069 :"m"(*s),"m"(mask16b),"m"(mask16g),"m"(mask16r),"m"(mmx_null)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1070 :"memory");
27158
65b8334df960 spelling/grammar/wording overhaul
diego
parents: 26925
diff changeset
1071 /* borrowed 32 to 24 */
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
1072 __asm__ volatile(
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1073 "movq %%mm0, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1074 "movq %%mm3, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1075 "movq %%mm6, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1076 "movq %%mm7, %%mm1 \n\t"
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 23004
diff changeset
1077
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1078 "movq %%mm4, %%mm6 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1079 "movq %%mm5, %%mm7 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1080 "movq %%mm0, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1081 "movq %%mm1, %%mm3 \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1082
30936
50b51e6987bd Replace some "m" constraints by MANGLE to avoid issues with some compilers not
reimar
parents: 30923
diff changeset
1083 STORE_BGR24_MMX
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1084
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1085 :"=m"(*d)
30936
50b51e6987bd Replace some "m" constraints by MANGLE to avoid issues with some compilers not
reimar
parents: 30923
diff changeset
1086 :"m"(*s)
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1087 :"memory");
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1088 d += 24;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1089 s += 8;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1090 }
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
1091 __asm__ volatile(SFENCE:::"memory");
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
1092 __asm__ volatile(EMMS:::"memory");
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1093 #endif
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
1094 while (s < end) {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1095 register uint16_t bgr;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1096 bgr = *s++;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1097 *d++ = (bgr&0x1F)<<3;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1098 *d++ = (bgr&0x7E0)>>3;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1099 *d++ = (bgr&0xF800)>>8;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1100 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1101 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1102
28773
8a0785c19f48 Rewrite of rgb15to32 and rgb16to32 using fewer asm instructions
sdrik
parents: 28721
diff changeset
1103 /*
8a0785c19f48 Rewrite of rgb15to32 and rgb16to32 using fewer asm instructions
sdrik
parents: 28721
diff changeset
1104 * mm0 = 00 B3 00 B2 00 B1 00 B0
8a0785c19f48 Rewrite of rgb15to32 and rgb16to32 using fewer asm instructions
sdrik
parents: 28721
diff changeset
1105 * mm1 = 00 G3 00 G2 00 G1 00 G0
8a0785c19f48 Rewrite of rgb15to32 and rgb16to32 using fewer asm instructions
sdrik
parents: 28721
diff changeset
1106 * mm2 = 00 R3 00 R2 00 R1 00 R0
8a0785c19f48 Rewrite of rgb15to32 and rgb16to32 using fewer asm instructions
sdrik
parents: 28721
diff changeset
1107 * mm6 = FF FF FF FF FF FF FF FF
8a0785c19f48 Rewrite of rgb15to32 and rgb16to32 using fewer asm instructions
sdrik
parents: 28721
diff changeset
1108 * mm7 = 00 00 00 00 00 00 00 00
8a0785c19f48 Rewrite of rgb15to32 and rgb16to32 using fewer asm instructions
sdrik
parents: 28721
diff changeset
1109 */
8a0785c19f48 Rewrite of rgb15to32 and rgb16to32 using fewer asm instructions
sdrik
parents: 28721
diff changeset
1110 #define PACK_RGB32 \
8a0785c19f48 Rewrite of rgb15to32 and rgb16to32 using fewer asm instructions
sdrik
parents: 28721
diff changeset
1111 "packuswb %%mm7, %%mm0 \n\t" /* 00 00 00 00 B3 B2 B1 B0 */ \
8a0785c19f48 Rewrite of rgb15to32 and rgb16to32 using fewer asm instructions
sdrik
parents: 28721
diff changeset
1112 "packuswb %%mm7, %%mm1 \n\t" /* 00 00 00 00 G3 G2 G1 G0 */ \
8a0785c19f48 Rewrite of rgb15to32 and rgb16to32 using fewer asm instructions
sdrik
parents: 28721
diff changeset
1113 "packuswb %%mm7, %%mm2 \n\t" /* 00 00 00 00 R3 R2 R1 R0 */ \
8a0785c19f48 Rewrite of rgb15to32 and rgb16to32 using fewer asm instructions
sdrik
parents: 28721
diff changeset
1114 "punpcklbw %%mm1, %%mm0 \n\t" /* G3 B3 G2 B2 G1 B1 G0 B0 */ \
8a0785c19f48 Rewrite of rgb15to32 and rgb16to32 using fewer asm instructions
sdrik
parents: 28721
diff changeset
1115 "punpcklbw %%mm6, %%mm2 \n\t" /* FF R3 FF R2 FF R1 FF R0 */ \
8a0785c19f48 Rewrite of rgb15to32 and rgb16to32 using fewer asm instructions
sdrik
parents: 28721
diff changeset
1116 "movq %%mm0, %%mm3 \n\t" \
8a0785c19f48 Rewrite of rgb15to32 and rgb16to32 using fewer asm instructions
sdrik
parents: 28721
diff changeset
1117 "punpcklwd %%mm2, %%mm0 \n\t" /* FF R1 G1 B1 FF R0 G0 B0 */ \
8a0785c19f48 Rewrite of rgb15to32 and rgb16to32 using fewer asm instructions
sdrik
parents: 28721
diff changeset
1118 "punpckhwd %%mm2, %%mm3 \n\t" /* FF R3 G3 B3 FF R2 G2 B2 */ \
8a0785c19f48 Rewrite of rgb15to32 and rgb16to32 using fewer asm instructions
sdrik
parents: 28721
diff changeset
1119 MOVNTQ" %%mm0, %0 \n\t" \
8a0785c19f48 Rewrite of rgb15to32 and rgb16to32 using fewer asm instructions
sdrik
parents: 28721
diff changeset
1120 MOVNTQ" %%mm3, 8%0 \n\t" \
8a0785c19f48 Rewrite of rgb15to32 and rgb16to32 using fewer asm instructions
sdrik
parents: 28721
diff changeset
1121
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1122 static inline void RENAME(rgb15to32)(const uint8_t *src, uint8_t *dst, long src_size)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1123 {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1124 const uint16_t *end;
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
1125 #if HAVE_MMX
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1126 const uint16_t *mm_end;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1127 #endif
26909
b7eeb3590bc9 remove useless casts
bcoudurier
parents: 26059
diff changeset
1128 uint8_t *d = dst;
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1129 const uint16_t *s = (const uint16_t *)src;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1130 end = s + src_size/2;
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
1131 #if HAVE_MMX
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
1132 __asm__ volatile(PREFETCH" %0"::"m"(*s):"memory");
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
1133 __asm__ volatile("pxor %%mm7,%%mm7 \n\t":::"memory");
28773
8a0785c19f48 Rewrite of rgb15to32 and rgb16to32 using fewer asm instructions
sdrik
parents: 28721
diff changeset
1134 __asm__ volatile("pcmpeqd %%mm6,%%mm6 \n\t":::"memory");
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1135 mm_end = end - 3;
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
1136 while (s < mm_end) {
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
1137 __asm__ volatile(
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1138 PREFETCH" 32%1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1139 "movq %1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1140 "movq %1, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1141 "movq %1, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1142 "pand %2, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1143 "pand %3, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1144 "pand %4, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1145 "psllq $3, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1146 "psrlq $2, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1147 "psrlq $7, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1148 PACK_RGB32
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1149 :"=m"(*d)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1150 :"m"(*s),"m"(mask15b),"m"(mask15g),"m"(mask15r)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1151 :"memory");
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1152 d += 16;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1153 s += 4;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1154 }
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
1155 __asm__ volatile(SFENCE:::"memory");
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
1156 __asm__ volatile(EMMS:::"memory");
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1157 #endif
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
1158 while (s < end) {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1159 register uint16_t bgr;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1160 bgr = *s++;
29397
2d985cc879c9 Replace WORDS_BIGENDIAN with HAVE_BIGENDIAN
mru
parents: 29148
diff changeset
1161 #if HAVE_BIGENDIAN
28721
267dd38c800e When converting from a non alpha format to an alpha format, defaults to all ones rather than all zeroes
sdrik
parents: 28323
diff changeset
1162 *d++ = 255;
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1163 *d++ = (bgr&0x7C00)>>7;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1164 *d++ = (bgr&0x3E0)>>2;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1165 *d++ = (bgr&0x1F)<<3;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1166 #else
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1167 *d++ = (bgr&0x1F)<<3;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1168 *d++ = (bgr&0x3E0)>>2;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1169 *d++ = (bgr&0x7C00)>>7;
28721
267dd38c800e When converting from a non alpha format to an alpha format, defaults to all ones rather than all zeroes
sdrik
parents: 28323
diff changeset
1170 *d++ = 255;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1171 #endif
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1172 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1173 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1174
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1175 static inline void RENAME(rgb16to32)(const uint8_t *src, uint8_t *dst, long src_size)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1176 {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1177 const uint16_t *end;
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
1178 #if HAVE_MMX
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1179 const uint16_t *mm_end;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1180 #endif
26909
b7eeb3590bc9 remove useless casts
bcoudurier
parents: 26059
diff changeset
1181 uint8_t *d = dst;
26910
da8e02081774 add const, suppress warnings
bcoudurier
parents: 26909
diff changeset
1182 const uint16_t *s = (const uint16_t*)src;
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1183 end = s + src_size/2;
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
1184 #if HAVE_MMX
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
1185 __asm__ volatile(PREFETCH" %0"::"m"(*s):"memory");
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
1186 __asm__ volatile("pxor %%mm7,%%mm7 \n\t":::"memory");
28773
8a0785c19f48 Rewrite of rgb15to32 and rgb16to32 using fewer asm instructions
sdrik
parents: 28721
diff changeset
1187 __asm__ volatile("pcmpeqd %%mm6,%%mm6 \n\t":::"memory");
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1188 mm_end = end - 3;
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
1189 while (s < mm_end) {
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
1190 __asm__ volatile(
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1191 PREFETCH" 32%1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1192 "movq %1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1193 "movq %1, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1194 "movq %1, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1195 "pand %2, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1196 "pand %3, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1197 "pand %4, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1198 "psllq $3, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1199 "psrlq $3, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1200 "psrlq $8, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1201 PACK_RGB32
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1202 :"=m"(*d)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1203 :"m"(*s),"m"(mask16b),"m"(mask16g),"m"(mask16r)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1204 :"memory");
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1205 d += 16;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1206 s += 4;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1207 }
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
1208 __asm__ volatile(SFENCE:::"memory");
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
1209 __asm__ volatile(EMMS:::"memory");
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1210 #endif
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
1211 while (s < end) {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1212 register uint16_t bgr;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1213 bgr = *s++;
29397
2d985cc879c9 Replace WORDS_BIGENDIAN with HAVE_BIGENDIAN
mru
parents: 29148
diff changeset
1214 #if HAVE_BIGENDIAN
28721
267dd38c800e When converting from a non alpha format to an alpha format, defaults to all ones rather than all zeroes
sdrik
parents: 28323
diff changeset
1215 *d++ = 255;
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1216 *d++ = (bgr&0xF800)>>8;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1217 *d++ = (bgr&0x7E0)>>3;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1218 *d++ = (bgr&0x1F)<<3;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1219 #else
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1220 *d++ = (bgr&0x1F)<<3;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1221 *d++ = (bgr&0x7E0)>>3;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1222 *d++ = (bgr&0xF800)>>8;
28721
267dd38c800e When converting from a non alpha format to an alpha format, defaults to all ones rather than all zeroes
sdrik
parents: 28323
diff changeset
1223 *d++ = 255;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1224 #endif
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1225 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1226 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1227
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1228 static inline void RENAME(rgb32tobgr32)(const uint8_t *src, uint8_t *dst, long src_size)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1229 {
28968
michael
parents: 28962
diff changeset
1230 x86_reg idx = 15 - src_size;
26910
da8e02081774 add const, suppress warnings
bcoudurier
parents: 26909
diff changeset
1231 const uint8_t *s = src-idx;
da8e02081774 add const, suppress warnings
bcoudurier
parents: 26909
diff changeset
1232 uint8_t *d = dst-idx;
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
1233 #if HAVE_MMX
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
1234 __asm__ volatile(
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1235 "test %0, %0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1236 "jns 2f \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1237 PREFETCH" (%1, %0) \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1238 "movq %3, %%mm7 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1239 "pxor %4, %%mm7 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1240 "movq %%mm7, %%mm6 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1241 "pxor %5, %%mm7 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1242 ASMALIGN(4)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1243 "1: \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1244 PREFETCH" 32(%1, %0) \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1245 "movq (%1, %0), %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1246 "movq 8(%1, %0), %%mm1 \n\t"
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
1247 # if HAVE_MMX2
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1248 "pshufw $177, %%mm0, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1249 "pshufw $177, %%mm1, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1250 "pand %%mm7, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1251 "pand %%mm6, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1252 "pand %%mm7, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1253 "pand %%mm6, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1254 "por %%mm3, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1255 "por %%mm5, %%mm1 \n\t"
22991
59671a52cc82 New implementation of rgb32tobgr32
ivo
parents: 22960
diff changeset
1256 # else
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1257 "movq %%mm0, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1258 "movq %%mm1, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1259 "pand %%mm7, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1260 "pand %%mm6, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1261 "pand %%mm7, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1262 "pand %%mm6, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1263 "movq %%mm2, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1264 "movq %%mm4, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1265 "pslld $16, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1266 "psrld $16, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1267 "pslld $16, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1268 "psrld $16, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1269 "por %%mm2, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1270 "por %%mm4, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1271 "por %%mm3, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1272 "por %%mm5, %%mm1 \n\t"
22991
59671a52cc82 New implementation of rgb32tobgr32
ivo
parents: 22960
diff changeset
1273 # endif
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1274 MOVNTQ" %%mm0, (%2, %0) \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1275 MOVNTQ" %%mm1, 8(%2, %0) \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1276 "add $16, %0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1277 "js 1b \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1278 SFENCE" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1279 EMMS" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1280 "2: \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1281 : "+&r"(idx)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1282 : "r" (s), "r" (d), "m" (mask32b), "m" (mask32r), "m" (mmx_one)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1283 : "memory");
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1284 #endif
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1285 for (; idx<15; idx+=4) {
26910
da8e02081774 add const, suppress warnings
bcoudurier
parents: 26909
diff changeset
1286 register int v = *(const uint32_t *)&s[idx], g = v & 0xff00ff00;
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1287 v &= 0xff00ff;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1288 *(uint32_t *)&d[idx] = (v>>16) + g + (v<<16);
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1289 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1290 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1291
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1292 static inline void RENAME(rgb24tobgr24)(const uint8_t *src, uint8_t *dst, long src_size)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1293 {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1294 unsigned i;
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
1295 #if HAVE_MMX
28957
e538af2c69c1 Do not assume long is same width as x86 register.
ramiro
parents: 28773
diff changeset
1296 x86_reg mmx_size= 23 - src_size;
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
1297 __asm__ volatile (
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1298 "test %%"REG_a", %%"REG_a" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1299 "jns 2f \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1300 "movq "MANGLE(mask24r)", %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1301 "movq "MANGLE(mask24g)", %%mm6 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1302 "movq "MANGLE(mask24b)", %%mm7 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1303 ASMALIGN(4)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1304 "1: \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1305 PREFETCH" 32(%1, %%"REG_a") \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1306 "movq (%1, %%"REG_a"), %%mm0 \n\t" // BGR BGR BG
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1307 "movq (%1, %%"REG_a"), %%mm1 \n\t" // BGR BGR BG
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1308 "movq 2(%1, %%"REG_a"), %%mm2 \n\t" // R BGR BGR B
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1309 "psllq $16, %%mm0 \n\t" // 00 BGR BGR
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1310 "pand %%mm5, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1311 "pand %%mm6, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1312 "pand %%mm7, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1313 "por %%mm0, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1314 "por %%mm2, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1315 "movq 6(%1, %%"REG_a"), %%mm0 \n\t" // BGR BGR BG
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1316 MOVNTQ" %%mm1, (%2, %%"REG_a") \n\t" // RGB RGB RG
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1317 "movq 8(%1, %%"REG_a"), %%mm1 \n\t" // R BGR BGR B
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1318 "movq 10(%1, %%"REG_a"), %%mm2 \n\t" // GR BGR BGR
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1319 "pand %%mm7, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1320 "pand %%mm5, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1321 "pand %%mm6, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1322 "por %%mm0, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1323 "por %%mm2, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1324 "movq 14(%1, %%"REG_a"), %%mm0 \n\t" // R BGR BGR B
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1325 MOVNTQ" %%mm1, 8(%2, %%"REG_a") \n\t" // B RGB RGB R
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1326 "movq 16(%1, %%"REG_a"), %%mm1 \n\t" // GR BGR BGR
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1327 "movq 18(%1, %%"REG_a"), %%mm2 \n\t" // BGR BGR BG
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1328 "pand %%mm6, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1329 "pand %%mm7, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1330 "pand %%mm5, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1331 "por %%mm0, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1332 "por %%mm2, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1333 MOVNTQ" %%mm1, 16(%2, %%"REG_a") \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1334 "add $24, %%"REG_a" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1335 " js 1b \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1336 "2: \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1337 : "+a" (mmx_size)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1338 : "r" (src-mmx_size), "r"(dst-mmx_size)
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1339 );
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1340
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
1341 __asm__ volatile(SFENCE:::"memory");
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
1342 __asm__ volatile(EMMS:::"memory");
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1343
27158
65b8334df960 spelling/grammar/wording overhaul
diego
parents: 26925
diff changeset
1344 if (mmx_size==23) return; //finished, was multiple of 8
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1345
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1346 src+= src_size;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1347 dst+= src_size;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1348 src_size= 23-mmx_size;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1349 src-= src_size;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1350 dst-= src_size;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1351 #endif
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
1352 for (i=0; i<src_size; i+=3) {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1353 register uint8_t x;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1354 x = src[i + 2];
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1355 dst[i + 1] = src[i + 1];
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1356 dst[i + 2] = src[i + 0];
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1357 dst[i + 0] = x;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1358 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1359 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1360
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1361 static inline void RENAME(yuvPlanartoyuy2)(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst,
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1362 long width, long height,
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1363 long lumStride, long chromStride, long dstStride, long vertLumPerChroma)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1364 {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1365 long y;
28968
michael
parents: 28962
diff changeset
1366 const x86_reg chromWidth= width>>1;
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
1367 for (y=0; y<height; y++) {
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
1368 #if HAVE_MMX
29612
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
1369 //FIXME handle 2 lines at once (fewer prefetches, reuse some chroma, but very likely memory-limited anyway)
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
1370 __asm__ volatile(
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1371 "xor %%"REG_a", %%"REG_a" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1372 ASMALIGN(4)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1373 "1: \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1374 PREFETCH" 32(%1, %%"REG_a", 2) \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1375 PREFETCH" 32(%2, %%"REG_a") \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1376 PREFETCH" 32(%3, %%"REG_a") \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1377 "movq (%2, %%"REG_a"), %%mm0 \n\t" // U(0)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1378 "movq %%mm0, %%mm2 \n\t" // U(0)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1379 "movq (%3, %%"REG_a"), %%mm1 \n\t" // V(0)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1380 "punpcklbw %%mm1, %%mm0 \n\t" // UVUV UVUV(0)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1381 "punpckhbw %%mm1, %%mm2 \n\t" // UVUV UVUV(8)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1382
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1383 "movq (%1, %%"REG_a",2), %%mm3 \n\t" // Y(0)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1384 "movq 8(%1, %%"REG_a",2), %%mm5 \n\t" // Y(8)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1385 "movq %%mm3, %%mm4 \n\t" // Y(0)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1386 "movq %%mm5, %%mm6 \n\t" // Y(8)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1387 "punpcklbw %%mm0, %%mm3 \n\t" // YUYV YUYV(0)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1388 "punpckhbw %%mm0, %%mm4 \n\t" // YUYV YUYV(4)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1389 "punpcklbw %%mm2, %%mm5 \n\t" // YUYV YUYV(8)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1390 "punpckhbw %%mm2, %%mm6 \n\t" // YUYV YUYV(12)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1391
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1392 MOVNTQ" %%mm3, (%0, %%"REG_a", 4) \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1393 MOVNTQ" %%mm4, 8(%0, %%"REG_a", 4) \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1394 MOVNTQ" %%mm5, 16(%0, %%"REG_a", 4) \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1395 MOVNTQ" %%mm6, 24(%0, %%"REG_a", 4) \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1396
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1397 "add $8, %%"REG_a" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1398 "cmp %4, %%"REG_a" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1399 " jb 1b \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1400 ::"r"(dst), "r"(ysrc), "r"(usrc), "r"(vsrc), "g" (chromWidth)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1401 : "%"REG_a
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1402 );
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1403 #else
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1404
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
1405 #if ARCH_ALPHA && HAVE_MVI
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1406 #define pl2yuy2(n) \
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1407 y1 = yc[n]; \
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1408 y2 = yc2[n]; \
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1409 u = uc[n]; \
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1410 v = vc[n]; \
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
1411 __asm__("unpkbw %1, %0" : "=r"(y1) : "r"(y1)); \
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
1412 __asm__("unpkbw %1, %0" : "=r"(y2) : "r"(y2)); \
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
1413 __asm__("unpkbl %1, %0" : "=r"(u) : "r"(u)); \
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
1414 __asm__("unpkbl %1, %0" : "=r"(v) : "r"(v)); \
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1415 yuv1 = (u << 8) + (v << 24); \
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1416 yuv2 = yuv1 + y2; \
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1417 yuv1 += y1; \
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1418 qdst[n] = yuv1; \
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1419 qdst2[n] = yuv2;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1420
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1421 int i;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1422 uint64_t *qdst = (uint64_t *) dst;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1423 uint64_t *qdst2 = (uint64_t *) (dst + dstStride);
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1424 const uint32_t *yc = (uint32_t *) ysrc;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1425 const uint32_t *yc2 = (uint32_t *) (ysrc + lumStride);
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1426 const uint16_t *uc = (uint16_t*) usrc, *vc = (uint16_t*) vsrc;
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
1427 for (i = 0; i < chromWidth; i += 8) {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1428 uint64_t y1, y2, yuv1, yuv2;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1429 uint64_t u, v;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1430 /* Prefetch */
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
1431 __asm__("ldq $31,64(%0)" :: "r"(yc));
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
1432 __asm__("ldq $31,64(%0)" :: "r"(yc2));
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
1433 __asm__("ldq $31,64(%0)" :: "r"(uc));
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
1434 __asm__("ldq $31,64(%0)" :: "r"(vc));
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1435
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1436 pl2yuy2(0);
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1437 pl2yuy2(1);
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1438 pl2yuy2(2);
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1439 pl2yuy2(3);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1440
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1441 yc += 4;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1442 yc2 += 4;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1443 uc += 4;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1444 vc += 4;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1445 qdst += 4;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1446 qdst2 += 4;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1447 }
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1448 y++;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1449 ysrc += lumStride;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1450 dst += dstStride;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1451
27688
49d5420c5698 Use HAVE_FAST_64BIT instead of nonstandard __WORDSIZE macro.
diego
parents: 27666
diff changeset
1452 #elif HAVE_FAST_64BIT
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1453 int i;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1454 uint64_t *ldst = (uint64_t *) dst;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1455 const uint8_t *yc = ysrc, *uc = usrc, *vc = vsrc;
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
1456 for (i = 0; i < chromWidth; i += 2) {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1457 uint64_t k, l;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1458 k = yc[0] + (uc[0] << 8) +
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1459 (yc[1] << 16) + (vc[0] << 24);
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1460 l = yc[2] + (uc[1] << 8) +
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1461 (yc[3] << 16) + (vc[1] << 24);
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1462 *ldst++ = k + (l << 32);
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1463 yc += 4;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1464 uc += 2;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1465 vc += 2;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1466 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1467
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1468 #else
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1469 int i, *idst = (int32_t *) dst;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1470 const uint8_t *yc = ysrc, *uc = usrc, *vc = vsrc;
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
1471 for (i = 0; i < chromWidth; i++) {
29397
2d985cc879c9 Replace WORDS_BIGENDIAN with HAVE_BIGENDIAN
mru
parents: 29148
diff changeset
1472 #if HAVE_BIGENDIAN
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1473 *idst++ = (yc[0] << 24)+ (uc[0] << 16) +
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1474 (yc[1] << 8) + (vc[0] << 0);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1475 #else
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1476 *idst++ = yc[0] + (uc[0] << 8) +
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1477 (yc[1] << 16) + (vc[0] << 24);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1478 #endif
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1479 yc += 2;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1480 uc++;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1481 vc++;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1482 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1483 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1484 #endif
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
1485 if ((y&(vertLumPerChroma-1)) == vertLumPerChroma-1) {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1486 usrc += chromStride;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1487 vsrc += chromStride;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1488 }
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1489 ysrc += lumStride;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1490 dst += dstStride;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1491 }
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
1492 #if HAVE_MMX
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1493 __asm__(EMMS" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1494 SFENCE" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1495 :::"memory");
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1496 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1497 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1498
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1499 /**
27158
65b8334df960 spelling/grammar/wording overhaul
diego
parents: 26925
diff changeset
1500 * Height should be a multiple of 2 and width should be a multiple of 16.
65b8334df960 spelling/grammar/wording overhaul
diego
parents: 26925
diff changeset
1501 * (If this is a problem for anyone then tell me, and I will fix it.)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1502 */
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1503 static inline void RENAME(yv12toyuy2)(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst,
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1504 long width, long height,
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1505 long lumStride, long chromStride, long dstStride)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1506 {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1507 //FIXME interpolate chroma
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1508 RENAME(yuvPlanartoyuy2)(ysrc, usrc, vsrc, dst, width, height, lumStride, chromStride, dstStride, 2);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1509 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1510
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1511 static inline void RENAME(yuvPlanartouyvy)(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst,
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1512 long width, long height,
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1513 long lumStride, long chromStride, long dstStride, long vertLumPerChroma)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1514 {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1515 long y;
28968
michael
parents: 28962
diff changeset
1516 const x86_reg chromWidth= width>>1;
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
1517 for (y=0; y<height; y++) {
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
1518 #if HAVE_MMX
29612
01b933e5d04c Indent.
ramiro
parents: 29481
diff changeset
1519 //FIXME handle 2 lines at once (fewer prefetches, reuse some chroma, but very likely memory-limited anyway)
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
1520 __asm__ volatile(
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1521 "xor %%"REG_a", %%"REG_a" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1522 ASMALIGN(4)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1523 "1: \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1524 PREFETCH" 32(%1, %%"REG_a", 2) \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1525 PREFETCH" 32(%2, %%"REG_a") \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1526 PREFETCH" 32(%3, %%"REG_a") \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1527 "movq (%2, %%"REG_a"), %%mm0 \n\t" // U(0)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1528 "movq %%mm0, %%mm2 \n\t" // U(0)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1529 "movq (%3, %%"REG_a"), %%mm1 \n\t" // V(0)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1530 "punpcklbw %%mm1, %%mm0 \n\t" // UVUV UVUV(0)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1531 "punpckhbw %%mm1, %%mm2 \n\t" // UVUV UVUV(8)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1532
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1533 "movq (%1, %%"REG_a",2), %%mm3 \n\t" // Y(0)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1534 "movq 8(%1, %%"REG_a",2), %%mm5 \n\t" // Y(8)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1535 "movq %%mm0, %%mm4 \n\t" // Y(0)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1536 "movq %%mm2, %%mm6 \n\t" // Y(8)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1537 "punpcklbw %%mm3, %%mm0 \n\t" // YUYV YUYV(0)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1538 "punpckhbw %%mm3, %%mm4 \n\t" // YUYV YUYV(4)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1539 "punpcklbw %%mm5, %%mm2 \n\t" // YUYV YUYV(8)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1540 "punpckhbw %%mm5, %%mm6 \n\t" // YUYV YUYV(12)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1541
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1542 MOVNTQ" %%mm0, (%0, %%"REG_a", 4) \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1543 MOVNTQ" %%mm4, 8(%0, %%"REG_a", 4) \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1544 MOVNTQ" %%mm2, 16(%0, %%"REG_a", 4) \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1545 MOVNTQ" %%mm6, 24(%0, %%"REG_a", 4) \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1546
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1547 "add $8, %%"REG_a" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1548 "cmp %4, %%"REG_a" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1549 " jb 1b \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1550 ::"r"(dst), "r"(ysrc), "r"(usrc), "r"(vsrc), "g" (chromWidth)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1551 : "%"REG_a
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1552 );
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1553 #else
25109
a362a3b42e24 comment spelling/grammar fixes
diego
parents: 23702
diff changeset
1554 //FIXME adapt the Alpha ASM code from yv12->yuy2
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1555
27688
49d5420c5698 Use HAVE_FAST_64BIT instead of nonstandard __WORDSIZE macro.
diego
parents: 27666
diff changeset
1556 #if HAVE_FAST_64BIT
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1557 int i;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1558 uint64_t *ldst = (uint64_t *) dst;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1559 const uint8_t *yc = ysrc, *uc = usrc, *vc = vsrc;
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
1560 for (i = 0; i < chromWidth; i += 2) {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1561 uint64_t k, l;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1562 k = uc[0] + (yc[0] << 8) +
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1563 (vc[0] << 16) + (yc[1] << 24);
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1564 l = uc[1] + (yc[2] << 8) +
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1565 (vc[1] << 16) + (yc[3] << 24);
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1566 *ldst++ = k + (l << 32);
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1567 yc += 4;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1568 uc += 2;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1569 vc += 2;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1570 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1571
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1572 #else
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1573 int i, *idst = (int32_t *) dst;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1574 const uint8_t *yc = ysrc, *uc = usrc, *vc = vsrc;
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
1575 for (i = 0; i < chromWidth; i++) {
29397
2d985cc879c9 Replace WORDS_BIGENDIAN with HAVE_BIGENDIAN
mru
parents: 29148
diff changeset
1576 #if HAVE_BIGENDIAN
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1577 *idst++ = (uc[0] << 24)+ (yc[0] << 16) +
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1578 (vc[0] << 8) + (yc[1] << 0);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1579 #else
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1580 *idst++ = uc[0] + (yc[0] << 8) +
27158
65b8334df960 spelling/grammar/wording overhaul
diego
parents: 26925
diff changeset
1581 (vc[0] << 16) + (yc[1] << 24);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1582 #endif
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1583 yc += 2;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1584 uc++;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1585 vc++;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1586 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1587 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1588 #endif
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
1589 if ((y&(vertLumPerChroma-1)) == vertLumPerChroma-1) {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1590 usrc += chromStride;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1591 vsrc += chromStride;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1592 }
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1593 ysrc += lumStride;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1594 dst += dstStride;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1595 }
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
1596 #if HAVE_MMX
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1597 __asm__(EMMS" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1598 SFENCE" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1599 :::"memory");
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1600 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1601 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1602
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1603 /**
27158
65b8334df960 spelling/grammar/wording overhaul
diego
parents: 26925
diff changeset
1604 * Height should be a multiple of 2 and width should be a multiple of 16
65b8334df960 spelling/grammar/wording overhaul
diego
parents: 26925
diff changeset
1605 * (If this is a problem for anyone then tell me, and I will fix it.)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1606 */
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1607 static inline void RENAME(yv12touyvy)(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst,
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1608 long width, long height,
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1609 long lumStride, long chromStride, long dstStride)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1610 {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1611 //FIXME interpolate chroma
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1612 RENAME(yuvPlanartouyvy)(ysrc, usrc, vsrc, dst, width, height, lumStride, chromStride, dstStride, 2);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1613 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1614
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1615 /**
25109
a362a3b42e24 comment spelling/grammar fixes
diego
parents: 23702
diff changeset
1616 * Width should be a multiple of 16.
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1617 */
27495
fe28a794c04f enable yuv422p to uyvy converter
bcoudurier
parents: 27486
diff changeset
1618 static inline void RENAME(yuv422ptouyvy)(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst,
fe28a794c04f enable yuv422p to uyvy converter
bcoudurier
parents: 27486
diff changeset
1619 long width, long height,
fe28a794c04f enable yuv422p to uyvy converter
bcoudurier
parents: 27486
diff changeset
1620 long lumStride, long chromStride, long dstStride)
fe28a794c04f enable yuv422p to uyvy converter
bcoudurier
parents: 27486
diff changeset
1621 {
fe28a794c04f enable yuv422p to uyvy converter
bcoudurier
parents: 27486
diff changeset
1622 RENAME(yuvPlanartouyvy)(ysrc, usrc, vsrc, dst, width, height, lumStride, chromStride, dstStride, 1);
fe28a794c04f enable yuv422p to uyvy converter
bcoudurier
parents: 27486
diff changeset
1623 }
fe28a794c04f enable yuv422p to uyvy converter
bcoudurier
parents: 27486
diff changeset
1624
fe28a794c04f enable yuv422p to uyvy converter
bcoudurier
parents: 27486
diff changeset
1625 /**
fe28a794c04f enable yuv422p to uyvy converter
bcoudurier
parents: 27486
diff changeset
1626 * Width should be a multiple of 16.
fe28a794c04f enable yuv422p to uyvy converter
bcoudurier
parents: 27486
diff changeset
1627 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1628 static inline void RENAME(yuv422ptoyuy2)(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst,
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1629 long width, long height,
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1630 long lumStride, long chromStride, long dstStride)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1631 {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1632 RENAME(yuvPlanartoyuy2)(ysrc, usrc, vsrc, dst, width, height, lumStride, chromStride, dstStride, 1);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1633 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1634
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1635 /**
27158
65b8334df960 spelling/grammar/wording overhaul
diego
parents: 26925
diff changeset
1636 * Height should be a multiple of 2 and width should be a multiple of 16.
65b8334df960 spelling/grammar/wording overhaul
diego
parents: 26925
diff changeset
1637 * (If this is a problem for anyone then tell me, and I will fix it.)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1638 */
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1639 static inline void RENAME(yuy2toyv12)(const uint8_t *src, uint8_t *ydst, uint8_t *udst, uint8_t *vdst,
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1640 long width, long height,
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1641 long lumStride, long chromStride, long srcStride)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1642 {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1643 long y;
28968
michael
parents: 28962
diff changeset
1644 const x86_reg chromWidth= width>>1;
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
1645 for (y=0; y<height; y+=2) {
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
1646 #if HAVE_MMX
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
1647 __asm__ volatile(
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1648 "xor %%"REG_a", %%"REG_a" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1649 "pcmpeqw %%mm7, %%mm7 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1650 "psrlw $8, %%mm7 \n\t" // FF,00,FF,00...
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1651 ASMALIGN(4)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1652 "1: \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1653 PREFETCH" 64(%0, %%"REG_a", 4) \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1654 "movq (%0, %%"REG_a", 4), %%mm0 \n\t" // YUYV YUYV(0)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1655 "movq 8(%0, %%"REG_a", 4), %%mm1 \n\t" // YUYV YUYV(4)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1656 "movq %%mm0, %%mm2 \n\t" // YUYV YUYV(0)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1657 "movq %%mm1, %%mm3 \n\t" // YUYV YUYV(4)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1658 "psrlw $8, %%mm0 \n\t" // U0V0 U0V0(0)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1659 "psrlw $8, %%mm1 \n\t" // U0V0 U0V0(4)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1660 "pand %%mm7, %%mm2 \n\t" // Y0Y0 Y0Y0(0)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1661 "pand %%mm7, %%mm3 \n\t" // Y0Y0 Y0Y0(4)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1662 "packuswb %%mm1, %%mm0 \n\t" // UVUV UVUV(0)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1663 "packuswb %%mm3, %%mm2 \n\t" // YYYY YYYY(0)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1664
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1665 MOVNTQ" %%mm2, (%1, %%"REG_a", 2) \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1666
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1667 "movq 16(%0, %%"REG_a", 4), %%mm1 \n\t" // YUYV YUYV(8)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1668 "movq 24(%0, %%"REG_a", 4), %%mm2 \n\t" // YUYV YUYV(12)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1669 "movq %%mm1, %%mm3 \n\t" // YUYV YUYV(8)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1670 "movq %%mm2, %%mm4 \n\t" // YUYV YUYV(12)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1671 "psrlw $8, %%mm1 \n\t" // U0V0 U0V0(8)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1672 "psrlw $8, %%mm2 \n\t" // U0V0 U0V0(12)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1673 "pand %%mm7, %%mm3 \n\t" // Y0Y0 Y0Y0(8)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1674 "pand %%mm7, %%mm4 \n\t" // Y0Y0 Y0Y0(12)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1675 "packuswb %%mm2, %%mm1 \n\t" // UVUV UVUV(8)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1676 "packuswb %%mm4, %%mm3 \n\t" // YYYY YYYY(8)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1677
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1678 MOVNTQ" %%mm3, 8(%1, %%"REG_a", 2) \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1679
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1680 "movq %%mm0, %%mm2 \n\t" // UVUV UVUV(0)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1681 "movq %%mm1, %%mm3 \n\t" // UVUV UVUV(8)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1682 "psrlw $8, %%mm0 \n\t" // V0V0 V0V0(0)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1683 "psrlw $8, %%mm1 \n\t" // V0V0 V0V0(8)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1684 "pand %%mm7, %%mm2 \n\t" // U0U0 U0U0(0)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1685 "pand %%mm7, %%mm3 \n\t" // U0U0 U0U0(8)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1686 "packuswb %%mm1, %%mm0 \n\t" // VVVV VVVV(0)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1687 "packuswb %%mm3, %%mm2 \n\t" // UUUU UUUU(0)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1688
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1689 MOVNTQ" %%mm0, (%3, %%"REG_a") \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1690 MOVNTQ" %%mm2, (%2, %%"REG_a") \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1691
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1692 "add $8, %%"REG_a" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1693 "cmp %4, %%"REG_a" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1694 " jb 1b \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1695 ::"r"(src), "r"(ydst), "r"(udst), "r"(vdst), "g" (chromWidth)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1696 : "memory", "%"REG_a
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1697 );
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1698
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1699 ydst += lumStride;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1700 src += srcStride;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1701
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
1702 __asm__ volatile(
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1703 "xor %%"REG_a", %%"REG_a" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1704 ASMALIGN(4)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1705 "1: \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1706 PREFETCH" 64(%0, %%"REG_a", 4) \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1707 "movq (%0, %%"REG_a", 4), %%mm0 \n\t" // YUYV YUYV(0)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1708 "movq 8(%0, %%"REG_a", 4), %%mm1 \n\t" // YUYV YUYV(4)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1709 "movq 16(%0, %%"REG_a", 4), %%mm2 \n\t" // YUYV YUYV(8)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1710 "movq 24(%0, %%"REG_a", 4), %%mm3 \n\t" // YUYV YUYV(12)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1711 "pand %%mm7, %%mm0 \n\t" // Y0Y0 Y0Y0(0)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1712 "pand %%mm7, %%mm1 \n\t" // Y0Y0 Y0Y0(4)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1713 "pand %%mm7, %%mm2 \n\t" // Y0Y0 Y0Y0(8)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1714 "pand %%mm7, %%mm3 \n\t" // Y0Y0 Y0Y0(12)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1715 "packuswb %%mm1, %%mm0 \n\t" // YYYY YYYY(0)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1716 "packuswb %%mm3, %%mm2 \n\t" // YYYY YYYY(8)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1717
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1718 MOVNTQ" %%mm0, (%1, %%"REG_a", 2) \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1719 MOVNTQ" %%mm2, 8(%1, %%"REG_a", 2) \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1720
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1721 "add $8, %%"REG_a" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1722 "cmp %4, %%"REG_a" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1723 " jb 1b \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1724
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1725 ::"r"(src), "r"(ydst), "r"(udst), "r"(vdst), "g" (chromWidth)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1726 : "memory", "%"REG_a
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1727 );
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1728 #else
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1729 long i;
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
1730 for (i=0; i<chromWidth; i++) {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1731 ydst[2*i+0] = src[4*i+0];
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1732 udst[i] = src[4*i+1];
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1733 ydst[2*i+1] = src[4*i+2];
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1734 vdst[i] = src[4*i+3];
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1735 }
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1736 ydst += lumStride;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1737 src += srcStride;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1738
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
1739 for (i=0; i<chromWidth; i++) {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1740 ydst[2*i+0] = src[4*i+0];
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1741 ydst[2*i+1] = src[4*i+2];
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1742 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1743 #endif
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1744 udst += chromStride;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1745 vdst += chromStride;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1746 ydst += lumStride;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1747 src += srcStride;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1748 }
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
1749 #if HAVE_MMX
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1750 __asm__ volatile(EMMS" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1751 SFENCE" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1752 :::"memory");
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1753 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1754 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1755
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1756 static inline void RENAME(yvu9toyv12)(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc,
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1757 uint8_t *ydst, uint8_t *udst, uint8_t *vdst,
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1758 long width, long height, long lumStride, long chromStride)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1759 {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1760 /* Y Plane */
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1761 memcpy(ydst, ysrc, width*height);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1762
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1763 /* XXX: implement upscaling for U,V */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1764 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1765
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1766 static inline void RENAME(planar2x)(const uint8_t *src, uint8_t *dst, long srcWidth, long srcHeight, long srcStride, long dstStride)
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1767 {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1768 long x,y;
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 23004
diff changeset
1769
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1770 dst[0]= src[0];
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 23004
diff changeset
1771
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1772 // first line
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
1773 for (x=0; x<srcWidth-1; x++) {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1774 dst[2*x+1]= (3*src[x] + src[x+1])>>2;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1775 dst[2*x+2]= ( src[x] + 3*src[x+1])>>2;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1776 }
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1777 dst[2*srcWidth-1]= src[srcWidth-1];
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 23004
diff changeset
1778
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1779 dst+= dstStride;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1780
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
1781 for (y=1; y<srcHeight; y++) {
28323
99c49467ebbc HAVE_3DNOW --> HAVE_AMD3DNOW to sync with latest configure changes.
diego
parents: 28276
diff changeset
1782 #if HAVE_MMX2 || HAVE_AMD3DNOW
28957
e538af2c69c1 Do not assume long is same width as x86 register.
ramiro
parents: 28773
diff changeset
1783 const x86_reg mmxSize= srcWidth&~15;
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
1784 __asm__ volatile(
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1785 "mov %4, %%"REG_a" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1786 "1: \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1787 "movq (%0, %%"REG_a"), %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1788 "movq (%1, %%"REG_a"), %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1789 "movq 1(%0, %%"REG_a"), %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1790 "movq 1(%1, %%"REG_a"), %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1791 "movq -1(%0, %%"REG_a"), %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1792 "movq -1(%1, %%"REG_a"), %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1793 PAVGB" %%mm0, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1794 PAVGB" %%mm0, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1795 PAVGB" %%mm0, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1796 PAVGB" %%mm0, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1797 PAVGB" %%mm1, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1798 PAVGB" %%mm1, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1799 PAVGB" %%mm1, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1800 PAVGB" %%mm1, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1801 "movq %%mm5, %%mm7 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1802 "movq %%mm4, %%mm6 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1803 "punpcklbw %%mm3, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1804 "punpckhbw %%mm3, %%mm7 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1805 "punpcklbw %%mm2, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1806 "punpckhbw %%mm2, %%mm6 \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1807 #if 1
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1808 MOVNTQ" %%mm5, (%2, %%"REG_a", 2) \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1809 MOVNTQ" %%mm7, 8(%2, %%"REG_a", 2) \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1810 MOVNTQ" %%mm4, (%3, %%"REG_a", 2) \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1811 MOVNTQ" %%mm6, 8(%3, %%"REG_a", 2) \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1812 #else
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1813 "movq %%mm5, (%2, %%"REG_a", 2) \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1814 "movq %%mm7, 8(%2, %%"REG_a", 2) \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1815 "movq %%mm4, (%3, %%"REG_a", 2) \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1816 "movq %%mm6, 8(%3, %%"REG_a", 2) \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1817 #endif
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1818 "add $8, %%"REG_a" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1819 " js 1b \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1820 :: "r" (src + mmxSize ), "r" (src + srcStride + mmxSize ),
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1821 "r" (dst + mmxSize*2), "r" (dst + dstStride + mmxSize*2),
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1822 "g" (-mmxSize)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1823 : "%"REG_a
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1824
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1825 );
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1826 #else
28968
michael
parents: 28962
diff changeset
1827 const x86_reg mmxSize=1;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1828 #endif
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1829 dst[0 ]= (3*src[0] + src[srcStride])>>2;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1830 dst[dstStride]= ( src[0] + 3*src[srcStride])>>2;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1831
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
1832 for (x=mmxSize-1; x<srcWidth-1; x++) {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1833 dst[2*x +1]= (3*src[x+0] + src[x+srcStride+1])>>2;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1834 dst[2*x+dstStride+2]= ( src[x+0] + 3*src[x+srcStride+1])>>2;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1835 dst[2*x+dstStride+1]= ( src[x+1] + 3*src[x+srcStride ])>>2;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1836 dst[2*x +2]= (3*src[x+1] + src[x+srcStride ])>>2;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1837 }
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1838 dst[srcWidth*2 -1 ]= (3*src[srcWidth-1] + src[srcWidth-1 + srcStride])>>2;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1839 dst[srcWidth*2 -1 + dstStride]= ( src[srcWidth-1] + 3*src[srcWidth-1 + srcStride])>>2;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1840
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1841 dst+=dstStride*2;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1842 src+=srcStride;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1843 }
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 23004
diff changeset
1844
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1845 // last line
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1846 #if 1
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1847 dst[0]= src[0];
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 23004
diff changeset
1848
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
1849 for (x=0; x<srcWidth-1; x++) {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1850 dst[2*x+1]= (3*src[x] + src[x+1])>>2;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1851 dst[2*x+2]= ( src[x] + 3*src[x+1])>>2;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1852 }
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1853 dst[2*srcWidth-1]= src[srcWidth-1];
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1854 #else
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
1855 for (x=0; x<srcWidth; x++) {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1856 dst[2*x+0]=
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1857 dst[2*x+1]= src[x];
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1858 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1859 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1860
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
1861 #if HAVE_MMX
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1862 __asm__ volatile(EMMS" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1863 SFENCE" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1864 :::"memory");
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1865 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1866 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1867
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1868 /**
27158
65b8334df960 spelling/grammar/wording overhaul
diego
parents: 26925
diff changeset
1869 * Height should be a multiple of 2 and width should be a multiple of 16.
65b8334df960 spelling/grammar/wording overhaul
diego
parents: 26925
diff changeset
1870 * (If this is a problem for anyone then tell me, and I will fix it.)
65b8334df960 spelling/grammar/wording overhaul
diego
parents: 26925
diff changeset
1871 * Chrominance data is only taken from every second line, others are ignored.
25109
a362a3b42e24 comment spelling/grammar fixes
diego
parents: 23702
diff changeset
1872 * FIXME: Write HQ version.
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1873 */
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1874 static inline void RENAME(uyvytoyv12)(const uint8_t *src, uint8_t *ydst, uint8_t *udst, uint8_t *vdst,
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1875 long width, long height,
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1876 long lumStride, long chromStride, long srcStride)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1877 {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1878 long y;
28968
michael
parents: 28962
diff changeset
1879 const x86_reg chromWidth= width>>1;
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
1880 for (y=0; y<height; y+=2) {
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
1881 #if HAVE_MMX
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
1882 __asm__ volatile(
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1883 "xor %%"REG_a", %%"REG_a" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1884 "pcmpeqw %%mm7, %%mm7 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1885 "psrlw $8, %%mm7 \n\t" // FF,00,FF,00...
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1886 ASMALIGN(4)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1887 "1: \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1888 PREFETCH" 64(%0, %%"REG_a", 4) \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1889 "movq (%0, %%"REG_a", 4), %%mm0 \n\t" // UYVY UYVY(0)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1890 "movq 8(%0, %%"REG_a", 4), %%mm1 \n\t" // UYVY UYVY(4)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1891 "movq %%mm0, %%mm2 \n\t" // UYVY UYVY(0)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1892 "movq %%mm1, %%mm3 \n\t" // UYVY UYVY(4)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1893 "pand %%mm7, %%mm0 \n\t" // U0V0 U0V0(0)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1894 "pand %%mm7, %%mm1 \n\t" // U0V0 U0V0(4)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1895 "psrlw $8, %%mm2 \n\t" // Y0Y0 Y0Y0(0)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1896 "psrlw $8, %%mm3 \n\t" // Y0Y0 Y0Y0(4)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1897 "packuswb %%mm1, %%mm0 \n\t" // UVUV UVUV(0)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1898 "packuswb %%mm3, %%mm2 \n\t" // YYYY YYYY(0)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1899
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1900 MOVNTQ" %%mm2, (%1, %%"REG_a", 2) \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1901
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1902 "movq 16(%0, %%"REG_a", 4), %%mm1 \n\t" // UYVY UYVY(8)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1903 "movq 24(%0, %%"REG_a", 4), %%mm2 \n\t" // UYVY UYVY(12)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1904 "movq %%mm1, %%mm3 \n\t" // UYVY UYVY(8)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1905 "movq %%mm2, %%mm4 \n\t" // UYVY UYVY(12)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1906 "pand %%mm7, %%mm1 \n\t" // U0V0 U0V0(8)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1907 "pand %%mm7, %%mm2 \n\t" // U0V0 U0V0(12)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1908 "psrlw $8, %%mm3 \n\t" // Y0Y0 Y0Y0(8)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1909 "psrlw $8, %%mm4 \n\t" // Y0Y0 Y0Y0(12)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1910 "packuswb %%mm2, %%mm1 \n\t" // UVUV UVUV(8)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1911 "packuswb %%mm4, %%mm3 \n\t" // YYYY YYYY(8)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1912
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1913 MOVNTQ" %%mm3, 8(%1, %%"REG_a", 2) \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1914
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1915 "movq %%mm0, %%mm2 \n\t" // UVUV UVUV(0)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1916 "movq %%mm1, %%mm3 \n\t" // UVUV UVUV(8)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1917 "psrlw $8, %%mm0 \n\t" // V0V0 V0V0(0)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1918 "psrlw $8, %%mm1 \n\t" // V0V0 V0V0(8)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1919 "pand %%mm7, %%mm2 \n\t" // U0U0 U0U0(0)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1920 "pand %%mm7, %%mm3 \n\t" // U0U0 U0U0(8)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1921 "packuswb %%mm1, %%mm0 \n\t" // VVVV VVVV(0)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1922 "packuswb %%mm3, %%mm2 \n\t" // UUUU UUUU(0)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1923
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1924 MOVNTQ" %%mm0, (%3, %%"REG_a") \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1925 MOVNTQ" %%mm2, (%2, %%"REG_a") \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1926
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1927 "add $8, %%"REG_a" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1928 "cmp %4, %%"REG_a" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1929 " jb 1b \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1930 ::"r"(src), "r"(ydst), "r"(udst), "r"(vdst), "g" (chromWidth)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1931 : "memory", "%"REG_a
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1932 );
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1933
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1934 ydst += lumStride;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1935 src += srcStride;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1936
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
1937 __asm__ volatile(
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1938 "xor %%"REG_a", %%"REG_a" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1939 ASMALIGN(4)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1940 "1: \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1941 PREFETCH" 64(%0, %%"REG_a", 4) \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1942 "movq (%0, %%"REG_a", 4), %%mm0 \n\t" // YUYV YUYV(0)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1943 "movq 8(%0, %%"REG_a", 4), %%mm1 \n\t" // YUYV YUYV(4)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1944 "movq 16(%0, %%"REG_a", 4), %%mm2 \n\t" // YUYV YUYV(8)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1945 "movq 24(%0, %%"REG_a", 4), %%mm3 \n\t" // YUYV YUYV(12)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1946 "psrlw $8, %%mm0 \n\t" // Y0Y0 Y0Y0(0)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1947 "psrlw $8, %%mm1 \n\t" // Y0Y0 Y0Y0(4)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1948 "psrlw $8, %%mm2 \n\t" // Y0Y0 Y0Y0(8)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1949 "psrlw $8, %%mm3 \n\t" // Y0Y0 Y0Y0(12)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1950 "packuswb %%mm1, %%mm0 \n\t" // YYYY YYYY(0)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1951 "packuswb %%mm3, %%mm2 \n\t" // YYYY YYYY(8)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1952
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1953 MOVNTQ" %%mm0, (%1, %%"REG_a", 2) \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1954 MOVNTQ" %%mm2, 8(%1, %%"REG_a", 2) \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1955
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1956 "add $8, %%"REG_a" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1957 "cmp %4, %%"REG_a" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1958 " jb 1b \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1959
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1960 ::"r"(src), "r"(ydst), "r"(udst), "r"(vdst), "g" (chromWidth)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1961 : "memory", "%"REG_a
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1962 );
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1963 #else
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1964 long i;
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
1965 for (i=0; i<chromWidth; i++) {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1966 udst[i] = src[4*i+0];
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1967 ydst[2*i+0] = src[4*i+1];
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1968 vdst[i] = src[4*i+2];
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1969 ydst[2*i+1] = src[4*i+3];
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1970 }
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1971 ydst += lumStride;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1972 src += srcStride;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1973
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
1974 for (i=0; i<chromWidth; i++) {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1975 ydst[2*i+0] = src[4*i+1];
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1976 ydst[2*i+1] = src[4*i+3];
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1977 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1978 #endif
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1979 udst += chromStride;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1980 vdst += chromStride;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1981 ydst += lumStride;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1982 src += srcStride;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1983 }
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
1984 #if HAVE_MMX
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1985 __asm__ volatile(EMMS" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1986 SFENCE" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
1987 :::"memory");
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1988 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1989 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1990
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1991 /**
27158
65b8334df960 spelling/grammar/wording overhaul
diego
parents: 26925
diff changeset
1992 * Height should be a multiple of 2 and width should be a multiple of 2.
65b8334df960 spelling/grammar/wording overhaul
diego
parents: 26925
diff changeset
1993 * (If this is a problem for anyone then tell me, and I will fix it.)
65b8334df960 spelling/grammar/wording overhaul
diego
parents: 26925
diff changeset
1994 * Chrominance data is only taken from every second line,
25109
a362a3b42e24 comment spelling/grammar fixes
diego
parents: 23702
diff changeset
1995 * others are ignored in the C version.
a362a3b42e24 comment spelling/grammar fixes
diego
parents: 23702
diff changeset
1996 * FIXME: Write HQ version.
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1997 */
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1998 static inline void RENAME(rgb24toyv12)(const uint8_t *src, uint8_t *ydst, uint8_t *udst, uint8_t *vdst,
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
1999 long width, long height,
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2000 long lumStride, long chromStride, long srcStride)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2001 {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2002 long y;
28968
michael
parents: 28962
diff changeset
2003 const x86_reg chromWidth= width>>1;
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
2004 #if HAVE_MMX
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
2005 for (y=0; y<height-2; y+=2) {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2006 long i;
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
2007 for (i=0; i<2; i++) {
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
2008 __asm__ volatile(
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2009 "mov %2, %%"REG_a" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2010 "movq "MANGLE(ff_bgr2YCoeff)", %%mm6 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2011 "movq "MANGLE(ff_w1111)", %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2012 "pxor %%mm7, %%mm7 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2013 "lea (%%"REG_a", %%"REG_a", 2), %%"REG_d" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2014 ASMALIGN(4)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2015 "1: \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2016 PREFETCH" 64(%0, %%"REG_d") \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2017 "movd (%0, %%"REG_d"), %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2018 "movd 3(%0, %%"REG_d"), %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2019 "punpcklbw %%mm7, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2020 "punpcklbw %%mm7, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2021 "movd 6(%0, %%"REG_d"), %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2022 "movd 9(%0, %%"REG_d"), %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2023 "punpcklbw %%mm7, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2024 "punpcklbw %%mm7, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2025 "pmaddwd %%mm6, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2026 "pmaddwd %%mm6, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2027 "pmaddwd %%mm6, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2028 "pmaddwd %%mm6, %%mm3 \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2029 #ifndef FAST_BGR2YV12
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2030 "psrad $8, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2031 "psrad $8, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2032 "psrad $8, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2033 "psrad $8, %%mm3 \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2034 #endif
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2035 "packssdw %%mm1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2036 "packssdw %%mm3, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2037 "pmaddwd %%mm5, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2038 "pmaddwd %%mm5, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2039 "packssdw %%mm2, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2040 "psraw $7, %%mm0 \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2041
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2042 "movd 12(%0, %%"REG_d"), %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2043 "movd 15(%0, %%"REG_d"), %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2044 "punpcklbw %%mm7, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2045 "punpcklbw %%mm7, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2046 "movd 18(%0, %%"REG_d"), %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2047 "movd 21(%0, %%"REG_d"), %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2048 "punpcklbw %%mm7, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2049 "punpcklbw %%mm7, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2050 "pmaddwd %%mm6, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2051 "pmaddwd %%mm6, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2052 "pmaddwd %%mm6, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2053 "pmaddwd %%mm6, %%mm3 \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2054 #ifndef FAST_BGR2YV12
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2055 "psrad $8, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2056 "psrad $8, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2057 "psrad $8, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2058 "psrad $8, %%mm3 \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2059 #endif
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2060 "packssdw %%mm1, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2061 "packssdw %%mm3, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2062 "pmaddwd %%mm5, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2063 "pmaddwd %%mm5, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2064 "add $24, %%"REG_d" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2065 "packssdw %%mm2, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2066 "psraw $7, %%mm4 \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2067
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2068 "packuswb %%mm4, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2069 "paddusb "MANGLE(ff_bgr2YOffset)", %%mm0 \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2070
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2071 MOVNTQ" %%mm0, (%1, %%"REG_a") \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2072 "add $8, %%"REG_a" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2073 " js 1b \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2074 : : "r" (src+width*3), "r" (ydst+width), "g" ((x86_reg)-width)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2075 : "%"REG_a, "%"REG_d
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2076 );
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2077 ydst += lumStride;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2078 src += srcStride;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2079 }
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2080 src -= srcStride*2;
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
2081 __asm__ volatile(
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2082 "mov %4, %%"REG_a" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2083 "movq "MANGLE(ff_w1111)", %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2084 "movq "MANGLE(ff_bgr2UCoeff)", %%mm6 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2085 "pxor %%mm7, %%mm7 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2086 "lea (%%"REG_a", %%"REG_a", 2), %%"REG_d" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2087 "add %%"REG_d", %%"REG_d" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2088 ASMALIGN(4)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2089 "1: \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2090 PREFETCH" 64(%0, %%"REG_d") \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2091 PREFETCH" 64(%1, %%"REG_d") \n\t"
28323
99c49467ebbc HAVE_3DNOW --> HAVE_AMD3DNOW to sync with latest configure changes.
diego
parents: 28276
diff changeset
2092 #if HAVE_MMX2 || HAVE_AMD3DNOW
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2093 "movq (%0, %%"REG_d"), %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2094 "movq (%1, %%"REG_d"), %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2095 "movq 6(%0, %%"REG_d"), %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2096 "movq 6(%1, %%"REG_d"), %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2097 PAVGB" %%mm1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2098 PAVGB" %%mm3, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2099 "movq %%mm0, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2100 "movq %%mm2, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2101 "psrlq $24, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2102 "psrlq $24, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2103 PAVGB" %%mm1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2104 PAVGB" %%mm3, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2105 "punpcklbw %%mm7, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2106 "punpcklbw %%mm7, %%mm2 \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2107 #else
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2108 "movd (%0, %%"REG_d"), %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2109 "movd (%1, %%"REG_d"), %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2110 "movd 3(%0, %%"REG_d"), %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2111 "movd 3(%1, %%"REG_d"), %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2112 "punpcklbw %%mm7, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2113 "punpcklbw %%mm7, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2114 "punpcklbw %%mm7, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2115 "punpcklbw %%mm7, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2116 "paddw %%mm1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2117 "paddw %%mm3, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2118 "paddw %%mm2, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2119 "movd 6(%0, %%"REG_d"), %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2120 "movd 6(%1, %%"REG_d"), %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2121 "movd 9(%0, %%"REG_d"), %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2122 "movd 9(%1, %%"REG_d"), %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2123 "punpcklbw %%mm7, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2124 "punpcklbw %%mm7, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2125 "punpcklbw %%mm7, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2126 "punpcklbw %%mm7, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2127 "paddw %%mm1, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2128 "paddw %%mm3, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2129 "paddw %%mm4, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2130 "psrlw $2, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2131 "psrlw $2, %%mm2 \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2132 #endif
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2133 "movq "MANGLE(ff_bgr2VCoeff)", %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2134 "movq "MANGLE(ff_bgr2VCoeff)", %%mm3 \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2135
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2136 "pmaddwd %%mm0, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2137 "pmaddwd %%mm2, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2138 "pmaddwd %%mm6, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2139 "pmaddwd %%mm6, %%mm2 \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2140 #ifndef FAST_BGR2YV12
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2141 "psrad $8, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2142 "psrad $8, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2143 "psrad $8, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2144 "psrad $8, %%mm3 \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2145 #endif
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2146 "packssdw %%mm2, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2147 "packssdw %%mm3, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2148 "pmaddwd %%mm5, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2149 "pmaddwd %%mm5, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2150 "packssdw %%mm1, %%mm0 \n\t" // V1 V0 U1 U0
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2151 "psraw $7, %%mm0 \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2152
28323
99c49467ebbc HAVE_3DNOW --> HAVE_AMD3DNOW to sync with latest configure changes.
diego
parents: 28276
diff changeset
2153 #if HAVE_MMX2 || HAVE_AMD3DNOW
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2154 "movq 12(%0, %%"REG_d"), %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2155 "movq 12(%1, %%"REG_d"), %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2156 "movq 18(%0, %%"REG_d"), %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2157 "movq 18(%1, %%"REG_d"), %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2158 PAVGB" %%mm1, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2159 PAVGB" %%mm3, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2160 "movq %%mm4, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2161 "movq %%mm2, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2162 "psrlq $24, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2163 "psrlq $24, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2164 PAVGB" %%mm1, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2165 PAVGB" %%mm3, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2166 "punpcklbw %%mm7, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2167 "punpcklbw %%mm7, %%mm2 \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2168 #else
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2169 "movd 12(%0, %%"REG_d"), %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2170 "movd 12(%1, %%"REG_d"), %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2171 "movd 15(%0, %%"REG_d"), %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2172 "movd 15(%1, %%"REG_d"), %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2173 "punpcklbw %%mm7, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2174 "punpcklbw %%mm7, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2175 "punpcklbw %%mm7, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2176 "punpcklbw %%mm7, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2177 "paddw %%mm1, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2178 "paddw %%mm3, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2179 "paddw %%mm2, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2180 "movd 18(%0, %%"REG_d"), %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2181 "movd 18(%1, %%"REG_d"), %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2182 "movd 21(%0, %%"REG_d"), %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2183 "movd 21(%1, %%"REG_d"), %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2184 "punpcklbw %%mm7, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2185 "punpcklbw %%mm7, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2186 "punpcklbw %%mm7, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2187 "punpcklbw %%mm7, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2188 "paddw %%mm1, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2189 "paddw %%mm3, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2190 "paddw %%mm5, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2191 "movq "MANGLE(ff_w1111)", %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2192 "psrlw $2, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2193 "psrlw $2, %%mm2 \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2194 #endif
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2195 "movq "MANGLE(ff_bgr2VCoeff)", %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2196 "movq "MANGLE(ff_bgr2VCoeff)", %%mm3 \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2197
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2198 "pmaddwd %%mm4, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2199 "pmaddwd %%mm2, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2200 "pmaddwd %%mm6, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2201 "pmaddwd %%mm6, %%mm2 \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2202 #ifndef FAST_BGR2YV12
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2203 "psrad $8, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2204 "psrad $8, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2205 "psrad $8, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2206 "psrad $8, %%mm3 \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2207 #endif
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2208 "packssdw %%mm2, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2209 "packssdw %%mm3, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2210 "pmaddwd %%mm5, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2211 "pmaddwd %%mm5, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2212 "add $24, %%"REG_d" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2213 "packssdw %%mm1, %%mm4 \n\t" // V3 V2 U3 U2
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2214 "psraw $7, %%mm4 \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2215
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2216 "movq %%mm0, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2217 "punpckldq %%mm4, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2218 "punpckhdq %%mm4, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2219 "packsswb %%mm1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2220 "paddb "MANGLE(ff_bgr2UVOffset)", %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2221 "movd %%mm0, (%2, %%"REG_a") \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2222 "punpckhdq %%mm0, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2223 "movd %%mm0, (%3, %%"REG_a") \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2224 "add $4, %%"REG_a" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2225 " js 1b \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2226 : : "r" (src+chromWidth*6), "r" (src+srcStride+chromWidth*6), "r" (udst+chromWidth), "r" (vdst+chromWidth), "g" (-chromWidth)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2227 : "%"REG_a, "%"REG_d
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2228 );
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2229
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2230 udst += chromStride;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2231 vdst += chromStride;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2232 src += srcStride*2;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2233 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2234
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2235 __asm__ volatile(EMMS" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2236 SFENCE" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2237 :::"memory");
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2238 #else
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2239 y=0;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2240 #endif
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
2241 for (; y<height; y+=2) {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2242 long i;
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
2243 for (i=0; i<chromWidth; i++) {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2244 unsigned int b = src[6*i+0];
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2245 unsigned int g = src[6*i+1];
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2246 unsigned int r = src[6*i+2];
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2247
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2248 unsigned int Y = ((RY*r + GY*g + BY*b)>>RGB2YUV_SHIFT) + 16;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2249 unsigned int V = ((RV*r + GV*g + BV*b)>>RGB2YUV_SHIFT) + 128;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2250 unsigned int U = ((RU*r + GU*g + BU*b)>>RGB2YUV_SHIFT) + 128;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2251
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2252 udst[i] = U;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2253 vdst[i] = V;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2254 ydst[2*i] = Y;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2255
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2256 b = src[6*i+3];
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2257 g = src[6*i+4];
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2258 r = src[6*i+5];
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2259
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2260 Y = ((RY*r + GY*g + BY*b)>>RGB2YUV_SHIFT) + 16;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2261 ydst[2*i+1] = Y;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2262 }
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2263 ydst += lumStride;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2264 src += srcStride;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2265
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
2266 for (i=0; i<chromWidth; i++) {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2267 unsigned int b = src[6*i+0];
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2268 unsigned int g = src[6*i+1];
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2269 unsigned int r = src[6*i+2];
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2270
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2271 unsigned int Y = ((RY*r + GY*g + BY*b)>>RGB2YUV_SHIFT) + 16;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2272
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2273 ydst[2*i] = Y;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2274
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2275 b = src[6*i+3];
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2276 g = src[6*i+4];
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2277 r = src[6*i+5];
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2278
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2279 Y = ((RY*r + GY*g + BY*b)>>RGB2YUV_SHIFT) + 16;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2280 ydst[2*i+1] = Y;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2281 }
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2282 udst += chromStride;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2283 vdst += chromStride;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2284 ydst += lumStride;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2285 src += srcStride;
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2286 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2287 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2288
30264
1032ff2e83f1 Const correctness for src pointer. Remove all constness related warnings in
zuxy
parents: 30211
diff changeset
2289 static void RENAME(interleaveBytes)(const uint8_t *src1, const uint8_t *src2, uint8_t *dest,
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2290 long width, long height, long src1Stride,
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
2291 long src2Stride, long dstStride)
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
2292 {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2293 long h;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2294
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
2295 for (h=0; h < height; h++) {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2296 long w;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2297
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
2298 #if HAVE_MMX
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
2299 #if HAVE_SSE2
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
2300 __asm__(
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2301 "xor %%"REG_a", %%"REG_a" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2302 "1: \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2303 PREFETCH" 64(%1, %%"REG_a") \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2304 PREFETCH" 64(%2, %%"REG_a") \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2305 "movdqa (%1, %%"REG_a"), %%xmm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2306 "movdqa (%1, %%"REG_a"), %%xmm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2307 "movdqa (%2, %%"REG_a"), %%xmm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2308 "punpcklbw %%xmm2, %%xmm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2309 "punpckhbw %%xmm2, %%xmm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2310 "movntdq %%xmm0, (%0, %%"REG_a", 2) \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2311 "movntdq %%xmm1, 16(%0, %%"REG_a", 2) \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2312 "add $16, %%"REG_a" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2313 "cmp %3, %%"REG_a" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2314 " jb 1b \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2315 ::"r"(dest), "r"(src1), "r"(src2), "r" ((x86_reg)width-15)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2316 : "memory", "%"REG_a""
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2317 );
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2318 #else
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
2319 __asm__(
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2320 "xor %%"REG_a", %%"REG_a" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2321 "1: \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2322 PREFETCH" 64(%1, %%"REG_a") \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2323 PREFETCH" 64(%2, %%"REG_a") \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2324 "movq (%1, %%"REG_a"), %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2325 "movq 8(%1, %%"REG_a"), %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2326 "movq %%mm0, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2327 "movq %%mm2, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2328 "movq (%2, %%"REG_a"), %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2329 "movq 8(%2, %%"REG_a"), %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2330 "punpcklbw %%mm4, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2331 "punpckhbw %%mm4, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2332 "punpcklbw %%mm5, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2333 "punpckhbw %%mm5, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2334 MOVNTQ" %%mm0, (%0, %%"REG_a", 2) \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2335 MOVNTQ" %%mm1, 8(%0, %%"REG_a", 2) \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2336 MOVNTQ" %%mm2, 16(%0, %%"REG_a", 2) \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2337 MOVNTQ" %%mm3, 24(%0, %%"REG_a", 2) \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2338 "add $16, %%"REG_a" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2339 "cmp %3, %%"REG_a" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2340 " jb 1b \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2341 ::"r"(dest), "r"(src1), "r"(src2), "r" ((x86_reg)width-15)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2342 : "memory", "%"REG_a
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2343 );
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2344 #endif
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
2345 for (w= (width&(~15)); w < width; w++) {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2346 dest[2*w+0] = src1[w];
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2347 dest[2*w+1] = src2[w];
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2348 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2349 #else
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
2350 for (w=0; w < width; w++) {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2351 dest[2*w+0] = src1[w];
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2352 dest[2*w+1] = src2[w];
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2353 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2354 #endif
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2355 dest += dstStride;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2356 src1 += src1Stride;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2357 src2 += src2Stride;
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2358 }
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
2359 #if HAVE_MMX
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
2360 __asm__(
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2361 EMMS" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2362 SFENCE" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2363 ::: "memory"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2364 );
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2365 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2366 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2367
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2368 static inline void RENAME(vu9_to_vu12)(const uint8_t *src1, const uint8_t *src2,
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2369 uint8_t *dst1, uint8_t *dst2,
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2370 long width, long height,
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2371 long srcStride1, long srcStride2,
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2372 long dstStride1, long dstStride2)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2373 {
28968
michael
parents: 28962
diff changeset
2374 x86_reg y;
michael
parents: 28962
diff changeset
2375 long x,w,h;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2376 w=width/2; h=height/2;
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
2377 #if HAVE_MMX
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
2378 __asm__ volatile(
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2379 PREFETCH" %0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2380 PREFETCH" %1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2381 ::"m"(*(src1+srcStride1)),"m"(*(src2+srcStride2)):"memory");
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2382 #endif
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
2383 for (y=0;y<h;y++) {
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2384 const uint8_t* s1=src1+srcStride1*(y>>1);
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2385 uint8_t* d=dst1+dstStride1*y;
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2386 x=0;
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
2387 #if HAVE_MMX
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
2388 for (;x<w-31;x+=32) {
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2389 __asm__ volatile(
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2390 PREFETCH" 32%1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2391 "movq %1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2392 "movq 8%1, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2393 "movq 16%1, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2394 "movq 24%1, %%mm6 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2395 "movq %%mm0, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2396 "movq %%mm2, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2397 "movq %%mm4, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2398 "movq %%mm6, %%mm7 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2399 "punpcklbw %%mm0, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2400 "punpckhbw %%mm1, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2401 "punpcklbw %%mm2, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2402 "punpckhbw %%mm3, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2403 "punpcklbw %%mm4, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2404 "punpckhbw %%mm5, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2405 "punpcklbw %%mm6, %%mm6 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2406 "punpckhbw %%mm7, %%mm7 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2407 MOVNTQ" %%mm0, %0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2408 MOVNTQ" %%mm1, 8%0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2409 MOVNTQ" %%mm2, 16%0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2410 MOVNTQ" %%mm3, 24%0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2411 MOVNTQ" %%mm4, 32%0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2412 MOVNTQ" %%mm5, 40%0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2413 MOVNTQ" %%mm6, 48%0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2414 MOVNTQ" %%mm7, 56%0"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2415 :"=m"(d[2*x])
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2416 :"m"(s1[x])
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2417 :"memory");
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2418 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2419 #endif
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2420 for (;x<w;x++) d[2*x]=d[2*x+1]=s1[x];
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2421 }
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
2422 for (y=0;y<h;y++) {
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2423 const uint8_t* s2=src2+srcStride2*(y>>1);
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2424 uint8_t* d=dst2+dstStride2*y;
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2425 x=0;
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
2426 #if HAVE_MMX
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
2427 for (;x<w-31;x+=32) {
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2428 __asm__ volatile(
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2429 PREFETCH" 32%1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2430 "movq %1, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2431 "movq 8%1, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2432 "movq 16%1, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2433 "movq 24%1, %%mm6 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2434 "movq %%mm0, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2435 "movq %%mm2, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2436 "movq %%mm4, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2437 "movq %%mm6, %%mm7 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2438 "punpcklbw %%mm0, %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2439 "punpckhbw %%mm1, %%mm1 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2440 "punpcklbw %%mm2, %%mm2 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2441 "punpckhbw %%mm3, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2442 "punpcklbw %%mm4, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2443 "punpckhbw %%mm5, %%mm5 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2444 "punpcklbw %%mm6, %%mm6 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2445 "punpckhbw %%mm7, %%mm7 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2446 MOVNTQ" %%mm0, %0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2447 MOVNTQ" %%mm1, 8%0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2448 MOVNTQ" %%mm2, 16%0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2449 MOVNTQ" %%mm3, 24%0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2450 MOVNTQ" %%mm4, 32%0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2451 MOVNTQ" %%mm5, 40%0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2452 MOVNTQ" %%mm6, 48%0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2453 MOVNTQ" %%mm7, 56%0"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2454 :"=m"(d[2*x])
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2455 :"m"(s2[x])
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2456 :"memory");
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2457 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2458 #endif
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2459 for (;x<w;x++) d[2*x]=d[2*x+1]=s2[x];
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2460 }
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
2461 #if HAVE_MMX
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
2462 __asm__(
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2463 EMMS" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2464 SFENCE" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2465 ::: "memory"
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2466 );
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2467 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2468 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2469
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2470 static inline void RENAME(yvu9_to_yuy2)(const uint8_t *src1, const uint8_t *src2, const uint8_t *src3,
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2471 uint8_t *dst,
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2472 long width, long height,
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2473 long srcStride1, long srcStride2,
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2474 long srcStride3, long dstStride)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2475 {
28968
michael
parents: 28962
diff changeset
2476 x86_reg x;
28957
e538af2c69c1 Do not assume long is same width as x86 register.
ramiro
parents: 28773
diff changeset
2477 long y,w,h;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2478 w=width/2; h=height;
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
2479 for (y=0;y<h;y++) {
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2480 const uint8_t* yp=src1+srcStride1*y;
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2481 const uint8_t* up=src2+srcStride2*(y>>2);
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2482 const uint8_t* vp=src3+srcStride3*(y>>2);
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2483 uint8_t* d=dst+dstStride*y;
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2484 x=0;
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
2485 #if HAVE_MMX
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
2486 for (;x<w-7;x+=8) {
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2487 __asm__ volatile(
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2488 PREFETCH" 32(%1, %0) \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2489 PREFETCH" 32(%2, %0) \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2490 PREFETCH" 32(%3, %0) \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2491 "movq (%1, %0, 4), %%mm0 \n\t" /* Y0Y1Y2Y3Y4Y5Y6Y7 */
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2492 "movq (%2, %0), %%mm1 \n\t" /* U0U1U2U3U4U5U6U7 */
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2493 "movq (%3, %0), %%mm2 \n\t" /* V0V1V2V3V4V5V6V7 */
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2494 "movq %%mm0, %%mm3 \n\t" /* Y0Y1Y2Y3Y4Y5Y6Y7 */
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2495 "movq %%mm1, %%mm4 \n\t" /* U0U1U2U3U4U5U6U7 */
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2496 "movq %%mm2, %%mm5 \n\t" /* V0V1V2V3V4V5V6V7 */
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2497 "punpcklbw %%mm1, %%mm1 \n\t" /* U0U0 U1U1 U2U2 U3U3 */
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2498 "punpcklbw %%mm2, %%mm2 \n\t" /* V0V0 V1V1 V2V2 V3V3 */
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2499 "punpckhbw %%mm4, %%mm4 \n\t" /* U4U4 U5U5 U6U6 U7U7 */
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2500 "punpckhbw %%mm5, %%mm5 \n\t" /* V4V4 V5V5 V6V6 V7V7 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2501
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2502 "movq %%mm1, %%mm6 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2503 "punpcklbw %%mm2, %%mm1 \n\t" /* U0V0 U0V0 U1V1 U1V1*/
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2504 "punpcklbw %%mm1, %%mm0 \n\t" /* Y0U0 Y1V0 Y2U0 Y3V0*/
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2505 "punpckhbw %%mm1, %%mm3 \n\t" /* Y4U1 Y5V1 Y6U1 Y7V1*/
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2506 MOVNTQ" %%mm0, (%4, %0, 8) \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2507 MOVNTQ" %%mm3, 8(%4, %0, 8) \n\t"
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 23004
diff changeset
2508
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2509 "punpckhbw %%mm2, %%mm6 \n\t" /* U2V2 U2V2 U3V3 U3V3*/
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2510 "movq 8(%1, %0, 4), %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2511 "movq %%mm0, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2512 "punpcklbw %%mm6, %%mm0 \n\t" /* Y U2 Y V2 Y U2 Y V2*/
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2513 "punpckhbw %%mm6, %%mm3 \n\t" /* Y U3 Y V3 Y U3 Y V3*/
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2514 MOVNTQ" %%mm0, 16(%4, %0, 8) \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2515 MOVNTQ" %%mm3, 24(%4, %0, 8) \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2516
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2517 "movq %%mm4, %%mm6 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2518 "movq 16(%1, %0, 4), %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2519 "movq %%mm0, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2520 "punpcklbw %%mm5, %%mm4 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2521 "punpcklbw %%mm4, %%mm0 \n\t" /* Y U4 Y V4 Y U4 Y V4*/
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2522 "punpckhbw %%mm4, %%mm3 \n\t" /* Y U5 Y V5 Y U5 Y V5*/
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2523 MOVNTQ" %%mm0, 32(%4, %0, 8) \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2524 MOVNTQ" %%mm3, 40(%4, %0, 8) \n\t"
23129
9528d1ebe68f cosmetics: Remove trailing whitespace.
diego
parents: 23004
diff changeset
2525
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2526 "punpckhbw %%mm5, %%mm6 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2527 "movq 24(%1, %0, 4), %%mm0 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2528 "movq %%mm0, %%mm3 \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2529 "punpcklbw %%mm6, %%mm0 \n\t" /* Y U6 Y V6 Y U6 Y V6*/
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2530 "punpckhbw %%mm6, %%mm3 \n\t" /* Y U7 Y V7 Y U7 Y V7*/
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2531 MOVNTQ" %%mm0, 48(%4, %0, 8) \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2532 MOVNTQ" %%mm3, 56(%4, %0, 8) \n\t"
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2533
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2534 : "+r" (x)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2535 : "r"(yp), "r" (up), "r"(vp), "r"(d)
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2536 :"memory");
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2537 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2538 #endif
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
2539 for (; x<w; x++) {
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2540 const long x2 = x<<2;
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2541 d[8*x+0] = yp[x2];
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2542 d[8*x+1] = up[x];
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2543 d[8*x+2] = yp[x2+1];
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2544 d[8*x+3] = vp[x];
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2545 d[8*x+4] = yp[x2+2];
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2546 d[8*x+5] = up[x];
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2547 d[8*x+6] = yp[x2+3];
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2548 d[8*x+7] = vp[x];
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2549 }
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2550 }
28276
877336d3c598 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 28102
diff changeset
2551 #if HAVE_MMX
27744
7b83cbade239 Convert asm keyword into __asm__.
flameeyes
parents: 27703
diff changeset
2552 __asm__(
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2553 EMMS" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2554 SFENCE" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2555 ::: "memory"
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2556 );
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2557 #endif
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
2558 }
22960
2d1ad4285df4 Remove code duplication in sws_rgb2rgb_init.
ivo
parents: 21029
diff changeset
2559
28962
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2560 static void RENAME(extract_even)(const uint8_t *src, uint8_t *dst, x86_reg count)
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2561 {
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2562 dst += count;
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2563 src += 2*count;
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2564 count= - count;
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2565
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2566 #if HAVE_MMX
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
2567 if(count <= -16) {
28962
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2568 count += 15;
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2569 __asm__ volatile(
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2570 "pcmpeqw %%mm7, %%mm7 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2571 "psrlw $8, %%mm7 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2572 "1: \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2573 "movq -30(%1, %0, 2), %%mm0 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2574 "movq -22(%1, %0, 2), %%mm1 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2575 "movq -14(%1, %0, 2), %%mm2 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2576 "movq -6(%1, %0, 2), %%mm3 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2577 "pand %%mm7, %%mm0 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2578 "pand %%mm7, %%mm1 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2579 "pand %%mm7, %%mm2 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2580 "pand %%mm7, %%mm3 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2581 "packuswb %%mm1, %%mm0 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2582 "packuswb %%mm3, %%mm2 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2583 MOVNTQ" %%mm0,-15(%2, %0) \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2584 MOVNTQ" %%mm2,- 7(%2, %0) \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2585 "add $16, %0 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2586 " js 1b \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2587 : "+r"(count)
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2588 : "r"(src), "r"(dst)
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2589 );
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2590 count -= 15;
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2591 }
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2592 #endif
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
2593 while(count<0) {
28962
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2594 dst[count]= src[2*count];
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2595 count++;
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2596 }
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2597 }
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2598
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2599 static void RENAME(extract_even2)(const uint8_t *src, uint8_t *dst0, uint8_t *dst1, x86_reg count)
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2600 {
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2601 dst0+= count;
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2602 dst1+= count;
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2603 src += 4*count;
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2604 count= - count;
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2605 #if HAVE_MMX
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
2606 if(count <= -8) {
28962
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2607 count += 7;
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2608 __asm__ volatile(
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2609 "pcmpeqw %%mm7, %%mm7 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2610 "psrlw $8, %%mm7 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2611 "1: \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2612 "movq -28(%1, %0, 4), %%mm0 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2613 "movq -20(%1, %0, 4), %%mm1 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2614 "movq -12(%1, %0, 4), %%mm2 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2615 "movq -4(%1, %0, 4), %%mm3 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2616 "pand %%mm7, %%mm0 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2617 "pand %%mm7, %%mm1 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2618 "pand %%mm7, %%mm2 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2619 "pand %%mm7, %%mm3 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2620 "packuswb %%mm1, %%mm0 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2621 "packuswb %%mm3, %%mm2 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2622 "movq %%mm0, %%mm1 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2623 "movq %%mm2, %%mm3 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2624 "psrlw $8, %%mm0 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2625 "psrlw $8, %%mm2 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2626 "pand %%mm7, %%mm1 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2627 "pand %%mm7, %%mm3 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2628 "packuswb %%mm2, %%mm0 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2629 "packuswb %%mm3, %%mm1 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2630 MOVNTQ" %%mm0,- 7(%3, %0) \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2631 MOVNTQ" %%mm1,- 7(%2, %0) \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2632 "add $8, %0 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2633 " js 1b \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2634 : "+r"(count)
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2635 : "r"(src), "r"(dst0), "r"(dst1)
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2636 );
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2637 count -= 7;
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2638 }
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2639 #endif
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
2640 while(count<0) {
28962
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2641 dst0[count]= src[4*count+0];
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2642 dst1[count]= src[4*count+2];
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2643 count++;
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2644 }
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2645 }
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2646
28994
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2647 static void RENAME(extract_even2avg)(const uint8_t *src0, const uint8_t *src1, uint8_t *dst0, uint8_t *dst1, x86_reg count)
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2648 {
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2649 dst0 += count;
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2650 dst1 += count;
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2651 src0 += 4*count;
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2652 src1 += 4*count;
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2653 count= - count;
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2654 #ifdef PAVGB
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
2655 if(count <= -8) {
28994
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2656 count += 7;
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2657 __asm__ volatile(
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2658 "pcmpeqw %%mm7, %%mm7 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2659 "psrlw $8, %%mm7 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2660 "1: \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2661 "movq -28(%1, %0, 4), %%mm0 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2662 "movq -20(%1, %0, 4), %%mm1 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2663 "movq -12(%1, %0, 4), %%mm2 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2664 "movq -4(%1, %0, 4), %%mm3 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2665 PAVGB" -28(%2, %0, 4), %%mm0 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2666 PAVGB" -20(%2, %0, 4), %%mm1 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2667 PAVGB" -12(%2, %0, 4), %%mm2 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2668 PAVGB" - 4(%2, %0, 4), %%mm3 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2669 "pand %%mm7, %%mm0 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2670 "pand %%mm7, %%mm1 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2671 "pand %%mm7, %%mm2 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2672 "pand %%mm7, %%mm3 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2673 "packuswb %%mm1, %%mm0 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2674 "packuswb %%mm3, %%mm2 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2675 "movq %%mm0, %%mm1 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2676 "movq %%mm2, %%mm3 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2677 "psrlw $8, %%mm0 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2678 "psrlw $8, %%mm2 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2679 "pand %%mm7, %%mm1 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2680 "pand %%mm7, %%mm3 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2681 "packuswb %%mm2, %%mm0 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2682 "packuswb %%mm3, %%mm1 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2683 MOVNTQ" %%mm0,- 7(%4, %0) \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2684 MOVNTQ" %%mm1,- 7(%3, %0) \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2685 "add $8, %0 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2686 " js 1b \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2687 : "+r"(count)
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2688 : "r"(src0), "r"(src1), "r"(dst0), "r"(dst1)
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2689 );
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2690 count -= 7;
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2691 }
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2692 #endif
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
2693 while(count<0) {
28995
d50adcfcf99c 10l: C code of extract_even2avg(), extract_odd2() and extract_odd2avg() was
michael
parents: 28994
diff changeset
2694 dst0[count]= (src0[4*count+0]+src1[4*count+0])>>1;
d50adcfcf99c 10l: C code of extract_even2avg(), extract_odd2() and extract_odd2avg() was
michael
parents: 28994
diff changeset
2695 dst1[count]= (src0[4*count+2]+src1[4*count+2])>>1;
28994
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2696 count++;
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2697 }
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2698 }
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2699
28962
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2700 static void RENAME(extract_odd2)(const uint8_t *src, uint8_t *dst0, uint8_t *dst1, x86_reg count)
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2701 {
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2702 dst0+= count;
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2703 dst1+= count;
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2704 src += 4*count;
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2705 count= - count;
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2706 #if HAVE_MMX
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
2707 if(count <= -8) {
28962
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2708 count += 7;
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2709 __asm__ volatile(
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2710 "pcmpeqw %%mm7, %%mm7 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2711 "psrlw $8, %%mm7 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2712 "1: \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2713 "movq -28(%1, %0, 4), %%mm0 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2714 "movq -20(%1, %0, 4), %%mm1 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2715 "movq -12(%1, %0, 4), %%mm2 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2716 "movq -4(%1, %0, 4), %%mm3 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2717 "psrlw $8, %%mm0 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2718 "psrlw $8, %%mm1 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2719 "psrlw $8, %%mm2 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2720 "psrlw $8, %%mm3 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2721 "packuswb %%mm1, %%mm0 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2722 "packuswb %%mm3, %%mm2 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2723 "movq %%mm0, %%mm1 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2724 "movq %%mm2, %%mm3 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2725 "psrlw $8, %%mm0 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2726 "psrlw $8, %%mm2 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2727 "pand %%mm7, %%mm1 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2728 "pand %%mm7, %%mm3 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2729 "packuswb %%mm2, %%mm0 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2730 "packuswb %%mm3, %%mm1 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2731 MOVNTQ" %%mm0,- 7(%3, %0) \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2732 MOVNTQ" %%mm1,- 7(%2, %0) \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2733 "add $8, %0 \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2734 " js 1b \n\t"
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2735 : "+r"(count)
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2736 : "r"(src), "r"(dst0), "r"(dst1)
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2737 );
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2738 count -= 7;
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2739 }
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2740 #endif
28995
d50adcfcf99c 10l: C code of extract_even2avg(), extract_odd2() and extract_odd2avg() was
michael
parents: 28994
diff changeset
2741 src++;
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
2742 while(count<0) {
28962
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2743 dst0[count]= src[4*count+0];
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2744 dst1[count]= src[4*count+2];
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2745 count++;
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2746 }
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2747 }
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2748
28994
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2749 static void RENAME(extract_odd2avg)(const uint8_t *src0, const uint8_t *src1, uint8_t *dst0, uint8_t *dst1, x86_reg count)
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2750 {
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2751 dst0 += count;
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2752 dst1 += count;
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2753 src0 += 4*count;
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2754 src1 += 4*count;
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2755 count= - count;
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2756 #ifdef PAVGB
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
2757 if(count <= -8) {
28994
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2758 count += 7;
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2759 __asm__ volatile(
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2760 "pcmpeqw %%mm7, %%mm7 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2761 "psrlw $8, %%mm7 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2762 "1: \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2763 "movq -28(%1, %0, 4), %%mm0 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2764 "movq -20(%1, %0, 4), %%mm1 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2765 "movq -12(%1, %0, 4), %%mm2 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2766 "movq -4(%1, %0, 4), %%mm3 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2767 PAVGB" -28(%2, %0, 4), %%mm0 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2768 PAVGB" -20(%2, %0, 4), %%mm1 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2769 PAVGB" -12(%2, %0, 4), %%mm2 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2770 PAVGB" - 4(%2, %0, 4), %%mm3 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2771 "psrlw $8, %%mm0 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2772 "psrlw $8, %%mm1 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2773 "psrlw $8, %%mm2 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2774 "psrlw $8, %%mm3 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2775 "packuswb %%mm1, %%mm0 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2776 "packuswb %%mm3, %%mm2 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2777 "movq %%mm0, %%mm1 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2778 "movq %%mm2, %%mm3 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2779 "psrlw $8, %%mm0 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2780 "psrlw $8, %%mm2 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2781 "pand %%mm7, %%mm1 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2782 "pand %%mm7, %%mm3 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2783 "packuswb %%mm2, %%mm0 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2784 "packuswb %%mm3, %%mm1 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2785 MOVNTQ" %%mm0,- 7(%4, %0) \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2786 MOVNTQ" %%mm1,- 7(%3, %0) \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2787 "add $8, %0 \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2788 " js 1b \n\t"
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2789 : "+r"(count)
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2790 : "r"(src0), "r"(src1), "r"(dst0), "r"(dst1)
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2791 );
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2792 count -= 7;
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2793 }
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2794 #endif
28995
d50adcfcf99c 10l: C code of extract_even2avg(), extract_odd2() and extract_odd2avg() was
michael
parents: 28994
diff changeset
2795 src0++;
d50adcfcf99c 10l: C code of extract_even2avg(), extract_odd2() and extract_odd2avg() was
michael
parents: 28994
diff changeset
2796 src1++;
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
2797 while(count<0) {
28995
d50adcfcf99c 10l: C code of extract_even2avg(), extract_odd2() and extract_odd2avg() was
michael
parents: 28994
diff changeset
2798 dst0[count]= (src0[4*count+0]+src1[4*count+0])>>1;
d50adcfcf99c 10l: C code of extract_even2avg(), extract_odd2() and extract_odd2avg() was
michael
parents: 28994
diff changeset
2799 dst1[count]= (src0[4*count+2]+src1[4*count+2])>>1;
28994
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2800 count++;
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2801 }
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2802 }
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2803
28962
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2804 static void RENAME(yuyvtoyuv420)(uint8_t *ydst, uint8_t *udst, uint8_t *vdst, const uint8_t *src,
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2805 long width, long height,
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2806 long lumStride, long chromStride, long srcStride)
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2807 {
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2808 long y;
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2809 const long chromWidth= -((-width)>>1);
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2810
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
2811 for (y=0; y<height; y++) {
28962
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2812 RENAME(extract_even)(src, ydst, width);
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
2813 if(y&1) {
28994
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2814 RENAME(extract_odd2avg)(src-srcStride, src, udst, vdst, chromWidth);
28962
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2815 udst+= chromStride;
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2816 vdst+= chromStride;
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2817 }
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2818
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2819 src += srcStride;
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2820 ydst+= lumStride;
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2821 }
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2822 #if HAVE_MMX
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2823 __asm__(
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2824 EMMS" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2825 SFENCE" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2826 ::: "memory"
28962
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2827 );
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2828 #endif
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2829 }
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2830
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2831 static void RENAME(yuyvtoyuv422)(uint8_t *ydst, uint8_t *udst, uint8_t *vdst, const uint8_t *src,
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2832 long width, long height,
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2833 long lumStride, long chromStride, long srcStride)
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2834 {
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2835 long y;
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2836 const long chromWidth= -((-width)>>1);
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2837
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
2838 for (y=0; y<height; y++) {
28962
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2839 RENAME(extract_even)(src, ydst, width);
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2840 RENAME(extract_odd2)(src, udst, vdst, chromWidth);
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2841
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2842 src += srcStride;
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2843 ydst+= lumStride;
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2844 udst+= chromStride;
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2845 vdst+= chromStride;
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2846 }
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2847 #if HAVE_MMX
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2848 __asm__(
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2849 EMMS" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2850 SFENCE" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2851 ::: "memory"
28962
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2852 );
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2853 #endif
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2854 }
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2855
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2856 static void RENAME(uyvytoyuv420)(uint8_t *ydst, uint8_t *udst, uint8_t *vdst, const uint8_t *src,
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2857 long width, long height,
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2858 long lumStride, long chromStride, long srcStride)
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2859 {
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2860 long y;
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2861 const long chromWidth= -((-width)>>1);
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2862
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
2863 for (y=0; y<height; y++) {
28962
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2864 RENAME(extract_even)(src+1, ydst, width);
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
2865 if(y&1) {
28994
a03804d10dbf Average chroma of 2 lines in packed 422 -> planar 420.
michael
parents: 28968
diff changeset
2866 RENAME(extract_even2avg)(src-srcStride, src, udst, vdst, chromWidth);
28962
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2867 udst+= chromStride;
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2868 vdst+= chromStride;
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2869 }
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2870
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2871 src += srcStride;
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2872 ydst+= lumStride;
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2873 }
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2874 #if HAVE_MMX
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2875 __asm__(
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2876 EMMS" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2877 SFENCE" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2878 ::: "memory"
28962
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2879 );
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2880 #endif
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2881 }
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2882
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2883 static void RENAME(uyvytoyuv422)(uint8_t *ydst, uint8_t *udst, uint8_t *vdst, const uint8_t *src,
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2884 long width, long height,
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2885 long lumStride, long chromStride, long srcStride)
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2886 {
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2887 long y;
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2888 const long chromWidth= -((-width)>>1);
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2889
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
2890 for (y=0; y<height; y++) {
28962
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2891 RENAME(extract_even)(src+1, ydst, width);
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2892 RENAME(extract_even2)(src, udst, vdst, chromWidth);
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2893
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2894 src += srcStride;
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2895 ydst+= lumStride;
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2896 udst+= chromStride;
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2897 vdst+= chromStride;
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2898 }
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2899 #if HAVE_MMX
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2900 __asm__(
29480
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2901 EMMS" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2902 SFENCE" \n\t"
a4d8dee13834 Indent libswscale:
ramiro
parents: 29440
diff changeset
2903 ::: "memory"
28962
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2904 );
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2905 #endif
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2906 }
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2907
29481
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
2908 static inline void RENAME(rgb2rgb_init)(void)
c080f1f5c07e Cosmetics:
ramiro
parents: 29480
diff changeset
2909 {
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2910 rgb15to16 = RENAME(rgb15to16);
27486
e05965c550fc rgb vs bgr fix for the unscaled converters.
michael
parents: 27158
diff changeset
2911 rgb15tobgr24 = RENAME(rgb15tobgr24);
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2912 rgb15to32 = RENAME(rgb15to32);
27486
e05965c550fc rgb vs bgr fix for the unscaled converters.
michael
parents: 27158
diff changeset
2913 rgb16tobgr24 = RENAME(rgb16tobgr24);
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2914 rgb16to32 = RENAME(rgb16to32);
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2915 rgb16to15 = RENAME(rgb16to15);
27486
e05965c550fc rgb vs bgr fix for the unscaled converters.
michael
parents: 27158
diff changeset
2916 rgb24tobgr16 = RENAME(rgb24tobgr16);
e05965c550fc rgb vs bgr fix for the unscaled converters.
michael
parents: 27158
diff changeset
2917 rgb24tobgr15 = RENAME(rgb24tobgr15);
e05965c550fc rgb vs bgr fix for the unscaled converters.
michael
parents: 27158
diff changeset
2918 rgb24tobgr32 = RENAME(rgb24tobgr32);
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2919 rgb32to16 = RENAME(rgb32to16);
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2920 rgb32to15 = RENAME(rgb32to15);
27486
e05965c550fc rgb vs bgr fix for the unscaled converters.
michael
parents: 27158
diff changeset
2921 rgb32tobgr24 = RENAME(rgb32tobgr24);
e05965c550fc rgb vs bgr fix for the unscaled converters.
michael
parents: 27158
diff changeset
2922 rgb24to15 = RENAME(rgb24to15);
e05965c550fc rgb vs bgr fix for the unscaled converters.
michael
parents: 27158
diff changeset
2923 rgb24to16 = RENAME(rgb24to16);
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2924 rgb24tobgr24 = RENAME(rgb24tobgr24);
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2925 rgb32tobgr32 = RENAME(rgb32tobgr32);
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2926 rgb32tobgr16 = RENAME(rgb32tobgr16);
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2927 rgb32tobgr15 = RENAME(rgb32tobgr15);
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2928 yv12toyuy2 = RENAME(yv12toyuy2);
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2929 yv12touyvy = RENAME(yv12touyvy);
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2930 yuv422ptoyuy2 = RENAME(yuv422ptoyuy2);
27495
fe28a794c04f enable yuv422p to uyvy converter
bcoudurier
parents: 27486
diff changeset
2931 yuv422ptouyvy = RENAME(yuv422ptouyvy);
23140
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2932 yuy2toyv12 = RENAME(yuy2toyv12);
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2933 // yvu9toyv12 = RENAME(yvu9toyv12);
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2934 planar2x = RENAME(planar2x);
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2935 rgb24toyv12 = RENAME(rgb24toyv12);
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2936 interleaveBytes = RENAME(interleaveBytes);
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2937 vu9_to_vu12 = RENAME(vu9_to_vu12);
4d3870361b73 cosmetics attack, part I: Remove all tabs and prettyprint/reindent the code.
diego
parents: 23139
diff changeset
2938 yvu9_to_yuy2 = RENAME(yvu9_to_yuy2);
28962
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2939
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2940 uyvytoyuv420 = RENAME(uyvytoyuv420);
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2941 uyvytoyuv422 = RENAME(uyvytoyuv422);
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2942 yuyvtoyuv420 = RENAME(yuyvtoyuv420);
a7e795e068ad Unscaled converters for
michael
parents: 28961
diff changeset
2943 yuyvtoyuv422 = RENAME(yuyvtoyuv422);
22960
2d1ad4285df4 Remove code duplication in sws_rgb2rgb_init.
ivo
parents: 21029
diff changeset
2944 }