~medibuntu-maintainers/mplayer/medibuntu.precise

« back to all changes in this revision

Viewing changes to ffmpeg/libavutil/x86/x86util.asm

  • Committer: Gauvain Pocentek
  • Date: 2012-03-06 11:59:12 UTC
  • mfrom: (66.1.15 precise)
  • Revision ID: gauvain@pocentek.net-20120306115912-h9d6kt9j0l532oo5
* Merge from Ubuntu:
  - put back faac support
  - recommends apport-hooks-medibuntu
  - change Maintainer, Uploaders & Vcs-* fields.
* New upstream snapshot
* upload to unstable
* Build against external libmpeg2
* drop 51_FTBFS_arm.patch again
* no longer build depend on libcdparanoia-dev on the Hurd
* Fix FTBFS on the hurd.
  Thanks to Samuel Thibault <sthibault@debian.org> (Closes: #654974)
* Fix FTBFS on arm
* New upstream snapshot, Closes: #650339, #643621, #481807
* Imported Upstream version 1.0~rc4+svn34492
* Bump standards version
* Bump dependency on libav >= 4:0.8~, Closes: #653887
* Fix build-indep
* Build mplayer-gui again, Closes: #568514
* Drop debian/all-lang-config-mak.sh, no longer needed
* include .dfsg1 in version number
* remove get-orig-source target
* no longer prune compiler flags from the environment
* No longer advertise nor build 3fdx, mga and dxr3 backends,
  Closes: #496106, #442181, #533546
* beautify mplayer version identification string
* Brown paperbag upload.
* Next try to fix build failure on sparce after recent binutils change.
* Brown paperbag upload.
* Really fix build failure on sparc after recent binutils change.
* Properly set Replaces/Conflicts on mplayer2{,-dbg} to avoid
  file overwrite errors.
* Adjust versioning of mplayer listed in the mplayer-dbg's Depends field.
* Fix build failure on sparc after recent binutils change.
* Urgency medium bumped because of RC-level bugfix
  and speeding up x264 transition.
* Update to my @debian.org email.
* Upload to unstable
* Enable joystick support on Linux only, Closes: #638408
* Rebuild fixes toolchain issue on arm, Closes: #637077
* New upstream snapshot
* following the discussion started by Diego Biurrun <diego@biurrun.de>
  in debian-devel, I have prepared a new packaging of 'mplayer'
  (with code that comes from CVS)
* the upstream tar.bz cannot be distributed by Debian, since it contains
   CSS code; so I am repackaging it 
* I have tried my best to address all known issues:
  - the package contains the detailed Copyright made by Diego Biurrun 
  - the package does not contain CSS code, or  AFAIK other code on which 
     there is active patent enforcement
  - there is a script  debian/cvs-changelog.sh  that shows all changes
     done to files included in this source.
    This should comply with GPLv2 sec 2.a  (in spirit if not in letter)
    For this reason, the source code contains CVS directories.
* needs   make (>= 3.80) for 'html-chunked-$(1)' in DOCS/xml/Makefile

* some corrections, as suggested Diego Biurrun
  - binary codecs should go into /usr/lib/codecs (upstream default)
  - better template 'mplayer/install_codecs'
  - an empty 'font=' in mplayer.conf breaks mplayer: postinst corrected
* correction in 'mplayer/cfgnote'
* better mplayer.postinst and mplayer.config

* New upstream release
* better debian/copyright file
* do not ship a skin
* New upstream release
* changed DEB_BUILD_OPTIONS to DEB_BUILD_CONFIGURE ,
  DEB_BUILD_OPTIONS is used as in debian policy
* use gcc-3.4
* changed xlibs-dev to a long list of dependencies, for Debian/etch
* try to adhere to  http://www.mplayerhq.hu/DOCS/tech/binary-packaging.txt
  (see README.Debian for details)
* removed dependency on xlibmesa-dev, disabled opengl
* New upstream release
* Simon McVittie <hacks@pseudorandom.co.uk> wonderful work:
- Work around Debian bug #267442 (glibc's sys/uio.h and gcc's altivec.h have
  conflicting uses for __vector) by re-ordering #includes
- Fix potential symlink attack in ./configure
- Disable support for binary codecs on platforms for which those codecs
  aren't available; also disable the corresponding Debconf note when it's
  inappropriate
