@ -657,6 +657,42 @@ function iadst16
bx l r
endfunc
.macro load_add_store coef0 , c o e f1 , c o e f2 , c o e f3
vrshr. s16 \ c o e f0 , \ c o e f0 , #6
vrshr. s16 \ c o e f1 , \ c o e f1 , #6
vld1 . 3 2 { d4 [ ] } , [ r0 ,: 3 2 ] , r1
vld1 . 3 2 { d4 [ 1 ] } , [ r3 ,: 3 2 ] , r1
vrshr. s16 \ c o e f2 , \ c o e f2 , #6
vrshr. s16 \ c o e f3 , \ c o e f3 , #6
vld1 . 3 2 { d5 [ ] } , [ r0 ,: 3 2 ] , r1
vld1 . 3 2 { d5 [ 1 ] } , [ r3 ,: 3 2 ] , r1
vaddw. u 8 \ c o e f0 , \ c o e f0 , d4
vld1 . 3 2 { d6 [ ] } , [ r0 ,: 3 2 ] , r1
vld1 . 3 2 { d6 [ 1 ] } , [ r3 ,: 3 2 ] , r1
vaddw. u 8 \ c o e f1 , \ c o e f1 , d5
vld1 . 3 2 { d7 [ ] } , [ r0 ,: 3 2 ] , r1
vld1 . 3 2 { d7 [ 1 ] } , [ r3 ,: 3 2 ] , r1
vqmovun. s16 d4 , \ c o e f0
vqmovun. s16 d5 , \ c o e f1
sub r0 , r0 , r1 , l s l #2
sub r3 , r3 , r1 , l s l #2
vaddw. u 8 \ c o e f2 , \ c o e f2 , d6
vaddw. u 8 \ c o e f3 , \ c o e f3 , d7
vst1 . 3 2 { d4 [ 0 ] } , [ r0 ,: 3 2 ] , r1
vst1 . 3 2 { d4 [ 1 ] } , [ r3 ,: 3 2 ] , r1
vqmovun. s16 d6 , \ c o e f2
vst1 . 3 2 { d5 [ 0 ] } , [ r0 ,: 3 2 ] , r1
vst1 . 3 2 { d5 [ 1 ] } , [ r3 ,: 3 2 ] , r1
vqmovun. s16 d7 , \ c o e f3
vst1 . 3 2 { d6 [ 0 ] } , [ r0 ,: 3 2 ] , r1
vst1 . 3 2 { d6 [ 1 ] } , [ r3 ,: 3 2 ] , r1
vst1 . 3 2 { d7 [ 0 ] } , [ r0 ,: 3 2 ] , r1
vst1 . 3 2 { d7 [ 1 ] } , [ r3 ,: 3 2 ] , r1
.endm
.macro itxfm16_1d_funcs txfm
@ Read a vertical 4x16 slice out of a 16x16 matrix, do a transform on it,
@ transpose into a horizontal 16x4 slice and store.
@ -739,44 +775,8 @@ function \txfm\()16_1d_4x16_pass2_neon
lsl r1 , r1 , #1
bl \ t x f m \ ( ) 1 6
.macro load_add_store coef0 , c o e f1 , c o e f2 , c o e f3
vrshr. s16 \ c o e f0 , \ c o e f0 , #6
vrshr. s16 \ c o e f1 , \ c o e f1 , #6
vld1 . 3 2 { d4 [ ] } , [ r0 ,: 3 2 ] , r1
vld1 . 3 2 { d4 [ 1 ] } , [ r3 ,: 3 2 ] , r1
vrshr. s16 \ c o e f2 , \ c o e f2 , #6
vrshr. s16 \ c o e f3 , \ c o e f3 , #6
vld1 . 3 2 { d5 [ ] } , [ r0 ,: 3 2 ] , r1
vld1 . 3 2 { d5 [ 1 ] } , [ r3 ,: 3 2 ] , r1
vaddw. u 8 \ c o e f0 , \ c o e f0 , d4
vld1 . 3 2 { d6 [ ] } , [ r0 ,: 3 2 ] , r1
vld1 . 3 2 { d6 [ 1 ] } , [ r3 ,: 3 2 ] , r1
vaddw. u 8 \ c o e f1 , \ c o e f1 , d5
vld1 . 3 2 { d7 [ ] } , [ r0 ,: 3 2 ] , r1
vld1 . 3 2 { d7 [ 1 ] } , [ r3 ,: 3 2 ] , r1
vqmovun. s16 d4 , \ c o e f0
vqmovun. s16 d5 , \ c o e f1
sub r0 , r0 , r1 , l s l #2
sub r3 , r3 , r1 , l s l #2
vaddw. u 8 \ c o e f2 , \ c o e f2 , d6
vaddw. u 8 \ c o e f3 , \ c o e f3 , d7
vst1 . 3 2 { d4 [ 0 ] } , [ r0 ,: 3 2 ] , r1
vst1 . 3 2 { d4 [ 1 ] } , [ r3 ,: 3 2 ] , r1
vqmovun. s16 d6 , \ c o e f2
vst1 . 3 2 { d5 [ 0 ] } , [ r0 ,: 3 2 ] , r1
vst1 . 3 2 { d5 [ 1 ] } , [ r3 ,: 3 2 ] , r1
vqmovun. s16 d7 , \ c o e f3
vst1 . 3 2 { d6 [ 0 ] } , [ r0 ,: 3 2 ] , r1
vst1 . 3 2 { d6 [ 1 ] } , [ r3 ,: 3 2 ] , r1
vst1 . 3 2 { d7 [ 0 ] } , [ r0 ,: 3 2 ] , r1
vst1 . 3 2 { d7 [ 1 ] } , [ r3 ,: 3 2 ] , r1
.endm
load_ a d d _ s t o r e q8 , q9 , q10 , q11
load_ a d d _ s t o r e q12 , q13 , q14 , q15
.purgem load_add_store
pop { p c }
endfunc