annotate src/audio/SDL_mixer_MMX_VC.c @ 1675:d33dcfc3fde7 SDL-1.3

Overlay functions are being replaced by YUV textures. If the driver doesn't support YUV textures, they can be emulated by backing the texture with an RGB texture and using the software conversion routines. Note that it doesn't make sense to lock a portion of a YV12 texture, since you'd need to return three pixel pointers and pitch values instead of the one that's available through the API. I'm guessing that's one of the reasons DirectX 9 doesn't support this format at all.
author Sam Lantinga <slouken@libsdl.org>
date Sun, 11 Jun 2006 07:30:16 +0000
parents 4da1ee79c9af
children a1ebb17f9c52
rev   line source
1402
d910939febfa Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents: 1330
diff changeset
1 /*
d910939febfa Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents: 1330
diff changeset
2 SDL - Simple DirectMedia Layer
d910939febfa Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents: 1330
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: 1330
diff changeset
4
d910939febfa Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents: 1330
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: 1330
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: 1330
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: 1330
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: 1330
diff changeset
9
d910939febfa Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents: 1330
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: 1330
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: 1330
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: 1330
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: 1330
diff changeset
14
d910939febfa Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents: 1330
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: 1330
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: 1330
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: 1330
diff changeset
18
d910939febfa Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents: 1330
diff changeset
19 Sam Lantinga
d910939febfa Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents: 1330
diff changeset
20 slouken@libsdl.org
d910939febfa Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents: 1330
diff changeset
21 */
d910939febfa Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents: 1330
diff changeset
22 #include "SDL_config.h"
1330
450721ad5436 It's now possible to build SDL without any C runtime at all on Windows,
Sam Lantinga <slouken@libsdl.org>
parents: 1190
diff changeset
23
450721ad5436 It's now possible to build SDL without any C runtime at all on Windows,
Sam Lantinga <slouken@libsdl.org>
parents: 1190
diff changeset
24 #include "SDL_mixer_MMX_VC.h"
450721ad5436 It's now possible to build SDL without any C runtime at all on Windows,
Sam Lantinga <slouken@libsdl.org>
parents: 1190
diff changeset
25
1442
e3242177fe4a Updated OS/2 build, yay!
Sam Lantinga <slouken@libsdl.org>
parents: 1402
diff changeset
26 #if ((defined(_MSC_VER) && defined(_M_IX86)) || defined(__WATCOMC__)) && defined(SDL_ASSEMBLY_ROUTINES)
574
64fe373be3dc Cth converted the MMX audio mixing routines to VC++ syntax
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
27 // MMX assembler version of SDL_MixAudio for signed little endian 16 bit samples and signed 8 bit samples
64fe373be3dc Cth converted the MMX audio mixing routines to VC++ syntax
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
28 // Copyright 2002 Stephane Marchesin (stephane.marchesin@wanadoo.fr)
64fe373be3dc Cth converted the MMX audio mixing routines to VC++ syntax
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
29 // Converted to Intel ASM notation by Cth
64fe373be3dc Cth converted the MMX audio mixing routines to VC++ syntax
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
30 // This code is licensed under the LGPL (see COPYING for details)
64fe373be3dc Cth converted the MMX audio mixing routines to VC++ syntax
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
31 //
64fe373be3dc Cth converted the MMX audio mixing routines to VC++ syntax
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
32 // Assumes buffer size in bytes is a multiple of 16
64fe373be3dc Cth converted the MMX audio mixing routines to VC++ syntax
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
33 // Assumes SDL_MIX_MAXVOLUME = 128
64fe373be3dc Cth converted the MMX audio mixing routines to VC++ syntax
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
34
64fe373be3dc Cth converted the MMX audio mixing routines to VC++ syntax
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
35
64fe373be3dc Cth converted the MMX audio mixing routines to VC++ syntax
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
36 ////////////////////////////////////////////////
64fe373be3dc Cth converted the MMX audio mixing routines to VC++ syntax
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
37 // Mixing for 16 bit signed buffers
64fe373be3dc Cth converted the MMX audio mixing routines to VC++ syntax
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
38 ////////////////////////////////////////////////
64fe373be3dc Cth converted the MMX audio mixing routines to VC++ syntax
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
39
1662
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
40 void
1668
4da1ee79c9af more tweaking indent options
Sam Lantinga <slouken@libsdl.org>
parents: 1662
diff changeset
41 SDL_MixAudio_MMX_S16_VC(char *dst, char *src, unsigned int nSize, int volume)
574
64fe373be3dc Cth converted the MMX audio mixing routines to VC++ syntax
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
42 {
1662
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
43 __asm {
574
64fe373be3dc Cth converted the MMX audio mixing routines to VC++ syntax
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
44
1662
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
45 push edi push esi push ebx mov edi, dst // edi = dst
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
46 mov esi, src // esi = src
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
47 mov eax, volume // eax = volume
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
48 mov ebx, nSize // ebx = size
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
49 shr ebx, 4 // process 16 bytes per iteration = 8 samples
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
50 jz endS16 pxor mm0, mm0 movd mm0, eax //%%eax,%%mm0
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
51 movq mm1, mm0 //%%mm0,%%mm1
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
52 psllq mm0, 16 //$16,%%mm0
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
53 por mm0, mm1 //%%mm1,%%mm0
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
54 psllq mm0, 16 //$16,%%mm0
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
55 por mm0, mm1 //%%mm1,%%mm0
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
56 psllq mm0, 16 //$16,%%mm0
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
57 por mm0, mm1 //%%mm1,%%mm0 // mm0 = vol|vol|vol|vol
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
58 #ifndef __WATCOMC__
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
59 align 16
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
60 #endif
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
61 mixloopS16:movq mm1,[esi] //(%%esi),%%mm1\n" // mm1 = a|b|c|d
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
62 movq mm2, mm1 //%%mm1,%%mm2\n" // mm2 = a|b|c|d
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
63 movq mm4,[esi + 8] //8(%%esi),%%mm4\n" // mm4 = e|f|g|h
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
64 // pre charger le buffer dst dans mm7
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
65 movq mm7,[edi] //(%%edi),%%mm7\n" // mm7 = dst[0]"
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
66 // multiplier par le volume
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
67 pmullw mm1, mm0 //%%mm0,%%mm1\n" // mm1 = l(a*v)|l(b*v)|l(c*v)|l(d*v)
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
68 pmulhw mm2, mm0 //%%mm0,%%mm2\n" // mm2 = h(a*v)|h(b*v)|h(c*v)|h(d*v)
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
69 movq mm5, mm4 //%%mm4,%%mm5\n" // mm5 = e|f|g|h
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
70 pmullw mm4, mm0 //%%mm0,%%mm4\n" // mm4 = l(e*v)|l(f*v)|l(g*v)|l(h*v)
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
71 pmulhw mm5, mm0 //%%mm0,%%mm5\n" // mm5 = h(e*v)|h(f*v)|h(g*v)|h(h*v)
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
72 movq mm3, mm1 //%%mm1,%%mm3\n" // mm3 = l(a*v)|l(b*v)|l(c*v)|l(d*v)
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
73 punpckhwd mm1, mm2 //%%mm2,%%mm1\n" // mm1 = a*v|b*v
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
74 movq mm6, mm4 //%%mm4,%%mm6\n" // mm6 = l(e*v)|l(f*v)|l(g*v)|l(h*v)
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
75 punpcklwd mm3, mm2 //%%mm2,%%mm3\n" // mm3 = c*v|d*v
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
76 punpckhwd mm4, mm5 //%%mm5,%%mm4\n" // mm4 = e*f|f*v
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
77 punpcklwd mm6, mm5 //%%mm5,%%mm6\n" // mm6 = g*v|h*v
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
78 // pre charger le buffer dst dans mm5
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
79 movq mm5,[edi + 8] //8(%%edi),%%mm5\n" // mm5 = dst[1]
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
80 // diviser par 128
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
81 psrad mm1, 7 //$7,%%mm1\n" // mm1 = a*v/128|b*v/128 , 128 = SDL_MIX_MAXVOLUME
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
82 add esi, 16 //$16,%%esi\n"
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
83 psrad mm3, 7 //$7,%%mm3\n" // mm3 = c*v/128|d*v/128
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
84 psrad mm4, 7 //$7,%%mm4\n" // mm4 = e*v/128|f*v/128
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
85 // mm1 = le sample avec le volume modifie
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
86 packssdw mm3, mm1 //%%mm1,%%mm3\n" // mm3 = s(a*v|b*v|c*v|d*v)
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
87 psrad mm6, 7 //$7,%%mm6\n" // mm6= g*v/128|h*v/128
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
88 paddsw mm3, mm7 //%%mm7,%%mm3\n" // mm3 = adjust_volume(src)+dst
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
89 // mm4 = le sample avec le volume modifie
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
90 packssdw mm6, mm4 //%%mm4,%%mm6\n" // mm6 = s(e*v|f*v|g*v|h*v)
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
91 movq[edi], mm3 //%%mm3,(%%edi)\n"
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
92 paddsw mm6, mm5 //%%mm5,%%mm6\n" // mm6 = adjust_volume(src)+dst
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
93 movq[edi + 8], mm6 //%%mm6,8(%%edi)\n"
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
94 add edi, 16 //$16,%%edi\n"
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
95 dec ebx //%%ebx\n"
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
96 jnz mixloopS16 ends16:emms pop ebx pop esi pop edi}
574
64fe373be3dc Cth converted the MMX audio mixing routines to VC++ syntax
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
97
64fe373be3dc Cth converted the MMX audio mixing routines to VC++ syntax
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
98 }
64fe373be3dc Cth converted the MMX audio mixing routines to VC++ syntax
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
99
64fe373be3dc Cth converted the MMX audio mixing routines to VC++ syntax
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
100 ////////////////////////////////////////////////
64fe373be3dc Cth converted the MMX audio mixing routines to VC++ syntax
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
101 // Mixing for 8 bit signed buffers
64fe373be3dc Cth converted the MMX audio mixing routines to VC++ syntax
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
102 ////////////////////////////////////////////////
64fe373be3dc Cth converted the MMX audio mixing routines to VC++ syntax
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
103
1662
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
104 void
1668
4da1ee79c9af more tweaking indent options
Sam Lantinga <slouken@libsdl.org>
parents: 1662
diff changeset
105 SDL_MixAudio_MMX_S8_VC(char *dst, char *src, unsigned int nSize, int volume)
574
64fe373be3dc Cth converted the MMX audio mixing routines to VC++ syntax
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
106 {
1662
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
107 _asm {
574
64fe373be3dc Cth converted the MMX audio mixing routines to VC++ syntax
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
108
1662
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
109 push edi push esi push ebx mov edi, dst //movl %0,%%edi // edi = dst
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
110 mov esi, src //%1,%%esi // esi = src
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
111 mov eax, volume //%3,%%eax // eax = volume
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
112 movd mm0, eax //%%eax,%%mm0
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
113 movq mm1, mm0 //%%mm0,%%mm1
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
114 psllq mm0, 16 //$16,%%mm0
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
115 por mm0, mm1 //%%mm1,%%mm0
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
116 psllq mm0, 16 //$16,%%mm0
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
117 por mm0, mm1 //%%mm1,%%mm0
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
118 psllq mm0, 16 //$16,%%mm0
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
119 por mm0, mm1 //%%mm1,%%mm0
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
120 mov ebx, nSize //%2,%%ebx // ebx = size
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
121 shr ebx, 3 //$3,%%ebx // process 8 bytes per iteration = 8 samples
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
122 cmp ebx, 0 //$0,%%ebx
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
123 je endS8
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
124 #ifndef __WATCOMC__
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
125 align 16
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
126 #endif
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
127 mixloopS8:pxor mm2, mm2 //%%mm2,%%mm2 // mm2 = 0
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
128 movq mm1,[esi] //(%%esi),%%mm1 // mm1 = a|b|c|d|e|f|g|h
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
129 movq mm3, mm1 //%%mm1,%%mm3 // mm3 = a|b|c|d|e|f|g|h
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
130 // on va faire le "sign extension" en faisant un cmp avec 0 qui retourne 1 si <0, 0 si >0
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
131 pcmpgtb mm2, mm1 //%%mm1,%%mm2 // mm2 = 11111111|00000000|00000000....
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
132 punpckhbw mm1, mm2 //%%mm2,%%mm1 // mm1 = 0|a|0|b|0|c|0|d
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
133 punpcklbw mm3, mm2 //%%mm2,%%mm3 // mm3 = 0|e|0|f|0|g|0|h
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
134 movq mm2,[edi] //(%%edi),%%mm2 // mm2 = destination
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
135 pmullw mm1, mm0 //%%mm0,%%mm1 // mm1 = v*a|v*b|v*c|v*d
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
136 add esi, 8 //$8,%%esi
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
137 pmullw mm3, mm0 //%%mm0,%%mm3 // mm3 = v*e|v*f|v*g|v*h
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
138 psraw mm1, 7 //$7,%%mm1 // mm1 = v*a/128|v*b/128|v*c/128|v*d/128
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
139 psraw mm3, 7 //$7,%%mm3 // mm3 = v*e/128|v*f/128|v*g/128|v*h/128
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
140 packsswb mm3, mm1 //%%mm1,%%mm3 // 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
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
141 paddsb mm3, mm2 //%%mm2,%%mm3 // add to destination buffer
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
142 movq[edi], mm3 //%%mm3,(%%edi) // store back to ram
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
143 add edi, 8 //$8,%%edi
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
144 dec ebx //%%ebx
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
145 jnz mixloopS8 endS8:emms pop ebx pop esi pop edi}
574
64fe373be3dc Cth converted the MMX audio mixing routines to VC++ syntax
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
146 }
64fe373be3dc Cth converted the MMX audio mixing routines to VC++ syntax
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
147
1662
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
148 #endif /* SDL_ASSEMBLY_ROUTINES */
782fd950bd46 Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API.
Sam Lantinga <slouken@libsdl.org>
parents: 1442
diff changeset
149 /* vi: set ts=4 sw=4 expandtab: */