@ -1368,3 +1368,179 @@ function ff_vc1_h_loop_filter16_neon, export=1
st2 { v2 . b , v3 . b } [ 7 ] , [ x6 ]
4 : ret
endfunc
/ / Copy a t m o s t t h e s p e c i f i e d n u m b e r o f b y t e s f r o m s o u r c e t o d e s t i n a t i o n b u f f e r ,
/ / stopping a t a m u l t i p l e o f 3 2 b y t e s , n o n e o f w h i c h a r e t h e s t a r t o f a n e s c a p e s e q u e n c e
/ / On e n t r y :
/ / x0 - > s o u r c e b u f f e r
/ / w1 = m a x n u m b e r o f b y t e s t o c o p y
/ / x2 - > d e s t i n a t i o n b u f f e r , o p t i m a l l y 8 - b y t e a l i g n e d
/ / On e x i t :
/ / w0 = n u m b e r o f b y t e s n o t c o p i e d
function f f _ v c1 _ u n e s c a p e _ b u f f e r _ h e l p e r _ n e o n , e x p o r t =1
/ / Offset b y 8 0 t o s c r e e n o u t c a s e s t h a t a r e t o o s h o r t f o r u s t o h a n d l e ,
/ / and a l s o m a k e i t e a s y t o t e s t f o r l o o p t e r m i n a t i o n , o r t o d e t e r m i n e
/ / whether w e n e e d a n o d d n u m b e r o f h a l f - i t e r a t i o n s o f t h e l o o p .
subs w1 , w1 , #80
b. m i 9 0 f
/ / Set u p u s e f u l c o n s t a n t s
movi v20 . 4 s , #3 , l s l #24
movi v21 . 4 s , #3 , l s l #16
tst w1 , #32
b. n e 1 f
ld1 { v0 . 1 6 b , v1 . 1 6 b , v2 . 1 6 b } , [ x0 ] , #48
ext v25 . 1 6 b , v0 . 1 6 b , v1 . 1 6 b , #1
ext v26 . 1 6 b , v0 . 1 6 b , v1 . 1 6 b , #2
ext v27 . 1 6 b , v0 . 1 6 b , v1 . 1 6 b , #3
ext v29 . 1 6 b , v1 . 1 6 b , v2 . 1 6 b , #1
ext v30 . 1 6 b , v1 . 1 6 b , v2 . 1 6 b , #2
ext v31 . 1 6 b , v1 . 1 6 b , v2 . 1 6 b , #3
bic v24 . 1 6 b , v0 . 1 6 b , v20 . 1 6 b
bic v25 . 1 6 b , v25 . 1 6 b , v20 . 1 6 b
bic v26 . 1 6 b , v26 . 1 6 b , v20 . 1 6 b
bic v27 . 1 6 b , v27 . 1 6 b , v20 . 1 6 b
bic v28 . 1 6 b , v1 . 1 6 b , v20 . 1 6 b
bic v29 . 1 6 b , v29 . 1 6 b , v20 . 1 6 b
bic v30 . 1 6 b , v30 . 1 6 b , v20 . 1 6 b
bic v31 . 1 6 b , v31 . 1 6 b , v20 . 1 6 b
eor v24 . 1 6 b , v24 . 1 6 b , v21 . 1 6 b
eor v25 . 1 6 b , v25 . 1 6 b , v21 . 1 6 b
eor v26 . 1 6 b , v26 . 1 6 b , v21 . 1 6 b
eor v27 . 1 6 b , v27 . 1 6 b , v21 . 1 6 b
eor v28 . 1 6 b , v28 . 1 6 b , v21 . 1 6 b
eor v29 . 1 6 b , v29 . 1 6 b , v21 . 1 6 b
eor v30 . 1 6 b , v30 . 1 6 b , v21 . 1 6 b
eor v31 . 1 6 b , v31 . 1 6 b , v21 . 1 6 b
cmeq v24 . 4 s , v24 . 4 s , #0
cmeq v25 . 4 s , v25 . 4 s , #0
cmeq v26 . 4 s , v26 . 4 s , #0
cmeq v27 . 4 s , v27 . 4 s , #0
add w1 , w1 , #32
b 3 f
1 : ld1 { v3 . 1 6 b , v4 . 1 6 b , v5 . 1 6 b } , [ x0 ] , #48
ext v25 . 1 6 b , v3 . 1 6 b , v4 . 1 6 b , #1
ext v26 . 1 6 b , v3 . 1 6 b , v4 . 1 6 b , #2
ext v27 . 1 6 b , v3 . 1 6 b , v4 . 1 6 b , #3
ext v29 . 1 6 b , v4 . 1 6 b , v5 . 1 6 b , #1
ext v30 . 1 6 b , v4 . 1 6 b , v5 . 1 6 b , #2
ext v31 . 1 6 b , v4 . 1 6 b , v5 . 1 6 b , #3
bic v24 . 1 6 b , v3 . 1 6 b , v20 . 1 6 b
bic v25 . 1 6 b , v25 . 1 6 b , v20 . 1 6 b
bic v26 . 1 6 b , v26 . 1 6 b , v20 . 1 6 b
bic v27 . 1 6 b , v27 . 1 6 b , v20 . 1 6 b
bic v28 . 1 6 b , v4 . 1 6 b , v20 . 1 6 b
bic v29 . 1 6 b , v29 . 1 6 b , v20 . 1 6 b
bic v30 . 1 6 b , v30 . 1 6 b , v20 . 1 6 b
bic v31 . 1 6 b , v31 . 1 6 b , v20 . 1 6 b
eor v24 . 1 6 b , v24 . 1 6 b , v21 . 1 6 b
eor v25 . 1 6 b , v25 . 1 6 b , v21 . 1 6 b
eor v26 . 1 6 b , v26 . 1 6 b , v21 . 1 6 b
eor v27 . 1 6 b , v27 . 1 6 b , v21 . 1 6 b
eor v28 . 1 6 b , v28 . 1 6 b , v21 . 1 6 b
eor v29 . 1 6 b , v29 . 1 6 b , v21 . 1 6 b
eor v30 . 1 6 b , v30 . 1 6 b , v21 . 1 6 b
eor v31 . 1 6 b , v31 . 1 6 b , v21 . 1 6 b
cmeq v24 . 4 s , v24 . 4 s , #0
cmeq v25 . 4 s , v25 . 4 s , #0
cmeq v26 . 4 s , v26 . 4 s , #0
cmeq v27 . 4 s , v27 . 4 s , #0
/ / Drop t h r o u g h . . .
2 : mov v0 . 1 6 b , v5 . 1 6 b
ld1 { v1 . 1 6 b , v2 . 1 6 b } , [ x0 ] , #32
cmeq v28 . 4 s , v28 . 4 s , #0
cmeq v29 . 4 s , v29 . 4 s , #0
cmeq v30 . 4 s , v30 . 4 s , #0
cmeq v31 . 4 s , v31 . 4 s , #0
orr v24 . 1 6 b , v24 . 1 6 b , v25 . 1 6 b
orr v26 . 1 6 b , v26 . 1 6 b , v27 . 1 6 b
orr v28 . 1 6 b , v28 . 1 6 b , v29 . 1 6 b
orr v30 . 1 6 b , v30 . 1 6 b , v31 . 1 6 b
ext v25 . 1 6 b , v0 . 1 6 b , v1 . 1 6 b , #1
orr v22 . 1 6 b , v24 . 1 6 b , v26 . 1 6 b
ext v26 . 1 6 b , v0 . 1 6 b , v1 . 1 6 b , #2
ext v27 . 1 6 b , v0 . 1 6 b , v1 . 1 6 b , #3
ext v29 . 1 6 b , v1 . 1 6 b , v2 . 1 6 b , #1
orr v23 . 1 6 b , v28 . 1 6 b , v30 . 1 6 b
ext v30 . 1 6 b , v1 . 1 6 b , v2 . 1 6 b , #2
ext v31 . 1 6 b , v1 . 1 6 b , v2 . 1 6 b , #3
bic v24 . 1 6 b , v0 . 1 6 b , v20 . 1 6 b
bic v25 . 1 6 b , v25 . 1 6 b , v20 . 1 6 b
bic v26 . 1 6 b , v26 . 1 6 b , v20 . 1 6 b
orr v22 . 1 6 b , v22 . 1 6 b , v23 . 1 6 b
bic v27 . 1 6 b , v27 . 1 6 b , v20 . 1 6 b
bic v28 . 1 6 b , v1 . 1 6 b , v20 . 1 6 b
bic v29 . 1 6 b , v29 . 1 6 b , v20 . 1 6 b
bic v30 . 1 6 b , v30 . 1 6 b , v20 . 1 6 b
bic v31 . 1 6 b , v31 . 1 6 b , v20 . 1 6 b
addv s22 , v22 . 4 s
eor v24 . 1 6 b , v24 . 1 6 b , v21 . 1 6 b
eor v25 . 1 6 b , v25 . 1 6 b , v21 . 1 6 b
eor v26 . 1 6 b , v26 . 1 6 b , v21 . 1 6 b
eor v27 . 1 6 b , v27 . 1 6 b , v21 . 1 6 b
eor v28 . 1 6 b , v28 . 1 6 b , v21 . 1 6 b
mov w3 , v22 . s [ 0 ]
eor v29 . 1 6 b , v29 . 1 6 b , v21 . 1 6 b
eor v30 . 1 6 b , v30 . 1 6 b , v21 . 1 6 b
eor v31 . 1 6 b , v31 . 1 6 b , v21 . 1 6 b
cmeq v24 . 4 s , v24 . 4 s , #0
cmeq v25 . 4 s , v25 . 4 s , #0
cmeq v26 . 4 s , v26 . 4 s , #0
cmeq v27 . 4 s , v27 . 4 s , #0
cbnz w3 , 9 0 f
st1 { v3 . 1 6 b , v4 . 1 6 b } , [ x2 ] , #32
3 : mov v3 . 1 6 b , v2 . 1 6 b
ld1 { v4 . 1 6 b , v5 . 1 6 b } , [ x0 ] , #32
cmeq v28 . 4 s , v28 . 4 s , #0
cmeq v29 . 4 s , v29 . 4 s , #0
cmeq v30 . 4 s , v30 . 4 s , #0
cmeq v31 . 4 s , v31 . 4 s , #0
orr v24 . 1 6 b , v24 . 1 6 b , v25 . 1 6 b
orr v26 . 1 6 b , v26 . 1 6 b , v27 . 1 6 b
orr v28 . 1 6 b , v28 . 1 6 b , v29 . 1 6 b
orr v30 . 1 6 b , v30 . 1 6 b , v31 . 1 6 b
ext v25 . 1 6 b , v3 . 1 6 b , v4 . 1 6 b , #1
orr v22 . 1 6 b , v24 . 1 6 b , v26 . 1 6 b
ext v26 . 1 6 b , v3 . 1 6 b , v4 . 1 6 b , #2
ext v27 . 1 6 b , v3 . 1 6 b , v4 . 1 6 b , #3
ext v29 . 1 6 b , v4 . 1 6 b , v5 . 1 6 b , #1
orr v23 . 1 6 b , v28 . 1 6 b , v30 . 1 6 b
ext v30 . 1 6 b , v4 . 1 6 b , v5 . 1 6 b , #2
ext v31 . 1 6 b , v4 . 1 6 b , v5 . 1 6 b , #3
bic v24 . 1 6 b , v3 . 1 6 b , v20 . 1 6 b
bic v25 . 1 6 b , v25 . 1 6 b , v20 . 1 6 b
bic v26 . 1 6 b , v26 . 1 6 b , v20 . 1 6 b
orr v22 . 1 6 b , v22 . 1 6 b , v23 . 1 6 b
bic v27 . 1 6 b , v27 . 1 6 b , v20 . 1 6 b
bic v28 . 1 6 b , v4 . 1 6 b , v20 . 1 6 b
bic v29 . 1 6 b , v29 . 1 6 b , v20 . 1 6 b
bic v30 . 1 6 b , v30 . 1 6 b , v20 . 1 6 b
bic v31 . 1 6 b , v31 . 1 6 b , v20 . 1 6 b
addv s22 , v22 . 4 s
eor v24 . 1 6 b , v24 . 1 6 b , v21 . 1 6 b
eor v25 . 1 6 b , v25 . 1 6 b , v21 . 1 6 b
eor v26 . 1 6 b , v26 . 1 6 b , v21 . 1 6 b
eor v27 . 1 6 b , v27 . 1 6 b , v21 . 1 6 b
eor v28 . 1 6 b , v28 . 1 6 b , v21 . 1 6 b
mov w3 , v22 . s [ 0 ]
eor v29 . 1 6 b , v29 . 1 6 b , v21 . 1 6 b
eor v30 . 1 6 b , v30 . 1 6 b , v21 . 1 6 b
eor v31 . 1 6 b , v31 . 1 6 b , v21 . 1 6 b
cmeq v24 . 4 s , v24 . 4 s , #0
cmeq v25 . 4 s , v25 . 4 s , #0
cmeq v26 . 4 s , v26 . 4 s , #0
cmeq v27 . 4 s , v27 . 4 s , #0
cbnz w3 , 9 1 f
st1 { v0 . 1 6 b , v1 . 1 6 b } , [ x2 ] , #32
subs w1 , w1 , #64
b. p l 2 b
90 : add w0 , w1 , #80
ret
91 : sub w1 , w1 , #32
b 9 0 b
endfunc