- Changed Build-Depends: so it works in pbuilder
- Explicitly build-depend on libjpeg62-dev, libfontconfig1-dev,
  libungif4-dev 
- Tweak debian/rules to avoid certain errors being ignored
- Use --language=all
* provide a target  'debian/rules get-orig-source' 
  that recreates the orig.tar.gz ; then use the above orig.tar.gz
* rewrote some parts of debian/rules
* don't clean and recompile docs if upstream ships them
* mplayer-doc was shipping too much stuff
* translated man pages where not installed properly
* compile with libdv4-dev
* correct README.Debian
* Forgot build-dep on libtheora
* Must not depend on libxvidcore
* New upstream release
* new release.
* rc1 to become 0.90
* new pre-release
* new pre-release
* gtk bug fixed.
* new release.
* version bumped
* 0.60 pre2 release
* 0.60 pre-release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
;*****************************************************************************
 
2
;* x86util.asm
 
3
;*****************************************************************************
 
4
;* Copyright (C) 2008-2010 x264 project
 
5
;*
 
6
;* Authors: Loren Merritt <lorenm@u.washington.edu>
 
7
;*          Holger Lubitz <holger@lubitz.org>
 
8
;*
 
9
;* This file is part of Libav.
 
10
;*
 
11
;* Libav is free software; you can redistribute it and/or
 
12
;* modify it under the terms of the GNU Lesser General Public
 
13
;* License as published by the Free Software Foundation; either
 
14
;* version 2.1 of the License, or (at your option) any later version.
 
15
;*
 
16
;* Libav is distributed in the hope that it will be useful,
 
17
;* but WITHOUT ANY WARRANTY; without even the implied warranty of
 
18
;* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
19
;* Lesser General Public License for more details.
 
20
;*
 
21
;* You should have received a copy of the GNU Lesser General Public
 
22
;* License along with Libav; if not, write to the Free Software
 
23
;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
24
;******************************************************************************
 
25
 
 
26
%macro SBUTTERFLY 4
 
27
%if avx_enabled == 0
 
28
    mova      m%4, m%2
 
29
    punpckl%1 m%2, m%3
 
30
    punpckh%1 m%4, m%3
 
31
%else
 
32
    punpckh%1 m%4, m%2, m%3
 
33
    punpckl%1 m%2, m%3
 
34
%endif
 
35
    SWAP %3, %4
 
36
%endmacro
 
37
 
 
38
%macro SBUTTERFLY2 4
 
39
    punpckl%1 m%4, m%2, m%3
 
40
    punpckh%1 m%2, m%2, m%3
 
41
    SWAP %2, %4, %3
 
42
%endmacro
 
43
 
 
44
%macro SBUTTERFLYPS 3
 
45
    movaps   m%3, m%1
 
46
    unpcklps m%1, m%2
 
47
    unpckhps m%3, m%2
 
48
    SWAP %2, %3
 
49
%endmacro
 
50
 
 
51
%macro TRANSPOSE4x4B 5
 
52
    SBUTTERFLY bw, %1, %2, %5
 
53
    SBUTTERFLY bw, %3, %4, %5
 
54
    SBUTTERFLY wd, %1, %3, %5
 
55
    SBUTTERFLY wd, %2, %4, %5
 
56
    SWAP %2, %3
 
57
%endmacro
 
58
 
 
59
%macro TRANSPOSE4x4W 5
 
60
    SBUTTERFLY wd, %1, %2, %5
 
61
    SBUTTERFLY wd, %3, %4, %5
 
62
    SBUTTERFLY dq, %1, %3, %5
 
63
    SBUTTERFLY dq, %2, %4, %5
 
64
    SWAP %2, %3
 
65
%endmacro
 
66
 
 
67
%macro TRANSPOSE2x4x4W 5
 
68
    SBUTTERFLY wd,  %1, %2, %5
 
69
    SBUTTERFLY wd,  %3, %4, %5
 
70
    SBUTTERFLY dq,  %1, %3, %5
 
71
    SBUTTERFLY dq,  %2, %4, %5
 
72
    SBUTTERFLY qdq, %1, %2, %5
 
73
    SBUTTERFLY qdq, %3, %4, %5
 
74
%endmacro
 
75
 
 
76
%macro TRANSPOSE4x4D 5
 
77
    SBUTTERFLY dq,  %1, %2, %5
 
78
    SBUTTERFLY dq,  %3, %4, %5
 
