ref: b85367a6084c72348167516f130edfe222c1ee0c
parent: 9655c2c7a64e52a9e5fc0407de11488f84e005f6
parent: 610642c13082179ecaf96c6e56feeb68bfe933ac
author: hkuang <[email protected]>
date: Fri Aug 23 06:08:43 EDT 2013
Merge "Optimise idct4x4: rearrange the instructions a bit to improve instruction scheduling."
--- 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