~ubuntu-branches/ubuntu/utopic/libav/utopic

« back to all changes in this revision

Viewing changes to libavcodec/x86/h264_deblock.asm

  • Committer: Package Import Robot
  • Author(s): Reinhard Tartler
  • Date: 2012-12-21 15:32:13 UTC
  • mto: (1.2.18)
  • mto: This revision was merged to the branch mainline in revision 34.
  • Revision ID: package-import@ubuntu.com-20121221153213-fudzrugjzivtv0wp
Tags: upstream-9~beta3
ImportĀ upstreamĀ versionĀ 9~beta3

Show diffs side-by-side

added added

removed removed

Lines of Context:
24
24
;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
25
25
;******************************************************************************
26
26
 
27
 
%include "x86inc.asm"
28
 
%include "x86util.asm"
 
27
%include "libavutil/x86/x86util.asm"
29
28
 
30
29
SECTION_RODATA
31
30
 
399
398
;-----------------------------------------------------------------------------
400
399
; void deblock_v8_luma( uint8_t *pix, int stride, int alpha, int beta, int8_t *tc0 )
401
400
;-----------------------------------------------------------------------------
402
 
cglobal deblock_%1_luma_8, 5,5
 
401
cglobal deblock_%1_luma_8, 5,5,8,2*%2
403
402
    lea     r4, [r1*3]
404
403
    dec     r2     ; alpha-1
405
404
    neg     r4
406
405
    dec     r3     ; beta-1
407
406
    add     r4, r0 ; pix-3*stride
408
 
    %assign pad 2*%2+12-(stack_offset&15)
409
 
    SUB     esp, pad
410
407
 
411
408
    mova    m0, [r4+r1]   ; p1
412
409
    mova    m1, [r4+2*r1] ; p0
444
441
    DEBLOCK_P0_Q0
445
442
    mova    [r4+2*r1], m1
446
443
    mova    [r0], m2
447
 
    ADD     esp, pad
448
444
    RET
449
445
 
450
446
;-----------------------------------------------------------------------------
451
447
; void deblock_h_luma( uint8_t *pix, int stride, int alpha, int beta, int8_t *tc0 )
452
448
;-----------------------------------------------------------------------------
453
449
INIT_MMX cpuname
454
 
cglobal deblock_h_luma_8, 0,5
 
450
cglobal deblock_h_luma_8, 0,5,8,0x60+HAVE_ALIGNED_STACK*12
455
451
    mov    r0, r0mp
456
452
    mov    r3, r1m
457
453
    lea    r4, [r3*3]
458
454
    sub    r0, 4
459
455
    lea    r1, [r0+r4]
460
 
    %assign pad 0x78-(stack_offset&15)
461
 
    SUB    esp, pad
462
 
%define pix_tmp esp+12
 
456
%define pix_tmp esp+12*HAVE_ALIGNED_STACK
463
457
 
464
458
    ; transpose 6x16 -> tmp space
465
459
    TRANSPOSE6x8_MEM  PASS8ROWS(r0, r1, r3, r4), pix_tmp
501
495
    movq   m3, [pix_tmp+0x48]
502
496
    TRANSPOSE8x4B_STORE  PASS8ROWS(r0, r1, r3, r4)
503
497
 
504
 
    ADD    esp, pad
505
498
    RET
506
499
%endmacro ; DEBLOCK_LUMA
507
500
 
508
 
INIT_MMX mmx2
 
501
INIT_MMX mmxext
509
502
DEBLOCK_LUMA v8, 8
510
503
INIT_XMM sse2
511
504
DEBLOCK_LUMA v, 16
632
625
    %define mpb_0 m14
633
626
    %define mpb_1 m15
634
627
%else
635
 
    %define spill(x) [esp+16*x+((stack_offset+4)&15)]
 
628
    %define spill(x) [esp+16*x]
636
629
    %define p2 [r4+r1]
637
630
    %define q2 [r0+2*r1]
638
631
    %define t4 spill(0)
647
640
;-----------------------------------------------------------------------------
648
641
; void deblock_v_luma_intra( uint8_t *pix, int stride, int alpha, int beta )
649
642
;-----------------------------------------------------------------------------
650
 
cglobal deblock_%1_luma_intra_8, 4,6,16
651
 
%if ARCH_X86_64 == 0
652
 
    sub     esp, 0x60
653
 
%endif
 
643
cglobal deblock_%1_luma_intra_8, 4,6,16,ARCH_X86_64*0x50-0x50
654
644
    lea     r4, [r1*4]
655
645
    lea     r5, [r1*3] ; 3*stride
656
646
    dec     r2d        ; alpha-1
699
689
    LUMA_INTRA_SWAP_PQ
