~medibuntu-maintainers/mplayer/medibuntu.precise

« back to all changes in this revision

Viewing changes to ffmpeg/libavcodec/x86/h264_intrapred_10bit.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:
27
27
 
28
28
SECTION_RODATA
29
29
 
30
 
SECTION .text
31
 
 
 
30
cextern pw_16
 
31
cextern pw_8
32
32
cextern pw_4
 
33
cextern pw_2
33
34
cextern pw_1
34
35
 
 
36
pw_m32101234: dw -3, -2, -1, 0, 1, 2, 3, 4
 
37
pw_m3:        times 8 dw -3
 
38
pw_pixel_max: times 8 dw ((1 << 10)-1)
 
39
pw_512:       times 8 dw 512
 
40
pd_17:        times 4 dd 17
 
41
pd_16:        times 4 dd 16
 
42
 
 
43
SECTION .text
 
44
 
 
45
; dest, left, right, src
 
46
; output: %1 = (t[n-1] + t[n]*2 + t[n+1] + 2) >> 2
35
47
%macro PRED4x4_LOWPASS 4
36
48
    paddw       %2, %3
37
49
    psrlw       %2, 1
52
64
    movq      m3, [r0]
53
65
    punpckhdq m1, m2
54
66
    PALIGNR   m3, m1, 10, m1
55
 
    mova      m1, m3
56
67
    movhps    m4, [r1+r2*1-8]
57
 
    PALIGNR   m3, m4, 14, m4
58
 
    mova      m2, m3
 
68
    PALIGNR   m0, m3, m4, 14, m4
59
69
    movhps    m4, [r1+r2*2-8]
60
 
    PALIGNR   m3, m4, 14, m4
61
 
    PRED4x4_LOWPASS m0, m3, m1, m2
 
70
    PALIGNR   m2, m0, m4, 14, m4
 
71
    PRED4x4_LOWPASS m0, m2, m3, m0
62
72
    movq      [r1+r2*2], m0
63
73
    psrldq    m0, 2
64
74
    movq      [r1+r2*1], m0
92
102
    pavgw   m5, m0
93
103
    movhps  m1, [r0+r2*1-8]
94
104
    PALIGNR m0, m1, 14, m1      ; ....t3t2t1t0ltl0
95
 
    mova    m1, m0
96
105
    movhps  m2, [r0+r2*2-8]
97
 
    PALIGNR m0, m2, 14, m2      ; ..t3t2t1t0ltl0l1
98
 
    mova    m2, m0
 
106
    PALIGNR m1, m0, m2, 14, m2  ; ..t3t2t1t0ltl0l1
99
107
    movhps  m3, [r1+r2*1-8]
100
 
    PALIGNR m0, m3, 14, m3      ; t3t2t1t0ltl0l1l2
101
 
    PRED4x4_LOWPASS m3, m1, m0, m2
102
 
    pslldq  m1, m3, 12
103
 
    psrldq  m3, 4
 
108
    PALIGNR m2, m1, m3, 14, m3  ; t3t2t1t0ltl0l1l2
 
109
    PRED4x4_LOWPASS m1, m0, m2, m1
 
110
    pslldq  m0, m1, 12
 
111
    psrldq  m1, 4
104
112
    movq    [r0+r2*1], m5
105
 
    movq    [r0+r2*2], m3
106
 
    PALIGNR m5, m1, 14, m2
107
 
    pslldq  m1, 2
 
113
    movq    [r0+r2*2], m1
 
114
    PALIGNR m5, m0, 14, m2
 
115
    pslldq  m0, 2
108
116
    movq    [r1+r2*1], m5
109
 
    PALIGNR m3, m1, 14, m1
110
 
    movq    [r1+r2*2], m3
 
117
    PALIGNR m1, m0, 14, m0
 
118
    movq    [r1+r2*2], m1
111
119
    RET
112
120
%endmacro
113
121
 
140
148
    punpckhdq  m1, m2          ; l0 l1 l2 l3
141
149
    punpckhqdq m1, m0          ; t2 t1 t0 lt l0 l1 l2 l3
142
150
    psrldq     m0, m1, 4       ; .. .. t2 t1 t0 lt l0 l1
143
 
    psrldq     m2, m1, 2       ; .. t2 t1 t0 lt l0 l1 l2
144
 
    pavgw      m5, m1, m2
145
 
    PRED4x4_LOWPASS m3, m1, m0, m2
 
151
    psrldq     m3, m1, 2       ; .. t2 t1 t0 lt l0 l1 l2
 
152
    pavgw      m5, m1, m3
 
153
    PRED4x4_LOWPASS m3, m1, m0, m3
146
154
    punpcklwd  m5, m3
147
155
    psrldq     m3, 8
148
156
    PALIGNR    m3, m5, 12, m4
208
216
;-----------------------------------------------------------------------------
209
217
; void pred4x4_down_left(pixel *src, const pixel *topright, int stride)
210
218
;-----------------------------------------------------------------------------
211
 
;TODO: more AVX here
212
219
%macro PRED4x4_DL 1
213
220
cglobal pred4x4_down_left_10_%1, 3,3
214
221
    sub        r0, r2
215
 
    movq       m1, [r0]
216
 
    movhps     m1, [r1]
217
 
    pslldq     m5, m1, 2
218
 
    pxor       m2, m5, m1
219
 
    psrldq     m2, 2
220
 
    pxor       m3, m1, m2
221
 
    PRED4x4_LOWPASS m0, m5, m3, m1
 
222
    movq       m0, [r0]
 
223
    movhps     m0, [r1]
 
224
    psrldq     m2, m0, 2
 
225
    pslldq     m3, m0, 2
 
226
    pshufhw    m2, m2, 10100100b
 
227
    PRED4x4_LOWPASS m0, m3, m2, m0
222
228
    lea        r1, [r0+r2*2]
223
229
    movhps     [r1+r2*2], m0
224
230
    psrldq     m0, 2
245
251
    sub        r0, r2
246
252
    movu       m1, [r0]
247
253
    movhps     m1, [r1]
248
 
    psrldq     m3, m1, 2
 
254
    psrldq     m0, m1, 2
249
255
    psrldq     m2, m1, 4
250
 
    pavgw      m4, m3, m1
