Doesnt apply at the tip. On Tue, Mar 22, 2016 at 6:57 PM, <[email protected]> wrote:
> # HG changeset patch > # User Ramya Sriraman<[email protected]> > # Date 1458625243 -19800 > # Tue Mar 22 11:10:43 2016 +0530 > # Node ID a9014e51d47ee5cdfe381d02526b1c94082cd4bf > # Parent e5c08206b8bfcce3a808b8f14848953c9cf51ce7 > arm: Implement interp_8tap_vert_sp_NXN NEON > > diff -r e5c08206b8bf -r a9014e51d47e source/common/arm/asm-primitives.cpp > --- a/source/common/arm/asm-primitives.cpp Wed Mar 16 16:52:23 2016 > +0530 > +++ b/source/common/arm/asm-primitives.cpp Tue Mar 22 11:10:43 2016 > +0530 > @@ -328,6 +328,32 @@ > 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); > + > + p.pu[LUMA_4x4].luma_vsp = PFX(interp_8tap_vert_sp_4x4_neon); > + p.pu[LUMA_4x8].luma_vsp = PFX(interp_8tap_vert_sp_4x8_neon); > + p.pu[LUMA_4x16].luma_vsp = PFX(interp_8tap_vert_sp_4x16_neon); > + p.pu[LUMA_8x4].luma_vsp = PFX(interp_8tap_vert_sp_8x4_neon); > + p.pu[LUMA_8x8].luma_vsp = PFX(interp_8tap_vert_sp_8x8_neon); > + p.pu[LUMA_8x16].luma_vsp = PFX(interp_8tap_vert_sp_8x16_neon); > + p.pu[LUMA_8x32].luma_vsp = PFX(interp_8tap_vert_sp_8x32_neon); > + p.pu[LUMA_16x4].luma_vsp = PFX(interp_8tap_vert_sp_16x4_neon); > + p.pu[LUMA_16x8].luma_vsp = PFX(interp_8tap_vert_sp_16x8_neon); > + p.pu[LUMA_16x16].luma_vsp = PFX(interp_8tap_vert_sp_16x16_neon); > + p.pu[LUMA_16x32].luma_vsp = PFX(interp_8tap_vert_sp_16x32_neon); > + p.pu[LUMA_16x64].luma_vsp = PFX(interp_8tap_vert_sp_16x64_neon); > + p.pu[LUMA_16x12].luma_vsp = PFX(interp_8tap_vert_sp_16x12_neon); > + p.pu[LUMA_32x8].luma_vsp = PFX(interp_8tap_vert_sp_32x8_neon); > + p.pu[LUMA_32x16].luma_vsp = PFX(interp_8tap_vert_sp_32x16_neon); > + p.pu[LUMA_32x32].luma_vsp = PFX(interp_8tap_vert_sp_32x32_neon); > + p.pu[LUMA_32x64].luma_vsp = PFX(interp_8tap_vert_sp_32x64_neon); > + p.pu[LUMA_32x24].luma_vsp = PFX(interp_8tap_vert_sp_32x24_neon); > + p.pu[LUMA_64x16].luma_vsp = PFX(interp_8tap_vert_sp_64x16_neon); > + p.pu[LUMA_64x32].luma_vsp = PFX(interp_8tap_vert_sp_64x32_neon); > + p.pu[LUMA_64x64].luma_vsp = PFX(interp_8tap_vert_sp_64x64_neon); > + p.pu[LUMA_64x48].luma_vsp = PFX(interp_8tap_vert_sp_64x48_neon); > + p.pu[LUMA_24x32].luma_vsp = PFX(interp_8tap_vert_sp_24x32_neon); > + p.pu[LUMA_48x64].luma_vsp = PFX(interp_8tap_vert_sp_48x64_neon); > + p.pu[LUMA_12x16].luma_vsp = PFX(interp_8tap_vert_sp_12x16_neon); > } > if (cpuMask & X265_CPU_ARMV6) > { > diff -r e5c08206b8bf -r a9014e51d47e source/common/arm/ipfilter8.S > --- a/source/common/arm/ipfilter8.S Wed Mar 16 16:52:23 2016 +0530 > +++ b/source/common/arm/ipfilter8.S Tue Mar 22 11:10:43 2016 +0530 > @@ -32,6 +32,7 @@ > .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 > > // filterPixelToShort(const pixel* src, intptr_t srcStride, int16_t* dst, > intptr_t dstStride) > @@ -698,6 +699,102 @@ > bx lr > endfunc > > +.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 > + .ltorg > +endfunc > +.endm > + > +LUMA_VPP_4xN 4 > +LUMA_VPP_4xN 8 > +LUMA_VPP_4xN 16 > + > .macro qpel_filter_0_32b > vmov.i16 d17, #64 > vmovl.u8 q11, d3 > @@ -947,101 +1044,6 @@ > 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] > @@ -1050,7 +1052,7 @@ > sub r0, r4 > > mov r4, #16 > -.loop_12x16: > +.loop_vpp_12x16: > > mov r6, r0 > mov r7, r2 > @@ -1083,6 +1085,9 @@ > beq 2f > cmp r5,#3 > beq 3f > +0: > + qpel_filter_0_32b > + b 5f > 1: > qpel_filter_1_32b > b 5f > @@ -1092,11 +1097,6 @@ > 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 > @@ -1137,6 +1137,9 @@ > beq 2f > cmp r5,#3 > beq 3f > +0: > + qpel_filter_0_32b > + b 5f > 1: > qpel_filter_1_32b > b 5f > @@ -1146,11 +1149,6 @@ > 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 > @@ -1164,8 +1162,448 @@ > add r0, r1 > add r2, r3 > subs r4, #1 > - bne .loop_12x16 > + bne .loop_vpp_12x16 > > pop {r4, r5, r6, r7} > bx lr > endfunc > +//**************luma_vsp************ > +.macro LUMA_VSP_4xN h > +function x265_interp_8tap_vert_sp_4x\h\()_neon > + push {r4, r5, r6} > + ldr r4, [sp, #4 * 3] > + mov r5, r4, lsl #6 > + lsl r1, #1 > + mov r4, r1, lsl #2 > + sub r4, r1 > + sub r0, r4 > + > + mov r12, #1 > + lsl r12, #19 > + add r12, #2048 > + vdup.32 q8, r12 > + mov r4, #\h > +.loop_vsp_4x\h: > + movrel r12, g_lumaFilter > + add r12, r5 > + mov r6, r0 > + > + pld [r6] > + vld1.u16 d0, [r6], r1 > + pld [r6] > + vld1.u16 d1, [r6], r1 > + pld [r6] > + vld1.u16 d2, [r6], r1 > + pld [r6] > + vld1.u16 d3, [r6], r1 > + pld [r6] > + vld1.u16 d4, [r6], r1 > + pld [r6] > + vld1.u16 d5, [r6], r1 > + pld [r6] > + vld1.u16 d6, [r6], r1 > + pld [r6] > + vld1.u16 d7, [r6], r1 > + > + veor.u8 q9, q9 > + > + vmovl.s16 q11, d0 > + vld1.s32 d24, [r12]! > + vmov.s32 d25, d24 > + vmla.s32 q9, q12, q11 > + > + vmovl.s16 q11, d1 > + vld1.s32 d24, [r12]! > + vmov.s32 d25, d24 > + vmla.s32 q9, q12, q11 > + > + vmovl.s16 q11, d2 > + vld1.s32 d24, [r12]! > + vmov.s32 d25, d24 > + vmla.s32 q9, q12, q11 > + > + vmovl.s16 q11, d3 > + vld1.s32 d24, [r12]! > + vmov.s32 d25, d24 > + vmla.s32 q9, q12, q11 > + > + vmovl.s16 q11, d4 > + vld1.s32 d24, [r12]! > + vmov.s32 d25, d24 > + vmla.s32 q9, q12, q11 > + > + vmovl.s16 q11, d5 > + vld1.s32 d24, [r12]! > + vmov.s32 d25, d24 > + vmla.s32 q9, q12, q11 > + > + vmovl.s16 q11, d6 > + vld1.s32 d24, [r12]! > + vmov.s32 d25, d24 > + vmla.s32 q9, q12, q11 > + > + vmovl.s16 q11, d7 > + vld1.s32 d24, [r12]! > + vmov.s32 d25, d24 > + vmla.s32 q9, q12, q11 > + > + > + vadd.s32 q9, q8 > + vqshrun.s32 d0, q9, #12 > + vqmovn.u16 d0, q0 > + vst1.u32 d0[0], [r2], r3 > + > + add r0, r1 > + subs r4, #1 > + bne .loop_vsp_4x\h > + pop {r4, r5, r6} > + bx lr > + .ltorg > +endfunc > +.endm > + > +LUMA_VSP_4xN 4 > +LUMA_VSP_4xN 8 > +LUMA_VSP_4xN 16 > + > +.macro qpel_filter_0_32b_1 > + vmov.i16 d17, #64 > + vmull.s16 q9, d6, d17 // 64*d0 > + vmull.s16 q10, d7, d17 // 64*d1 > +.endm > + > +.macro qpel_filter_1_32b_1 > + vmov.i16 d16, #58 > + vmov.i16 d17, #10 > + vmull.s16 q9, d6, d16 // 58 * d0 > + vmull.s16 q10, d7, d16 // 58 * d1 > + vmov.i16 d16, #17 > + vmull.s16 q11, d4, d17 // 10 * c0 > + vmull.s16 q12, d5, d17 // 10 * c1 > + vmov.i16 d17, #5 > + vmull.s16 q13, d8, d16 // 17 * e0 > + vmull.s16 q14, d9, d16 // 17 * e1 > + vmull.s16 q15, d10, d17 // 5 * f0 > + vmull.s16 q8, d11, d17 // 5 * f1 > + vsub.s32 q9, q11 // 58 * d0 - 10 * c0 > + vsub.s32 q10, q12 // 58 * d1 - 10 * c1 > + 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 > + vsubl.s16 q13, d12, d0 // g0 - a0 > + vsubl.s16 q14, d13, d1 // 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_1 > + vmov.i32 q8, #11 > + vaddl.s16 q9, d6, d8 // d0 + e0 > + vaddl.s16 q10, d7, d9 // d1 + e1 > + vaddl.s16 q11, d4, d10 // c0 + f0 > + vaddl.s16 q12, d5, d11 // c1 + f1 > + vmul.s32 q11, q8 // 11 * (c0 + f0) > + vmul.s32 q12, q8 // 11 * (c1 + f1) > + vmov.i32 q8, #40 > + vaddl.s16 q15, d2, d12 // b0 + g0 > + vmul.s32 q9, q8 // 40 * (d0 + e0) > + vmul.s32 q10, q8 // 40 * (d1 + e1) > + vaddl.s16 q8, d3, d13 // b1 + g1 > + vaddl.s16 q13, d0, d14 // a0 + h0 > + vaddl.s16 q14, d1, d15 // 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_1 > + vmov.i16 d16, #17 > + vmov.i16 d17, #5 > + vmull.s16 q9, d6, d16 // 17 * d0 > + vmull.s16 q10, d7, d16 // 17 * d1 > + vmull.s16 q11, d4, d17 // 5 * c0 > + vmull.s16 q12, d5, d17 // 5* c1 > + vmov.i16 d16, #58 > + vmull.s16 q13, d8, d16 // 58 * e0 > + vmull.s16 q14, d9, d16 // 58 * e1 > + vmov.i16 d17, #10 > + vmull.s16 q15, d10, d17 // 10 * f0 > + vmull.s16 q8, d11, d17 // 10 * f1 > + vsub.s32 q9, q11 // 17 * d0 - 5 * c0 > + vsub.s32 q10, q12 // 17 * d1 - 5 * c1 > + vshll.s16 q11, d12, #2 // 4 * g0 > + vshll.s16 q12, d13, #2 // 4 * g1 > + vadd.s32 q9, q13 // 17 * d0 - 5 * c0+ 58 * e0 > + vadd.s32 q10, q14 // 17 * d1 - 5 * c1 + 58 * e1 > + vsubl.s16 q13, d2, d14 // b0 - h0 > + vsubl.s16 q14, d3, d15 // 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_VSP a b filterv > + > + vpush { q4 - q7} > +.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.u16 {q0}, [r6], r1 > + pld [r6] > + vld1.u16 {q1}, [r6], r1 > + pld [r6] > + vld1.u16 {q2}, [r6], r1 > + pld [r6] > + vld1.u16 {q3}, [r6], r1 > + pld [r6] > + vld1.u16 {q4}, [r6], r1 > + pld [r6] > + vld1.u16 {q5}, [r6], r1 > + pld [r6] > + vld1.u16 {q6}, [r6], r1 > + pld [r6] > + vld1.u16 {q7}, [r6], r1 > + > + veor.u8 q9, q9 > + veor.u8 q10, q10 > + > + \filterv > + > + mov r12,#1 > + lsl r12, #19 > + add r12, #2048 > + vdup.32 q8, r12 > + vadd.s32 q9, q8 > + vqshrun.s32 d0, q9, #12 > + vadd.s32 q10, q8 > + vqshrun.s32 d1, q10, #12 > + vqmovn.u16 d0, q0 > + vst1.u8 d0, [r7]! > + > + > + add r8, #16 > + mov r12, #\a > + lsl r12, #1 > + cmp r8, r12 > + blt .loop_w8_\filterv\()_\a\()x\b > + > + add r0, r1 > + add r2, r3 > + subs r4, #1 > + bne .loop_\filterv\()_\a\()x\b > + > + vpop { q4 - q7} > + > +.endm > + > +.macro LUMA_VSP w h > +function x265_interp_8tap_vert_sp_\w\()x\h\()_neon > + > + push {r4, r5, r6, r7, r8} > + ldr r5, [sp, #4 * 5] > + lsl r1, #1 > + 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_VSP \w \h qpel_filter_0_32b_1 > + b 5f > +1: > + FILTER_VSP \w \h qpel_filter_1_32b_1 > + b 5f > +2: > + FILTER_VSP \w \h qpel_filter_2_32b_1 > + b 5f > +3: > + FILTER_VSP \w \h qpel_filter_3_32b_1 > + b 5f > +5: > + pop {r4, r5, r6, r7, r8} > + bx lr > +endfunc > +.endm > + > + > +LUMA_VSP 8 4 > +LUMA_VSP 8 8 > +LUMA_VSP 8 16 > +LUMA_VSP 8 32 > +LUMA_VSP 16 4 > +LUMA_VSP 16 8 > +LUMA_VSP 16 16 > +LUMA_VSP 16 32 > +LUMA_VSP 16 64 > +LUMA_VSP 16 12 > +LUMA_VSP 32 8 > +LUMA_VSP 32 16 > +LUMA_VSP 32 32 > +LUMA_VSP 32 64 > +LUMA_VSP 32 24 > +LUMA_VSP 64 16 > +LUMA_VSP 64 32 > +LUMA_VSP 64 64 > +LUMA_VSP 64 48 > +LUMA_VSP 24 32 > +LUMA_VSP 48 64 > + > +function x265_interp_8tap_vert_sp_12x16_neon > + push {r4, r5, r6, r7} > + ldr r5, [sp, #4 * 4] > + lsl r1, #1 > + mov r4, r1, lsl #2 > + sub r4, r1 > + sub r0, r4 > + > + mov r4, #16 > + vpush { q4 - q7} > +.loop1_12x16: > + > + mov r6, r0 > + mov r7, r2 > + > + pld [r6] > + vld1.u16 {q0}, [r6], r1 > + pld [r6] > + vld1.u16 {q1}, [r6], r1 > + pld [r6] > + vld1.u8 {q2}, [r6], r1 > + pld [r6] > + vld1.u16 {q3}, [r6], r1 > + pld [r6] > + vld1.u16 {q4}, [r6], r1 > + pld [r6] > + vld1.u16 {q5}, [r6], r1 > + pld [r6] > + vld1.u16 {q6}, [r6], r1 > + pld [r6] > + vld1.u16 {q7}, [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 > +0: > + qpel_filter_0_32b_1 > + b 5f > +1: > + qpel_filter_1_32b_1 > + b 5f > +2: > + qpel_filter_2_32b_1 > + b 5f > +3: > + qpel_filter_3_32b_1 > + b 5f > +5: > + mov r12,#1 > + lsl r12, #19 > + add r12, #2048 > + vdup.32 q8, r12 > + vadd.s32 q9, q8 > + vqshrun.s32 d0, q9, #12 > + vadd.s32 q10, q8 > + vqshrun.s32 d1, q10, #12 > + vqmovn.u16 d0, q0 > + vst1.u8 d0, [r7]! > + > + add r6, r0, #16 > + > + pld [r6] > + vld1.u16 {q0}, [r6], r1 > + pld [r6] > + vld1.u16 {q1}, [r6], r1 > + pld [r6] > + vld1.u8 {q2}, [r6], r1 > + pld [r6] > + vld1.u16 {q3}, [r6], r1 > + pld [r6] > + vld1.u16 {q4}, [r6], r1 > + pld [r6] > + vld1.u16 {q5}, [r6], r1 > + pld [r6] > + vld1.u16 {q6}, [r6], r1 > + pld [r6] > + vld1.u16 {q7}, [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 > +0: > + qpel_filter_0_32b_1 > + b 5f > +1: > + qpel_filter_1_32b_1 > + b 5f > +2: > + qpel_filter_2_32b_1 > + b 5f > +3: > + qpel_filter_3_32b_1 > + b 5f > +5: > + mov r12,#1 > + lsl r12, #19 > + add r12, #2048 > + vdup.32 q8, r12 > + vadd.s32 q9, q8 > + vqshrun.s32 d0, q9, #12 > + vadd.s32 q10, q8 > + vqshrun.s32 d1, q10, #12 > + vqmovn.u16 d0, q0 > + vst1.u32 d0[0], [r7]! > + > + add r0, r1 > + add r2, r3 > + subs r4, #1 > + bne .loop1_12x16 > + vpop { q4 - q7} > + pop {r4, r5, r6, r7} > + bx lr > +endfunc > + > diff -r e5c08206b8bf -r a9014e51d47e source/common/arm/ipfilter8.h > --- a/source/common/arm/ipfilter8.h Wed Mar 16 16:52:23 2016 +0530 > +++ b/source/common/arm/ipfilter8.h Tue Mar 22 11:10:43 2016 +0530 > @@ -76,4 +76,30 @@ > 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); > + > +void x265_interp_8tap_vert_sp_4x4_neon(const int16_t* src, intptr_t > srcStride, pixel* dst, intptr_t dstStride, int coeffIdx); > +void x265_interp_8tap_vert_sp_4x8_neon(const int16_t* src, intptr_t > srcStride, pixel* dst, intptr_t dstStride, int coeffIdx); > +void x265_interp_8tap_vert_sp_4x16_neon(const int16_t* src, intptr_t > srcStride, pixel* dst, intptr_t dstStride, int coeffIdx); > +void x265_interp_8tap_vert_sp_8x4_neon(const int16_t* src, intptr_t > srcStride, pixel* dst, intptr_t dstStride, int coeffIdx); > +void x265_interp_8tap_vert_sp_8x8_neon(const int16_t* src, intptr_t > srcStride, pixel* dst, intptr_t dstStride, int coeffIdx); > +void x265_interp_8tap_vert_sp_8x16_neon(const int16_t* src, intptr_t > srcStride, pixel* dst, intptr_t dstStride, int coeffIdx); > +void x265_interp_8tap_vert_sp_8x32_neon(const int16_t* src, intptr_t > srcStride, pixel* dst, intptr_t dstStride, int coeffIdx); > +void x265_interp_8tap_vert_sp_16x4_neon(const int16_t* src, intptr_t > srcStride, pixel* dst, intptr_t dstStride, int coeffIdx); > +void x265_interp_8tap_vert_sp_16x8_neon(const int16_t* src, intptr_t > srcStride, pixel* dst, intptr_t dstStride, int coeffIdx); > +void x265_interp_8tap_vert_sp_16x16_neon(const int16_t* src, intptr_t > srcStride, pixel* dst, intptr_t dstStride, int coeffIdx); > +void x265_interp_8tap_vert_sp_16x32_neon(const int16_t* src, intptr_t > srcStride, pixel* dst, intptr_t dstStride, int coeffIdx); > +void x265_interp_8tap_vert_sp_16x64_neon(const int16_t* src, intptr_t > srcStride, pixel* dst, intptr_t dstStride, int coeffIdx); > +void x265_interp_8tap_vert_sp_16x12_neon(const int16_t* src, intptr_t > srcStride, pixel* dst, intptr_t dstStride, int coeffIdx); > +void x265_interp_8tap_vert_sp_32x8_neon(const int16_t* src, intptr_t > srcStride, pixel* dst, intptr_t dstStride, int coeffIdx); > +void x265_interp_8tap_vert_sp_32x16_neon(const int16_t* src, intptr_t > srcStride, pixel* dst, intptr_t dstStride, int coeffIdx); > +void x265_interp_8tap_vert_sp_32x32_neon(const int16_t* src, intptr_t > srcStride, pixel* dst, intptr_t dstStride, int coeffIdx); > +void x265_interp_8tap_vert_sp_32x64_neon(const int16_t* src, intptr_t > srcStride, pixel* dst, intptr_t dstStride, int coeffIdx); > +void x265_interp_8tap_vert_sp_32x24_neon(const int16_t* src, intptr_t > srcStride, pixel* dst, intptr_t dstStride, int coeffIdx); > +void x265_interp_8tap_vert_sp_64x16_neon(const int16_t* src, intptr_t > srcStride, pixel* dst, intptr_t dstStride, int coeffIdx); > +void x265_interp_8tap_vert_sp_64x32_neon(const int16_t* src, intptr_t > srcStride, pixel* dst, intptr_t dstStride, int coeffIdx); > +void x265_interp_8tap_vert_sp_64x64_neon(const int16_t* src, intptr_t > srcStride, pixel* dst, intptr_t dstStride, int coeffIdx); > +void x265_interp_8tap_vert_sp_64x48_neon(const int16_t* src, intptr_t > srcStride, pixel* dst, intptr_t dstStride, int coeffIdx); > +void x265_interp_8tap_vert_sp_24x32_neon(const int16_t* src, intptr_t > srcStride, pixel* dst, intptr_t dstStride, int coeffIdx); > +void x265_interp_8tap_vert_sp_48x64_neon(const int16_t* src, intptr_t > srcStride, pixel* dst, intptr_t dstStride, int coeffIdx); > +void x265_interp_8tap_vert_sp_12x16_neon(const int16_t* src, intptr_t > srcStride, pixel* dst, intptr_t dstStride, int coeffIdx); > #endif // ifndef X265_IPFILTER8_ARM_H > _______________________________________________ > x265-devel mailing list > [email protected] > https://mailman.videolan.org/listinfo/x265-devel > -- Deepthi Nandakumar Engineering Manager, x265 Multicoreware, Inc
_______________________________________________ x265-devel mailing list [email protected] https://mailman.videolan.org/listinfo/x265-devel
