|
|
|
@ -209,7 +209,7 @@ endfunc |
|
|
|
|
@ Extract a vector from src1-src2 and src4-src5 (src1-src3 and src4-src6
|
|
|
|
|
@ for size >= 16), and multiply-accumulate into dst1 and dst3 (or
|
|
|
|
|
@ dst1-dst2 and dst3-dst4 for size >= 16)
|
|
|
|
|
.macro extmla dst1, dst2, dst3, dst4, src1, src2, src3, src4, src5, src6, offset, size |
|
|
|
|
.macro extmla dst1, dst2, dst3, dst4, dst1d, dst3d, src1, src2, src3, src4, src5, src6, offset, size |
|
|
|
|
vext.8 q14, \src1, \src2, #(2*\offset) |
|
|
|
|
vext.8 q15, \src4, \src5, #(2*\offset) |
|
|
|
|
.if \size >= 16 |
|
|
|
@ -219,14 +219,17 @@ endfunc |
|
|
|
|
vext.8 q6, \src5, \src6, #(2*\offset) |
|
|
|
|
vmla_lane \dst2, q5, \offset |
|
|
|
|
vmla_lane \dst4, q6, \offset |
|
|
|
|
.else |
|
|
|
|
.elseif \size == 8 |
|
|
|
|
vmla_lane \dst1, q14, \offset |
|
|
|
|
vmla_lane \dst3, q15, \offset |
|
|
|
|
.else |
|
|
|
|
vmla_lane \dst1d, d28, \offset |
|
|
|
|
vmla_lane \dst3d, d30, \offset |
|
|
|
|
.endif |
|
|
|
|
.endm |
|
|
|
|
@ The same as above, but don't accumulate straight into the
|
|
|
|
|
@ destination, but use a temp register and accumulate with saturation.
|
|
|
|
|
.macro extmulqadd dst1, dst2, dst3, dst4, src1, src2, src3, src4, src5, src6, offset, size |
|
|
|
|
.macro extmulqadd dst1, dst2, dst3, dst4, dst1d, dst3d, src1, src2, src3, src4, src5, src6, offset, size |
|
|
|
|
vext.8 q14, \src1, \src2, #(2*\offset) |
|
|
|
|
vext.8 q15, \src4, \src5, #(2*\offset) |
|
|
|
|
.if \size >= 16 |
|
|
|
@ -236,16 +239,24 @@ endfunc |
|
|
|
|
vext.8 q6, \src5, \src6, #(2*\offset) |
|
|
|
|
vmul_lane q5, q5, \offset |
|
|
|
|
vmul_lane q6, q6, \offset |
|
|
|
|
.else |
|
|
|
|
.elseif \size == 8 |
|
|
|
|
vmul_lane q14, q14, \offset |
|
|
|
|
vmul_lane q15, q15, \offset |
|
|
|
|
.else |
|
|
|
|
vmul_lane d28, d28, \offset |
|
|
|
|
vmul_lane d30, d30, \offset |
|
|
|
|
.endif |
|
|
|
|
.if \size == 4 |
|
|
|
|
vqadd.s16 \dst1d, \dst1d, d28 |
|
|
|
|
vqadd.s16 \dst3d, \dst3d, d30 |
|
|
|
|
.else |
|
|
|
|
vqadd.s16 \dst1, \dst1, q14 |
|
|
|
|
vqadd.s16 \dst3, \dst3, q15 |
|
|
|
|
.if \size >= 16 |
|
|
|
|
vqadd.s16 \dst2, \dst2, q5 |
|
|
|
|
vqadd.s16 \dst4, \dst4, q6 |
|
|
|
|
.endif |
|
|
|
|
.endif |
|
|
|
|
.endm |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -309,13 +320,13 @@ function \type\()_8tap_\size\()h_\idx1\idx2 |
|
|
|
|
vmul.s16 q2, q9, d0[0] |
|
|
|
|
vmul.s16 q4, q12, d0[0] |
|
|
|
|
.endif |
|
|
|
|
extmla q1, q2, q3, q4, q8, q9, q10, q11, q12, q13, 1, \size |
|
|
|
|
extmla q1, q2, q3, q4, q8, q9, q10, q11, q12, q13, 2, \size |
|
|
|
|
extmla q1, q2, q3, q4, q8, q9, q10, q11, q12, q13, \idx1, \size |
|
|
|
|
extmla q1, q2, q3, q4, q8, q9, q10, q11, q12, q13, 5, \size |
|
|
|
|
extmla q1, q2, q3, q4, q8, q9, q10, q11, q12, q13, 6, \size |
|
|
|
|
extmla q1, q2, q3, q4, q8, q9, q10, q11, q12, q13, 7, \size |
|
|
|
|
extmulqadd q1, q2, q3, q4, q8, q9, q10, q11, q12, q13, \idx2, \size |
|
|
|
|
extmla q1, q2, q3, q4, d2, d6, q8, q9, q10, q11, q12, q13, 1, \size |
|
|
|
|
extmla q1, q2, q3, q4, d2, d6, q8, q9, q10, q11, q12, q13, 2, \size |
|
|
|
|
extmla q1, q2, q3, q4, d2, d6, q8, q9, q10, q11, q12, q13, \idx1, \size |
|
|
|
|
extmla q1, q2, q3, q4, d2, d6, q8, q9, q10, q11, q12, q13, 5, \size |
|
|
|
|
extmla q1, q2, q3, q4, d2, d6, q8, q9, q10, q11, q12, q13, 6, \size |
|
|
|
|
extmla q1, q2, q3, q4, d2, d6, q8, q9, q10, q11, q12, q13, 7, \size |
|
|
|
|
extmulqadd q1, q2, q3, q4, d2, d6, q8, q9, q10, q11, q12, q13, \idx2, \size |
|
|
|
|
|
|
|
|
|
@ Round, shift and saturate
|
|
|
|
|
vqrshrun.s16 d2, q1, #7 |
|
|
|
|