diff --git a/vp9/common/arm/neon/vp9_short_idct8x8_add_neon.asm b/vp9/common/arm/neon/vp9_short_idct8x8_add_neon.asm index 02978ea790dc488ec42d7c134b30dfec1f326275..a744f59dbdf6cafdabfbf5d4857d6e3be55347b5 100644 --- a/vp9/common/arm/neon/vp9_short_idct8x8_add_neon.asm +++ b/vp9/common/arm/neon/vp9_short_idct8x8_add_neon.asm @@ -25,151 +25,149 @@ ; stage 1 vdup.16 d0, r3 ; duplicate cospi_28_64 vdup.16 d1, r4 ; duplicate cospi_4_64 + vdup.16 d2, r5 ; duplicate cospi_12_64 + vdup.16 d3, r6 ; duplicate cospi_20_64 ; input[1] * cospi_28_64 vmull.s16 q2, d18, d0 vmull.s16 q3, d19, d0 + ; input[5] * cospi_12_64 + vmull.s16 q5, d26, d2 + vmull.s16 q6, d27, d2 + ; input[1]*cospi_28_64-input[7]*cospi_4_64 vmlsl.s16 q2, d30, d1 vmlsl.s16 q3, d31, d1 + ; input[5] * cospi_12_64 - input[3] * cospi_20_64 + vmlsl.s16 q5, d22, d3 + vmlsl.s16 q6, d23, d3 + ; dct_const_round_shift(input_dc * cospi_16_64) vqrshrn.s32 d8, q2, #14 ; >> 14 vqrshrn.s32 d9, q3, #14 ; >> 14 + ; dct_const_round_shift(input_dc * cospi_16_64) + vqrshrn.s32 d10, q5, #14 ; >> 14 + vqrshrn.s32 d11, q6, #14 ; >> 14 + ; input[1] * cospi_4_64 vmull.s16 q2, d18, d1 vmull.s16 q3, d19, d1 + ; input[5] * cospi_20_64 + vmull.s16 q9, d26, d3 + vmull.s16 q13, d27, d3 + ; input[1]*cospi_4_64+input[7]*cospi_28_64 vmlal.s16 q2, d30, d0 vmlal.s16 q3, d31, d0 - ; dct_const_round_shift(input_dc * cospi_16_64) - vqrshrn.s32 d14, q2, #14 ; >> 14 - vqrshrn.s32 d15, q3, #14 ; >> 14 - - vdup.16 d0, r5 ; duplicate cospi_12_64 - vdup.16 d1, r6 ; duplicate cospi_20_64 - - ; input[5] * cospi_12_64 - vmull.s16 q2, d26, d0 - vmull.s16 q3, d27, d0 - - ; input[5] * cospi_12_64 - input[3] * cospi_20_64 - vmlsl.s16 q2, d22, d1 - vmlsl.s16 q3, d23, d1 - - ; dct_const_round_shift(input_dc * cospi_16_64) - vqrshrn.s32 d10, q2, #14 ; >> 14 - vqrshrn.s32 d11, q3, #14 ; >> 14 - - ; input[5] * cospi_20_64 - vmull.s16 q2, d26, d1 - vmull.s16 q3, d27, d1 - ; input[5] * cospi_20_64 + input[3] * cospi_12_64 - vmlal.s16 q2, d22, d0 - vmlal.s16 q3, d23, d0 + vmlal.s16 q9, d22, d2 + vmlal.s16 q13, d23, d2 ; dct_const_round_shift(input_dc * cospi_16_64) - vqrshrn.s32 d12, q2, #14 ; >> 14 - vqrshrn.s32 d13, q3, #14 ; >> 14 + vqrshrn.s32 d14, q2, #14 ; >> 14 + vqrshrn.s32 d15, q3, #14 ; >> 14 ; stage 2 & stage 3 - even half vdup.16 d0, r7 ; duplicate cospi_16_64 + ; dct_const_round_shift(input_dc * cospi_16_64) + vqrshrn.s32 d12, q9, #14 ; >> 14 + vqrshrn.s32 d13, q13, #14 ; >> 14 + ; input[0] * cospi_16_64 vmull.s16 q2, d16, d0 vmull.s16 q3, d17, d0 + ; input[0] * cospi_16_64 + vmull.s16 q13, d16, d0 + vmull.s16 q15, d17, d0 + ; (input[0] + input[2]) * cospi_16_64 vmlal.s16 q2, d24, d0 vmlal.s16 q3, d25, d0 + ; (input[0] - input[2]) * cospi_16_64 + vmlsl.s16 q13, d24, d0 + vmlsl.s16 q15, d25, d0 + + vdup.16 d0, r8 ; duplicate cospi_24_64 + vdup.16 d1, r9 ; duplicate cospi_8_64 + ; dct_const_round_shift(input_dc * cospi_16_64) vqrshrn.s32 d18, q2, #14 ; >> 14 vqrshrn.s32 d19, q3, #14 ; >> 14 - ; input[0] * cospi_16_64 - vmull.s16 q2, d16, d0 - vmull.s16 q3, d17, d0 - - ; (input[0] - input[2]) * cospi_16_64 - vmlsl.s16 q2, d24, d0 - vmlsl.s16 q3, d25, d0 - ; dct_const_round_shift(input_dc * cospi_16_64) - vqrshrn.s32 d22, q2, #14 ; >> 14 - vqrshrn.s32 d23, q3, #14 ; >> 14 + vqrshrn.s32 d22, q13, #14 ; >> 14 + vqrshrn.s32 d23, q15, #14 ; >> 14 ; input[1] * cospi_24_64 - input[3] * cospi_8_64 - vdup.16 d0, r8 ; duplicate cospi_24_64 - vdup.16 d1, r9 ; duplicate cospi_8_64 - ; input[1] * cospi_24_64 vmull.s16 q2, d20, d0 vmull.s16 q3, d21, d0 + ; input[1] * cospi_8_64 + vmull.s16 q8, d20, d1 + vmull.s16 q12, d21, d1 + ; input[1] * cospi_24_64 - input[3] * cospi_8_64 vmlsl.s16 q2, d28, d1 vmlsl.s16 q3, d29, d1 + ; input[1] * cospi_8_64 + input[3] * cospi_24_64 + vmlal.s16 q8, d28, d0 + vmlal.s16 q12, d29, d0 + ; dct_const_round_shift(input_dc * cospi_16_64) vqrshrn.s32 d26, q2, #14 ; >> 14 vqrshrn.s32 d27, q3, #14 ; >> 14 - ; input[1] * cospi_8_64 - vmull.s16 q2, d20, d1 - vmull.s16 q3, d21, d1 - - ; input[1] * cospi_8_64 + input[3] * cospi_24_64 - vmlal.s16 q2, d28, d0 - vmlal.s16 q3, d29, d0 - ; dct_const_round_shift(input_dc * cospi_16_64) - vqrshrn.s32 d30, q2, #14 ; >> 14 - vqrshrn.s32 d31, q3, #14 ; >> 14 - + vqrshrn.s32 d30, q8, #14 ; >> 14 + vqrshrn.s32 d31, q12, #14 ; >> 14 vadd.s16 q0, q9, q15 ; output[0] = step[0] + step[3] vadd.s16 q1, q11, q13 ; output[1] = step[1] + step[2] vsub.s16 q2, q11, q13 ; output[2] = step[1] - step[2] vsub.s16 q3, q9, q15 ; output[3] = step[0] - step[3] + ; stage 3 -odd half + vdup.16 d16, r7 ; duplicate cospi_16_64 + ; stage 2 - odd half vsub.s16 q13, q4, q5 ; step2[5] = step1[4] - step1[5] vadd.s16 q4, q4, q5 ; step2[4] = step1[4] + step1[5] vsub.s16 q14, q7, q6 ; step2[6] = -step1[6] + step1[7] vadd.s16 q7, q7, q6 ; step2[7] = step1[6] + step1[7] - ; stage 3 -odd half - vdup.16 d16, r7 ; duplicate cospi_16_64 - ; step2[6] * cospi_16_64 vmull.s16 q9, d28, d16 vmull.s16 q10, d29, d16 + ; step2[6] * cospi_16_64 + vmull.s16 q11, d28, d16 + vmull.s16 q12, d29, d16 + ; (step2[6] - step2[5]) * cospi_16_64 vmlsl.s16 q9, d26, d16 vmlsl.s16 q10, d27, d16 + ; (step2[5] + step2[6]) * cospi_16_64 + vmlal.s16 q11, d26, d16 + vmlal.s16 q12, d27, d16 + ; dct_const_round_shift(input_dc * cospi_16_64) vqrshrn.s32 d10, q9, #14 ; >> 14 vqrshrn.s32 d11, q10, #14 ; >> 14 - ; step2[6] * cospi_16_64 - vmull.s16 q9, d28, d16 - vmull.s16 q10, d29, d16 - - ; (step2[5] + step2[6]) * cospi_16_64 - vmlal.s16 q9, d26, d16 - vmlal.s16 q10, d27, d16 - ; dct_const_round_shift(input_dc * cospi_16_64) - vqrshrn.s32 d12, q9, #14 ; >> 14 - vqrshrn.s32 d13, q10, #14 ; >> 14 + vqrshrn.s32 d12, q11, #14 ; >> 14 + vqrshrn.s32 d13, q12, #14 ; >> 14 ; stage 4 vadd.s16 q8, q0, q7 ; output[0] = step1[0] + step1[7]; @@ -424,25 +422,25 @@ vmull.s16 q9, d28, d16 vmull.s16 q10, d29, d16 + ; step2[6] * cospi_16_64 + vmull.s16 q11, d28, d16 + vmull.s16 q12, d29, d16 + ; (step2[6] - step2[5]) * cospi_16_64 vmlsl.s16 q9, d26, d16 vmlsl.s16 q10, d27, d16 + ; (step2[5] + step2[6]) * cospi_16_64 + vmlal.s16 q11, d26, d16 + vmlal.s16 q12, d27, d16 + ; dct_const_round_shift(input_dc * cospi_16_64) vqrshrn.s32 d10, q9, #14 ; >> 14 vqrshrn.s32 d11, q10, #14 ; >> 14 - ; step2[6] * cospi_16_64 - vmull.s16 q9, d28, d16 - vmull.s16 q10, d29, d16 - - ; (step2[5] + step2[6]) * cospi_16_64 - vmlal.s16 q9, d26, d16 - vmlal.s16 q10, d27, d16 - ; dct_const_round_shift(input_dc * cospi_16_64) - vqrshrn.s32 d12, q9, #14 ; >> 14 - vqrshrn.s32 d13, q10, #14 ; >> 14 + vqrshrn.s32 d12, q11, #14 ; >> 14 + vqrshrn.s32 d13, q12, #14 ; >> 14 ; stage 4 vadd.s16 q8, q0, q7 ; output[0] = step1[0] + step1[7];