Commit 731ba0cec2ae7071da75902a8071ac718c86cb14
1 parent
e2eef170
Fix some signedness issues caught by gcc 4.3
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4696 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
3 changed files
with
8 additions
and
6 deletions
hw/gus.c
@@ -58,7 +58,7 @@ typedef struct GUSState { | @@ -58,7 +58,7 @@ typedef struct GUSState { | ||
58 | QEMUSoundCard card; | 58 | QEMUSoundCard card; |
59 | int freq; | 59 | int freq; |
60 | int pos, left, shift, irqs; | 60 | int pos, left, shift, irqs; |
61 | - uint16_t *mixbuf; | 61 | + GUSsample *mixbuf; |
62 | uint8_t himem[1024 * 1024 + 32 + 4096]; | 62 | uint8_t himem[1024 * 1024 + 32 + 4096]; |
63 | int samples; | 63 | int samples; |
64 | SWVoiceOut *voice; | 64 | SWVoiceOut *voice; |
@@ -198,7 +198,7 @@ void GUS_dmarequest (GUSEmuState *der) | @@ -198,7 +198,7 @@ void GUS_dmarequest (GUSEmuState *der) | ||
198 | int GUS_read_DMA (void *opaque, int nchan, int dma_pos, int dma_len) | 198 | int GUS_read_DMA (void *opaque, int nchan, int dma_pos, int dma_len) |
199 | { | 199 | { |
200 | GUSState *s = opaque; | 200 | GUSState *s = opaque; |
201 | - int8_t tmpbuf[4096]; | 201 | + char tmpbuf[4096]; |
202 | int pos = dma_pos, mode, left = dma_len - dma_pos; | 202 | int pos = dma_pos, mode, left = dma_len - dma_pos; |
203 | 203 | ||
204 | ldebug ("read DMA %#x %d\n", dma_pos, dma_len); | 204 | ldebug ("read DMA %#x %d\n", dma_pos, dma_len); |
hw/gusemu.h
@@ -32,12 +32,14 @@ | @@ -32,12 +32,14 @@ | ||
32 | typedef unsigned short GUSword; | 32 | typedef unsigned short GUSword; |
33 | typedef unsigned int GUSdword; | 33 | typedef unsigned int GUSdword; |
34 | typedef signed char GUSchar; | 34 | typedef signed char GUSchar; |
35 | + typedef signed short GUSsample; | ||
35 | #else | 36 | #else |
36 | #include <stdint.h> | 37 | #include <stdint.h> |
37 | typedef int8_t GUSchar; | 38 | typedef int8_t GUSchar; |
38 | typedef uint8_t GUSbyte; | 39 | typedef uint8_t GUSbyte; |
39 | typedef uint16_t GUSword; | 40 | typedef uint16_t GUSword; |
40 | typedef uint32_t GUSdword; | 41 | typedef uint32_t GUSdword; |
42 | + typedef int16_t GUSsample; | ||
41 | #endif | 43 | #endif |
42 | 44 | ||
43 | typedef struct _GUSEmuState | 45 | typedef struct _GUSEmuState |
@@ -91,7 +93,7 @@ void gus_dma_transferdata(GUSEmuState *state, char *dma_addr, unsigned int count | @@ -91,7 +93,7 @@ void gus_dma_transferdata(GUSEmuState *state, char *dma_addr, unsigned int count | ||
91 | /* If the interrupts are asynchronous, it may be needed to use a separate thread mixing into a temporary */ | 93 | /* If the interrupts are asynchronous, it may be needed to use a separate thread mixing into a temporary */ |
92 | /* audio buffer in order to avoid quality loss caused by large numsamples and elapsed_time values. */ | 94 | /* audio buffer in order to avoid quality loss caused by large numsamples and elapsed_time values. */ |
93 | 95 | ||
94 | -void gus_mixvoices(GUSEmuState *state, unsigned int playback_freq, unsigned int numsamples, short *bufferpos); | 96 | +void gus_mixvoices(GUSEmuState *state, unsigned int playback_freq, unsigned int numsamples, GUSsample *bufferpos); |
95 | /* recommended range: 10 < numsamples < 100 */ | 97 | /* recommended range: 10 < numsamples < 100 */ |
96 | /* lower values may result in increased rounding error, higher values often cause audible timing delays */ | 98 | /* lower values may result in increased rounding error, higher values often cause audible timing delays */ |
97 | 99 |
hw/gusemu_mixer.c
@@ -33,7 +33,7 @@ | @@ -33,7 +33,7 @@ | ||
33 | 33 | ||
34 | /* samples are always 16bit stereo (4 bytes each, first right then left interleaved) */ | 34 | /* samples are always 16bit stereo (4 bytes each, first right then left interleaved) */ |
35 | void gus_mixvoices(GUSEmuState * state, unsigned int playback_freq, unsigned int numsamples, | 35 | void gus_mixvoices(GUSEmuState * state, unsigned int playback_freq, unsigned int numsamples, |
36 | - short *bufferpos) | 36 | + GUSsample *bufferpos) |
37 | { | 37 | { |
38 | /* note that byte registers are stored in the upper half of each voice register! */ | 38 | /* note that byte registers are stored in the upper half of each voice register! */ |
39 | GUSbyte *gusptr; | 39 | GUSbyte *gusptr; |
@@ -170,8 +170,8 @@ void gus_mixvoices(GUSEmuState * state, unsigned int playback_freq, unsigned int | @@ -170,8 +170,8 @@ void gus_mixvoices(GUSEmuState * state, unsigned int playback_freq, unsigned int | ||
170 | } | 170 | } |
171 | 171 | ||
172 | /* mix samples into buffer */ | 172 | /* mix samples into buffer */ |
173 | - *(bufferpos + 2 * sample) += (short) ((sample1 * PanningPos) >> 4); /* right */ | ||
174 | - *(bufferpos + 2 * sample + 1) += (short) ((sample1 * (15 - PanningPos)) >> 4); /* left */ | 173 | + *(bufferpos + 2 * sample) += (GUSsample) ((sample1 * PanningPos) >> 4); /* right */ |
174 | + *(bufferpos + 2 * sample + 1) += (GUSsample) ((sample1 * (15 - PanningPos)) >> 4); /* left */ | ||
175 | } | 175 | } |
176 | /* write back voice and volume */ | 176 | /* write back voice and volume */ |
177 | GUSvoice(wVSRCurrVol) = Volume32 / 32; | 177 | GUSvoice(wVSRCurrVol) = Volume32 / 32; |