Message ID | 1483601737-27632-1-git-send-email-martin@martin.st |
---|---|
State | Committed |
Commit | a76bf8cf1277ef6feb1580b578f5e6ca327e713c |
Headers | show |
On 2017-01-05 09:35:36 +0200, Martin Storsjö wrote: > This work is sponsored by, and copyright, Google. > > Before: Cortex A7 A8 A9 A53 > vp9_inv_dct_dct_16x16_sub1_add_neon: 273.0 189.5 211.7 235.8 > vp9_inv_dct_dct_32x32_sub1_add_neon: 752.0 459.2 862.2 553.9 > After: > vp9_inv_dct_dct_16x16_sub1_add_neon: 226.5 145.0 225.1 171.8 > vp9_inv_dct_dct_32x32_sub1_add_neon: 721.2 415.7 727.6 475.0 > --- > libavcodec/arm/vp9itxfm_neon.S | 54 ++++++++++++++++++++++++++++-------------- > 1 file changed, 36 insertions(+), 18 deletions(-) > > diff --git a/libavcodec/arm/vp9itxfm_neon.S b/libavcodec/arm/vp9itxfm_neon.S > index 5abe435..a81240b 100644 > --- a/libavcodec/arm/vp9itxfm_neon.S > +++ b/libavcodec/arm/vp9itxfm_neon.S > @@ -518,16 +518,23 @@ function idct16x16_dc_add_neon > > vrshr.s16 q8, q8, #6 > > + mov r3, r0 > mov r12, #16 > 1: > @ Loop to add the constant from q8 into all 16x16 outputs > - vld1.8 {q3}, [r0,:128] > - vaddw.u8 q10, q8, d6 > - vaddw.u8 q11, q8, d7 > - vqmovun.s16 d6, q10 > - vqmovun.s16 d7, q11 > - vst1.8 {q3}, [r0,:128], r1 > - subs r12, r12, #1 > + subs r12, r12, #2 > + vld1.8 {q2}, [r0,:128], r1 > + vaddw.u8 q10, q8, d4 > + vld1.8 {q3}, [r0,:128], r1 > + vaddw.u8 q11, q8, d5 > + vaddw.u8 q12, q8, d6 > + vaddw.u8 q13, q8, d7 > + vqmovun.s16 d4, q10 > + vqmovun.s16 d5, q11 > + vqmovun.s16 d6, q12 > + vst1.8 {q2}, [r3,:128], r1 > + vqmovun.s16 d7, q13 > + vst1.8 {q3}, [r3,:128], r1 > bne 1b > > bx lr > @@ -889,20 +896,31 @@ function idct32x32_dc_add_neon > > vrshr.s16 q8, q8, #6 > > + mov r3, r0 > mov r12, #32 > 1: > @ Loop to add the constant from q8 into all 32x32 outputs > - vld1.8 {q2-q3}, [r0,:128] > - vaddw.u8 q10, q8, d4 > - vaddw.u8 q11, q8, d5 > - vaddw.u8 q12, q8, d6 > - vaddw.u8 q13, q8, d7 > - vqmovun.s16 d4, q10 > - vqmovun.s16 d5, q11 > - vqmovun.s16 d6, q12 > - vqmovun.s16 d7, q13 > - vst1.8 {q2-q3}, [r0,:128], r1 > - subs r12, r12, #1 > + subs r12, r12, #2 > + vld1.8 {q0-q1}, [r0,:128], r1 > + vaddw.u8 q9, q8, d0 > + vaddw.u8 q10, q8, d1 > + vld1.8 {q2-q3}, [r0,:128], r1 > + vaddw.u8 q11, q8, d2 > + vaddw.u8 q12, q8, d3 > + vaddw.u8 q13, q8, d4 > + vaddw.u8 q14, q8, d5 > + vaddw.u8 q15, q8, d6 > + vqmovun.s16 d0, q9 > + vaddw.u8 q9, q8, d7 > + vqmovun.s16 d1, q10 > + vqmovun.s16 d2, q11 > + vqmovun.s16 d3, q12 > + vqmovun.s16 d4, q13 > + vqmovun.s16 d5, q14 > + vst1.8 {q0-q1}, [r3,:128], r1 > + vqmovun.s16 d6, q15 > + vqmovun.s16 d7, q9 > + vst1.8 {q2-q3}, [r3,:128], r1 > bne 1b > > bx lr ok Janne
diff --git a/libavcodec/arm/vp9itxfm_neon.S b/libavcodec/arm/vp9itxfm_neon.S index 5abe435..a81240b 100644 --- a/libavcodec/arm/vp9itxfm_neon.S +++ b/libavcodec/arm/vp9itxfm_neon.S @@ -518,16 +518,23 @@ function idct16x16_dc_add_neon vrshr.s16 q8, q8, #6 + mov r3, r0 mov r12, #16 1: @ Loop to add the constant from q8 into all 16x16 outputs - vld1.8 {q3}, [r0,:128] - vaddw.u8 q10, q8, d6 - vaddw.u8 q11, q8, d7 - vqmovun.s16 d6, q10 - vqmovun.s16 d7, q11 - vst1.8 {q3}, [r0,:128], r1 - subs r12, r12, #1 + subs r12, r12, #2 + vld1.8 {q2}, [r0,:128], r1 + vaddw.u8 q10, q8, d4 + vld1.8 {q3}, [r0,:128], r1 + vaddw.u8 q11, q8, d5 + vaddw.u8 q12, q8, d6 + vaddw.u8 q13, q8, d7 + vqmovun.s16 d4, q10 + vqmovun.s16 d5, q11 + vqmovun.s16 d6, q12 + vst1.8 {q2}, [r3,:128], r1 + vqmovun.s16 d7, q13 + vst1.8 {q3}, [r3,:128], r1 bne 1b bx lr @@ -889,20 +896,31 @@ function idct32x32_dc_add_neon vrshr.s16 q8, q8, #6 + mov r3, r0 mov r12, #32 1: @ Loop to add the constant from q8 into all 32x32 outputs - vld1.8 {q2-q3}, [r0,:128] - vaddw.u8 q10, q8, d4 - vaddw.u8 q11, q8, d5 - vaddw.u8 q12, q8, d6 - vaddw.u8 q13, q8, d7 - vqmovun.s16 d4, q10 - vqmovun.s16 d5, q11 - vqmovun.s16 d6, q12 - vqmovun.s16 d7, q13 - vst1.8 {q2-q3}, [r0,:128], r1 - subs r12, r12, #1 + subs r12, r12, #2 + vld1.8 {q0-q1}, [r0,:128], r1 + vaddw.u8 q9, q8, d0 + vaddw.u8 q10, q8, d1 + vld1.8 {q2-q3}, [r0,:128], r1 + vaddw.u8 q11, q8, d2 + vaddw.u8 q12, q8, d3 + vaddw.u8 q13, q8, d4 + vaddw.u8 q14, q8, d5 + vaddw.u8 q15, q8, d6 + vqmovun.s16 d0, q9 + vaddw.u8 q9, q8, d7 + vqmovun.s16 d1, q10 + vqmovun.s16 d2, q11 + vqmovun.s16 d3, q12 + vqmovun.s16 d4, q13 + vqmovun.s16 d5, q14 + vst1.8 {q0-q1}, [r3,:128], r1 + vqmovun.s16 d6, q15 + vqmovun.s16 d7, q9 + vst1.8 {q2-q3}, [r3,:128], r1 bne 1b bx lr