comparison src/audio/SDL_mixer_MMX.c @ 1612:97d0966f4bf7

Fixed some ultra-pedantic gcc warnings
author Sam Lantinga <slouken@libsdl.org>
date Fri, 24 Mar 2006 06:10:24 +0000
parents efb34e597d21
children 782fd950bd46 c121d94672cb a1b03ba2fcd0
comparison
equal deleted inserted replaced
1611:ec3466b08f17 1612:97d0966f4bf7
38 #if defined(__GNUC__) && defined(__i386__) && defined(SDL_ASSEMBLY_ROUTINES) 38 #if defined(__GNUC__) && defined(__i386__) && defined(SDL_ASSEMBLY_ROUTINES)
39 void SDL_MixAudio_MMX_S16(char* dst,char* src,unsigned int size,int volume) 39 void SDL_MixAudio_MMX_S16(char* dst,char* src,unsigned int size,int volume)
40 { 40 {
41 __asm__ __volatile__ ( 41 __asm__ __volatile__ (
42 42
43 " movl %3,%%eax\n" // eax = volume 43 " movl %3,%%eax\n" /* eax = volume */
44 44
45 " movl %2,%%edx\n" // edx = size 45 " movl %2,%%edx\n" /* edx = size */
46 46
47 " shrl $4,%%edx\n" // process 16 bytes per iteration = 8 samples 47 " shrl $4,%%edx\n" /* process 16 bytes per iteration = 8 samples */
48 48
49 " jz .endS16\n" 49 " jz .endS16\n"
50 50
51 " pxor %%mm0,%%mm0\n" 51 " pxor %%mm0,%%mm0\n"
52 52
55 " psllq $16,%%mm0\n" 55 " psllq $16,%%mm0\n"
56 " por %%mm1,%%mm0\n" 56 " por %%mm1,%%mm0\n"
57 " psllq $16,%%mm0\n" 57 " psllq $16,%%mm0\n"
58 " por %%mm1,%%mm0\n" 58 " por %%mm1,%%mm0\n"
59 " psllq $16,%%mm0\n" 59 " psllq $16,%%mm0\n"
60 " por %%mm1,%%mm0\n" // mm0 = vol|vol|vol|vol 60 " por %%mm1,%%mm0\n" /* mm0 = vol|vol|vol|vol */
61 61
62 ".align 8\n" 62 ".align 8\n"
63 " .mixloopS16:\n" 63 " .mixloopS16:\n"
64 64
65 " movq (%1),%%mm1\n" // mm1 = a|b|c|d 65 " movq (%1),%%mm1\n" /* mm1 = a|b|c|d */
66 66
67 " movq %%mm1,%%mm2\n" // mm2 = a|b|c|d 67 " movq %%mm1,%%mm2\n" /* mm2 = a|b|c|d */
68 68
69 " movq 8(%1),%%mm4\n" // mm4 = e|f|g|h 69 " movq 8(%1),%%mm4\n" /* mm4 = e|f|g|h */
70 70
71 // pré charger le buffer dst dans mm7 71 /* pré charger le buffer dst dans mm7 */
72 " movq (%0),%%mm7\n" // mm7 = dst[0]" 72 " movq (%0),%%mm7\n" /* mm7 = dst[0] */
73 73
74 // multiplier par le volume 74 /* multiplier par le volume */
75 " pmullw %%mm0,%%mm1\n" // mm1 = l(a*v)|l(b*v)|l(c*v)|l(d*v) 75 " pmullw %%mm0,%%mm1\n" /* mm1 = l(a*v)|l(b*v)|l(c*v)|l(d*v) */
76 76
77 " pmulhw %%mm0,%%mm2\n" // mm2 = h(a*v)|h(b*v)|h(c*v)|h(d*v) 77 " pmulhw %%mm0,%%mm2\n" /* mm2 = h(a*v)|h(b*v)|h(c*v)|h(d*v) */
78 " movq %%mm4,%%mm5\n" // mm5 = e|f|g|h 78 " movq %%mm4,%%mm5\n" /* mm5 = e|f|g|h */
79 79
80 " pmullw %%mm0,%%mm4\n" // mm4 = l(e*v)|l(f*v)|l(g*v)|l(h*v) 80 " pmullw %%mm0,%%mm4\n" /* mm4 = l(e*v)|l(f*v)|l(g*v)|l(h*v) */
81 81
82 " pmulhw %%mm0,%%mm5\n" // mm5 = h(e*v)|h(f*v)|h(g*v)|h(h*v) 82 " pmulhw %%mm0,%%mm5\n" /* mm5 = h(e*v)|h(f*v)|h(g*v)|h(h*v) */
83 " movq %%mm1,%%mm3\n" // mm3 = l(a*v)|l(b*v)|l(c*v)|l(d*v) 83 " movq %%mm1,%%mm3\n" /* mm3 = l(a*v)|l(b*v)|l(c*v)|l(d*v) */
84 84
85 " punpckhwd %%mm2,%%mm1\n" // mm1 = a*v|b*v 85 " punpckhwd %%mm2,%%mm1\n" /* mm1 = a*v|b*v */
86 86
87 " movq %%mm4,%%mm6\n" // mm6 = l(e*v)|l(f*v)|l(g*v)|l(h*v) 87 " movq %%mm4,%%mm6\n" /* mm6 = l(e*v)|l(f*v)|l(g*v)|l(h*v) */
88 " punpcklwd %%mm2,%%mm3\n" // mm3 = c*v|d*v 88 " punpcklwd %%mm2,%%mm3\n" /* mm3 = c*v|d*v */
89 89
90 " punpckhwd %%mm5,%%mm4\n" // mm4 = e*f|f*v 90 " punpckhwd %%mm5,%%mm4\n" /* mm4 = e*f|f*v */
91 91
92 " punpcklwd %%mm5,%%mm6\n" // mm6 = g*v|h*v 92 " punpcklwd %%mm5,%%mm6\n" /* mm6 = g*v|h*v */
93 93
94 // pré charger le buffer dst dans mm5 94 /* pré charger le buffer dst dans mm5 */
95 " movq 8(%0),%%mm5\n" // mm5 = dst[1] 95 " movq 8(%0),%%mm5\n" /* mm5 = dst[1] */
96 96
97 // diviser par 128 97 /* diviser par 128 */
98 " psrad $7,%%mm1\n" // mm1 = a*v/128|b*v/128 , 128 = SDL_MIX_MAXVOLUME 98 " psrad $7,%%mm1\n" /* mm1 = a*v/128|b*v/128 , 128 = SDL_MIX_MAXVOLUME */
99 " add $16,%1\n" 99 " add $16,%1\n"
100 100
101 " psrad $7,%%mm3\n" // mm3 = c*v/128|d*v/128 101 " psrad $7,%%mm3\n" /* mm3 = c*v/128|d*v/128 */
102 102
103 " psrad $7,%%mm4\n" // mm4 = e*v/128|f*v/128 103 " psrad $7,%%mm4\n" /* mm4 = e*v/128|f*v/128 */
104 104
105 // mm1 = le sample avec le volume modifié 105 /* mm1 = le sample avec le volume modifié */
106 " packssdw %%mm1,%%mm3\n" // mm3 = s(a*v|b*v|c*v|d*v) 106 " packssdw %%mm1,%%mm3\n" /* mm3 = s(a*v|b*v|c*v|d*v) */
107 107
108 " psrad $7,%%mm6\n" // mm6= g*v/128|h*v/128 108 " psrad $7,%%mm6\n" /* mm6= g*v/128|h*v/128 */
109 " paddsw %%mm7,%%mm3\n" // mm3 = adjust_volume(src)+dst 109 " paddsw %%mm7,%%mm3\n" /* mm3 = adjust_volume(src)+dst */
110 110
111 // mm4 = le sample avec le volume modifié 111 /* mm4 = le sample avec le volume modifié */
112 " packssdw %%mm4,%%mm6\n" // mm6 = s(e*v|f*v|g*v|h*v) 112 " packssdw %%mm4,%%mm6\n" /* mm6 = s(e*v|f*v|g*v|h*v) */
113 " movq %%mm3,(%0)\n" 113 " movq %%mm3,(%0)\n"
114 114
115 " paddsw %%mm5,%%mm6\n" // mm6 = adjust_volume(src)+dst 115 " paddsw %%mm5,%%mm6\n" /* mm6 = adjust_volume(src)+dst */
116 116
117 " movq %%mm6,8(%0)\n" 117 " movq %%mm6,8(%0)\n"
118 118
119 " add $16,%0\n" 119 " add $16,%0\n"
120 120
132 ); 132 );
133 } 133 }
134 134
135 135
136 136
137 //////////////////////////////////////////////// 137 /*////////////////////////////////////////////// */
138 // Mixing for 8 bit signed buffers 138 /* Mixing for 8 bit signed buffers */
139 //////////////////////////////////////////////// 139 /*////////////////////////////////////////////// */
140 140
141 void SDL_MixAudio_MMX_S8(char* dst,char* src,unsigned int size,int volume) 141 void SDL_MixAudio_MMX_S8(char* dst,char* src,unsigned int size,int volume)
142 { 142 {
143 __asm__ __volatile__ ( 143 __asm__ __volatile__ (
144 144
145 " movl %3,%%eax\n" // eax = volume 145 " movl %3,%%eax\n" /* eax = volume */
146 146
147 " movd %%eax,%%mm0\n" 147 " movd %%eax,%%mm0\n"
148 " movq %%mm0,%%mm1\n" 148 " movq %%mm0,%%mm1\n"
149 " psllq $16,%%mm0\n" 149 " psllq $16,%%mm0\n"
150 " por %%mm1,%%mm0\n" 150 " por %%mm1,%%mm0\n"
151 " psllq $16,%%mm0\n" 151 " psllq $16,%%mm0\n"
152 " por %%mm1,%%mm0\n" 152 " por %%mm1,%%mm0\n"
153 " psllq $16,%%mm0\n" 153 " psllq $16,%%mm0\n"
154 " por %%mm1,%%mm0\n" 154 " por %%mm1,%%mm0\n"
155 155
156 " movl %2,%%edx\n" // edx = size 156 " movl %2,%%edx\n" /* edx = size */
157 " shr $3,%%edx\n" // process 8 bytes per iteration = 8 samples 157 " shr $3,%%edx\n" /* process 8 bytes per iteration = 8 samples */
158 158
159 " cmp $0,%%edx\n" 159 " cmp $0,%%edx\n"
160 " je .endS8\n" 160 " je .endS8\n"
161 161
162 ".align 8\n" 162 ".align 8\n"
163 " .mixloopS8:\n" 163 " .mixloopS8:\n"
164 164
165 " pxor %%mm2,%%mm2\n" // mm2 = 0 165 " pxor %%mm2,%%mm2\n" /* mm2 = 0 */
166 " movq (%1),%%mm1\n" // mm1 = a|b|c|d|e|f|g|h 166 " movq (%1),%%mm1\n" /* mm1 = a|b|c|d|e|f|g|h */
167 167
168 " movq %%mm1,%%mm3\n" // mm3 = a|b|c|d|e|f|g|h 168 " movq %%mm1,%%mm3\n" /* mm3 = a|b|c|d|e|f|g|h */
169 169
170 // on va faire le "sign extension" en faisant un cmp avec 0 qui retourne 1 si <0, 0 si >0 170 /* on va faire le "sign extension" en faisant un cmp avec 0 qui retourne 1 si <0, 0 si >0 */
171 " pcmpgtb %%mm1,%%mm2\n" // mm2 = 11111111|00000000|00000000.... 171 " pcmpgtb %%mm1,%%mm2\n" /* mm2 = 11111111|00000000|00000000.... */
172 172
173 " punpckhbw %%mm2,%%mm1\n" // mm1 = 0|a|0|b|0|c|0|d 173 " punpckhbw %%mm2,%%mm1\n" /* mm1 = 0|a|0|b|0|c|0|d */
174 174
175 " punpcklbw %%mm2,%%mm3\n" // mm3 = 0|e|0|f|0|g|0|h 175 " punpcklbw %%mm2,%%mm3\n" /* mm3 = 0|e|0|f|0|g|0|h */
176 " movq (%0),%%mm2\n" // mm2 = destination 176 " movq (%0),%%mm2\n" /* mm2 = destination */
177 177
178 " pmullw %%mm0,%%mm1\n" // mm1 = v*a|v*b|v*c|v*d 178 " pmullw %%mm0,%%mm1\n" /* mm1 = v*a|v*b|v*c|v*d */
179 " add $8,%1\n" 179 " add $8,%1\n"
180 180
181 " pmullw %%mm0,%%mm3\n" // mm3 = v*e|v*f|v*g|v*h 181 " pmullw %%mm0,%%mm3\n" /* mm3 = v*e|v*f|v*g|v*h */
182 " psraw $7,%%mm1\n" // mm1 = v*a/128|v*b/128|v*c/128|v*d/128 182 " psraw $7,%%mm1\n" /* mm1 = v*a/128|v*b/128|v*c/128|v*d/128 */
183 183
184 " psraw $7,%%mm3\n" // mm3 = v*e/128|v*f/128|v*g/128|v*h/128 184 " psraw $7,%%mm3\n" /* mm3 = v*e/128|v*f/128|v*g/128|v*h/128 */
185 185
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 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 */
187 187
188 " paddsb %%mm2,%%mm3\n" // add to destination buffer 188 " paddsb %%mm2,%%mm3\n" /* add to destination buffer */
189 189
190 " movq %%mm3,(%0)\n" // store back to ram 190 " movq %%mm3,(%0)\n" /* store back to ram */
191 " add $8,%0\n" 191 " add $8,%0\n"
192 192
193 " dec %%edx\n" 193 " dec %%edx\n"
194 194
195 " jnz .mixloopS8\n" 195 " jnz .mixloopS8\n"