79
    SBUTTERFLY qdq, %1, %3, %5
 
80
    SBUTTERFLY qdq, %2, %4, %5
 
81
    SWAP %2, %3
 
82
%endmacro
 
83
 
 
84
; identical behavior to TRANSPOSE4x4D, but using SSE1 float ops
 
85
%macro TRANSPOSE4x4PS 5
 
86
    SBUTTERFLYPS %1, %2, %5
 
87
    SBUTTERFLYPS %3, %4, %5
 
88
    movaps  m%5, m%1
 
89
    movlhps m%1, m%3
 
90
    movhlps m%3, m%5
 
91
    movaps  m%5, m%2
 
92
    movlhps m%2, m%4
 
93
    movhlps m%4, m%5
 
94
    SWAP %2, %3
 
95
%endmacro
 
96
 
 
97
%macro TRANSPOSE8x8W 9-11
 
98
%ifdef ARCH_X86_64
 
99
    SBUTTERFLY wd,  %1, %2, %9
 
100
    SBUTTERFLY wd,  %3, %4, %9
 
101
    SBUTTERFLY wd,  %5, %6, %9
 
102
    SBUTTERFLY wd,  %7, %8, %9
 
103
    SBUTTERFLY dq,  %1, %3, %9
 
104
    SBUTTERFLY dq,  %2, %4, %9
 
105
    SBUTTERFLY dq,  %5, %7, %9
 
106
    SBUTTERFLY dq,  %6, %8, %9
 
107
    SBUTTERFLY qdq, %1, %5, %9
 
108
    SBUTTERFLY qdq, %2, %6, %9
 
109
    SBUTTERFLY qdq, %3, %7, %9
 
110
    SBUTTERFLY qdq, %4, %8, %9
 
111
    SWAP %2, %5
 
112
    SWAP %4, %7
 
113
%else
 
114
; in:  m0..m7, unless %11 in which case m6 is in %9
 
115
; out: m0..m7, unless %11 in which case m4 is in %10
 
116
; spills into %9 and %10
 
117
%if %0<11
 
118
    movdqa %9, m%7
 
119
%endif
 
120
    SBUTTERFLY wd,  %1, %2, %7
 
121
    movdqa %10, m%2
 
122
    movdqa m%7, %9
 
123
    SBUTTERFLY wd,  %3, %4, %2
 
124
    SBUTTERFLY wd,  %5, %6, %2
 
125
    SBUTTERFLY wd,  %7, %8, %2
 
126
    SBUTTERFLY dq,  %1, %3, %2
 
127
    movdqa %9, m%3
 
128
    movdqa m%2, %10
 
129
    SBUTTERFLY dq,  %2, %4, %3
 
130
    SBUTTERFLY dq,  %5, %7, %3
 
131
    SBUTTERFLY dq,  %6, %8, %3
 
132
    SBUTTERFLY qdq, %1, %5, %3
 
133
    SBUTTERFLY qdq, %2, %6, %3
 
134
    movdqa %10, m%2
 
135
    movdqa m%3, %9
 
136
    SBUTTERFLY qdq, %3, %7, %2
 
137
    SBUTTERFLY qdq, %4, %8, %2
 
138
    SWAP %2, %5
 
139
    SWAP %4, %7
 
140
%if %0<11
 
141
    movdqa m%5, %10
 
142
%endif
 
143
%endif
 
144
%endmacro
 
145
 
 
146
; PABSW macros assume %1 != %2, while ABS1/2 macros work in-place
 
147
%macro PABSW_MMX 2
 
148
    pxor       %1, %1
 
149
    pcmpgtw    %1, %2
 
150
    pxor       %2, %1
 
151
    psubw      %2, %1
 
152
    SWAP       %1, %2
 
153
%endmacro
 
154
 
 
155
%macro PSIGNW_MMX 2
 
156
    pxor       %1, %2
 
157
    psubw      %1, %2
 
158
%endmacro
 
159
 
 
160
%macro PABSW_MMX2 2
 
161
    pxor    %1, %1
 
162
    psubw   %1, %2
 
163
    pmaxsw  %1, %2
 
164
%endmacro
 
165
 
 
166
%macro PABSW_SSSE3 2
 
167
    pabsw      %1, %2
 
168
%endmacro
 
169
 
 
170
%macro PSIGNW_SSSE3 2
 
