@ -239,23 +239,23 @@ function hevc_add_residual_32x32_16_neon, export=0
endfunc
.macro tr_4x4 in0 , i n 1 , i n 2 , i n 3 , o u t 0 , o u t 1 , o u t 2 , o u t 3 , s h i f t
sshll v20 . 4 s , \ i n 0 , #6
sshll v21 . 4 s , \ i n 0 , #6
smull v22 . 4 s , \ i n 1 , v4 . h [ 1 ]
smull v23 . 4 s , \ i n 1 , v4 . h [ 3 ]
smlal v20 . 4 s , \ i n 2 , v4 . h [ 0 ] / / e 0
smlsl v21 . 4 s , \ i n 2 , v4 . h [ 0 ] / / e 1
smlal v22 . 4 s , \ i n 3 , v4 . h [ 3 ] / / o 0
smlsl v23 . 4 s , \ i n 3 , v4 . h [ 1 ] / / o 1
add v24 . 4 s , v20 . 4 s , v22 . 4 s
sub v20 . 4 s , v20 . 4 s , v22 . 4 s
add v22 . 4 s , v21 . 4 s , v23 . 4 s
sub v21 . 4 s , v21 . 4 s , v23 . 4 s
sqrshrn \ o u t 0 , v24 . 4 s , #\ s h i f t
sqrshrn \ o u t 3 , v20 . 4 s , #\ s h i f t
sqrshrn \ o u t 1 , v22 . 4 s , #\ s h i f t
sqrshrn \ o u t 2 , v21 . 4 s , #\ s h i f t
sshll v20 . 4 s , \ i n 0 , #6
sshll v21 . 4 s , \ i n 0 , #6
smull v22 . 4 s , \ i n 1 , v4 . h [ 1 ]
smull v23 . 4 s , \ i n 1 , v4 . h [ 3 ]
smlal v20 . 4 s , \ i n 2 , v4 . h [ 0 ] / / e 0
smlsl v21 . 4 s , \ i n 2 , v4 . h [ 0 ] / / e 1
smlal v22 . 4 s , \ i n 3 , v4 . h [ 3 ] / / o 0
smlsl v23 . 4 s , \ i n 3 , v4 . h [ 1 ] / / o 1
add v24 . 4 s , v20 . 4 s , v22 . 4 s
sub v20 . 4 s , v20 . 4 s , v22 . 4 s
add v22 . 4 s , v21 . 4 s , v23 . 4 s
sub v21 . 4 s , v21 . 4 s , v23 . 4 s
sqrshrn \ o u t 0 , v24 . 4 s , #\ s h i f t
sqrshrn \ o u t 3 , v20 . 4 s , #\ s h i f t
sqrshrn \ o u t 1 , v22 . 4 s , #\ s h i f t
sqrshrn \ o u t 2 , v21 . 4 s , #\ s h i f t
.endm
.macro idct_4x4 bitdepth
@ -294,19 +294,19 @@ endfunc
/ / uses a n d c l o b b e r s v28 - v31 a s t e m p r e g i s t e r s
.macro tr_4x4_8 in0 , i n 1 , i n 2 , i n 3 , o u t 0 , o u t 1 , o u t 2 , o u t 3 , p1 , p2
sshll\ p1 v28 . 4 s , \ i n 0 , #6
mov v29 . 1 6 b , v28 . 1 6 b
smull\ p1 v30 . 4 s , \ i n 1 , v0 . h [ 1 ]
smull\ p1 v31 . 4 s , \ i n 1 , v0 . h [ 3 ]
smlal\ p2 v28 . 4 s , \ i n 2 , v0 . h [ 0 ] / / e 0
smlsl\ p2 v29 . 4 s , \ i n 2 , v0 . h [ 0 ] / / e 1
smlal\ p2 v30 . 4 s , \ i n 3 , v0 . h [ 3 ] / / o 0
smlsl\ p2 v31 . 4 s , \ i n 3 , v0 . h [ 1 ] / / o 1
add \ o u t 0 , v28 . 4 s , v30 . 4 s
add \ o u t 1 , v29 . 4 s , v31 . 4 s
sub \ o u t 2 , v29 . 4 s , v31 . 4 s
sub \ o u t 3 , v28 . 4 s , v30 . 4 s
sshll\ p1 v28 . 4 s , \ i n 0 , #6
mov v29 . 1 6 b , v28 . 1 6 b
smull\ p1 v30 . 4 s , \ i n 1 , v0 . h [ 1 ]
smull\ p1 v31 . 4 s , \ i n 1 , v0 . h [ 3 ]
smlal\ p2 v28 . 4 s , \ i n 2 , v0 . h [ 0 ] / / e 0
smlsl\ p2 v29 . 4 s , \ i n 2 , v0 . h [ 0 ] / / e 1
smlal\ p2 v30 . 4 s , \ i n 3 , v0 . h [ 3 ] / / o 0
smlsl\ p2 v31 . 4 s , \ i n 3 , v0 . h [ 1 ] / / o 1
add \ o u t 0 , v28 . 4 s , v30 . 4 s
add \ o u t 1 , v29 . 4 s , v31 . 4 s
sub \ o u t 2 , v29 . 4 s , v31 . 4 s
sub \ o u t 3 , v28 . 4 s , v30 . 4 s
.endm
.macro transpose_8x8 r0 , r1 , r2 , r3 , r4 , r5 , r6 , r7
@ -362,11 +362,11 @@ endfunc
.macro idct_8x8 bitdepth
function f f _ h e v c _ i d c t _ 8 x8 _ \ b i t d e p t h \ ( ) _ n e o n , e x p o r t =1
/ / x0 - c o e f f s
mov x1 , x0
mov x1 , x0
ld1 { v16 . 8 h - v19 . 8 h } , [ x1 ] , #64
ld1 { v20 . 8 h - v23 . 8 h } , [ x1 ]
movrel x1 , t r a n s
movrel x1 , t r a n s
ld1 { v0 . 8 h } , [ x1 ]
tr_ 8 x4 7 , v16 ,. 4 h , v17 ,. 4 h , v18 ,. 4 h , v19 ,. 4 h , v20 ,. 4 h , v21 ,. 4 h , v22 ,. 4 h , v23 ,. 4 h
@ -379,7 +379,7 @@ function ff_hevc_idct_8x8_\bitdepth\()_neon, export=1
transpose_ 8 x8 v16 , v17 , v18 , v19 , v20 , v21 , v22 , v23
mov x1 , x0
mov x1 , x0
st1 { v16 . 8 h - v19 . 8 h } , [ x1 ] , #64
st1 { v20 . 8 h - v23 . 8 h } , [ x1 ]
@ -388,8 +388,8 @@ endfunc
.endm
.macro butterfly e, o , t m p _ p , t m p _ m
add \ t m p _ p , \ e , \ o
sub \ t m p _ m , \ e , \ o
add \ t m p _ p , \ e , \ o
sub \ t m p _ m , \ e , \ o
.endm
.macro tr16_8x4 in0 , i n 1 , i n 2 , i n 3 , o f f s e t
@ -418,7 +418,7 @@ endfunc
butterfly v25 . 4 s , v29 . 4 s , v17 . 4 s , v22 . 4 s
butterfly v26 . 4 s , v30 . 4 s , v18 . 4 s , v21 . 4 s
butterfly v27 . 4 s , v31 . 4 s , v19 . 4 s , v20 . 4 s
add x4 , s p , #\ o f f s e t
add x4 , s p , #\ o f f s e t
st1 { v16 . 4 s - v19 . 4 s } , [ x4 ] , #64
st1 { v20 . 4 s - v23 . 4 s } , [ x4 ]
.endm
@ -435,14 +435,14 @@ endfunc
.endm
.macro add_member in, t 0 , t 1 , t 2 , t 3 , t 4 , t 5 , t 6 , t 7 , o p0 , o p1 , o p2 , o p3 , o p4 , o p5 , o p6 , o p7 , p
sum_ s u b v21 . 4 s , \ i n , \ t 0 , \ o p0 , \ p
sum_ s u b v22 . 4 s , \ i n , \ t 1 , \ o p1 , \ p
sum_ s u b v23 . 4 s , \ i n , \ t 2 , \ o p2 , \ p
sum_ s u b v24 . 4 s , \ i n , \ t 3 , \ o p3 , \ p
sum_ s u b v25 . 4 s , \ i n , \ t 4 , \ o p4 , \ p
sum_ s u b v26 . 4 s , \ i n , \ t 5 , \ o p5 , \ p
sum_ s u b v27 . 4 s , \ i n , \ t 6 , \ o p6 , \ p
sum_ s u b v28 . 4 s , \ i n , \ t 7 , \ o p7 , \ p
sum_ s u b v21 . 4 s , \ i n , \ t 0 , \ o p0 , \ p
sum_ s u b v22 . 4 s , \ i n , \ t 1 , \ o p1 , \ p
sum_ s u b v23 . 4 s , \ i n , \ t 2 , \ o p2 , \ p
sum_ s u b v24 . 4 s , \ i n , \ t 3 , \ o p3 , \ p
sum_ s u b v25 . 4 s , \ i n , \ t 4 , \ o p4 , \ p
sum_ s u b v26 . 4 s , \ i n , \ t 5 , \ o p5 , \ p
sum_ s u b v27 . 4 s , \ i n , \ t 6 , \ o p6 , \ p
sum_ s u b v28 . 4 s , \ i n , \ t 7 , \ o p7 , \ p
.endm
.macro butterfly16 in0 , i n 1 , i n 2 , i n 3 , i n 4 , i n 5 , i n 6 , i n 7
@ -528,20 +528,20 @@ endfunc
.macro tr_16x4 name, s h i f t , o f f s e t , s t e p
function f u n c _ t r _ 1 6 x4 _ \ n a m e
mov x1 , x5
add x3 , x5 , #( \ s t e p * 64 )
mov x2 , #( \ s t e p * 128 )
mov x1 , x5
add x3 , x5 , #( \ s t e p * 64 )
mov x2 , #( \ s t e p * 128 )
load1 6 v16 . d , v17 . d , v18 . d , v19 . d
movrel x1 , t r a n s
movrel x1 , t r a n s
ld1 { v0 . 8 h } , [ x1 ]
tr1 6 _ 8 x4 v16 , v17 , v18 , v19 , \ o f f s e t
add x1 , x5 , #( \ s t e p * 32 )
add x3 , x5 , #( \ s t e p * 3 * 3 2 )
mov x2 , #( \ s t e p * 128 )
add x1 , x5 , #( \ s t e p * 32 )
add x3 , x5 , #( \ s t e p * 3 * 3 2 )
mov x2 , #( \ s t e p * 128 )
load1 6 v20 . d , v17 . d , v18 . d , v19 . d
movrel x1 , t r a n s , 1 6
movrel x1 , t r a n s , 1 6
ld1 { v1 . 8 h } , [ x1 ]
smull v21 . 4 s , v20 . 4 h , v1 . h [ 0 ]
smull v22 . 4 s , v20 . 4 h , v1 . h [ 1 ]
@ -560,19 +560,19 @@ function func_tr_16x4_\name
add_ m e m b e r v19 . 4 h , v1 . h [ 6 ] , v1 . h [ 3 ] , v1 . h [ 0 ] , v1 . h [ 2 ] , v1 . h [ 5 ] , v1 . h [ 7 ] , v1 . h [ 4 ] , v1 . h [ 1 ] , + , - , + , - , + , + , - , +
add_ m e m b e r v19 . 8 h , v1 . h [ 7 ] , v1 . h [ 6 ] , v1 . h [ 5 ] , v1 . h [ 4 ] , v1 . h [ 3 ] , v1 . h [ 2 ] , v1 . h [ 1 ] , v1 . h [ 0 ] , + , - , + , - , + , - , + , - , 2
add x4 , s p , #\ o f f s e t
add x4 , s p , #\ o f f s e t
ld1 { v16 . 4 s - v19 . 4 s } , [ x4 ] , #64
butterfly1 6 v16 . 4 s , v21 . 4 s , v17 . 4 s , v22 . 4 s , v18 . 4 s , v23 . 4 s , v19 . 4 s , v24 . 4 s
.if \ shift > 0
scale v29 , v30 , v31 , v24 , v20 . 4 s , v16 . 4 s , v21 . 4 s , v17 . 4 s , v22 . 4 s , v18 . 4 s , v23 . 4 s , v19 . 4 s , \ s h i f t
transpose1 6 _ 4 x4 _ 2 v29 , v30 , v31 , v24 , v2 , v3 , v4 , v5 , v6 , v7
mov x1 , x6
add x3 , x6 , #( 24 + 3 * 3 2 )
mov x2 , #32
mov x4 , #- 32
mov x1 , x6
add x3 , x6 , #( 24 + 3 * 3 2 )
mov x2 , #32
mov x4 , #- 32
store1 6 v29 . d , v30 . d , v31 . d , v24 . d , x4
.else
store_ t o _ s t a c k \ o f f s e t , ( \ o f f s e t + 2 4 0 ) , v20 . 4 s , v21 . 4 s , v22 . 4 s , v23 . 4 s , v19 . 4 s , v18 . 4 s , v17 . 4 s , v16 . 4 s
store_ t o _ s t a c k \ o f f s e t , ( \ o f f s e t + 2 4 0 ) , v20 . 4 s , v21 . 4 s , v22 . 4 s , v23 . 4 s , v19 . 4 s , v18 . 4 s , v17 . 4 s , v16 . 4 s
.endif
add x4 , s p , #( \ o f f s e t + 64 )
@ -582,13 +582,13 @@ function func_tr_16x4_\name
scale v29 , v30 , v31 , v20 , v20 . 4 s , v16 . 4 s , v25 . 4 s , v17 . 4 s , v26 . 4 s , v18 . 4 s , v27 . 4 s , v19 . 4 s , \ s h i f t
transpose1 6 _ 4 x4 _ 2 v29 , v30 , v31 , v20 , v2 , v3 , v4 , v5 , v6 , v7
add x1 , x6 , #8
add x3 , x6 , #( 16 + 3 * 3 2 )
mov x2 , #32
mov x4 , #- 32
add x1 , x6 , #8
add x3 , x6 , #( 16 + 3 * 3 2 )
mov x2 , #32
mov x4 , #- 32
store1 6 v29 . d , v30 . d , v31 . d , v20 . d , x4
.else
store_ t o _ s t a c k ( \ o f f s e t + 6 4 ) , ( \ o f f s e t + 1 7 6 ) , v20 . 4 s , v25 . 4 s , v26 . 4 s , v27 . 4 s , v19 . 4 s , v18 . 4 s , v17 . 4 s , v16 . 4 s
store_ t o _ s t a c k ( \ o f f s e t + 6 4 ) , ( \ o f f s e t + 1 7 6 ) , v20 . 4 s , v25 . 4 s , v26 . 4 s , v27 . 4 s , v19 . 4 s , v18 . 4 s , v17 . 4 s , v16 . 4 s
.endif
ret
@ -601,21 +601,21 @@ function ff_hevc_idct_16x16_\bitdepth\()_neon, export=1
mov x15 , x30
/ / allocate a t e m p b u f f e r
sub s p , s p , #640
sub s p , s p , #640
.irp i, 0 , 1 , 2 , 3
add x5 , x0 , #( 8 * \ i )
add x6 , s p , #( 8 * \ i * 1 6 )
add x5 , x0 , #( 8 * \ i )
add x6 , s p , #( 8 * \ i * 1 6 )
bl f u n c _ t r _ 1 6 x4 _ f i r s t p a s s
.endr
.irp i, 0 , 1 , 2 , 3
add x5 , s p , #( 8 * \ i )
add x6 , x0 , #( 8 * \ i * 1 6 )
add x5 , s p , #( 8 * \ i )
add x6 , x0 , #( 8 * \ i * 1 6 )
bl f u n c _ t r _ 1 6 x4 _ s e c o n d p a s s _ \ b i t d e p t h
.endr
add s p , s p , #640
add s p , s p , #640
ret x15
endfunc
@ -644,10 +644,10 @@ endfunc
.endm
.macro add_member32 in, t 0 , t 1 , t 2 , t 3 , o p0 , o p1 , o p2 , o p3 , p
sum_ s u b v24 . 4 s , \ i n , \ t 0 , \ o p0 , \ p
sum_ s u b v25 . 4 s , \ i n , \ t 1 , \ o p1 , \ p
sum_ s u b v26 . 4 s , \ i n , \ t 2 , \ o p2 , \ p
sum_ s u b v27 . 4 s , \ i n , \ t 3 , \ o p3 , \ p
sum_ s u b v24 . 4 s , \ i n , \ t 0 , \ o p0 , \ p
sum_ s u b v25 . 4 s , \ i n , \ t 1 , \ o p1 , \ p
sum_ s u b v26 . 4 s , \ i n , \ t 2 , \ o p2 , \ p
sum_ s u b v27 . 4 s , \ i n , \ t 3 , \ o p3 , \ p
.endm
.macro butterfly32 in0 , i n 1 , i n 2 , i n 3 , o u t
@ -841,85 +841,85 @@ idct_32x32 8
idct_ 3 2 x32 1 0
.macro tr4_luma_shift r0 , r1 , r2 , r3 , s h i f t
saddl v0 . 4 s , \ r0 , \ r2 / / c0 = s r c0 + s r c2
saddl v1 . 4 s , \ r2 , \ r3 / / c1 = s r c2 + s r c3
ssubl v2 . 4 s , \ r0 , \ r3 / / c2 = s r c0 - s r c3
smull v3 . 4 s , \ r1 , v21 . 4 h / / c3 = 7 4 * s r c1
saddl v7 . 4 s , \ r0 , \ r3 / / s r c0 + s r c3
ssubw v7 . 4 s , v7 . 4 s , \ r2 / / s r c0 - s r c2 + s r c3
mul v7 . 4 s , v7 . 4 s , v18 . 4 s / / d s t 2 = 7 4 * ( s r c0 - s r c2 + s r c3 )
mul v5 . 4 s , v0 . 4 s , v19 . 4 s / / 2 9 * c0
mul v6 . 4 s , v1 . 4 s , v20 . 4 s / / 5 5 * c1
add v5 . 4 s , v5 . 4 s , v6 . 4 s / / 2 9 * c0 + 5 5 * c1
add v5 . 4 s , v5 . 4 s , v3 . 4 s / / d s t 0 = 2 9 * c0 + 5 5 * c1 + c3
mul v1 . 4 s , v1 . 4 s , v19 . 4 s / / 2 9 * c1
mul v6 . 4 s , v2 . 4 s , v20 . 4 s / / 5 5 * c2
sub v6 . 4 s , v6 . 4 s , v1 . 4 s / / 5 5 * c2 - 2 9 * c1
add v6 . 4 s , v6 . 4 s , v3 . 4 s / / d s t 1 = 5 5 * c2 - 2 9 * c1 + c3
mul v0 . 4 s , v0 . 4 s , v20 . 4 s / / 5 5 * c0
mul v2 . 4 s , v2 . 4 s , v19 . 4 s / / 2 9 * c2
add v0 . 4 s , v0 . 4 s , v2 . 4 s / / 5 5 * c0 + 2 9 * c2
sub v0 . 4 s , v0 . 4 s , v3 . 4 s / / d s t 3 = 5 5 * c0 + 2 9 * c2 - c3
sqrshrn \ r0 , v5 . 4 s , \ s h i f t
sqrshrn \ r1 , v6 . 4 s , \ s h i f t
sqrshrn \ r2 , v7 . 4 s , \ s h i f t
sqrshrn \ r3 , v0 . 4 s , \ s h i f t
saddl v0 . 4 s , \ r0 , \ r2 / / c0 = s r c0 + s r c2
saddl v1 . 4 s , \ r2 , \ r3 / / c1 = s r c2 + s r c3
ssubl v2 . 4 s , \ r0 , \ r3 / / c2 = s r c0 - s r c3
smull v3 . 4 s , \ r1 , v21 . 4 h / / c3 = 7 4 * s r c1
saddl v7 . 4 s , \ r0 , \ r3 / / s r c0 + s r c3
ssubw v7 . 4 s , v7 . 4 s , \ r2 / / s r c0 - s r c2 + s r c3
mul v7 . 4 s , v7 . 4 s , v18 . 4 s / / d s t 2 = 7 4 * ( s r c0 - s r c2 + s r c3 )
mul v5 . 4 s , v0 . 4 s , v19 . 4 s / / 2 9 * c0
mul v6 . 4 s , v1 . 4 s , v20 . 4 s / / 5 5 * c1
add v5 . 4 s , v5 . 4 s , v6 . 4 s / / 2 9 * c0 + 5 5 * c1
add v5 . 4 s , v5 . 4 s , v3 . 4 s / / d s t 0 = 2 9 * c0 + 5 5 * c1 + c3
mul v1 . 4 s , v1 . 4 s , v19 . 4 s / / 2 9 * c1
mul v6 . 4 s , v2 . 4 s , v20 . 4 s / / 5 5 * c2
sub v6 . 4 s , v6 . 4 s , v1 . 4 s / / 5 5 * c2 - 2 9 * c1
add v6 . 4 s , v6 . 4 s , v3 . 4 s / / d s t 1 = 5 5 * c2 - 2 9 * c1 + c3
mul v0 . 4 s , v0 . 4 s , v20 . 4 s / / 5 5 * c0
mul v2 . 4 s , v2 . 4 s , v19 . 4 s / / 2 9 * c2
add v0 . 4 s , v0 . 4 s , v2 . 4 s / / 5 5 * c0 + 2 9 * c2
sub v0 . 4 s , v0 . 4 s , v3 . 4 s / / d s t 3 = 5 5 * c0 + 2 9 * c2 - c3
sqrshrn \ r0 , v5 . 4 s , \ s h i f t
sqrshrn \ r1 , v6 . 4 s , \ s h i f t
sqrshrn \ r2 , v7 . 4 s , \ s h i f t
sqrshrn \ r3 , v0 . 4 s , \ s h i f t
.endm
function f f _ h e v c _ t r a n s f o r m _ l u m a _ 4 x4 _ n e o n _ 8 , e x p o r t =1
ld1 { v28 . 4 h - v31 . 4 h } , [ x0 ]
movi v18 . 4 s , #74
movi v19 . 4 s , #29
movi v20 . 4 s , #55
movi v21 . 4 h , #74
ld1 { v28 . 4 h - v31 . 4 h } , [ x0 ]
movi v18 . 4 s , #74
movi v19 . 4 s , #29
movi v20 . 4 s , #55
movi v21 . 4 h , #74
tr4 _ l u m a _ s h i f t v28 . 4 h , v29 . 4 h , v30 . 4 h , v31 . 4 h , #7
transpose_ 4 x4 H v28 , v29 , v30 , v31 , v22 , v23 , v24 , v25
tr4 _ l u m a _ s h i f t v28 . 4 h , v29 . 4 h , v30 . 4 h , v31 . 4 h , #7
transpose_ 4 x4 H v28 , v29 , v30 , v31 , v22 , v23 , v24 , v25
tr4 _ l u m a _ s h i f t v28 . 4 h , v29 . 4 h , v30 . 4 h , v31 . 4 h , #12
transpose_ 4 x4 H v28 , v29 , v30 , v31 , v22 , v23 , v24 , v25
tr4 _ l u m a _ s h i f t v28 . 4 h , v29 . 4 h , v30 . 4 h , v31 . 4 h , #12
transpose_ 4 x4 H v28 , v29 , v30 , v31 , v22 , v23 , v24 , v25
st1 { v28 . 4 h - v31 . 4 h } , [ x0 ]
st1 { v28 . 4 h - v31 . 4 h } , [ x0 ]
ret
endfunc
/ / void f f _ h e v c _ i d c t _ N x N _ d c _ D E P T H _ n e o n ( i n t 1 6 _ t * c o e f f s )
.macro idct_dc size, b i t d e p t h
function f f _ h e v c _ i d c t _ \ s i z e \ ( ) x \ s i z e \ ( ) _ d c _ \ b i t d e p t h \ ( ) _ n e o n , e x p o r t =1
ld1 r { v4 . 8 h } , [ x0 ]
srshr v4 . 8 h , v4 . 8 h , #1
srshr v0 . 8 h , v4 . 8 h , #( 14 - \ b i t d e p t h )
srshr v1 . 8 h , v4 . 8 h , #( 14 - \ b i t d e p t h )
ld1 r { v4 . 8 h } , [ x0 ]
srshr v4 . 8 h , v4 . 8 h , #1
srshr v0 . 8 h , v4 . 8 h , #( 14 - \ b i t d e p t h )
srshr v1 . 8 h , v4 . 8 h , #( 14 - \ b i t d e p t h )
.if \ size > 4
srshr v2 . 8 h , v4 . 8 h , #( 14 - \ b i t d e p t h )
srshr v3 . 8 h , v4 . 8 h , #( 14 - \ b i t d e p t h )
srshr v2 . 8 h , v4 . 8 h , #( 14 - \ b i t d e p t h )
srshr v3 . 8 h , v4 . 8 h , #( 14 - \ b i t d e p t h )
.if \ size > 1 6 / * d c 3 2 x32 * /
mov x2 , #4
mov x2 , #4
1 :
subs x2 , x2 , #1
subs x2 , x2 , #1
.endif
add x12 , x0 , #64
mov x13 , #128
.if \ size > 8 / * d c 1 6 x16 * /
st1 { v0 . 8 h - v3 . 8 h } , [ x0 ] , x13
st1 { v0 . 8 h - v3 . 8 h } , [ x12 ] , x13
st1 { v0 . 8 h - v3 . 8 h } , [ x0 ] , x13
st1 { v0 . 8 h - v3 . 8 h } , [ x12 ] , x13
st1 { v0 . 8 h - v3 . 8 h } , [ x0 ] , x13
st1 { v0 . 8 h - v3 . 8 h } , [ x12 ] , x13
st1 { v0 . 8 h - v3 . 8 h } , [ x0 ] , x13
st1 { v0 . 8 h - v3 . 8 h } , [ x12 ] , x13
st1 { v0 . 8 h - v3 . 8 h } , [ x0 ] , x13
st1 { v0 . 8 h - v3 . 8 h } , [ x12 ] , x13
st1 { v0 . 8 h - v3 . 8 h } , [ x0 ] , x13
st1 { v0 . 8 h - v3 . 8 h } , [ x12 ] , x13
.endif /* dc 8x8 */
st1 { v0 . 8 h - v3 . 8 h } , [ x0 ] , x13
st1 { v0 . 8 h - v3 . 8 h } , [ x12 ] , x13
st1 { v0 . 8 h - v3 . 8 h } , [ x0 ] , x13
st1 { v0 . 8 h - v3 . 8 h } , [ x12 ] , x13
.if \ size > 1 6 / * d c 3 2 x32 * /
bne 1 b
.endif
.else /* dc 4x4 */
st1 { v0 . 8 h - v1 . 8 h } , [ x0 ]
st1 { v0 . 8 h - v1 . 8 h } , [ x0 ]
.endif
ret
endfunc