Revision e1f7cb7f

View differences:

libavcodec/arm/dsputil_neon.c
147 147
                            const uint8_t nnzc[6*8]);
148 148

  
149 149
void ff_vector_fmul_neon(float *dst, const float *src, int len);
150
void ff_vector_fmul_window_neon(float *dst, const float *src0,
151
                                const float *src1, const float *win,
152
                                float add_bias, int len);
150 153

  
151 154
void ff_float_to_int16_neon(int16_t *, const float *, long);
152 155
void ff_float_to_int16_interleave_neon(int16_t *, const float **, long, int);
......
245 248
    c->h264_idct_add8       = ff_h264_idct_add8_neon;
246 249

  
247 250
    c->vector_fmul = ff_vector_fmul_neon;
251
    c->vector_fmul_window = ff_vector_fmul_window_neon;
248 252

  
249 253
    if (!(avctx->flags & CODEC_FLAG_BITEXACT)) {
250 254
        c->float_to_int16 = ff_float_to_int16_neon;
libavcodec/arm/dsputil_neon_s.S
649 649
3:      vst1.64         {d16-d19},[r3,:128]!
650 650
        bx              lr
651 651
        .endfunc
652

  
653
function ff_vector_fmul_window_neon, export=1
654
        vld1.32         {d16[],d17[]}, [sp,:32]
655
        push            {r4,r5,lr}
656
        ldr             lr,  [sp, #16]
657
        sub             r2,  r2,  #8
658
        sub             r5,  lr,  #2
659
        add             r2,  r2,  r5, lsl #2
660
        add             r4,  r3,  r5, lsl #3
661
        add             ip,  r0,  r5, lsl #3
662
        mov             r5,  #-16
663
        vld1.64         {d0,d1},  [r1,:128]!
664
        vld1.64         {d2,d3},  [r2,:128], r5
665
        vld1.64         {d4,d5},  [r3,:128]!
666
        vld1.64         {d6,d7},  [r4,:128], r5
667
1:      subs            lr,  lr,  #4
668
        vmov            q11, q8
669
        vmla.f32        d22, d0,  d4
670
        vmov            q10, q8
671
        vmla.f32        d23, d1,  d5
672
        vrev64.32       q3,  q3
673
        vmla.f32        d20, d0,  d7
674
        vrev64.32       q1,  q1
675
        vmla.f32        d21, d1,  d6
676
        beq             2f
677
        vmla.f32        d22, d3,  d7
678
        vld1.64         {d0,d1},  [r1,:128]!
679
        vmla.f32        d23, d2,  d6
680
        vld1.64         {d18,d19},[r2,:128], r5
681
        vmls.f32        d20, d3,  d4
682
        vld1.64         {d24,d25},[r3,:128]!
683
        vmls.f32        d21, d2,  d5
684
        vld1.64         {d6,d7},  [r4,:128], r5
685
        vmov            q1,  q9
686
        vrev64.32       q11, q11
687
        vmov            q2,  q12
688
        vswp            d22, d23
689
        vst1.64         {d20,d21},[r0,:128]!
690
        vst1.64         {d22,d23},[ip,:128], r5
691
        b               1b
692
2:      vmla.f32        d22, d3,  d7
693
        vmla.f32        d23, d2,  d6
694
        vmls.f32        d20, d3,  d4
695
        vmls.f32        d21, d2,  d5
696
        vrev64.32       q11, q11
697
        vswp            d22, d23
698
        vst1.64         {d20,d21},[r0,:128]!
699
        vst1.64         {d22,d23},[ip,:128], r5
700
        pop             {r4,r5,pc}
701
        .endfunc

Also available in: Unified diff