171
    psignw     %1, %2
 
172
%endmacro
 
173
 
 
174
%macro ABS1_MMX 2    ; a, tmp
 
175
    pxor       %2, %2
 
176
    pcmpgtw    %2, %1
 
177
    pxor       %1, %2
 
178
    psubw      %1, %2
 
179
%endmacro
 
180
 
 
181
%macro ABS2_MMX 4    ; a, b, tmp0, tmp1
 
182
    pxor       %3, %3
 
183
    pxor       %4, %4
 
184
    pcmpgtw    %3, %1
 
185
    pcmpgtw    %4, %2
 
186
    pxor       %1, %3
 
187
    pxor       %2, %4
 
188
    psubw      %1, %3
 
189
    psubw      %2, %4
 
190
%endmacro
 
191
 
 
192
%macro ABS1_MMX2 2   ; a, tmp
 
193
    pxor    %2, %2
 
194
    psubw   %2, %1
 
195
    pmaxsw  %1, %2
 
196
%endmacro
 
197
 
 
198
%macro ABS2_MMX2 4   ; a, b, tmp0, tmp1
 
199
    pxor    %3, %3
 
200
    pxor    %4, %4
 
201
    psubw   %3, %1
 
202
    psubw   %4, %2
 
203
    pmaxsw  %1, %3
 
204
    pmaxsw  %2, %4
 
205
%endmacro
 
206
 
 
207
%macro ABS1_SSSE3 2
 
208
    pabsw   %1, %1
 
209
%endmacro
 
210
 
 
211
%macro ABS2_SSSE3 4
 
212
    pabsw   %1, %1
 
213
    pabsw   %2, %2
 
214
%endmacro
 
215
 
 
216
%macro ABSB_MMX 2
 
217
    pxor    %2, %2
 
218
    psubb   %2, %1
 
219
    pminub  %1, %2
 
220
%endmacro
 
221
 
 
222
%macro ABSB2_MMX 4
 
223
    pxor    %3, %3
 
224
    pxor    %4, %4
 
225
    psubb   %3, %1
 
226
    psubb   %4, %2
 
227
    pminub  %1, %3
 
228
    pminub  %2, %4
 
229
%endmacro
 
230
 
 
231
%macro ABSD2_MMX 4
 
232
    pxor    %3, %3
 
233
    pxor    %4, %4
 
234
    pcmpgtd %3, %1
 
235
    pcmpgtd %4, %2
 
236
    pxor    %1, %3
 
237
    pxor    %2, %4
 
238
    psubd   %1, %3
 
239
    psubd   %2, %4
 
240
%endmacro
 
241
 
 
242
%macro ABSB_SSSE3 2
 
243
    pabsb   %1, %1
 
244
%endmacro
 
245
 
 
246
%macro ABSB2_SSSE3 4
 
247
    pabsb   %1, %1
 
248
    pabsb   %2, %2
 
249
%endmacro
 
250
 
 
251
%macro ABS4 6
 
252
    ABS2 %1, %2, %5, %6
 
253
    ABS2 %3, %4, %5, %6
 
254
%endmacro
 
255
 
 
256
%define ABS1 ABS1_MMX
 
257
%define ABS2 ABS2_MMX
 
258
%define ABSB ABSB_MMX
 
259
%define ABSB2 ABSB2_MMX
 
260
 
 
261
%macro SPLATB_MMX 3
 
262
    movd      %1, [%2-3] ;to avoid crossing a cacheline
 
263
    punpcklbw %1, %1
 
264
    SPLATW    %1, %1, 3
 
265
%endmacro
 
266
 
 
267
%macro SPLATB_SSSE3 3
 
268
    movd      %1, [%2-3]
 
269
    pshufb    %1, %3
 
270
%endmacro
 
271
 
 
272
%macro PALIGNR_MMX 4-5 ; [dst,] src1, src2, imm, tmp
 
273
    %define %%dst %1
 
274
%if %0==5
 
275
%ifnidn %1, %2
 
276
    mova    %%dst, %2
 
277
%endif
 
278
    %rotate 1
 
279
%endif
 
280
%ifnidn %4, %2
 
281
    mova    %4, %2
 
282
%endif
 
283
%if mmsize==8
 
284
    psllq   %%dst, (8-%3)*8
 
285
    psrlq   %4, %3*8
 
286
%else
 
