Mercurial > sdl-ios-xcode
annotate src/hermes/HeadMMX.h @ 2042:3908e1f808e1
Fixed bug #292
I might be on crack here.
It looks like SDL_ConvertMono() in src/audio/SDL_audiocvt.c adds the left and
right channels of a stereo stream together, and clamps the new mono channel if
it would overflow.
Shouldn't it be dividing by 2 to average the two sample points instead of
clamping? Otherwise the mono sample point's volume doubles in the conversion.
This would also make the conversion faster, as it replaces two branches per
sample frame with a bitwise shift.
--ryan.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sun, 24 Sep 2006 15:56:36 +0000 |
parents | c121d94672cb |
children |
rev | line source |
---|---|
0 | 1 /* |
2 Header definitions for the MMX routines for the HERMES library | |
3 Copyright (c) 1998 Christian Nentwich (c.nentwich@cs.ucl.ac.uk) | |
4 This source code is licensed under the GNU LGPL | |
5 | |
6 Please refer to the file COPYING.LIB contained in the distribution for | |
7 licensing conditions | |
8 */ | |
1402
d910939febfa
Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents:
1197
diff
changeset
|
9 #include "SDL_config.h" |
0 | 10 |
11 #ifndef __HERMES_HEAD_MMX__ | |
12 #define __HERMES_HEAD_MMX__ | |
13 | |
14 | |
15 /* If you cannot stand ifdefs, then please do not look into this file, it's | |
16 going to end your life :) */ | |
17 | |
18 #ifdef X86_ASSEMBLER | |
19 | |
20 | |
21 #ifdef __cplusplus | |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
22 extern "C" |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
23 { |
0 | 24 #endif |
25 | |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
26 void STACKCALL ConvertMMX(HermesConverterInterface *); |
0 | 27 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
28 void STACKCALL ClearMMX_32(HermesClearInterface *); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
29 void STACKCALL ClearMMX_24(HermesClearInterface *); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
30 void STACKCALL ClearMMX_16(HermesClearInterface *); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
31 void STACKCALL ClearMMX_8(HermesClearInterface *); |
0 | 32 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
33 void ConvertMMXpII32_24RGB888(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
34 void ConvertMMXpII32_16RGB565(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
35 void ConvertMMXpII32_16BGR565(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
36 void ConvertMMXpII32_16RGB555(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
37 void ConvertMMXpII32_16BGR565(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
38 void ConvertMMXpII32_16BGR555(); |
0 | 39 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
40 void ConvertMMXp32_16RGB555(); |
0 | 41 |
42 #ifdef __cplusplus | |
43 } | |
44 #endif | |
45 | |
46 | |
47 | |
48 /* Fix the underscore business with ELF compilers */ | |
49 | |
50 #if defined(__ELF__) && defined(__GNUC__) | |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
51 #ifdef __cplusplus |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
52 extern "C" |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
53 { |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
54 #endif |
0 | 55 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
56 extern void _ConvertMMX(HermesConverterInterface *); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
57 extern void _ConvertMMXpII32_24RGB888(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
58 extern void _ConvertMMXpII32_16RGB565(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
59 extern void _ConvertMMXpII32_16BGR565(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
60 extern void _ConvertMMXpII32_16RGB555(); |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
61 extern void _ConvertMMXpII32_16BGR555(); |
0 | 62 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
63 #define ConvertMMX _ConvertMMX |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
64 #define ConvertMMXpII32_24RGB888 _ConvertMMXpII32_24RGB888 |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
65 #define ConvertMMXpII32_16RGB565 _ConvertMMXpII32_16RGB565 |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
66 #define ConvertMMXpII32_16BGR565 _ConvertMMXpII32_16BGR565 |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
67 #define ConvertMMXpII32_16RGB555 _ConvertMMXpII32_16RGB555 |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
68 #define ConvertMMXpII32_16BGR555 _ConvertMMXpII32_16BGR555 |
0 | 69 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
70 #ifdef __cplusplus |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
71 } |
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
72 #endif |
0 | 73 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
74 #endif /* ELF and GNUC */ |
0 | 75 |
76 | |
77 | |
78 | |
79 /* Make it work with Watcom */ | |
80 #ifdef __WATCOMC__ | |
81 #pragma warning 601 9 | |
82 | |
83 #pragma aux ConvertMMX "_*" modify [EAX EBX ECX EDX ESI EDI] | |
84 | |
85 #pragma aux ClearMMX_32 "_*" modify [EAX EBX ECX EDX ESI EDI] | |
86 #pragma aux ClearMMX_24 "_*" modify [EAX EBX ECX EDX ESI EDI] | |
87 #pragma aux ClearMMX_16 "_*" modify [EAX EBX ECX EDX ESI EDI] | |
88 #pragma aux ClearMMX_8 "_*" modify [EAX EBX ECX EDX ESI EDI] | |
89 | |
90 #pragma aux ConvertMMXpII32_24RGB888 "_*" | |
91 #pragma aux ConvertMMXpII32_16RGB565 "_*" | |
92 #pragma aux ConvertMMXpII32_16BGR565 "_*" | |
93 #pragma aux ConvertMMXpII32_16RGB555 "_*" | |
94 #pragma aux ConvertMMXpII32_16BGR555 "_*" | |
95 #pragma aux ConvertMMXp32_16RGB555 "_*" | |
96 | |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
97 #endif /* WATCOM */ |
0 | 98 |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
99 #endif /* X86_ASSEMBLER */ |
0 | 100 |
101 | |
102 #endif | |
1895
c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
1402
diff
changeset
|
103 /* vi: set ts=4 sw=4 expandtab: */ |