251
 
    PRED4x4_LOWPASS m0, m1, m2, m3
 
256
    pavgw      m4, m0, m1
 
257
    PRED4x4_LOWPASS m0, m1, m2, m0
252
258
    lea        r1, [r0+r2*2]
253
259
    movq       [r0+r2*1], m4
254
260
    movq       [r0+r2*2], m0
286
292
    pavgw     m2, m0
287
293
 
288
294
    pshufw    m5, m0, 11111110b
289
 
    PRED4x4_LOWPASS m3, m0, m5, m1
 
295
    PRED4x4_LOWPASS m1, m0, m5, m1
290
296
    movq      m6, m2
291
 
    punpcklwd m6, m3
 
297
    punpcklwd m6, m1
292
298
    movq      [r0+r2*1], m6
293
299
    psrlq     m2, 16
294
 
    psrlq     m3, 16
295
 
    punpcklwd m2, m3
 
300
    psrlq     m1, 16
 
301
    punpcklwd m2, m1
296
302
    movq      [r0+r2*2], m2
297
303
    psrlq     m2, 32
298
304
    movd      [r1+r2*1], m2
321
327
;-----------------------------------------------------------------------------
322
328
INIT_XMM
323
329
cglobal pred8x8_horizontal_10_sse2, 2,3
324
 
    mov          r2, 4
 
330
    mov         r2d, 4
325
331
.loop:
326
332
    movq         m0, [r0+r1*0-8]
327
333
    movq         m1, [r0+r1*1-8]
332
338
    mova  [r0+r1*0], m0
333
339
    mova  [r0+r1*1], m1
334
340
    lea          r0, [r0+r1*2]
335
 
    dec          r2
336
 
    jg .loop
337
 
    REP_RET
 
341
    dec          r2d
 
342
    jg .loop
 
343
    REP_RET
 
344
 
 
345
;-----------------------------------------------------------------------------
 
346
; void predict_8x8_dc(pixel *src, int stride)
 
347
;-----------------------------------------------------------------------------
 
348
%macro MOV8 2-3
 
349
; sort of a hack, but it works
 
350
%if mmsize==8
 
351
    movq    [%1+0], %2
 
352
    movq    [%1+8], %3
 
353
%else
 
354
    movdqa    [%1], %2
 
355
%endif
 
356
%endmacro
 
357
 
 
358
%macro PRED8x8_DC 2
 
359
cglobal pred8x8_dc_10_%1, 2,6
 
360
    sub         r0, r1
 
361
    pxor        m4, m4
 
362
    movq        m0, [r0+0]
 
363
    movq        m1, [r0+8]
 
364
%if mmsize==16
 
365
    punpcklwd   m0, m1
 
366
    movhlps     m1, m0
 
367
    paddw       m0, m1
 
368
%else
 
369
    pshufw      m2, m0, 00001110b
 
370
    pshufw      m3, m1, 00001110b
 
371
    paddw       m0, m2
 
372
    paddw       m1, m3
 
373
    punpcklwd   m0, m1
 
374
%endif
 
375
    %2          m2, m0, 00001110b
 
376
    paddw       m0, m2
 
377
 
 
378
    lea         r5, [r1*3]
 
379
    lea         r4, [r0+r1*4]
 
380
    movzx      r2d, word [r0+r1*1-2]
 
381
    movzx      r3d, word [r0+r1*2-2]
 
382
    add        r2d, r3d
 
383
    movzx      r3d, word [r0+r5*1-2]
 
384
    add        r2d, r3d
 
385
    movzx      r3d, word [r4-2]
 
386
    add        r2d, r3d
 
387
    movd        m2, r2d            ; s2
 
388
 
 
389
    movzx      r2d, word [r4+r1*1-2]
 
390
    movzx      r3d, word [r4+r1*2-2]
 
391
    add        r2d, r3d
 
392
    movzx      r3d, word [r4+r5*1-2]
 
393
    add        r2d, r3d
 
394
    movzx      r3d, word [r4+r1*4-2]
 
395
    add        r2d, r3d
 
396
    movd        m3, r2d            ; s3
 
397
 
 
398
    punpcklwd   m2, m3
 
399
    punpckldq   m0, m2            ; s0, s1, s2, s3
 
400
    %2          m3, m0, 11110110b ; s2, s1, s3, s3
 
401
    %2          m0, m0, 01110100b ; s0, s1, s3, s1
 
402
    paddw       m0, m3
 
403
    psrlw       m0, 2
 
404
    pavgw       m0, m4            ; s0+s2, s1, s3, s1+s3
 
405
%if mmsize==16
 
406
    punpcklwd   m0, m0
 
407
    pshufd      m3, m0, 11111010b
 
408
    punpckldq   m0, m0
 
409
    SWAP         0,1
 
410
%else
 
411
    pshufw      m1, m0, 0x00
 
412
    pshufw      m2, m0, 0x55
 
413
    pshufw      m3, m0, 0xaa
 
414
    pshufw      m4, m0, 0xff
 
415
%endif
 
416
    MOV8   r0+r1*1, m1, m2
 
417
    MOV8   r0+r1*2, m1, m2
 
418
    MOV8   r0+r5*1, m1, m2
 
419
    MOV8   r0+r1*4, m1, m2
 
420
    MOV8   r4+r1*1, m3, m4
 
421
    MOV8   r4+r1*2, m3, m4
 
422
    MOV8   r4+r5*1, m3, m4
 
423
    MOV8   r4+r1*4, m3, m4
 
424
    RET
 
425
%endmacro
 
426
 
 
427
INIT_MMX
 
428
PRED8x8_DC mmxext, pshufw
 
429
INIT_XMM
 
430
PRED8x8_DC sse2  , pshuflw
 
431
 
 
432
;-----------------------------------------------------------------------------
 
433
; void pred8x8_top_dc(pixel *src, int stride)
 
434
;-----------------------------------------------------------------------------
 
435
INIT_XMM
 
436
cglobal pred8x8_top_dc_10_sse2, 2,4
 
437
    sub         r0, r1
 
438
    mova        m0, [r0]
 
439
    pshuflw     m1, m0, 0x4e
 
440
    pshufhw     m1, m1, 0x4e
 
