annotate liba52/downmix.c @ 23572:a00685941686

demux_mkv very long seek fix The seek code searching for the closest position in the index used "int64_t min_diff=0xFFFFFFFL" as the initial "further from the goal than any real alternative" value. The unit is milliseconds so seeks more than about 75 hours past the end of the file would fail to recognize the last index position as the best match. This was triggered in practice by chapter seek code which apparently uses a seek of 1000000000 seconds forward to mean "seek to the end". The practical effect was that trying to seek to the next chapter in a file without chapters made MPlayer block until it finished reading the file from the current position to the end. Fixed by increasing the initial value from FFFFFFF to FFFFFFFFFFFFFFF.
author uau
date Wed, 20 Jun 2007 18:19:03 +0000
parents 6334c14b38eb
children 9dce785d9ba6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3394
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
1 /*
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
2 * downmix.c
18720
4bad7f00556e sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 18104
diff changeset
3 * Copyright (C) 2000-2002 Michel Lespinasse <walken@zoy.org>
3394
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
4 * Copyright (C) 1999-2000 Aaron Holtzman <aholtzma@ess.engr.uvic.ca>
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
5 *
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
6 * This file is part of a52dec, a free ATSC A-52 stream decoder.
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
7 * See http://liba52.sourceforge.net/ for updates.
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
8 *
14991
07f1e7669772 Mark modified files as such to comply more closely with GPL ¡ø2a.
diego
parents: 12137
diff changeset
9 * Modified for use with MPlayer, changes contained in liba52_changes.diff.
18783
0783dd397f74 CVS --> Subversion in copyright notices
diego
parents: 18721
diff changeset
10 * detailed changelog at http://svn.mplayerhq.hu/mplayer/trunk/
14991
07f1e7669772 Mark modified files as such to comply more closely with GPL ¡ø2a.
diego
parents: 12137
diff changeset
11 * $Id$
07f1e7669772 Mark modified files as such to comply more closely with GPL ¡ø2a.
diego
parents: 12137
diff changeset
12 *
3394
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
13 * a52dec is free software; you can redistribute it and/or modify
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
14 * it under the terms of the GNU General Public License as published by
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
15 * the Free Software Foundation; either version 2 of the License, or
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
16 * (at your option) any later version.
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
17 *
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
18 * a52dec is distributed in the hope that it will be useful,
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
21 * GNU General Public License for more details.
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
22 *
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
23 * You should have received a copy of the GNU General Public License
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
24 * along with this program; if not, write to the Free Software
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
25 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
3625
84ff13d4540c sse opt of mix32toS()
michael
parents: 3624
diff changeset
26 *
84ff13d4540c sse opt of mix32toS()
michael
parents: 3624
diff changeset
27 * SSE optimizations from Michael Niedermayer (michaelni@gmx.at)
3394
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
28 */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
29
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
30 #include "config.h"
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
31
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
32 #include <string.h>
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
33 #include <inttypes.h>
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
34
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
35 #include "a52.h"
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
36 #include "a52_internal.h"
3910
db1d556fcf58 runtime cpudetect the liba52 way part 2 (downmix.c)
michael
parents: 3904
diff changeset
37 #include "mm_accel.h"
3394
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
38
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
39 #define CONVERT(acmod,output) (((output) << 3) + (acmod))
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
40
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
41
18720
4bad7f00556e sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 18104
diff changeset
42 void (*a52_downmix)(sample_t * samples, int acmod, int output, sample_t bias,
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
43 sample_t clev, sample_t slev)= NULL;
18720
4bad7f00556e sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 18104
diff changeset
44 void (*a52_upmix)(sample_t * samples, int acmod, int output)= NULL;
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
45
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
46 static void downmix_SSE (sample_t * samples, int acmod, int output, sample_t bias,
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
47 sample_t clev, sample_t slev);
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
48 static void downmix_3dnow (sample_t * samples, int acmod, int output, sample_t bias,
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
49 sample_t clev, sample_t slev);
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
50 static void downmix_C (sample_t * samples, int acmod, int output, sample_t bias,
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
51 sample_t clev, sample_t slev);
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
52 static void upmix_MMX (sample_t * samples, int acmod, int output);
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
53 static void upmix_C (sample_t * samples, int acmod, int output);
3910
db1d556fcf58 runtime cpudetect the liba52 way part 2 (downmix.c)
michael
parents: 3904
diff changeset
54
db1d556fcf58 runtime cpudetect the liba52 way part 2 (downmix.c)
michael
parents: 3904
diff changeset
55 void downmix_accel_init(uint32_t mm_accel)
db1d556fcf58 runtime cpudetect the liba52 way part 2 (downmix.c)
michael
parents: 3904
diff changeset
56 {
18720
4bad7f00556e sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 18104
diff changeset
57 a52_upmix= upmix_C;
4bad7f00556e sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 18104
diff changeset
58 a52_downmix= downmix_C;
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
59 #if defined(ARCH_X86) || defined(ARCH_X86_64)
18720
4bad7f00556e sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 18104
diff changeset
60 if(mm_accel & MM_ACCEL_X86_MMX) a52_upmix= upmix_MMX;
4bad7f00556e sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 18104
diff changeset
61 if(mm_accel & MM_ACCEL_X86_SSE) a52_downmix= downmix_SSE;
4bad7f00556e sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 18104
diff changeset
62 if(mm_accel & MM_ACCEL_X86_3DNOW) a52_downmix= downmix_3dnow;
3910
db1d556fcf58 runtime cpudetect the liba52 way part 2 (downmix.c)
michael
parents: 3904
diff changeset
63 #endif
db1d556fcf58 runtime cpudetect the liba52 way part 2 (downmix.c)
michael
parents: 3904
diff changeset
64 }
18721
722ac20fac5f sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 18720
diff changeset
65
18720
4bad7f00556e sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 18104
diff changeset
66 int a52_downmix_init (int input, int flags, sample_t * level,
18721
722ac20fac5f sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 18720
diff changeset
67 sample_t clev, sample_t slev)
3394
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
68 {
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
69 static uint8_t table[11][8] = {
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
70 {A52_CHANNEL, A52_DOLBY, A52_STEREO, A52_STEREO,
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
71 A52_STEREO, A52_STEREO, A52_STEREO, A52_STEREO},
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
72 {A52_MONO, A52_MONO, A52_MONO, A52_MONO,
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
73 A52_MONO, A52_MONO, A52_MONO, A52_MONO},
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
74 {A52_CHANNEL, A52_DOLBY, A52_STEREO, A52_STEREO,
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
75 A52_STEREO, A52_STEREO, A52_STEREO, A52_STEREO},
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
76 {A52_CHANNEL, A52_DOLBY, A52_STEREO, A52_3F,
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
77 A52_STEREO, A52_3F, A52_STEREO, A52_3F},
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
78 {A52_CHANNEL, A52_DOLBY, A52_STEREO, A52_STEREO,
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
79 A52_2F1R, A52_2F1R, A52_2F1R, A52_2F1R},
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
80 {A52_CHANNEL, A52_DOLBY, A52_STEREO, A52_STEREO,
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
81 A52_2F1R, A52_3F1R, A52_2F1R, A52_3F1R},
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
82 {A52_CHANNEL, A52_DOLBY, A52_STEREO, A52_3F,
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
83 A52_2F2R, A52_2F2R, A52_2F2R, A52_2F2R},
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
84 {A52_CHANNEL, A52_DOLBY, A52_STEREO, A52_3F,
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
85 A52_2F2R, A52_3F2R, A52_2F2R, A52_3F2R},
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
86 {A52_CHANNEL1, A52_MONO, A52_MONO, A52_MONO,
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
87 A52_MONO, A52_MONO, A52_MONO, A52_MONO},
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
88 {A52_CHANNEL2, A52_MONO, A52_MONO, A52_MONO,
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
89 A52_MONO, A52_MONO, A52_MONO, A52_MONO},
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
90 {A52_CHANNEL, A52_DOLBY, A52_STEREO, A52_DOLBY,
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
91 A52_DOLBY, A52_DOLBY, A52_DOLBY, A52_DOLBY}
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
92 };
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
93 int output;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
94
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
95 output = flags & A52_CHANNEL_MASK;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
96 if (output > A52_DOLBY)
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
97 return -1;
18721
722ac20fac5f sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 18720
diff changeset
98
3394
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
99 output = table[output][input & 7];
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
100
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
101 if ((output == A52_STEREO) &&
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
102 ((input == A52_DOLBY) || ((input == A52_3F) && (clev == LEVEL_3DB))))
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
103 output = A52_DOLBY;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
104
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
105 if (flags & A52_ADJUST_LEVEL)
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
106 switch (CONVERT (input & 7, output)) {
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
107
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
108 case CONVERT (A52_3F, A52_MONO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
109 *level *= LEVEL_3DB / (1 + clev);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
110 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
111
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
112 case CONVERT (A52_STEREO, A52_MONO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
113 case CONVERT (A52_2F2R, A52_2F1R):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
114 case CONVERT (A52_3F2R, A52_3F1R):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
115 level_3db:
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
116 *level *= LEVEL_3DB;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
117 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
118
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
119 case CONVERT (A52_3F2R, A52_2F1R):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
120 if (clev < LEVEL_PLUS3DB - 1)
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
121 goto level_3db;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
122 /* break thru */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
123 case CONVERT (A52_3F, A52_STEREO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
124 case CONVERT (A52_3F1R, A52_2F1R):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
125 case CONVERT (A52_3F1R, A52_2F2R):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
126 case CONVERT (A52_3F2R, A52_2F2R):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
127 *level /= 1 + clev;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
128 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
129
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
130 case CONVERT (A52_2F1R, A52_MONO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
131 *level *= LEVEL_PLUS3DB / (2 + slev);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
132 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
133
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
134 case CONVERT (A52_2F1R, A52_STEREO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
135 case CONVERT (A52_3F1R, A52_3F):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
136 *level /= 1 + slev * LEVEL_3DB;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
137 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
138
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
139 case CONVERT (A52_3F1R, A52_MONO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
140 *level *= LEVEL_3DB / (1 + clev + 0.5 * slev);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
141 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
142
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
143 case CONVERT (A52_3F1R, A52_STEREO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
144 *level /= 1 + clev + slev * LEVEL_3DB;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
145 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
146
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
147 case CONVERT (A52_2F2R, A52_MONO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
148 *level *= LEVEL_3DB / (1 + slev);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
149 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
150
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
151 case CONVERT (A52_2F2R, A52_STEREO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
152 case CONVERT (A52_3F2R, A52_3F):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
153 *level /= 1 + slev;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
154 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
155
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
156 case CONVERT (A52_3F2R, A52_MONO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
157 *level *= LEVEL_3DB / (1 + clev + slev);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
158 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
159
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
160 case CONVERT (A52_3F2R, A52_STEREO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
161 *level /= 1 + clev + slev;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
162 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
163
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
164 case CONVERT (A52_MONO, A52_DOLBY):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
165 *level *= LEVEL_PLUS3DB;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
166 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
167
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
168 case CONVERT (A52_3F, A52_DOLBY):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
169 case CONVERT (A52_2F1R, A52_DOLBY):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
170 *level *= 1 / (1 + LEVEL_3DB);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
171 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
172
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
173 case CONVERT (A52_3F1R, A52_DOLBY):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
174 case CONVERT (A52_2F2R, A52_DOLBY):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
175 *level *= 1 / (1 + 2 * LEVEL_3DB);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
176 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
177
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
178 case CONVERT (A52_3F2R, A52_DOLBY):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
179 *level *= 1 / (1 + 3 * LEVEL_3DB);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
180 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
181 }
18721
722ac20fac5f sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 18720
diff changeset
182
3394
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
183 return output;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
184 }
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
185
18720
4bad7f00556e sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 18104
diff changeset
186 int a52_downmix_coeff (sample_t * coeff, int acmod, int output, sample_t level,
18721
722ac20fac5f sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 18720
diff changeset
187 sample_t clev, sample_t slev)
3394
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
188 {
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
189 switch (CONVERT (acmod, output & A52_CHANNEL_MASK)) {
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
190
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
191 case CONVERT (A52_CHANNEL, A52_CHANNEL):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
192 case CONVERT (A52_MONO, A52_MONO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
193 case CONVERT (A52_STEREO, A52_STEREO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
194 case CONVERT (A52_3F, A52_3F):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
195 case CONVERT (A52_2F1R, A52_2F1R):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
196 case CONVERT (A52_3F1R, A52_3F1R):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
197 case CONVERT (A52_2F2R, A52_2F2R):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
198 case CONVERT (A52_3F2R, A52_3F2R):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
199 case CONVERT (A52_STEREO, A52_DOLBY):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
200 coeff[0] = coeff[1] = coeff[2] = coeff[3] = coeff[4] = level;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
201 return 0;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
202
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
203 case CONVERT (A52_CHANNEL, A52_MONO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
204 coeff[0] = coeff[1] = level * LEVEL_6DB;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
205 return 3;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
206
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
207 case CONVERT (A52_STEREO, A52_MONO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
208 coeff[0] = coeff[1] = level * LEVEL_3DB;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
209 return 3;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
210
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
211 case CONVERT (A52_3F, A52_MONO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
212 coeff[0] = coeff[2] = level * LEVEL_3DB;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
213 coeff[1] = level * clev * LEVEL_PLUS3DB;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
214 return 7;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
215
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
216 case CONVERT (A52_2F1R, A52_MONO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
217 coeff[0] = coeff[1] = level * LEVEL_3DB;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
218 coeff[2] = level * slev * LEVEL_3DB;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
219 return 7;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
220
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
221 case CONVERT (A52_2F2R, A52_MONO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
222 coeff[0] = coeff[1] = level * LEVEL_3DB;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
223 coeff[2] = coeff[3] = level * slev * LEVEL_3DB;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
224 return 15;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
225
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
226 case CONVERT (A52_3F1R, A52_MONO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
227 coeff[0] = coeff[2] = level * LEVEL_3DB;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
228 coeff[1] = level * clev * LEVEL_PLUS3DB;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
229 coeff[3] = level * slev * LEVEL_3DB;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
230 return 15;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
231
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
232 case CONVERT (A52_3F2R, A52_MONO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
233 coeff[0] = coeff[2] = level * LEVEL_3DB;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
234 coeff[1] = level * clev * LEVEL_PLUS3DB;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
235 coeff[3] = coeff[4] = level * slev * LEVEL_3DB;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
236 return 31;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
237
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
238 case CONVERT (A52_MONO, A52_DOLBY):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
239 coeff[0] = level * LEVEL_3DB;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
240 return 0;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
241
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
242 case CONVERT (A52_3F, A52_DOLBY):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
243 clev = LEVEL_3DB;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
244 case CONVERT (A52_3F, A52_STEREO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
245 case CONVERT (A52_3F1R, A52_2F1R):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
246 case CONVERT (A52_3F2R, A52_2F2R):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
247 coeff[0] = coeff[2] = coeff[3] = coeff[4] = level;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
248 coeff[1] = level * clev;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
249 return 7;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
250
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
251 case CONVERT (A52_2F1R, A52_DOLBY):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
252 slev = 1;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
253 case CONVERT (A52_2F1R, A52_STEREO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
254 coeff[0] = coeff[1] = level;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
255 coeff[2] = level * slev * LEVEL_3DB;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
256 return 7;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
257
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
258 case CONVERT (A52_3F1R, A52_DOLBY):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
259 clev = LEVEL_3DB;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
260 slev = 1;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
261 case CONVERT (A52_3F1R, A52_STEREO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
262 coeff[0] = coeff[2] = level;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
263 coeff[1] = level * clev;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
264 coeff[3] = level * slev * LEVEL_3DB;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
265 return 15;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
266
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
267 case CONVERT (A52_2F2R, A52_DOLBY):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
268 slev = LEVEL_3DB;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
269 case CONVERT (A52_2F2R, A52_STEREO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
270 coeff[0] = coeff[1] = level;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
271 coeff[2] = coeff[3] = level * slev;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
272 return 15;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
273
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
274 case CONVERT (A52_3F2R, A52_DOLBY):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
275 clev = LEVEL_3DB;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
276 case CONVERT (A52_3F2R, A52_2F1R):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
277 slev = LEVEL_3DB;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
278 case CONVERT (A52_3F2R, A52_STEREO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
279 coeff[0] = coeff[2] = level;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
280 coeff[1] = level * clev;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
281 coeff[3] = coeff[4] = level * slev;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
282 return 31;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
283
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
284 case CONVERT (A52_3F1R, A52_3F):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
285 coeff[0] = coeff[1] = coeff[2] = level;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
286 coeff[3] = level * slev * LEVEL_3DB;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
287 return 13;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
288
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
289 case CONVERT (A52_3F2R, A52_3F):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
290 coeff[0] = coeff[1] = coeff[2] = level;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
291 coeff[3] = coeff[4] = level * slev;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
292 return 29;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
293
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
294 case CONVERT (A52_2F2R, A52_2F1R):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
295 coeff[0] = coeff[1] = level;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
296 coeff[2] = coeff[3] = level * LEVEL_3DB;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
297 return 12;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
298
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
299 case CONVERT (A52_3F2R, A52_3F1R):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
300 coeff[0] = coeff[1] = coeff[2] = level;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
301 coeff[3] = coeff[4] = level * LEVEL_3DB;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
302 return 24;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
303
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
304 case CONVERT (A52_2F1R, A52_2F2R):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
305 coeff[0] = coeff[1] = level;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
306 coeff[2] = level * LEVEL_3DB;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
307 return 0;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
308
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
309 case CONVERT (A52_3F1R, A52_2F2R):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
310 coeff[0] = coeff[2] = level;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
311 coeff[1] = level * clev;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
312 coeff[3] = level * LEVEL_3DB;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
313 return 7;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
314
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
315 case CONVERT (A52_3F1R, A52_3F2R):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
316 coeff[0] = coeff[1] = coeff[2] = level;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
317 coeff[3] = level * LEVEL_3DB;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
318 return 0;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
319
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
320 case CONVERT (A52_CHANNEL, A52_CHANNEL1):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
321 coeff[0] = level;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
322 coeff[1] = 0;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
323 return 0;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
324
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
325 case CONVERT (A52_CHANNEL, A52_CHANNEL2):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
326 coeff[0] = 0;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
327 coeff[1] = level;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
328 return 0;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
329 }
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
330
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
331 return -1; /* NOTREACHED */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
332 }
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
333
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
334 static void mix2to1 (sample_t * dest, sample_t * src, sample_t bias)
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
335 {
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
336 int i;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
337
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
338 for (i = 0; i < 256; i++)
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
339 dest[i] += src[i] + bias;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
340 }
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
341
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
342 static void mix3to1 (sample_t * samples, sample_t bias)
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
343 {
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
344 int i;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
345
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
346 for (i = 0; i < 256; i++)
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
347 samples[i] += samples[i + 256] + samples[i + 512] + bias;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
348 }
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
349
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
350 static void mix4to1 (sample_t * samples, sample_t bias)
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
351 {
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
352 int i;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
353
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
354 for (i = 0; i < 256; i++)
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
355 samples[i] += (samples[i + 256] + samples[i + 512] +
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
356 samples[i + 768] + bias);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
357 }
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
358
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
359 static void mix5to1 (sample_t * samples, sample_t bias)
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
360 {
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
361 int i;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
362
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
363 for (i = 0; i < 256; i++)
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
364 samples[i] += (samples[i + 256] + samples[i + 512] +
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
365 samples[i + 768] + samples[i + 1024] + bias);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
366 }
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
367
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
368 static void mix3to2 (sample_t * samples, sample_t bias)
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
369 {
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
370 int i;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
371 sample_t common;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
372
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
373 for (i = 0; i < 256; i++) {
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
374 common = samples[i + 256] + bias;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
375 samples[i] += common;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
376 samples[i + 256] = samples[i + 512] + common;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
377 }
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
378 }
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
379
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
380 static void mix21to2 (sample_t * left, sample_t * right, sample_t bias)
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
381 {
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
382 int i;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
383 sample_t common;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
384
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
385 for (i = 0; i < 256; i++) {
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
386 common = right[i + 256] + bias;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
387 left[i] += common;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
388 right[i] += common;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
389 }
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
390 }
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
391
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
392 static void mix21toS (sample_t * samples, sample_t bias)
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
393 {
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
394 int i;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
395 sample_t surround;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
396
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
397 for (i = 0; i < 256; i++) {
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
398 surround = samples[i + 512];
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
399 samples[i] += bias - surround;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
400 samples[i + 256] += bias + surround;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
401 }
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
402 }
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
403
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
404 static void mix31to2 (sample_t * samples, sample_t bias)
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
405 {
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
406 int i;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
407 sample_t common;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
408
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
409 for (i = 0; i < 256; i++) {
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
410 common = samples[i + 256] + samples[i + 768] + bias;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
411 samples[i] += common;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
412 samples[i + 256] = samples[i + 512] + common;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
413 }
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
414 }
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
415
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
416 static void mix31toS (sample_t * samples, sample_t bias)
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
417 {
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
418 int i;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
419 sample_t common, surround;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
420
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
421 for (i = 0; i < 256; i++) {
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
422 common = samples[i + 256] + bias;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
423 surround = samples[i + 768];
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
424 samples[i] += common - surround;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
425 samples[i + 256] = samples[i + 512] + common + surround;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
426 }
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
427 }
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
428
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
429 static void mix22toS (sample_t * samples, sample_t bias)
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
430 {
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
431 int i;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
432 sample_t surround;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
433
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
434 for (i = 0; i < 256; i++) {
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
435 surround = samples[i + 512] + samples[i + 768];
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
436 samples[i] += bias - surround;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
437 samples[i + 256] += bias + surround;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
438 }
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
439 }
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
440
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
441 static void mix32to2 (sample_t * samples, sample_t bias)
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
442 {
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
443 int i;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
444 sample_t common;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
445
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
446 for (i = 0; i < 256; i++) {
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
447 common = samples[i + 256] + bias;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
448 samples[i] += common + samples[i + 768];
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
449 samples[i + 256] = common + samples[i + 512] + samples[i + 1024];
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
450 }
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
451 }
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
452
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
453 static void mix32toS (sample_t * samples, sample_t bias)
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
454 {
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
455 int i;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
456 sample_t common, surround;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
457
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
458 for (i = 0; i < 256; i++) {
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
459 common = samples[i + 256] + bias;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
460 surround = samples[i + 768] + samples[i + 1024];
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
461 samples[i] += common - surround;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
462 samples[i + 256] = samples[i + 512] + common + surround;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
463 }
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
464 }
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
465
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
466 static void move2to1 (sample_t * src, sample_t * dest, sample_t bias)
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
467 {
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
468 int i;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
469
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
470 for (i = 0; i < 256; i++)
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
471 dest[i] = src[i] + src[i + 256] + bias;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
472 }
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
473
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
474 static void zero (sample_t * samples)
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
475 {
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
476 int i;
18721
722ac20fac5f sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 18720
diff changeset
477
3394
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
478 for (i = 0; i < 256; i++)
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
479 samples[i] = 0;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
480 }
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
481
18720
4bad7f00556e sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 18104
diff changeset
482 void downmix_C (sample_t * samples, int acmod, int output, sample_t bias,
18721
722ac20fac5f sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 18720
diff changeset
483 sample_t clev, sample_t slev)
3394
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
484 {
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
485 switch (CONVERT (acmod, output & A52_CHANNEL_MASK)) {
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
486
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
487 case CONVERT (A52_CHANNEL, A52_CHANNEL2):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
488 memcpy (samples, samples + 256, 256 * sizeof (sample_t));
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
489 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
490
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
491 case CONVERT (A52_CHANNEL, A52_MONO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
492 case CONVERT (A52_STEREO, A52_MONO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
493 mix_2to1:
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
494 mix2to1 (samples, samples + 256, bias);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
495 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
496
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
497 case CONVERT (A52_2F1R, A52_MONO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
498 if (slev == 0)
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
499 goto mix_2to1;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
500 case CONVERT (A52_3F, A52_MONO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
501 mix_3to1:
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
502 mix3to1 (samples, bias);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
503 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
504
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
505 case CONVERT (A52_3F1R, A52_MONO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
506 if (slev == 0)
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
507 goto mix_3to1;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
508 case CONVERT (A52_2F2R, A52_MONO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
509 if (slev == 0)
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
510 goto mix_2to1;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
511 mix4to1 (samples, bias);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
512 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
513
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
514 case CONVERT (A52_3F2R, A52_MONO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
515 if (slev == 0)
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
516 goto mix_3to1;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
517 mix5to1 (samples, bias);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
518 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
519
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
520 case CONVERT (A52_MONO, A52_DOLBY):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
521 memcpy (samples + 256, samples, 256 * sizeof (sample_t));
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
522 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
523
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
524 case CONVERT (A52_3F, A52_STEREO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
525 case CONVERT (A52_3F, A52_DOLBY):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
526 mix_3to2:
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
527 mix3to2 (samples, bias);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
528 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
529
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
530 case CONVERT (A52_2F1R, A52_STEREO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
531 if (slev == 0)
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
532 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
533 mix21to2 (samples, samples + 256, bias);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
534 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
535
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
536 case CONVERT (A52_2F1R, A52_DOLBY):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
537 mix21toS (samples, bias);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
538 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
539
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
540 case CONVERT (A52_3F1R, A52_STEREO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
541 if (slev == 0)
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
542 goto mix_3to2;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
543 mix31to2 (samples, bias);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
544 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
545
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
546 case CONVERT (A52_3F1R, A52_DOLBY):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
547 mix31toS (samples, bias);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
548 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
549
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
550 case CONVERT (A52_2F2R, A52_STEREO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
551 if (slev == 0)
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
552 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
553 mix2to1 (samples, samples + 512, bias);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
554 mix2to1 (samples + 256, samples + 768, bias);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
555 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
556
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
557 case CONVERT (A52_2F2R, A52_DOLBY):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
558 mix22toS (samples, bias);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
559 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
560
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
561 case CONVERT (A52_3F2R, A52_STEREO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
562 if (slev == 0)
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
563 goto mix_3to2;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
564 mix32to2 (samples, bias);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
565 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
566
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
567 case CONVERT (A52_3F2R, A52_DOLBY):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
568 mix32toS (samples, bias);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
569 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
570
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
571 case CONVERT (A52_3F1R, A52_3F):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
572 if (slev == 0)
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
573 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
574 mix21to2 (samples, samples + 512, bias);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
575 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
576
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
577 case CONVERT (A52_3F2R, A52_3F):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
578 if (slev == 0)
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
579 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
580 mix2to1 (samples, samples + 768, bias);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
581 mix2to1 (samples + 512, samples + 1024, bias);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
582 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
583
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
584 case CONVERT (A52_3F1R, A52_2F1R):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
585 mix3to2 (samples, bias);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
586 memcpy (samples + 512, samples + 768, 256 * sizeof (sample_t));
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
587 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
588
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
589 case CONVERT (A52_2F2R, A52_2F1R):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
590 mix2to1 (samples + 512, samples + 768, bias);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
591 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
592
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
593 case CONVERT (A52_3F2R, A52_2F1R):
3678
265680bbdcfd mix3to2 in SSE
michael
parents: 3677
diff changeset
594 mix3to2 (samples, bias); //FIXME possible bug? (output doesnt seem to be used)
3394
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
595 move2to1 (samples + 768, samples + 512, bias);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
596 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
597
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
598 case CONVERT (A52_3F2R, A52_3F1R):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
599 mix2to1 (samples + 768, samples + 1024, bias);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
600 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
601
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
602 case CONVERT (A52_2F1R, A52_2F2R):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
603 memcpy (samples + 768, samples + 512, 256 * sizeof (sample_t));
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
604 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
605
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
606 case CONVERT (A52_3F1R, A52_2F2R):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
607 mix3to2 (samples, bias);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
608 memcpy (samples + 512, samples + 768, 256 * sizeof (sample_t));
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
609 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
610
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
611 case CONVERT (A52_3F2R, A52_2F2R):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
612 mix3to2 (samples, bias);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
613 memcpy (samples + 512, samples + 768, 256 * sizeof (sample_t));
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
614 memcpy (samples + 768, samples + 1024, 256 * sizeof (sample_t));
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
615 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
616
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
617 case CONVERT (A52_3F1R, A52_3F2R):
12137
9f297a651e11 100l and sync with upstream, patch by rgselk
alex
parents: 5912
diff changeset
618 memcpy (samples + 1024, samples + 768, 256 * sizeof (sample_t));
3394
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
619 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
620 }
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
621 }
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
622
18720
4bad7f00556e sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 18104
diff changeset
623 void upmix_C (sample_t * samples, int acmod, int output)
3394
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
624 {
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
625 switch (CONVERT (acmod, output & A52_CHANNEL_MASK)) {
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
626
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
627 case CONVERT (A52_CHANNEL, A52_CHANNEL2):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
628 memcpy (samples + 256, samples, 256 * sizeof (sample_t));
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
629 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
630
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
631 case CONVERT (A52_3F2R, A52_MONO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
632 zero (samples + 1024);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
633 case CONVERT (A52_3F1R, A52_MONO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
634 case CONVERT (A52_2F2R, A52_MONO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
635 zero (samples + 768);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
636 case CONVERT (A52_3F, A52_MONO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
637 case CONVERT (A52_2F1R, A52_MONO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
638 zero (samples + 512);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
639 case CONVERT (A52_CHANNEL, A52_MONO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
640 case CONVERT (A52_STEREO, A52_MONO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
641 zero (samples + 256);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
642 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
643
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
644 case CONVERT (A52_3F2R, A52_STEREO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
645 case CONVERT (A52_3F2R, A52_DOLBY):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
646 zero (samples + 1024);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
647 case CONVERT (A52_3F1R, A52_STEREO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
648 case CONVERT (A52_3F1R, A52_DOLBY):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
649 zero (samples + 768);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
650 case CONVERT (A52_3F, A52_STEREO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
651 case CONVERT (A52_3F, A52_DOLBY):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
652 mix_3to2:
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
653 memcpy (samples + 512, samples + 256, 256 * sizeof (sample_t));
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
654 zero (samples + 256);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
655 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
656
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
657 case CONVERT (A52_2F2R, A52_STEREO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
658 case CONVERT (A52_2F2R, A52_DOLBY):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
659 zero (samples + 768);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
660 case CONVERT (A52_2F1R, A52_STEREO):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
661 case CONVERT (A52_2F1R, A52_DOLBY):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
662 zero (samples + 512);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
663 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
664
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
665 case CONVERT (A52_3F2R, A52_3F):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
666 zero (samples + 1024);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
667 case CONVERT (A52_3F1R, A52_3F):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
668 case CONVERT (A52_2F2R, A52_2F1R):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
669 zero (samples + 768);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
670 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
671
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
672 case CONVERT (A52_3F2R, A52_3F1R):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
673 zero (samples + 1024);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
674 break;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
675
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
676 case CONVERT (A52_3F2R, A52_2F1R):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
677 zero (samples + 1024);
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
678 case CONVERT (A52_3F1R, A52_2F1R):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
679 mix_31to21:
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
680 memcpy (samples + 768, samples + 512, 256 * sizeof (sample_t));
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
681 goto mix_3to2;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
682
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
683 case CONVERT (A52_3F2R, A52_2F2R):
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
684 memcpy (samples + 1024, samples + 768, 256 * sizeof (sample_t));
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
685 goto mix_31to21;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
686 }
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
687 }
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
688
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
689 #if defined(ARCH_X86) || defined(ARCH_X86_64)
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
690 static void mix2to1_SSE (sample_t * dest, sample_t * src, sample_t bias)
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
691 {
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
692 asm volatile(
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
693 "movlps %2, %%xmm7 \n\t"
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
694 "shufps $0x00, %%xmm7, %%xmm7 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
695 "mov $-1024, %%"REG_S" \n\t"
19372
6334c14b38eb Replace asmalign.h hack by ASMALIGN cpp macros from config.h.
diego
parents: 18783
diff changeset
696 ASMALIGN(4)
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
697 "1: \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
698 "movaps (%0, %%"REG_S"), %%xmm0 \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
699 "movaps 16(%0, %%"REG_S"), %%xmm1\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
700 "addps (%1, %%"REG_S"), %%xmm0 \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
701 "addps 16(%1, %%"REG_S"), %%xmm1\n\t"
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
702 "addps %%xmm7, %%xmm0 \n\t"
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
703 "addps %%xmm7, %%xmm1 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
704 "movaps %%xmm0, (%1, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
705 "movaps %%xmm1, 16(%1, %%"REG_S")\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
706 "add $32, %%"REG_S" \n\t"
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
707 " jnz 1b \n\t"
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
708 :: "r" (src+256), "r" (dest+256), "m" (bias)
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
709 : "%"REG_S
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
710 );
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
711 }
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
712
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
713 static void mix3to1_SSE (sample_t * samples, sample_t bias)
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
714 {
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
715 asm volatile(
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
716 "movlps %1, %%xmm7 \n\t"
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
717 "shufps $0x00, %%xmm7, %%xmm7 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
718 "mov $-1024, %%"REG_S" \n\t"
19372
6334c14b38eb Replace asmalign.h hack by ASMALIGN cpp macros from config.h.
diego
parents: 18783
diff changeset
719 ASMALIGN(4)
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
720 "1: \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
721 "movaps (%0, %%"REG_S"), %%xmm0 \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
722 "movaps 1024(%0, %%"REG_S"), %%xmm1\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
723 "addps 2048(%0, %%"REG_S"), %%xmm0\n\t"
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
724 "addps %%xmm7, %%xmm1 \n\t"
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
725 "addps %%xmm1, %%xmm0 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
726 "movaps %%xmm0, (%0, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
727 "add $16, %%"REG_S" \n\t"
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
728 " jnz 1b \n\t"
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
729 :: "r" (samples+256), "m" (bias)
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
730 : "%"REG_S
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
731 );
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
732 }
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
733
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
734 static void mix4to1_SSE (sample_t * samples, sample_t bias)
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
735 {
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
736 asm volatile(
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
737 "movlps %1, %%xmm7 \n\t"
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
738 "shufps $0x00, %%xmm7, %%xmm7 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
739 "mov $-1024, %%"REG_S" \n\t"
19372
6334c14b38eb Replace asmalign.h hack by ASMALIGN cpp macros from config.h.
diego
parents: 18783
diff changeset
740 ASMALIGN(4)
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
741 "1: \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
742 "movaps (%0, %%"REG_S"), %%xmm0 \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
743 "movaps 1024(%0, %%"REG_S"), %%xmm1\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
744 "addps 2048(%0, %%"REG_S"), %%xmm0\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
745 "addps 3072(%0, %%"REG_S"), %%xmm1\n\t"
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
746 "addps %%xmm7, %%xmm0 \n\t"
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
747 "addps %%xmm1, %%xmm0 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
748 "movaps %%xmm0, (%0, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
749 "add $16, %%"REG_S" \n\t"
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
750 " jnz 1b \n\t"
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
751 :: "r" (samples+256), "m" (bias)
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
752 : "%"REG_S
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
753 );
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
754 }
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
755
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
756 static void mix5to1_SSE (sample_t * samples, sample_t bias)
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
757 {
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
758 asm volatile(
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
759 "movlps %1, %%xmm7 \n\t"
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
760 "shufps $0x00, %%xmm7, %%xmm7 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
761 "mov $-1024, %%"REG_S" \n\t"
19372
6334c14b38eb Replace asmalign.h hack by ASMALIGN cpp macros from config.h.
diego
parents: 18783
diff changeset
762 ASMALIGN(4)
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
763 "1: \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
764 "movaps (%0, %%"REG_S"), %%xmm0 \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
765 "movaps 1024(%0, %%"REG_S"), %%xmm1\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
766 "addps 2048(%0, %%"REG_S"), %%xmm0\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
767 "addps 3072(%0, %%"REG_S"), %%xmm1\n\t"
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
768 "addps %%xmm7, %%xmm0 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
769 "addps 4096(%0, %%"REG_S"), %%xmm1\n\t"
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
770 "addps %%xmm1, %%xmm0 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
771 "movaps %%xmm0, (%0, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
772 "add $16, %%"REG_S" \n\t"
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
773 " jnz 1b \n\t"
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
774 :: "r" (samples+256), "m" (bias)
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
775 : "%"REG_S
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
776 );
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
777 }
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
778
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
779 static void mix3to2_SSE (sample_t * samples, sample_t bias)
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
780 {
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
781 asm volatile(
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
782 "movlps %1, %%xmm7 \n\t"
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
783 "shufps $0x00, %%xmm7, %%xmm7 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
784 "mov $-1024, %%"REG_S" \n\t"
19372
6334c14b38eb Replace asmalign.h hack by ASMALIGN cpp macros from config.h.
diego
parents: 18783
diff changeset
785 ASMALIGN(4)
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
786 "1: \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
787 "movaps 1024(%0, %%"REG_S"), %%xmm0\n\t"
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
788 "addps %%xmm7, %%xmm0 \n\t" //common
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
789 "movaps (%0, %%"REG_S"), %%xmm1 \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
790 "movaps 2048(%0, %%"REG_S"), %%xmm2\n\t"
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
791 "addps %%xmm0, %%xmm1 \n\t"
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
792 "addps %%xmm0, %%xmm2 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
793 "movaps %%xmm1, (%0, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
794 "movaps %%xmm2, 1024(%0, %%"REG_S")\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
795 "add $16, %%"REG_S" \n\t"
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
796 " jnz 1b \n\t"
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
797 :: "r" (samples+256), "m" (bias)
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
798 : "%"REG_S
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
799 );
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
800 }
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
801
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
802 static void mix21to2_SSE (sample_t * left, sample_t * right, sample_t bias)
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
803 {
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
804 asm volatile(
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
805 "movlps %2, %%xmm7 \n\t"
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
806 "shufps $0x00, %%xmm7, %%xmm7 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
807 "mov $-1024, %%"REG_S" \n\t"
19372
6334c14b38eb Replace asmalign.h hack by ASMALIGN cpp macros from config.h.
diego
parents: 18783
diff changeset
808 ASMALIGN(4)
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
809 "1: \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
810 "movaps 1024(%1, %%"REG_S"), %%xmm0\n\t"
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
811 "addps %%xmm7, %%xmm0 \n\t" //common
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
812 "movaps (%0, %%"REG_S"), %%xmm1 \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
813 "movaps (%1, %%"REG_S"), %%xmm2 \n\t"
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
814 "addps %%xmm0, %%xmm1 \n\t"
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
815 "addps %%xmm0, %%xmm2 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
816 "movaps %%xmm1, (%0, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
817 "movaps %%xmm2, (%1, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
818 "add $16, %%"REG_S" \n\t"
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
819 " jnz 1b \n\t"
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
820 :: "r" (left+256), "r" (right+256), "m" (bias)
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
821 : "%"REG_S
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
822 );
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
823 }
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
824
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
825 static void mix21toS_SSE (sample_t * samples, sample_t bias)
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
826 {
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
827 asm volatile(
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
828 "movlps %1, %%xmm7 \n\t"
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
829 "shufps $0x00, %%xmm7, %%xmm7 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
830 "mov $-1024, %%"REG_S" \n\t"
19372
6334c14b38eb Replace asmalign.h hack by ASMALIGN cpp macros from config.h.
diego
parents: 18783
diff changeset
831 ASMALIGN(4)
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
832 "1: \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
833 "movaps 2048(%0, %%"REG_S"), %%xmm0\n\t" // surround
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
834 "movaps (%0, %%"REG_S"), %%xmm1 \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
835 "movaps 1024(%0, %%"REG_S"), %%xmm2\n\t"
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
836 "addps %%xmm7, %%xmm1 \n\t"
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
837 "addps %%xmm7, %%xmm2 \n\t"
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
838 "subps %%xmm0, %%xmm1 \n\t"
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
839 "addps %%xmm0, %%xmm2 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
840 "movaps %%xmm1, (%0, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
841 "movaps %%xmm2, 1024(%0, %%"REG_S")\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
842 "add $16, %%"REG_S" \n\t"
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
843 " jnz 1b \n\t"
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
844 :: "r" (samples+256), "m" (bias)
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
845 : "%"REG_S
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
846 );
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
847 }
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
848
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
849 static void mix31to2_SSE (sample_t * samples, sample_t bias)
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
850 {
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
851 asm volatile(
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
852 "movlps %1, %%xmm7 \n\t"
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
853 "shufps $0x00, %%xmm7, %%xmm7 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
854 "mov $-1024, %%"REG_S" \n\t"
19372
6334c14b38eb Replace asmalign.h hack by ASMALIGN cpp macros from config.h.
diego
parents: 18783
diff changeset
855 ASMALIGN(4)
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
856 "1: \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
857 "movaps 1024(%0, %%"REG_S"), %%xmm0\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
858 "addps 3072(%0, %%"REG_S"), %%xmm0\n\t"
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
859 "addps %%xmm7, %%xmm0 \n\t" // common
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
860 "movaps (%0, %%"REG_S"), %%xmm1 \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
861 "movaps 2048(%0, %%"REG_S"), %%xmm2\n\t"
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
862 "addps %%xmm0, %%xmm1 \n\t"
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
863 "addps %%xmm0, %%xmm2 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
864 "movaps %%xmm1, (%0, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
865 "movaps %%xmm2, 1024(%0, %%"REG_S")\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
866 "add $16, %%"REG_S" \n\t"
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
867 " jnz 1b \n\t"
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
868 :: "r" (samples+256), "m" (bias)
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
869 : "%"REG_S
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
870 );
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
871 }
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
872
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
873 static void mix31toS_SSE (sample_t * samples, sample_t bias)
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
874 {
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
875 asm volatile(
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
876 "movlps %1, %%xmm7 \n\t"
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
877 "shufps $0x00, %%xmm7, %%xmm7 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
878 "mov $-1024, %%"REG_S" \n\t"
19372
6334c14b38eb Replace asmalign.h hack by ASMALIGN cpp macros from config.h.
diego
parents: 18783
diff changeset
879 ASMALIGN(4)
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
880 "1: \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
881 "movaps 1024(%0, %%"REG_S"), %%xmm0\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
882 "movaps 3072(%0, %%"REG_S"), %%xmm3\n\t" // surround
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
883 "addps %%xmm7, %%xmm0 \n\t" // common
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
884 "movaps (%0, %%"REG_S"), %%xmm1 \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
885 "movaps 2048(%0, %%"REG_S"), %%xmm2\n\t"
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
886 "addps %%xmm0, %%xmm1 \n\t"
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
887 "addps %%xmm0, %%xmm2 \n\t"
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
888 "subps %%xmm3, %%xmm1 \n\t"
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
889 "addps %%xmm3, %%xmm2 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
890 "movaps %%xmm1, (%0, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
891 "movaps %%xmm2, 1024(%0, %%"REG_S")\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
892 "add $16, %%"REG_S" \n\t"
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
893 " jnz 1b \n\t"
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
894 :: "r" (samples+256), "m" (bias)
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
895 : "%"REG_S
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
896 );
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
897 }
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
898
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
899 static void mix22toS_SSE (sample_t * samples, sample_t bias)
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
900 {
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
901 asm volatile(
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
902 "movlps %1, %%xmm7 \n\t"
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
903 "shufps $0x00, %%xmm7, %%xmm7 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
904 "mov $-1024, %%"REG_S" \n\t"
19372
6334c14b38eb Replace asmalign.h hack by ASMALIGN cpp macros from config.h.
diego
parents: 18783
diff changeset
905 ASMALIGN(4)
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
906 "1: \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
907 "movaps 2048(%0, %%"REG_S"), %%xmm0\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
908 "addps 3072(%0, %%"REG_S"), %%xmm0\n\t" // surround
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
909 "movaps (%0, %%"REG_S"), %%xmm1 \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
910 "movaps 1024(%0, %%"REG_S"), %%xmm2\n\t"
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
911 "addps %%xmm7, %%xmm1 \n\t"
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
912 "addps %%xmm7, %%xmm2 \n\t"
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
913 "subps %%xmm0, %%xmm1 \n\t"
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
914 "addps %%xmm0, %%xmm2 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
915 "movaps %%xmm1, (%0, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
916 "movaps %%xmm2, 1024(%0, %%"REG_S")\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
917 "add $16, %%"REG_S" \n\t"
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
918 " jnz 1b \n\t"
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
919 :: "r" (samples+256), "m" (bias)
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
920 : "%"REG_S
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
921 );
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
922 }
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
923
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
924 static void mix32to2_SSE (sample_t * samples, sample_t bias)
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
925 {
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
926 asm volatile(
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
927 "movlps %1, %%xmm7 \n\t"
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
928 "shufps $0x00, %%xmm7, %%xmm7 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
929 "mov $-1024, %%"REG_S" \n\t"
19372
6334c14b38eb Replace asmalign.h hack by ASMALIGN cpp macros from config.h.
diego
parents: 18783
diff changeset
930 ASMALIGN(4)
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
931 "1: \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
932 "movaps 1024(%0, %%"REG_S"), %%xmm0\n\t"
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
933 "addps %%xmm7, %%xmm0 \n\t" // common
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
934 "movaps %%xmm0, %%xmm1 \n\t" // common
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
935 "addps (%0, %%"REG_S"), %%xmm0 \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
936 "addps 2048(%0, %%"REG_S"), %%xmm1\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
937 "addps 3072(%0, %%"REG_S"), %%xmm0\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
938 "addps 4096(%0, %%"REG_S"), %%xmm1\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
939 "movaps %%xmm0, (%0, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
940 "movaps %%xmm1, 1024(%0, %%"REG_S")\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
941 "add $16, %%"REG_S" \n\t"
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
942 " jnz 1b \n\t"
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
943 :: "r" (samples+256), "m" (bias)
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
944 : "%"REG_S
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
945 );
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
946 }
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
947
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
948 static void mix32toS_SSE (sample_t * samples, sample_t bias)
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
949 {
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
950 asm volatile(
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
951 "movlps %1, %%xmm7 \n\t"
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
952 "shufps $0x00, %%xmm7, %%xmm7 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
953 "mov $-1024, %%"REG_S" \n\t"
19372
6334c14b38eb Replace asmalign.h hack by ASMALIGN cpp macros from config.h.
diego
parents: 18783
diff changeset
954 ASMALIGN(4)
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
955 "1: \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
956 "movaps 1024(%0, %%"REG_S"), %%xmm0\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
957 "movaps 3072(%0, %%"REG_S"), %%xmm2\n\t"
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
958 "addps %%xmm7, %%xmm0 \n\t" // common
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
959 "addps 4096(%0, %%"REG_S"), %%xmm2\n\t" // surround
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
960 "movaps (%0, %%"REG_S"), %%xmm1 \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
961 "movaps 2048(%0, %%"REG_S"), %%xmm3\n\t"
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
962 "subps %%xmm2, %%xmm1 \n\t"
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
963 "addps %%xmm2, %%xmm3 \n\t"
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
964 "addps %%xmm0, %%xmm1 \n\t"
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
965 "addps %%xmm0, %%xmm3 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
966 "movaps %%xmm1, (%0, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
967 "movaps %%xmm3, 1024(%0, %%"REG_S")\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
968 "add $16, %%"REG_S" \n\t"
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
969 " jnz 1b \n\t"
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
970 :: "r" (samples+256), "m" (bias)
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
971 : "%"REG_S
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
972 );
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
973 }
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
974
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
975 static void move2to1_SSE (sample_t * src, sample_t * dest, sample_t bias)
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
976 {
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
977 asm volatile(
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
978 "movlps %2, %%xmm7 \n\t"
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
979 "shufps $0x00, %%xmm7, %%xmm7 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
980 "mov $-1024, %%"REG_S" \n\t"
19372
6334c14b38eb Replace asmalign.h hack by ASMALIGN cpp macros from config.h.
diego
parents: 18783
diff changeset
981 ASMALIGN(4)
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
982 "1: \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
983 "movaps (%0, %%"REG_S"), %%xmm0 \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
984 "movaps 16(%0, %%"REG_S"), %%xmm1\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
985 "addps 1024(%0, %%"REG_S"), %%xmm0\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
986 "addps 1040(%0, %%"REG_S"), %%xmm1\n\t"
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
987 "addps %%xmm7, %%xmm0 \n\t"
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
988 "addps %%xmm7, %%xmm1 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
989 "movaps %%xmm0, (%1, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
990 "movaps %%xmm1, 16(%1, %%"REG_S")\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
991 "add $32, %%"REG_S" \n\t"
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
992 " jnz 1b \n\t"
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
993 :: "r" (src+256), "r" (dest+256), "m" (bias)
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
994 : "%"REG_S
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
995 );
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
996 }
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
997
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
998 static void zero_MMX(sample_t * samples)
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
999 {
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1000 asm volatile(
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1001 "mov $-1024, %%"REG_S" \n\t"
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1002 "pxor %%mm0, %%mm0 \n\t"
19372
6334c14b38eb Replace asmalign.h hack by ASMALIGN cpp macros from config.h.
diego
parents: 18783
diff changeset
1003 ASMALIGN(4)
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1004 "1: \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1005 "movq %%mm0, (%0, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1006 "movq %%mm0, 8(%0, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1007 "movq %%mm0, 16(%0, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1008 "movq %%mm0, 24(%0, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1009 "add $32, %%"REG_S" \n\t"
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1010 " jnz 1b \n\t"
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1011 "emms"
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1012 :: "r" (samples+256)
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1013 : "%"REG_S
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1014 );
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1015 }
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1016
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1017 /*
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1018 I hope dest and src will be at least 8 byte aligned and size
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1019 will devide on 8 without remain
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1020 Note: untested and unused.
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1021 */
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1022 static void copy_MMX(void *dest,const void *src,unsigned size)
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1023 {
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1024 unsigned i;
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1025 size /= 64;
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1026 for(i=0;i<size;i++)
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1027 {
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1028 __asm __volatile(
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1029 "movq %0, %%mm0\n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1030 "movq 8%0, %%mm1\n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1031 "movq 16%0, %%mm2\n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1032 "movq 24%0, %%mm3\n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1033 "movq 32%0, %%mm4\n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1034 "movq 40%0, %%mm5\n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1035 "movq 48%0, %%mm6\n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1036 "movq 56%0, %%mm7\n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1037 "movq %%mm0, %1\n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1038 "movq %%mm1, 8%1\n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1039 "movq %%mm2, 16%1\n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1040 "movq %%mm3, 24%1\n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1041 "movq %%mm4, 32%1\n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1042 "movq %%mm5, 40%1\n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1043 "movq %%mm6, 48%1\n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1044 "movq %%mm7, 56%1\n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1045 :
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1046 :"m"(src),"m"(dest));
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1047 }
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1048 }
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1049
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1050 static void downmix_SSE (sample_t * samples, int acmod, int output, sample_t bias,
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1051 sample_t clev, sample_t slev)
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1052 {
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1053 switch (CONVERT (acmod, output & A52_CHANNEL_MASK)) {
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1054
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1055 case CONVERT (A52_CHANNEL, A52_CHANNEL2):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1056 memcpy (samples, samples + 256, 256 * sizeof (sample_t));
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1057 break;
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1058
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1059 case CONVERT (A52_CHANNEL, A52_MONO):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1060 case CONVERT (A52_STEREO, A52_MONO):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1061 mix_2to1_SSE:
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1062 mix2to1_SSE (samples, samples + 256, bias);
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1063 break;
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1064
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1065 case CONVERT (A52_2F1R, A52_MONO):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1066 if (slev == 0)
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1067 goto mix_2to1_SSE;
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1068 case CONVERT (A52_3F, A52_MONO):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1069 mix_3to1_SSE:
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1070 mix3to1_SSE (samples, bias);
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1071 break;
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1072
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1073 case CONVERT (A52_3F1R, A52_MONO):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1074 if (slev == 0)
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1075 goto mix_3to1_SSE;
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1076 case CONVERT (A52_2F2R, A52_MONO):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1077 if (slev == 0)
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1078 goto mix_2to1_SSE;
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1079 mix4to1_SSE (samples, bias);
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1080 break;
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1081
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1082 case CONVERT (A52_3F2R, A52_MONO):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1083 if (slev == 0)
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1084 goto mix_3to1_SSE;
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1085 mix5to1_SSE (samples, bias);
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1086 break;
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1087
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1088 case CONVERT (A52_MONO, A52_DOLBY):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1089 memcpy (samples + 256, samples, 256 * sizeof (sample_t));
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1090 break;
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1091
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1092 case CONVERT (A52_3F, A52_STEREO):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1093 case CONVERT (A52_3F, A52_DOLBY):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1094 mix_3to2_SSE:
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1095 mix3to2_SSE (samples, bias);
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1096 break;
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1097
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1098 case CONVERT (A52_2F1R, A52_STEREO):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1099 if (slev == 0)
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1100 break;
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1101 mix21to2_SSE (samples, samples + 256, bias);
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1102 break;
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1103
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1104 case CONVERT (A52_2F1R, A52_DOLBY):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1105 mix21toS_SSE (samples, bias);
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1106 break;
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1107
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1108 case CONVERT (A52_3F1R, A52_STEREO):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1109 if (slev == 0)
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1110 goto mix_3to2_SSE;
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1111 mix31to2_SSE (samples, bias);
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1112 break;
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1113
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1114 case CONVERT (A52_3F1R, A52_DOLBY):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1115 mix31toS_SSE (samples, bias);
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1116 break;
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1117
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1118 case CONVERT (A52_2F2R, A52_STEREO):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1119 if (slev == 0)
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1120 break;
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1121 mix2to1_SSE (samples, samples + 512, bias);
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1122 mix2to1_SSE (samples + 256, samples + 768, bias);
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1123 break;
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1124
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1125 case CONVERT (A52_2F2R, A52_DOLBY):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1126 mix22toS_SSE (samples, bias);
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1127 break;
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1128
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1129 case CONVERT (A52_3F2R, A52_STEREO):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1130 if (slev == 0)
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1131 goto mix_3to2_SSE;
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1132 mix32to2_SSE (samples, bias);
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1133 break;
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1134
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1135 case CONVERT (A52_3F2R, A52_DOLBY):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1136 mix32toS_SSE (samples, bias);
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1137 break;
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1138
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1139 case CONVERT (A52_3F1R, A52_3F):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1140 if (slev == 0)
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1141 break;
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1142 mix21to2_SSE (samples, samples + 512, bias);
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1143 break;
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1144
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1145 case CONVERT (A52_3F2R, A52_3F):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1146 if (slev == 0)
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1147 break;
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1148 mix2to1_SSE (samples, samples + 768, bias);
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1149 mix2to1_SSE (samples + 512, samples + 1024, bias);
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1150 break;
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1151
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1152 case CONVERT (A52_3F1R, A52_2F1R):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1153 mix3to2_SSE (samples, bias);
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1154 memcpy (samples + 512, samples + 768, 256 * sizeof (sample_t));
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1155 break;
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1156
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1157 case CONVERT (A52_2F2R, A52_2F1R):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1158 mix2to1_SSE (samples + 512, samples + 768, bias);
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1159 break;
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1160
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1161 case CONVERT (A52_3F2R, A52_2F1R):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1162 mix3to2_SSE (samples, bias); //FIXME possible bug? (output doesnt seem to be used)
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1163 move2to1_SSE (samples + 768, samples + 512, bias);
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1164 break;
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1165
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1166 case CONVERT (A52_3F2R, A52_3F1R):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1167 mix2to1_SSE (samples + 768, samples + 1024, bias);
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1168 break;
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1169
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1170 case CONVERT (A52_2F1R, A52_2F2R):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1171 memcpy (samples + 768, samples + 512, 256 * sizeof (sample_t));
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1172 break;
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1173
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1174 case CONVERT (A52_3F1R, A52_2F2R):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1175 mix3to2_SSE (samples, bias);
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1176 memcpy (samples + 512, samples + 768, 256 * sizeof (sample_t));
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1177 break;
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1178
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1179 case CONVERT (A52_3F2R, A52_2F2R):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1180 mix3to2_SSE (samples, bias);
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1181 memcpy (samples + 512, samples + 768, 256 * sizeof (sample_t));
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1182 memcpy (samples + 768, samples + 1024, 256 * sizeof (sample_t));
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1183 break;
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1184
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1185 case CONVERT (A52_3F1R, A52_3F2R):
12137
9f297a651e11 100l and sync with upstream, patch by rgselk
alex
parents: 5912
diff changeset
1186 memcpy (samples + 1024, samples + 768, 256 * sizeof (sample_t));
3904
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1187 break;
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1188 }
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1189 }
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1190
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1191 static void upmix_MMX (sample_t * samples, int acmod, int output)
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1192 {
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1193 switch (CONVERT (acmod, output & A52_CHANNEL_MASK)) {
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1194
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1195 case CONVERT (A52_CHANNEL, A52_CHANNEL2):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1196 memcpy (samples + 256, samples, 256 * sizeof (sample_t));
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1197 break;
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1198
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1199 case CONVERT (A52_3F2R, A52_MONO):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1200 zero_MMX (samples + 1024);
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1201 case CONVERT (A52_3F1R, A52_MONO):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1202 case CONVERT (A52_2F2R, A52_MONO):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1203 zero_MMX (samples + 768);
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1204 case CONVERT (A52_3F, A52_MONO):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1205 case CONVERT (A52_2F1R, A52_MONO):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1206 zero_MMX (samples + 512);
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1207 case CONVERT (A52_CHANNEL, A52_MONO):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1208 case CONVERT (A52_STEREO, A52_MONO):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1209 zero_MMX (samples + 256);
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1210 break;
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1211
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1212 case CONVERT (A52_3F2R, A52_STEREO):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1213 case CONVERT (A52_3F2R, A52_DOLBY):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1214 zero_MMX (samples + 1024);
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1215 case CONVERT (A52_3F1R, A52_STEREO):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1216 case CONVERT (A52_3F1R, A52_DOLBY):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1217 zero_MMX (samples + 768);
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1218 case CONVERT (A52_3F, A52_STEREO):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1219 case CONVERT (A52_3F, A52_DOLBY):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1220 mix_3to2_MMX:
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1221 memcpy (samples + 512, samples + 256, 256 * sizeof (sample_t));
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1222 zero_MMX (samples + 256);
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1223 break;
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1224
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1225 case CONVERT (A52_2F2R, A52_STEREO):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1226 case CONVERT (A52_2F2R, A52_DOLBY):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1227 zero_MMX (samples + 768);
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1228 case CONVERT (A52_2F1R, A52_STEREO):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1229 case CONVERT (A52_2F1R, A52_DOLBY):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1230 zero_MMX (samples + 512);
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1231 break;
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1232
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1233 case CONVERT (A52_3F2R, A52_3F):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1234 zero_MMX (samples + 1024);
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1235 case CONVERT (A52_3F1R, A52_3F):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1236 case CONVERT (A52_2F2R, A52_2F1R):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1237 zero_MMX (samples + 768);
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1238 break;
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1239
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1240 case CONVERT (A52_3F2R, A52_3F1R):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1241 zero_MMX (samples + 1024);
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1242 break;
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1243
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1244 case CONVERT (A52_3F2R, A52_2F1R):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1245 zero_MMX (samples + 1024);
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1246 case CONVERT (A52_3F1R, A52_2F1R):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1247 mix_31to21_MMX:
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1248 memcpy (samples + 768, samples + 512, 256 * sizeof (sample_t));
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1249 goto mix_3to2_MMX;
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1250
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1251 case CONVERT (A52_3F2R, A52_2F2R):
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1252 memcpy (samples + 1024, samples + 768, 256 * sizeof (sample_t));
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1253 goto mix_31to21_MMX;
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1254 }
848d848521b9 runtime cpudetect
michael
parents: 3741
diff changeset
1255 }
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1256
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1257 static void mix2to1_3dnow (sample_t * dest, sample_t * src, sample_t bias)
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1258 {
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1259 asm volatile(
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1260 "movd %2, %%mm7 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1261 "punpckldq %2, %%mm7 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1262 "mov $-1024, %%"REG_S" \n\t"
19372
6334c14b38eb Replace asmalign.h hack by ASMALIGN cpp macros from config.h.
diego
parents: 18783
diff changeset
1263 ASMALIGN(4)
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1264 "1: \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1265 "movq (%0, %%"REG_S"), %%mm0 \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1266 "movq 8(%0, %%"REG_S"), %%mm1 \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1267 "movq 16(%0, %%"REG_S"), %%mm2 \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1268 "movq 24(%0, %%"REG_S"), %%mm3 \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1269 "pfadd (%1, %%"REG_S"), %%mm0 \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1270 "pfadd 8(%1, %%"REG_S"), %%mm1 \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1271 "pfadd 16(%1, %%"REG_S"), %%mm2 \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1272 "pfadd 24(%1, %%"REG_S"), %%mm3 \n\t"
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1273 "pfadd %%mm7, %%mm0 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1274 "pfadd %%mm7, %%mm1 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1275 "pfadd %%mm7, %%mm2 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1276 "pfadd %%mm7, %%mm3 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1277 "movq %%mm0, (%1, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1278 "movq %%mm1, 8(%1, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1279 "movq %%mm2, 16(%1, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1280 "movq %%mm3, 24(%1, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1281 "add $32, %%"REG_S" \n\t"
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1282 " jnz 1b \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1283 :: "r" (src+256), "r" (dest+256), "m" (bias)
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1284 : "%"REG_S
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1285 );
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1286 }
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1287
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1288 static void mix3to1_3dnow (sample_t * samples, sample_t bias)
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1289 {
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1290 asm volatile(
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1291 "movd %1, %%mm7 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1292 "punpckldq %1, %%mm7 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1293 "mov $-1024, %%"REG_S" \n\t"
19372
6334c14b38eb Replace asmalign.h hack by ASMALIGN cpp macros from config.h.
diego
parents: 18783
diff changeset
1294 ASMALIGN(4)
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1295 "1: \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1296 "movq (%0, %%"REG_S"), %%mm0 \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1297 "movq 8(%0, %%"REG_S"), %%mm1 \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1298 "movq 1024(%0, %%"REG_S"), %%mm2\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1299 "movq 1032(%0, %%"REG_S"), %%mm3\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1300 "pfadd 2048(%0, %%"REG_S"), %%mm0\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1301 "pfadd 2056(%0, %%"REG_S"), %%mm1\n\t"
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1302 "pfadd %%mm7, %%mm0 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1303 "pfadd %%mm7, %%mm1 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1304 "pfadd %%mm2, %%mm0 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1305 "pfadd %%mm3, %%mm1 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1306 "movq %%mm0, (%0, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1307 "movq %%mm1, 8(%0, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1308 "add $16, %%"REG_S" \n\t"
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1309 " jnz 1b \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1310 :: "r" (samples+256), "m" (bias)
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1311 : "%"REG_S
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1312 );
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1313 }
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1314
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1315 static void mix4to1_3dnow (sample_t * samples, sample_t bias)
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1316 {
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1317 asm volatile(
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1318 "movd %1, %%mm7 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1319 "punpckldq %1, %%mm7 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1320 "mov $-1024, %%"REG_S" \n\t"
19372
6334c14b38eb Replace asmalign.h hack by ASMALIGN cpp macros from config.h.
diego
parents: 18783
diff changeset
1321 ASMALIGN(4)
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1322 "1: \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1323 "movq (%0, %%"REG_S"), %%mm0 \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1324 "movq 8(%0, %%"REG_S"), %%mm1 \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1325 "movq 1024(%0, %%"REG_S"), %%mm2\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1326 "movq 1032(%0, %%"REG_S"), %%mm3\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1327 "pfadd 2048(%0, %%"REG_S"), %%mm0\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1328 "pfadd 2056(%0, %%"REG_S"), %%mm1\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1329 "pfadd 3072(%0, %%"REG_S"), %%mm2\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1330 "pfadd 3080(%0, %%"REG_S"), %%mm3\n\t"
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1331 "pfadd %%mm7, %%mm0 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1332 "pfadd %%mm7, %%mm1 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1333 "pfadd %%mm2, %%mm0 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1334 "pfadd %%mm3, %%mm1 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1335 "movq %%mm0, (%0, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1336 "movq %%mm1, 8(%0, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1337 "add $16, %%"REG_S" \n\t"
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1338 " jnz 1b \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1339 :: "r" (samples+256), "m" (bias)
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1340 : "%"REG_S
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1341 );
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1342 }
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1343
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1344 static void mix5to1_3dnow (sample_t * samples, sample_t bias)
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1345 {
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1346 asm volatile(
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1347 "movd %1, %%mm7 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1348 "punpckldq %1, %%mm7 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1349 "mov $-1024, %%"REG_S" \n\t"
19372
6334c14b38eb Replace asmalign.h hack by ASMALIGN cpp macros from config.h.
diego
parents: 18783
diff changeset
1350 ASMALIGN(4)
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1351 "1: \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1352 "movq (%0, %%"REG_S"), %%mm0 \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1353 "movq 8(%0, %%"REG_S"), %%mm1 \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1354 "movq 1024(%0, %%"REG_S"), %%mm2\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1355 "movq 1032(%0, %%"REG_S"), %%mm3\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1356 "pfadd 2048(%0, %%"REG_S"), %%mm0\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1357 "pfadd 2056(%0, %%"REG_S"), %%mm1\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1358 "pfadd 3072(%0, %%"REG_S"), %%mm2\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1359 "pfadd 3080(%0, %%"REG_S"), %%mm3\n\t"
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1360 "pfadd %%mm7, %%mm0 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1361 "pfadd %%mm7, %%mm1 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1362 "pfadd 4096(%0, %%"REG_S"), %%mm2\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1363 "pfadd 4104(%0, %%"REG_S"), %%mm3\n\t"
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1364 "pfadd %%mm2, %%mm0 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1365 "pfadd %%mm3, %%mm1 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1366 "movq %%mm0, (%0, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1367 "movq %%mm1, 8(%0, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1368 "add $16, %%"REG_S" \n\t"
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1369 " jnz 1b \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1370 :: "r" (samples+256), "m" (bias)
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1371 : "%"REG_S
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1372 );
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1373 }
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1374
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1375 static void mix3to2_3dnow (sample_t * samples, sample_t bias)
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1376 {
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1377 asm volatile(
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1378 "movd %1, %%mm7 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1379 "punpckldq %1, %%mm7 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1380 "mov $-1024, %%"REG_S" \n\t"
19372
6334c14b38eb Replace asmalign.h hack by ASMALIGN cpp macros from config.h.
diego
parents: 18783
diff changeset
1381 ASMALIGN(4)
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1382 "1: \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1383 "movq 1024(%0, %%"REG_S"), %%mm0\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1384 "movq 1032(%0, %%"REG_S"), %%mm1\n\t"
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1385 "pfadd %%mm7, %%mm0 \n\t" //common
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1386 "pfadd %%mm7, %%mm1 \n\t" //common
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1387 "movq (%0, %%"REG_S"), %%mm2 \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1388 "movq 8(%0, %%"REG_S"), %%mm3 \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1389 "movq 2048(%0, %%"REG_S"), %%mm4\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1390 "movq 2056(%0, %%"REG_S"), %%mm5\n\t"
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1391 "pfadd %%mm0, %%mm2 \n\t"
5912
d0a34309e424 trying to fix nicks bugs ...
michael
parents: 4233
diff changeset
1392 "pfadd %%mm1, %%mm3 \n\t"
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1393 "pfadd %%mm0, %%mm4 \n\t"
5912
d0a34309e424 trying to fix nicks bugs ...
michael
parents: 4233
diff changeset
1394 "pfadd %%mm1, %%mm5 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1395 "movq %%mm2, (%0, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1396 "movq %%mm3, 8(%0, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1397 "movq %%mm4, 1024(%0, %%"REG_S")\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1398 "movq %%mm5, 1032(%0, %%"REG_S")\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1399 "add $16, %%"REG_S" \n\t"
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1400 " jnz 1b \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1401 :: "r" (samples+256), "m" (bias)
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1402 : "%"REG_S
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1403 );
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1404 }
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1405
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1406 static void mix21to2_3dnow (sample_t * left, sample_t * right, sample_t bias)
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1407 {
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1408 asm volatile(
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1409 "movd %2, %%mm7 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1410 "punpckldq %2, %%mm7 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1411 "mov $-1024, %%"REG_S" \n\t"
19372
6334c14b38eb Replace asmalign.h hack by ASMALIGN cpp macros from config.h.
diego
parents: 18783
diff changeset
1412 ASMALIGN(4)
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1413 "1: \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1414 "movq 1024(%1, %%"REG_S"), %%mm0\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1415 "movq 1032(%1, %%"REG_S"), %%mm1\n\t"
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1416 "pfadd %%mm7, %%mm0 \n\t" //common
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1417 "pfadd %%mm7, %%mm1 \n\t" //common
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1418 "movq (%0, %%"REG_S"), %%mm2 \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1419 "movq 8(%0, %%"REG_S"), %%mm3 \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1420 "movq (%1, %%"REG_S"), %%mm4 \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1421 "movq 8(%1, %%"REG_S"), %%mm5 \n\t"
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1422 "pfadd %%mm0, %%mm2 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1423 "pfadd %%mm1, %%mm3 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1424 "pfadd %%mm0, %%mm4 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1425 "pfadd %%mm1, %%mm5 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1426 "movq %%mm2, (%0, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1427 "movq %%mm3, 8(%0, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1428 "movq %%mm4, (%1, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1429 "movq %%mm5, 8(%1, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1430 "add $16, %%"REG_S" \n\t"
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1431 " jnz 1b \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1432 :: "r" (left+256), "r" (right+256), "m" (bias)
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1433 : "%"REG_S
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1434 );
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1435 }
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1436
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1437 static void mix21toS_3dnow (sample_t * samples, sample_t bias)
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1438 {
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1439 asm volatile(
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1440 "movd %1, %%mm7 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1441 "punpckldq %1, %%mm7 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1442 "mov $-1024, %%"REG_S" \n\t"
19372
6334c14b38eb Replace asmalign.h hack by ASMALIGN cpp macros from config.h.
diego
parents: 18783
diff changeset
1443 ASMALIGN(4)
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1444 "1: \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1445 "movq 2048(%0, %%"REG_S"), %%mm0\n\t" // surround
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1446 "movq 2056(%0, %%"REG_S"), %%mm1\n\t" // surround
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1447 "movq (%0, %%"REG_S"), %%mm2 \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1448 "movq 8(%0, %%"REG_S"), %%mm3 \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1449 "movq 1024(%0, %%"REG_S"), %%mm4\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1450 "movq 1032(%0, %%"REG_S"), %%mm5\n\t"
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1451 "pfadd %%mm7, %%mm2 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1452 "pfadd %%mm7, %%mm3 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1453 "pfadd %%mm7, %%mm4 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1454 "pfadd %%mm7, %%mm5 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1455 "pfsub %%mm0, %%mm2 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1456 "pfsub %%mm1, %%mm3 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1457 "pfadd %%mm0, %%mm4 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1458 "pfadd %%mm1, %%mm5 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1459 "movq %%mm2, (%0, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1460 "movq %%mm3, 8(%0, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1461 "movq %%mm4, 1024(%0, %%"REG_S")\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1462 "movq %%mm5, 1032(%0, %%"REG_S")\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1463 "add $16, %%"REG_S" \n\t"
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1464 " jnz 1b \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1465 :: "r" (samples+256), "m" (bias)
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1466 : "%"REG_S
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1467 );
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1468 }
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1469
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1470 static void mix31to2_3dnow (sample_t * samples, sample_t bias)
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1471 {
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1472 asm volatile(
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1473 "movd %1, %%mm7 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1474 "punpckldq %1, %%mm7 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1475 "mov $-1024, %%"REG_S" \n\t"
19372
6334c14b38eb Replace asmalign.h hack by ASMALIGN cpp macros from config.h.
diego
parents: 18783
diff changeset
1476 ASMALIGN(4)
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1477 "1: \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1478 "movq 1024(%0, %%"REG_S"), %%mm0\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1479 "movq 1032(%0, %%"REG_S"), %%mm1\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1480 "pfadd 3072(%0, %%"REG_S"), %%mm0\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1481 "pfadd 3080(%0, %%"REG_S"), %%mm1\n\t"
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1482 "pfadd %%mm7, %%mm0 \n\t" // common
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1483 "pfadd %%mm7, %%mm1 \n\t" // common
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1484 "movq (%0, %%"REG_S"), %%mm2 \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1485 "movq 8(%0, %%"REG_S"), %%mm3 \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1486 "movq 2048(%0, %%"REG_S"), %%mm4\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1487 "movq 2056(%0, %%"REG_S"), %%mm5\n\t"
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1488 "pfadd %%mm0, %%mm2 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1489 "pfadd %%mm1, %%mm3 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1490 "pfadd %%mm0, %%mm4 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1491 "pfadd %%mm1, %%mm5 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1492 "movq %%mm2, (%0, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1493 "movq %%mm3, 8(%0, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1494 "movq %%mm4, 1024(%0, %%"REG_S")\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1495 "movq %%mm5, 1032(%0, %%"REG_S")\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1496 "add $16, %%"REG_S" \n\t"
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1497 " jnz 1b \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1498 :: "r" (samples+256), "m" (bias)
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1499 : "%"REG_S
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1500 );
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1501 }
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1502
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1503 static void mix31toS_3dnow (sample_t * samples, sample_t bias)
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1504 {
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1505 asm volatile(
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1506 "movd %1, %%mm7 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1507 "punpckldq %1, %%mm7 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1508 "mov $-1024, %%"REG_S" \n\t"
19372
6334c14b38eb Replace asmalign.h hack by ASMALIGN cpp macros from config.h.
diego
parents: 18783
diff changeset
1509 ASMALIGN(4)
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1510 "1: \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1511 "movq 1024(%0, %%"REG_S"), %%mm0\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1512 "movq 1032(%0, %%"REG_S"), %%mm1\n\t"
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1513 "pfadd %%mm7, %%mm0 \n\t" // common
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1514 "pfadd %%mm7, %%mm1 \n\t" // common
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1515 "movq (%0, %%"REG_S"), %%mm2 \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1516 "movq 8(%0, %%"REG_S"), %%mm3 \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1517 "movq 2048(%0, %%"REG_S"), %%mm4\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1518 "movq 2056(%0, %%"REG_S"), %%mm5\n\t"
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1519 "pfadd %%mm0, %%mm2 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1520 "pfadd %%mm1, %%mm3 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1521 "pfadd %%mm0, %%mm4 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1522 "pfadd %%mm1, %%mm5 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1523 "movq 3072(%0, %%"REG_S"), %%mm0\n\t" // surround
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1524 "movq 3080(%0, %%"REG_S"), %%mm1\n\t" // surround
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1525 "pfsub %%mm0, %%mm2 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1526 "pfsub %%mm1, %%mm3 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1527 "pfadd %%mm0, %%mm4 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1528 "pfadd %%mm1, %%mm5 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1529 "movq %%mm2, (%0, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1530 "movq %%mm3, 8(%0, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1531 "movq %%mm4, 1024(%0, %%"REG_S")\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1532 "movq %%mm5, 1032(%0, %%"REG_S")\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1533 "add $16, %%"REG_S" \n\t"
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1534 " jnz 1b \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1535 :: "r" (samples+256), "m" (bias)
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1536 : "%"REG_S
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1537 );
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1538 }
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1539
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1540 static void mix22toS_3dnow (sample_t * samples, sample_t bias)
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1541 {
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1542 asm volatile(
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1543 "movd %1, %%mm7 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1544 "punpckldq %1, %%mm7 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1545 "mov $-1024, %%"REG_S" \n\t"
19372
6334c14b38eb Replace asmalign.h hack by ASMALIGN cpp macros from config.h.
diego
parents: 18783
diff changeset
1546 ASMALIGN(4)
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1547 "1: \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1548 "movq 2048(%0, %%"REG_S"), %%mm0\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1549 "movq 2056(%0, %%"REG_S"), %%mm1\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1550 "pfadd 3072(%0, %%"REG_S"), %%mm0\n\t" // surround
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1551 "pfadd 3080(%0, %%"REG_S"), %%mm1\n\t" // surround
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1552 "movq (%0, %%"REG_S"), %%mm2 \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1553 "movq 8(%0, %%"REG_S"), %%mm3 \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1554 "movq 1024(%0, %%"REG_S"), %%mm4\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1555 "movq 1032(%0, %%"REG_S"), %%mm5\n\t"
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1556 "pfadd %%mm7, %%mm2 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1557 "pfadd %%mm7, %%mm3 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1558 "pfadd %%mm7, %%mm4 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1559 "pfadd %%mm7, %%mm5 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1560 "pfsub %%mm0, %%mm2 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1561 "pfsub %%mm1, %%mm3 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1562 "pfadd %%mm0, %%mm4 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1563 "pfadd %%mm1, %%mm5 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1564 "movq %%mm2, (%0, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1565 "movq %%mm3, 8(%0, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1566 "movq %%mm4, 1024(%0, %%"REG_S")\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1567 "movq %%mm5, 1032(%0, %%"REG_S")\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1568 "add $16, %%"REG_S" \n\t"
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1569 " jnz 1b \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1570 :: "r" (samples+256), "m" (bias)
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1571 : "%"REG_S
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1572 );
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1573 }
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1574
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1575 static void mix32to2_3dnow (sample_t * samples, sample_t bias)
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1576 {
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1577 asm volatile(
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1578 "movd %1, %%mm7 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1579 "punpckldq %1, %%mm7 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1580 "mov $-1024, %%"REG_S" \n\t"
19372
6334c14b38eb Replace asmalign.h hack by ASMALIGN cpp macros from config.h.
diego
parents: 18783
diff changeset
1581 ASMALIGN(4)
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1582 "1: \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1583 "movq 1024(%0, %%"REG_S"), %%mm0\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1584 "movq 1032(%0, %%"REG_S"), %%mm1\n\t"
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1585 "pfadd %%mm7, %%mm0 \n\t" // common
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1586 "pfadd %%mm7, %%mm1 \n\t" // common
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1587 "movq %%mm0, %%mm2 \n\t" // common
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1588 "movq %%mm1, %%mm3 \n\t" // common
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1589 "pfadd (%0, %%"REG_S"), %%mm0 \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1590 "pfadd 8(%0, %%"REG_S"), %%mm1 \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1591 "pfadd 2048(%0, %%"REG_S"), %%mm2\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1592 "pfadd 2056(%0, %%"REG_S"), %%mm3\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1593 "pfadd 3072(%0, %%"REG_S"), %%mm0\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1594 "pfadd 3080(%0, %%"REG_S"), %%mm1\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1595 "pfadd 4096(%0, %%"REG_S"), %%mm2\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1596 "pfadd 4104(%0, %%"REG_S"), %%mm3\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1597 "movq %%mm0, (%0, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1598 "movq %%mm1, 8(%0, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1599 "movq %%mm2, 1024(%0, %%"REG_S")\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1600 "movq %%mm3, 1032(%0, %%"REG_S")\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1601 "add $16, %%"REG_S" \n\t"
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1602 " jnz 1b \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1603 :: "r" (samples+256), "m" (bias)
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1604 : "%"REG_S
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1605 );
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1606 }
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1607
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1608 /* todo: should be optimized better */
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1609 static void mix32toS_3dnow (sample_t * samples, sample_t bias)
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1610 {
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1611 asm volatile(
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1612 "mov $-1024, %%"REG_S" \n\t"
19372
6334c14b38eb Replace asmalign.h hack by ASMALIGN cpp macros from config.h.
diego
parents: 18783
diff changeset
1613 ASMALIGN(4)
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1614 "1: \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1615 "movd %1, %%mm7 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1616 "punpckldq %1, %%mm7 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1617 "movq 1024(%0, %%"REG_S"), %%mm0\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1618 "movq 1032(%0, %%"REG_S"), %%mm1\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1619 "movq 3072(%0, %%"REG_S"), %%mm4\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1620 "movq 3080(%0, %%"REG_S"), %%mm5\n\t"
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1621 "pfadd %%mm7, %%mm0 \n\t" // common
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1622 "pfadd %%mm7, %%mm1 \n\t" // common
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1623 "pfadd 4096(%0, %%"REG_S"), %%mm4\n\t" // surround
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1624 "pfadd 4104(%0, %%"REG_S"), %%mm5\n\t" // surround
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1625 "movq (%0, %%"REG_S"), %%mm2 \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1626 "movq 8(%0, %%"REG_S"), %%mm3 \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1627 "movq 2048(%0, %%"REG_S"), %%mm6\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1628 "movq 2056(%0, %%"REG_S"), %%mm7\n\t"
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1629 "pfsub %%mm4, %%mm2 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1630 "pfsub %%mm5, %%mm3 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1631 "pfadd %%mm4, %%mm6 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1632 "pfadd %%mm5, %%mm7 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1633 "pfadd %%mm0, %%mm2 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1634 "pfadd %%mm1, %%mm3 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1635 "pfadd %%mm0, %%mm6 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1636 "pfadd %%mm1, %%mm7 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1637 "movq %%mm2, (%0, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1638 "movq %%mm3, 8(%0, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1639 "movq %%mm6, 1024(%0, %%"REG_S")\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1640 "movq %%mm7, 1032(%0, %%"REG_S")\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1641 "add $16, %%"REG_S" \n\t"
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1642 " jnz 1b \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1643 :: "r" (samples+256), "m" (bias)
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1644 : "%"REG_S
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1645 );
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1646 }
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1647
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1648 static void move2to1_3dnow (sample_t * src, sample_t * dest, sample_t bias)
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1649 {
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1650 asm volatile(
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1651 "movd %2, %%mm7 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1652 "punpckldq %2, %%mm7 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1653 "mov $-1024, %%"REG_S" \n\t"
19372
6334c14b38eb Replace asmalign.h hack by ASMALIGN cpp macros from config.h.
diego
parents: 18783
diff changeset
1654 ASMALIGN(4)
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1655 "1: \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1656 "movq (%0, %%"REG_S"), %%mm0 \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1657 "movq 8(%0, %%"REG_S"), %%mm1 \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1658 "movq 16(%0, %%"REG_S"), %%mm2 \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1659 "movq 24(%0, %%"REG_S"), %%mm3 \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1660 "pfadd 1024(%0, %%"REG_S"), %%mm0\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1661 "pfadd 1032(%0, %%"REG_S"), %%mm1\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1662 "pfadd 1040(%0, %%"REG_S"), %%mm2\n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1663 "pfadd 1048(%0, %%"REG_S"), %%mm3\n\t"
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1664 "pfadd %%mm7, %%mm0 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1665 "pfadd %%mm7, %%mm1 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1666 "pfadd %%mm7, %%mm2 \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1667 "pfadd %%mm7, %%mm3 \n\t"
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1668 "movq %%mm0, (%1, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1669 "movq %%mm1, 8(%1, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1670 "movq %%mm2, 16(%1, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1671 "movq %%mm3, 24(%1, %%"REG_S") \n\t"
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1672 "add $32, %%"REG_S" \n\t"
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1673 " jnz 1b \n\t"
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1674 :: "r" (src+256), "r" (dest+256), "m" (bias)
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1675 : "%"REG_S
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1676 );
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1677 }
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1678
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1679 static void downmix_3dnow (sample_t * samples, int acmod, int output, sample_t bias,
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1680 sample_t clev, sample_t slev)
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1681 {
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1682 switch (CONVERT (acmod, output & A52_CHANNEL_MASK)) {
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1683
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1684 case CONVERT (A52_CHANNEL, A52_CHANNEL2):
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1685 memcpy (samples, samples + 256, 256 * sizeof (sample_t));
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1686 break;
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1687
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1688 case CONVERT (A52_CHANNEL, A52_MONO):
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1689 case CONVERT (A52_STEREO, A52_MONO):
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1690 mix_2to1_3dnow:
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1691 mix2to1_3dnow (samples, samples + 256, bias);
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1692 break;
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1693
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1694 case CONVERT (A52_2F1R, A52_MONO):
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1695 if (slev == 0)
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1696 goto mix_2to1_3dnow;
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1697 case CONVERT (A52_3F, A52_MONO):
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1698 mix_3to1_3dnow:
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1699 mix3to1_3dnow (samples, bias);
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1700 break;
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1701
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1702 case CONVERT (A52_3F1R, A52_MONO):
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1703 if (slev == 0)
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1704 goto mix_3to1_3dnow;
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1705 case CONVERT (A52_2F2R, A52_MONO):
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1706 if (slev == 0)
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1707 goto mix_2to1_3dnow;
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1708 mix4to1_3dnow (samples, bias);
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1709 break;
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1710
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1711 case CONVERT (A52_3F2R, A52_MONO):
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1712 if (slev == 0)
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1713 goto mix_3to1_3dnow;
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1714 mix5to1_3dnow (samples, bias);
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1715 break;
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1716
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1717 case CONVERT (A52_MONO, A52_DOLBY):
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1718 memcpy (samples + 256, samples, 256 * sizeof (sample_t));
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1719 break;
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1720
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1721 case CONVERT (A52_3F, A52_STEREO):
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1722 case CONVERT (A52_3F, A52_DOLBY):
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1723 mix_3to2_3dnow:
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1724 mix3to2_3dnow (samples, bias);
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1725 break;
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1726
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1727 case CONVERT (A52_2F1R, A52_STEREO):
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1728 if (slev == 0)
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1729 break;
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1730 mix21to2_3dnow (samples, samples + 256, bias);
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1731 break;
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1732
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1733 case CONVERT (A52_2F1R, A52_DOLBY):
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1734 mix21toS_3dnow (samples, bias);
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1735 break;
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1736
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1737 case CONVERT (A52_3F1R, A52_STEREO):
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1738 if (slev == 0)
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1739 goto mix_3to2_3dnow;
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1740 mix31to2_3dnow (samples, bias);
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1741 break;
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1742
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1743 case CONVERT (A52_3F1R, A52_DOLBY):
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1744 mix31toS_3dnow (samples, bias);
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1745 break;
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1746
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1747 case CONVERT (A52_2F2R, A52_STEREO):
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1748 if (slev == 0)
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1749 break;
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1750 mix2to1_3dnow (samples, samples + 512, bias);
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1751 mix2to1_3dnow (samples + 256, samples + 768, bias);
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1752 break;
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1753
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1754 case CONVERT (A52_2F2R, A52_DOLBY):
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1755 mix22toS_3dnow (samples, bias);
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1756 break;
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1757
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1758 case CONVERT (A52_3F2R, A52_STEREO):
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1759 if (slev == 0)
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1760 goto mix_3to2_3dnow;
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1761 mix32to2_3dnow (samples, bias);
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1762 break;
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1763
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1764 case CONVERT (A52_3F2R, A52_DOLBY):
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1765 mix32toS_3dnow (samples, bias);
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1766 break;
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1767
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1768 case CONVERT (A52_3F1R, A52_3F):
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1769 if (slev == 0)
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1770 break;
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1771 mix21to2_3dnow (samples, samples + 512, bias);
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1772 break;
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1773
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1774 case CONVERT (A52_3F2R, A52_3F):
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1775 if (slev == 0)
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1776 break;
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1777 mix2to1_3dnow (samples, samples + 768, bias);
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1778 mix2to1_3dnow (samples + 512, samples + 1024, bias);
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1779 break;
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1780
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1781 case CONVERT (A52_3F1R, A52_2F1R):
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1782 mix3to2_3dnow (samples, bias);
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1783 memcpy (samples + 512, samples + 768, 256 * sizeof (sample_t));
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1784 break;
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1785
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1786 case CONVERT (A52_2F2R, A52_2F1R):
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1787 mix2to1_3dnow (samples + 512, samples + 768, bias);
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1788 break;
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1789
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1790 case CONVERT (A52_3F2R, A52_2F1R):
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1791 mix3to2_3dnow (samples, bias); //FIXME possible bug? (output doesnt seem to be used)
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1792 move2to1_3dnow (samples + 768, samples + 512, bias);
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1793 break;
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1794
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1795 case CONVERT (A52_3F2R, A52_3F1R):
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1796 mix2to1_3dnow (samples + 768, samples + 1024, bias);
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1797 break;
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1798
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1799 case CONVERT (A52_2F1R, A52_2F2R):
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1800 memcpy (samples + 768, samples + 512, 256 * sizeof (sample_t));
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1801 break;
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1802
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1803 case CONVERT (A52_3F1R, A52_2F2R):
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1804 mix3to2_3dnow (samples, bias);
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1805 memcpy (samples + 512, samples + 768, 256 * sizeof (sample_t));
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1806 break;
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1807
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1808 case CONVERT (A52_3F2R, A52_2F2R):
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1809 mix3to2_3dnow (samples, bias);
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1810 memcpy (samples + 512, samples + 768, 256 * sizeof (sample_t));
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1811 memcpy (samples + 768, samples + 1024, 256 * sizeof (sample_t));
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1812 break;
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1813
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1814 case CONVERT (A52_3F1R, A52_3F2R):
12137
9f297a651e11 100l and sync with upstream, patch by rgselk
alex
parents: 5912
diff changeset
1815 memcpy (samples + 1024, samples + 768, 256 * sizeof (sample_t));
4233
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1816 break;
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1817 }
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1818 __asm __volatile("femms":::"memory");
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1819 }
ef2abfbbd1df 3dnow optimization. Not all functions are tested!!!
nick
parents: 3910
diff changeset
1820
16173
d6219ce521e9 liba52 asm optimizations ported to amd64
aurel
parents: 14991
diff changeset
1821 #endif // ARCH_X86 || ARCH_X86_64