Mercurial > libavcodec.hg
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 |