287
    pslldq  %%dst, 16-%3
 
288
    psrldq  %4, %3
 
289
%endif
 
290
    por     %%dst, %4
 
291
%endmacro
 
292
 
 
293
%macro PALIGNR_SSSE3 4-5
 
294
%if %0==5
 
295
    palignr %1, %2, %3, %4
 
296
%else
 
297
    palignr %1, %2, %3
 
298
%endif
 
299
%endmacro
 
300
 
 
301
%macro DEINTB 5 ; mask, reg1, mask, reg2, optional src to fill masks from
 
302
%ifnum %5
 
303
    pand   m%3, m%5, m%4 ; src .. y6 .. y4
 
304
    pand   m%1, m%5, m%2 ; dst .. y6 .. y4
 
305
%else
 
306
    mova   m%1, %5
 
307
    pand   m%3, m%1, m%4 ; src .. y6 .. y4
 
308
    pand   m%1, m%1, m%2 ; dst .. y6 .. y4
 
309
%endif
 
310
    psrlw  m%2, 8        ; dst .. y7 .. y5
 
311
    psrlw  m%4, 8        ; src .. y7 .. y5
 
312
%endmacro
 
313
 
 
314
%macro SUMSUB_BA 3-4
 
315
%if %0==3
 
316
    padd%1  m%2, m%3
 
317
    padd%1  m%3, m%3
 
318
    psub%1  m%3, m%2
 
319
%else
 
320
%if avx_enabled == 0
 
321
    mova    m%4, m%2
 
322
    padd%1  m%2, m%3
 
323
    psub%1  m%3, m%4
 
324
%else
 
325
    padd%1  m%4, m%2, m%3
 
326
    psub%1  m%3, m%2
 
327
    SWAP    %2, %4
 
328
%endif
 
329
%endif
 
330
%endmacro
 
331
 
 
332
%macro SUMSUB_BADC 5-6
 
333
%if %0==6
 
334
    SUMSUB_BA %1, %2, %3, %6
 
335
    SUMSUB_BA %1, %4, %5, %6
 
336
%else
 
337
    padd%1  m%2, m%3
 
338
    padd%1  m%4, m%5
 
339
    padd%1  m%3, m%3
 
340
    padd%1  m%5, m%5
 
341
    psub%1  m%3, m%2
 
342
    psub%1  m%5, m%4
 
343
%endif
 
344
%endmacro
 
345
 
 
346
%macro SUMSUB2_AB 4
 
347
%ifnum %3
 
348
    psub%1  m%4, m%2, m%3
 
349
    psub%1  m%4, m%3
 
350
    padd%1  m%2, m%2
 
351
    padd%1  m%2, m%3
 
352
%else
 
353
    mova    m%4, m%2
 
354
    padd%1  m%2, m%2
 
355
    padd%1  m%2, %3
 
356
    psub%1  m%4, %3
 
357
    psub%1  m%4, %3
 
358
%endif
 
359
%endmacro
 
360
 
 
361
%macro SUMSUB2_BA 4
 
362
%if avx_enabled == 0
 
363
    mova    m%4, m%2
 
364
    padd%1  m%2, m%3
 
365
    padd%1  m%2, m%3
 
366
    psub%1  m%3, m%4
 
367
    psub%1  m%3, m%4
 
368
%else
 
369
    padd%1  m%4, m%2, m%3
 
370
    padd%1  m%4, m%3
 
371
    psub%1  m%3, m%2
 
372
    psub%1  m%3, m%2
 
373
    SWAP     %2,  %4
 
374
%endif
 
375
%endmacro
 
376
 
 
377
%macro SUMSUBD2_AB 5
 
378
%ifnum %4
 
379
    psra%1  m%5, m%2, 1  ; %3: %3>>1
 
380
    psra%1  m%4, m%3, 1  ; %2: %2>>1
 
381
    padd%1  m%4, m%2     ; %3: %3>>1+%2
 
382
    psub%1  m%5, m%3     ; %2: %2>>1-%3
 
383
    SWAP     %2, %5
 
384
    SWAP     %3, %4
 
385
%else
 
386
    mova    %5, m%2
 
387
    mova    %4, m%3
 
388
    psra%1  m%3, 1  ; %3: %3>>1
 
389
    psra%1  m%2, 1  ; %2: %2>>1
 
390
    padd%1  m%3, %5 ; %3: %3>>1+%2
 
