@ -344,3 +344,59 @@ function sse16_neon, export=1
ret
endfunc
function s s e 4 _ n e o n , e x p o r t =1
/ / x0 - u n u s e d
/ / x1 - p i x1
/ / x2 - p i x2
/ / x3 - s t r i d e
/ / w4 - h
movi v16 . 4 s , #0 / / c l e a r t h e r e s u l t a c c u m u l a t o r
cmp w4 , #4
b. l e 2 f
/ / make 4 i t e r a t i o n s a t o n c e
1 :
/ / res = a b s ( p i x1 [ 0 ] - p i x2 [ 0 ] )
/ / res * r e s
ld1 { v0 . s } [ 0 ] , [ x1 ] , x3 / / L o a d p i x1 , f i r s t i t e r a t i o n
ld1 { v1 . s } [ 0 ] , [ x2 ] , x3 / / L o a d p i x2 , f i r s t i t e r a t i o n
ld1 { v2 . s } [ 0 ] , [ x1 ] , x3 / / L o a d p i x1 , s e c o n d i t e r a t i o n
ld1 { v3 . s } [ 0 ] , [ x2 ] , x3 / / L o a d p i x2 , s e c o n d i t e r a t i o n
uabdl v30 . 8 h , v0 . 8 b , v1 . 8 b / / A b s o l u t e d i f f e r e n c e , f i r s t i t e r a t i o n
ld1 { v4 . s } [ 0 ] , [ x1 ] , x3 / / L o a d p i x1 , t h i r d i t e r a t i o n
ld1 { v5 . s } [ 0 ] , [ x2 ] , x3 / / L o a d p i x2 , t h i r d i t e r a t i o n
uabdl v29 . 8 h , v2 . 8 b , v3 . 8 b / / A b s o l u t e d i f f e r e n c e , s e c o n d i t e r a t i o n
umlal v16 . 4 s , v30 . 4 h , v30 . 4 h / / M u l t i p l y v e c t o r s , f i r s t i t e r a t i o n
ld1 { v6 . s } [ 0 ] , [ x1 ] , x3 / / L o a d p i x1 , f o u r t h i t e r a t i o n
ld1 { v7 . s } [ 0 ] , [ x2 ] , x3 / / L o a d p i x2 , f o u r t h i t e r a t i o n
uabdl v28 . 8 h , v4 . 8 b , v5 . 8 b / / A b s o l u t e d i f f e r e n c e , t h i r d i t e r a t i o n
umlal v16 . 4 s , v29 . 4 h , v29 . 4 h / / M u l t i p l y a n d a c c u m u l a t e , s e c o n d i t e r a t i o n
sub w4 , w4 , #4
uabdl v27 . 8 h , v6 . 8 b , v7 . 8 b / / A b s o l u e d i f f e r e n c e , f o u r t h i t e r a t i o n
umlal v16 . 4 s , v28 . 4 h , v28 . 4 h / / M u l t i p l y a n d a c c u m u l a t e , t h i r d i t e r a t i o n
cmp w4 , #4
umlal v16 . 4 s , v27 . 4 h , v27 . 4 h / / M u l t i p l y a n d a c c u m u l a t e , f o u r t h i t e r a t i o n
b. g e 1 b
cbz w4 , 3 f
/ / iterate b y o n e
2 :
ld1 { v0 . s } [ 0 ] , [ x1 ] , x3 / / L o a d p i x1
ld1 { v1 . s } [ 0 ] , [ x2 ] , x3 / / L o a d p i x2
uabdl v30 . 8 h , v0 . 8 b , v1 . 8 b
subs w4 , w4 , #1
umlal v16 . 4 s , v30 . 4 h , v30 . 4 h
b. n e 2 b
3 :
uaddlv d17 , v16 . 4 s / / A d d v e c t o r
fmov w0 , s17
ret
endfunc