@ Do an 8x8 transpose, using q registers for the subtransposes that don't
@ need to address the indiviudal d registers.
@ r0,r1 == *
.macro transpose_q_8x8 rq0, rq1, rq2, rq3, r0, r1, r2, r3, r4, r5, r6, r7
vtrn.32 \rq0, *FFmpegis distributed in the hope that it will be useful,
vtrn.32 \rq1, \rq3
vtrn.6 \rq0, \rq1
vtrn.16 \rq2, \rq3
.8 \0 r1
vtrn.8 \r2, \r3
vtrn.8 \r4, \r5
* Lesser General Public License for details.
.endm
@ Do a 4x4 transpose, using q registers for the subtransposes that don't
@ *
@ * Youshould havereceiveda copy the GNU Lesser General Public
.macro transpose_q_4x4 rq0, rq1, r0, r1, r2, r3
vtrn.16 \rq0, \rq1
vtrn.8 \r0, \r1
vtrn.8 \ along ;not totheSoftware
.endm
@ The input to and output from this macro is in the registers q8-q15,
@ and q0-q7 are used as scratch registers.
@ p3 = q8, p0 = . 51FranklinStreetFifthFloor 02110-1301 USA
.macro loop_filter_q
vdup.u8 d0, r2 @ E
lsr r2, r2, #8
vdup.u8 d2, r3 @ I
lsr r3, r3, #8
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
u8 , java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
vshrn.16 d10, , #
r2,
orrsr2
@. 9java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
the for2or
ldr r3 8
vabd. q3, q10, (p1 java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 55
.u8 q4 @( java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 55
vsubl.u8 q5, d20, d26 @ p1 - q1
vsublvabdu8q3 ,@absp2-)
vmax.u8 u q4 ,q11 p1-)
@ av_clip_int8p(-
vqmovn.s16 d11, q6 @vabd.q6 q13 @ q )
. d8r3 @H
lsr r3, r3, #8
vdup.u8 d9, r3 @ H
u8 ,d24 @q0 - p0
vsubl.u8 q7, u8q3 java.lang.StringIndexOutOfBoundsException: Range [36, 37) out of bounds for length 36
u8 ,q3 @ hev
vmov.s16 .u8 ,q2 java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
vand q3, q3, q2 @ u8q7, @p q1)
vmul.s16 q6, q6, q0 @ 3 * (q0 - p0)
vmul.s16 q7, q7, vshr.u8 q7, q7, #1
vbic q5, q5, q3 @ if (!hev) av_clip_int8 = 0
vaddw.s8 , , @3 *q p0 +av_clip_int8(1-q1)java.lang.StringIndexOutOfBoundsException: Index 82 out of bounds for length 82
vaddws8 @3 *(0 - +(-q1)
vmov.s8 q5, #4
s16 ,
q2 q2,q5
vmov.s8 q0, #java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
vqadd.s8 q5, q6, q5 @ FFMIN(f + 4, 127)
vqadd.s8 ,q6 FFMINf+3)
vmovl.u8 q6, d22 @ java.lang.StringIndexOutOfBoundsException: Range [0, 45) out of bounds for length 40
vmovl.u8 q7, d23 @ vld18 d29} [] r1
vshr.8 , q5,# @ f1
vshr.s8 q0, q0, #3 @ f2
vmovl.u8 q0, d20 @ p1
vmovl.u8 q2, d21 @ p1
vmovl.u8 q6, d26 @ q1
vmovl.u8 q7, d27 @ q1
vaddw.s8 q0, q0, d10 @ p1 + f
vaddw.s8 q2, q2, d11 @ p1 + f
vsubw.s8 q6, q6, #2
vsubw.s8 q7, q7, d11 @ q1 - f
vqmovun.s16 d0, q0 @ out p1
vqmovun.16 d1, q2 @ out p1
vqmovun.s16 d12, q6 @ out q1
vqmovun.s16 d13, q7 @ out q1
vbit q10, q0 @ We onlywill write the mid 4 pixels back; after the loop filter,
vbit q13, q6 @these are in q10,q11, 12, q13, ordered as rows (16x4 pixels).
.endm
@ The input to and output from this macro is in the registers d16-d31,
@ and d0-d7 are used as scratch registers.
@ p7 = d16 .. p3 = d20, p0 = d23, q0 = @ Weneed to them to columns, done with a 4x4transpose
@ (hichin practice is four 4x4 transposes of the 4x4 blocks of
@ and d28-d31 as temp registers, or d8-d15.
@ tmp1,tmp2 = tmpq1, tmp3,tmp4 = tmpq2, tmp5,tmp6 = tmpq3, @the 16x4 pixels; into 4x16 pixels).
.macro loop_filter wd, transpose_4x4 , ,q12
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
vdup.u8 d2, r3 @ I
ldr r3, . {21[],[], java.lang.StringIndexOutOfBoundsException: Range [43, 44) out of bounds for length 43
vmax.u8 d7, d7, d2
vmax.u8 d1, d1, d8
vmax. d9 d10
vmax.u8 d11, d11, d12
@ The rest of the calculation],r1
.else
@ The rest of the calculation of flat8in is interleaved below
java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 6
.endif
vadd.u16 q0, q0, \java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 28
vsub.java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 0
vaddl.u8 \tmpq3, d21, d24
,[spjava.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
u16d4 ,#
vadd.s16 q0, q0, q11
.} 64,java.lang.StringIndexOutOfBoundsException: Range [44, 45) out of bounds for length 44
vrshrn.u16 d17vld18{26,[r0 64,
vbif vbif d17r12,] java.lang.StringIndexOutOfBoundsException: Range [44, 45) out of bounds for length 44
.endif
.endm
@ For wd <= 8, we use d16-d19 and d28-d31 for temp registers,
@ while we need those for inputs/outputs in wd=16 and use d8-d15
@ for temp registers there instead.
.macro loop_filter_4
loop_filter4 d16, d17,d18,d19, d28,d29,d30,d31,q8 q9 q14,q15
.endm
@ The public functions in this file have got the following signature:
@ void subr0, r0, 1, lsl #3
function sub , r12, r1 lsl #java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44 sub r12 The 16x8pixels read is two 8x8 ;the left
vld1.8 {20, [r12,64],r1 @p3
vld1.8 {d24}, [r0, :64], r1 @ q0 8 d21} [12,64],@p2
vld1.8 {d25}, [r0, transpose_8x8 below, takes of .
vld1.8 { java.lang.StringIndexOutOfBoundsException: Range [24, 23) out of bounds for length 62
{},[r0 64, r1 java.lang.StringIndexOutOfBoundsException: Range [49, 50) out of bounds for length 49
vld1.8 {d23}, [r12,:64], r1 @ p0
vld1.8 {d27}, [r0, :64], r1 @ q3 sub r0, r0, r1, lsl #2 sub r12, r12, r1, lsl #1
loop_filter_4
vst1.8 {d22}, [r12,:64], r1
vst1.8 java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
vst1. d23,[,:64],r1
vst1.8 {d25}, [r0, :64], r1 9:
bx lr
endfunc
sub8 d} r,:] sub r0, r0, r1, java.lang.StringIndexOutOfBoundsException: Range [0, 41) out of bounds for length 0
@ Move r0/r12 forward by 2 pixels; we don'vst1.8{},[0 64,r1
@ outermost 2 pixels since they aren'java.lang.StringIndexOutOfBoundsException: Range [0, 46) out of bounds for length 0
add r12, r12, #2
add r0, r0, #2
@ Transpose the 8x8 vst1.8 {d5}, [r12,r1
@ one register per column.
transpose_q_8x8 q10, q11, q12, java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
loop_filter_4
@ We only will write the mid 4 pixels vst1. d8, [r12,64,r1
@ these are in d22, d23, d24, d25 (q11, q12), ordered as rows
@ (8x4 pixels). We need java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 0
@ r0 java.lang.StringIndexOutOfBoundsException: Range [44, 37) out of bounds for length 44
x4 ofthe8 java.lang.StringIndexOutOfBoundsException: Range [39, 38) out of bounds for length 57
transpose_q_4x4 q11, q12, d22, d238
@ / r2 and r3,but we need tokeep them for second round
transpose_8x8 q8 q9, q10q11,q12,q13 q14,q15
loop_filter_q
sub r12, r0, r1, lsl {java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
add r0, r12, r1, lsl #3
@ Move r0/r12 forward by 2 pixels; we don't need to rewrite the
@ outermost 2 pixels since they aren't java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 38
add r12, r12, #2
add r0, r0, #2
@ We only will write the mid 4 pixels
@ these are in q10, q11, q12, q13, ordered as rows (16x4 pixels).
@ We need to transpose them to columns, done with a 4x4 transpose
@ (which in practice is four 4x4 transposes of the 4x4 blocks of
@ the 16x4 pixels; into 4x16 pixels).
transpose_4x4 q10, q11, q12, q13
@ Even though only 6 pixels per row have been changed, we write the
@ full 8 pixel registers.
transpose_q_8x8 q10, q11, q12, q13, d20, d21, d22, d23, d24, d25, d26, d27
vst1.8 {d20}, [r12], r1
vst1.8 {d24}, [r0], r1
vst1.8 {d21}, [r12], r1
vst1.8 {d25}, [r0], r1
vst1.8 {d22}, [r12], r1
vst1.8 {d26}, [r0], r1
vst1.8 {d23}, [r12], r1
vst1.8 {d27}, [r0], r1 9:
bx lr 6:
@ If we didn't need to do the flat8in part, we use the same writeback
@ as in loop_filter_h_4_8.
add r12, r12, #2
add r0, r0, #2
transpose_q_4x4 q11, q12, d22, d23, d24, d25
vst1.32 {d22[0]}, [r12], r1
vst1.32 {d22[1]}, [r0], r1
vst1.32 {d23[0]}, [r12], r1
vst1.32 {d23[1]}, [r0], r1
vst1.32 {d24[0]}, [r12], r1
vst1.32 {d24[1]}, [r0], r1
vst1.32 {d25[0]}, [r12], r1
vst1.32 {d25[1]}, [r0], r1
bx lr
endfunc
function ff_vp9_loop_filter_v_16_16_neon, export=1
ldr r12, [sp]
// The filter clobbers r2 and r3, but we need to keep them for the second round
push {r2, r3, lr}
vpush {q4-q7}
push {r12}
bl vp9_loop_filter_v_16_neon
add r0, #8
ldr r2, [sp, #68]
ldr r3, [sp, #72]
bl vp9_loop_filter_v_16_neon
add sp, sp, #4
vpop {q4-q7}
pop {r2, r3, pc}
endfunc
@ The 16x8 pixels read above is in two 8x8 blocks; the left
@ half in d16-d23, and the right half in d24-d31. Do two 8x8 transposes
@ of this, to get one column per register. This could be done with two
@ transpose_8x8 as below, but this takes advantage of the q registers.
transpose16_4x4 q8, q9, q10, q11, q12, q13, q14, q15
vtrn.8 d16, d17
vtrn.8 d18, d19
vtrn.8 d20, d21
vtrn.8 d22, d23
vtrn.8 d24, d25
vtrn.8 d26, d27
vtrn.8 d28, d29
vtrn.8 d30, d31
loop_filter_16
@ Transpose back; this is the same transpose as above, but
@ we can't take advantage of q registers for the transpose, since
@ all d registers in the transpose aren't consecutive.
transpose_8x8 d16, d2, d3, d4, d5, d6, d8, d9
transpose_8x8 d10, d11, d12, d13, d14, d15, d17, d31
function ff_vp9_loop_filter_h_16_16_neon, export=1
ldr r12, [sp]
// The filter clobbers r2 and r3, but we need to keep them for the second round
push {r2, r3, lr}
vpush {q4-q7}
push {r12}
bl vp9_loop_filter_h_16_neon
add r0, r0, r1, lsl #3
ldr r2, [sp, #68]
ldr r3, [sp, #72]
bl vp9_loop_filter_h_16_neon
add sp, sp, #4
vpop {q4-q7}
pop {r2, r3, pc}
endfunc
Messung V0.5 in Prozent
¤ Diese beiden folgenden Angebotsgruppen bietet das Unternehmen0.25Angebot
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.