700
690
    LUMA_INTRA_P012 [r0], [r0+r1], [r0+2*r1], [r0+r5]
701
691
.end:
702
 
%if ARCH_X86_64 == 0
703
 
    add     esp, 0x60
704
 
%endif
705
692
    RET
706
693
 
707
694
INIT_MMX cpuname
738
725
    add    rsp, 0x88
739
726
    RET
740
727
%else
741
 
cglobal deblock_h_luma_intra_8, 2,4
 
728
cglobal deblock_h_luma_intra_8, 2,4,8,0x80
742
729
    lea    r3,  [r1*3]
743
730
    sub    r0,  4
744
731
    lea    r2,  [r0+r3]
745
 
%assign pad 0x8c-(stack_offset&15)
746
 
    SUB    rsp, pad
747
732
    %define pix_tmp rsp
748
733
 
749
734
    ; transpose 8x16 -> tmp space
774
759
    lea    r0,  [r0+r1*8]
775
760
    lea    r2,  [r2+r1*8]
776
761
    TRANSPOSE8x8_MEM  PASS8ROWS(pix_tmp+8, pix_tmp+0x38, 0x10, 0x30), PASS8ROWS(r0, r2, r1, r3)
777
 
    ADD    rsp, pad
778
762
    RET
779
763
%endif ; ARCH_X86_64
780
764
%endmacro ; DEBLOCK_LUMA_INTRA
784
768
INIT_XMM avx
785
769
DEBLOCK_LUMA_INTRA v
786
770
%if ARCH_X86_64 == 0
787
 
INIT_MMX mmx2
 
771
INIT_MMX mmxext
788
772
DEBLOCK_LUMA_INTRA v8
789
773
%endif
790
774
 
791
 
INIT_MMX mmx2
 
775
INIT_MMX mmxext
792
776
 
793
777
%macro CHROMA_V_START 0
794
778
    dec    r2d      ; alpha-1
819
803
    movq  m1, [t5+r1]
820
804
    movq  m2, [r0]
821
805
    movq  m3, [r0+r1]
822
 
    call ff_chroma_inter_body_mmx2
 
806
    call ff_chroma_inter_body_mmxext
823
807
    movq  [t5+r1], m1
824
808
    movq  [r0], m2
825
809
    RET
843
827
    TRANSPOSE4x8_LOAD  bw, wd, dq, PASS8ROWS(t5, r0, r1, t6)
844
828
    movq  buf0, m0
845
829
    movq  buf1, m3
846
 
    call ff_chroma_inter_body_mmx2
 
830
    call ff_chroma_inter_body_mmxext
847
831
    movq  m0, buf0
848
832
    movq  m3, buf1
849
833
    TRANSPOSE8x4B_STORE PASS8ROWS(t5, r0, r1, t6)
853
837
    RET
854
838
 
855
839
ALIGN 16
856
 
ff_chroma_inter_body_mmx2:
 
840
ff_chroma_inter_body_mmxext:
857
841
    LOAD_MASK  r2d, r3d
858
842
    movd       m6, [r4] ; tc0
859
843
    punpcklbw  m6, m6
886
870
    movq  m1, [t5+r1]
887
871
    movq  m2, [r0]
888
872
    movq  m3, [r0+r1]
889
 
    call ff_chroma_intra_body_mmx2
 
873
    call ff_chroma_intra_body_mmxext
890
874
    movq  [t5+r1], m1
891
875
    movq  [r0], m2
892
876
    RET
897
881
cglobal deblock_h_chroma_intra_8, 4,6
898
882
    CHROMA_H_START
899
883
    TRANSPOSE4x8_LOAD  bw, wd, dq, PASS8ROWS(t5, r0, r1, t6)
900
 
    call ff_chroma_intra_body_mmx2
 
884
    call ff_chroma_intra_body_mmxext
901
885
    TRANSPOSE8x4B_STORE PASS8ROWS(t5, r0, r1, t6)
902
886
    RET
903
887
 
904
888
ALIGN 16
905
 
ff_chroma_intra_body_mmx2:
 
889
ff_chroma_intra_body_mmxext:
906
890
    LOAD_MASK r2d, r3d
907
891
    movq   m5, m1
908
892
    movq   m6, m2
1026
1010
    jl %%.b_idx_loop
1027
1011
%endmacro
1028
1012
 
1029
 
INIT_MMX mmx2
 
1013
INIT_MMX mmxext
1030
1014
cglobal h264_loop_filter_strength, 9, 9, 0, bs, nnz, ref, mv, bidir, edges, \
1031
1015
                                            step, mask_mv0, mask_mv1, field
1032
1016
%define b_idxq bidirq