@ -29,178 +29,178 @@ function ff_yuv2planeX_8_neon, export=1
/ / x5 - c o n s t u i n t 8 _ t * d i t h e r ,
/ / w6 - i n t o f f s e t
ld1 { v0 . 8 b } , [ x5 ] / / l o a d 8 x8 - b i t d i t h e r
and w6 , w6 , #7
cbz w6 , 1 f / / c h e c k i f o f f s e t t i n g p r e s e n t
ext v0 . 8 b , v0 . 8 b , v0 . 8 b , #3 / / h o n o r o f f s e t t i n g w h i c h c a n b e 0 o r 3 o n l y
1 : uxtl v0 . 8 h , v0 . 8 b / / e x t e n d d i t h e r t o 1 6 - b i t
ushll v1 . 4 s , v0 . 4 h , #12 / / e x t e n d d i t h e r t o 3 2 - b i t w i t h l e f t s h i f t b y 1 2 ( p a r t 1 )
ushll2 v2 . 4 s , v0 . 8 h , #12 / / e x t e n d d i t h e r t o 3 2 - b i t w i t h l e f t s h i f t b y 1 2 ( p a r t 2 )
cmp w1 , #8 / / i f f i l t e r S i z e = = 8 , b r a n c h t o s p e c i a l i z e d v e r s i o n
b. e q 6 f
cmp w1 , #4 / / i f f i l t e r S i z e = = 4 , b r a n c h t o s p e c i a l i z e d v e r s i o n
b. e q 8 f
cmp w1 , #2 / / i f f i l t e r S i z e = = 2 , b r a n c h t o s p e c i a l i z e d v e r s i o n
b. e q 1 0 f
ld1 { v0 . 8 b } , [ x5 ] / / l o a d 8 x8 - b i t d i t h e r
and w6 , w6 , #7
cbz w6 , 1 f / / c h e c k i f o f f s e t t i n g p r e s e n t
ext v0 . 8 b , v0 . 8 b , v0 . 8 b , #3 / / h o n o r o f f s e t t i n g w h i c h c a n b e 0 o r 3 o n l y
1 : uxtl v0 . 8 h , v0 . 8 b / / e x t e n d d i t h e r t o 1 6 - b i t
ushll v1 . 4 s , v0 . 4 h , #12 / / e x t e n d d i t h e r t o 3 2 - b i t w i t h l e f t s h i f t b y 1 2 ( p a r t 1 )
ushll2 v2 . 4 s , v0 . 8 h , #12 / / e x t e n d d i t h e r t o 3 2 - b i t w i t h l e f t s h i f t b y 1 2 ( p a r t 2 )
cmp w1 , #8 / / i f f i l t e r S i z e = = 8 , b r a n c h t o s p e c i a l i z e d v e r s i o n
b. e q 6 f
cmp w1 , #4 / / i f f i l t e r S i z e = = 4 , b r a n c h t o s p e c i a l i z e d v e r s i o n
b. e q 8 f
cmp w1 , #2 / / i f f i l t e r S i z e = = 2 , b r a n c h t o s p e c i a l i z e d v e r s i o n
b. e q 1 0 f
/ / The f i l t e r s i z e d o e s n o t m a t c h o f t h e o f s p e c i a l i z e d i m p l e m e n t a t i o n s . I t i s e i t h e r e v e n o r o d d . I f i t i s e v e n
/ / then u s e t h e f i r s t s e c t i o n b e l o w .
mov x7 , #0 / / i = 0
tbnz w1 , #0 , 4 f / / i f f i l t e r S i z e % 2 ! = 0 b r a n c h t o s p e c i a l i z e d v e r s i o n
mov x7 , #0 / / i = 0
tbnz w1 , #0 , 4 f / / i f f i l t e r S i z e % 2 ! = 0 b r a n c h t o s p e c i a l i z e d v e r s i o n
/ / fs % 2 = = 0
2 : mov v3 . 1 6 b , v1 . 1 6 b / / i n i t i a l i z e a c c u m u l a t o r p a r t 1 w i t h d i t h e r i n g v a l u e
mov v4 . 1 6 b , v2 . 1 6 b / / i n i t i a l i z e a c c u m u l a t o r p a r t 2 w i t h d i t h e r i n g v a l u e
mov w8 , w1 / / t m p f i l t e r S i z e = f i l t e r S i z e
mov x9 , x2 / / s r c p = s r c
mov x10 , x0 / / f i l t e r p = f i l t e r
3 : ldp x11 , x12 , [ x9 ] , #16 / / g e t 2 p o i n t e r s : s r c [ j ] a n d s r c [ j + 1 ]
ldr s7 , [ x10 ] , #4 / / r e a d 2 x16 - b i t c o e f f X a n d Y a t f i l t e r [ j ] a n d f i l t e r [ j + 1 ]
add x11 , x11 , x7 , l s l #1 / / & s r c [ j ] [ i ]
add x12 , x12 , x7 , l s l #1 / / & s r c [ j + 1 ] [ i ]
ld1 { v5 . 8 h } , [ x11 ] / / r e a d 8 x16 - b i t @ src[j ][i + {0..7}]: A,B,C,D,E,F,G,H
ld1 { v6 . 8 h } , [ x12 ] / / r e a d 8 x16 - b i t @ src[j+1][i + {0..7}]: I,J,K,L,M,N,O,P
smlal v3 . 4 s , v5 . 4 h , v7 . h [ 0 ] / / v a l 0 + = { A ,B ,C ,D } * X
smlal2 v4 . 4 s , v5 . 8 h , v7 . h [ 0 ] / / v a l 1 + = { E ,F ,G ,H } * X
smlal v3 . 4 s , v6 . 4 h , v7 . h [ 1 ] / / v a l 0 + = { I ,J ,K ,L } * Y
smlal2 v4 . 4 s , v6 . 8 h , v7 . h [ 1 ] / / v a l 1 + = { M ,N ,O ,P } * Y
subs w8 , w8 , #2 / / t m p f i l t e r S i z e - = 2
b. g t 3 b / / l o o p u n t i l f i l t e r S i z e c o n s u m e d
sqshrun v3 . 4 h , v3 . 4 s , #16 / / c l i p16 ( v a l 0 > > 1 6 )
sqshrun2 v3 . 8 h , v4 . 4 s , #16 / / c l i p16 ( v a l 1 > > 1 6 )
uqshrn v3 . 8 b , v3 . 8 h , #3 / / c l i p8 ( v a l > > 1 9 )
st1 { v3 . 8 b } , [ x3 ] , #8 / / w r i t e t o d e s t i n a t i o n
subs w4 , w4 , #8 / / d s t W - = 8
add x7 , x7 , #8 / / i + = 8
b. g t 2 b / / l o o p u n t i l w i d t h c o n s u m e d
2 : mov v3 . 1 6 b , v1 . 1 6 b / / i n i t i a l i z e a c c u m u l a t o r p a r t 1 w i t h d i t h e r i n g v a l u e
mov v4 . 1 6 b , v2 . 1 6 b / / i n i t i a l i z e a c c u m u l a t o r p a r t 2 w i t h d i t h e r i n g v a l u e
mov w8 , w1 / / t m p f i l t e r S i z e = f i l t e r S i z e
mov x9 , x2 / / s r c p = s r c
mov x10 , x0 / / f i l t e r p = f i l t e r
3 : ldp x11 , x12 , [ x9 ] , #16 / / g e t 2 p o i n t e r s : s r c [ j ] a n d s r c [ j + 1 ]
ldr s7 , [ x10 ] , #4 / / r e a d 2 x16 - b i t c o e f f X a n d Y a t f i l t e r [ j ] a n d f i l t e r [ j + 1 ]
add x11 , x11 , x7 , l s l #1 / / & s r c [ j ] [ i ]
add x12 , x12 , x7 , l s l #1 / / & s r c [ j + 1 ] [ i ]
ld1 { v5 . 8 h } , [ x11 ] / / r e a d 8 x16 - b i t @ src[j ][i + {0..7}]: A,B,C,D,E,F,G,H
ld1 { v6 . 8 h } , [ x12 ] / / r e a d 8 x16 - b i t @ src[j+1][i + {0..7}]: I,J,K,L,M,N,O,P
smlal v3 . 4 s , v5 . 4 h , v7 . h [ 0 ] / / v a l 0 + = { A ,B ,C ,D } * X
smlal2 v4 . 4 s , v5 . 8 h , v7 . h [ 0 ] / / v a l 1 + = { E ,F ,G ,H } * X
smlal v3 . 4 s , v6 . 4 h , v7 . h [ 1 ] / / v a l 0 + = { I ,J ,K ,L } * Y
smlal2 v4 . 4 s , v6 . 8 h , v7 . h [ 1 ] / / v a l 1 + = { M ,N ,O ,P } * Y
subs w8 , w8 , #2 / / t m p f i l t e r S i z e - = 2
b. g t 3 b / / l o o p u n t i l f i l t e r S i z e c o n s u m e d
sqshrun v3 . 4 h , v3 . 4 s , #16 / / c l i p16 ( v a l 0 > > 1 6 )
sqshrun2 v3 . 8 h , v4 . 4 s , #16 / / c l i p16 ( v a l 1 > > 1 6 )
uqshrn v3 . 8 b , v3 . 8 h , #3 / / c l i p8 ( v a l > > 1 9 )
st1 { v3 . 8 b } , [ x3 ] , #8 / / w r i t e t o d e s t i n a t i o n
subs w4 , w4 , #8 / / d s t W - = 8
add x7 , x7 , #8 / / i + = 8
b. g t 2 b / / l o o p u n t i l w i d t h c o n s u m e d
ret
/ / If f i l t e r s i z e i s o d d ( m o s t l i k e l y = = 1 ) , t h e n u s e t h i s s e c t i o n .
/ / fs % 2 ! = 0
4 : mov v3 . 1 6 b , v1 . 1 6 b / / i n i t i a l i z e a c c u m u l a t o r p a r t 1 w i t h d i t h e r i n g v a l u e
mov v4 . 1 6 b , v2 . 1 6 b / / i n i t i a l i z e a c c u m u l a t o r p a r t 2 w i t h d i t h e r i n g v a l u e
mov w8 , w1 / / t m p f i l t e r S i z e = f i l t e r S i z e
mov x9 , x2 / / s r c p = s r c
mov x10 , x0 / / f i l t e r p = f i l t e r
5 : ldr x11 , [ x9 ] , #8 / / g e t 1 p o i n t e r : s r c [ j ]
ldr h6 , [ x10 ] , #2 / / r e a d 1 1 6 b i t c o e f f X a t f i l t e r [ j ]
add x11 , x11 , x7 , l s l #1 / / & s r c [ j ] [ i ]
ld1 { v5 . 8 h } , [ x11 ] / / r e a d 8 x16 - b i t @ src[j ][i + {0..7}]: A,B,C,D,E,F,G,H
smlal v3 . 4 s , v5 . 4 h , v6 . h [ 0 ] / / v a l 0 + = { A ,B ,C ,D } * X
smlal2 v4 . 4 s , v5 . 8 h , v6 . h [ 0 ] / / v a l 1 + = { E ,F ,G ,H } * X
subs w8 , w8 , #1 / / t m p f i l t e r S i z e - = 2
b. g t 5 b / / l o o p u n t i l f i l t e r S i z e c o n s u m e d
sqshrun v3 . 4 h , v3 . 4 s , #16 / / c l i p16 ( v a l 0 > > 1 6 )
sqshrun2 v3 . 8 h , v4 . 4 s , #16 / / c l i p16 ( v a l 1 > > 1 6 )
uqshrn v3 . 8 b , v3 . 8 h , #3 / / c l i p8 ( v a l > > 1 9 )
st1 { v3 . 8 b } , [ x3 ] , #8 / / w r i t e t o d e s t i n a t i o n
subs w4 , w4 , #8 / / d s t W - = 8
add x7 , x7 , #8 / / i + = 8
b. g t 4 b / / l o o p u n t i l w i d t h c o n s u m e d
4 : mov v3 . 1 6 b , v1 . 1 6 b / / i n i t i a l i z e a c c u m u l a t o r p a r t 1 w i t h d i t h e r i n g v a l u e
mov v4 . 1 6 b , v2 . 1 6 b / / i n i t i a l i z e a c c u m u l a t o r p a r t 2 w i t h d i t h e r i n g v a l u e
mov w8 , w1 / / t m p f i l t e r S i z e = f i l t e r S i z e
mov x9 , x2 / / s r c p = s r c
mov x10 , x0 / / f i l t e r p = f i l t e r
5 : ldr x11 , [ x9 ] , #8 / / g e t 1 p o i n t e r : s r c [ j ]
ldr h6 , [ x10 ] , #2 / / r e a d 1 1 6 b i t c o e f f X a t f i l t e r [ j ]
add x11 , x11 , x7 , l s l #1 / / & s r c [ j ] [ i ]
ld1 { v5 . 8 h } , [ x11 ] / / r e a d 8 x16 - b i t @ src[j ][i + {0..7}]: A,B,C,D,E,F,G,H
smlal v3 . 4 s , v5 . 4 h , v6 . h [ 0 ] / / v a l 0 + = { A ,B ,C ,D } * X
smlal2 v4 . 4 s , v5 . 8 h , v6 . h [ 0 ] / / v a l 1 + = { E ,F ,G ,H } * X
subs w8 , w8 , #1 / / t m p f i l t e r S i z e - = 2
b. g t 5 b / / l o o p u n t i l f i l t e r S i z e c o n s u m e d
sqshrun v3 . 4 h , v3 . 4 s , #16 / / c l i p16 ( v a l 0 > > 1 6 )
sqshrun2 v3 . 8 h , v4 . 4 s , #16 / / c l i p16 ( v a l 1 > > 1 6 )
uqshrn v3 . 8 b , v3 . 8 h , #3 / / c l i p8 ( v a l > > 1 9 )
st1 { v3 . 8 b } , [ x3 ] , #8 / / w r i t e t o d e s t i n a t i o n
subs w4 , w4 , #8 / / d s t W - = 8
add x7 , x7 , #8 / / i + = 8
b. g t 4 b / / l o o p u n t i l w i d t h c o n s u m e d
ret
6 : / / fs=8
ldp x5 , x6 , [ x2 ] / / l o a d 2 p o i n t e r s : s r c [ j ] a n d s r c [ j + 1 ]
ldp x7 , x9 , [ x2 , #16 ] / / l o a d 2 p o i n t e r s : s r c [ j + 2 ] a n d s r c [ j + 3 ]
ldp x10 , x11 , [ x2 , #32 ] / / l o a d 2 p o i n t e r s : s r c [ j + 4 ] a n d s r c [ j + 5 ]
ldp x12 , x13 , [ x2 , #48 ] / / l o a d 2 p o i n t e r s : s r c [ j + 6 ] a n d s r c [ j + 7 ]
ldp x5 , x6 , [ x2 ] / / l o a d 2 p o i n t e r s : s r c [ j ] a n d s r c [ j + 1 ]
ldp x7 , x9 , [ x2 , #16 ] / / l o a d 2 p o i n t e r s : s r c [ j + 2 ] a n d s r c [ j + 3 ]
ldp x10 , x11 , [ x2 , #32 ] / / l o a d 2 p o i n t e r s : s r c [ j + 4 ] a n d s r c [ j + 5 ]
ldp x12 , x13 , [ x2 , #48 ] / / l o a d 2 p o i n t e r s : s r c [ j + 6 ] a n d s r c [ j + 7 ]
/ / load 8 x16 - b i t v a l u e s f o r f i l t e r [ j ] , w h e r e j =0 . . 7
ld1 { v6 . 8 h } , [ x0 ]
ld1 { v6 . 8 h } , [ x0 ]
7 :
mov v3 . 1 6 b , v1 . 1 6 b / / i n i t i a l i z e a c c u m u l a t o r p a r t 1 w i t h d i t h e r i n g v a l u e
mov v4 . 1 6 b , v2 . 1 6 b / / i n i t i a l i z e a c c u m u l a t o r p a r t 2 w i t h d i t h e r i n g v a l u e
ld1 { v24 . 8 h } , [ x5 ] , #16 / / l o a d 8 x16 - b i t v a l u e s f o r s r c [ j + 0 ] [ i + { 0 . . 7 } ]
ld1 { v25 . 8 h } , [ x6 ] , #16 / / l o a d 8 x16 - b i t v a l u e s f o r s r c [ j + 1 ] [ i + { 0 . . 7 } ]
ld1 { v26 . 8 h } , [ x7 ] , #16 / / l o a d 8 x16 - b i t v a l u e s f o r s r c [ j + 2 ] [ i + { 0 . . 7 } ]
ld1 { v27 . 8 h } , [ x9 ] , #16 / / l o a d 8 x16 - b i t v a l u e s f o r s r c [ j + 3 ] [ i + { 0 . . 7 } ]
ld1 { v28 . 8 h } , [ x10 ] , #16 / / l o a d 8 x16 - b i t v a l u e s f o r s r c [ j + 4 ] [ i + { 0 . . 7 } ]
ld1 { v29 . 8 h } , [ x11 ] , #16 / / l o a d 8 x16 - b i t v a l u e s f o r s r c [ j + 5 ] [ i + { 0 . . 7 } ]
ld1 { v30 . 8 h } , [ x12 ] , #16 / / l o a d 8 x16 - b i t v a l u e s f o r s r c [ j + 6 ] [ i + { 0 . . 7 } ]
ld1 { v31 . 8 h } , [ x13 ] , #16 / / l o a d 8 x16 - b i t v a l u e s f o r s r c [ j + 7 ] [ i + { 0 . . 7 } ]
smlal v3 . 4 s , v24 . 4 h , v6 . h [ 0 ] / / v a l 0 + = s r c [ 0 ] [ i + { 0 . . 3 } ] * f i l t e r [ 0 ]
smlal2 v4 . 4 s , v24 . 8 h , v6 . h [ 0 ] / / v a l 1 + = s r c [ 0 ] [ i + { 4 . . 7 } ] * f i l t e r [ 0 ]
smlal v3 . 4 s , v25 . 4 h , v6 . h [ 1 ] / / v a l 0 + = s r c [ 1 ] [ i + { 0 . . 3 } ] * f i l t e r [ 1 ]
smlal2 v4 . 4 s , v25 . 8 h , v6 . h [ 1 ] / / v a l 1 + = s r c [ 1 ] [ i + { 4 . . 7 } ] * f i l t e r [ 1 ]
smlal v3 . 4 s , v26 . 4 h , v6 . h [ 2 ] / / v a l 0 + = s r c [ 2 ] [ i + { 0 . . 3 } ] * f i l t e r [ 2 ]
smlal2 v4 . 4 s , v26 . 8 h , v6 . h [ 2 ] / / v a l 1 + = s r c [ 2 ] [ i + { 4 . . 7 } ] * f i l t e r [ 2 ]
smlal v3 . 4 s , v27 . 4 h , v6 . h [ 3 ] / / v a l 0 + = s r c [ 3 ] [ i + { 0 . . 3 } ] * f i l t e r [ 3 ]
smlal2 v4 . 4 s , v27 . 8 h , v6 . h [ 3 ] / / v a l 1 + = s r c [ 3 ] [ i + { 4 . . 7 } ] * f i l t e r [ 3 ]
smlal v3 . 4 s , v28 . 4 h , v6 . h [ 4 ] / / v a l 0 + = s r c [ 4 ] [ i + { 0 . . 3 } ] * f i l t e r [ 4 ]
smlal2 v4 . 4 s , v28 . 8 h , v6 . h [ 4 ] / / v a l 1 + = s r c [ 4 ] [ i + { 4 . . 7 } ] * f i l t e r [ 4 ]
smlal v3 . 4 s , v29 . 4 h , v6 . h [ 5 ] / / v a l 0 + = s r c [ 5 ] [ i + { 0 . . 3 } ] * f i l t e r [ 5 ]
smlal2 v4 . 4 s , v29 . 8 h , v6 . h [ 5 ] / / v a l 1 + = s r c [ 5 ] [ i + { 4 . . 7 } ] * f i l t e r [ 5 ]
smlal v3 . 4 s , v30 . 4 h , v6 . h [ 6 ] / / v a l 0 + = s r c [ 6 ] [ i + { 0 . . 3 } ] * f i l t e r [ 6 ]
smlal2 v4 . 4 s , v30 . 8 h , v6 . h [ 6 ] / / v a l 1 + = s r c [ 6 ] [ i + { 4 . . 7 } ] * f i l t e r [ 6 ]
smlal v3 . 4 s , v31 . 4 h , v6 . h [ 7 ] / / v a l 0 + = s r c [ 7 ] [ i + { 0 . . 3 } ] * f i l t e r [ 7 ]
smlal2 v4 . 4 s , v31 . 8 h , v6 . h [ 7 ] / / v a l 1 + = s r c [ 7 ] [ i + { 4 . . 7 } ] * f i l t e r [ 7 ]
sqshrun v3 . 4 h , v3 . 4 s , #16 / / c l i p16 ( v a l 0 > > 1 6 )
sqshrun2 v3 . 8 h , v4 . 4 s , #16 / / c l i p16 ( v a l 1 > > 1 6 )
uqshrn v3 . 8 b , v3 . 8 h , #3 / / c l i p8 ( v a l > > 1 9 )
subs w4 , w4 , #8 / / d s t W - = 8
st1 { v3 . 8 b } , [ x3 ] , #8 / / w r i t e t o d e s t i n a t i o n
b. g t 7 b / / l o o p u n t i l w i d t h c o n s u m e d
mov v3 . 1 6 b , v1 . 1 6 b / / i n i t i a l i z e a c c u m u l a t o r p a r t 1 w i t h d i t h e r i n g v a l u e
mov v4 . 1 6 b , v2 . 1 6 b / / i n i t i a l i z e a c c u m u l a t o r p a r t 2 w i t h d i t h e r i n g v a l u e
ld1 { v24 . 8 h } , [ x5 ] , #16 / / l o a d 8 x16 - b i t v a l u e s f o r s r c [ j + 0 ] [ i + { 0 . . 7 } ]
ld1 { v25 . 8 h } , [ x6 ] , #16 / / l o a d 8 x16 - b i t v a l u e s f o r s r c [ j + 1 ] [ i + { 0 . . 7 } ]
ld1 { v26 . 8 h } , [ x7 ] , #16 / / l o a d 8 x16 - b i t v a l u e s f o r s r c [ j + 2 ] [ i + { 0 . . 7 } ]
ld1 { v27 . 8 h } , [ x9 ] , #16 / / l o a d 8 x16 - b i t v a l u e s f o r s r c [ j + 3 ] [ i + { 0 . . 7 } ]
ld1 { v28 . 8 h } , [ x10 ] , #16 / / l o a d 8 x16 - b i t v a l u e s f o r s r c [ j + 4 ] [ i + { 0 . . 7 } ]
ld1 { v29 . 8 h } , [ x11 ] , #16 / / l o a d 8 x16 - b i t v a l u e s f o r s r c [ j + 5 ] [ i + { 0 . . 7 } ]
ld1 { v30 . 8 h } , [ x12 ] , #16 / / l o a d 8 x16 - b i t v a l u e s f o r s r c [ j + 6 ] [ i + { 0 . . 7 } ]
ld1 { v31 . 8 h } , [ x13 ] , #16 / / l o a d 8 x16 - b i t v a l u e s f o r s r c [ j + 7 ] [ i + { 0 . . 7 } ]
smlal v3 . 4 s , v24 . 4 h , v6 . h [ 0 ] / / v a l 0 + = s r c [ 0 ] [ i + { 0 . . 3 } ] * f i l t e r [ 0 ]
smlal2 v4 . 4 s , v24 . 8 h , v6 . h [ 0 ] / / v a l 1 + = s r c [ 0 ] [ i + { 4 . . 7 } ] * f i l t e r [ 0 ]
smlal v3 . 4 s , v25 . 4 h , v6 . h [ 1 ] / / v a l 0 + = s r c [ 1 ] [ i + { 0 . . 3 } ] * f i l t e r [ 1 ]
smlal2 v4 . 4 s , v25 . 8 h , v6 . h [ 1 ] / / v a l 1 + = s r c [ 1 ] [ i + { 4 . . 7 } ] * f i l t e r [ 1 ]
smlal v3 . 4 s , v26 . 4 h , v6 . h [ 2 ] / / v a l 0 + = s r c [ 2 ] [ i + { 0 . . 3 } ] * f i l t e r [ 2 ]
smlal2 v4 . 4 s , v26 . 8 h , v6 . h [ 2 ] / / v a l 1 + = s r c [ 2 ] [ i + { 4 . . 7 } ] * f i l t e r [ 2 ]
smlal v3 . 4 s , v27 . 4 h , v6 . h [ 3 ] / / v a l 0 + = s r c [ 3 ] [ i + { 0 . . 3 } ] * f i l t e r [ 3 ]
smlal2 v4 . 4 s , v27 . 8 h , v6 . h [ 3 ] / / v a l 1 + = s r c [ 3 ] [ i + { 4 . . 7 } ] * f i l t e r [ 3 ]
smlal v3 . 4 s , v28 . 4 h , v6 . h [ 4 ] / / v a l 0 + = s r c [ 4 ] [ i + { 0 . . 3 } ] * f i l t e r [ 4 ]
smlal2 v4 . 4 s , v28 . 8 h , v6 . h [ 4 ] / / v a l 1 + = s r c [ 4 ] [ i + { 4 . . 7 } ] * f i l t e r [ 4 ]
smlal v3 . 4 s , v29 . 4 h , v6 . h [ 5 ] / / v a l 0 + = s r c [ 5 ] [ i + { 0 . . 3 } ] * f i l t e r [ 5 ]
smlal2 v4 . 4 s , v29 . 8 h , v6 . h [ 5 ] / / v a l 1 + = s r c [ 5 ] [ i + { 4 . . 7 } ] * f i l t e r [ 5 ]
smlal v3 . 4 s , v30 . 4 h , v6 . h [ 6 ] / / v a l 0 + = s r c [ 6 ] [ i + { 0 . . 3 } ] * f i l t e r [ 6 ]
smlal2 v4 . 4 s , v30 . 8 h , v6 . h [ 6 ] / / v a l 1 + = s r c [ 6 ] [ i + { 4 . . 7 } ] * f i l t e r [ 6 ]
smlal v3 . 4 s , v31 . 4 h , v6 . h [ 7 ] / / v a l 0 + = s r c [ 7 ] [ i + { 0 . . 3 } ] * f i l t e r [ 7 ]
smlal2 v4 . 4 s , v31 . 8 h , v6 . h [ 7 ] / / v a l 1 + = s r c [ 7 ] [ i + { 4 . . 7 } ] * f i l t e r [ 7 ]
sqshrun v3 . 4 h , v3 . 4 s , #16 / / c l i p16 ( v a l 0 > > 1 6 )
sqshrun2 v3 . 8 h , v4 . 4 s , #16 / / c l i p16 ( v a l 1 > > 1 6 )
uqshrn v3 . 8 b , v3 . 8 h , #3 / / c l i p8 ( v a l > > 1 9 )
subs w4 , w4 , #8 / / d s t W - = 8
st1 { v3 . 8 b } , [ x3 ] , #8 / / w r i t e t o d e s t i n a t i o n
b. g t 7 b / / l o o p u n t i l w i d t h c o n s u m e d
ret
8 : / / fs=4
ldp x5 , x6 , [ x2 ] / / l o a d 2 p o i n t e r s : s r c [ j ] a n d s r c [ j + 1 ]
ldp x7 , x9 , [ x2 , #16 ] / / l o a d 2 p o i n t e r s : s r c [ j + 2 ] a n d s r c [ j + 3 ]
ldp x5 , x6 , [ x2 ] / / l o a d 2 p o i n t e r s : s r c [ j ] a n d s r c [ j + 1 ]
ldp x7 , x9 , [ x2 , #16 ] / / l o a d 2 p o i n t e r s : s r c [ j + 2 ] a n d s r c [ j + 3 ]
/ / load 4 x16 - b i t v a l u e s f o r f i l t e r [ j ] , w h e r e j =0 . . 3 a n d r e p l i c a t e d a c r o s s l a n e s
ld1 { v6 . 4 h } , [ x0 ]
ld1 { v6 . 4 h } , [ x0 ]
9 :
mov v3 . 1 6 b , v1 . 1 6 b / / i n i t i a l i z e a c c u m u l a t o r p a r t 1 w i t h d i t h e r i n g v a l u e
mov v4 . 1 6 b , v2 . 1 6 b / / i n i t i a l i z e a c c u m u l a t o r p a r t 2 w i t h d i t h e r i n g v a l u e
ld1 { v24 . 8 h } , [ x5 ] , #16 / / l o a d 8 x16 - b i t v a l u e s f o r s r c [ j + 0 ] [ i + { 0 . . 7 } ]
ld1 { v25 . 8 h } , [ x6 ] , #16 / / l o a d 8 x16 - b i t v a l u e s f o r s r c [ j + 1 ] [ i + { 0 . . 7 } ]
ld1 { v26 . 8 h } , [ x7 ] , #16 / / l o a d 8 x16 - b i t v a l u e s f o r s r c [ j + 2 ] [ i + { 0 . . 7 } ]
ld1 { v27 . 8 h } , [ x9 ] , #16 / / l o a d 8 x16 - b i t v a l u e s f o r s r c [ j + 3 ] [ i + { 0 . . 7 } ]
smlal v3 . 4 s , v24 . 4 h , v6 . h [ 0 ] / / v a l 0 + = s r c [ 0 ] [ i + { 0 . . 3 } ] * f i l t e r [ 0 ]
smlal2 v4 . 4 s , v24 . 8 h , v6 . h [ 0 ] / / v a l 1 + = s r c [ 0 ] [ i + { 4 . . 7 } ] * f i l t e r [ 0 ]
smlal v3 . 4 s , v25 . 4 h , v6 . h [ 1 ] / / v a l 0 + = s r c [ 1 ] [ i + { 0 . . 3 } ] * f i l t e r [ 1 ]
smlal2 v4 . 4 s , v25 . 8 h , v6 . h [ 1 ] / / v a l 1 + = s r c [ 1 ] [ i + { 4 . . 7 } ] * f i l t e r [ 1 ]
smlal v3 . 4 s , v26 . 4 h , v6 . h [ 2 ] / / v a l 0 + = s r c [ 2 ] [ i + { 0 . . 3 } ] * f i l t e r [ 2 ]
smlal2 v4 . 4 s , v26 . 8 h , v6 . h [ 2 ] / / v a l 1 + = s r c [ 2 ] [ i + { 4 . . 7 } ] * f i l t e r [ 2 ]
smlal v3 . 4 s , v27 . 4 h , v6 . h [ 3 ] / / v a l 0 + = s r c [ 3 ] [ i + { 0 . . 3 } ] * f i l t e r [ 3 ]
smlal2 v4 . 4 s , v27 . 8 h , v6 . h [ 3 ] / / v a l 1 + = s r c [ 3 ] [ i + { 4 . . 7 } ] * f i l t e r [ 3 ]
sqshrun v3 . 4 h , v3 . 4 s , #16 / / c l i p16 ( v a l 0 > > 1 6 )
sqshrun2 v3 . 8 h , v4 . 4 s , #16 / / c l i p16 ( v a l 1 > > 1 6 )
uqshrn v3 . 8 b , v3 . 8 h , #3 / / c l i p8 ( v a l > > 1 9 )
st1 { v3 . 8 b } , [ x3 ] , #8 / / w r i t e t o d e s t i n a t i o n
subs w4 , w4 , #8 / / d s t W - = 8
b. g t 9 b / / l o o p u n t i l w i d t h c o n s u m e d
mov v3 . 1 6 b , v1 . 1 6 b / / i n i t i a l i z e a c c u m u l a t o r p a r t 1 w i t h d i t h e r i n g v a l u e
mov v4 . 1 6 b , v2 . 1 6 b / / i n i t i a l i z e a c c u m u l a t o r p a r t 2 w i t h d i t h e r i n g v a l u e
ld1 { v24 . 8 h } , [ x5 ] , #16 / / l o a d 8 x16 - b i t v a l u e s f o r s r c [ j + 0 ] [ i + { 0 . . 7 } ]
ld1 { v25 . 8 h } , [ x6 ] , #16 / / l o a d 8 x16 - b i t v a l u e s f o r s r c [ j + 1 ] [ i + { 0 . . 7 } ]
ld1 { v26 . 8 h } , [ x7 ] , #16 / / l o a d 8 x16 - b i t v a l u e s f o r s r c [ j + 2 ] [ i + { 0 . . 7 } ]
ld1 { v27 . 8 h } , [ x9 ] , #16 / / l o a d 8 x16 - b i t v a l u e s f o r s r c [ j + 3 ] [ i + { 0 . . 7 } ]
smlal v3 . 4 s , v24 . 4 h , v6 . h [ 0 ] / / v a l 0 + = s r c [ 0 ] [ i + { 0 . . 3 } ] * f i l t e r [ 0 ]
smlal2 v4 . 4 s , v24 . 8 h , v6 . h [ 0 ] / / v a l 1 + = s r c [ 0 ] [ i + { 4 . . 7 } ] * f i l t e r [ 0 ]
smlal v3 . 4 s , v25 . 4 h , v6 . h [ 1 ] / / v a l 0 + = s r c [ 1 ] [ i + { 0 . . 3 } ] * f i l t e r [ 1 ]
smlal2 v4 . 4 s , v25 . 8 h , v6 . h [ 1 ] / / v a l 1 + = s r c [ 1 ] [ i + { 4 . . 7 } ] * f i l t e r [ 1 ]
smlal v3 . 4 s , v26 . 4 h , v6 . h [ 2 ] / / v a l 0 + = s r c [ 2 ] [ i + { 0 . . 3 } ] * f i l t e r [ 2 ]
smlal2 v4 . 4 s , v26 . 8 h , v6 . h [ 2 ] / / v a l 1 + = s r c [ 2 ] [ i + { 4 . . 7 } ] * f i l t e r [ 2 ]
smlal v3 . 4 s , v27 . 4 h , v6 . h [ 3 ] / / v a l 0 + = s r c [ 3 ] [ i + { 0 . . 3 } ] * f i l t e r [ 3 ]
smlal2 v4 . 4 s , v27 . 8 h , v6 . h [ 3 ] / / v a l 1 + = s r c [ 3 ] [ i + { 4 . . 7 } ] * f i l t e r [ 3 ]
sqshrun v3 . 4 h , v3 . 4 s , #16 / / c l i p16 ( v a l 0 > > 1 6 )
sqshrun2 v3 . 8 h , v4 . 4 s , #16 / / c l i p16 ( v a l 1 > > 1 6 )
uqshrn v3 . 8 b , v3 . 8 h , #3 / / c l i p8 ( v a l > > 1 9 )
st1 { v3 . 8 b } , [ x3 ] , #8 / / w r i t e t o d e s t i n a t i o n
subs w4 , w4 , #8 / / d s t W - = 8
b. g t 9 b / / l o o p u n t i l w i d t h c o n s u m e d
ret
10 : / / fs=2
ldp x5 , x6 , [ x2 ] / / l o a d 2 p o i n t e r s : s r c [ j ] a n d s r c [ j + 1 ]
ldp x5 , x6 , [ x2 ] / / l o a d 2 p o i n t e r s : s r c [ j ] a n d s r c [ j + 1 ]
/ / load 2 x16 - b i t v a l u e s f o r f i l t e r [ j ] , w h e r e j =0 . . 1 a n d r e p l i c a t e d a c r o s s l a n e s
ldr s6 , [ x0 ]
ldr s6 , [ x0 ]
11 :
mov v3 . 1 6 b , v1 . 1 6 b / / i n i t i a l i z e a c c u m u l a t o r p a r t 1 w i t h d i t h e r i n g v a l u e
mov v4 . 1 6 b , v2 . 1 6 b / / i n i t i a l i z e a c c u m u l a t o r p a r t 2 w i t h d i t h e r i n g v a l u e
ld1 { v24 . 8 h } , [ x5 ] , #16 / / l o a d 8 x16 - b i t v a l u e s f o r s r c [ j + 0 ] [ i + { 0 . . 7 } ]
ld1 { v25 . 8 h } , [ x6 ] , #16 / / l o a d 8 x16 - b i t v a l u e s f o r s r c [ j + 1 ] [ i + { 0 . . 7 } ]
smlal v3 . 4 s , v24 . 4 h , v6 . h [ 0 ] / / v a l 0 + = s r c [ 0 ] [ i + { 0 . . 3 } ] * f i l t e r [ 0 ]
smlal2 v4 . 4 s , v24 . 8 h , v6 . h [ 0 ] / / v a l 1 + = s r c [ 0 ] [ i + { 4 . . 7 } ] * f i l t e r [ 0 ]
smlal v3 . 4 s , v25 . 4 h , v6 . h [ 1 ] / / v a l 0 + = s r c [ 1 ] [ i + { 0 . . 3 } ] * f i l t e r [ 1 ]
smlal2 v4 . 4 s , v25 . 8 h , v6 . h [ 1 ] / / v a l 1 + = s r c [ 1 ] [ i + { 4 . . 7 } ] * f i l t e r [ 1 ]
sqshrun v3 . 4 h , v3 . 4 s , #16 / / c l i p16 ( v a l 0 > > 1 6 )
sqshrun2 v3 . 8 h , v4 . 4 s , #16 / / c l i p16 ( v a l 1 > > 1 6 )
uqshrn v3 . 8 b , v3 . 8 h , #3 / / c l i p8 ( v a l > > 1 9 )
st1 { v3 . 8 b } , [ x3 ] , #8 / / w r i t e t o d e s t i n a t i o n
subs w4 , w4 , #8 / / d s t W - = 8
b. g t 1 1 b / / l o o p u n t i l w i d t h c o n s u m e d
mov v3 . 1 6 b , v1 . 1 6 b / / i n i t i a l i z e a c c u m u l a t o r p a r t 1 w i t h d i t h e r i n g v a l u e
mov v4 . 1 6 b , v2 . 1 6 b / / i n i t i a l i z e a c c u m u l a t o r p a r t 2 w i t h d i t h e r i n g v a l u e
ld1 { v24 . 8 h } , [ x5 ] , #16 / / l o a d 8 x16 - b i t v a l u e s f o r s r c [ j + 0 ] [ i + { 0 . . 7 } ]
ld1 { v25 . 8 h } , [ x6 ] , #16 / / l o a d 8 x16 - b i t v a l u e s f o r s r c [ j + 1 ] [ i + { 0 . . 7 } ]
smlal v3 . 4 s , v24 . 4 h , v6 . h [ 0 ] / / v a l 0 + = s r c [ 0 ] [ i + { 0 . . 3 } ] * f i l t e r [ 0 ]
smlal2 v4 . 4 s , v24 . 8 h , v6 . h [ 0 ] / / v a l 1 + = s r c [ 0 ] [ i + { 4 . . 7 } ] * f i l t e r [ 0 ]
smlal v3 . 4 s , v25 . 4 h , v6 . h [ 1 ] / / v a l 0 + = s r c [ 1 ] [ i + { 0 . . 3 } ] * f i l t e r [ 1 ]
smlal2 v4 . 4 s , v25 . 8 h , v6 . h [ 1 ] / / v a l 1 + = s r c [ 1 ] [ i + { 4 . . 7 } ] * f i l t e r [ 1 ]
sqshrun v3 . 4 h , v3 . 4 s , #16 / / c l i p16 ( v a l 0 > > 1 6 )
sqshrun2 v3 . 8 h , v4 . 4 s , #16 / / c l i p16 ( v a l 1 > > 1 6 )
uqshrn v3 . 8 b , v3 . 8 h , #3 / / c l i p8 ( v a l > > 1 9 )
st1 { v3 . 8 b } , [ x3 ] , #8 / / w r i t e t o d e s t i n a t i o n
subs w4 , w4 , #8 / / d s t W - = 8
b. g t 1 1 b / / l o o p u n t i l w i d t h c o n s u m e d
ret
endfunc
@ -210,25 +210,25 @@ function ff_yuv2plane1_8_neon, export=1
/ / w2 - i n t d s t W ,
/ / x3 - c o n s t u i n t 8 _ t * d i t h e r ,
/ / w4 - i n t o f f s e t
ld1 { v0 . 8 b } , [ x3 ] / / l o a d 8 x8 - b i t d i t h e r
and w4 , w4 , #7
cbz w4 , 1 f / / c h e c k i f o f f s e t t i n g p r e s e n t
ext v0 . 8 b , v0 . 8 b , v0 . 8 b , #3 / / h o n o r o f f s e t t i n g w h i c h c a n b e 0 o r 3 o n l y
1 : uxtl v0 . 8 h , v0 . 8 b / / e x t e n d d i t h e r t o 3 2 - b i t
uxtl v1 . 4 s , v0 . 4 h
uxtl2 v2 . 4 s , v0 . 8 h
ld1 { v0 . 8 b } , [ x3 ] / / l o a d 8 x8 - b i t d i t h e r
and w4 , w4 , #7
cbz w4 , 1 f / / c h e c k i f o f f s e t t i n g p r e s e n t
ext v0 . 8 b , v0 . 8 b , v0 . 8 b , #3 / / h o n o r o f f s e t t i n g w h i c h c a n b e 0 o r 3 o n l y
1 : uxtl v0 . 8 h , v0 . 8 b / / e x t e n d d i t h e r t o 3 2 - b i t
uxtl v1 . 4 s , v0 . 4 h
uxtl2 v2 . 4 s , v0 . 8 h
2 :
ld1 { v3 . 8 h } , [ x0 ] , #16 / / r e a d 8 x16 - b i t @ src[j ][i + {0..7}]: A,B,C,D,E,F,G,H
sxtl v4 . 4 s , v3 . 4 h
sxtl2 v5 . 4 s , v3 . 8 h
add v4 . 4 s , v4 . 4 s , v1 . 4 s
add v5 . 4 s , v5 . 4 s , v2 . 4 s
sqshrun v4 . 4 h , v4 . 4 s , #6
sqshrun2 v4 . 8 h , v5 . 4 s , #6
uqshrn v3 . 8 b , v4 . 8 h , #1 / / c l i p8 ( v a l > > 7 )
subs w2 , w2 , #8 / / d s t W - = 8
st1 { v3 . 8 b } , [ x1 ] , #8 / / w r i t e t o d e s t i n a t i o n
b. g t 2 b / / l o o p u n t i l w i d t h c o n s u m e d
ld1 { v3 . 8 h } , [ x0 ] , #16 / / r e a d 8 x16 - b i t @ src[j ][i + {0..7}]: A,B,C,D,E,F,G,H
sxtl v4 . 4 s , v3 . 4 h
sxtl2 v5 . 4 s , v3 . 8 h
add v4 . 4 s , v4 . 4 s , v1 . 4 s
add v5 . 4 s , v5 . 4 s , v2 . 4 s
sqshrun v4 . 4 h , v4 . 4 s , #6
sqshrun2 v4 . 8 h , v5 . 4 s , #6
uqshrn v3 . 8 b , v4 . 8 h , #1 / / c l i p8 ( v a l > > 7 )
subs w2 , w2 , #8 / / d s t W - = 8
st1 { v3 . 8 b } , [ x1 ] , #8 / / w r i t e t o d e s t i n a t i o n
b. g t 2 b / / l o o p u n t i l w i d t h c o n s u m e d
ret
endfunc