@ -58,15 +58,14 @@ T cmp r7, #0
vdup. 8 d1 , r12
vld1 . 8 { d4 , d5 } , [ r1 ] , r4
vdup. 8 d2 , r6
vld1 . 8 { d6 , d7 } , [ r5 ] , r4
vdup. 8 d3 , r7
vext. 8 d5 , d4 , d5 , #1
vext. 8 d7 , d6 , d7 , #1
1 :
vld1 . 6 4 { d6 , d7 } , [ r5 ] , r4
pld [ r5 ]
1 : pld [ r5 ]
vmull. u 8 q8 , d4 , d0
vext. 8 d7 , d6 , d7 , #1
vmlal. u 8 q8 , d5 , d1
vld1 . 8 { d4 , d5 } , [ r1 ] , r4
vmlal. u 8 q8 , d6 , d2
@ -77,6 +76,7 @@ T cmp r7, #0
vmlal. u 8 q9 , d7 , d1
vmlal. u 8 q9 , d4 , d2
vmlal. u 8 q9 , d5 , d3
vld1 . 8 { d6 , d7 } , [ r5 ] , r4
pld [ r1 ]
.ifc \ codec,h26 4
vrshrn. u 1 6 d16 , q8 , #6
@ -92,6 +92,7 @@ T cmp r7, #0
vld1 . 8 { d21 } , [ l r ,: 6 4 ] , r2
vrhadd. u 8 q8 , q8 , q10
.endif
vext. 8 d7 , d6 , d7 , #1
vst1 . 8 { d16 } , [ r0 ,: 6 4 ] , r2
vst1 . 8 { d17 } , [ r0 ,: 6 4 ] , r2
bgt 1 b
@ -107,16 +108,16 @@ T cmp r7, #0
add r5 , r1 , r2
lsl r4 , r2 , #1
3 :
vld1 . 8 { d4 } , [ r1 ] , r4
vld1 . 8 { d6 } , [ r5 ] , r4
pld [ r5 ]
3 : pld [ r5 ]
vmull. u 8 q8 , d4 , d0
vmlal. u 8 q8 , d6 , d1
vld1 . 8 { d4 } , [ r1 ] , r4
vmull. u 8 q9 , d6 , d0
vmlal. u 8 q9 , d4 , d1
vld1 . 8 { d6 } , [ r5 ] , r4
.ifc \ codec,h26 4
vrshrn. u 1 6 d16 , q8 , #6
vrshrn. u 1 6 d17 , q9 , #6
@ -144,13 +145,15 @@ T cmp r7, #0
vext. 8 d5 , d4 , d5 , #1
vext. 8 d7 , d6 , d7 , #1
pld [ r1 ]
5 : pld [ r1 ]
subs r3 , r3 , #2
vmull. u 8 q8 , d4 , d0
vmlal. u 8 q8 , d5 , d1
vld1 . 8 { d4 , d5 } , [ r1 ] , r2
vmull. u 8 q9 , d6 , d0
vmlal. u 8 q9 , d7 , d1
pld [ r1 ]
vext. 8 d5 , d4 , d5 , #1
.ifc \ codec,h26 4
vrshrn. u 1 6 d16 , q8 , #6
vrshrn. u 1 6 d17 , q9 , #6
@ -165,9 +168,11 @@ T cmp r7, #0
vld1 . 8 { d21 } , [ l r ,: 6 4 ] , r2
vrhadd. u 8 q8 , q8 , q10
.endif
vld1 . 8 { d6 , d7 } , [ r1 ] , r2
vext. 8 d7 , d6 , d7 , #1
vst1 . 8 { d16 } , [ r0 ,: 6 4 ] , r2
vst1 . 8 { d17 } , [ r0 ,: 6 4 ] , r2
bgt 4 b
bgt 5 b
pop { r4 - r7 , p c }
endfunc
@ -177,7 +182,7 @@ endfunc
.macro h264_chroma_mc4 type, c o d e c =h264
function f f _ \ t y p e \ ( ) _ \ c o d e c \ ( ) _ c h r o m a _ m c4 _ n e o n , e x p o r t =1
push { r4 - r7 , l r }
ldrd r4 , [ s p , #20 ]
ldrd r4 , r5 , [ s p , #20 ]
.ifc \ type,a v g
mov l r , r0
.endif
@ -211,27 +216,26 @@ T cmp r7, #0
vdup. 8 d1 , r12
vld1 . 8 { d4 } , [ r1 ] , r4
vdup. 8 d2 , r6
vld1 . 8 { d6 } , [ r5 ] , r4
vdup. 8 d3 , r7
vext. 8 d5 , d4 , d5 , #1
vext. 8 d7 , d6 , d7 , #1
vtrn. 3 2 d4 , d5
vtrn. 3 2 d6 , d7
vtrn. 3 2 d0 , d1
vtrn. 3 2 d2 , d3
vtrn. 3 2 d4 , d5
1 :
vld1 . 8 { d6 } , [ r5 ] , r4
pld [ r5 ]
vext. 8 d7 , d6 , d7 , #1
1 : pld [ r5 ]
vmull. u 8 q8 , d4 , d0
vtrn. 3 2 d6 , d7
vld1 . 8 { d4 } , [ r1 ] , r4
vmlal. u 8 q8 , d6 , d2
vld1 . 8 { d4 } , [ r1 ] , r4
vext. 8 d5 , d4 , d5 , #1
vmull. u 8 q9 , d6 , d0
vtrn. 3 2 d4 , d5
vmull. u 8 q9 , d6 , d0
vmlal. u 8 q9 , d4 , d2
vld1 . 8 { d6 } , [ r5 ] , r4
vadd. i 1 6 d16 , d16 , d17
vadd. i 1 6 d17 , d18 , d19
.ifc \ codec,h26 4
@ -247,6 +251,8 @@ T cmp r7, #0
vld1 . 3 2 { d20 [ 1 ] } , [ l r ,: 3 2 ] , r2
vrhadd. u 8 d16 , d16 , d20
.endif
vext. 8 d7 , d6 , d7 , #1
vtrn. 3 2 d6 , d7
vst1 . 3 2 { d16 [ 0 ] } , [ r0 ,: 3 2 ] , r2
vst1 . 3 2 { d16 [ 1 ] } , [ r0 ,: 3 2 ] , r2
bgt 1 b
@ -265,14 +271,13 @@ T cmp r7, #0
add r5 , r1 , r2
lsl r4 , r2 , #1
vld1 . 3 2 { d4 [ 0 ] } , [ r1 ] , r4
3 :
vld1 . 3 2 { d4 [ 1 ] } , [ r5 ] , r4
pld [ r5 ]
3 : pld [ r5 ]
vmull. u 8 q8 , d4 , d0
vld1 . 3 2 { d4 [ 0 ] } , [ r1 ] , r4
vmull. u 8 q9 , d4 , d1
vld1 . 3 2 { d4 [ 1 ] } , [ r5 ] , r4
vadd. i 1 6 d16 , d16 , d17
vadd. i 1 6 d17 , d18 , d19
.ifc \ codec,h26 4
@ -301,10 +306,12 @@ T cmp r7, #0
vtrn. 3 2 d4 , d5
vtrn. 3 2 d6 , d7
vmull. u 8 q8 , d4 , d0
5 : vmull. u 8 q8 , d4 , d0
vmull. u 8 q9 , d6 , d0
subs r3 , r3 , #2
vld1 . 8 { d4 } , [ r1 ] , r2
vext. 8 d5 , d4 , d5 , #1
vtrn. 3 2 d4 , d5
vadd. i 1 6 d16 , d16 , d17
vadd. i 1 6 d17 , d18 , d19
pld [ r1 ]
@ -319,10 +326,13 @@ T cmp r7, #0
vld1 . 3 2 { d20 [ 1 ] } , [ l r ,: 3 2 ] , r2
vrhadd. u 8 d16 , d16 , d20
.endif
vld1 . 8 { d6 } , [ r1 ] , r2
vext. 8 d7 , d6 , d7 , #1
vtrn. 3 2 d6 , d7
pld [ r1 ]
vst1 . 3 2 { d16 [ 0 ] } , [ r0 ,: 3 2 ] , r2
vst1 . 3 2 { d16 [ 1 ] } , [ r0 ,: 3 2 ] , r2
bgt 4 b
bgt 5 b
pop { r4 - r7 , p c }
endfunc