comparison arm/simple_idct_neon.S @ 11443:361a5fcb4393 libavcodec

ARM: set size of asm functions in object files
author mru
date Tue, 09 Mar 2010 16:17:56 +0000
parents be725249ea67
children 17a110bfdeb6
comparison
equal deleted inserted replaced
11442:fe32d9ba1c86 11443:361a5fcb4393
75 pld [r3] 75 pld [r3]
76 pld [r3, r1] 76 pld [r3, r1]
77 add r3, r3, r1, lsl #1 77 add r3, r3, r1, lsl #1
78 pld [r3] 78 pld [r3]
79 pld [r3, r1] 79 pld [r3, r1]
80 .endfunc 80 endfunc
81 81
82 function idct_row4_neon 82 function idct_row4_neon
83 vmov.i32 q15, #(1<<(ROW_SHIFT-1)) 83 vmov.i32 q15, #(1<<(ROW_SHIFT-1))
84 vld1.64 {d2-d5}, [r2,:128]! 84 vld1.64 {d2-d5}, [r2,:128]!
85 vmlal.s16 q15, d2, w4 /* q15 += W4 * col[0] */ 85 vmlal.s16 q15, d2, w4 /* q15 += W4 * col[0] */
145 145
146 vst1.64 {d2-d5}, [r2,:128]! 146 vst1.64 {d2-d5}, [r2,:128]!
147 vst1.64 {d6-d9}, [r2,:128]! 147 vst1.64 {d6-d9}, [r2,:128]!
148 148
149 bx lr 149 bx lr
150 .endfunc 150 endfunc
151 151
152 function idct_col4_neon 152 function idct_col4_neon
153 mov ip, #16 153 mov ip, #16
154 vld1.64 {d2}, [r2,:64], ip /* d2 = col[0] */ 154 vld1.64 {d2}, [r2,:64], ip /* d2 = col[0] */
155 vdup.16 d30, w4c 155 vdup.16 d30, w4c
216 vsubhn.i32 d8, q12, q10 216 vsubhn.i32 d8, q12, q10
217 vsubhn.i32 d7, q13, q5 217 vsubhn.i32 d7, q13, q5
218 vsubhn.i32 d6, q14, q6 218 vsubhn.i32 d6, q14, q6
219 219
220 bx lr 220 bx lr
221 .endfunc 221 endfunc
222 222
223 .align 6 223 .align 6
224 224
225 function idct_col4_st8_neon 225 function idct_col4_st8_neon
226 vqshrun.s16 d2, q1, #COL_SHIFT-16 226 vqshrun.s16 d2, q1, #COL_SHIFT-16
235 vst1.32 {d4[1]}, [r0,:32], r1 235 vst1.32 {d4[1]}, [r0,:32], r1
236 vst1.32 {d5[0]}, [r0,:32], r1 236 vst1.32 {d5[0]}, [r0,:32], r1
237 vst1.32 {d5[1]}, [r0,:32], r1 237 vst1.32 {d5[1]}, [r0,:32], r1
238 238
239 bx lr 239 bx lr
240 .endfunc 240 endfunc
241 241
242 .section .rodata 242 .section .rodata
243 .align 4 243 .align 4
244 idct_coeff_neon: 244 idct_coeff_neon:
245 .short W1, W2, W3, W4, W5, W6, W7, W4c 245 .short W1, W2, W3, W4, W5, W6, W7, W4c
273 add r2, r2, #-120 273 add r2, r2, #-120
274 bl idct_col4_neon 274 bl idct_col4_neon
275 bl idct_col4_st8_neon 275 bl idct_col4_st8_neon
276 276
277 idct_end 277 idct_end
278 .endfunc 278 endfunc
279 279
280 .align 6 280 .align 6
281 281
282 function idct_col4_add8_neon 282 function idct_col4_add8_neon
283 mov ip, r0 283 mov ip, r0
310 vst1.32 {d4[1]}, [ip,:32], r1 310 vst1.32 {d4[1]}, [ip,:32], r1
311 vst1.32 {d5[0]}, [ip,:32], r1 311 vst1.32 {d5[0]}, [ip,:32], r1
312 vst1.32 {d5[1]}, [ip,:32], r1 312 vst1.32 {d5[1]}, [ip,:32], r1
313 313
314 bx lr 314 bx lr
315 .endfunc 315 endfunc
316 316
317 /* void ff_simple_idct_add_neon(uint8_t *dst, int line_size, DCTELEM *data); */ 317 /* void ff_simple_idct_add_neon(uint8_t *dst, int line_size, DCTELEM *data); */
318 function ff_simple_idct_add_neon, export=1 318 function ff_simple_idct_add_neon, export=1
319 idct_start r2 319 idct_start r2
320 320
328 add r2, r2, #-120 328 add r2, r2, #-120
329 bl idct_col4_neon 329 bl idct_col4_neon
330 bl idct_col4_add8_neon 330 bl idct_col4_add8_neon
331 331
332 idct_end 332 idct_end
333 .endfunc 333 endfunc
334 334
335 .align 6 335 .align 6
336 336
337 function idct_col4_st16_neon 337 function idct_col4_st16_neon
338 mov ip, #16 338 mov ip, #16
349 vst1.64 {d7}, [r2,:64], ip 349 vst1.64 {d7}, [r2,:64], ip
350 vst1.64 {d8}, [r2,:64], ip 350 vst1.64 {d8}, [r2,:64], ip
351 vst1.64 {d9}, [r2,:64], ip 351 vst1.64 {d9}, [r2,:64], ip
352 352
353 bx lr 353 bx lr
354 .endfunc 354 endfunc
355 355
356 /* void ff_simple_idct_neon(DCTELEM *data); */ 356 /* void ff_simple_idct_neon(DCTELEM *data); */
357 function ff_simple_idct_neon, export=1 357 function ff_simple_idct_neon, export=1
358 idct_start r0 358 idct_start r0
359 359
368 bl idct_col4_neon 368 bl idct_col4_neon
369 add r2, r2, #-128 369 add r2, r2, #-128
370 bl idct_col4_st16_neon 370 bl idct_col4_st16_neon
371 371
372 idct_end 372 idct_end
373 .endfunc 373 endfunc