ffmpeg / libavcodec / x86 / ac3dsp.asm @ a30ac54a
History | View | Annotate | Download (1.99 KB)
1 |
;***************************************************************************** |
---|---|
2 |
;* x86-optimized AC-3 DSP utils |
3 |
;* Copyright (c) 2011 Justin Ruggles |
4 |
;* |
5 |
;* This file is part of FFmpeg. |
6 |
;* |
7 |
;* FFmpeg is free software; you can redistribute it and/or |
8 |
;* modify it under the terms of the GNU Lesser General Public |
9 |
;* License as published by the Free Software Foundation; either |
10 |
;* version 2.1 of the License, or (at your option) any later version. |
11 |
;* |
12 |
;* FFmpeg is distributed in the hope that it will be useful, |
13 |
;* but WITHOUT ANY WARRANTY; without even the implied warranty of |
14 |
;* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
15 |
;* Lesser General Public License for more details. |
16 |
;* |
17 |
;* You should have received a copy of the GNU Lesser General Public |
18 |
;* License along with FFmpeg; if not, write to the Free Software |
19 |
;* 51, Inc., Foundation Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
20 |
;****************************************************************************** |
21 |
|
22 |
%include "x86inc.asm" |
23 |
%include "x86util.asm" |
24 |
|
25 |
SECTION .text |
26 |
|
27 |
;----------------------------------------------------------------------------- |
28 |
; void ff_ac3_exponent_min(uint8_t *exp, int num_reuse_blocks, int nb_coefs) |
29 |
;----------------------------------------------------------------------------- |
30 |
|
31 |
%macro AC3_EXPONENT_MIN 1 |
32 |
cglobal ac3_exponent_min_%1, 3,4,2, exp, reuse_blks, expn, offset |
33 |
shl reuse_blksq, 8 |
34 |
jz .end |
35 |
LOOP_ALIGN |
36 |
.nextexp: |
37 |
mov offsetq, reuse_blksq |
38 |
mova m0, [expq+offsetq] |
39 |
sub offsetq, 256 |
40 |
LOOP_ALIGN |
41 |
.nextblk: |
42 |
PMINUB m0, [expq+offsetq], m1 |
43 |
sub offsetq, 256 |
44 |
jae .nextblk |
45 |
mova [expq], m0 |
46 |
add expq, mmsize |
47 |
sub expnq, mmsize |
48 |
jg .nextexp |
49 |
.end: |
50 |
REP_RET |
51 |
%endmacro |
52 |
|
53 |
%define PMINUB PMINUB_MMX |
54 |
%define LOOP_ALIGN |
55 |
INIT_MMX |
56 |
AC3_EXPONENT_MIN mmx |
57 |
%ifdef HAVE_MMX2 |
58 |
%define PMINUB PMINUB_MMXEXT |
59 |
%define LOOP_ALIGN ALIGN 16 |
60 |
AC3_EXPONENT_MIN mmxext |
61 |
%endif |
62 |
%ifdef HAVE_SSE |
63 |
INIT_XMM |
64 |
AC3_EXPONENT_MIN sse2 |
65 |
%endif |
66 |
%undef PMINUB |
67 |
%undef LOOP_ALIGN |