441
    paddw       m0, m1
 
442
    pshuflw     m1, m0, 0xb1
 
443
    pshufhw     m1, m1, 0xb1
 
444
    paddw       m0, m1
 
445
    lea         r2, [r1*3]
 
446
    lea         r3, [r0+r1*4]
 
447
    paddw       m0, [pw_2]
 
448
    psrlw       m0, 2
 
449
    mova [r0+r1*1], m0
 
450
    mova [r0+r1*2], m0
 
451
    mova [r0+r2*1], m0
 
452
    mova [r0+r1*4], m0
 
453
    mova [r3+r1*1], m0
 
454
    mova [r3+r1*2], m0
 
455
    mova [r3+r2*1], m0
 
456
    mova [r3+r1*4], m0
 
457
    RET
 
458
 
 
459
;-----------------------------------------------------------------------------
 
460
; void pred8x8_plane(pixel *src, int stride)
 
461
;-----------------------------------------------------------------------------
 
462
INIT_XMM
 
463
cglobal pred8x8_plane_10_sse2, 2,7,7
 
464
    sub       r0, r1
 
465
    lea       r2, [r1*3]
 
466
    lea       r3, [r0+r1*4]
 
467
    mova      m2, [r0]
 
468
    pmaddwd   m2, [pw_m32101234]
 
469
    HADDD     m2, m1
 
470
    movd      m0, [r0-4]
 
471
    psrld     m0, 14
 
472
    psubw     m2, m0               ; H
 
473
    movd      m0, [r3+r1*4-4]
 
474
    movd      m1, [r0+12]
 
475
    paddw     m0, m1
 
476
    psllw     m0, 4                ; 16*(src[7*stride-1] + src[-stride+7])
 
477
    movzx    r4d, word [r3+r1*1-2] ; src[4*stride-1]
 
478
    movzx    r5d, word [r0+r2*1-2] ; src[2*stride-1]
 
479
    sub      r4d, r5d
 
480
    movzx    r6d, word [r3+r1*2-2] ; src[5*stride-1]
 
481
    movzx    r5d, word [r0+r1*2-2] ; src[1*stride-1]
 
482
    sub      r6d, r5d
 
483
    lea      r4d, [r4+r6*2]
 
484
    movzx    r5d, word [r3+r2*1-2] ; src[6*stride-1]
 
485
    movzx    r6d, word [r0+r1*1-2] ; src[0*stride-1]
 
486
    sub      r5d, r6d
 
487
    lea      r5d, [r5*3]
 
488
    add      r4d, r5d
 
489
    movzx    r6d, word [r3+r1*4-2] ; src[7*stride-1]
 
490
    movzx    r5d, word [r0+r1*0-2] ; src[ -stride-1]
 
491
    sub      r6d, r5d
 
492
    lea      r4d, [r4+r6*4]
 
493
    movd      m3, r4d              ; V
 
494
    punpckldq m2, m3
 
495
    pmaddwd   m2, [pd_17]
 
496
    paddd     m2, [pd_16]
 
497
    psrad     m2, 5                ; b, c
 
498
 
 
499
    mova      m3, [pw_pixel_max]
 
500
    pxor      m1, m1
 
501
    SPLATW    m0, m0, 1
 
502
    SPLATW    m4, m2, 2
 
503
    SPLATW    m2, m2, 0
 
504
    pmullw    m2, [pw_m32101234]   ; b
 
505
    pmullw    m5, m4, [pw_m3]      ; c
 
506
    paddw     m5, [pw_16]
 
507
    mov      r2d, 8
 
508
    add       r0, r1
 
509
.loop:
 
510
    paddsw    m6, m2, m5
 
511
    paddsw    m6, m0
 
512
    psraw     m6, 5
 
513
    CLIPW     m6, m1, m3
 
514
    mova    [r0], m6
 
515
    paddw     m5, m4
 
516
    add       r0, r1
 
517
    dec r2d
 
518
    jg .loop
 
519
    REP_RET
 
520
 
 
521
 
 
522
;-----------------------------------------------------------------------------
 
523
; void pred8x8l_128_dc(pixel *src, int has_topleft, int has_topright, int stride)
 
524
;-----------------------------------------------------------------------------
 
525
%macro PRED8x8L_128_DC 1
 
526
cglobal pred8x8l_128_dc_10_%1, 4,4
 
527
    mova      m0, [pw_512] ; (1<<(BIT_DEPTH-1))
 
528
    lea       r1, [r3*3]
 
529
    lea       r2, [r0+r3*4]
 
530
    MOV8 r0+r3*0, m0, m0
 
531
    MOV8 r0+r3*1, m0, m0
 
532
    MOV8 r0+r3*2, m0, m0
 
533
    MOV8 r0+r1*1, m0, m0
 
534
    MOV8 r2+r3*0, m0, m0
 
535
    MOV8 r2+r3*1, m0, m0
 
536
    MOV8 r2+r3*2, m0, m0
 
537
    MOV8 r2+r1*1, m0, m0
 
538
    RET
 
539
%endmacro
 
540
 
 
541
INIT_MMX
 
542
PRED8x8L_128_DC mmxext
 
543
INIT_XMM
 
544
PRED8x8L_128_DC sse2
 
545
 
 
546
;-----------------------------------------------------------------------------
 
547
; void pred8x8l_top_dc(pixel *src, int has_topleft, int has_topright, int stride)
 
548
;-----------------------------------------------------------------------------
 
549
%macro PRED8x8L_TOP_DC 1
 
550
cglobal pred8x8l_top_dc_10_%1, 4,4,6
 
551
    sub         r0, r3
 
552
    mova        m0, [r0]
 
553
    shr        r1d, 14
 
554
    shr        r2d, 13
 
555
    neg         r1
 
556
    pslldq      m1, m0, 2
 
557
    psrldq      m2, m0, 2
 
558
    pinsrw      m1, [r0+r1], 0
 
559
    pinsrw      m2, [r0+r2+14], 7
 
560
    lea         r1, [r3*3]
 
561
    lea         r2, [r0+r3*4]
 
562
    PRED4x4_LOWPASS m0, m2, m1, m0
 
563
    HADDW       m0, m1
 
564
    paddw       m0, [pw_4]
 
