Improve performance of IFAST iDCT by changing the order of transpose and descale steps
This commit is contained in:
@@ -837,56 +837,48 @@ asm_function jsimd_idct_ifast_neon
|
||||
vsub.s16 q13, q10, q2
|
||||
vpop {d8-d13} /* restore NEON registers */
|
||||
vadd.s16 q10, q10, q2
|
||||
/* Transpose */
|
||||
vtrn.16 q8, q9
|
||||
vsub.s16 q11, q12, q1
|
||||
vtrn.16 q14, q15
|
||||
vadd.s16 q12, q12, q1
|
||||
vtrn.16 q10, q11
|
||||
vtrn.16 q12, q13
|
||||
/* Descale and range limit */
|
||||
vmov.s16 q0, #(0x80 << 5)
|
||||
vtrn.32 q9, q11
|
||||
vtrn.32 q12, q14
|
||||
vtrn.32 q8, q10
|
||||
vtrn.32 q13, q15
|
||||
vswp d24, d17
|
||||
vswp d26, d19
|
||||
vqadd.s16 q8, q8, q0
|
||||
vswp d28, d21
|
||||
vqadd.s16 q9, q9, q0
|
||||
vswp d30, d23
|
||||
vqadd.s16 q10, q10, q0
|
||||
vqadd.s16 q11, q11, q0
|
||||
/* Descale to 8-bit and range limit */
|
||||
vmov.u8 q0, #0x80
|
||||
vqshrn.s16 d16, q8, #5
|
||||
vqshrn.s16 d17, q9, #5
|
||||
vqshrn.s16 d18, q10, #5
|
||||
vqshrn.s16 d19, q11, #5
|
||||
vqshrn.s16 d20, q12, #5
|
||||
vqshrn.s16 d21, q13, #5
|
||||
vqshrn.s16 d22, q14, #5
|
||||
vqshrn.s16 d23, q15, #5
|
||||
vadd.u8 q8, q8, q0
|
||||
vadd.u8 q9, q9, q0
|
||||
vadd.u8 q10, q10, q0
|
||||
vadd.u8 q11, q11, q0
|
||||
/* Transpose the final 8-bit samples */
|
||||
vtrn.16 q8, q9
|
||||
vtrn.16 q10, q11
|
||||
vtrn.32 q8, q10
|
||||
vtrn.32 q9, q11
|
||||
vtrn.8 d16, d17
|
||||
vtrn.8 d18, d19
|
||||
/* Store results to the output buffer */
|
||||
ldmia OUTPUT_BUF!, {TMP1, TMP2}
|
||||
add TMP1, TMP1, OUTPUT_COL
|
||||
add TMP2, TMP2, OUTPUT_COL
|
||||
vqshrun.s16 d16, q8, #5
|
||||
vqshrun.s16 d17, q9, #5
|
||||
vqshrun.s16 d18, q10, #5
|
||||
vqshrun.s16 d19, q11, #5
|
||||
vst1.8 {d16}, [TMP1]
|
||||
vqadd.s16 q12, q12, q0
|
||||
vqadd.s16 q13, q13, q0
|
||||
vst1.8 {d17}, [TMP2]
|
||||
vqadd.s16 q14, q14, q0
|
||||
vqadd.s16 q15, q15, q0
|
||||
ldmia OUTPUT_BUF!, {TMP1, TMP2}
|
||||
add TMP1, TMP1, OUTPUT_COL
|
||||
add TMP2, TMP2, OUTPUT_COL
|
||||
vst1.8 {d18}, [TMP1]
|
||||
vqshrun.s16 d20, q12, #5
|
||||
vqshrun.s16 d21, q13, #5
|
||||
vtrn.8 d20, d21
|
||||
vst1.8 {d19}, [TMP2]
|
||||
vqshrun.s16 d22, q14, #5
|
||||
ldmia OUTPUT_BUF, {TMP1, TMP2, TMP3, TMP4}
|
||||
add TMP1, TMP1, OUTPUT_COL
|
||||
add TMP2, TMP2, OUTPUT_COL
|
||||
add TMP3, TMP3, OUTPUT_COL
|
||||
add TMP4, TMP4, OUTPUT_COL
|
||||
vst1.8 {d20}, [TMP1]
|
||||
vqshrun.s16 d23, q15, #5
|
||||
vtrn.8 d22, d23
|
||||
vst1.8 {d21}, [TMP2]
|
||||
vst1.8 {d22}, [TMP3]
|
||||
vst1.8 {d23}, [TMP4]
|
||||
|
||||
Reference in New Issue
Block a user