annotate src/audio/SDL_mixer_MMX.c @ 3856:492ff98822fd SDL-1.2

Disable MiNT thread usage and use hw access for updating DMA audio pointers
author Patrice Mandin <patmandin@gmail.com>
date Tue, 12 Sep 2006 19:20:50 +0000
parents 97d0966f4bf7
children 782fd950bd46 c121d94672cb a1b03ba2fcd0
rev   line source
1402
d910939febfa Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents: 1147
diff changeset
1 /*
d910939febfa Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents: 1147
diff changeset
2 SDL - Simple DirectMedia Layer
d910939febfa Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents: 1147
diff changeset
3 Copyright (C) 1997-2006 Sam Lantinga
d910939febfa Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents: 1147
diff changeset
4
d910939febfa Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents: 1147
diff changeset
5 This library is free software; you can redistribute it and/or
d910939febfa Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents: 1147
diff changeset
6 modify it under the terms of the GNU Lesser General Public
d910939febfa Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents: 1147
diff changeset
7 License as published by the Free Software Foundation; either
d910939febfa Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents: 1147
diff changeset
8 version 2.1 of the License, or (at your option) any later version.
d910939febfa Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents: 1147
diff changeset
9
d910939febfa Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents: 1147
diff changeset
10 This library is distributed in the hope that it will be useful,
d910939febfa Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents: 1147
diff changeset
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
d910939febfa Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents: 1147
diff changeset
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
d910939febfa Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents: 1147
diff changeset
13 Lesser General Public License for more details.
d910939febfa Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents: 1147
diff changeset
14
d910939febfa Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents: 1147
diff changeset
15 You should have received a copy of the GNU Lesser General Public
d910939febfa Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents: 1147
diff changeset
16 License along with this library; if not, write to the Free Software
d910939febfa Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents: 1147
diff changeset
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
d910939febfa Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents: 1147
diff changeset
18
d910939febfa Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents: 1147
diff changeset
19 Sam Lantinga
d910939febfa Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents: 1147
diff changeset
20 slouken@libsdl.org
d910939febfa Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents: 1147
diff changeset
21 */
d910939febfa Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents: 1147
diff changeset
22 #include "SDL_config.h"
d910939febfa Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents: 1147
diff changeset
23
1019
e3b3130f3af8 Date: Fri, 31 Dec 2004 04:14:09 +0900
Sam Lantinga <slouken@libsdl.org>
parents: 887
diff changeset
24 /*
e3b3130f3af8 Date: Fri, 31 Dec 2004 04:14:09 +0900
Sam Lantinga <slouken@libsdl.org>
parents: 887
diff changeset
25 MMX assembler version of SDL_MixAudio for signed little endian 16 bit samples and signed 8 bit samples
e3b3130f3af8 Date: Fri, 31 Dec 2004 04:14:09 +0900
Sam Lantinga <slouken@libsdl.org>
parents: 887
diff changeset
26 Copyright 2002 Stephane Marchesin (stephane.marchesin@wanadoo.fr)
e3b3130f3af8 Date: Fri, 31 Dec 2004 04:14:09 +0900
Sam Lantinga <slouken@libsdl.org>
parents: 887
diff changeset
27 This code is licensed under the LGPL (see COPYING for details)
e3b3130f3af8 Date: Fri, 31 Dec 2004 04:14:09 +0900
Sam Lantinga <slouken@libsdl.org>
parents: 887
diff changeset
28
e3b3130f3af8 Date: Fri, 31 Dec 2004 04:14:09 +0900
Sam Lantinga <slouken@libsdl.org>
parents: 887
diff changeset
29 Assumes buffer size in bytes is a multiple of 16
e3b3130f3af8 Date: Fri, 31 Dec 2004 04:14:09 +0900
Sam Lantinga <slouken@libsdl.org>
parents: 887
diff changeset
30 Assumes SDL_MIX_MAXVOLUME = 128
e3b3130f3af8 Date: Fri, 31 Dec 2004 04:14:09 +0900
Sam Lantinga <slouken@libsdl.org>
parents: 887
diff changeset
31 */
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
32
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
33
1019
e3b3130f3af8 Date: Fri, 31 Dec 2004 04:14:09 +0900
Sam Lantinga <slouken@libsdl.org>
parents: 887
diff changeset
34 /***********************************************
e3b3130f3af8 Date: Fri, 31 Dec 2004 04:14:09 +0900
Sam Lantinga <slouken@libsdl.org>
parents: 887
diff changeset
35 * Mixing for 16 bit signed buffers
e3b3130f3af8 Date: Fri, 31 Dec 2004 04:14:09 +0900
Sam Lantinga <slouken@libsdl.org>
parents: 887
diff changeset
36 ***********************************************/
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
37
1402
d910939febfa Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents: 1147
diff changeset
38 #if defined(__GNUC__) && defined(__i386__) && defined(SDL_ASSEMBLY_ROUTINES)
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
39 void SDL_MixAudio_MMX_S16(char* dst,char* src,unsigned int size,int volume)
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
40 {
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
41 __asm__ __volatile__ (
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
42
1612
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
43 " movl %3,%%eax\n" /* eax = volume */
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
44
1612
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
45 " movl %2,%%edx\n" /* edx = size */
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
46
1612
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
47 " shrl $4,%%edx\n" /* process 16 bytes per iteration = 8 samples */
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
48
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
49 " jz .endS16\n"
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
50
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
51 " pxor %%mm0,%%mm0\n"
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
52
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
53 " movd %%eax,%%mm0\n"
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
54 " movq %%mm0,%%mm1\n"
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
55 " psllq $16,%%mm0\n"
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
56 " por %%mm1,%%mm0\n"
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
57 " psllq $16,%%mm0\n"
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
58 " por %%mm1,%%mm0\n"
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
59 " psllq $16,%%mm0\n"
1612
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
60 " por %%mm1,%%mm0\n" /* mm0 = vol|vol|vol|vol */
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
61
1411
efb34e597d21 Fixed assembly alignment error on Intel Macs.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
62 ".align 8\n"
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
63 " .mixloopS16:\n"
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
64
1612
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
65 " movq (%1),%%mm1\n" /* mm1 = a|b|c|d */
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
66
1612
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
67 " movq %%mm1,%%mm2\n" /* mm2 = a|b|c|d */
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
68
1612
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
69 " movq 8(%1),%%mm4\n" /* mm4 = e|f|g|h */
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
70
1612
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
71 /* pré charger le buffer dst dans mm7 */
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
72 " movq (%0),%%mm7\n" /* mm7 = dst[0] */
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
73
1612
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
74 /* multiplier par le volume */
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
75 " pmullw %%mm0,%%mm1\n" /* mm1 = l(a*v)|l(b*v)|l(c*v)|l(d*v) */
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
76
1612
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
77 " pmulhw %%mm0,%%mm2\n" /* mm2 = h(a*v)|h(b*v)|h(c*v)|h(d*v) */
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
78 " movq %%mm4,%%mm5\n" /* mm5 = e|f|g|h */
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
79
1612
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
80 " pmullw %%mm0,%%mm4\n" /* mm4 = l(e*v)|l(f*v)|l(g*v)|l(h*v) */
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
81
1612
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
82 " pmulhw %%mm0,%%mm5\n" /* mm5 = h(e*v)|h(f*v)|h(g*v)|h(h*v) */
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
83 " movq %%mm1,%%mm3\n" /* mm3 = l(a*v)|l(b*v)|l(c*v)|l(d*v) */
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
84
1612
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
85 " punpckhwd %%mm2,%%mm1\n" /* mm1 = a*v|b*v */
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
86
1612
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
87 " movq %%mm4,%%mm6\n" /* mm6 = l(e*v)|l(f*v)|l(g*v)|l(h*v) */
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
88 " punpcklwd %%mm2,%%mm3\n" /* mm3 = c*v|d*v */
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
89
1612
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
90 " punpckhwd %%mm5,%%mm4\n" /* mm4 = e*f|f*v */
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
91
1612
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
92 " punpcklwd %%mm5,%%mm6\n" /* mm6 = g*v|h*v */
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
93
1612
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
94 /* pré charger le buffer dst dans mm5 */
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
95 " movq 8(%0),%%mm5\n" /* mm5 = dst[1] */
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
96
1612
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
97 /* diviser par 128 */
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
98 " psrad $7,%%mm1\n" /* mm1 = a*v/128|b*v/128 , 128 = SDL_MIX_MAXVOLUME */
887
b4b64bb88f2f Date: Mon, 10 May 2004 10:17:46 -0400
Sam Lantinga <slouken@libsdl.org>
parents: 539
diff changeset
99 " add $16,%1\n"
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
100
1612
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
101 " psrad $7,%%mm3\n" /* mm3 = c*v/128|d*v/128 */
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
102
1612
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
103 " psrad $7,%%mm4\n" /* mm4 = e*v/128|f*v/128 */
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
104
1612
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
105 /* mm1 = le sample avec le volume modifié */
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
106 " packssdw %%mm1,%%mm3\n" /* mm3 = s(a*v|b*v|c*v|d*v) */
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
107
1612
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
108 " psrad $7,%%mm6\n" /* mm6= g*v/128|h*v/128 */
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
109 " paddsw %%mm7,%%mm3\n" /* mm3 = adjust_volume(src)+dst */
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
110
1612
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
111 /* mm4 = le sample avec le volume modifié */
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
112 " packssdw %%mm4,%%mm6\n" /* mm6 = s(e*v|f*v|g*v|h*v) */
887
b4b64bb88f2f Date: Mon, 10 May 2004 10:17:46 -0400
Sam Lantinga <slouken@libsdl.org>
parents: 539
diff changeset
113 " movq %%mm3,(%0)\n"
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
114
1612
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
115 " paddsw %%mm5,%%mm6\n" /* mm6 = adjust_volume(src)+dst */
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
116
887
b4b64bb88f2f Date: Mon, 10 May 2004 10:17:46 -0400
Sam Lantinga <slouken@libsdl.org>
parents: 539
diff changeset
117 " movq %%mm6,8(%0)\n"
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
118
887
b4b64bb88f2f Date: Mon, 10 May 2004 10:17:46 -0400
Sam Lantinga <slouken@libsdl.org>
parents: 539
diff changeset
119 " add $16,%0\n"
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
120
887
b4b64bb88f2f Date: Mon, 10 May 2004 10:17:46 -0400
Sam Lantinga <slouken@libsdl.org>
parents: 539
diff changeset
121 " dec %%edx\n"
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
122
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
123 " jnz .mixloopS16\n"
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
124
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
125 " emms\n"
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
126
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
127 ".endS16:\n"
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
128 :
887
b4b64bb88f2f Date: Mon, 10 May 2004 10:17:46 -0400
Sam Lantinga <slouken@libsdl.org>
parents: 539
diff changeset
129 : "r" (dst), "r"(src),"m"(size),
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
130 "m"(volume)
887
b4b64bb88f2f Date: Mon, 10 May 2004 10:17:46 -0400
Sam Lantinga <slouken@libsdl.org>
parents: 539
diff changeset
131 : "eax","edx","memory"
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
132 );
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
133 }
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
134
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
135
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
136
1612
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
137 /*////////////////////////////////////////////// */
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
138 /* Mixing for 8 bit signed buffers */
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
139 /*////////////////////////////////////////////// */
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
140
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
141 void SDL_MixAudio_MMX_S8(char* dst,char* src,unsigned int size,int volume)
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
142 {
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
143 __asm__ __volatile__ (
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
144
1612
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
145 " movl %3,%%eax\n" /* eax = volume */
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
146
1147
b580f7201543 From: "Alex Volkov" <avcp-sdlmail@usa.net>
Ryan C. Gordon <icculus@icculus.org>
parents: 1019
diff changeset
147 " movd %%eax,%%mm0\n"
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
148 " movq %%mm0,%%mm1\n"
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
149 " psllq $16,%%mm0\n"
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
150 " por %%mm1,%%mm0\n"
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
151 " psllq $16,%%mm0\n"
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
152 " por %%mm1,%%mm0\n"
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
153 " psllq $16,%%mm0\n"
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
154 " por %%mm1,%%mm0\n"
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
155
1612
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
156 " movl %2,%%edx\n" /* edx = size */
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
157 " shr $3,%%edx\n" /* process 8 bytes per iteration = 8 samples */
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
158
887
b4b64bb88f2f Date: Mon, 10 May 2004 10:17:46 -0400
Sam Lantinga <slouken@libsdl.org>
parents: 539
diff changeset
159 " cmp $0,%%edx\n"
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
160 " je .endS8\n"
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
161
1411
efb34e597d21 Fixed assembly alignment error on Intel Macs.
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
162 ".align 8\n"
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
163 " .mixloopS8:\n"
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
164
1612
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
165 " pxor %%mm2,%%mm2\n" /* mm2 = 0 */
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
166 " movq (%1),%%mm1\n" /* mm1 = a|b|c|d|e|f|g|h */
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
167
1612
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
168 " movq %%mm1,%%mm3\n" /* mm3 = a|b|c|d|e|f|g|h */
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
169
1612
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
170 /* on va faire le "sign extension" en faisant un cmp avec 0 qui retourne 1 si <0, 0 si >0 */
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
171 " pcmpgtb %%mm1,%%mm2\n" /* mm2 = 11111111|00000000|00000000.... */
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
172
1612
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
173 " punpckhbw %%mm2,%%mm1\n" /* mm1 = 0|a|0|b|0|c|0|d */
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
174
1612
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
175 " punpcklbw %%mm2,%%mm3\n" /* mm3 = 0|e|0|f|0|g|0|h */
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
176 " movq (%0),%%mm2\n" /* mm2 = destination */
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
177
1612
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
178 " pmullw %%mm0,%%mm1\n" /* mm1 = v*a|v*b|v*c|v*d */
887
b4b64bb88f2f Date: Mon, 10 May 2004 10:17:46 -0400
Sam Lantinga <slouken@libsdl.org>
parents: 539
diff changeset
179 " add $8,%1\n"
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
180
1612
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
181 " pmullw %%mm0,%%mm3\n" /* mm3 = v*e|v*f|v*g|v*h */
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
182 " psraw $7,%%mm1\n" /* mm1 = v*a/128|v*b/128|v*c/128|v*d/128 */
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
183
1612
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
184 " psraw $7,%%mm3\n" /* mm3 = v*e/128|v*f/128|v*g/128|v*h/128 */
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
185
1612
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
186 " packsswb %%mm1,%%mm3\n" /* mm1 = v*a/128|v*b/128|v*c/128|v*d/128|v*e/128|v*f/128|v*g/128|v*h/128 */
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
187
1612
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
188 " paddsb %%mm2,%%mm3\n" /* add to destination buffer */
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
189
1612
97d0966f4bf7 Fixed some ultra-pedantic gcc warnings
Sam Lantinga <slouken@libsdl.org>
parents: 1411
diff changeset
190 " movq %%mm3,(%0)\n" /* store back to ram */
887
b4b64bb88f2f Date: Mon, 10 May 2004 10:17:46 -0400
Sam Lantinga <slouken@libsdl.org>
parents: 539
diff changeset
191 " add $8,%0\n"
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
192
887
b4b64bb88f2f Date: Mon, 10 May 2004 10:17:46 -0400
Sam Lantinga <slouken@libsdl.org>
parents: 539
diff changeset
193 " dec %%edx\n"
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
194
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
195 " jnz .mixloopS8\n"
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
196
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
197 ".endS8:\n"
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
198 " emms\n"
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
199 :
887
b4b64bb88f2f Date: Mon, 10 May 2004 10:17:46 -0400
Sam Lantinga <slouken@libsdl.org>
parents: 539
diff changeset
200 : "r" (dst), "r"(src),"m"(size),
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
201 "m"(volume)
887
b4b64bb88f2f Date: Mon, 10 May 2004 10:17:46 -0400
Sam Lantinga <slouken@libsdl.org>
parents: 539
diff changeset
202 : "eax","edx","memory"
539
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
203 );
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
204 }
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
205 #endif
a9e38f3b8e4d Added MMX audio mixing code for gcc (thanks Stephane!)
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
206