565
    psrlw       m0, 3
 
566
    SPLATW      m0, m0, 0
 
567
    mova [r0+r3*1], m0
 
568
    mova [r0+r3*2], m0
 
569
    mova [r0+r1*1], m0
 
570
    mova [r0+r3*4], m0
 
571
    mova [r2+r3*1], m0
 
572
    mova [r2+r3*2], m0
 
573
    mova [r2+r1*1], m0
 
574
    mova [r2+r3*4], m0
 
575
    RET
 
576
%endmacro
 
577
 
 
578
INIT_XMM
 
579
PRED8x8L_TOP_DC sse2
 
580
%ifdef HAVE_AVX
 
581
INIT_AVX
 
582
PRED8x8L_TOP_DC avx
 
583
%endif
 
584
 
 
585
;-----------------------------------------------------------------------------
 
586
;void pred8x8l_dc(pixel *src, int has_topleft, int has_topright, int stride)
 
587
;-----------------------------------------------------------------------------
 
588
;TODO: see if scalar is faster
 
589
%macro PRED8x8L_DC 1
 
590
cglobal pred8x8l_dc_10_%1, 4,6,6
 
591
    sub         r0, r3
 
592
    lea         r4, [r0+r3*4]
 
593
    lea         r5, [r3*3]
 
594
    mova        m0, [r0+r3*2-16]
 
595
    punpckhwd   m0, [r0+r3*1-16]
 
596
    mova        m1, [r4+r3*0-16]
 
597
    punpckhwd   m1, [r0+r5*1-16]
 
598
    punpckhdq   m1, m0
 
599
    mova        m2, [r4+r3*2-16]
 
600
    punpckhwd   m2, [r4+r3*1-16]
 
601
    mova        m3, [r4+r3*4-16]
 
602
    punpckhwd   m3, [r4+r5*1-16]
 
603
    punpckhdq   m3, m2
 
604
    punpckhqdq  m3, m1
 
605
    mova        m0, [r0]
 
606
    shr        r1d, 14
 
607
    shr        r2d, 13
 
608
    neg         r1
 
609
    pslldq      m1, m0, 2
 
610
    psrldq      m2, m0, 2
 
611
    pinsrw      m1, [r0+r1], 0
 
612
    pinsrw      m2, [r0+r2+14], 7
 
613
    not         r1
 
614
    and         r1, r3
 
615
    pslldq      m4, m3, 2
 
616
    psrldq      m5, m3, 2
 
617
    pshuflw     m4, m4, 11100101b
 
618
    pinsrw      m5, [r0+r1-2], 7
 
619
    PRED4x4_LOWPASS m3, m4, m5, m3
 
620
    PRED4x4_LOWPASS m0, m2, m1, m0
 
621
    paddw       m0, m3
 
622
    HADDW       m0, m1
 
623
    paddw       m0, [pw_8]
 
624
    psrlw       m0, 4
 
625
    SPLATW      m0, m0
 
626
    mova [r0+r3*1], m0
 
627
    mova [r0+r3*2], m0
 
628
    mova [r0+r5*1], m0
 
629
    mova [r0+r3*4], m0
 
630
    mova [r4+r3*1], m0
 
631
    mova [r4+r3*2], m0
 
632
    mova [r4+r5*1], m0
 
633
    mova [r4+r3*4], m0
 
634
    RET
 
635
%endmacro
 
636
 
 
637
INIT_XMM
 
638
PRED8x8L_DC sse2
 
639
%ifdef HAVE_AVX
 
640
INIT_AVX
 
641
PRED8x8L_DC avx
 
642
%endif
 
643
 
 
644
;-----------------------------------------------------------------------------
 
645
; void pred8x8l_vertical(pixel *src, int has_topleft, int has_topright, int stride)
 
646
;-----------------------------------------------------------------------------
 
647
%macro PRED8x8L_VERTICAL 1
 
648
cglobal pred8x8l_vertical_10_%1, 4,4,6
 
649
    sub         r0, r3
 
650
    mova        m0, [r0]
 
651
    shr        r1d, 14
 
652
    shr        r2d, 13
 
653
    neg         r1
 
654
    pslldq      m1, m0, 2
 
655
    psrldq      m2, m0, 2
 
656
    pinsrw      m1, [r0+r1], 0
 
657
    pinsrw      m2, [r0+r2+14], 7
 
658
    lea         r1, [r3*3]
 
659
    lea         r2, [r0+r3*4]
 
660
    PRED4x4_LOWPASS m0, m2, m1, m0
 
661
    mova [r0+r3*1], m0
 
662
    mova [r0+r3*2], m0
 
663
    mova [r0+r1*1], m0
 
664
    mova [r0+r3*4], m0
 
665
    mova [r2+r3*1], m0
 
666
    mova [r2+r3*2], m0
 
667
    mova [r2+r1*1], m0
 
668
    mova [r2+r3*4], m0
 
669
    RET
 
670
%endmacro
 
671
 
 
672
INIT_XMM
 
673
PRED8x8L_VERTICAL sse2
 
674
%ifdef HAVE_AVX
 
675
INIT_AVX
 
676
PRED8x8L_VERTICAL avx
 
677
%endif
 
678
 
 
679
;-----------------------------------------------------------------------------
 
680
; void pred8x8l_horizontal(uint8_t *src, int has_topleft, int has_topright, int stride)
 
681
;-----------------------------------------------------------------------------
 
682
%macro PRED8x8L_HORIZONTAL 1
 
683
cglobal pred8x8l_horizontal_10_%1, 4,4,5
 
684
    mova        m0, [r0-16]
 
685
    shr        r1d, 14
 
686
    dec         r1
 
687
    and         r1, r3
 
688
    sub         r1, r3
 
689
    punpckhwd   m0, [r0+r1-16]
 
690
    mova        m1, [r0+r3*2-16]
 
691
    punpckhwd   m1, [r0+r3*1-16]
 
692
    lea         r2, [r0+r3*4]
 
693
    lea         r1, [r3*3]
 
694
    punpckhdq   m1, m0
 
695
    mova        m2, [r2+r3*0-16]
 
696
    punpckhwd   m2, [r0+r1-16]
 
697
    mova        m3, [r2+r3*2-16]
 
