yading@10
|
1 /*
|
yading@10
|
2 C-like prototype :
|
yading@10
|
3 void j_rev_dct_arm(DCTBLOCK data)
|
yading@10
|
4
|
yading@10
|
5 With DCTBLOCK being a pointer to an array of 64 'signed shorts'
|
yading@10
|
6
|
yading@10
|
7 Copyright (c) 2001 Lionel Ulmer (lionel.ulmer@free.fr / bbrox@bbrox.org)
|
yading@10
|
8
|
yading@10
|
9 Permission is hereby granted, free of charge, to any person obtaining a copy
|
yading@10
|
10 of this software and associated documentation files (the "Software"), to deal
|
yading@10
|
11 in the Software without restriction, including without limitation the rights
|
yading@10
|
12 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
yading@10
|
13 copies of the Software, and to permit persons to whom the Software is
|
yading@10
|
14 furnished to do so, subject to the following conditions:
|
yading@10
|
15
|
yading@10
|
16 The above copyright notice and this permission notice shall be included in
|
yading@10
|
17 all copies or substantial portions of the Software.
|
yading@10
|
18
|
yading@10
|
19 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
yading@10
|
20 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
yading@10
|
21 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
yading@10
|
22 COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
yading@10
|
23 IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
yading@10
|
24 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
yading@10
|
25
|
yading@10
|
26 */
|
yading@10
|
27
|
yading@10
|
28 #include "libavutil/arm/asm.S"
|
yading@10
|
29
|
yading@10
|
30 #define FIX_0_298631336 2446
|
yading@10
|
31 #define FIX_0_541196100 4433
|
yading@10
|
32 #define FIX_0_765366865 6270
|
yading@10
|
33 #define FIX_1_175875602 9633
|
yading@10
|
34 #define FIX_1_501321110 12299
|
yading@10
|
35 #define FIX_2_053119869 16819
|
yading@10
|
36 #define FIX_3_072711026 25172
|
yading@10
|
37 #define FIX_M_0_390180644 -3196
|
yading@10
|
38 #define FIX_M_0_899976223 -7373
|
yading@10
|
39 #define FIX_M_1_847759065 -15137
|
yading@10
|
40 #define FIX_M_1_961570560 -16069
|
yading@10
|
41 #define FIX_M_2_562915447 -20995
|
yading@10
|
42 #define FIX_0xFFFF 0xFFFF
|
yading@10
|
43
|
yading@10
|
44 #define FIX_0_298631336_ID 0
|
yading@10
|
45 #define FIX_0_541196100_ID 4
|
yading@10
|
46 #define FIX_0_765366865_ID 8
|
yading@10
|
47 #define FIX_1_175875602_ID 12
|
yading@10
|
48 #define FIX_1_501321110_ID 16
|
yading@10
|
49 #define FIX_2_053119869_ID 20
|
yading@10
|
50 #define FIX_3_072711026_ID 24
|
yading@10
|
51 #define FIX_M_0_390180644_ID 28
|
yading@10
|
52 #define FIX_M_0_899976223_ID 32
|
yading@10
|
53 #define FIX_M_1_847759065_ID 36
|
yading@10
|
54 #define FIX_M_1_961570560_ID 40
|
yading@10
|
55 #define FIX_M_2_562915447_ID 44
|
yading@10
|
56 #define FIX_0xFFFF_ID 48
|
yading@10
|
57
|
yading@10
|
58 function ff_j_rev_dct_arm, export=1
|
yading@10
|
59 push {r0, r4 - r11, lr}
|
yading@10
|
60
|
yading@10
|
61 mov lr, r0 @ lr = pointer to the current row
|
yading@10
|
62 mov r12, #8 @ r12 = row-counter
|
yading@10
|
63 movrel r11, const_array @ r11 = base pointer to the constants array
|
yading@10
|
64 row_loop:
|
yading@10
|
65 ldrsh r0, [lr, # 0] @ r0 = 'd0'
|
yading@10
|
66 ldrsh r2, [lr, # 2] @ r2 = 'd2'
|
yading@10
|
67
|
yading@10
|
68 @ Optimization for row that have all items except the first set to 0
|
yading@10
|
69 @ (this works as the int16_t are always 4-byte aligned)
|
yading@10
|
70 ldr r5, [lr, # 0]
|
yading@10
|
71 ldr r6, [lr, # 4]
|
yading@10
|
72 ldr r3, [lr, # 8]
|
yading@10
|
73 ldr r4, [lr, #12]
|
yading@10
|
74 orr r3, r3, r4
|
yading@10
|
75 orr r3, r3, r6
|
yading@10
|
76 orrs r5, r3, r5
|
yading@10
|
77 beq end_of_row_loop @ nothing to be done as ALL of them are '0'
|
yading@10
|
78 orrs r3, r3, r2
|
yading@10
|
79 beq empty_row
|
yading@10
|
80
|
yading@10
|
81 ldrsh r1, [lr, # 8] @ r1 = 'd1'
|
yading@10
|
82 ldrsh r4, [lr, # 4] @ r4 = 'd4'
|
yading@10
|
83 ldrsh r6, [lr, # 6] @ r6 = 'd6'
|
yading@10
|
84
|
yading@10
|
85 ldr r3, [r11, #FIX_0_541196100_ID]
|
yading@10
|
86 add r7, r2, r6
|
yading@10
|
87 ldr r5, [r11, #FIX_M_1_847759065_ID]
|
yading@10
|
88 mul r7, r3, r7 @ r7 = z1
|
yading@10
|
89 ldr r3, [r11, #FIX_0_765366865_ID]
|
yading@10
|
90 mla r6, r5, r6, r7 @ r6 = tmp2
|
yading@10
|
91 add r5, r0, r4 @ r5 = tmp0
|
yading@10
|
92 mla r2, r3, r2, r7 @ r2 = tmp3
|
yading@10
|
93 sub r3, r0, r4 @ r3 = tmp1
|
yading@10
|
94
|
yading@10
|
95 add r0, r2, r5, lsl #13 @ r0 = tmp10
|
yading@10
|
96 rsb r2, r2, r5, lsl #13 @ r2 = tmp13
|
yading@10
|
97 add r4, r6, r3, lsl #13 @ r4 = tmp11
|
yading@10
|
98 rsb r3, r6, r3, lsl #13 @ r3 = tmp12
|
yading@10
|
99
|
yading@10
|
100 push {r0, r2, r3, r4} @ save on the stack tmp10, tmp13, tmp12, tmp11
|
yading@10
|
101
|
yading@10
|
102 ldrsh r3, [lr, #10] @ r3 = 'd3'
|
yading@10
|
103 ldrsh r5, [lr, #12] @ r5 = 'd5'
|
yading@10
|
104 ldrsh r7, [lr, #14] @ r7 = 'd7'
|
yading@10
|
105
|
yading@10
|
106 add r0, r3, r5 @ r0 = 'z2'
|
yading@10
|
107 add r2, r1, r7 @ r2 = 'z1'
|
yading@10
|
108 add r4, r3, r7 @ r4 = 'z3'
|
yading@10
|
109 add r6, r1, r5 @ r6 = 'z4'
|
yading@10
|
110 ldr r9, [r11, #FIX_1_175875602_ID]
|
yading@10
|
111 add r8, r4, r6 @ r8 = z3 + z4
|
yading@10
|
112 ldr r10, [r11, #FIX_M_0_899976223_ID]
|
yading@10
|
113 mul r8, r9, r8 @ r8 = 'z5'
|
yading@10
|
114 ldr r9, [r11, #FIX_M_2_562915447_ID]
|
yading@10
|
115 mul r2, r10, r2 @ r2 = 'z1'
|
yading@10
|
116 ldr r10, [r11, #FIX_M_1_961570560_ID]
|
yading@10
|
117 mul r0, r9, r0 @ r0 = 'z2'
|
yading@10
|
118 ldr r9, [r11, #FIX_M_0_390180644_ID]
|
yading@10
|
119 mla r4, r10, r4, r8 @ r4 = 'z3'
|
yading@10
|
120 ldr r10, [r11, #FIX_0_298631336_ID]
|
yading@10
|
121 mla r6, r9, r6, r8 @ r6 = 'z4'
|
yading@10
|
122 ldr r9, [r11, #FIX_2_053119869_ID]
|
yading@10
|
123 mla r7, r10, r7, r2 @ r7 = tmp0 + z1
|
yading@10
|
124 ldr r10, [r11, #FIX_3_072711026_ID]
|
yading@10
|
125 mla r5, r9, r5, r0 @ r5 = tmp1 + z2
|
yading@10
|
126 ldr r9, [r11, #FIX_1_501321110_ID]
|
yading@10
|
127 mla r3, r10, r3, r0 @ r3 = tmp2 + z2
|
yading@10
|
128 add r7, r7, r4 @ r7 = tmp0
|
yading@10
|
129 mla r1, r9, r1, r2 @ r1 = tmp3 + z1
|
yading@10
|
130 add r5, r5, r6 @ r5 = tmp1
|
yading@10
|
131 add r3, r3, r4 @ r3 = tmp2
|
yading@10
|
132 add r1, r1, r6 @ r1 = tmp3
|
yading@10
|
133
|
yading@10
|
134 pop {r0, r2, r4, r6} @ r0 = tmp10 / r2 = tmp13 / r4 = tmp12 / r6 = tmp11
|
yading@10
|
135 @ r1 = tmp3 / r3 = tmp2 / r5 = tmp1 / r7 = tmp0
|
yading@10
|
136
|
yading@10
|
137 @ Compute DESCALE(tmp10 + tmp3, CONST_BITS-PASS1_BITS)
|
yading@10
|
138 add r8, r0, r1
|
yading@10
|
139 add r8, r8, #(1<<10)
|
yading@10
|
140 mov r8, r8, asr #11
|
yading@10
|
141 strh r8, [lr, # 0]
|
yading@10
|
142
|
yading@10
|
143 @ Compute DESCALE(tmp10 - tmp3, CONST_BITS-PASS1_BITS)
|
yading@10
|
144 sub r8, r0, r1
|
yading@10
|
145 add r8, r8, #(1<<10)
|
yading@10
|
146 mov r8, r8, asr #11
|
yading@10
|
147 strh r8, [lr, #14]
|
yading@10
|
148
|
yading@10
|
149 @ Compute DESCALE(tmp11 + tmp2, CONST_BITS-PASS1_BITS)
|
yading@10
|
150 add r8, r6, r3
|
yading@10
|
151 add r8, r8, #(1<<10)
|
yading@10
|
152 mov r8, r8, asr #11
|
yading@10
|
153 strh r8, [lr, # 2]
|
yading@10
|
154
|
yading@10
|
155 @ Compute DESCALE(tmp11 - tmp2, CONST_BITS-PASS1_BITS)
|
yading@10
|
156 sub r8, r6, r3
|
yading@10
|
157 add r8, r8, #(1<<10)
|
yading@10
|
158 mov r8, r8, asr #11
|
yading@10
|
159 strh r8, [lr, #12]
|
yading@10
|
160
|
yading@10
|
161 @ Compute DESCALE(tmp12 + tmp1, CONST_BITS-PASS1_BITS)
|
yading@10
|
162 add r8, r4, r5
|
yading@10
|
163 add r8, r8, #(1<<10)
|
yading@10
|
164 mov r8, r8, asr #11
|
yading@10
|
165 strh r8, [lr, # 4]
|
yading@10
|
166
|
yading@10
|
167 @ Compute DESCALE(tmp12 - tmp1, CONST_BITS-PASS1_BITS)
|
yading@10
|
168 sub r8, r4, r5
|
yading@10
|
169 add r8, r8, #(1<<10)
|
yading@10
|
170 mov r8, r8, asr #11
|
yading@10
|
171 strh r8, [lr, #10]
|
yading@10
|
172
|
yading@10
|
173 @ Compute DESCALE(tmp13 + tmp0, CONST_BITS-PASS1_BITS)
|
yading@10
|
174 add r8, r2, r7
|
yading@10
|
175 add r8, r8, #(1<<10)
|
yading@10
|
176 mov r8, r8, asr #11
|
yading@10
|
177 strh r8, [lr, # 6]
|
yading@10
|
178
|
yading@10
|
179 @ Compute DESCALE(tmp13 - tmp0, CONST_BITS-PASS1_BITS)
|
yading@10
|
180 sub r8, r2, r7
|
yading@10
|
181 add r8, r8, #(1<<10)
|
yading@10
|
182 mov r8, r8, asr #11
|
yading@10
|
183 strh r8, [lr, # 8]
|
yading@10
|
184
|
yading@10
|
185 @ End of row loop
|
yading@10
|
186 add lr, lr, #16
|
yading@10
|
187 subs r12, r12, #1
|
yading@10
|
188 bne row_loop
|
yading@10
|
189 beq start_column_loop
|
yading@10
|
190
|
yading@10
|
191 empty_row:
|
yading@10
|
192 ldr r1, [r11, #FIX_0xFFFF_ID]
|
yading@10
|
193 mov r0, r0, lsl #2
|
yading@10
|
194 and r0, r0, r1
|
yading@10
|
195 add r0, r0, r0, lsl #16
|
yading@10
|
196 str r0, [lr, # 0]
|
yading@10
|
197 str r0, [lr, # 4]
|
yading@10
|
198 str r0, [lr, # 8]
|
yading@10
|
199 str r0, [lr, #12]
|
yading@10
|
200
|
yading@10
|
201 end_of_row_loop:
|
yading@10
|
202 @ End of loop
|
yading@10
|
203 add lr, lr, #16
|
yading@10
|
204 subs r12, r12, #1
|
yading@10
|
205 bne row_loop
|
yading@10
|
206
|
yading@10
|
207 start_column_loop:
|
yading@10
|
208 @ Start of column loop
|
yading@10
|
209 pop {lr}
|
yading@10
|
210 mov r12, #8
|
yading@10
|
211 column_loop:
|
yading@10
|
212 ldrsh r0, [lr, #( 0*8)] @ r0 = 'd0'
|
yading@10
|
213 ldrsh r2, [lr, #( 4*8)] @ r2 = 'd2'
|
yading@10
|
214 ldrsh r4, [lr, #( 8*8)] @ r4 = 'd4'
|
yading@10
|
215 ldrsh r6, [lr, #(12*8)] @ r6 = 'd6'
|
yading@10
|
216
|
yading@10
|
217 ldr r3, [r11, #FIX_0_541196100_ID]
|
yading@10
|
218 add r1, r2, r6
|
yading@10
|
219 ldr r5, [r11, #FIX_M_1_847759065_ID]
|
yading@10
|
220 mul r1, r3, r1 @ r1 = z1
|
yading@10
|
221 ldr r3, [r11, #FIX_0_765366865_ID]
|
yading@10
|
222 mla r6, r5, r6, r1 @ r6 = tmp2
|
yading@10
|
223 add r5, r0, r4 @ r5 = tmp0
|
yading@10
|
224 mla r2, r3, r2, r1 @ r2 = tmp3
|
yading@10
|
225 sub r3, r0, r4 @ r3 = tmp1
|
yading@10
|
226
|
yading@10
|
227 add r0, r2, r5, lsl #13 @ r0 = tmp10
|
yading@10
|
228 rsb r2, r2, r5, lsl #13 @ r2 = tmp13
|
yading@10
|
229 add r4, r6, r3, lsl #13 @ r4 = tmp11
|
yading@10
|
230 rsb r6, r6, r3, lsl #13 @ r6 = tmp12
|
yading@10
|
231
|
yading@10
|
232 ldrsh r1, [lr, #( 2*8)] @ r1 = 'd1'
|
yading@10
|
233 ldrsh r3, [lr, #( 6*8)] @ r3 = 'd3'
|
yading@10
|
234 ldrsh r5, [lr, #(10*8)] @ r5 = 'd5'
|
yading@10
|
235 ldrsh r7, [lr, #(14*8)] @ r7 = 'd7'
|
yading@10
|
236
|
yading@10
|
237 @ Check for empty odd column (happens about 20 to 25 % of the time according to my stats)
|
yading@10
|
238 orr r9, r1, r3
|
yading@10
|
239 orr r10, r5, r7
|
yading@10
|
240 orrs r10, r9, r10
|
yading@10
|
241 beq empty_odd_column
|
yading@10
|
242
|
yading@10
|
243 push {r0, r2, r4, r6} @ save on the stack tmp10, tmp13, tmp12, tmp11
|
yading@10
|
244
|
yading@10
|
245 add r0, r3, r5 @ r0 = 'z2'
|
yading@10
|
246 add r2, r1, r7 @ r2 = 'z1'
|
yading@10
|
247 add r4, r3, r7 @ r4 = 'z3'
|
yading@10
|
248 add r6, r1, r5 @ r6 = 'z4'
|
yading@10
|
249 ldr r9, [r11, #FIX_1_175875602_ID]
|
yading@10
|
250 add r8, r4, r6
|
yading@10
|
251 ldr r10, [r11, #FIX_M_0_899976223_ID]
|
yading@10
|
252 mul r8, r9, r8 @ r8 = 'z5'
|
yading@10
|
253 ldr r9, [r11, #FIX_M_2_562915447_ID]
|
yading@10
|
254 mul r2, r10, r2 @ r2 = 'z1'
|
yading@10
|
255 ldr r10, [r11, #FIX_M_1_961570560_ID]
|
yading@10
|
256 mul r0, r9, r0 @ r0 = 'z2'
|
yading@10
|
257 ldr r9, [r11, #FIX_M_0_390180644_ID]
|
yading@10
|
258 mla r4, r10, r4, r8 @ r4 = 'z3'
|
yading@10
|
259 ldr r10, [r11, #FIX_0_298631336_ID]
|
yading@10
|
260 mla r6, r9, r6, r8 @ r6 = 'z4'
|
yading@10
|
261 ldr r9, [r11, #FIX_2_053119869_ID]
|
yading@10
|
262 mla r7, r10, r7, r2 @ r7 = tmp0 + z1
|
yading@10
|
263 ldr r10, [r11, #FIX_3_072711026_ID]
|
yading@10
|
264 mla r5, r9, r5, r0 @ r5 = tmp1 + z2
|
yading@10
|
265 ldr r9, [r11, #FIX_1_501321110_ID]
|
yading@10
|
266 mla r3, r10, r3, r0 @ r3 = tmp2 + z2
|
yading@10
|
267 add r7, r7, r4 @ r7 = tmp0
|
yading@10
|
268 mla r1, r9, r1, r2 @ r1 = tmp3 + z1
|
yading@10
|
269 add r5, r5, r6 @ r5 = tmp1
|
yading@10
|
270 add r3, r3, r4 @ r3 = tmp2
|
yading@10
|
271 add r1, r1, r6 @ r1 = tmp3
|
yading@10
|
272
|
yading@10
|
273 pop {r0, r2, r4, r6} @ r0 = tmp10 / r2 = tmp13 / r4 = tmp11 / r6 = tmp12
|
yading@10
|
274 @ r1 = tmp3 / r3 = tmp2 / r5 = tmp1 / r7 = tmp0
|
yading@10
|
275
|
yading@10
|
276 @ Compute DESCALE(tmp10 + tmp3, CONST_BITS+PASS1_BITS+3)
|
yading@10
|
277 add r8, r0, r1
|
yading@10
|
278 add r8, r8, #(1<<17)
|
yading@10
|
279 mov r8, r8, asr #18
|
yading@10
|
280 strh r8, [lr, #( 0*8)]
|
yading@10
|
281
|
yading@10
|
282 @ Compute DESCALE(tmp10 - tmp3, CONST_BITS+PASS1_BITS+3)
|
yading@10
|
283 sub r8, r0, r1
|
yading@10
|
284 add r8, r8, #(1<<17)
|
yading@10
|
285 mov r8, r8, asr #18
|
yading@10
|
286 strh r8, [lr, #(14*8)]
|
yading@10
|
287
|
yading@10
|
288 @ Compute DESCALE(tmp11 + tmp2, CONST_BITS+PASS1_BITS+3)
|
yading@10
|
289 add r8, r4, r3
|
yading@10
|
290 add r8, r8, #(1<<17)
|
yading@10
|
291 mov r8, r8, asr #18
|
yading@10
|
292 strh r8, [lr, #( 2*8)]
|
yading@10
|
293
|
yading@10
|
294 @ Compute DESCALE(tmp11 - tmp2, CONST_BITS+PASS1_BITS+3)
|
yading@10
|
295 sub r8, r4, r3
|
yading@10
|
296 add r8, r8, #(1<<17)
|
yading@10
|
297 mov r8, r8, asr #18
|
yading@10
|
298 strh r8, [lr, #(12*8)]
|
yading@10
|
299
|
yading@10
|
300 @ Compute DESCALE(tmp12 + tmp1, CONST_BITS+PASS1_BITS+3)
|
yading@10
|
301 add r8, r6, r5
|
yading@10
|
302 add r8, r8, #(1<<17)
|
yading@10
|
303 mov r8, r8, asr #18
|
yading@10
|
304 strh r8, [lr, #( 4*8)]
|
yading@10
|
305
|
yading@10
|
306 @ Compute DESCALE(tmp12 - tmp1, CONST_BITS+PASS1_BITS+3)
|
yading@10
|
307 sub r8, r6, r5
|
yading@10
|
308 add r8, r8, #(1<<17)
|
yading@10
|
309 mov r8, r8, asr #18
|
yading@10
|
310 strh r8, [lr, #(10*8)]
|
yading@10
|
311
|
yading@10
|
312 @ Compute DESCALE(tmp13 + tmp0, CONST_BITS+PASS1_BITS+3)
|
yading@10
|
313 add r8, r2, r7
|
yading@10
|
314 add r8, r8, #(1<<17)
|
yading@10
|
315 mov r8, r8, asr #18
|
yading@10
|
316 strh r8, [lr, #( 6*8)]
|
yading@10
|
317
|
yading@10
|
318 @ Compute DESCALE(tmp13 - tmp0, CONST_BITS+PASS1_BITS+3)
|
yading@10
|
319 sub r8, r2, r7
|
yading@10
|
320 add r8, r8, #(1<<17)
|
yading@10
|
321 mov r8, r8, asr #18
|
yading@10
|
322 strh r8, [lr, #( 8*8)]
|
yading@10
|
323
|
yading@10
|
324 @ End of row loop
|
yading@10
|
325 add lr, lr, #2
|
yading@10
|
326 subs r12, r12, #1
|
yading@10
|
327 bne column_loop
|
yading@10
|
328 beq the_end
|
yading@10
|
329
|
yading@10
|
330 empty_odd_column:
|
yading@10
|
331 @ Compute DESCALE(tmp10 + tmp3, CONST_BITS+PASS1_BITS+3)
|
yading@10
|
332 @ Compute DESCALE(tmp10 - tmp3, CONST_BITS+PASS1_BITS+3)
|
yading@10
|
333 add r0, r0, #(1<<17)
|
yading@10
|
334 mov r0, r0, asr #18
|
yading@10
|
335 strh r0, [lr, #( 0*8)]
|
yading@10
|
336 strh r0, [lr, #(14*8)]
|
yading@10
|
337
|
yading@10
|
338 @ Compute DESCALE(tmp11 + tmp2, CONST_BITS+PASS1_BITS+3)
|
yading@10
|
339 @ Compute DESCALE(tmp11 - tmp2, CONST_BITS+PASS1_BITS+3)
|
yading@10
|
340 add r4, r4, #(1<<17)
|
yading@10
|
341 mov r4, r4, asr #18
|
yading@10
|
342 strh r4, [lr, #( 2*8)]
|
yading@10
|
343 strh r4, [lr, #(12*8)]
|
yading@10
|
344
|
yading@10
|
345 @ Compute DESCALE(tmp12 + tmp1, CONST_BITS+PASS1_BITS+3)
|
yading@10
|
346 @ Compute DESCALE(tmp12 - tmp1, CONST_BITS+PASS1_BITS+3)
|
yading@10
|
347 add r6, r6, #(1<<17)
|
yading@10
|
348 mov r6, r6, asr #18
|
yading@10
|
349 strh r6, [lr, #( 4*8)]
|
yading@10
|
350 strh r6, [lr, #(10*8)]
|
yading@10
|
351
|
yading@10
|
352 @ Compute DESCALE(tmp13 + tmp0, CONST_BITS+PASS1_BITS+3)
|
yading@10
|
353 @ Compute DESCALE(tmp13 - tmp0, CONST_BITS+PASS1_BITS+3)
|
yading@10
|
354 add r2, r2, #(1<<17)
|
yading@10
|
355 mov r2, r2, asr #18
|
yading@10
|
356 strh r2, [lr, #( 6*8)]
|
yading@10
|
357 strh r2, [lr, #( 8*8)]
|
yading@10
|
358
|
yading@10
|
359 @ End of row loop
|
yading@10
|
360 add lr, lr, #2
|
yading@10
|
361 subs r12, r12, #1
|
yading@10
|
362 bne column_loop
|
yading@10
|
363
|
yading@10
|
364 the_end:
|
yading@10
|
365 @ The end....
|
yading@10
|
366 pop {r4 - r11, pc}
|
yading@10
|
367 endfunc
|
yading@10
|
368
|
yading@10
|
369 const const_array
|
yading@10
|
370 .word FIX_0_298631336
|
yading@10
|
371 .word FIX_0_541196100
|
yading@10
|
372 .word FIX_0_765366865
|
yading@10
|
373 .word FIX_1_175875602
|
yading@10
|
374 .word FIX_1_501321110
|
yading@10
|
375 .word FIX_2_053119869
|
yading@10
|
376 .word FIX_3_072711026
|
yading@10
|
377 .word FIX_M_0_390180644
|
yading@10
|
378 .word FIX_M_0_899976223
|
yading@10
|
379 .word FIX_M_1_847759065
|
yading@10
|
380 .word FIX_M_1_961570560
|
yading@10
|
381 .word FIX_M_2_562915447
|
yading@10
|
382 .word FIX_0xFFFF
|
yading@10
|
383 endconst
|