2 * Copyright (c) 2008 Mans Rullgard <mans@mansr.com>
4 * This file is part of FFmpeg.
6 * FFmpeg is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * FFmpeg is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with FFmpeg; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
26 function ff_h264_idct_add_neon, export=1
27 vld1.64 {d0-d3}, [r1,:128]
44 vld1.32 {d18[0]}, [r0,:32], r2
47 vld1.32 {d19[1]}, [r0,:32], r2
49 vld1.32 {d18[1]}, [r0,:32], r2
51 vld1.32 {d19[0]}, [r0,:32], r2
53 sub r0, r0, r2, lsl #2
66 vst1.32 {d0[0]}, [r0,:32], r2
67 vst1.32 {d1[1]}, [r0,:32], r2
68 vst1.32 {d0[1]}, [r0,:32], r2
69 vst1.32 {d1[0]}, [r0,:32], r2
74 function ff_h264_idct_dc_add_neon, export=1
75 vld1.16 {d2[],d3[]}, [r1,:16]
77 vld1.32 {d0[0]}, [r0,:32], r2
78 vld1.32 {d0[1]}, [r0,:32], r2
80 vld1.32 {d1[0]}, [r0,:32], r2
81 vld1.32 {d1[1]}, [r0,:32], r2
85 sub r0, r0, r2, lsl #2
86 vst1.32 {d0[0]}, [r0,:32], r2
87 vst1.32 {d0[1]}, [r0,:32], r2
88 vst1.32 {d1[0]}, [r0,:32], r2
89 vst1.32 {d1[1]}, [r0,:32], r2
93 function ff_h264_idct_add16_neon, export=1
111 adrne lr, ff_h264_idct_dc_add_neon
112 adreq lr, ff_h264_idct_add_neon
120 function ff_h264_idct_add16intra_neon, export=1
135 adrne lr, ff_h264_idct_add_neon
136 adreq lr, ff_h264_idct_dc_add_neon
145 function ff_h264_idct_add8_neon, export=1
162 adrne lr, ff_h264_idct_add_neon
163 adreq lr, ff_h264_idct_dc_add_neon
172 .macro idct8x8_cols pass
178 vld1.16 {q14-q15},[r1,:128]!
192 vshr.s16 q14, q10, #1
199 vsub.i16 q14, q14, q2
206 vsub.i16 q0, q13, q11
209 vadd.i16 q3, q13, q11
215 vshr.s16 q11, q11, #1
216 vshr.s16 q13, q13, #1
217 vshr.s16 q15, q15, #1
236 vadd.i16 q10, q12, q1
238 vadd.i16 q11, q14, q0
239 vsub.i16 q13, q12, q1
241 vsub.i16 q12, q14, q0
245 vadd.i16 q9, q10, q14
246 vsub.i16 q14, q10, q14
247 vadd.i16 q10, q12, q1
248 vsub.i16 q13, q12, q1
256 function ff_h264_idct8_add_neon, export=1
257 vld1.16 {q8-q9}, [r1,:128]!
258 vld1.16 {q10-q11},[r1,:128]!
259 vld1.16 {q12-q13},[r1,:128]!
266 vld1.8 {d0}, [r0,:64], r2
268 vld1.8 {d1}, [r0,:64], r2
269 vrshr.s16 q10, q10, #6
270 vld1.8 {d2}, [r0,:64], r2
271 vrshr.s16 q11, q11, #6
272 vld1.8 {d3}, [r0,:64], r2
273 vrshr.s16 q12, q12, #6
274 vld1.8 {d4}, [r0,:64], r2
275 vrshr.s16 q13, q13, #6
276 vld1.8 {d5}, [r0,:64], r2
277 vrshr.s16 q14, q14, #6
278 vld1.8 {d6}, [r0,:64], r2
279 vrshr.s16 q15, q15, #6
280 vld1.8 {d7}, [r0,:64], r2
283 vaddw.u8 q10, q10, d2
285 vaddw.u8 q11, q11, d3
287 vaddw.u8 q12, q12, d4
289 vst1.8 {d0}, [r3,:64], r2
290 vaddw.u8 q13, q13, d5
292 vst1.8 {d1}, [r3,:64], r2
293 vaddw.u8 q14, q14, d6
295 vst1.8 {d2}, [r3,:64], r2
296 vaddw.u8 q15, q15, d7
298 vst1.8 {d3}, [r3,:64], r2
301 vst1.8 {d4}, [r3,:64], r2
302 vst1.8 {d5}, [r3,:64], r2
303 vst1.8 {d6}, [r3,:64], r2
304 vst1.8 {d7}, [r3,:64], r2
310 function ff_h264_idct8_dc_add_neon, export=1
311 vld1.16 {d30[],d31[]},[r1,:16]
312 vld1.32 {d0}, [r0,:64], r2
313 vrshr.s16 q15, q15, #6
314 vld1.32 {d1}, [r0,:64], r2
315 vld1.32 {d2}, [r0,:64], r2
317 vld1.32 {d3}, [r0,:64], r2
319 vld1.32 {d4}, [r0,:64], r2
320 vaddw.u8 q10, q15, d2
321 vld1.32 {d5}, [r0,:64], r2
322 vaddw.u8 q11, q15, d3
323 vld1.32 {d6}, [r0,:64], r2
324 vaddw.u8 q12, q15, d4
325 vld1.32 {d7}, [r0,:64], r2
326 vaddw.u8 q13, q15, d5
327 vaddw.u8 q14, q15, d6
328 vaddw.u8 q15, q15, d7
333 sub r0, r0, r2, lsl #3
334 vst1.32 {d0}, [r0,:64], r2
336 vst1.32 {d1}, [r0,:64], r2
338 vst1.32 {d2}, [r0,:64], r2
340 vst1.32 {d3}, [r0,:64], r2
342 vst1.32 {d4}, [r0,:64], r2
343 vst1.32 {d5}, [r0,:64], r2
344 vst1.32 {d6}, [r0,:64], r2
345 vst1.32 {d7}, [r0,:64], r2
349 function ff_h264_idct8_add4_neon, export=1
367 adrne lr, ff_h264_idct8_dc_add_neon
368 adreq lr, ff_h264_idct8_add_neon
377 scan8: .byte 4+1*8, 5+1*8, 4+2*8, 5+2*8
378 .byte 6+1*8, 7+1*8, 6+2*8, 7+2*8
379 .byte 4+3*8, 5+3*8, 4+4*8, 5+4*8
380 .byte 6+3*8, 7+3*8, 6+4*8, 7+4*8