Mercurial > libavcodec.hg
annotate x86/x86util.asm @ 9003:b595a8a59967 libavcodec
Change the type of pblocks from pointers to short array into
pointers to array of 64 DCTELEM, similarly to other block fields.
This also get rid of some casts and fixes a warning.
author | iive |
---|---|
date | Sun, 22 Feb 2009 09:02:06 +0000 |
parents | ba83a0c57e9f |
children | c08ca946c80a |
rev | line source |
---|---|
8510 | 1 ;***************************************************************************** |
8804
ba83a0c57e9f
Fix wrong file name in header, noticed by David DeHaven, dave sagetv com.
diego
parents:
8510
diff
changeset
|
2 ;* x86util.asm |
8510 | 3 ;***************************************************************************** |
4 ;* Copyright (C) 2008 Loren Merritt <lorenm@u.washington.edu> | |
5 ;* | |
6 ;* This program is free software; you can redistribute it and/or modify | |
7 ;* it under the terms of the GNU General Public License as published by | |
8 ;* the Free Software Foundation; either version 2 of the License, or | |
9 ;* (at your option) any later version. | |
10 ;* | |
11 ;* This program is distributed in the hope that it will be useful, | |
12 ;* but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 ;* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 ;* GNU General Public License for more details. | |
15 ;* | |
16 ;* You should have received a copy of the GNU General Public License | |
17 ;* along with this program; if not, write to the Free Software | |
18 ;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111, USA. | |
19 ;***************************************************************************** | |
20 | |
21 %macro SBUTTERFLY 4 | |
22 mova m%4, m%2 | |
23 punpckl%1 m%2, m%3 | |
24 punpckh%1 m%4, m%3 | |
25 SWAP %3, %4 | |
26 %endmacro | |
27 | |
28 %macro TRANSPOSE4x4W 5 | |
29 SBUTTERFLY wd, %1, %2, %5 | |
30 SBUTTERFLY wd, %3, %4, %5 | |
31 SBUTTERFLY dq, %1, %3, %5 | |
32 SBUTTERFLY dq, %2, %4, %5 | |
33 SWAP %2, %3 | |
34 %endmacro | |
35 | |
36 %macro TRANSPOSE2x4x4W 5 | |
37 SBUTTERFLY wd, %1, %2, %5 | |
38 SBUTTERFLY wd, %3, %4, %5 | |
39 SBUTTERFLY dq, %1, %3, %5 | |
40 SBUTTERFLY dq, %2, %4, %5 | |
41 SBUTTERFLY qdq, %1, %2, %5 | |
42 SBUTTERFLY qdq, %3, %4, %5 | |
43 %endmacro | |
44 | |
45 %macro TRANSPOSE4x4D 5 | |
46 SBUTTERFLY dq, %1, %2, %5 | |
47 SBUTTERFLY dq, %3, %4, %5 | |
48 SBUTTERFLY qdq, %1, %3, %5 | |
49 SBUTTERFLY qdq, %2, %4, %5 | |
50 SWAP %2, %3 | |
51 %endmacro | |
52 | |
53 %macro TRANSPOSE8x8W 9-11 | |
54 %ifdef ARCH_X86_64 | |
55 SBUTTERFLY wd, %1, %2, %9 | |
56 SBUTTERFLY wd, %3, %4, %9 | |
57 SBUTTERFLY wd, %5, %6, %9 | |
58 SBUTTERFLY wd, %7, %8, %9 | |
59 SBUTTERFLY dq, %1, %3, %9 | |
60 SBUTTERFLY dq, %2, %4, %9 | |
61 SBUTTERFLY dq, %5, %7, %9 | |
62 SBUTTERFLY dq, %6, %8, %9 | |
63 SBUTTERFLY qdq, %1, %5, %9 | |
64 SBUTTERFLY qdq, %2, %6, %9 | |
65 SBUTTERFLY qdq, %3, %7, %9 | |
66 SBUTTERFLY qdq, %4, %8, %9 | |
67 SWAP %2, %5 | |
68 SWAP %4, %7 | |
69 %else | |
70 ; in: m0..m7, unless %11 in which case m6 is in %9 | |
71 ; out: m0..m7, unless %11 in which case m4 is in %10 | |
72 ; spills into %9 and %10 | |
73 %if %0<11 | |
74 movdqa %9, m%7 | |
75 %endif | |
76 SBUTTERFLY wd, %1, %2, %7 | |
77 movdqa %10, m%2 | |
78 movdqa m%7, %9 | |
79 SBUTTERFLY wd, %3, %4, %2 | |
80 SBUTTERFLY wd, %5, %6, %2 | |
81 SBUTTERFLY wd, %7, %8, %2 | |
82 SBUTTERFLY dq, %1, %3, %2 | |
83 movdqa %9, m%3 | |
84 movdqa m%2, %10 | |
85 SBUTTERFLY dq, %2, %4, %3 | |
86 SBUTTERFLY dq, %5, %7, %3 | |
87 SBUTTERFLY dq, %6, %8, %3 | |
88 SBUTTERFLY qdq, %1, %5, %3 | |
89 SBUTTERFLY qdq, %2, %6, %3 | |
90 movdqa %10, m%2 | |
91 movdqa m%3, %9 | |
92 SBUTTERFLY qdq, %3, %7, %2 | |
93 SBUTTERFLY qdq, %4, %8, %2 | |
94 SWAP %2, %5 | |
95 SWAP %4, %7 | |
96 %if 0<11 | |
97 movdqa m%5, %10 | |
98 %endif | |
99 %endif | |
100 %endmacro | |
101 | |
102 %macro ABS1_MMX 2 ; a, tmp | |
103 pxor %2, %2 | |
104 psubw %2, %1 | |
105 pmaxsw %1, %2 | |
106 %endmacro | |
107 | |
108 %macro ABS2_MMX 4 ; a, b, tmp0, tmp1 | |
109 pxor %3, %3 | |
110 pxor %4, %4 | |
111 psubw %3, %1 | |
112 psubw %4, %2 | |
113 pmaxsw %1, %3 | |
114 pmaxsw %2, %4 | |
115 %endmacro | |
116 | |
117 %macro ABS1_SSSE3 2 | |
118 pabsw %1, %1 | |
119 %endmacro | |
120 | |
121 %macro ABS2_SSSE3 4 | |
122 pabsw %1, %1 | |
123 pabsw %2, %2 | |
124 %endmacro | |
125 | |
126 %define ABS1 ABS1_MMX | |
127 %define ABS2 ABS2_MMX | |
128 | |
129 %macro ABS4 6 | |
130 ABS2 %1, %2, %5, %6 | |
131 ABS2 %3, %4, %5, %6 | |
132 %endmacro | |
133 | |
134 %macro SPLATB_MMX 3 | |
135 movd %1, [%2-3] ;to avoid crossing a cacheline | |
136 punpcklbw %1, %1 | |
137 %if mmsize==16 | |
138 pshuflw %1, %1, 0xff | |
139 punpcklqdq %1, %1 | |
140 %else | |
141 pshufw %1, %1, 0xff | |
142 %endif | |
143 %endmacro | |
144 | |
145 %macro SPLATB_SSSE3 3 | |
146 movd %1, [%2-3] | |
147 pshufb %1, %3 | |
148 %endmacro | |
149 | |
150 %macro PALIGNR_MMX 4 | |
151 %ifnidn %4, %2 | |
152 mova %4, %2 | |
153 %endif | |
154 %if mmsize == 8 | |
155 psllq %1, (8-%3)*8 | |
156 psrlq %4, %3*8 | |
157 %else | |
158 pslldq %1, 16-%3 | |
159 psrldq %4, %3 | |
160 %endif | |
161 por %1, %4 | |
162 %endmacro | |
163 | |
164 %macro PALIGNR_SSSE3 4 | |
165 palignr %1, %2, %3 | |
166 %endmacro | |
167 | |
168 %macro SUMSUB_BA 2 | |
169 paddw %1, %2 | |
170 paddw %2, %2 | |
171 psubw %2, %1 | |
172 %endmacro | |
173 | |
174 %macro SUMSUB_BADC 4 | |
175 paddw %1, %2 | |
176 paddw %3, %4 | |
177 paddw %2, %2 | |
178 paddw %4, %4 | |
179 psubw %2, %1 | |
180 psubw %4, %3 | |
181 %endmacro | |
182 | |
183 %macro HADAMARD8_1D 8 | |
184 SUMSUB_BADC %1, %5, %2, %6 | |
185 SUMSUB_BADC %3, %7, %4, %8 | |
186 SUMSUB_BADC %1, %3, %2, %4 | |
187 SUMSUB_BADC %5, %7, %6, %8 | |
188 SUMSUB_BADC %1, %2, %3, %4 | |
189 SUMSUB_BADC %5, %6, %7, %8 | |
190 %endmacro | |
191 | |
192 %macro SUMSUB2_AB 3 | |
193 mova %3, %1 | |
194 paddw %1, %1 | |
195 paddw %1, %2 | |
196 psubw %3, %2 | |
197 psubw %3, %2 | |
198 %endmacro | |
199 | |
200 %macro SUMSUBD2_AB 4 | |
201 mova %4, %1 | |
202 mova %3, %2 | |
203 psraw %2, 1 | |
204 psraw %4, 1 | |
205 paddw %1, %2 | |
206 psubw %4, %3 | |
207 %endmacro | |
208 | |
209 %macro LOAD_DIFF 5 | |
210 %ifidn %3, none | |
211 movh %1, %4 | |
212 movh %2, %5 | |
213 punpcklbw %1, %2 | |
214 punpcklbw %2, %2 | |
215 psubw %1, %2 | |
216 %else | |
217 movh %1, %4 | |
218 punpcklbw %1, %3 | |
219 movh %2, %5 | |
220 punpcklbw %2, %3 | |
221 psubw %1, %2 | |
222 %endif | |
223 %endmacro | |
224 | |
225 %macro LOAD_DIFF_8x4P 6-8 r0,r2 ; 4x dest, 2x temp, 2x pointer | |
226 LOAD_DIFF %1, %5, none, [%7], [%8] | |
227 LOAD_DIFF %2, %6, none, [%7+r1], [%8+r3] | |
228 LOAD_DIFF %3, %5, none, [%7+2*r1], [%8+2*r3] | |
229 LOAD_DIFF %4, %6, none, [%7+r4], [%8+r5] | |
230 %endmacro | |
231 | |
232 %macro STORE_DIFF 4 | |
233 psraw %1, 6 | |
234 movh %2, %4 | |
235 punpcklbw %2, %3 | |
236 paddsw %1, %2 | |
237 packuswb %1, %1 | |
238 movh %4, %1 | |
239 %endmacro | |
240 |