698
    punpckhwd   m3, [r2+r3*1-16]
 
699
    punpckhdq   m3, m2
 
700
    punpckhqdq  m3, m1
 
701
    PALIGNR     m4, m3, [r2+r1-16], 14, m0
 
702
    pslldq      m0, m4, 2
 
703
    pshuflw     m0, m0, 11100101b
 
704
    PRED4x4_LOWPASS m4, m3, m0, m4
 
705
    punpckhwd   m3, m4, m4
 
706
    punpcklwd   m4, m4
 
707
    pshufd      m0, m3, 0xff
 
708
    pshufd      m1, m3, 0xaa
 
709
    pshufd      m2, m3, 0x55
 
710
    pshufd      m3, m3, 0x00
 
711
    mova [r0+r3*0], m0
 
712
    mova [r0+r3*1], m1
 
713
    mova [r0+r3*2], m2
 
714
    mova [r0+r1*1], m3
 
715
    pshufd      m0, m4, 0xff
 
716
    pshufd      m1, m4, 0xaa
 
717
    pshufd      m2, m4, 0x55
 
718
    pshufd      m3, m4, 0x00
 
719
    mova [r2+r3*0], m0
 
720
    mova [r2+r3*1], m1
 
721
    mova [r2+r3*2], m2
 
722
    mova [r2+r1*1], m3
 
723
    RET
 
724
%endmacro
 
725
 
 
726
INIT_XMM
 
727
%define PALIGNR PALIGNR_MMX
 
728
PRED8x8L_HORIZONTAL sse2
 
729
%define PALIGNR PALIGNR_SSSE3
 
730
PRED8x8L_HORIZONTAL ssse3
 
731
%ifdef HAVE_AVX
 
732
INIT_AVX
 
733
PRED8x8L_HORIZONTAL avx
 
734
%endif
 
735
 
 
736
;-----------------------------------------------------------------------------
 
737
;void pred8x8l_down_left(pixel *src, int has_topleft, int has_topright, int stride)
 
738
;-----------------------------------------------------------------------------
 
739
%macro PRED8x8L_DOWN_LEFT 1
 
740
cglobal pred8x8l_down_left_10_%1, 4,4,7
 
741
    sub         r0, r3
 
742
    mova        m3, [r0]
 
743
    shr        r1d, 14
 
744
    neg         r1
 
745
    shr        r2d, 13
 
746
    pslldq      m1, m3, 2
 
747
    psrldq      m2, m3, 2
 
748
    pinsrw      m1, [r0+r1], 0
 
749
    pinsrw      m2, [r0+r2+14], 7
 
750
    PRED4x4_LOWPASS m6, m2, m1, m3
 
751
    jz .fix_tr ; flags from shr r2d
 
752
    mova        m1, [r0+16]
 
753
    psrldq      m5, m1, 2
 
754
    PALIGNR     m2, m1, m3, 14, m3
 
755
    pshufhw     m5, m5, 10100100b
 
756
    PRED4x4_LOWPASS m1, m2, m5, m1
 
757
.do_topright:
 
758
    lea         r1, [r3*3]
 
759
    psrldq      m5, m1, 14
 
760
    lea         r2, [r0+r3*4]
 
761
    PALIGNR     m2, m1, m6,  2, m0
 
762
    PALIGNR     m3, m1, m6, 14, m0
 
763
    PALIGNR     m5, m1,  2, m0
 
764
    pslldq      m4, m6, 2
 
765
    PRED4x4_LOWPASS m6, m4, m2, m6
 
766
    PRED4x4_LOWPASS m1, m3, m5, m1
 
767
    mova [r2+r3*4], m1
 
768
    PALIGNR     m1, m6, 14, m2
 
769
    pslldq      m6, 2
 
770
    mova [r2+r1*1], m1
 
771
    PALIGNR     m1, m6, 14, m2
 
772
    pslldq      m6, 2
 
773
    mova [r2+r3*2], m1
 
774
    PALIGNR     m1, m6, 14, m2
 
775
    pslldq      m6, 2
 
776
    mova [r2+r3*1], m1
 
777
    PALIGNR     m1, m6, 14, m2
 
778
    pslldq      m6, 2
 
779
    mova [r0+r3*4], m1
 
780
    PALIGNR     m1, m6, 14, m2
 
781
    pslldq      m6, 2
 
782
    mova [r0+r1*1], m1
 
783
    PALIGNR     m1, m6, 14, m2
 
784
    pslldq      m6, 2
 
785
    mova [r0+r3*2], m1
 
786
    PALIGNR     m1, m6, 14, m6
 
787
    mova [r0+r3*1], m1
 
788
    RET
 
789
.fix_tr:
 
790
    punpckhwd   m3, m3
 
791
    pshufd      m1, m3, 0xFF
 
792
    jmp .do_topright
 
793
%endmacro
 
794
 
 
795
INIT_XMM
 
796
%define PALIGNR PALIGNR_MMX
 
797
PRED8x8L_DOWN_LEFT sse2
 
798
%define PALIGNR PALIGNR_SSSE3
 
799
PRED8x8L_DOWN_LEFT ssse3
 
800
%ifdef HAVE_AVX
 
801
INIT_AVX
 
802
PRED8x8L_DOWN_LEFT avx
 
803
%endif
 
804
 
 
805
;-----------------------------------------------------------------------------
 
806
;void pred8x8l_down_right(pixel *src, int has_topleft, int has_topright, int stride)
 
807
;-----------------------------------------------------------------------------
 
808
%macro PRED8x8L_DOWN_RIGHT 1
 
809
; standard forbids this when has_topleft is false
 
810
; no need to check
 
811
cglobal pred8x8l_down_right_10_%1, 4,5,8
 
812
    sub         r0, r3
 
813
    lea         r4, [r0+r3*4]
 
814
    lea         r1, [r3*3]
 
815
    mova        m0, [r0+r3*1-16]
 
816
    punpckhwd   m0, [r0+r3*0-16]
 
817
    mova        m1, [r0+r1*1-16]
 
818
    punpckhwd   m1, [r0+r3*2-16]
 
819
    punpckhdq   m1, m0
 
820
    mova        m2, [r4+r3*1-16]
 
821
    punpckhwd   m2, [r4+r3*0-16]
 
