From 610642c13082179ecaf96c6e56feeb68bfe933ac Mon Sep 17 00:00:00 2001 From: hkuang Date: Thu, 22 Aug 2013 11:02:22 -0700 Subject: [PATCH] Optimise idct4x4: rearrange the instructions a bit to improve instruction scheduling. Change-Id: I5ea881a6e419f9e8ed4b3b619406403b4de24134 --- vp9/common/arm/neon/vp9_short_idct4x4_add_neon.asm | 31 +++++++++++++--------- 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/vp9/common/arm/neon/vp9_short_idct4x4_add_neon.asm b/vp9/common/arm/neon/vp9_short_idct4x4_add_neon.asm index 199bf35..640fb93 100644 --- a/vp9/common/arm/neon/vp9_short_idct4x4_add_neon.asm +++ b/vp9/common/arm/neon/vp9_short_idct4x4_add_neon.asm @@ -45,10 +45,6 @@ ; cospi_24_64 = 6270 = 0x 187e mov r12, #0x1800 add r12, #0x7e - ; generate constant vectors - vdup.16 d20, r0; ; replicate cospi_8_64 - vdup.16 d21, r3; ; replicate cospi_16_64 - vdup.16 d22, r12; ; replicate cospi_24_64 ; transpose the input data ; 00 01 02 03 d16 @@ -57,6 +53,11 @@ ; 30 31 32 33 d19 vtrn.16 d16, d17 vtrn.16 d18, d19 + + ; generate constant vectors + vdup.16 d20, r0 ; replicate cospi_8_64 + vdup.16 d21, r3 ; replicate cospi_16_64 + ; 00 10 02 12 d16 ; 01 11 03 13 d17 ; 20 30 22 32 d18 @@ -67,20 +68,24 @@ ; 02 12 22 32 d18 ; 03 13 23 33 d19 + vdup.16 d22, r12 ; replicate cospi_24_64 + ; do the transform on transposed rows ; stage 1 + vadd.s16 d23, d16, d18 ; (input[0] + input[2]) + vsub.s16 d24, d16, d18 ; (input[0] - input[2]) + + vmull.s16 q15, d17, d22 ; input[1] * cospi_24_64 + vmull.s16 q1, d17, d20 ; input[1] * cospi_8_64 + ; (input[0] + input[2]) * cospi_16_64; ; (input[0] - input[2]) * cospi_16_64; - vadd.s16 d23, d16, d18 - vsub.s16 d24, d16, d18 vmull.s16 q13, d23, d21 vmull.s16 q14, d24, d21 ; input[1] * cospi_24_64 - input[3] * cospi_8_64; ; input[1] * cospi_8_64 + input[3] * cospi_24_64; - vmull.s16 q15, d17, d22 - vmull.s16 q1, d17, d20 vmlsl.s16 q15, d19, d20 vmlal.s16 q1, d19, d22 @@ -119,17 +124,19 @@ ; do the transform on columns ; stage 1 + vadd.s16 d23, d16, d18 ; (input[0] + input[2]) + vsub.s16 d24, d16, d18 ; (input[0] - input[2]) + + vmull.s16 q15, d17, d22 ; input[1] * cospi_24_64 + vmull.s16 q1, d17, d20 ; input[1] * cospi_8_64 + ; (input[0] + input[2]) * cospi_16_64; ; (input[0] - input[2]) * cospi_16_64; - vadd.s16 d23, d16, d18 - vsub.s16 d24, d16, d18 vmull.s16 q13, d23, d21 vmull.s16 q14, d24, d21 ; input[1] * cospi_24_64 - input[3] * cospi_8_64; ; input[1] * cospi_8_64 + input[3] * cospi_24_64; - vmull.s16 q15, d17, d22 - vmull.s16 q1, d17, d20 vmlsl.s16 q15, d19, d20 vmlal.s16 q1, d19, d22 -- 2.7.4