[x264-devel] [PATCH 3/4] x264_intra_sad_x3_8x8c_neon
Måns Rullgård
mans at mansr.com
Tue Jan 31 02:01:13 CET 2012
George Stephanos <gaf.stephanos at gmail.com> writes:
> ---
> common/arm/pixel-a.S | 127 ++++++++++++++++++++++++++++++++++++++++++++++++++
> common/arm/pixel.h | 1 +
> common/pixel.c | 1 +
> 3 files changed, 129 insertions(+), 0 deletions(-)
>
> diff --git a/common/arm/pixel-a.S b/common/arm/pixel-a.S
> index ece299c..8e9b5b1 100644
> --- a/common/arm/pixel-a.S
> +++ b/common/arm/pixel-a.S
> @@ -1364,3 +1364,130 @@ function x264_intra_sad_x3_8x8_neon
> bx lr
> .endfunc
>
> +function x264_intra_sad_x3_8x8c_neon
> + push {r4, lr}
> + vmov.i8 q2, #0
> + vmov.i8 q8, #0
> + vmov.i8 q10, #0
> + vmov.i8 q11, #0
> + add r2, #8
> + sub lr, r1, #FDEC_STRIDE
> + mov r3, #FENC_STRIDE
> + vld1.8 {d0}, [lr]
> + mov r4, #FDEC_STRIDE
> + sub lr, r1, #1
> +
> + vld1.8 {d24}, [r0], r3
> + vld1.8 {d19[0]}, [lr], r4
Use a load to all lanes here,
> + vabal.u8 q2, d0, d24
> + vdup.8 d18, d19[0]
and avoid the need for a vdup here.
> + vaddw.u8 q8, d19
> + vabal.u8 q10, d18, d24
[...]
> + vadd.u16 d20, d21
> + vadd.u16 d4, d5
> + vshr.u64 d21, d20, #32
> + vshr.u64 d5, d4, #32
> + vadd.u16 d20, d21
> + vadd.u16 d4, d5
> + vshr.u64 d21, d20, #16
> + vshr.u64 d5, d4, #16
> + vmovl.u8 q3, d0
> + vadd.u16 d20, d21
> + vshr.u64 q9, q3, #32
> + vadd.u16 d4, d5
> + vadd.u16 q3, q9
> + vst1.16 {d4[0]}, [r2]
> + vshr.u64 q9, q3, #16
> + sub r2, #4
> + vadd.u16 q3, q9
VPADD
> + vst1.16 {d20[0]}, [r2]
These stores can be aligned.
> + vadd.u16 d3, d7, d22
> + vadd.u16 d0, d6, d16
> + vrshr.u16 d1, d7, #2
> + vrshr.u16 d3, #3
> + vrshr.u16 d0, #3
> + vrshr.u16 d2, d22, #2
> + vdup.8 d1, d1[0]
> + vdup.8 d3, d3[0]
> + vdup.8 d0, d0[0]
> + vdup.8 d2, d2[0]
> +
> + vmov.i8 q10, #0
> + vmov.i8 q11, #0
Drop those VMOVs and use VABDL for the first step below.
> + vext.8 d0, d0, d1, #4
> + vext.8 d1, d2, d3, #4
> +
> + vabal.u8 q11, d0, d24
> + vabal.u8 q10, d0, d25
> + vabal.u8 q11, d0, d26
> + vabal.u8 q10, d0, d27
> + vabal.u8 q11, d1, d28
> + vabal.u8 q10, d1, d29
> + vabal.u8 q11, d1, d30
> + vabal.u8 q10, d1, d31
> +
> + sub r2, #4
> + vadd.u16 q11, q10
> + vadd.u16 d22, d23
> + vshr.u64 d23, d22, #32
> + vadd.u16 d22, d23
> + vshr.u64 d23, d22, #16
> + vadd.u16 d22, d23
VPADD
> + vst1.16 {d22[0]}, [r2]
> +
> + pop {r4, pc}
> +.endfunc
--
Måns Rullgård
mans at mansr.com
More information about the x264-devel
mailing list