@ -420,6 +420,70 @@ function sse16_neon, export=1
ret
endfunc
function s s e 8 _ 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 v21 . 4 s , #0
movi v20 . 4 s , #0
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 . 8 b } , [ x1 ] , x3 / / L o a d p i x1 f o r f i r s t i t e r a t i o n
ld1 { v1 . 8 b } , [ x2 ] , x3 / / L o a d p i x2 f o r s e c o n d i t e r a t i o n
ld1 { v2 . 8 b } , [ x1 ] , x3 / / L o a d p i x1 f o r s e c o n d i t e r a t i o n
ld1 { v3 . 8 b } , [ x2 ] , x3 / / L o a d p i x2 f o r 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 . 8 b } , [ x1 ] , x3 / / L o a d p i x1 f o r t h i r d i t e r a t i o n
ld1 { v5 . 8 b } , [ x2 ] , x3 / / L o a d p i x2 f o r 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 v21 . 4 s , v30 . 4 h , v30 . 4 h / / M u l t i p l y l o w e r h a l f , f i r s t i t e r a t i o n
ld1 { v6 . 8 b } , [ x1 ] , x3 / / L o a d p i x1 f o r f o u r t h i t e r a t i o n
ld1 { v7 . 8 b } , [ x2 ] , x3 / / L o a d p i x2 f o r 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 v21 . 4 s , v29 . 4 h , v29 . 4 h / / M u l t i p l y l o w e r h a l f , s e c o n d i t e r a t i o n
umlal2 v20 . 4 s , v30 . 8 h , v30 . 8 h / / M u l t i p l y u p p e r h a l f , f i r s t i t e r a t i o n
uabdl v27 . 8 h , v6 . 8 b , v7 . 8 b / / A b s o l u t 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 v21 . 4 s , v28 . 4 h , v28 . 4 h / / M u l t i p l y l o w e r h a l f , t h i r d i t e r a t i o n
umlal2 v20 . 4 s , v29 . 8 h , v29 . 8 h / / M u l t i p l y u p p e r h a l f , s e c o n d i t e r a t i o n
sub w4 , w4 , #4 / / h - = 4
umlal2 v20 . 4 s , v28 . 8 h , v28 . 8 h / / M u l t i p l y u p p e r h a l f , t h i r d i t e r a t i o n
umlal v21 . 4 s , v27 . 4 h , v27 . 4 h / / M u l t i p l y l o w e r h a l f , f o u r t h i t e r a t i o n
cmp w4 , #4
umlal2 v20 . 4 s , v27 . 8 h , v27 . 8 h / / M u l t i p l y u p p e r h a l f , 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 . 8 b } , [ x1 ] , x3 / / L o a d p i x1
ld1 { v1 . 8 b } , [ x2 ] , x3 / / L o a d p i x2
subs w4 , w4 , #1
uabdl v30 . 8 h , v0 . 8 b , v1 . 8 b
umlal v21 . 4 s , v30 . 4 h , v30 . 4 h
umlal2 v20 . 4 s , v30 . 8 h , v30 . 8 h
b. n e 2 b
3 :
add v21 . 4 s , v21 . 4 s , v20 . 4 s / / A d d a c c u m u l a t o r v e c t o r s t o g e t h e r
uaddlv d17 , v21 . 4 s / / A d d u p v e c t o r
fmov w0 , s17
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