[x265] [PATCH] arm: Implement interp_8tap_vert_pp_4xn, 8xn and 16xn NEON

Ramya Sriraman ramya at multicorewareinc.com
Mon Mar 21 05:20:51 CET 2016


Please ignore the previous patch. Below is the final version.
# HG changeset patch
# User Ramya Sriraman<ramya at multicorewareinc.com>
# Date 1458127343 -19800
#      Wed Mar 16 16:52:23 2016 +0530
# Node ID e5c08206b8bfcce3a808b8f14848953c9cf51ce7
# Parent  b09998b1256ed8e652c4bf2d688cbfab3a84d5cd
arm: Implement interp_8tap_vert_pp_NxN NEON

diff -r b09998b1256e -r e5c08206b8bf source/common/arm/asm-primitives.cpp
--- a/source/common/arm/asm-primitives.cpp    Wed Mar 16 14:24:48 2016 +0530
+++ b/source/common/arm/asm-primitives.cpp    Wed Mar 16 16:52:23 2016 +0530
@@ -302,6 +302,32 @@
         // planecopy
         p.planecopy_cp = PFX(pixel_planecopy_cp_neon);

+        // vertical interpolation filters
+        p.pu[LUMA_4x4].luma_vpp     = PFX(interp_8tap_vert_pp_4x4_neon);
+        p.pu[LUMA_4x8].luma_vpp     = PFX(interp_8tap_vert_pp_4x8_neon);
+        p.pu[LUMA_4x16].luma_vpp    = PFX(interp_8tap_vert_pp_4x16_neon);
+        p.pu[LUMA_8x4].luma_vpp     = PFX(interp_8tap_vert_pp_8x4_neon);
+        p.pu[LUMA_8x8].luma_vpp     = PFX(interp_8tap_vert_pp_8x8_neon);
+        p.pu[LUMA_8x16].luma_vpp    = PFX(interp_8tap_vert_pp_8x16_neon);
+        p.pu[LUMA_8x32].luma_vpp    = PFX(interp_8tap_vert_pp_8x32_neon);
+        p.pu[LUMA_16x4].luma_vpp    = PFX(interp_8tap_vert_pp_16x4_neon);
+        p.pu[LUMA_16x8].luma_vpp    = PFX(interp_8tap_vert_pp_16x8_neon);
+        p.pu[LUMA_16x16].luma_vpp   = PFX(interp_8tap_vert_pp_16x16_neon);
+        p.pu[LUMA_16x32].luma_vpp   = PFX(interp_8tap_vert_pp_16x32_neon);
+        p.pu[LUMA_16x64].luma_vpp   = PFX(interp_8tap_vert_pp_16x64_neon);
+        p.pu[LUMA_16x12].luma_vpp   = PFX(interp_8tap_vert_pp_16x12_neon);
+        p.pu[LUMA_32x8].luma_vpp    = PFX(interp_8tap_vert_pp_32x8_neon);
+        p.pu[LUMA_32x16].luma_vpp   = PFX(interp_8tap_vert_pp_32x16_neon);
+        p.pu[LUMA_32x32].luma_vpp   = PFX(interp_8tap_vert_pp_32x32_neon);
+        p.pu[LUMA_32x64].luma_vpp   = PFX(interp_8tap_vert_pp_32x64_neon);
+        p.pu[LUMA_32x24].luma_vpp   = PFX(interp_8tap_vert_pp_32x24_neon);
+        p.pu[LUMA_64x16].luma_vpp   = PFX(interp_8tap_vert_pp_64x16_neon);
+        p.pu[LUMA_64x32].luma_vpp   = PFX(interp_8tap_vert_pp_64x32_neon);
+        p.pu[LUMA_64x64].luma_vpp   = PFX(interp_8tap_vert_pp_64x64_neon);
+        p.pu[LUMA_64x48].luma_vpp   = PFX(interp_8tap_vert_pp_64x48_neon);
+        p.pu[LUMA_24x32].luma_vpp   = PFX(interp_8tap_vert_pp_24x32_neon);
+        p.pu[LUMA_48x64].luma_vpp   = PFX(interp_8tap_vert_pp_48x64_neon);
+        p.pu[LUMA_12x16].luma_vpp   = PFX(interp_8tap_vert_pp_12x16_neon);
     }
     if (cpuMask & X265_CPU_ARMV6)
     {
diff -r b09998b1256e -r e5c08206b8bf source/common/arm/ipfilter8.S
--- a/source/common/arm/ipfilter8.S    Wed Mar 16 14:24:48 2016 +0530
+++ b/source/common/arm/ipfilter8.S    Wed Mar 16 16:52:23 2016 +0530
@@ -24,8 +24,13 @@
 #include "asm.S"

 .section .rodata
+.align 4

-.align 4
+g_lumaFilter:
+.word 0,0,0,0,0,0,64,64,0,0,0,0,0,0,0,0
+.word -1,-1,4,4,-10,-10,58,58,17,17,-5,-5,1,1,0,0
+.word -1,-1,4,4,-11,-11,40,40,40,40,-11,-11,4,4,-1,-1
+.word 0,0,1,1,-5,-5,17,17,58,58,-10,-10,4,4,-1,-1

 .text

@@ -692,3 +697,475 @@
     bgt         .loop_filterP2S_48x64
     bx          lr
 endfunc
+
+.macro qpel_filter_0_32b
+    vmov.i16        d17, #64
+    vmovl.u8        q11, d3
+    vmull.s16       q9, d22, d17    // 64*d0
+    vmull.s16       q10, d23, d17   // 64*d1
+.endm
+
+.macro qpel_filter_1_32b
+    vmov.i16        d16, #58
+    vmovl.u8        q11, d3
+    vmull.s16       q9, d22, d16        // 58 * d0
+    vmull.s16       q10, d23, d16       // 58 * d1
+
+    vmov.i16        d17, #10
+    vmovl.u8        q13, d2
+    vmull.s16       q11, d26, d17       // 10 * c0
+    vmull.s16       q12, d27, d17       // 10 * c1
+
+    vmov.i16        d16, #17
+    vmovl.u8        q15, d4
+    vmull.s16       q13, d30, d16       // 17 * e0
+    vmull.s16       q14, d31, d16       // 17 * e1
+
+    vmov.i16        d17, #5
+    vmovl.u8        q1, d5
+    vmull.s16       q15, d2, d17        //  5 * f0
+    vmull.s16       q8, d3, d17         //  5 * f1
+
+    vsub.s32        q9, q11             // 58 * d0 - 10 * c0
+    vsub.s32        q10, q12            // 58 * d1 - 10 * c1
+
+    vmovl.u8       q1, d1
+    vshll.s16      q11, d2, #2         // 4 * b0
+    vshll.s16      q12, d3, #2         // 4 * b1
+
+    vadd.s32       q9, q13             // 58 * d0 - 10 * c0 + 17 * e0
+    vadd.s32       q10, q14            // 58 * d1 - 10 * c1 + 17 * e1
+
+    vmovl.u8       q1, d0
+    vmovl.u8       q2, d6
+    vsubl.s16      q13, d4, d2         // g0 - a0
+    vsubl.s16      q14, d5, d3         // g1 - a1
+
+    vadd.s32       q9, q11             // 58 * d0 - 10 * c0 + 17 * e0 + 4
* b0
+    vadd.s32       q10, q12            // 58 * d1 - 10 * c1 + 17 * e1 + 4
* b1
+    vsub.s32       q13, q15            // g0 - a0 - 5 * f0
+    vsub.s32       q14, q8             // g1 - a1 - 5 * f1
+    vadd.s32       q9, q13             // 58 * d0 - 10 * c0 + 17 * e0 + 4
* b0 + g0 - a0 - 5 * f0
+    vadd.s32       q10, q14            // 58 * d1 - 10 * c1 + 17 * e1 + 4
* b1 + g1 - a1 - 5 * f1
+.endm
+
+.macro qpel_filter_2_32b
+    vmov.i32        q8, #11
+    vmovl.u8        q11, d3
+    vmovl.u8        q12, d4
+    vaddl.s16       q9, d22,d24        // d0 + e0
+    vaddl.s16       q10, d23, d25      // d1 + e1
+
+    vmovl.u8        q13, d2            //c
+    vmovl.u8        q14, d5            //f
+    vaddl.s16       q11, d26, d28      // c0 + f0
+    vaddl.s16       q12, d27, d29      // c1 + f1
+
+    vmul.s32        q11, q8            // 11 * (c0 + f0)
+    vmul.s32        q12, q8            // 11 * (c1 + f1)
+
+    vmov.i32        q8, #40
+    vmul.s32        q9, q8             // 40 * (d0 + e0)
+    vmul.s32        q10, q8            // 40 * (d1 + e1)
+
+    vmovl.u8        q13, d1            //b
+    vmovl.u8        q14, d6            //g
+    vaddl.s16       q15, d26, d28      // b0 + g0
+    vaddl.s16       q8, d27, d29       // b1 + g1
+
+    vmovl.u8        q1, d0             //a
+    vmovl.u8        q2, d7             //h
+    vaddl.s16       q13, d2, d4        // a0 + h0
+    vaddl.s16       q14, d3, d5        // a1 + h1
+
+    vshl.s32        q15, #2            // 4*(b0+g0)
+    vshl.s32        q8, #2             // 4*(b1+g1)
+
+    vadd.s32        q11, q13           // 11 * (c0 + f0) + a0 + h0
+    vadd.s32        q12, q14           // 11 * (c1 + f1) + a1 + h1
+    vadd.s32        q9, q15            // 40 * (d0 + e0) + 4*(b0+g0)
+    vadd.s32        q10, q8            // 40 * (d1 + e1) + 4*(b1+g1)
+    vsub.s32        q9, q11            // 40 * (d0 + e0) + 4*(b0+g0) - (11
* (c0 + f0) + a0 + h0)
+    vsub.s32        q10, q12           // 40 * (d1 + e1) + 4*(b1+g1) - (11
* (c1 + f1) + a1 + h1)
+.endm
+
+.macro qpel_filter_3_32b
+
+    vmov.i16        d16, #17
+    vmov.i16        d17, #5
+
+    vmovl.u8        q11, d3
+    vmull.s16       q9, d22, d16       // 17 * d0
+    vmull.s16       q10, d23, d16      // 17 * d1
+
+    vmovl.u8        q13, d2
+    vmull.s16       q11, d26, d17      // 5 * c0
+    vmull.s16       q12, d27, d17      // 5* c1
+
+    vmov.i16        d16, #58
+    vmovl.u8        q15, d4
+    vmull.s16       q13, d30, d16      // 58 * e0
+    vmull.s16       q14, d31, d16      // 58 * e1
+
+    vmov.i16        d17, #10
+    vmovl.u8        q1, d5
+    vmull.s16       q15, d2, d17       // 10 * f0
+    vmull.s16       q8, d3, d17        // 10 * f1
+
+    vsub.s32        q9, q11            // 17 * d0 - 5 * c0
+    vsub.s32        q10, q12           // 17 * d1 - 5 * c1
+
+    vmovl.u8        q1, d6
+    vshll.s16       q11, d2, #2        // 4 * g0
+    vshll.s16       q12, d3, #2        // 4 * g1
+
+    vadd.s32        q9, q13            // 17 * d0 - 5 * c0+ 58 * e0
+    vadd.s32        q10, q14           // 17 * d1 - 5 * c1 + 58 * e1
+
+    vmovl.u8        q1, d1
+    vmovl.u8        q2, d7
+    vsubl.s16      q13, d2, d4         // b0 - h0
+    vsubl.s16      q14, d3, d5         // b1 - h1
+
+    vadd.s32        q9, q11            // 17 * d0 - 5 * c0+ 58 * e0 +4 * g0
+    vadd.s32        q10, q12           // 17 * d1 - 5 * c1 + 58 * e1+4 * g1
+    vsub.s32        q13, q15           // 17 * d0 - 5 * c0+ 58 * e0 +4 *
g0 -10 * f0
+    vsub.s32        q14, q8            // 17 * d1 - 5 * c1 + 58 * e1+4 *
g1 - 10*f1
+    vadd.s32        q9, q13            //  17 * d0 - 5 * c0+ 58 * e0 +4 *
g0 -10 * f0 +b0 - h0
+    vadd.s32        q10, q14           // 17 * d1 - 5 * c1 + 58 * e1+4 *
g1 - 10*f1 + b1 - h1
+.endm
+
+.macro FILTER_VPP a b filterv
+
+.loop_\filterv\()_\a\()x\b:
+
+    mov             r7, r2
+    mov             r6, r0
+    eor             r8, r8
+
+.loop_w8_\filterv\()_\a\()x\b:
+
+    add             r6, r0, r8
+
+    pld [r6]
+    vld1.u8         d0, [r6], r1
+    pld [r6]
+    vld1.u8         d1, [r6], r1
+    pld [r6]
+    vld1.u8         d2, [r6], r1
+    pld [r6]
+    vld1.u8         d3, [r6], r1
+    pld [r6]
+    vld1.u8         d4, [r6], r1
+    pld [r6]
+    vld1.u8         d5, [r6], r1
+    pld [r6]
+    vld1.u8         d6, [r6], r1
+    pld [r6]
+    vld1.u8         d7, [r6], r1
+
+    veor.u8         q9, q9
+    veor.u8         q10, q10
+
+   \filterv
+
+    mov             r12,#32
+    vdup.32         q8, r12
+    vadd.s32        q9, q8
+    vqshrun.s32     d0, q9, #6
+    vadd.s32        q10, q8
+    vqshrun.s32     d1, q10, #6
+    vqmovn.u16      d0, q0
+    vst1.u8         d0, [r7]!
+
+    add             r8, #8
+    cmp             r8, #\a
+    blt             .loop_w8_\filterv\()_\a\()x\b
+
+    add             r0, r1
+    add             r2, r3
+    subs            r4, #1
+    bne             .loop_\filterv\()_\a\()x\b
+
+.endm
+
+.macro LUMA_VPP  w h
+function x265_interp_8tap_vert_pp_\w\()x\h\()_neon
+
+    push            {r4, r5, r6, r7, r8}
+    ldr             r5, [sp, #4 * 5]
+    mov             r4, r1, lsl #2
+    sub             r4, r1
+    sub             r0, r4
+    mov             r4, #\h
+
+    cmp             r5, #0
+    beq              0f
+    cmp             r5, #1
+    beq              1f
+    cmp             r5, #2
+    beq              2f
+    cmp             r5, #3
+    beq              3f
+0:
+    FILTER_VPP  \w \h qpel_filter_0_32b
+    b            5f
+1:
+    FILTER_VPP  \w \h qpel_filter_1_32b
+    b            5f
+2:
+    FILTER_VPP  \w \h qpel_filter_2_32b
+    b            5f
+3:
+    FILTER_VPP  \w \h qpel_filter_3_32b
+    b            5f
+5:
+    pop             {r4, r5, r6, r7, r8}
+    bx              lr
+endfunc
+.endm
+
+LUMA_VPP 8 4
+LUMA_VPP 8 8
+LUMA_VPP 8 16
+LUMA_VPP 8 32
+LUMA_VPP 16 4
+LUMA_VPP 16 8
+LUMA_VPP 16 16
+LUMA_VPP 16 32
+LUMA_VPP 16 64
+LUMA_VPP 16 12
+LUMA_VPP 32 8
+LUMA_VPP 32 16
+LUMA_VPP 32 32
+LUMA_VPP 32 64
+LUMA_VPP 32 24
+LUMA_VPP 64 16
+LUMA_VPP 64 32
+LUMA_VPP 64 64
+LUMA_VPP 64 48
+LUMA_VPP 24 32
+LUMA_VPP 48 64
+
+.macro LUMA_VPP_4xN h
+function x265_interp_8tap_vert_pp_4x\h\()_neon
+    push           {r4, r5, r6}
+    ldr             r4, [sp, #4 * 3]
+    mov             r5, r4, lsl #6
+    mov             r4, r1, lsl #2
+    sub             r4, r1
+    sub             r0, r4
+
+    mov             r4, #32
+    vdup.32         q8, r4
+    mov             r4, #\h
+
+.loop_4x\h:
+    movrel          r12, g_lumaFilter
+    add             r12, r5
+    mov             r6, r0
+
+    pld [r6]
+    vld1.u32        d0[0], [r6], r1
+    pld [r6]
+    vld1.u32        d0[1], [r6], r1
+    pld [r6]
+    vld1.u32        d1[0], [r6], r1
+    pld [r6]
+    vld1.u32        d1[1], [r6], r1
+    pld [r6]
+    vld1.u32        d2[0], [r6], r1
+    pld [r6]
+    vld1.u32        d2[1], [r6], r1
+    pld [r6]
+    vld1.u32        d3[0], [r6], r1
+    pld [r6]
+    vld1.u32        d3[1], [r6], r1
+
+    veor.u8         q9, q9
+
+    vmovl.u8        q11, d0
+    vmovl.u16       q12, d22
+    vmovl.u16       q13, d23
+    vld1.s32        d20, [r12]!
+    vmov.s32        d21, d20
+    vmla.s32        q9, q12, q10
+    vld1.s32        d20, [r12]!
+    vmov.s32        d21, d20
+    vmla.s32        q9, q13, q10
+
+    vmovl.u8        q11, d1
+    vmovl.u16       q12, d22
+    vmovl.u16       q13, d23
+    vld1.s32        d20, [r12]!
+    vmov.s32        d21, d20
+    vmla.s32        q9, q12, q10
+    vld1.s32        d20, [r12]!
+    vmov.s32        d21, d20
+    vmla.s32        q9, q13, q10
+
+    vmovl.u8        q11, d2
+    vmovl.u16       q12, d22
+    vmovl.u16       q13, d23
+    vld1.s32        d20, [r12]!
+    vmov.s32        d21, d20
+    vmla.s32        q9, q12, q10
+    vld1.s32        d20, [r12]!
+    vmov.s32        d21, d20
+    vmla.s32        q9, q13, q10
+
+    vmovl.u8        q11, d3
+    vmovl.u16       q12, d22
+    vmovl.u16       q13, d23
+    vld1.s32        d20, [r12]!
+    vmov.s32        d21, d20
+    vmla.s32        q9, q12, q10
+    vld1.s32        d20, [r12]!
+    vmov.s32        d21, d20
+    vmla.s32        q9, q13, q10
+
+    vadd.s32        q9, q8
+    vqshrun.s32     d0, q9, #6
+    vqmovn.u16      d0, q0
+    vst1.u32        d0[0], [r2], r3
+
+    add             r0, r1
+    subs            r4, #1
+    bne             .loop_4x\h
+
+    pop             {r4, r5, r6}
+    bx              lr
+endfunc
+.endm
+
+LUMA_VPP_4xN 4
+LUMA_VPP_4xN 8
+LUMA_VPP_4xN 16
+
+function x265_interp_8tap_vert_pp_12x16_neon
+    push            {r4, r5, r6, r7}
+    ldr             r5, [sp, #4 * 4]
+    mov             r4, r1, lsl #2
+    sub             r4, r1
+    sub             r0, r4
+
+    mov             r4, #16
+.loop_12x16:
+
+    mov             r6, r0
+    mov             r7, r2
+
+    pld [r6]
+    vld1.u8         d0, [r6], r1
+    pld [r6]
+    vld1.u8         d1, [r6], r1
+    pld [r6]
+    vld1.u8         d2, [r6], r1
+    pld [r6]
+    vld1.u8         d3, [r6], r1
+    pld [r6]
+    vld1.u8         d4, [r6], r1
+    pld [r6]
+    vld1.u8         d5, [r6], r1
+    pld [r6]
+    vld1.u8         d6, [r6], r1
+    pld [r6]
+    vld1.u8         d7, [r6], r1
+
+    veor.u8         q9, q9
+    veor.u8         q10, q10
+
+    cmp             r5,#0
+    beq              0f
+    cmp             r5,#1
+    beq              1f
+    cmp             r5,#2
+    beq              2f
+    cmp             r5,#3
+    beq              3f
+1:
+    qpel_filter_1_32b
+    b            5f
+2:
+    qpel_filter_2_32b
+    b            5f
+3:
+    qpel_filter_3_32b
+    b            5f
+0:
+    vmov.i16        d17, #64
+    vmovl.u8        q11, d3
+    vmull.s16       q9, d22, d17    // 64*d0
+    vmull.s16       q10, d23, d17   // 64*d1
+5:
+    mov             r12,#32
+    vdup.32         q8, r12
+    vadd.s32        q9, q8
+    vqshrun.s32     d0, q9, #6
+    vadd.s32        q10, q8
+    vqshrun.s32     d1, q10, #6
+    vqmovn.u16      d0, q0
+    vst1.u8         d0, [r7]!
+
+    add             r6, r0, #8
+
+    pld [r6]
+    vld1.u8         d0, [r6], r1
+    pld [r6]
+    vld1.u8         d1, [r6], r1
+    pld [r6]
+    vld1.u8         d2, [r6], r1
+    pld [r6]
+    vld1.u8         d3, [r6], r1
+    pld [r6]
+    vld1.u8         d4, [r6], r1
+    pld [r6]
+    vld1.u8         d5, [r6], r1
+    pld [r6]
+    vld1.u8         d6, [r6], r1
+    pld [r6]
+    vld1.u8         d7, [r6], r1
+
+    veor.u8         q9, q9
+    veor.u8         q10, q10
+
+    cmp             r5,#0
+    beq              0f
+    cmp             r5,#1
+    beq              1f
+    cmp             r5,#2
+    beq              2f
+    cmp             r5,#3
+    beq              3f
+1:
+    qpel_filter_1_32b
+    b            5f
+2:
+    qpel_filter_2_32b
+    b            5f
+3:
+    qpel_filter_3_32b
+    b            5f
+0:
+    vmov.i16        d17, #64
+    vmovl.u8        q11, d3
+    vmull.s16       q9, d22, d17    // 64*d0
+    vmull.s16       q10, d23, d17   // 64*d1
+5:
+    mov             r12,#32
+    vdup.32         q8, r12
+    vadd.s32        q9, q8
+    vqshrun.s32     d0, q9, #6
+    vadd.s32        q10, q8
+    vqshrun.s32     d1, q10, #6
+    vqmovn.u16      d0, q0
+    vst1.u32        d0[0], [r7]!
+
+    add             r0, r1
+    add             r2, r3
+    subs            r4, #1
+    bne             .loop_12x16
+
+    pop             {r4, r5, r6, r7}
+    bx              lr
+endfunc
diff -r b09998b1256e -r e5c08206b8bf source/common/arm/ipfilter8.h
--- a/source/common/arm/ipfilter8.h    Wed Mar 16 14:24:48 2016 +0530
+++ b/source/common/arm/ipfilter8.h    Wed Mar 16 16:52:23 2016 +0530
@@ -51,4 +51,29 @@
 void x265_filterPixelToShort_64x48_neon(const pixel* src, intptr_t
srcStride, int16_t* dst, intptr_t dstStride);
 void x265_filterPixelToShort_64x64_neon(const pixel* src, intptr_t
srcStride, int16_t* dst, intptr_t dstStride);

+void x265_interp_8tap_vert_pp_4x4_neon(const pixel* src, intptr_t
srcStride, pixel* dst, intptr_t dstStride, int coeffIdx);
+void x265_interp_8tap_vert_pp_4x8_neon(const pixel* src, intptr_t
srcStride, pixel* dst, intptr_t dstStride, int coeffIdx);
+void x265_interp_8tap_vert_pp_4x16_neon(const pixel* src, intptr_t
srcStride, pixel* dst, intptr_t dstStride, int coeffIdx);
+void x265_interp_8tap_vert_pp_8x4_neon(const pixel* src, intptr_t
srcStride, pixel* dst, intptr_t dstStride, int coeffIdx);
+void x265_interp_8tap_vert_pp_8x8_neon(const pixel* src, intptr_t
srcStride, pixel* dst, intptr_t dstStride, int coeffIdx);
+void x265_interp_8tap_vert_pp_8x16_neon(const pixel* src, intptr_t
srcStride, pixel* dst, intptr_t dstStride, int coeffIdx);
+void x265_interp_8tap_vert_pp_8x32_neon(const pixel* src, intptr_t
srcStride, pixel* dst, intptr_t dstStride, int coeffIdx);
+void x265_interp_8tap_vert_pp_16x4_neon(const pixel* src, intptr_t
srcStride, pixel* dst, intptr_t dstStride, int coeffIdx);
+void x265_interp_8tap_vert_pp_16x8_neon(const pixel* src, intptr_t
srcStride, pixel* dst, intptr_t dstStride, int coeffIdx);
+void x265_interp_8tap_vert_pp_16x16_neon(const pixel* src, intptr_t
srcStride, pixel* dst, intptr_t dstStride, int coeffIdx);
+void x265_interp_8tap_vert_pp_16x32_neon(const pixel* src, intptr_t
srcStride, pixel* dst, intptr_t dstStride, int coeffIdx);
+void x265_interp_8tap_vert_pp_16x64_neon(const pixel* src, intptr_t
srcStride, pixel* dst, intptr_t dstStride, int coeffIdx);
+void x265_interp_8tap_vert_pp_16x12_neon(const pixel* src, intptr_t
srcStride, pixel* dst, intptr_t dstStride, int coeffIdx);
+void x265_interp_8tap_vert_pp_32x8_neon(const pixel* src, intptr_t
srcStride, pixel* dst, intptr_t dstStride, int coeffIdx);
+void x265_interp_8tap_vert_pp_32x16_neon(const pixel* src, intptr_t
srcStride, pixel* dst, intptr_t dstStride, int coeffIdx);
+void x265_interp_8tap_vert_pp_32x32_neon(const pixel* src, intptr_t
srcStride, pixel* dst, intptr_t dstStride, int coeffIdx);
+void x265_interp_8tap_vert_pp_32x64_neon(const pixel* src, intptr_t
srcStride, pixel* dst, intptr_t dstStride, int coeffIdx);
+void x265_interp_8tap_vert_pp_32x24_neon(const pixel* src, intptr_t
srcStride, pixel* dst, intptr_t dstStride, int coeffIdx);
+void x265_interp_8tap_vert_pp_64x16_neon(const pixel* src, intptr_t
srcStride, pixel* dst, intptr_t dstStride, int coeffIdx);
+void x265_interp_8tap_vert_pp_64x32_neon(const pixel* src, intptr_t
srcStride, pixel* dst, intptr_t dstStride, int coeffIdx);
+void x265_interp_8tap_vert_pp_64x64_neon(const pixel* src, intptr_t
srcStride, pixel* dst, intptr_t dstStride, int coeffIdx);
+void x265_interp_8tap_vert_pp_64x48_neon(const pixel* src, intptr_t
srcStride, pixel* dst, intptr_t dstStride, int coeffIdx);
+void x265_interp_8tap_vert_pp_24x32_neon(const pixel* src, intptr_t
srcStride, pixel* dst, intptr_t dstStride, int coeffIdx);
+void x265_interp_8tap_vert_pp_48x64_neon(const pixel* src, intptr_t
srcStride, pixel* dst, intptr_t dstStride, int coeffIdx);
+void x265_interp_8tap_vert_pp_12x16_neon(const pixel* src, intptr_t
srcStride, pixel* dst, intptr_t dstStride, int coeffIdx);
 #endif // ifndef X265_IPFILTER8_ARM_H



Thank you
Regards
Ramya

On Thu, Mar 17, 2016 at 11:17 AM, <ramya at multicorewareinc.com> wrote:

> # HG changeset patch
> # User Ramya Sriraman<ramya at multicorewareinc.com>
> # Date 1458127343 -19800
> #      Wed Mar 16 16:52:23 2016 +0530
> # Node ID 2f43a5b323725cc37ec7aec7e53049b84de3f905
> # Parent  4a2f94a592511afabd434fc6cf02a469b6d65091
> arm: Implement interp_8tap_vert_pp_4xn,8xn and 16xn NEON
>
> diff -r 4a2f94a59251 -r 2f43a5b32372 source/common/arm/asm-primitives.cpp
> --- a/source/common/arm/asm-primitives.cpp      Wed Mar 09 14:34:06 2016
> +0530
> +++ b/source/common/arm/asm-primitives.cpp      Wed Mar 16 16:52:23 2016
> +0530
> @@ -296,6 +296,20 @@
>          // planecopy
>          p.planecopy_cp = PFX(pixel_planecopy_cp_neon);
>
> +        // vertical interpolation filters
> +        p.pu[LUMA_4x4].luma_vpp     = PFX(interp_8tap_vert_pp_4x4_neon);
> +        p.pu[LUMA_4x8].luma_vpp     = PFX(interp_8tap_vert_pp_4x8_neon);
> +        p.pu[LUMA_4x16].luma_vpp    = PFX(interp_8tap_vert_pp_4x16_neon);
> +        p.pu[LUMA_8x4].luma_vpp     = PFX(interp_8tap_vert_pp_8x4_neon);
> +        p.pu[LUMA_8x8].luma_vpp     = PFX(interp_8tap_vert_pp_8x8_neon);
> +        p.pu[LUMA_8x16].luma_vpp    = PFX(interp_8tap_vert_pp_8x16_neon);
> +        p.pu[LUMA_8x32].luma_vpp    = PFX(interp_8tap_vert_pp_8x32_neon);
> +        p.pu[LUMA_16x4].luma_vpp    = PFX(interp_8tap_vert_pp_16x4_neon);
> +        p.pu[LUMA_16x8].luma_vpp    = PFX(interp_8tap_vert_pp_16x8_neon);
> +        p.pu[LUMA_16x16].luma_vpp   = PFX(interp_8tap_vert_pp_16x16_neon);
> +        p.pu[LUMA_16x32].luma_vpp   = PFX(interp_8tap_vert_pp_16x32_neon);
> +        p.pu[LUMA_16x64].luma_vpp   = PFX(interp_8tap_vert_pp_16x64_neon);
> +        p.pu[LUMA_16x12].luma_vpp   = PFX(interp_8tap_vert_pp_16x12_neon);
>      }
>      if (cpuMask & X265_CPU_ARMV6)
>      {
> diff -r 4a2f94a59251 -r 2f43a5b32372 source/common/arm/ipfilter8.S
> --- a/source/common/arm/ipfilter8.S     Wed Mar 09 14:34:06 2016 +0530
> +++ b/source/common/arm/ipfilter8.S     Wed Mar 16 16:52:23 2016 +0530
> @@ -24,8 +24,10 @@
>  #include "asm.S"
>
>  .section .rodata
> +.align 4
>
> -.align 4
> +g_lumaFilter:
> +.word
> 0,0,0,0,0,0,64,64,0,0,0,0,0,0,0,0,-1,-1,4,4,-10,-10,58,58,17,17,-5,-5,1,1,0,0,-1,-1,4,4,-11,-11,40,40,40,40,-11,-11,4,4,-1,-1,0,0,1,1,-5,-5,17,17,58,58,-10,-10,4,4,-1,-1
>
>  .text
>
> @@ -692,3 +694,436 @@
>      bgt         .loop_filterP2S_48x64
>      bx          lr
>  endfunc
> +
> +
> +
> +.macro qpel_filter_1_32b
> +    vmov.i16        d16, #58
> +    vmovl.u8        q11, d3
> +    vmull.s16       q9, d22, d16        // 58 * d0
> +    vmull.s16       q10, d23, d16       // 58 * d1
> +
> +    vmov.i16        d17, #10
> +    vmovl.u8        q13, d2
> +    vmull.s16       q11, d26, d17       // 10 * c0
> +    vmull.s16       q12, d27, d17       // 10 * c1
> +
> +    vmov.i16        d16, #17
> +    vmovl.u8        q15, d4
> +    vmull.s16       q13, d30, d16       // 17 * e0
> +    vmull.s16       q14, d31, d16       // 17 * e1
> +
> +    vmov.i16        d17, #5
> +    vmovl.u8        q1, d5
> +    vmull.s16       q15, d2, d17        //  5 * f0
> +    vmull.s16       q8, d3, d17         //  5 * f1
> +
> +    vsub.s32        q9, q11             // 58 * d0 - 10 * c0
> +    vsub.s32        q10, q12            // 58 * d1 - 10 * c1
> +
> +     vmovl.u8       q1, d1
> +     vshll.s16      q11, d2, #2        // 4 * b0
> +     vshll.s16      q12, d3, #2        // 4 * b1
> +
> +     vadd.s32       q9, q13            // 58 * d0 - 10 * c0 + 17 * e0
> +     vadd.s32       q10, q14           // 58 * d1 - 10 * c1 + 17 * e1
> +
> +     vmovl.u8       q1, d0
> +     vmovl.u8       q2, d6
> +     vsubl.s16      q13, d4, d2        // g0 - a0
> +     vsubl.s16      q14, d5, d3        // g1 - a1
> +
> +     vadd.s32       q9, q11            // 58 * d0 - 10 * c0 + 17 * e0 + 4
> * b0
> +     vadd.s32       q10, q12           // 58 * d1 - 10 * c1 + 17 * e1 + 4
> * b1
> +     vsub.s32       q13, q15           // g0 - a0 - 5 * f0
> +     vsub.s32       q14, q8            // g1 - a1 - 5 * f1
> +     vadd.s32       q9, q13            // 58 * d0 - 10 * c0 + 17 * e0 + 4
> * b0 + g0 - a0 - 5 * f0
> +     vadd.s32       q10, q14           // 58 * d1 - 10 * c1 + 17 * e1 + 4
> * b1 + g1 - a1 - 5 * f1
> +.endm
> +
> +.macro qpel_filter_2_32b
> +     vmov.i32        q8, #11
> +     vmovl.u8        q11, d3
> +     vmovl.u8        q12, d4
> +     vaddl.s16       q9, d22,d24        // d0 + e0
> +     vaddl.s16       q10, d23, d25      // d1 + e1
> +
> +     vmovl.u8        q13, d2            //c
> +     vmovl.u8        q14, d5            //f
> +     vaddl.s16       q11, d26, d28      // c0 + f0
> +     vaddl.s16       q12, d27, d29      // c1 + f1
> +
> +     vmul.s32        q11, q8            // 11 * (c0 + f0)
> +     vmul.s32        q12, q8            // 11 * (c1 + f1)
> +
> +     vmov.i32        q8, #40
> +     vmul.s32        q9, q8             // 40 * (d0 + e0)
> +     vmul.s32        q10, q8            // 40 * (d1 + e1)
> +
> +     vmovl.u8        q13, d1            //b
> +     vmovl.u8        q14, d6            //g
> +     vaddl.s16       q15, d26, d28      // b0 + g0
> +     vaddl.s16       q8, d27, d29       // b1 + g1
> +
> +     vmovl.u8        q1, d0             //a
> +     vmovl.u8        q2, d7             //h
> +     vaddl.s16       q13, d2, d4        // a0 + h0
> +     vaddl.s16       q14, d3, d5        // a1 + h1
> +
> +     vshl.s32        q15, #2            // 4*(b0+g0)
> +     vshl.s32        q8, #2             // 4*(b1+g1)
> +
> +     vadd.s32        q11, q13           // 11 * (c0 + f0) + a0 + h0
> +     vadd.s32        q12, q14           // 11 * (c1 + f1) + a1 + h1
> +     vadd.s32        q9, q15            // 40 * (d0 + e0) + 4*(b0+g0)
> +     vadd.s32        q10, q8            // 40 * (d1 + e1) + 4*(b1+g1)
> +     vsub.s32        q9, q11            // 40 * (d0 + e0) + 4*(b0+g0) -
> (11 * (c0 + f0) + a0 + h0)
> +     vsub.s32        q10, q12           // 40 * (d1 + e1) + 4*(b1+g1) -
> (11 * (c1 + f1) + a1 + h1)
> +.endm
> +
> +.macro qpel_filter_3_32b
> +
> +     vmov.i16        d16, #17
> +     vmov.i16        d17, #5
> +
> +     vmovl.u8        q11, d3
> +     vmull.s16       q9, d22, d16       // 17 * d0
> +     vmull.s16       q10, d23, d16      // 17 * d1
> +
> +     vmovl.u8        q13, d2
> +     vmull.s16       q11, d26, d17      // 5 * c0
> +     vmull.s16       q12, d27, d17      // 5* c1
> +
> +     vmov.i16        d16, #58
> +     vmovl.u8        q15, d4
> +     vmull.s16       q13, d30, d16      // 58 * e0
> +     vmull.s16       q14, d31, d16      // 58 * e1
> +
> +     vmov.i16        d17, #10
> +     vmovl.u8        q1, d5
> +     vmull.s16       q15, d2, d17       // 10 * f0
> +     vmull.s16       q8, d3, d17        // 10 * f1
> +
> +     vsub.s32        q9, q11            // 17 * d0 - 5 * c0
> +     vsub.s32        q10, q12           // 17 * d1 - 5 * c1
> +
> +     vmovl.u8        q1, d6
> +     vshll.s16       q11, d2, #2        // 4 * g0
> +     vshll.s16       q12, d3, #2        // 4 * g1
> +
> +     vadd.s32        q9, q13            // 17 * d0 - 5 * c0+ 58 * e0
> +     vadd.s32        q10, q14           // 17 * d1 - 5 * c1 + 58 * e1
> +
> +     vmovl.u8        q1, d1
> +     vmovl.u8        q2, d7
> +     vsubl.s16      q13, d2, d4         // b0 - h0
> +     vsubl.s16      q14, d3, d5         // b1 - h1
> +
> +     vadd.s32        q9, q11            // 17 * d0 - 5 * c0+ 58 * e0 +4 *
> g0
> +     vadd.s32        q10, q12           // 17 * d1 - 5 * c1 + 58 * e1+4 *
> g1
> +     vsub.s32        q13, q15           // 17 * d0 - 5 * c0+ 58 * e0 +4 *
> g0 -10 * f0
> +     vsub.s32        q14, q8            // 17 * d1 - 5 * c1 + 58 * e1+4 *
> g1 - 10*f1
> +     vadd.s32        q9, q13            //  17 * d0 - 5 * c0+ 58 * e0 +4
> * g0 -10 * f0 +b0 - h0
> +     vadd.s32        q10, q14           // 17 * d1 - 5 * c1 + 58 * e1+4 *
> g1 - 10*f1 + b1 - h1
> +.endm
> +
> +.macro LUMA_VPP_8xN h
> +function x265_interp_8tap_vert_pp_8x\h\()_neon
> +
> +    push            {r4, r5, r6}
> +    ldr             r5, [sp, #4 * 3]
> +    mov             r4, #3
> +    mul             r4, r1, r4
> +    sub             r0, r4
> +
> +    mov             r4, #\h
> +
> +.loop_8x\h:
> +    mov             r6,r0
> +    pld [r6]
> +    vld1.u8         d0, [r6], r1
> +    pld [r6]
> +    vld1.u8         d1, [r6], r1
> +    pld [r6]
> +    vld1.u8         d2, [r6], r1
> +    pld [r6]
> +    vld1.u8         d3, [r6], r1
> +    pld [r6]
> +    vld1.u8         d4, [r6], r1
> +    pld [r6]
> +    vld1.u8         d5, [r6], r1
> +    pld [r6]
> +    vld1.u8         d6, [r6], r1
> +    pld [r6]
> +    vld1.u8         d7, [r6], r1
> +
> +    veor.u8         q9, q9
> +    veor.u8         q10, q10
> +
> +    cmp             r5,#0
> +    beq              0f
> +    cmp             r5,#1
> +    beq              1f
> +    cmp             r5,#2
> +    beq              2f
> +    cmp             r5,#3
> +    beq              3f
> +1:
> +    qpel_filter_1_32b
> +    b            5f
> +2:
> +    qpel_filter_2_32b
> +    b            5f
> +3:
> +    qpel_filter_3_32b
> +    b            5f
> +0:
> +    vmov.i16        d17, #64
> +    vmovl.u8        q11, d3
> +    vmull.s16       q9, d22, d17   // 64*d0
> +    vmull.s16       q10, d23, d17   // 64*d1
> +5:
> +    mov             r12,#32
> +    vdup.32         q8, r12
> +    vadd.s32        q9, q8
> +    vqshrun.s32     d0, q9, #6
> +    vadd.s32        q10, q8
> +    vqshrun.s32     d1, q10, #6
> +    vqmovn.u16      d0, q0
> +    vst1.u8         d0, [r2], r3
> +
> +    add             r0, r1
> +    subs            r4, #1
> +    bne             .loop_8x\h
> +
> +    pop             {r4, r5, r6}
> +    bx              lr
> +endfunc
> +.endm
> +LUMA_VPP_8xN 4
> +LUMA_VPP_8xN 8
> +LUMA_VPP_8xN 16
> +LUMA_VPP_8xN 32
> +
> +.macro LUMA_VPP_16xN h
> +function x265_interp_8tap_vert_pp_16x\h\()_neon
> +
> +    push            {r4, r5, r6, r7, r8}
> +    ldr             r5, [sp, #4 * 5]
> +    mov             r4, #3
> +    mul             r4, r1, r4
> +    sub             r0, r4
> +
> +    mov             r4, #\h
> +
> +.loop_16x\h:
> +    mov             r8, r2
> +    mov             r6, r0
> +
> +    pld [r6]
> +    vld1.u8         d0, [r6], r1
> +    pld [r6]
> +    vld1.u8         d1, [r6], r1
> +    pld [r6]
> +    vld1.u8         d2, [r6], r1
> +    pld [r6]
> +    vld1.u8         d3, [r6], r1
> +    pld [r6]
> +    vld1.u8         d4, [r6], r1
> +    pld [r6]
> +    vld1.u8         d5, [r6], r1
> +    pld [r6]
> +    vld1.u8         d6, [r6], r1
> +    pld [r6]
> +    vld1.u8         d7, [r6], r1
> +
> +    veor.u8         q9, q9
> +    veor.u8         q10, q10
> +
> +    cmp             r5,#0
> +    beq              0f
> +    cmp             r5,#1
> +    beq              1f
> +    cmp             r5,#2
> +    beq              2f
> +    cmp             r5,#3
> +    beq              3f
> +1:
> +    qpel_filter_1_32b
> +    b            5f
> +2:
> +    qpel_filter_2_32b
> +    b            5f
> +3:
> +    qpel_filter_3_32b
> +    b            5f
> +0:
> +    vmov.i16        d17, #64
> +    vmovl.u8        q11, d3
> +    vmull.s16       q9, d22, d17   // 64*d0
> +    vmull.s16       q10, d23, d17   // 64*d1
> +5:
> +    mov             r12,#32
> +    vdup.32         q8, r12
> +    vadd.s32        q9, q8
> +    vqshrun.s32     d0, q9, #6
> +    vadd.s32        q10, q8
> +    vqshrun.s32     d1, q10, #6
> +    vqmovn.u16      d0, q0
> +    vst1.u8         d0, [r8]!
> +
> +    add             r6,r0, #8
> +    pld [r6]
> +    vld1.u8         d0, [r6], r1
> +    pld [r6]
> +    vld1.u8         d1, [r6], r1
> +    pld [r6]
> +    vld1.u8         d2, [r6], r1
> +    pld [r6]
> +    vld1.u8         d3, [r6], r1
> +    pld [r6]
> +    vld1.u8         d4, [r6], r1
> +    pld [r6]
> +    vld1.u8         d5, [r6], r1
> +    pld [r6]
> +    vld1.u8         d6, [r6], r1
> +    pld [r6]
> +    vld1.u8         d7, [r6], r1
> +
> +    veor.u8         q9, q9
> +    veor.u8         q10, q10
> +
> +    cmp             r5,#0
> +    beq              0f
> +    cmp             r5,#1
> +    beq              1f
> +    cmp             r5,#2
> +    beq              2f
> +    cmp             r5,#3
> +    beq              3f
> +1:
> +    qpel_filter_1_32b
> +    b            5f
> +2:
> +    qpel_filter_2_32b
> +    b            5f
> +3:
> +    qpel_filter_3_32b
> +    b            5f
> +0:
> +    vmov.i16        d17, #64
> +    vmovl.u8        q11, d3
> +    vmull.s16       q9, d22, d17   // 64*d0
> +    vmull.s16       q10, d23, d17   // 64*d1
> +5:
> +    mov             r12,#32
> +    vdup.32         q8, r12
> +    vadd.s32        q9, q8
> +    vqshrun.s32     d0, q9, #6
> +    vadd.s32        q10, q8
> +    vqshrun.s32     d1, q10, #6
> +    vqmovn.u16      d0, q0
> +    vst1.u8         d0, [r8]!
> +
> +    add             r0, r1
> +    add             r2, r3
> +    subs            r4, #1
> +    bne             .loop_16x\h
> +
> +    pop             {r4, r5, r6, r7, r8}
> +    bx              lr
> +endfunc
> +.endm
> +LUMA_VPP_16xN 4
> +LUMA_VPP_16xN 8
> +LUMA_VPP_16xN 16
> +LUMA_VPP_16xN 32
> +LUMA_VPP_16xN 64
> +LUMA_VPP_16xN 12
> +
> +.macro LUMA_VPP_4xN h
> +function x265_interp_8tap_vert_pp_4x\h\()_neon
> +     push            {r4, r5, r6}
> +    ldr             r4, [sp, #4 * 3]
> +    mov             r5, r4, lsl #6
> +    mov             r4, #3
> +    mul             r4, r1, r4
> +    sub             r0, r4
> +
> +    mov             r4, #32
> +    vdup.32         q8, r4
> +    mov             r4, #\h
> +
> +.loop_4x\h:
> +    movrel          r12, g_lumaFilter
> +    add             r12, r5
> +    mov             r6, r0
> +
> +    vld1.u32        d0[0], [r6], r1
> +    vld1.u32        d0[1], [r6], r1
> +    vld1.u32        d1[0], [r6], r1
> +    vld1.u32        d1[1], [r6], r1
> +    vld1.u32        d2[0], [r6], r1
> +    vld1.u32        d2[1], [r6], r1
> +    vld1.u32        d3[0], [r6], r1
> +    vld1.u32        d3[1], [r6], r1
> +
> +    veor.u8         q9, q9
> +
> +    vmovl.u8        q11, d0
> +    vmovl.u16       q12, d22
> +    vmovl.u16       q13, d23
> +    vld1.s32        d20, [r12]!
> +    vmov.s32        d21, d20
> +    vmla.s32        q9, q12, q10
> +    vld1.s32        d20, [r12]!
> +    vmov.s32        d21, d20
> +    vmla.s32        q9, q13, q10
> +
> +    vmovl.u8        q11, d1
> +    vmovl.u16       q12, d22
> +    vmovl.u16       q13, d23
> +    vld1.s32        d20, [r12]!
> +    vmov.s32        d21, d20
> +    vmla.s32        q9, q12, q10
> +    vld1.s32        d20, [r12]!
> +    vmov.s32        d21, d20
> +    vmla.s32        q9, q13, q10
> +
> +    vmovl.u8        q11, d2
> +    vmovl.u16       q12, d22
> +    vmovl.u16       q13, d23
> +    vld1.s32        d20, [r12]!
> +    vmov.s32        d21, d20
> +    vmla.s32        q9, q12, q10
> +    vld1.s32        d20, [r12]!
> +    vmov.s32        d21, d20
> +    vmla.s32        q9, q13, q10
> +
> +    vmovl.u8        q11, d3
> +    vmovl.u16       q12, d22
> +    vmovl.u16       q13, d23
> +    vld1.s32        d20, [r12]!
> +    vmov.s32        d21, d20
> +    vmla.s32        q9, q12, q10
> +    vld1.s32        d20, [r12]!
> +    vmov.s32        d21, d20
> +    vmla.s32        q9, q13, q10
> +
> +    vadd.s32        q9, q8
> +    vqshrun.s32     d0, q9, #6
> +    vqmovn.u16      d0, q0
> +    vst1.u32        d0[0], [r2], r3
> +
> +    add             r0, r1
> +    subs            r4, #1
> +    bne             .loop_4x\h
> +
> +    pop             {r4, r5, r6}
> +    bx              lr
> +endfunc
> +.endm
> +
> +LUMA_VPP_4xN 4
> +LUMA_VPP_4xN 8
> +LUMA_VPP_4xN 16
> diff -r 4a2f94a59251 -r 2f43a5b32372 source/common/arm/ipfilter8.h
> --- a/source/common/arm/ipfilter8.h     Wed Mar 09 14:34:06 2016 +0530
> +++ b/source/common/arm/ipfilter8.h     Wed Mar 16 16:52:23 2016 +0530
> @@ -51,4 +51,17 @@
>  void x265_filterPixelToShort_64x48_neon(const pixel* src, intptr_t
> srcStride, int16_t* dst, intptr_t dstStride);
>  void x265_filterPixelToShort_64x64_neon(const pixel* src, intptr_t
> srcStride, int16_t* dst, intptr_t dstStride);
>
> +void x265_interp_8tap_vert_pp_4x4_neon(const pixel* src, intptr_t
> srcStride, pixel* dst, intptr_t dstStride, int coeffIdx);
> +void x265_interp_8tap_vert_pp_4x8_neon(const pixel* src, intptr_t
> srcStride, pixel* dst, intptr_t dstStride, int coeffIdx);
> +void x265_interp_8tap_vert_pp_4x16_neon(const pixel* src, intptr_t
> srcStride, pixel* dst, intptr_t dstStride, int coeffIdx);
> +void x265_interp_8tap_vert_pp_8x4_neon(const pixel* src, intptr_t
> srcStride, pixel* dst, intptr_t dstStride, int coeffIdx);
> +void x265_interp_8tap_vert_pp_8x8_neon(const pixel* src, intptr_t
> srcStride, pixel* dst, intptr_t dstStride, int coeffIdx);
> +void x265_interp_8tap_vert_pp_8x16_neon(const pixel* src, intptr_t
> srcStride, pixel* dst, intptr_t dstStride, int coeffIdx);
> +void x265_interp_8tap_vert_pp_8x32_neon(const pixel* src, intptr_t
> srcStride, pixel* dst, intptr_t dstStride, int coeffIdx);
> +void x265_interp_8tap_vert_pp_16x4_neon(const pixel* src, intptr_t
> srcStride, pixel* dst, intptr_t dstStride, int coeffIdx);
> +void x265_interp_8tap_vert_pp_16x8_neon(const pixel* src, intptr_t
> srcStride, pixel* dst, intptr_t dstStride, int coeffIdx);
> +void x265_interp_8tap_vert_pp_16x16_neon(const pixel* src, intptr_t
> srcStride, pixel* dst, intptr_t dstStride, int coeffIdx);
> +void x265_interp_8tap_vert_pp_16x32_neon(const pixel* src, intptr_t
> srcStride, pixel* dst, intptr_t dstStride, int coeffIdx);
> +void x265_interp_8tap_vert_pp_16x64_neon(const pixel* src, intptr_t
> srcStride, pixel* dst, intptr_t dstStride, int coeffIdx);
> +void x265_interp_8tap_vert_pp_16x12_neon(const pixel* src, intptr_t
> srcStride, pixel* dst, intptr_t dstStride, int coeffIdx);
>  #endif // ifndef X265_IPFILTER8_ARM_H
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20160321/f8370913/attachment-0001.html>


More information about the x265-devel mailing list