391
    psub%1  m%2, %4 ; %2: %2>>1-%3
 
392
%endif
 
393
%endmacro
 
394
 
 
395
%macro DCT4_1D 5
 
396
%ifnum %5
 
397
    SUMSUB_BADC w, %4, %1, %3, %2, %5
 
398
    SUMSUB_BA   w, %3, %4, %5
 
399
    SUMSUB2_AB  w, %1, %2, %5
 
400
    SWAP %1, %3, %4, %5, %2
 
401
%else
 
402
    SUMSUB_BADC w, %4, %1, %3, %2
 
403
    SUMSUB_BA   w, %3, %4
 
404
    mova     [%5], m%2
 
405
    SUMSUB2_AB  w, %1, [%5], %2
 
406
    SWAP %1, %3, %4, %2
 
407
%endif
 
408
%endmacro
 
409
 
 
410
%macro IDCT4_1D 6-7
 
411
%ifnum %6
 
412
    SUMSUBD2_AB %1, %3, %5, %7, %6
 
413
    ; %3: %3>>1-%5 %5: %3+%5>>1
 
414
    SUMSUB_BA   %1, %4, %2, %7
 
415
    ; %4: %2+%4 %2: %2-%4
 
416
    SUMSUB_BADC %1, %5, %4, %3, %2, %7
 
417
    ; %5: %2+%4 + (%3+%5>>1)
 
418
    ; %4: %2+%4 - (%3+%5>>1)
 
419
    ; %3: %2-%4 + (%3>>1-%5)
 
420
    ; %2: %2-%4 - (%3>>1-%5)
 
421
%else
 
422
%ifidn %1, w
 
423
    SUMSUBD2_AB %1, %3, %5, [%6], [%6+16]
 
424
%else
 
425
    SUMSUBD2_AB %1, %3, %5, [%6], [%6+32]
 
426
%endif
 
427
    SUMSUB_BA   %1, %4, %2
 
428
    SUMSUB_BADC %1, %5, %4, %3, %2
 
429
%endif
 
430
    SWAP %2, %5, %4
 
431
    ; %2: %2+%4 + (%3+%5>>1) row0
 
432
    ; %3: %2-%4 + (%3>>1-%5) row1
 
433
    ; %4: %2-%4 - (%3>>1-%5) row2
 
434
    ; %5: %2+%4 - (%3+%5>>1) row3
 
435
%endmacro
 
436
 
 
437
 
 
438
%macro LOAD_DIFF 5
 
439
%ifidn %3, none
 
440
    movh       %1, %4
 
441
    movh       %2, %5
 
442
    punpcklbw  %1, %2
 
443
    punpcklbw  %2, %2
 
444
    psubw      %1, %2
 
445
%else
 
446
    movh       %1, %4
 
447
    punpcklbw  %1, %3
 
448
    movh       %2, %5
 
449
    punpcklbw  %2, %3
 
450
    psubw      %1, %2
 
451
%endif
 
452
%endmacro
 
453
 
 
454
%macro STORE_DCT 6
 
455
    movq   [%5+%6+ 0], m%1
 
456
    movq   [%5+%6+ 8], m%2
 
457
    movq   [%5+%6+16], m%3
 
458
    movq   [%5+%6+24], m%4
 
459
    movhps [%5+%6+32], m%1
 
460
    movhps [%5+%6+40], m%2
 
461
    movhps [%5+%6+48], m%3
 
462
    movhps [%5+%6+56], m%4
 
463
%endmacro
 
464
 
 
465
%macro LOAD_DIFF_8x4P 7-10 r0,r2,0 ; 4x dest, 2x temp, 2x pointer, increment?
 
466
    LOAD_DIFF m%1, m%5, m%7, [%8],      [%9]
 
467
    LOAD_DIFF m%2, m%6, m%7, [%8+r1],   [%9+r3]
 
468
    LOAD_DIFF m%3, m%5, m%7, [%8+2*r1], [%9+2*r3]
 
469
    LOAD_DIFF m%4, m%6, m%7, [%8+r4],   [%9+r5]
 
470
%if %10
 
471
    lea %8, [%8+4*r1]
 
472
    lea %9, [%9+4*r3]
 
473
%endif
 
474
%endmacro
 
475
 
 
476
%macro DIFFx2 6-7
 
477
    movh       %3, %5
 
