@ -124,6 +124,17 @@ endconst
.endif
.endm
/ / Same a s d m b u t t e r f l y 0 a b o v e , b u t t r e a t i n g t h e i n p u t i n i n 2 a s z e r o ,
/ / writing t h e s a m e o u t p u t i n t o b o t h o u t 1 a n d o u t 2 .
.macro dmbutterfly0_h out1 , o u t 2 , i n 1 , i n 2 , t m p1 , t m p2 , t m p3 , t m p4 , t m p5 , t m p6
smull \ t m p1 \ ( ) . 2 d , \ i n 1 \ ( ) . 2 s , v0 . s [ 0 ]
smull2 \ t m p2 \ ( ) . 2 d , \ i n 1 \ ( ) . 4 s , v0 . s [ 0 ]
rshrn \ o u t 1 \ ( ) . 2 s , \ t m p1 \ ( ) . 2 d , #14
rshrn2 \ o u t 1 \ ( ) . 4 s , \ t m p2 \ ( ) . 2 d , #14
rshrn \ o u t 2 \ ( ) . 2 s , \ t m p1 \ ( ) . 2 d , #14
rshrn2 \ o u t 2 \ ( ) . 4 s , \ t m p2 \ ( ) . 2 d , #14
.endm
/ / out1 ,o u t 2 = i n 1 * c o e f1 - i n 2 * c o e f2
/ / out3 ,o u t 4 = i n 1 * c o e f2 + i n 2 * c o e f1
/ / out a r e 4 x . 2 d r e g i s t e r s , i n a r e 2 x . 4 s r e g i s t e r s
@ -153,6 +164,43 @@ endconst
rshrn2 \ i n o u t 2 \ ( ) . 4 s , \ t m p4 \ ( ) . 2 d , #14
.endm
/ / Same a s d m b u t t e r f l y a b o v e , b u t t r e a t i n g t h e i n p u t i n i n o u t 2 a s z e r o
.macro dmbutterfly_h1 inout1 , i n o u t 2 , c o e f1 , c o e f2 , t m p1 , t m p2 , t m p3 , t m p4
smull \ t m p1 \ ( ) . 2 d , \ i n o u t 1 \ ( ) . 2 s , \ c o e f1
smull2 \ t m p2 \ ( ) . 2 d , \ i n o u t 1 \ ( ) . 4 s , \ c o e f1
smull \ t m p3 \ ( ) . 2 d , \ i n o u t 1 \ ( ) . 2 s , \ c o e f2
smull2 \ t m p4 \ ( ) . 2 d , \ i n o u t 1 \ ( ) . 4 s , \ c o e f2
rshrn \ i n o u t 1 \ ( ) . 2 s , \ t m p1 \ ( ) . 2 d , #14
rshrn2 \ i n o u t 1 \ ( ) . 4 s , \ t m p2 \ ( ) . 2 d , #14
rshrn \ i n o u t 2 \ ( ) . 2 s , \ t m p3 \ ( ) . 2 d , #14
rshrn2 \ i n o u t 2 \ ( ) . 4 s , \ t m p4 \ ( ) . 2 d , #14
.endm
/ / Same a s d m b u t t e r f l y a b o v e , b u t t r e a t i n g t h e i n p u t i n i n o u t 1 a s z e r o
.macro dmbutterfly_h2 inout1 , i n o u t 2 , c o e f1 , c o e f2 , t m p1 , t m p2 , t m p3 , t m p4
smull \ t m p1 \ ( ) . 2 d , \ i n o u t 2 \ ( ) . 2 s , \ c o e f2
smull2 \ t m p2 \ ( ) . 2 d , \ i n o u t 2 \ ( ) . 4 s , \ c o e f2
smull \ t m p3 \ ( ) . 2 d , \ i n o u t 2 \ ( ) . 2 s , \ c o e f1
smull2 \ t m p4 \ ( ) . 2 d , \ i n o u t 2 \ ( ) . 4 s , \ c o e f1
neg \ t m p1 \ ( ) . 2 d , \ t m p1 \ ( ) . 2 d
neg \ t m p2 \ ( ) . 2 d , \ t m p2 \ ( ) . 2 d
rshrn \ i n o u t 2 \ ( ) . 2 s , \ t m p3 \ ( ) . 2 d , #14
rshrn2 \ i n o u t 2 \ ( ) . 4 s , \ t m p4 \ ( ) . 2 d , #14
rshrn \ i n o u t 1 \ ( ) . 2 s , \ t m p1 \ ( ) . 2 d , #14
rshrn2 \ i n o u t 1 \ ( ) . 4 s , \ t m p2 \ ( ) . 2 d , #14
.endm
.macro dsmull_h out1 , o u t 2 , i n , c o e f
smull \ o u t 1 \ ( ) . 2 d , \ i n \ ( ) . 2 s , \ c o e f
smull2 \ o u t 2 \ ( ) . 2 d , \ i n \ ( ) . 4 s , \ c o e f
.endm
.macro drshrn_h out, i n 1 , i n 2 , s h i f t
rshrn \ o u t \ ( ) . 2 s , \ i n 1 \ ( ) . 2 d , \ s h i f t
rshrn2 \ o u t \ ( ) . 4 s , \ i n 2 \ ( ) . 2 d , \ s h i f t
.endm
/ / out1 = i n 1 + i n 2
/ / out2 = i n 1 - i n 2
.macro butterfly_4s out1 , o u t 2 , i n 1 , i n 2
@ -710,6 +758,30 @@ function idct16x16_dc_add_neon
ret
endfunc
.macro idct16_end
butterfly_ 4 s v18 , v7 , v4 , v7 / / v18 = t 0 a , v7 = t 7 a
butterfly_ 4 s v19 , v22 , v5 , v22 / / v19 = t 1 a , v22 = t 6
butterfly_ 4 s v4 , v26 , v20 , v26 / / v4 = t 2 a , v26 = t 5
butterfly_ 4 s v5 , v6 , v28 , v6 / / v5 = t 3 a , v6 = t 4
butterfly_ 4 s v20 , v28 , v16 , v24 / / v20 = t 8 a , v28 = t 1 1 a
butterfly_ 4 s v24 , v21 , v23 , v21 / / v24 = t 9 , v21 = t 1 0
butterfly_ 4 s v23 , v27 , v25 , v27 / / v23 = t 1 4 , v27 = t 1 3
butterfly_ 4 s v25 , v29 , v29 , v17 / / v25 = t 1 5 a , v29 = t 1 2 a
dmbutterfly0 v8 , v9 , v27 , v21 , v8 , v9 , v16 , v17 , v30 , v31 / / v8 = t 1 3 a , v9 = t 1 0 a
dmbutterfly0 v28 , v27 , v29 , v28 , v21 , v29 , v16 , v17 , v30 , v31 / / v28 = t 1 2 , v27 = t 1 1
butterfly_ 4 s v16 , v31 , v18 , v25 / / v16 = o u t [ 0 ] , v31 = o u t [ 1 5 ]
butterfly_ 4 s v17 , v30 , v19 , v23 / / v17 = o u t [ 1 ] , v30 = o u t [ 1 4 ]
butterfly_ 4 s _ r v25 , v22 , v22 , v24 / / v25 = o u t [ 9 ] , v22 = o u t [ 6 ]
butterfly_ 4 s v23 , v24 , v7 , v20 / / v23 = o u t [ 7 ] , v24 = o u t [ 8 ]
butterfly_ 4 s v18 , v29 , v4 , v8 / / v18 = o u t [ 2 ] , v29 = o u t [ 1 3 ]
butterfly_ 4 s v19 , v28 , v5 , v28 / / v19 = o u t [ 3 ] , v28 = o u t [ 1 2 ]
butterfly_ 4 s v20 , v27 , v6 , v27 / / v20 = o u t [ 4 ] , v27 = o u t [ 1 1 ]
butterfly_ 4 s v21 , v26 , v26 , v9 / / v21 = o u t [ 5 ] , v26 = o u t [ 1 0 ]
ret
.endm
function i d c t 1 6
dmbutterfly0 v16 , v24 , v16 , v24 , v4 , v5 , v6 , v7 , v8 , v9 / / v16 = t 0 a , v24 = t 1 a
dmbutterfly v20 , v28 , v0 . s [ 2 ] , v0 . s [ 3 ] , v4 , v5 , v6 , v7 / / v20 = t 2 a , v28 = t 3 a
@ -732,28 +804,65 @@ function idct16
dmbutterfly0 v22 , v26 , v22 , v26 , v8 , v9 , v18 , v19 , v30 , v31 / / v22 = t 6 a , v26 = t 5 a
dmbutterfly v23 , v25 , v0 . s [ 2 ] , v0 . s [ 3 ] , v18 , v19 , v30 , v31 / / v23 = t 9 a , v25 = t 1 4 a
dmbutterfly v27 , v21 , v0 . s [ 2 ] , v0 . s [ 3 ] , v18 , v19 , v30 , v31 , n e g =1 / / v27 = t 1 3 a , v21 = t 1 0 a
idct1 6 _ e n d
endfunc
butterfly_ 4 s v18 , v7 , v4 , v7 / / v18 = t 0 a , v7 = t 7 a
butterfly_ 4 s v19 , v22 , v5 , v22 / / v19 = t 1 a , v22 = t 6
butterfly_ 4 s v4 , v26 , v20 , v26 / / v4 = t 2 a , v26 = t 5
butterfly_ 4 s v5 , v6 , v28 , v6 / / v5 = t 3 a , v6 = t 4
butterfly_ 4 s v20 , v28 , v16 , v24 / / v20 = t 8 a , v28 = t 1 1 a
butterfly_ 4 s v24 , v21 , v23 , v21 / / v24 = t 9 , v21 = t 1 0
butterfly_ 4 s v23 , v27 , v25 , v27 / / v23 = t 1 4 , v27 = t 1 3
butterfly_ 4 s v25 , v29 , v29 , v17 / / v25 = t 1 5 a , v29 = t 1 2 a
function i d c t 1 6 _ h a l f
dmbutterfly0 _ h v16 , v24 , v16 , v24 , v4 , v5 , v6 , v7 , v8 , v9 / / v16 = t 0 a , v24 = t 1 a
dmbutterfly_ h1 v20 , v28 , v0 . s [ 2 ] , v0 . s [ 3 ] , v4 , v5 , v6 , v7 / / v20 = t 2 a , v28 = t 3 a
dmbutterfly_ h1 v18 , v30 , v1 . s [ 0 ] , v1 . s [ 1 ] , v4 , v5 , v6 , v7 / / v18 = t 4 a , v30 = t 7 a
dmbutterfly_ h2 v26 , v22 , v1 . s [ 2 ] , v1 . s [ 3 ] , v4 , v5 , v6 , v7 / / v26 = t 5 a , v22 = t 6 a
dmbutterfly_ h1 v17 , v31 , v2 . s [ 0 ] , v2 . s [ 1 ] , v4 , v5 , v6 , v7 / / v17 = t 8 a , v31 = t 1 5 a
dmbutterfly_ h2 v25 , v23 , v2 . s [ 2 ] , v2 . s [ 3 ] , v4 , v5 , v6 , v7 / / v25 = t 9 a , v23 = t 1 4 a
dmbutterfly_ h1 v21 , v27 , v3 . s [ 0 ] , v3 . s [ 1 ] , v4 , v5 , v6 , v7 / / v21 = t 1 0 a , v27 = t 1 3 a
dmbutterfly_ h2 v29 , v19 , v3 . s [ 2 ] , v3 . s [ 3 ] , v4 , v5 , v6 , v7 / / v29 = t 1 1 a , v19 = t 1 2 a
dmbutterfly0 v8 , v9 , v27 , v21 , v8 , v9 , v16 , v17 , v30 , v31 / / v8 = t 1 3 a , v9 = t 1 0 a
dmbutterfly0 v28 , v27 , v29 , v28 , v21 , v29 , v16 , v17 , v30 , v31 / / v28 = t 1 2 , v27 = t 1 1
butterfly_ 4 s v4 , v28 , v16 , v28 / / v4 = t 0 , v28 = t 3
butterfly_ 4 s v5 , v20 , v24 , v20 / / v5 = t 1 , v20 = t 2
butterfly_ 4 s v6 , v26 , v18 , v26 / / v6 = t 4 , v26 = t 5
butterfly_ 4 s v7 , v22 , v30 , v22 / / v7 = t 7 , v22 = t 6
butterfly_ 4 s v16 , v25 , v17 , v25 / / v16 = t 8 , v25 = t 9
butterfly_ 4 s v24 , v21 , v29 , v21 / / v24 = t 1 1 , v21 = t 1 0
butterfly_ 4 s v17 , v27 , v19 , v27 / / v17 = t 1 2 , v27 = t 1 3
butterfly_ 4 s v29 , v23 , v31 , v23 / / v29 = t 1 5 , v23 = t 1 4
butterfly_ 4 s v16 , v31 , v18 , v25 / / v16 = o u t [ 0 ] , v31 = o u t [ 1 5 ]
butterfly_ 4 s v17 , v30 , v19 , v23 / / v17 = o u t [ 1 ] , v30 = o u t [ 1 4 ]
butterfly_ 4 s _ r v25 , v22 , v22 , v24 / / v25 = o u t [ 9 ] , v22 = o u t [ 6 ]
butterfly_ 4 s v23 , v24 , v7 , v20 / / v23 = o u t [ 7 ] , v24 = o u t [ 8 ]
butterfly_ 4 s v18 , v29 , v4 , v8 / / v18 = o u t [ 2 ] , v29 = o u t [ 1 3 ]
butterfly_ 4 s v19 , v28 , v5 , v28 / / v19 = o u t [ 3 ] , v28 = o u t [ 1 2 ]
butterfly_ 4 s v20 , v27 , v6 , v27 / / v20 = o u t [ 4 ] , v27 = o u t [ 1 1 ]
butterfly_ 4 s v21 , v26 , v26 , v9 / / v21 = o u t [ 5 ] , v26 = o u t [ 1 0 ]
ret
dmbutterfly0 v22 , v26 , v22 , v26 , v8 , v9 , v18 , v19 , v30 , v31 / / v22 = t 6 a , v26 = t 5 a
dmbutterfly v23 , v25 , v0 . s [ 2 ] , v0 . s [ 3 ] , v18 , v19 , v30 , v31 / / v23 = t 9 a , v25 = t 1 4 a
dmbutterfly v27 , v21 , v0 . s [ 2 ] , v0 . s [ 3 ] , v18 , v19 , v30 , v31 , n e g =1 / / v27 = t 1 3 a , v21 = t 1 0 a
idct1 6 _ e n d
endfunc
function i d c t 1 6 _ q u a r t e r
dsmull_ h v24 , v25 , v19 , v3 . s [ 3 ]
dsmull_ h v4 , v5 , v17 , v2 . s [ 0 ]
dsmull_ h v7 , v6 , v18 , v1 . s [ 1 ]
dsmull_ h v30 , v31 , v18 , v1 . s [ 0 ]
neg v24 . 2 d , v24 . 2 d
neg v25 . 2 d , v25 . 2 d
dsmull_ h v29 , v28 , v17 , v2 . s [ 1 ]
dsmull_ h v26 , v27 , v19 , v3 . s [ 2 ]
dsmull_ h v22 , v23 , v16 , v0 . s [ 0 ]
drshrn_ h v24 , v24 , v25 , #14
drshrn_ h v16 , v4 , v5 , #14
drshrn_ h v7 , v7 , v6 , #14
drshrn_ h v6 , v30 , v31 , #14
drshrn_ h v29 , v29 , v28 , #14
drshrn_ h v17 , v26 , v27 , #14
drshrn_ h v28 , v22 , v23 , #14
dmbutterfly_ l v20 , v21 , v22 , v23 , v17 , v24 , v0 . s [ 2 ] , v0 . s [ 3 ]
dmbutterfly_ l v18 , v19 , v30 , v31 , v29 , v16 , v0 . s [ 2 ] , v0 . s [ 3 ]
neg v22 . 2 d , v22 . 2 d
neg v23 . 2 d , v23 . 2 d
drshrn_ h v27 , v20 , v21 , #14
drshrn_ h v21 , v22 , v23 , #14
drshrn_ h v23 , v18 , v19 , #14
drshrn_ h v25 , v30 , v31 , #14
mov v4 . 1 6 b , v28 . 1 6 b
mov v5 . 1 6 b , v28 . 1 6 b
dmbutterfly0 v22 , v26 , v7 , v6 , v18 , v19 , v30 , v31
mov v20 . 1 6 b , v28 . 1 6 b
idct1 6 _ e n d
endfunc
function i a d s t 1 6
@ -1026,7 +1135,6 @@ function vp9_\txfm1\()_\txfm2\()_16x16_add_16_neon
.ifnc \ txfm1 \ ( ) _ \ t x f m 2 ,i d c t _ i d c t
movrel x11 , i a d s t 1 6 _ c o e f f s
.endif
movrel x12 , m i n _ e o b _ i d c t _ i d c t _ 1 6 , 2
.ifc \ txfm1 ,i d c t
ld1 { v0 . 8 h ,v1 . 8 h } , [ x10 ]
sxtl v2 . 4 s , v1 . 4 h
@ -1036,6 +1144,15 @@ function vp9_\txfm1\()_\txfm2\()_16x16_add_16_neon
.endif
mov x9 , #64
.ifc \ txfm1 \ ( ) _ \ t x f m 2 ,i d c t _ i d c t
cmp w3 , #10
b. l e i d c t 1 6 x16 _ q u a r t e r _ a d d _ 1 6 _ n e o n
cmp w3 , #38
b. l e i d c t 1 6 x16 _ h a l f _ a d d _ 1 6 _ n e o n
movrel x12 , m i n _ e o b _ i d c t _ i d c t _ 1 6 , 2
.endif
.irp i, 0 , 4 , 8 , 1 2
add x0 , s p , #( \ i * 64 )
.ifc \ txfm1 \ ( ) _ \ t x f m 2 ,i d c t _ i d c t
@ -1110,6 +1227,175 @@ itxfm_func16x16 iadst, idct
itxfm_ f u n c16 x16 i d c t , i a d s t
itxfm_ f u n c16 x16 i a d s t , i a d s t
function i d c t 1 6 _ 1 d _ 4 x16 _ p a s s1 _ q u a r t e r _ n e o n
mov x14 , x30
movi v4 . 4 s , #0
.irp i, 1 6 , 1 7 , 1 8 , 1 9
load_ c l e a r \ i , x2 , x9
.endr
bl i d c t 1 6 _ q u a r t e r
/ / Do f o u r 4 x4 t r a n s p o s e s . O r i g i n a l l y , v16 - v31 c o n t a i n t h e
/ / 1 6 rows. A f t e r w a r d s , v16 - v19 , v20 - v23 , v24 - v27 a n d v28 - v31
/ / contain t h e f o u r t r a n s p o s e d 4 x4 b l o c k s .
transpose_ 4 x4 s v16 , v17 , v18 , v19 , v4 , v5 , v6 , v7
transpose_ 4 x4 s v20 , v21 , v22 , v23 , v4 , v5 , v6 , v7
transpose_ 4 x4 s v24 , v25 , v26 , v27 , v4 , v5 , v6 , v7
transpose_ 4 x4 s v28 , v29 , v30 , v31 , v4 , v5 , v6 , v7
/ / Store t h e t r a n s p o s e d 4 x4 b l o c k s h o r i z o n t a l l y .
/ / The f i r s t 4 x4 b l o c k i s k e p t i n r e g i s t e r s f o r t h e s e c o n d p a s s ,
/ / store t h e r e s t i n t h e t e m p b u f f e r .
add x0 , x0 , #16
st1 { v20 . 4 s } , [ x0 ] , #16
st1 { v24 . 4 s } , [ x0 ] , #16
st1 { v28 . 4 s } , [ x0 ] , #16
add x0 , x0 , #16
st1 { v21 . 4 s } , [ x0 ] , #16
st1 { v25 . 4 s } , [ x0 ] , #16
st1 { v29 . 4 s } , [ x0 ] , #16
add x0 , x0 , #16
st1 { v22 . 4 s } , [ x0 ] , #16
st1 { v26 . 4 s } , [ x0 ] , #16
st1 { v30 . 4 s } , [ x0 ] , #16
add x0 , x0 , #16
st1 { v23 . 4 s } , [ x0 ] , #16
st1 { v27 . 4 s } , [ x0 ] , #16
st1 { v31 . 4 s } , [ x0 ] , #16
br x14
endfunc
function i d c t 1 6 _ 1 d _ 4 x16 _ p a s s2 _ q u a r t e r _ n e o n
mov x14 , x30
/ / Only l o a d t h e t o p 4 l i n e s , a n d o n l y d o i t f o r t h e l a t e r s l i c e s .
/ / For t h e f i r s t s l i c e , d16 - d19 i s k e p t i n r e g i s t e r s f r o m t h e f i r s t p a s s .
cbz x3 , 1 f
.irp i, 1 6 , 1 7 , 1 8 , 1 9
load \ i , x2 , x9
.endr
1 :
add x3 , x0 , x1
lsl x1 , x1 , #1
bl i d c t 1 6 _ q u a r t e r
dup v8 . 8 h , w13
load_ a d d _ s t o r e v16 . 4 s , v17 . 4 s , v18 . 4 s , v19 . 4 s , v20 . 4 s , v21 . 4 s , v22 . 4 s , v23 . 4 s
load_ a d d _ s t o r e v24 . 4 s , v25 . 4 s , v26 . 4 s , v27 . 4 s , v28 . 4 s , v29 . 4 s , v30 . 4 s , v31 . 4 s
br x14
endfunc
function i d c t 1 6 _ 1 d _ 4 x16 _ p a s s1 _ h a l f _ n e o n
mov x14 , x30
movi v4 . 4 s , #0
.irp i, 1 6 , 1 7 , 1 8 , 1 9 , 2 0 , 2 1 , 2 2 , 2 3
load_ c l e a r \ i , x2 , x9
.endr
bl i d c t 1 6 _ h a l f
/ / Do f o u r 4 x4 t r a n s p o s e s . O r i g i n a l l y , v16 - v31 c o n t a i n t h e
/ / 1 6 rows. A f t e r w a r d s , v16 - v19 , v20 - v23 , v24 - v27 a n d v28 - v31
/ / contain t h e f o u r t r a n s p o s e d 4 x4 b l o c k s .
transpose_ 4 x4 s v16 , v17 , v18 , v19 , v4 , v5 , v6 , v7
transpose_ 4 x4 s v20 , v21 , v22 , v23 , v4 , v5 , v6 , v7
transpose_ 4 x4 s v24 , v25 , v26 , v27 , v4 , v5 , v6 , v7
transpose_ 4 x4 s v28 , v29 , v30 , v31 , v4 , v5 , v6 , v7
/ / Store t h e t r a n s p o s e d 4 x4 b l o c k s h o r i z o n t a l l y .
cmp x1 , #4
b. e q 1 f
.irp i, 1 6 , 2 0 , 2 4 , 2 8 , 1 7 , 2 1 , 2 5 , 2 9 , 1 8 , 2 2 , 2 6 , 3 0 , 1 9 , 2 3 , 2 7 , 3 1
store \ i , x0 , #16
.endr
br x14
1 :
/ / Special c a s e : F o r t h e s e c o n d i n p u t c o l u m n ( r1 = = 4 ) ,
/ / which w o u l d b e s t o r e d a s t h e s e c o n d r o w i n t h e t e m p b u f f e r ,
/ / don' t s t o r e t h e f i r s t 4 x4 b l o c k , b u t k e e p i t i n r e g i s t e r s
/ / for t h e f i r s t s l i c e o f t h e s e c o n d p a s s ( w h e r e i t i s t h e
/ / second 4 x4 b l o c k ) .
add x0 , x0 , #16
st1 { v20 . 4 s } , [ x0 ] , #16
st1 { v24 . 4 s } , [ x0 ] , #16
st1 { v28 . 4 s } , [ x0 ] , #16
add x0 , x0 , #16
st1 { v21 . 4 s } , [ x0 ] , #16
st1 { v25 . 4 s } , [ x0 ] , #16
st1 { v29 . 4 s } , [ x0 ] , #16
add x0 , x0 , #16
st1 { v22 . 4 s } , [ x0 ] , #16
st1 { v26 . 4 s } , [ x0 ] , #16
st1 { v30 . 4 s } , [ x0 ] , #16
add x0 , x0 , #16
st1 { v23 . 4 s } , [ x0 ] , #16
st1 { v27 . 4 s } , [ x0 ] , #16
st1 { v31 . 4 s } , [ x0 ] , #16
mov v20 . 1 6 b , v16 . 1 6 b
mov v21 . 1 6 b , v17 . 1 6 b
mov v22 . 1 6 b , v18 . 1 6 b
mov v23 . 1 6 b , v19 . 1 6 b
br x14
endfunc
function i d c t 1 6 _ 1 d _ 4 x16 _ p a s s2 _ h a l f _ n e o n
mov x14 , x30
.irp i, 1 6 , 1 7 , 1 8 , 1 9
load \ i , x2 , x9
.endr
cbz x3 , 1 f
.irp i, 2 0 , 2 1 , 2 2 , 2 3
load \ i , x2 , x9
.endr
1 :
add x3 , x0 , x1
lsl x1 , x1 , #1
bl i d c t 1 6 _ h a l f
dup v8 . 8 h , w13
load_ a d d _ s t o r e v16 . 4 s , v17 . 4 s , v18 . 4 s , v19 . 4 s , v20 . 4 s , v21 . 4 s , v22 . 4 s , v23 . 4 s
load_ a d d _ s t o r e v24 . 4 s , v25 . 4 s , v26 . 4 s , v27 . 4 s , v28 . 4 s , v29 . 4 s , v30 . 4 s , v31 . 4 s
br x14
endfunc
.macro idct16_partial size
function i d c t 1 6 x16 _ \ s i z e \ ( ) _ a d d _ 1 6 _ n e o n
add x0 , s p , #( 0 * 6 4 )
mov x1 , #0
add x2 , x6 , #( 0 * 4 )
bl i d c t 1 6 _ 1 d _ 4 x16 _ p a s s1 _ \ s i z e \ ( ) _ n e o n
.ifc \ size,h a l f
add x0 , s p , #( 4 * 6 4 )
mov x1 , #4
add x2 , x6 , #( 4 * 4 )
bl i d c t 1 6 _ 1 d _ 4 x16 _ p a s s1 _ \ s i z e \ ( ) _ n e o n
.endif
.irp i, 0 , 4 , 8 , 1 2
add x0 , x4 , #( \ i * 2 )
mov x1 , x5
add x2 , s p , #( \ i * 4 )
mov x3 , #\ i
bl i d c t 1 6 _ 1 d _ 4 x16 _ p a s s2 _ \ s i z e \ ( ) _ n e o n
.endr
add s p , s p , #1024
ldp d8 , d9 , [ s p ] , 0 x10
br x15
endfunc
.endm
idct1 6 _ p a r t i a l q u a r t e r
idct1 6 _ p a r t i a l h a l f
function i d c t 3 2 x32 _ d c _ a d d _ n e o n
movrel x4 , i d c t _ c o e f f s
@ -1164,30 +1450,7 @@ function idct32x32_dc_add_neon
ret
endfunc
function i d c t 3 2 _ o d d
dmbutterfly v16 , v31 , v10 . s [ 0 ] , v10 . s [ 1 ] , v4 , v5 , v6 , v7 / / v16 = t 1 6 a , v31 = t 3 1 a
dmbutterfly v24 , v23 , v10 . s [ 2 ] , v10 . s [ 3 ] , v4 , v5 , v6 , v7 / / v24 = t 1 7 a , v23 = t 3 0 a
dmbutterfly v20 , v27 , v11 . s [ 0 ] , v11 . s [ 1 ] , v4 , v5 , v6 , v7 / / v20 = t 1 8 a , v27 = t 2 9 a
dmbutterfly v28 , v19 , v11 . s [ 2 ] , v11 . s [ 3 ] , v4 , v5 , v6 , v7 / / v28 = t 1 9 a , v19 = t 2 8 a
dmbutterfly v18 , v29 , v12 . s [ 0 ] , v12 . s [ 1 ] , v4 , v5 , v6 , v7 / / v18 = t 2 0 a , v29 = t 2 7 a
dmbutterfly v26 , v21 , v12 . s [ 2 ] , v12 . s [ 3 ] , v4 , v5 , v6 , v7 / / v26 = t 2 1 a , v21 = t 2 6 a
dmbutterfly v22 , v25 , v13 . s [ 0 ] , v13 . s [ 1 ] , v4 , v5 , v6 , v7 / / v22 = t 2 2 a , v25 = t 2 5 a
dmbutterfly v30 , v17 , v13 . s [ 2 ] , v13 . s [ 3 ] , v4 , v5 , v6 , v7 / / v30 = t 2 3 a , v17 = t 2 4 a
butterfly_ 4 s v4 , v24 , v16 , v24 / / v4 = t 1 6 , v24 = t 1 7
butterfly_ 4 s v5 , v20 , v28 , v20 / / v5 = t 1 9 , v20 = t 1 8
butterfly_ 4 s v6 , v26 , v18 , v26 / / v6 = t 2 0 , v26 = t 2 1
butterfly_ 4 s v7 , v22 , v30 , v22 / / v7 = t 2 3 , v22 = t 2 2
butterfly_ 4 s v28 , v25 , v17 , v25 / / v28 = t 2 4 , v25 = t 2 5
butterfly_ 4 s v30 , v21 , v29 , v21 / / v30 = t 2 7 , v21 = t 2 6
butterfly_ 4 s v29 , v23 , v31 , v23 / / v29 = t 3 1 , v23 = t 3 0
butterfly_ 4 s v31 , v27 , v19 , v27 / / v31 = t 2 8 , v27 = t 2 9
dmbutterfly v23 , v24 , v1 . s [ 0 ] , v1 . s [ 1 ] , v16 , v17 , v18 , v19 / / v23 = t 1 7 a , v24 = t 3 0 a
dmbutterfly v27 , v20 , v1 . s [ 0 ] , v1 . s [ 1 ] , v16 , v17 , v18 , v19 , n e g =1 / / v27 = t 2 9 a , v20 = t 1 8 a
dmbutterfly v21 , v26 , v1 . s [ 2 ] , v1 . s [ 3 ] , v16 , v17 , v18 , v19 / / v21 = t 2 1 a , v26 = t 2 6 a
dmbutterfly v25 , v22 , v1 . s [ 2 ] , v1 . s [ 3 ] , v16 , v17 , v18 , v19 , n e g =1 / / v25 = t 2 5 a , v22 = t 2 2 a
.macro idct32_end
butterfly_ 4 s v16 , v5 , v4 , v5 / / v16 = t 1 6 a , v5 = t 1 9 a
butterfly_ 4 s v17 , v20 , v23 , v20 / / v17 = t 1 7 , v20 = t 1 8
butterfly_ 4 s v18 , v6 , v7 , v6 / / v18 = t 2 3 a , v6 = t 2 0 a
@ -1216,8 +1479,105 @@ function idct32_odd
dmbutterfly0 v25 , v22 , v25 , v22 , v4 , v5 , v6 , v7 , v8 , v9 / / v25 = t 2 5 , v22 = t 2 2
dmbutterfly0 v24 , v23 , v24 , v23 , v4 , v5 , v6 , v7 , v8 , v9 / / v24 = t 2 4 a , v23 = t 2 3 a
ret
.endm
function i d c t 3 2 _ o d d
dmbutterfly v16 , v31 , v10 . s [ 0 ] , v10 . s [ 1 ] , v4 , v5 , v6 , v7 / / v16 = t 1 6 a , v31 = t 3 1 a
dmbutterfly v24 , v23 , v10 . s [ 2 ] , v10 . s [ 3 ] , v4 , v5 , v6 , v7 / / v24 = t 1 7 a , v23 = t 3 0 a
dmbutterfly v20 , v27 , v11 . s [ 0 ] , v11 . s [ 1 ] , v4 , v5 , v6 , v7 / / v20 = t 1 8 a , v27 = t 2 9 a
dmbutterfly v28 , v19 , v11 . s [ 2 ] , v11 . s [ 3 ] , v4 , v5 , v6 , v7 / / v28 = t 1 9 a , v19 = t 2 8 a
dmbutterfly v18 , v29 , v12 . s [ 0 ] , v12 . s [ 1 ] , v4 , v5 , v6 , v7 / / v18 = t 2 0 a , v29 = t 2 7 a
dmbutterfly v26 , v21 , v12 . s [ 2 ] , v12 . s [ 3 ] , v4 , v5 , v6 , v7 / / v26 = t 2 1 a , v21 = t 2 6 a
dmbutterfly v22 , v25 , v13 . s [ 0 ] , v13 . s [ 1 ] , v4 , v5 , v6 , v7 / / v22 = t 2 2 a , v25 = t 2 5 a
dmbutterfly v30 , v17 , v13 . s [ 2 ] , v13 . s [ 3 ] , v4 , v5 , v6 , v7 / / v30 = t 2 3 a , v17 = t 2 4 a
butterfly_ 4 s v4 , v24 , v16 , v24 / / v4 = t 1 6 , v24 = t 1 7
butterfly_ 4 s v5 , v20 , v28 , v20 / / v5 = t 1 9 , v20 = t 1 8
butterfly_ 4 s v6 , v26 , v18 , v26 / / v6 = t 2 0 , v26 = t 2 1
butterfly_ 4 s v7 , v22 , v30 , v22 / / v7 = t 2 3 , v22 = t 2 2
butterfly_ 4 s v28 , v25 , v17 , v25 / / v28 = t 2 4 , v25 = t 2 5
butterfly_ 4 s v30 , v21 , v29 , v21 / / v30 = t 2 7 , v21 = t 2 6
butterfly_ 4 s v29 , v23 , v31 , v23 / / v29 = t 3 1 , v23 = t 3 0
butterfly_ 4 s v31 , v27 , v19 , v27 / / v31 = t 2 8 , v27 = t 2 9
dmbutterfly v23 , v24 , v1 . s [ 0 ] , v1 . s [ 1 ] , v16 , v17 , v18 , v19 / / v23 = t 1 7 a , v24 = t 3 0 a
dmbutterfly v27 , v20 , v1 . s [ 0 ] , v1 . s [ 1 ] , v16 , v17 , v18 , v19 , n e g =1 / / v27 = t 2 9 a , v20 = t 1 8 a
dmbutterfly v21 , v26 , v1 . s [ 2 ] , v1 . s [ 3 ] , v16 , v17 , v18 , v19 / / v21 = t 2 1 a , v26 = t 2 6 a
dmbutterfly v25 , v22 , v1 . s [ 2 ] , v1 . s [ 3 ] , v16 , v17 , v18 , v19 , n e g =1 / / v25 = t 2 5 a , v22 = t 2 2 a
idct3 2 _ e n d
endfunc
function i d c t 3 2 _ o d d _ h a l f
dmbutterfly_ h1 v16 , v31 , v10 . s [ 0 ] , v10 . s [ 1 ] , v4 , v5 , v6 , v7 / / v16 = t 1 6 a , v31 = t 3 1 a
dmbutterfly_ h2 v24 , v23 , v10 . s [ 2 ] , v10 . s [ 3 ] , v4 , v5 , v6 , v7 / / v24 = t 1 7 a , v23 = t 3 0 a
dmbutterfly_ h1 v20 , v27 , v11 . s [ 0 ] , v11 . s [ 1 ] , v4 , v5 , v6 , v7 / / v20 = t 1 8 a , v27 = t 2 9 a
dmbutterfly_ h2 v28 , v19 , v11 . s [ 2 ] , v11 . s [ 3 ] , v4 , v5 , v6 , v7 / / v28 = t 1 9 a , v19 = t 2 8 a
dmbutterfly_ h1 v18 , v29 , v12 . s [ 0 ] , v12 . s [ 1 ] , v4 , v5 , v6 , v7 / / v18 = t 2 0 a , v29 = t 2 7 a
dmbutterfly_ h2 v26 , v21 , v12 . s [ 2 ] , v12 . s [ 3 ] , v4 , v5 , v6 , v7 / / v26 = t 2 1 a , v21 = t 2 6 a
dmbutterfly_ h1 v22 , v25 , v13 . s [ 0 ] , v13 . s [ 1 ] , v4 , v5 , v6 , v7 / / v22 = t 2 2 a , v25 = t 2 5 a
dmbutterfly_ h2 v30 , v17 , v13 . s [ 2 ] , v13 . s [ 3 ] , v4 , v5 , v6 , v7 / / v30 = t 2 3 a , v17 = t 2 4 a
butterfly_ 4 s v4 , v24 , v16 , v24 / / v4 = t 1 6 , v24 = t 1 7
butterfly_ 4 s v5 , v20 , v28 , v20 / / v5 = t 1 9 , v20 = t 1 8
butterfly_ 4 s v6 , v26 , v18 , v26 / / v6 = t 2 0 , v26 = t 2 1
butterfly_ 4 s v7 , v22 , v30 , v22 / / v7 = t 2 3 , v22 = t 2 2
butterfly_ 4 s v28 , v25 , v17 , v25 / / v28 = t 2 4 , v25 = t 2 5
butterfly_ 4 s v30 , v21 , v29 , v21 / / v30 = t 2 7 , v21 = t 2 6
butterfly_ 4 s v29 , v23 , v31 , v23 / / v29 = t 3 1 , v23 = t 3 0
butterfly_ 4 s v31 , v27 , v19 , v27 / / v31 = t 2 8 , v27 = t 2 9
dmbutterfly v23 , v24 , v1 . s [ 0 ] , v1 . s [ 1 ] , v16 , v17 , v18 , v19 / / v23 = t 1 7 a , v24 = t 3 0 a
dmbutterfly v27 , v20 , v1 . s [ 0 ] , v1 . s [ 1 ] , v16 , v17 , v18 , v19 , n e g =1 / / v27 = t 2 9 a , v20 = t 1 8 a
dmbutterfly v21 , v26 , v1 . s [ 2 ] , v1 . s [ 3 ] , v16 , v17 , v18 , v19 / / v21 = t 2 1 a , v26 = t 2 6 a
dmbutterfly v25 , v22 , v1 . s [ 2 ] , v1 . s [ 3 ] , v16 , v17 , v18 , v19 , n e g =1 / / v25 = t 2 5 a , v22 = t 2 2 a
idct3 2 _ e n d
endfunc
function i d c t 3 2 _ o d d _ q u a r t e r
dsmull_ h v4 , v5 , v16 , v10 . s [ 0 ]
dsmull_ h v28 , v29 , v19 , v11 . s [ 3 ]
dsmull_ h v30 , v31 , v16 , v10 . s [ 1 ]
dsmull_ h v22 , v23 , v17 , v13 . s [ 2 ]
dsmull_ h v7 , v6 , v17 , v13 . s [ 3 ]
dsmull_ h v26 , v27 , v19 , v11 . s [ 2 ]
dsmull_ h v20 , v21 , v18 , v12 . s [ 0 ]
dsmull_ h v24 , v25 , v18 , v12 . s [ 1 ]
neg v28 . 2 d , v28 . 2 d
neg v29 . 2 d , v29 . 2 d
neg v7 . 2 d , v7 . 2 d
neg v6 . 2 d , v6 . 2 d
drshrn_ h v4 , v4 , v5 , #14
drshrn_ h v5 , v28 , v29 , #14
drshrn_ h v29 , v30 , v31 , #14
drshrn_ h v28 , v22 , v23 , #14
drshrn_ h v7 , v7 , v6 , #14
drshrn_ h v31 , v26 , v27 , #14
drshrn_ h v6 , v20 , v21 , #14
drshrn_ h v30 , v24 , v25 , #14
dmbutterfly_ l v16 , v17 , v18 , v19 , v29 , v4 , v1 . s [ 0 ] , v1 . s [ 1 ]
dmbutterfly_ l v27 , v26 , v20 , v21 , v31 , v5 , v1 . s [ 0 ] , v1 . s [ 1 ]
drshrn_ h v23 , v16 , v17 , #14
drshrn_ h v24 , v18 , v19 , #14
neg v20 . 2 d , v20 . 2 d
neg v21 . 2 d , v21 . 2 d
drshrn_ h v27 , v27 , v26 , #14
drshrn_ h v20 , v20 , v21 , #14
dmbutterfly_ l v16 , v17 , v18 , v19 , v30 , v6 , v1 . s [ 2 ] , v1 . s [ 3 ]
drshrn_ h v21 , v16 , v17 , #14
drshrn_ h v26 , v18 , v19 , #14
dmbutterfly_ l v16 , v17 , v18 , v19 , v28 , v7 , v1 . s [ 2 ] , v1 . s [ 3 ]
drshrn_ h v25 , v16 , v17 , #14
neg v18 . 2 d , v18 . 2 d
neg v19 . 2 d , v19 . 2 d
drshrn_ h v22 , v18 , v19 , #14
idct3 2 _ e n d
endfunc
.macro idct32_funcs suffix
/ / Do a n 3 2 - p o i n t I D C T o f a 4 x32 s l i c e o u t o f a 3 2 x32 m a t r i x .
/ / The 3 2 - p o i n t I D C T c a n b e d e c o m p o s e d i n t o t w o 1 6 - p o i n t I D C T s ;
/ / a n o r m a l I D C T 1 6 w i t h e v e r y o t h e r i n p u t c o m p o n e n t ( t h e e v e n o n e s , w i t h
@ -1227,18 +1587,29 @@ endfunc
/ / x1 = u n u s e d
/ / x2 = s r c
/ / x9 = d o u b l e i n p u t s t r i d e
function i d c t 3 2 _ 1 d _ 4 x32 _ p a s s1 _ n e o n
function i d c t 3 2 _ 1 d _ 4 x32 _ p a s s1 \ s u f f i x \ ( ) _ n e o n
mov x14 , x30
movi v4 . 4 s , #0
/ / v1 6 = I N ( 0 ) , v17 = I N ( 2 ) . . . v31 = I N ( 3 0 )
.ifb \ suffix
.irp i, 1 6 , 1 7 , 1 8 , 1 9 , 2 0 , 2 1 , 2 2 , 2 3 , 2 4 , 2 5 , 2 6 , 2 7 , 2 8 , 2 9 , 3 0 , 3 1
ld1 { v \ i \ ( ) . 4 s } , [ x2 ]
st1 { v4 . 4 s } , [ x2 ] , x9
load_ c l e a r \ i , x2 , x9
.endr
.endif
.ifc \ suffix,_ q u a r t e r
.irp i, 1 6 , 1 7 , 1 8 , 1 9
load_ c l e a r \ i , x2 , x9
.endr
.endif
.ifc \ suffix,_ h a l f
.irp i, 1 6 , 1 7 , 1 8 , 1 9 , 2 0 , 2 1 , 2 2 , 2 3
load_ c l e a r \ i , x2 , x9
.endr
.endif
bl i d c t 1 6
bl i d c t 1 6 \ s u f f i x
/ / Do f o u r 4 x4 t r a n s p o s e s . O r i g i n a l l y , v16 - v31 c o n t a i n t h e
/ / 1 6 rows. A f t e r w a r d s , v16 - v19 , v20 - v23 , v24 - v27 a n d v28 - v31
@ -1279,17 +1650,36 @@ function idct32_1d_4x32_pass1_neon
/ / Move x2 b a c k t o t h e s t a r t o f t h e i n p u t , a n d m o v e
/ / to t h e f i r s t o d d r o w
.ifb \ suffix
sub x2 , x2 , x9 , l s l #4
.endif
.ifc \ suffix,_ q u a r t e r
sub x2 , x2 , x9 , l s l #2
.endif
.ifc \ suffix,_ h a l f
sub x2 , x2 , x9 , l s l #3
.endif
add x2 , x2 , #128
movi v4 . 4 s , #0
/ / v1 6 = I N ( 1 ) , v17 = I N ( 3 ) . . . v31 = I N ( 3 1 )
.ifb \ suffix
.irp i, 1 6 , 1 7 , 1 8 , 1 9 , 2 0 , 2 1 , 2 2 , 2 3 , 2 4 , 2 5 , 2 6 , 2 7 , 2 8 , 2 9 , 3 0 , 3 1
ld1 { v \ i \ ( ) . 4 s } , [ x2 ]
st1 { v4 . 4 s } , [ x2 ] , x9
load_ c l e a r \ i , x2 , x9
.endr
.endif
.ifc \ suffix,_ q u a r t e r
.irp i, 1 6 , 1 7 , 1 8 , 1 9
load_ c l e a r \ i , x2 , x9
.endr
.endif
.ifc \ suffix,_ h a l f
.irp i, 1 6 , 1 7 , 1 8 , 1 9 , 2 0 , 2 1 , 2 2 , 2 3
load_ c l e a r \ i , x2 , x9
.endr
.endif
bl i d c t 3 2 _ o d d
bl i d c t 3 2 _ o d d \ s u f f i x
transpose_ 4 x4 s v31 , v30 , v29 , v28 , v4 , v5 , v6 , v7
transpose_ 4 x4 s v27 , v26 , v25 , v24 , v4 , v5 , v6 , v7
@ -1350,32 +1740,60 @@ endfunc
/ / x2 = s r c ( t e m p b u f f e r )
/ / x7 = n e g a t i v e d o u b l e t e m p b u f f e r s t r i d e
/ / x9 = d o u b l e t e m p b u f f e r s t r i d e
function i d c t 3 2 _ 1 d _ 4 x32 _ p a s s2 _ n e o n
function i d c t 3 2 _ 1 d _ 4 x32 _ p a s s2 \ s u f f i x \ ( ) _ n e o n
mov x14 , x30
/ / v1 6 = I N ( 0 ) , v17 = I N ( 2 ) . . . v31 = I N ( 3 0 )
.ifb \ suffix
.irp i, 1 6 , 1 7 , 1 8 , 1 9 , 2 0 , 2 1 , 2 2 , 2 3 , 2 4 , 2 5 , 2 6 , 2 7 , 2 8 , 2 9 , 3 0 , 3 1
ld1 { v \ i \ ( ) . 4 s } , [ x2 ] , x9
load \ i , x2 , x9
.endr
sub x2 , x2 , x9 , l s l #4
.endif
.ifc \ suffix,_ q u a r t e r
.irp i, 1 6 , 1 7 , 1 8 , 1 9
load \ i , x2 , x9
.endr
sub x2 , x2 , x9 , l s l #2
.endif
.ifc \ suffix,_ h a l f
.irp i, 1 6 , 1 7 , 1 8 , 1 9 , 2 0 , 2 1 , 2 2 , 2 3
load \ i , x2 , x9
.endr
sub x2 , x2 , x9 , l s l #3
.endif
bl i d c t 1 6
bl i d c t 1 6 \ s u f f i x
.irp i, 1 6 , 1 7 , 1 8 , 1 9 , 2 0 , 2 1 , 2 2 , 2 3 , 2 4 , 2 5 , 2 6 , 2 7 , 2 8 , 2 9 , 3 0 , 3 1
st1 { v \ i \ ( ) . 4 s } , [ x2 ] , x9
store \ i , x2 , x9
.endr
sub x2 , x2 , x9 , l s l #4
add x2 , x2 , #128
/ / v1 6 = I N ( 1 ) , v17 = I N ( 3 ) . . . v31 = I N ( 3 1 )
.ifb \ suffix
.irp i, 1 6 , 1 7 , 1 8 , 1 9 , 2 0 , 2 1 , 2 2 , 2 3 , 2 4 , 2 5 , 2 6 , 2 7 , 2 8 , 2 9 , 3 0 , 3 1
ld1 { v \ i \ ( ) . 4 s } , [ x2 ] , x9
load \ i , x2 , x9
.endr
sub x2 , x2 , x9 , l s l #4
.endif
.ifc \ suffix,_ q u a r t e r
.irp i, 1 6 , 1 7 , 1 8 , 1 9
load \ i , x2 , x9
.endr
sub x2 , x2 , x9 , l s l #2
.endif
.ifc \ suffix,_ h a l f
.irp i, 1 6 , 1 7 , 1 8 , 1 9 , 2 0 , 2 1 , 2 2 , 2 3
load \ i , x2 , x9
.endr
sub x2 , x2 , x9 , l s l #3
.endif
sub x2 , x2 , #128
bl i d c t 3 2 _ o d d
bl i d c t 3 2 _ o d d \ s u f f i x
.macro load_acc_store a, b , c , d , n e g =0
.if \ neg = = 0
@ -1433,6 +1851,11 @@ function idct32_1d_4x32_pass2_neon
.purgem load_acc_store
br x14
endfunc
.endm
idct3 2 _ f u n c s
idct3 2 _ f u n c s _ q u a r t e r
idct3 2 _ f u n c s _ h a l f
const m i n _ e o b _ i d c t _ i d c t _ 3 2 , a l i g n =4
.short 0 , 9 , 3 4 , 7 0 , 1 3 5 , 2 4 0 , 3 3 6 , 4 4 8
@ -1443,7 +1866,6 @@ function vp9_idct_idct_32x32_add_16_neon
b. e q i d c t 3 2 x32 _ d c _ a d d _ n e o n
movrel x10 , i d c t _ c o e f f s
movrel x12 , m i n _ e o b _ i d c t _ i d c t _ 3 2 , 2
mov x15 , x30
stp d8 , d9 , [ s p , #- 0x10 ] !
@ -1474,6 +1896,13 @@ function vp9_idct_idct_32x32_add_16_neon
dup v15 . 8 h , w13
cmp w3 , #34
b. l e i d c t 3 2 x32 _ q u a r t e r _ a d d _ 1 6 _ n e o n
cmp w3 , #135
b. l e i d c t 3 2 x32 _ h a l f _ a d d _ 1 6 _ n e o n
movrel x12 , m i n _ e o b _ i d c t _ i d c t _ 3 2 , 2
.irp i, 0 , 4 , 8 , 1 2 , 1 6 , 2 0 , 2 4 , 2 8
add x0 , s p , #( \ i * 128 )
.if \ i > 0
@ -1526,3 +1955,63 @@ function ff_vp9_idct_idct_32x32_add_12_neon, export=1
mov x13 , #0x0fff
b v p9 _ i d c t _ i d c t _ 3 2 x32 _ a d d _ 1 6 _ n e o n
endfunc
.macro idct32_partial size
function i d c t 3 2 x32 _ \ s i z e \ ( ) _ a d d _ 1 6 _ n e o n
.irp i, 0 , 4
add x0 , s p , #( \ i * 128 )
.ifc \ size,q u a r t e r
.if \ i = = 4
cmp w3 , #9
b. l e 1 f
.endif
.endif
add x2 , x6 , #( \ i * 4 )
bl i d c t 3 2 _ 1 d _ 4 x32 _ p a s s1 _ \ s i z e \ ( ) _ n e o n
.endr
.ifc \ size,h a l f
.irp i, 8 , 1 2
add x0 , s p , #( \ i * 128 )
.if \ i = = 1 2
cmp w3 , #70
b. l e 1 f
.endif
add x2 , x6 , #( \ i * 4 )
bl i d c t 3 2 _ 1 d _ 4 x32 _ p a s s1 _ \ s i z e \ ( ) _ n e o n
.endr
.endif
b 3 f
1 :
/ / Write z e r o s t o t h e t e m p b u f f e r f o r p a s s 2
movi v16 . 4 s , #0
movi v17 . 4 s , #0
movi v18 . 4 s , #0
movi v19 . 4 s , #0
.rept 4
st1 { v16 . 4 s - v19 . 4 s } , [ x0 ] , #64
st1 { v16 . 4 s - v19 . 4 s } , [ x0 ] , #64
.endr
3 :
.irp i, 0 , 4 , 8 , 1 2 , 1 6 , 2 0 , 2 4 , 2 8
add x0 , x4 , #( \ i * 2 )
mov x1 , x5
add x2 , s p , #( \ i * 4 )
bl i d c t 3 2 _ 1 d _ 4 x32 _ p a s s2 _ \ s i z e \ ( ) _ n e o n
.endr
add s p , s p , #4096
ldp d14 , d15 , [ s p ] , 0 x10
ldp d12 , d13 , [ s p ] , 0 x10
ldp d10 , d11 , [ s p ] , 0 x10
ldp d8 , d9 , [ s p ] , 0 x10
br x15
endfunc
.endm
idct3 2 _ p a r t i a l q u a r t e r
idct3 2 _ p a r t i a l h a l f