@ -21,39 +21,60 @@
# include " l i b a v u t i l / a a r c h64 / a s m . S "
function f f _ h s c a l e _ 8 _ t o _ 1 5 _ n e o n , e x p o r t =1
add x10 , x4 , w6 , U X T W #1 / / f i l t e r2 = f i l t e r + f i l t e r S i z e * 2 ( x2 b e c a u s e i n t 1 6 )
1 : ldr w8 , [ x5 ] , #4 / / f i l t e r P o s [ 0 ]
ldr w9 , [ x5 ] , #4 / / f i l t e r P o s [ 1 ]
movi v4 . 4 S , #0 / / v a l s u m p a r t 1 ( f o r d s t [ 0 ] )
movi v5 . 4 S , #0 / / v a l s u m p a r t 2 ( f o r d s t [ 1 ] )
mov w7 , w6 / / f i l t e r S i z e c o u n t e r
mov x13 , x3 / / s r c p = s r c
2 : add x11 , x13 , w8 , U X T W / / s r c p + f i l t e r P o s [ 0 ]
add x12 , x13 , w9 , U X T W / / s r c p + f i l t e r P o s [ 1 ]
ld1 { v0 . 8 B } , [ x11 ] / / s r c p [ f i l t e r P o s [ 0 ] + { 0 . . 7 } ]
ld1 { v1 . 8 B } , [ x12 ] / / s r c p [ f i l t e r P o s [ 1 ] + { 0 . . 7 } ]
ld1 { v2 . 8 H } , [ x4 ] , #16 / / l o a d 8 x16 - b i t f i l t e r v a l u e s , p a r t 1
ld1 { v3 . 8 H } , [ x10 ] , #16 / / d i t t o a t f i l t e r + f i l t e r S i z e f o r p a r t 2
uxtl v0 . 8 H , v0 . 8 B / / u n p a c k p a r t 1 t o 1 6 - b i t
uxtl v1 . 8 H , v1 . 8 B / / u n p a c k p a r t 2 t o 1 6 - b i t
smull v16 . 4 S , v0 . 4 H , v2 . 4 H / / v16 . i 3 2 { 0 . . 3 } = p a r t 1 o f : s r c p [ f i l t e r P o s [ 0 ] + { 0 . . 7 } ] * f i l t e r [ { 0 . . 7 } ]
smull v18 . 4 S , v1 . 4 H , v3 . 4 H / / v18 . i 3 2 { 0 . . 3 } = p a r t 1 o f : s r c p [ f i l t e r P o s [ 1 ] + { 0 . . 7 } ] * f i l t e r [ { 0 . . 7 } ]
smull2 v17 . 4 S , v0 . 8 H , v2 . 8 H / / v17 . i 3 2 { 0 . . 3 } = p a r t 2 o f : s r c p [ f i l t e r P o s [ 0 ] + { 0 . . 7 } ] * f i l t e r [ { 0 . . 7 } ]
smull2 v19 . 4 S , v1 . 8 H , v3 . 8 H / / v19 . i 3 2 { 0 . . 3 } = p a r t 2 o f : s r c p [ f i l t e r P o s [ 1 ] + { 0 . . 7 } ] * f i l t e r [ { 0 . . 7 } ]
addp v16 . 4 S , v16 . 4 S , v17 . 4 S / / h o r i z o n t a l p a i r a d d i n g o f t h e 8 x32 - b i t m u l t i p l i e d v a l u e s f o r p a r t 1 i n t o 4 x32 - b i t
addp v18 . 4 S , v18 . 4 S , v19 . 4 S / / h o r i z o n t a l p a i r a d d i n g o f t h e 8 x32 - b i t m u l t i p l i e d v a l u e s f o r p a r t 2 i n t o 4 x32 - b i t
add v4 . 4 S , v4 . 4 S , v16 . 4 S / / u p d a t e v a l a c c u m u l a t o r f o r p a r t 1
add v5 . 4 S , v5 . 4 S , v18 . 4 S / / u p d a t e v a l a c c u m u l a t o r f o r p a r t 2
add x13 , x13 , #8 / / s r c p + = 8
subs w7 , w7 , #8 / / p r o c e s s e d 8 / f i l t e r S i z e
sbfiz x7 , x6 , #1 , #32 / / f i l t e r S i z e * 2 ( * 2 b e c a u s e i n t 1 6 )
1 : ldr w18 , [ x5 ] , #4 / / f i l t e r P o s [ i d x ]
ldr w0 , [ x5 ] , #4 / / f i l t e r P o s [ i d x + 1 ]
ldr w11 , [ x5 ] , #4 / / f i l t e r P o s [ i d x + 2 ]
ldr w9 , [ x5 ] , #4 / / f i l t e r P o s [ i d x + 3 ]
mov x16 , x4 / / f i l t e r0 = f i l t e r
add x12 , x16 , x7 / / f i l t e r1 = f i l t e r0 + f i l t e r S i z e * 2
add x13 , x12 , x7 / / f i l t e r2 = f i l t e r1 + f i l t e r S i z e * 2
add x4 , x13 , x7 / / f i l t e r3 = f i l t e r2 + f i l t e r S i z e * 2
movi v0 . 2 D , #0 / / v a l s u m p a r t 1 ( f o r d s t [ 0 ] )
movi v1 . 2 D , #0 / / v a l s u m p a r t 2 ( f o r d s t [ 1 ] )
movi v2 . 2 D , #0 / / v a l s u m p a r t 3 ( f o r d s t [ 2 ] )
movi v3 . 2 D , #0 / / v a l s u m p a r t 4 ( f o r d s t [ 3 ] )
add x17 , x3 , w18 , U X T W / / s r c p + f i l t e r P o s [ 0 ]
add x18 , x3 , w0 , U X T W / / s r c p + f i l t e r P o s [ 1 ]
add x0 , x3 , w11 , U X T W / / s r c p + f i l t e r P o s [ 2 ]
add x11 , x3 , w9 , U X T W / / s r c p + f i l t e r P o s [ 3 ]
mov w15 , w6 / / f i l t e r S i z e c o u n t e r
2 : ld1 { v4 . 8 B } , [ x17 ] , #8 / / s r c p [ f i l t e r P o s [ 0 ] + { 0 . . 7 } ]
ld1 { v5 . 8 H } , [ x16 ] , #16 / / l o a d 8 x16 - b i t f i l t e r v a l u e s , p a r t 1
ld1 { v6 . 8 B } , [ x18 ] , #8 / / s r c p [ f i l t e r P o s [ 1 ] + { 0 . . 7 } ]
ld1 { v7 . 8 H } , [ x12 ] , #16 / / l o a d 8 x16 - b i t a t f i l t e r + f i l t e r S i z e
uxtl v4 . 8 H , v4 . 8 B / / u n p a c k p a r t 1 t o 1 6 - b i t
smlal v0 . 4 S , v4 . 4 H , v5 . 4 H / / v0 a c c u m u l a t e s s r c p [ f i l t e r P o s [ 0 ] + { 0 . . 3 } ] * f i l t e r [ { 0 . . 3 } ]
smlal2 v0 . 4 S , v4 . 8 H , v5 . 8 H / / v0 a c c u m u l a t e s s r c p [ f i l t e r P o s [ 0 ] + { 4 . . 7 } ] * f i l t e r [ { 4 . . 7 } ]
ld1 { v8 . 8 B } , [ x0 ] , #8 / / s r c p [ f i l t e r P o s [ 2 ] + { 0 . . 7 } ]
ld1 { v9 . 8 H } , [ x13 ] , #16 / / l o a d 8 x16 - b i t a t f i l t e r + 2 * f i l t e r S i z e
uxtl v6 . 8 H , v6 . 8 B / / u n p a c k p a r t 2 t o 1 6 - b i t
smlal v1 . 4 S , v6 . 4 H , v7 . 4 H / / v1 a c c u m u l a t e s s r c p [ f i l t e r P o s [ 1 ] + { 0 . . 3 } ] * f i l t e r [ { 0 . . 3 } ]
uxtl v8 . 8 H , v8 . 8 B / / u n p a c k p a r t 3 t o 1 6 - b i t
smlal v2 . 4 S , v8 . 4 H , v9 . 4 H / / v2 a c c u m u l a t e s s r c p [ f i l t e r P o s [ 2 ] + { 0 . . 3 } ] * f i l t e r [ { 0 . . 3 } ]
smlal2 v2 . 4 S , V 8 . 8 H , v9 . 8 H / / v2 a c c u m u l a t e s s r c p [ f i l t e r P o s [ 2 ] + { 4 . . 7 } ] * f i l t e r [ { 4 . . 7 } ]
ld1 { v10 . 8 B } , [ x11 ] , #8 / / s r c p [ f i l t e r P o s [ 3 ] + { 0 . . 7 } ]
smlal2 v1 . 4 S , v6 . 8 H , v7 . 8 H / / v1 a c c u m u l a t e s s r c p [ f i l t e r P o s [ 1 ] + { 4 . . 7 } ] * f i l t e r [ { 4 . . 7 } ]
ld1 { v11 . 8 H } , [ x4 ] , #16 / / l o a d 8 x16 - b i t a t f i l t e r + 3 * f i l t e r S i z e
subs w15 , w15 , #8 / / j - = 8 : p r o c e s s e d 8 / f i l t e r S i z e
uxtl v10 . 8 H , v10 . 8 B / / u n p a c k p a r t 4 t o 1 6 - b i t
smlal v3 . 4 S , v10 . 4 H , v11 . 4 H / / v3 a c c u m u l a t e s s r c p [ f i l t e r P o s [ 3 ] + { 0 . . 3 } ] * f i l t e r [ { 0 . . 3 } ]
smlal2 v3 . 4 S , v10 . 8 H , v11 . 8 H / / v3 a c c u m u l a t e s s r c p [ f i l t e r P o s [ 3 ] + { 4 . . 7 } ] * f i l t e r [ { 4 . . 7 } ]
b. g t 2 b / / i n n e r l o o p i f f i l t e r S i z e n o t c o n s u m e d c o m p l e t e l y
mov x4 , x10 / / f i l t e r = f i l t e r2
add x10 , x10 , w6 , U X T W #1 / / f i l t e r2 + = f i l t e r S i z e * 2
addp v4 . 4 S , v4 . 4 S , v5 . 4 S / / h o r i z o n t a l p a i r a d d i n g o f t h e 8 x32 - b i t s u m s i n t o 4 x32 - b i t
addp v4 . 4 S , v4 . 4 S , v4 . 4 S / / h o r i z o n t a l p a i r a d d i n g o f t h e 4 x32 - b i t s u m s i n t o 2 x32 - b i t
sqshrn v4 . 4 H , v4 . 4 S , #7 / / s h i f t a n d c l i p t h e 2 x16 - b i t f i n a l v a l u e s
st1 { v4 . S } [ 0 ] , [ x1 ] , #4 / / w r i t e t o d e s t i n a t i o n
subs w2 , w2 , #2 / / d s t W - = 2
addp v0 . 4 S , v0 . 4 S , v0 . 4 S / / p a r t 0 h o r i z o n t a l p a i r a d d i n g
addp v1 . 4 S , v1 . 4 S , v1 . 4 S / / p a r t 1 h o r i z o n t a l p a i r a d d i n g
addp v2 . 4 S , v2 . 4 S , v2 . 4 S / / p a r t 2 h o r i z o n t a l p a i r a d d i n g
addp v3 . 4 S , v3 . 4 S , v3 . 4 S / / p a r t 3 h o r i z o n t a l p a i r a d d i n g
addp v0 . 4 S , v0 . 4 S , v0 . 4 S / / p a r t 0 h o r i z o n t a l p a i r a d d i n g
addp v1 . 4 S , v1 . 4 S , v1 . 4 S / / p a r t 1 h o r i z o n t a l p a i r a d d i n g
addp v2 . 4 S , v2 . 4 S , v2 . 4 S / / p a r t 2 h o r i z o n t a l p a i r a d d i n g
addp v3 . 4 S , v3 . 4 S , v3 . 4 S / / p a r t 3 h o r i z o n t a l p a i r a d d i n g
zip1 v0 . 4 S , v0 . 4 S , v1 . 4 S / / p a r t 0 1 = z i p v a l u e s f r o m p a r t 0 a n d p a r t 1
zip1 v2 . 4 S , v2 . 4 S , v3 . 4 S / / p a r t 2 3 = z i p v a l u e s f r o m p a r t 2 a n d p a r t 3
mov v0 . d [ 1 ] , v2 . d [ 0 ] / / p a r t 0 1 2 3 = z i p v a l u e s f r o m p a r t 0 1 a n d p a r t 2 3
subs w2 , w2 , #4 / / d s t W - = 4
sqshrn v0 . 4 H , v0 . 4 S , #7 / / s h i f t a n d c l i p t h e 2 x16 - b i t f i n a l v a l u e s
st1 { v0 . 4 H } , [ x1 ] , #8 / / w r i t e t o d e s t i n a t i o n p a r t 0 1 2 3
b. g t 1 b / / l o o p u n t i l e n d o f l i n e
ret
endfunc