478
    punpcklbw  %3, %4
 
479
    psraw      %1, 6
 
480
    paddsw     %1, %3
 
481
    movh       %3, %6
 
482
    punpcklbw  %3, %4
 
483
    psraw      %2, 6
 
484
    paddsw     %2, %3
 
485
    packuswb   %2, %1
 
486
%endmacro
 
487
 
 
488
%macro STORE_DIFF 4
 
489
    movh       %2, %4
 
490
    punpcklbw  %2, %3
 
491
    psraw      %1, 6
 
492
    paddsw     %1, %2
 
493
    packuswb   %1, %1
 
494
    movh       %4, %1
 
495
%endmacro
 
496
 
 
497
%macro STORE_DIFFx2 8 ; add1, add2, reg1, reg2, zero, shift, source, stride
 
498
    movh       %3, [%7]
 
499
    movh       %4, [%7+%8]
 
500
    psraw      %1, %6
 
501
    psraw      %2, %6
 
502
    punpcklbw  %3, %5
 
503
    punpcklbw  %4, %5
 
504
    paddw      %3, %1
 
505
    paddw      %4, %2
 
506
    packuswb   %3, %5
 
507
    packuswb   %4, %5
 
508
    movh     [%7], %3
 
509
    movh  [%7+%8], %4
 
510
%endmacro
 
511
 
 
512
%macro PMINUB_MMX 3 ; dst, src, tmp
 
513
    mova     %3, %1
 
514
    psubusb  %3, %2
 
515
    psubb    %1, %3
 
516
%endmacro
 
517
 
 
518
%macro PMINUB_MMXEXT 3 ; dst, src, ignored
 
519
    pminub   %1, %2
 
520
%endmacro
 
521
 
 
522
%macro SPLATW 2-3 0
 
523
%if mmsize == 16
 
524
    pshuflw    %1, %2, (%3)*0x55
 
525
    punpcklqdq %1, %1
 
526
%else
 
527
    pshufw     %1, %2, (%3)*0x55
 
528
%endif
 
529
%endmacro
 
530
 
 
531
%macro SPLATD 2-3 0
 
532
%if mmsize == 16
 
533
    pshufd %1, %2, (%3)*0x55
 
534
%else
 
535
    pshufw %1, %2, (%3)*0x11 + ((%3)+1)*0x44
 
536
%endif
 
537
%endmacro
 
538
 
 
539
%macro SPLATD_MMX 1
 
540
    punpckldq  %1, %1
 
541
%endmacro
 
542
 
 
543
%macro SPLATD_SSE 1
 
544
    shufps  %1, %1, 0
 
545
%endmacro
 
546
 
 
547
%macro SPLATD_SSE2 1
 
548
    pshufd  %1, %1, 0
 
549
%endmacro
 
550
 
 
551
%macro CLIPW 3 ;(dst, min, max)
 
552
    pmaxsw %1, %2
 
553
    pminsw %1, %3
 
554
%endmacro
 
555
 
 
556
%macro PMINSD_MMX 3 ; dst, src, tmp
 
557
    mova      %3, %2
 
558
    pcmpgtd   %3, %1
 
559
    pxor      %1, %2
 
560
    pand      %1, %3
 
561
    pxor      %1, %2
 
562
%endmacro
 
563
 
 
564
%macro PMAXSD_MMX 3 ; dst, src, tmp
 
565
    mova      %3, %1
 
566
    pcmpgtd   %3, %2
 
567
    pand      %1, %3
 
568
    pandn     %3, %2
 
569
    por       %1, %3
 
570
%endmacro
 
571
 
 
572
%macro CLIPD_MMX 3-4 ; src/dst, min, max, tmp
 
573
    PMINSD_MMX %1, %3, %4
 
574
    PMAXSD_MMX %1, %2, %4
 
575
%endmacro
 
576
 
 
577
%macro CLIPD_SSE2 3-4 ; src/dst, min (float), max (float), unused
 
578
    cvtdq2ps  %1, %1
 
579
    minps     %1, %3
 
580
    maxps     %1, %2
 
581
    cvtps2dq  %1, %1
 
582
%endmacro
 
583
 
 
584
%macro CLIPD_SSE41 3-4 ;  src/dst, min, max, unused
 
585
    pminsd  %1, %3
 
586
    pmaxsd  %1, %2
 
587
%endmacro