@ -4,6 +4,7 @@
* Copyright ( c ) 2 0 1 0 R o b C l a r k < r o b @ti.com>
* Copyright ( c ) 2 0 1 1 M a n s R u l l g a r d < m a n s @mansr.com>
* Copyright ( c ) 2 0 1 8 M a g n u s R ö ö s < m l a2 . r o o s @gmail.com>
* Copyright ( c ) 2 0 1 9 M a r t i n S t o r s j o < m a r t i n @martin.st>
*
* This f i l e i s p a r t o f F F m p e g .
*
@ -25,6 +26,62 @@
# include " l i b a v u t i l / a a r c h64 / a s m . S "
# include " n e o n . S "
function f f _ v p8 _ l u m a _ d c _ w h t _ n e o n , e x p o r t =1
ld1 { v0 . 4 h - v3 . 4 h } , [ x1 ]
movi v30 . 8 h , #0
add v4 . 4 h , v0 . 4 h , v3 . 4 h
add v6 . 4 h , v1 . 4 h , v2 . 4 h
st1 { v30 . 8 h } , [ x1 ] , #16
sub v7 . 4 h , v1 . 4 h , v2 . 4 h
sub v5 . 4 h , v0 . 4 h , v3 . 4 h
st1 { v30 . 8 h } , [ x1 ]
add v0 . 4 h , v4 . 4 h , v6 . 4 h
add v1 . 4 h , v5 . 4 h , v7 . 4 h
sub v2 . 4 h , v4 . 4 h , v6 . 4 h
sub v3 . 4 h , v5 . 4 h , v7 . 4 h
movi v16 . 4 h , #3
transpose_ 4 x4 H v0 , v1 , v2 , v3 , v4 , v5 , v6 , v7
add v0 . 4 h , v0 . 4 h , v16 . 4 h
add v4 . 4 h , v0 . 4 h , v3 . 4 h
add v6 . 4 h , v1 . 4 h , v2 . 4 h
sub v7 . 4 h , v1 . 4 h , v2 . 4 h
sub v5 . 4 h , v0 . 4 h , v3 . 4 h
add v0 . 4 h , v4 . 4 h , v6 . 4 h
add v1 . 4 h , v5 . 4 h , v7 . 4 h
sub v2 . 4 h , v4 . 4 h , v6 . 4 h
sub v3 . 4 h , v5 . 4 h , v7 . 4 h
sshr v0 . 4 h , v0 . 4 h , #3
sshr v1 . 4 h , v1 . 4 h , #3
sshr v2 . 4 h , v2 . 4 h , #3
sshr v3 . 4 h , v3 . 4 h , #3
mov x3 , #32
st1 { v0 . h } [ 0 ] , [ x0 ] , x3
st1 { v1 . h } [ 0 ] , [ x0 ] , x3
st1 { v2 . h } [ 0 ] , [ x0 ] , x3
st1 { v3 . h } [ 0 ] , [ x0 ] , x3
st1 { v0 . h } [ 1 ] , [ x0 ] , x3
st1 { v1 . h } [ 1 ] , [ x0 ] , x3
st1 { v2 . h } [ 1 ] , [ x0 ] , x3
st1 { v3 . h } [ 1 ] , [ x0 ] , x3
st1 { v0 . h } [ 2 ] , [ x0 ] , x3
st1 { v1 . h } [ 2 ] , [ x0 ] , x3
st1 { v2 . h } [ 2 ] , [ x0 ] , x3
st1 { v3 . h } [ 2 ] , [ x0 ] , x3
st1 { v0 . h } [ 3 ] , [ x0 ] , x3
st1 { v1 . h } [ 3 ] , [ x0 ] , x3
st1 { v2 . h } [ 3 ] , [ x0 ] , x3
st1 { v3 . h } [ 3 ] , [ x0 ] , x3
ret
endfunc
function f f _ v p8 _ i d c t _ a d d _ n e o n , e x p o r t =1
ld1 { v0 . 8 b - v3 . 8 b } , [ x1 ]
mov w4 , #20091
@ -102,6 +159,58 @@ function ff_vp8_idct_add_neon, export=1
ret
endfunc
function f f _ v p8 _ i d c t _ d c _ a d d4 u v _ n e o n , e x p o r t =1
movi v0 . 4 h , #0
mov x3 , #32
ld1 r { v16 . 4 h } , [ x1 ]
st1 { v0 . h } [ 0 ] , [ x1 ] , x3
ld1 r { v17 . 4 h } , [ x1 ]
st1 { v0 . h } [ 0 ] , [ x1 ] , x3
ld1 r { v18 . 4 h } , [ x1 ]
st1 { v0 . h } [ 0 ] , [ x1 ] , x3
ld1 r { v19 . 4 h } , [ x1 ]
st1 { v0 . h } [ 0 ] , [ x1 ] , x3
ins v16 . d [ 1 ] , v17 . d [ 0 ]
ins v18 . d [ 1 ] , v19 . d [ 0 ]
mov x3 , x0
srshr v16 . 8 h , v16 . 8 h , #3 / / d c > > = 3
ld1 { v0 . 8 b } , [ x0 ] , x2
srshr v18 . 8 h , v18 . 8 h , #3
ld1 { v1 . 8 b } , [ x0 ] , x2
uaddw v20 . 8 h , v16 . 8 h , v0 . 8 b
ld1 { v2 . 8 b } , [ x0 ] , x2
uaddw v0 . 8 h , v16 . 8 h , v1 . 8 b
ld1 { v3 . 8 b } , [ x0 ] , x2
uaddw v22 . 8 h , v16 . 8 h , v2 . 8 b
ld1 { v4 . 8 b } , [ x0 ] , x2
uaddw v2 . 8 h , v16 . 8 h , v3 . 8 b
ld1 { v5 . 8 b } , [ x0 ] , x2
uaddw v24 . 8 h , v18 . 8 h , v4 . 8 b
ld1 { v6 . 8 b } , [ x0 ] , x2
uaddw v4 . 8 h , v18 . 8 h , v5 . 8 b
ld1 { v7 . 8 b } , [ x0 ] , x2
uaddw v26 . 8 h , v18 . 8 h , v6 . 8 b
sqxtun v20 . 8 b , v20 . 8 h
uaddw v6 . 8 h , v18 . 8 h , v7 . 8 b
sqxtun v21 . 8 b , v0 . 8 h
sqxtun v22 . 8 b , v22 . 8 h
st1 { v20 . 8 b } , [ x3 ] , x2
sqxtun v23 . 8 b , v2 . 8 h
st1 { v21 . 8 b } , [ x3 ] , x2
sqxtun v24 . 8 b , v24 . 8 h
st1 { v22 . 8 b } , [ x3 ] , x2
sqxtun v25 . 8 b , v4 . 8 h
st1 { v23 . 8 b } , [ x3 ] , x2
sqxtun v26 . 8 b , v26 . 8 h
st1 { v24 . 8 b } , [ x3 ] , x2
sqxtun v27 . 8 b , v6 . 8 h
st1 { v25 . 8 b } , [ x3 ] , x2
st1 { v26 . 8 b } , [ x3 ] , x2
st1 { v27 . 8 b } , [ x3 ] , x2
ret
endfunc
function f f _ v p8 _ i d c t _ d c _ a d d4 y _ n e o n , e x p o r t =1
movi v0 . 1 6 b , #0
mov x3 , #32