@ -229,65 +229,6 @@ function ff_hevc_add_residual_32x32_10_neon, export=1
bx l r
endfunc
/* uses registers q2 - q9 for temp values */
/* TODO: reorder */
.macro tr4_luma_shift r0 , r1 , r2 , r3 , s h i f t
vaddl. s16 q5 , \ r0 , \ r2 / / c0 = s r c0 + s r c2
vaddl. s16 q2 , \ r2 , \ r3 / / c1 = s r c2 + s r c3
vsubl. s16 q4 , \ r0 , \ r3 / / c2 = s r c0 - s r c3
vmull. s16 q6 , \ r1 , d0 [ 0 ] / / c3 = 7 4 * s r c1
vaddl. s16 q7 , \ r0 , \ r3 / / s r c0 + s r c3
vsubw. s16 q7 , q7 , \ r2 / / s r c0 - s r c2 + s r c3
vmul. s32 q7 , q7 , d0 [ 0 ] / / d s t 2 = 7 4 * ( s r c0 - s r c2 + s r c3 )
vmul. s32 q8 , q5 , d0 [ 1 ] / / 2 9 * c0
vmul. s32 q9 , q2 , d1 [ 0 ] / / 5 5 * c1
vadd. s32 q8 , q9 / / 2 9 * c0 + 5 5 * c1
vadd. s32 q8 , q6 / / d s t 0 = 2 9 * c0 + 5 5 * c1 + c3
vmul. s32 q2 , q2 , d0 [ 1 ] / / 2 9 * c1
vmul. s32 q9 , q4 , d1 [ 0 ] / / 5 5 * c2
vsub. s32 q9 , q2 / / 5 5 * c2 - 2 9 * c1
vadd. s32 q9 , q6 / / d s t 1 = 5 5 * c2 - 2 9 * c1 + c3
vmul. s32 q5 , q5 , d1 [ 0 ] / / 5 5 * c0
vmul. s32 q4 , q4 , d0 [ 1 ] / / 2 9 * c2
vadd. s32 q5 , q4 / / 5 5 * c0 + 2 9 * c2
vsub. s32 q5 , q6 / / d s t 3 = 5 5 * c0 + 2 9 * c2 - c3
vqrshrn. s32 \ r0 , q8 , \ s h i f t
vqrshrn. s32 \ r1 , q9 , \ s h i f t
vqrshrn. s32 \ r2 , q7 , \ s h i f t
vqrshrn. s32 \ r3 , q5 , \ 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
vpush { d8 - d15 }
vld1 . 1 6 { q14 , q15 } , [ r0 ] / / c o e f f s
ldr r3 , =0x4a / / 7 4
vmov. 3 2 d0 [ 0 ] , r3
ldr r3 , =0x1d / / 2 9
vmov. 3 2 d0 [ 1 ] , r3
ldr r3 , =0x37 / / 5 5
vmov. 3 2 d1 [ 0 ] , r3
tr4 _ l u m a _ s h i f t d28 , d29 , d30 , d31 , #7
vtrn. 1 6 d28 , d29
vtrn. 1 6 d30 , d31
vtrn. 3 2 q14 , q15
tr4 _ l u m a _ s h i f t d28 , d29 , d30 , d31 , #12
vtrn. 1 6 d28 , d29
vtrn. 1 6 d30 , d31
vtrn. 3 2 q14 , q15
vst1 . 1 6 { q14 , q15 } , [ r0 ]
vpop { d8 - d15 }
bx l r
endfunc
.macro idct_4x4_dc bitdepth
function f f _ h e v c _ i d c t _ 4 x4 _ d c _ \ b i t d e p t h \ ( ) _ n e o n , e x p o r t =1
ldrsh r1 , [ r0 ]
@ -1040,3 +981,63 @@ idct_32x32 8
idct_ 3 2 x32 _ d c 8
idct_ 3 2 x32 1 0
idct_ 3 2 x32 _ d c 1 0
/* uses registers q2 - q9 for temp values */
/* TODO: reorder */
.macro tr4_luma_shift r0 , r1 , r2 , r3 , s h i f t
vaddl. s16 q5 , \ r0 , \ r2 / / c0 = s r c0 + s r c2
vaddl. s16 q2 , \ r2 , \ r3 / / c1 = s r c2 + s r c3
vsubl. s16 q4 , \ r0 , \ r3 / / c2 = s r c0 - s r c3
vmull. s16 q6 , \ r1 , d0 [ 0 ] / / c3 = 7 4 * s r c1
vaddl. s16 q7 , \ r0 , \ r3 / / s r c0 + s r c3
vsubw. s16 q7 , q7 , \ r2 / / s r c0 - s r c2 + s r c3
vmul. s32 q7 , q7 , d0 [ 0 ] / / d s t 2 = 7 4 * ( s r c0 - s r c2 + s r c3 )
vmul. s32 q8 , q5 , d0 [ 1 ] / / 2 9 * c0
vmul. s32 q9 , q2 , d1 [ 0 ] / / 5 5 * c1
vadd. s32 q8 , q9 / / 2 9 * c0 + 5 5 * c1
vadd. s32 q8 , q6 / / d s t 0 = 2 9 * c0 + 5 5 * c1 + c3
vmul. s32 q2 , q2 , d0 [ 1 ] / / 2 9 * c1
vmul. s32 q9 , q4 , d1 [ 0 ] / / 5 5 * c2
vsub. s32 q9 , q2 / / 5 5 * c2 - 2 9 * c1
vadd. s32 q9 , q6 / / d s t 1 = 5 5 * c2 - 2 9 * c1 + c3
vmul. s32 q5 , q5 , d1 [ 0 ] / / 5 5 * c0
vmul. s32 q4 , q4 , d0 [ 1 ] / / 2 9 * c2
vadd. s32 q5 , q4 / / 5 5 * c0 + 2 9 * c2
vsub. s32 q5 , q6 / / d s t 3 = 5 5 * c0 + 2 9 * c2 - c3
vqrshrn. s32 \ r0 , q8 , \ s h i f t
vqrshrn. s32 \ r1 , q9 , \ s h i f t
vqrshrn. s32 \ r2 , q7 , \ s h i f t
vqrshrn. s32 \ r3 , q5 , \ s h i f t
.endm
.ltorg
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
vpush { d8 - d15 }
vld1 . 1 6 { q14 , q15 } , [ r0 ] / / c o e f f s
ldr r3 , =0x4a / / 7 4
vmov. 3 2 d0 [ 0 ] , r3
ldr r3 , =0x1d / / 2 9
vmov. 3 2 d0 [ 1 ] , r3
ldr r3 , =0x37 / / 5 5
vmov. 3 2 d1 [ 0 ] , r3
tr4 _ l u m a _ s h i f t d28 , d29 , d30 , d31 , #7
vtrn. 1 6 d28 , d29
vtrn. 1 6 d30 , d31
vtrn. 3 2 q14 , q15
tr4 _ l u m a _ s h i f t d28 , d29 , d30 , d31 , #12
vtrn. 1 6 d28 , d29
vtrn. 1 6 d30 , d31
vtrn. 3 2 q14 , q15
vst1 . 1 6 { q14 , q15 } , [ r0 ]
vpop { d8 - d15 }
bx l r
endfunc