@ -969,3 +969,81 @@ function nsse16_neon, export=1
ret
endfunc
function p i x _ m e d i a n _ a b s16 _ 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 { v2 . 1 6 b } , [ x1 ] , x3
ld1 { v3 . 1 6 b } , [ x2 ] , x3
movi v31 . 8 h , #0
movi v16 . 8 h , #0
ext v0 . 1 6 b , v2 . 1 6 b , v2 . 1 6 b , #1
ext v1 . 1 6 b , v3 . 1 6 b , v3 . 1 6 b , #1
usubl v28 . 8 h , v2 . 8 b , v3 . 8 b
usubl2 v27 . 8 h , v2 . 1 6 b , v3 . 1 6 b
usubl v26 . 8 h , v0 . 8 b , v1 . 8 b
usubl2 v25 . 8 h , v0 . 1 6 b , v1 . 1 6 b
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
saba v31 . 8 h , v26 . 8 h , v28 . 8 h
saba v16 . 8 h , v25 . 8 h , v27 . 8 h
mov h18 , v28 . h [ 0 ]
cmp w4 , #1
sqabs h18 , h18
movi v0 . 8 h , #0
b. l t 2 f
1 :
ld1 { v6 . 1 6 b } , [ x1 ] , x3 / / p i x1 v e c t o r f o r V ( j - 1 )
ld1 { v7 . 1 6 b } , [ x2 ] , x3 / / p i x2 v e c t o r f o r V ( j - 1 )
subs w4 , w4 , #1
ext v4 . 1 6 b , v6 . 1 6 b , v6 . 1 6 b , #1 / / p i x1 v e c t o r f o r V ( j )
ext v5 . 1 6 b , v7 . 1 6 b , v7 . 1 6 b , #1 / / p i x2 v e c t o r f o r V ( j )
/ / protected r e g i s t e r s : v30 , v29 , v28 , v27 , v26 , v25 , v24 , v23
/ / scratch r e g i s t e r s : v22 , v21 , v20 , v19 , v17
/ / To f i n d m e d i a n o f t h r e e v a l u e s , c a l c u l a t e s u m o f t h e m
/ / and s u b t r a c t m a x a n d m i n v a l u e f r o m i t .
usubl v30 . 8 h , v6 . 8 b , v7 . 8 b / / V ( j - 1 )
usubl2 v29 . 8 h , v6 . 1 6 b , v7 . 1 6 b / / V ( j - 1 )
usubl v24 . 8 h , v4 . 8 b , v5 . 8 b / / V ( j )
usubl2 v23 . 8 h , v4 . 1 6 b , v5 . 1 6 b / / V ( j )
saba v0 . 8 h , v30 . 8 h , v28 . 8 h
add v22 . 8 h , v26 . 8 h , v30 . 8 h
smin v20 . 8 h , v26 . 8 h , v30 . 8 h
add v21 . 8 h , v25 . 8 h , v29 . 8 h
smax v19 . 8 h , v26 . 8 h , v30 . 8 h
sub v22 . 8 h , v22 . 8 h , v28 . 8 h
sub v21 . 8 h , v21 . 8 h , v27 . 8 h
smin v17 . 8 h , v19 . 8 h , v22 . 8 h
smin v22 . 8 h , v25 . 8 h , v29 . 8 h
mov v28 . 1 6 b , v30 . 1 6 b
smax v20 . 8 h , v20 . 8 h , v17 . 8 h / / m e d i a n v a l u e s l o w e r h a l f
smax v19 . 8 h , v25 . 8 h , v29 . 8 h
saba v31 . 8 h , v24 . 8 h , v20 . 8 h
mov v27 . 1 6 b , v29 . 1 6 b
smin v19 . 8 h , v19 . 8 h , v21 . 8 h
mov v26 . 1 6 b , v24 . 1 6 b
smax v17 . 8 h , v22 . 8 h , v19 . 8 h / / m e d i a n v a l u e s u p p e r h a l f
mov v25 . 1 6 b , v23 . 1 6 b
saba v16 . 8 h , v23 . 8 h , v17 . 8 h
b. n e 1 b
2 :
mov h17 , v0 . h [ 0 ]
ins v16 . h [ 7 ] , w z r
add d18 , d18 , d17
add v31 . 8 h , v31 . 8 h , v16 . 8 h
uaddlv s17 , v31 . 8 h
add d18 , d18 , d17
fmov w0 , s18
ret
endfunc