822
    mova        m3, [r4+r1*1-16]
 
823
    punpckhwd   m3, [r4+r3*2-16]
 
824
    punpckhdq   m3, m2
 
825
    punpckhqdq  m3, m1
 
826
    mova        m0, [r4+r3*4-16]
 
827
    mova        m1, [r0]
 
828
    PALIGNR     m4, m3, m0, 14, m0
 
829
    PALIGNR     m1, m3,  2, m2
 
830
    pslldq      m0, m4, 2
 
831
    pshuflw     m0, m0, 11100101b
 
832
    PRED4x4_LOWPASS m6, m1, m4, m3
 
833
    PRED4x4_LOWPASS m4, m3, m0, m4
 
834
    mova        m3, [r0]
 
835
    shr        r2d, 13
 
836
    pslldq      m1, m3, 2
 
837
    psrldq      m2, m3, 2
 
838
    pinsrw      m1, [r0-2], 0
 
839
    pinsrw      m2, [r0+r2+14], 7
 
840
    PRED4x4_LOWPASS m3, m2, m1, m3
 
841
    PALIGNR     m2, m3, m6,  2, m0
 
842
    PALIGNR     m5, m3, m6, 14, m0
 
843
    psrldq      m7, m3, 2
 
844
    PRED4x4_LOWPASS m6, m4, m2, m6
 
845
    PRED4x4_LOWPASS m3, m5, m7, m3
 
846
    mova [r4+r3*4], m6
 
847
    PALIGNR     m3, m6, 14, m2
 
848
    pslldq      m6, 2
 
849
    mova [r0+r3*1], m3
 
850
    PALIGNR     m3, m6, 14, m2
 
851
    pslldq      m6, 2
 
852
    mova [r0+r3*2], m3
 
853
    PALIGNR     m3, m6, 14, m2
 
854
    pslldq      m6, 2
 
855
    mova [r0+r1*1], m3
 
856
    PALIGNR     m3, m6, 14, m2
 
857
    pslldq      m6, 2
 
858
    mova [r0+r3*4], m3
 
859
    PALIGNR     m3, m6, 14, m2
 
860
    pslldq      m6, 2
 
861
    mova [r4+r3*1], m3
 
862
    PALIGNR     m3, m6, 14, m2
 
863
    pslldq      m6, 2
 
864
    mova [r4+r3*2], m3
 
865
    PALIGNR     m3, m6, 14, m6
 
866
    mova [r4+r1*1], m3
 
867
    RET
 
868
%endmacro
 
869
 
 
870
INIT_XMM
 
871
%define PALIGNR PALIGNR_MMX
 
872
PRED8x8L_DOWN_RIGHT sse2
 
873
%define PALIGNR PALIGNR_SSSE3
 
874
PRED8x8L_DOWN_RIGHT ssse3
 
875
%ifdef HAVE_AVX
 
876
INIT_AVX
 
877
PRED8x8L_DOWN_RIGHT avx
 
878
%endif
 
879
 
 
880
;-----------------------------------------------------------------------------
 
881
; void pred8x8l_vertical_right(pixel *src, int has_topleft, int has_topright, int stride)
 
882
;-----------------------------------------------------------------------------
 
883
%macro PRED8x8L_VERTICAL_RIGHT 1
 
884
; likewise with 8x8l_down_right
 
885
cglobal pred8x8l_vertical_right_10_%1, 4,5,7
 
886
    sub         r0, r3
 
887
    lea         r4, [r0+r3*4]
 
888
    lea         r1, [r3*3]
 
889
    mova        m0, [r0+r3*1-16]
 
890
    punpckhwd   m0, [r0+r3*0-16]
 
891
    mova        m1, [r0+r1*1-16]
 
892
    punpckhwd   m1, [r0+r3*2-16]
 
893
    punpckhdq   m1, m0
 
894
    mova        m2, [r4+r3*1-16]
 
895
    punpckhwd   m2, [r4+r3*0-16]
 
896
    mova        m3, [r4+r1*1-16]
 
897
    punpckhwd   m3, [r4+r3*2-16]
 
898
    punpckhdq   m3, m2
 
899
    punpckhqdq  m3, m1
 
900
    mova        m0, [r4+r3*4-16]
 
901
    mova        m1, [r0]
 
902
    PALIGNR     m4, m3, m0, 14, m0
 
903
    PALIGNR     m1, m3,  2, m2
 
904
    PRED4x4_LOWPASS m3, m1, m4, m3
 
905
    mova        m2, [r0]
 
906
    shr        r2d, 13
 
907
    pslldq      m1, m2, 2
 
908
    psrldq      m5, m2, 2
 
909
    pinsrw      m1, [r0-2], 0
 
910
    pinsrw      m5, [r0+r2+14], 7
 
911
    PRED4x4_LOWPASS m2, m5, m1, m2
 
912
    PALIGNR     m6, m2, m3, 12, m1
 
913
    PALIGNR     m5, m2, m3, 14, m0
 
914
    PRED4x4_LOWPASS m0, m6, m2, m5
 
915
    pavgw       m2, m5
 
916
    mova [r0+r3*2], m0
 
917
    mova [r0+r3*1], m2
 
918
    pslldq      m6, m3, 4
 
919
    pslldq      m1, m3, 2
 
920
    PRED4x4_LOWPASS m1, m3, m6, m1
 
921
    PALIGNR     m2, m1, 14, m4
 
922
    mova [r0+r1*1], m2
 
923
    pslldq      m1, 2
 
924
    PALIGNR     m0, m1, 14, m3
 
925
    mova [r0+r3*4], m0
 
926
    pslldq      m1, 2
 
927
    PALIGNR     m2, m1, 14, m4
 
928
    mova [r4+r3*1], m2
 
929
    pslldq      m1, 2
 
930
    PALIGNR     m0, m1, 14, m3
 
931
    mova [r4+r3*2], m0
 
932
    pslldq      m1, 2
 
933
    PALIGNR     m2, m1, 14, m4
 
934
    mova [r4+r1*1], m2
 
935
    pslldq      m1, 2
 
936
    PALIGNR     m0, m1, 14, m1
 
937
    mova [r4+r3*4], m0
 
938
    RET
 
