On 2017-01-05 09:35:37 +0200, Martin Storsjö wrote:
> This work is sponsored by, and copyright, Google.
> 
> Before:                           Cortex A53
> vp9_inv_dct_dct_16x16_sub1_add_neon:   235.3
> vp9_inv_dct_dct_32x32_sub1_add_neon:   555.1
> After:
> vp9_inv_dct_dct_16x16_sub1_add_neon:   180.2
> vp9_inv_dct_dct_32x32_sub1_add_neon:   475.3
> ---
>  libavcodec/aarch64/vp9itxfm_neon.S | 54 
> +++++++++++++++++++++++++-------------
>  1 file changed, 36 insertions(+), 18 deletions(-)
> 
> diff --git a/libavcodec/aarch64/vp9itxfm_neon.S 
> b/libavcodec/aarch64/vp9itxfm_neon.S
> index 7ce6df0..a4284e3 100644
> --- a/libavcodec/aarch64/vp9itxfm_neon.S
> +++ b/libavcodec/aarch64/vp9itxfm_neon.S
> @@ -448,16 +448,23 @@ function idct16x16_dc_add_neon
>  
>          srshr           v2.8h, v2.8h, #6
>  
> +        mov             x3, x0
>          mov             x4, #16
>  1:
>          // Loop to add the constant from v2 into all 16x16 outputs
> -        ld1             {v3.16b},  [x0]
> -        uaddw           v4.8h,  v2.8h,  v3.8b
> -        uaddw2          v5.8h,  v2.8h,  v3.16b
> -        sqxtun          v4.8b,  v4.8h
> -        sqxtun2         v4.16b, v5.8h
> -        st1             {v4.16b},  [x0], x1
> -        subs            x4,  x4,  #1
> +        subs            x4,  x4,  #2
> +        ld1             {v3.16b},  [x0], x1
> +        ld1             {v4.16b},  [x0], x1
> +        uaddw           v16.8h, v2.8h,  v3.8b
> +        uaddw2          v17.8h, v2.8h,  v3.16b
> +        uaddw           v18.8h, v2.8h,  v4.8b
> +        uaddw2          v19.8h, v2.8h,  v4.16b
> +        sqxtun          v3.8b,  v16.8h
> +        sqxtun2         v3.16b, v17.8h
> +        sqxtun          v4.8b,  v18.8h
> +        sqxtun2         v4.16b, v19.8h
> +        st1             {v3.16b},  [x3], x1
> +        st1             {v4.16b},  [x3], x1
>          b.ne            1b
>  
>          ret
> @@ -824,20 +831,31 @@ function idct32x32_dc_add_neon
>  
>          srshr           v0.8h, v2.8h, #6
>  
> +        mov             x3, x0
>          mov             x4, #32
>  1:
>          // Loop to add the constant v0 into all 32x32 outputs
> -        ld1             {v1.16b,v2.16b},  [x0]
> -        uaddw           v3.8h,  v0.8h,  v1.8b
> -        uaddw2          v4.8h,  v0.8h,  v1.16b
> -        uaddw           v5.8h,  v0.8h,  v2.8b
> -        uaddw2          v6.8h,  v0.8h,  v2.16b
> -        sqxtun          v3.8b,  v3.8h
> -        sqxtun2         v3.16b, v4.8h
> -        sqxtun          v4.8b,  v5.8h
> -        sqxtun2         v4.16b, v6.8h
> -        st1             {v3.16b,v4.16b},  [x0], x1
> -        subs            x4,  x4,  #1
> +        subs            x4,  x4,  #2
> +        ld1             {v1.16b,v2.16b},  [x0], x1
> +        uaddw           v16.8h, v0.8h,  v1.8b
> +        uaddw2          v17.8h, v0.8h,  v1.16b
> +        ld1             {v3.16b,v4.16b},  [x0], x1
> +        uaddw           v18.8h, v0.8h,  v2.8b
> +        uaddw2          v19.8h, v0.8h,  v2.16b
> +        uaddw           v20.8h, v0.8h,  v3.8b
> +        uaddw2          v21.8h, v0.8h,  v3.16b
> +        uaddw           v22.8h, v0.8h,  v4.8b
> +        uaddw2          v23.8h, v0.8h,  v4.16b
> +        sqxtun          v1.8b,  v16.8h
> +        sqxtun2         v1.16b, v17.8h
> +        sqxtun          v2.8b,  v18.8h
> +        sqxtun2         v2.16b, v19.8h
> +        sqxtun          v3.8b,  v20.8h
> +        sqxtun2         v3.16b, v21.8h
> +        st1             {v1.16b,v2.16b},  [x3], x1
> +        sqxtun          v4.8b,  v22.8h
> +        sqxtun2         v4.16b, v23.8h
> +        st1             {v3.16b,v4.16b},  [x3], x1
>          b.ne            1b
>  
>          ret

ok

Janne
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to