@ -584,3 +584,68 @@ function sse4_neon, export=1
ret
endfunc
function v s a d16 _ n e o n , e x p o r t =1
/ / x0 u n u s e d
/ / x1 u i n t 8 _ t * p i x1
/ / x2 u i n t 8 _ t * p i x2
/ / x3 p t r d i f f _ t s t r i d e
/ / w4 i n t h
ld1 { v0 . 1 6 b } , [ x1 ] , x3 / / L o a d p i x1 [ 0 ] , f i r s t i t e r a t i o n
ld1 { v1 . 1 6 b } , [ x2 ] , x3 / / L o a d p i x2 [ 0 ] , f i r s t i t e r a t i o n
sub w4 , w4 , #1 / / w e n e e d t o m a k e h - 1 i t e r a t i o n s
movi v16 . 8 h , #0
cmp w4 , #3 / / c h e c k i f w e c a n m a k e 3 i t e r a t i o n s a t o n c e
usubl v31 . 8 h , v0 . 8 b , v1 . 8 b / / S i g n e d d i f f e r e n c e p i x1 [ 0 ] - p i x2 [ 0 ] , f i r s t i t e r a t i o n
usubl2 v30 . 8 h , v0 . 1 6 b , v1 . 1 6 b / / S i g n e d d i f f e r e n c e p i x1 [ 0 ] - p i x2 [ 0 ] , f i r s t i t e r a t i o n
b. l t 2 f
1 :
/ / abs( p i x1 [ 0 ] - p i x2 [ 0 ] - p i x1 [ 0 + s t r i d e ] + p i x2 [ 0 + s t r i d e ] )
ld1 { v0 . 1 6 b } , [ x1 ] , x3 / / L o a d p i x1 [ 0 + s t r i d e ] , f i r s t i t e r a t i o n
ld1 { v1 . 1 6 b } , [ x2 ] , x3 / / L o a d p i x2 [ 0 + s t r i d e ] , f i r s t i t e r a t i o n
ld1 { v2 . 1 6 b } , [ x1 ] , x3 / / L o a d p i x1 [ 0 + s t r i d e ] , s e c o n d i t e r a t i o n
ld1 { v3 . 1 6 b } , [ x2 ] , x3 / / L o a d p i x2 [ 0 + s t r i d e ] , s e c o n d i t e r a t i o n
usubl v29 . 8 h , v0 . 8 b , v1 . 8 b / / S i g n e d d i f f e r e n c e p i x1 [ 0 + s t r i d e ] - p i x2 [ 0 + s t r i d e ] , f i r s t i t e r a t i o n
usubl2 v28 . 8 h , v0 . 1 6 b , v1 . 1 6 b / / S i g n e d d i f f e r e n c e p i x1 [ 0 + s t r i d e ] - p i x2 [ 0 + s t r i d e ] , f i r s t i t e r a t i o n
ld1 { v4 . 1 6 b } , [ x1 ] , x3 / / L o a d p i x1 [ 0 + s t r i d e ] , t h i r d i t e r a t i o n
ld1 { v5 . 1 6 b } , [ x2 ] , x3 / / L o a d p i x2 [ 0 + s t r i d e ] , t h i r d i t e r a t i o n
usubl v27 . 8 h , v2 . 8 b , v3 . 8 b / / S i g n e d d i f f e r e n c e p i x1 [ 0 + s t r i d e ] - p i x2 [ 0 + s t r i d e ] , s e c o n d i t e r a t i o n
saba v16 . 8 h , v31 . 8 h , v29 . 8 h / / S i g n e d a b s o l u t e d i f f e r e n c e a n d a c c u m u l a t e t h e r e s u l t . f i r s t i t e r a t i o n
usubl2 v26 . 8 h , v2 . 1 6 b , v3 . 1 6 b / / S i g n e d d i f f e r e n c e p i x1 [ 0 + s t r i d e ] - p i x2 [ 0 + s t r i d e ] , s e c o n d i t e r a t i o n
saba v16 . 8 h , v30 . 8 h , v28 . 8 h / / S i g n e d a b s o l u t e d i f f e r e n c e a n d a c c u m u l a t e t h e r e s u l t . f i r s t i t e r a t i o n
usubl v25 . 8 h , v4 . 8 b , v5 . 8 b / / S i g n e d d i f f e r e n c e p i x1 [ 0 + s t r i d e ] - p i x2 [ 0 + s t r i d e ] , t h i r d i t e r a t i o n
usubl2 v24 . 8 h , v4 . 1 6 b , v5 . 1 6 b / / S i g n e d d i f f e r e n c e p i x1 [ 0 + s t r i d e ] - p i x2 [ 0 + s t r i d e ] , t h i r d i t e r a t i o n
saba v16 . 8 h , v29 . 8 h , v27 . 8 h / / S i g n e d a b s o l u t e d i f f e r e n c e a n d a c c u m u l a t e t h e r e s u l t . s e c o n d i t e r a t i o n
mov v31 . 1 6 b , v25 . 1 6 b
saba v16 . 8 h , v28 . 8 h , v26 . 8 h / / S i g n e d a b s o l u t e d i f f e r e n c e a n d a c c u m u l a t e t h e r e s u l t . s e c o n d i t e r a t i o n
sub w4 , w4 , #3 / / h - = 3
mov v30 . 1 6 b , v24 . 1 6 b
saba v16 . 8 h , v27 . 8 h , v25 . 8 h / / S i g n e d a b s o l u t e d i f f e r e n c e a n d a c c u m u l a t e t h e r e s u l t . t h i r d i t e r a t i o n
cmp w4 , #3
saba v16 . 8 h , v26 . 8 h , v24 . 8 h / / S i g n e d a b s o l u t e d i f f e r e n c e a n d a c c u m u l a t e t h e r e s u l t . t h i r d i t e r a t i o n
b. g e 1 b
cbz w4 , 3 f
2 :
ld1 { v0 . 1 6 b } , [ x1 ] , x3
ld1 { v1 . 1 6 b } , [ x2 ] , x3
subs w4 , w4 , #1
usubl v29 . 8 h , v0 . 8 b , v1 . 8 b
usubl2 v28 . 8 h , v0 . 1 6 b , v1 . 1 6 b
saba v16 . 8 h , v31 . 8 h , v29 . 8 h
mov v31 . 1 6 b , v29 . 1 6 b
saba v16 . 8 h , v30 . 8 h , v28 . 8 h
mov v30 . 1 6 b , v28 . 1 6 b
b. n e 2 b
3 :
uaddlv s17 , v16 . 8 h
fmov w0 , s17
ret
endfunc