939
%endmacro
 
940
 
 
941
INIT_XMM
 
942
%define PALIGNR PALIGNR_MMX
 
943
PRED8x8L_VERTICAL_RIGHT sse2
 
944
%define PALIGNR PALIGNR_SSSE3
 
945
PRED8x8L_VERTICAL_RIGHT ssse3
 
946
%ifdef HAVE_AVX
 
947
INIT_AVX
 
948
PRED8x8L_VERTICAL_RIGHT avx
 
949
%endif
 
950
 
 
951
;-----------------------------------------------------------------------------
 
952
; void pred8x8l_horizontal_up(pixel *src, int has_topleft, int has_topright, int stride)
 
953
;-----------------------------------------------------------------------------
 
954
%macro PRED8x8L_HORIZONTAL_UP 1
 
955
cglobal pred8x8l_horizontal_up_10_%1, 4,4,6
 
956
    mova        m0, [r0+r3*0-16]
 
957
    punpckhwd   m0, [r0+r3*1-16]
 
958
    shr        r1d, 14
 
959
    dec         r1
 
960
    and         r1, r3
 
961
    sub         r1, r3
 
962
    mova        m4, [r0+r1*1-16]
 
963
    lea         r1, [r3*3]
 
964
    lea         r2, [r0+r3*4]
 
965
    mova        m1, [r0+r3*2-16]
 
966
    punpckhwd   m1, [r0+r1*1-16]
 
967
    punpckhdq   m0, m1
 
968
    mova        m2, [r2+r3*0-16]
 
969
    punpckhwd   m2, [r2+r3*1-16]
 
970
    mova        m3, [r2+r3*2-16]
 
971
    punpckhwd   m3, [r2+r1*1-16]
 
972
    punpckhdq   m2, m3
 
973
    punpckhqdq  m0, m2
 
974
    PALIGNR     m1, m0, m4, 14, m4
 
975
    psrldq      m2, m0, 2
 
976
    pshufhw     m2, m2, 10100100b
 
977
    PRED4x4_LOWPASS m0, m1, m2, m0
 
978
    psrldq      m1, m0, 2
 
979
    psrldq      m2, m0, 4
 
980
    pshufhw     m1, m1, 10100100b
 
981
    pshufhw     m2, m2, 01010100b
 
982
    pavgw       m4, m0, m1
 
983
    PRED4x4_LOWPASS m1, m2, m0, m1
 
984
    punpckhwd   m5, m4, m1
 
985
    punpcklwd   m4, m1
 
986
    mova [r2+r3*0], m5
 
987
    mova [r0+r3*0], m4
 
988
    pshufd      m0, m5, 11111001b
 
989
    pshufd      m1, m5, 11111110b
 
990
    pshufd      m2, m5, 11111111b
 
991
    mova [r2+r3*1], m0
 
992
    mova [r2+r3*2], m1
 
993
    mova [r2+r1*1], m2
 
994
    PALIGNR     m2, m5, m4, 4, m0
 
995
    PALIGNR     m3, m5, m4, 8, m1
 
996
    PALIGNR     m5, m5, m4, 12, m4
 
997
    mova [r0+r3*1], m2
 
998
    mova [r0+r3*2], m3
 
999
    mova [r0+r1*1], m5
 
1000
    RET
 
1001
%endmacro
 
1002
 
 
1003
INIT_XMM
 
1004
%define PALIGNR PALIGNR_MMX
 
1005
PRED8x8L_HORIZONTAL_UP sse2
 
1006
%define PALIGNR PALIGNR_SSSE3
 
1007
PRED8x8L_HORIZONTAL_UP ssse3
 
1008
%ifdef HAVE_AVX
 
1009
INIT_AVX
 
1010
PRED8x8L_HORIZONTAL_UP avx
 
1011
%endif
 
1012
 
 
1013
 
 
1014
;-----------------------------------------------------------------------------
 
1015
; void pred16x16_vertical(pixel *src, int stride)
 
1016
;-----------------------------------------------------------------------------
 
1017
%macro MOV16 3-5
 
1018
    mova [%1+     0], %2
 
1019
    mova [%1+mmsize], %3
 
1020
%if mmsize==8
 
1021
    mova [%1+    16], %4
 
1022
    mova [%1+    24], %5
 
1023
%endif
 
1024
%endmacro
 
1025
 
 
1026
%macro PRED16x16_VERTICAL 1
 
1027
cglobal pred16x16_vertical_10_%1, 2,3
 
1028
    sub   r0, r1
 
1029
    mov  r2d, 8
 
1030
    mova  m0, [r0+ 0]
 
1031
    mova  m1, [r0+mmsize]
 
1032
%if mmsize==8
 
1033
    mova  m2, [r0+16]
 
1034
    mova  m3, [r0+24]
 
1035
%endif
 
1036
.loop:
 
1037
    MOV16 r0+r1*1, m0, m1, m2, m3
 
1038
    MOV16 r0+r1*2, m0, m1, m2, m3
 
1039
    lea   r0, [r0+r1*2]
 
1040
    dec   r2d
 
1041
    jg .loop
 
1042
    REP_RET
 
1043
%endmacro
 
1044
 
 
1045
INIT_MMX
 
1046
PRED16x16_VERTICAL mmxext
 
1047
INIT_XMM
 
1048
PRED16x16_VERTICAL sse2
 
1049
 
 
1050
;-----------------------------------------------------------------------------
 
1051
; void pred16x16_horizontal(pixel *src, int stride)
 
1052
;-----------------------------------------------------------------------------
 
1053
%macro PRED16x16_HORIZONTAL 1
 
1054
cglobal pred16x16_horizontal_10_%1, 2,3
 
1055
    mov   r2d, 8
 
1056
.vloop:
 
1057
    movd   m0, [r0+r1*0-4]
 
1058
    movd   m1, [r0+r1*1-4]
 
1059
    SPLATW m0, m0, 1
 
1060
    SPLATW m1, m1, 1
 
1061
    MOV16  r0+r1*0, m0, m0, m0, m0
 
1062
    MOV16  r0+r1*1, m1, m1, m1, m1
 
1063
    lea    r0, [r0+r1*2]
 
1064
    dec    r2d
 
1065
    jg .vloop
 
