comparison arm/mdct_neon.S @ 10160:75bab19c59a2 libavcodec

ARM: faster NEON IMDCT
author mru
date Fri, 11 Sep 2009 02:01:18 +0000
parents 7a63015e4627
children 8d369aee733f
comparison
equal deleted inserted replaced
10159:6110cd97dc8e 10160:75bab19c59a2
36 lsr lr, r12, #2 @ n4 = n >> 2 36 lsr lr, r12, #2 @ n4 = n >> 2
37 add r7, r2, r12, lsl #1 37 add r7, r2, r12, lsl #1
38 mov r12, #-16 38 mov r12, #-16
39 sub r7, r7, #16 39 sub r7, r7, #16
40 40
41 vld1.32 {d16-d17},[r7,:128],r12 @ d16=x,n1 d17=x,n0 41 vld2.32 {d16-d17},[r7,:128],r12 @ d16=x,n1 d17=x,n0
42 vld1.32 {d0-d1}, [r2,:128]! @ d0 =m0,x d1 =m1,x 42 vld2.32 {d0-d1}, [r2,:128]! @ d0 =m0,x d1 =m1,x
43 vrev64.32 d17, d17
43 vld1.32 {d2}, [r4,:64]! @ d2=c0,c1 44 vld1.32 {d2}, [r4,:64]! @ d2=c0,c1
45 vmul.f32 d6, d17, d2
44 vld1.32 {d3}, [r5,:64]! @ d3=s0,s1 46 vld1.32 {d3}, [r5,:64]! @ d3=s0,s1
45 vuzp.32 d17, d16
46 vuzp.32 d0, d1
47 vmul.f32 d6, d16, d2
48 vmul.f32 d7, d0, d2 47 vmul.f32 d7, d0, d2
49 1: 48 1:
50 subs lr, lr, #2 49 subs lr, lr, #2
51 ldr r6, [r3], #4 50 ldr r6, [r3], #4
52 vmul.f32 d4, d0, d3 51 vmul.f32 d4, d0, d3
53 vmul.f32 d5, d16, d3 52 vmul.f32 d5, d17, d3
54 vsub.f32 d4, d6, d4 53 vsub.f32 d4, d6, d4
55 vadd.f32 d5, d5, d7 54 vadd.f32 d5, d5, d7
56 uxtah r8, r1, r6, ror #16 55 uxtah r8, r1, r6, ror #16
57 uxtah r6, r1, r6 56 uxtah r6, r1, r6
58 beq 1f 57 beq 1f
59 vld1.32 {d16-d17},[r7,:128],r12 58 vld2.32 {d16-d17},[r7,:128],r12
60 vld1.32 {d0-d1}, [r2,:128]! 59 vld2.32 {d0-d1}, [r2,:128]!
61 vuzp.32 d17, d16 60 vrev64.32 d17, d17
62 vld1.32 {d2}, [r4,:64]! 61 vld1.32 {d2}, [r4,:64]!
63 vuzp.32 d0, d1 62 vmul.f32 d6, d17, d2
64 vmul.f32 d6, d16, d2
65 vld1.32 {d3}, [r5,:64]! 63 vld1.32 {d3}, [r5,:64]!
66 vmul.f32 d7, d0, d2 64 vmul.f32 d7, d0, d2
67 vst2.32 {d4[0],d5[0]}, [r6,:64] 65 vst2.32 {d4[0],d5[0]}, [r6,:64]
68 vst2.32 {d4[1],d5[1]}, [r8,:64] 66 vst2.32 {d4[1],d5[1]}, [r8,:64]
69 b 1b 67 b 1b
93 mov r7, #-16 91 mov r7, #-16
94 mov r12, #-8 92 mov r12, #-8
95 mov r8, r6 93 mov r8, r6
96 mov r0, r3 94 mov r0, r3
97 95
98 vld1.32 {d0-d1}, [r3,:128], r7 @ d0 =i1,r1 d1 =i0,r0 96 vld2.32 {d0-d1}, [r3,:128], r7 @ d0 =i1,r1 d1 =i0,r0
99 vld1.32 {d20-d21},[r6,:128]! @ d20=i2,r2 d21=i3,r3 97 vld2.32 {d20-d21},[r6,:128]! @ d20=i2,r2 d21=i3,r3
100 vld1.32 {d18}, [r2,:64], r12 @ d18=s1,s0 98 vld1.32 {d18}, [r2,:64], r12 @ d18=s1,s0
101 vuzp.32 d20, d21
102 vuzp.32 d0, d1
103 1: 99 1:
104 subs lr, lr, #2 100 subs lr, lr, #2
105 vmul.f32 d7, d0, d18 101 vmul.f32 d7, d0, d18
106 vld1.32 {d19}, [r5,:64]! @ d19=s2,s3 102 vld1.32 {d19}, [r5,:64]! @ d19=s2,s3
107 vmul.f32 d4, d1, d18 103 vmul.f32 d4, d1, d18
116 vadd.f32 d7, d7, d22 112 vadd.f32 d7, d7, d22
117 vadd.f32 d6, d6, d23 113 vadd.f32 d6, d6, d23
118 vsub.f32 d4, d4, d24 114 vsub.f32 d4, d4, d24
119 vsub.f32 d5, d5, d25 115 vsub.f32 d5, d5, d25
120 beq 1f 116 beq 1f
121 vld1.32 {d0-d1}, [r3,:128], r7 117 vld2.32 {d0-d1}, [r3,:128], r7
122 vld1.32 {d20-d21},[r6,:128]! 118 vld2.32 {d20-d21},[r6,:128]!
123 vld1.32 {d18}, [r2,:64], r12 119 vld1.32 {d18}, [r2,:64], r12
124 vuzp.32 d20, d21
125 vuzp.32 d0, d1
126 vrev64.32 q3, q3 120 vrev64.32 q3, q3
127 vtrn.32 d4, d6 121 vst2.32 {d4,d6}, [r0,:128], r7
128 vtrn.32 d5, d7 122 vst2.32 {d5,d7}, [r8,:128]!
129 vswp d5, d6
130 vst1.32 {d4-d5}, [r0,:128], r7
131 vst1.32 {d6-d7}, [r8,:128]!
132 b 1b 123 b 1b
133 1: 124 1:
134 vrev64.32 q3, q3 125 vrev64.32 q3, q3
135 vtrn.32 d4, d6 126 vst2.32 {d4,d6}, [r0,:128]
136 vtrn.32 d5, d7 127 vst2.32 {d5,d7}, [r8,:128]
137 vswp d5, d6
138 vst1.32 {d4-d5}, [r0,:128]
139 vst1.32 {d6-d7}, [r8,:128]
140 128
141 pop {r4-r8,pc} 129 pop {r4-r8,pc}
142 .endfunc 130 .endfunc
143 131
144 function ff_imdct_calc_neon, export=1 132 function ff_imdct_calc_neon, export=1