1066
    REP_RET
 
1067
%endmacro
 
1068
 
 
1069
INIT_MMX
 
1070
PRED16x16_HORIZONTAL mmxext
 
1071
INIT_XMM
 
1072
PRED16x16_HORIZONTAL sse2
 
1073
 
 
1074
;-----------------------------------------------------------------------------
 
1075
; void pred16x16_dc(pixel *src, int stride)
 
1076
;-----------------------------------------------------------------------------
 
1077
%macro PRED16x16_DC 1
 
1078
cglobal pred16x16_dc_10_%1, 2,6
 
1079
    mov        r5, r0
 
1080
    sub        r0, r1
 
1081
    mova       m0, [r0+0]
 
1082
    paddw      m0, [r0+mmsize]
 
1083
%if mmsize==8
 
1084
    paddw      m0, [r0+16]
 
1085
    paddw      m0, [r0+24]
 
1086
%endif
 
1087
    HADDW      m0, m2
 
1088
 
 
1089
    lea        r0, [r0+r1-2]
 
1090
    movzx     r3d, word [r0]
 
1091
    movzx     r4d, word [r0+r1]
 
1092
%rep 7
 
1093
    lea        r0, [r0+r1*2]
 
1094
    movzx     r2d, word [r0]
 
1095
    add       r3d, r2d
 
1096
    movzx     r2d, word [r0+r1]
 
1097
    add       r4d, r2d
 
1098
%endrep
 
1099
    lea       r3d, [r3+r4+16]
 
1100
 
 
1101
    movd       m1, r3d
 
1102
    paddw      m0, m1
 
1103
    psrlw      m0, 5
 
1104
    SPLATW     m0, m0
 
1105
    mov       r3d, 8
 
1106
.loop:
 
1107
    MOV16 r5+r1*0, m0, m0, m0, m0
 
1108
    MOV16 r5+r1*1, m0, m0, m0, m0
 
1109
    lea        r5, [r5+r1*2]
 
1110
    dec       r3d
 
1111
    jg .loop
 
1112
    REP_RET
 
1113
%endmacro
 
1114
 
 
1115
INIT_MMX
 
1116
PRED16x16_DC mmxext
 
1117
INIT_XMM
 
1118
PRED16x16_DC sse2
 
1119
 
 
1120
;-----------------------------------------------------------------------------
 
1121
; void pred16x16_top_dc(pixel *src, int stride)
 
1122
;-----------------------------------------------------------------------------
 
1123
%macro PRED16x16_TOP_DC 1
 
1124
cglobal pred16x16_top_dc_10_%1, 2,3
 
1125
    sub        r0, r1
 
1126
    mova       m0, [r0+0]
 
1127
    paddw      m0, [r0+mmsize]
 
1128
%if mmsize==8
 
1129
    paddw      m0, [r0+16]
 
1130
    paddw      m0, [r0+24]
 
1131
%endif
 
1132
    HADDW      m0, m2
 
1133
 
 
1134
    SPLATW     m0, m0
 
1135
    paddw      m0, [pw_8]
 
1136
    psrlw      m0, 4
 
1137
    mov       r2d, 8
 
1138
.loop:
 
1139
    MOV16 r0+r1*1, m0, m0, m0, m0
 
1140
    MOV16 r0+r1*2, m0, m0, m0, m0
 
1141
    lea        r0, [r0+r1*2]
 
1142
    dec       r2d
 
1143
    jg .loop
 
1144
    REP_RET
 
1145
%endmacro
 
1146
 
 
1147
INIT_MMX
 
1148
PRED16x16_TOP_DC mmxext
 
1149
INIT_XMM
 
1150
PRED16x16_TOP_DC sse2
 
1151
 
 
1152
;-----------------------------------------------------------------------------
 
1153
; void pred16x16_left_dc(pixel *src, int stride)
 
1154
;-----------------------------------------------------------------------------
 
1155
%macro PRED16x16_LEFT_DC 1
 
1156
cglobal pred16x16_left_dc_10_%1, 2,6
 
1157
    mov        r5, r0
 
1158
 
 
1159
    sub        r0, 2
 
1160
    movzx     r3d, word [r0]
 
1161
    movzx     r4d, word [r0+r1]
 
1162
%rep 7
 
1163
    lea        r0, [r0+r1*2]
 
1164
    movzx     r2d, word [r0]
 
1165
    add       r3d, r2d
 
1166
    movzx     r2d, word [r0+r1]
 
1167
    add       r4d, r2d
 
1168
%endrep
 
1169
    lea       r3d, [r3+r4+8]
 
1170
    shr       r3d, 4
 
1171
 
 
1172
    movd       m0, r3d
 
1173
    SPLATW     m0, m0
 
1174
    mov       r3d, 8
 
1175
.loop:
 
1176
    MOV16 r5+r1*0, m0, m0, m0, m0
 
1177
    MOV16 r5+r1*1, m0, m0, m0, m0
 
1178
    lea        r5, [r5+r1*2]
 
1179
    dec       r3d
 
1180
    jg .loop
 
1181
    REP_RET
 
1182
%endmacro
 
1183
 
 
1184
INIT_MMX
 
1185
PRED16x16_LEFT_DC mmxext
 
1186
INIT_XMM
 
1187
PRED16x16_LEFT_DC sse2
 
1188
 
 
1189
;-----------------------------------------------------------------------------
 
1190
; void pred16x16_128_dc(pixel *src, int stride)
 
1191
;-----------------------------------------------------------------------------
 
1192
%macro PRED16x16_128_DC 1
 
1193
cglobal pred16x16_128_dc_10_%1, 2,3
 
1194
    mova       m0, [pw_512]
 
1195
    mov       r2d, 8
 
1196
.loop:
 
1197
    MOV16 r0+r1*0, m0, m0, m0, m0
 
1198
    MOV16 r0+r1*1, m0, m0, m0, m0
 
1199
    lea        r0, [r0+r1*2]
 
1200
    dec       r2d
 
1201
    jg .loop
 
1202
    REP_RET
 
1203
%endmacro
 
1204
 
 
1205
INIT_MMX
 
1206
PRED16x16_128_DC mmxext
 
1207
INIT_XMM
 
1208
PRED16x16_128_DC sse2