diff options
author | Nils Wallménius <nils@rockbox.org> | 2007-09-30 19:22:57 +0000 |
---|---|---|
committer | Nils Wallménius <nils@rockbox.org> | 2007-09-30 19:22:57 +0000 |
commit | f9664e7e87a17c675f8a0da78466d47ff5f4875f (patch) | |
tree | 09021aa75271008393d6339ca45cc051a4dfe1c4 /apps/plugins/midi/synth.h | |
parent | 035529c487feb5a0e1d951b1ac8f82c23cfbff62 (diff) | |
download | rockbox-f9664e7e87a17c675f8a0da78466d47ff5f4875f.tar.gz rockbox-f9664e7e87a17c675f8a0da78466d47ff5f4875f.zip |
Unroll a frequently executed loop a little for a small speedup
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@14924 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/plugins/midi/synth.h')
-rw-r--r-- | apps/plugins/midi/synth.h | 31 |
1 files changed, 24 insertions, 7 deletions
diff --git a/apps/plugins/midi/synth.h b/apps/plugins/midi/synth.h index 5edaf2b7bf..223b5974e2 100644 --- a/apps/plugins/midi/synth.h +++ b/apps/plugins/midi/synth.h | |||
@@ -16,20 +16,37 @@ | |||
16 | * KIND, either express or implied. | 16 | * KIND, either express or implied. |
17 | * | 17 | * |
18 | ****************************************************************************/ | 18 | ****************************************************************************/ |
19 | |||
20 | int initSynth(struct MIDIfile * mf, char * filename, char * drumConfig); | 19 | int initSynth(struct MIDIfile * mf, char * filename, char * drumConfig); |
21 | signed short int synthVoice(struct SynthObject * so); | 20 | signed short int synthVoice(struct SynthObject * so); |
22 | void setPoint(struct SynthObject * so, int pt); | 21 | void setPoint(struct SynthObject * so, int pt); |
23 | 22 | ||
24 | static inline void synthSample(int * mixL, int * mixR) | 23 | static inline void synthSample(int * mixL, int * mixR) |
25 | { | 24 | { |
26 | register int dL=0; | 25 | int i; |
27 | register int dR=0; | 26 | register int dL=0; |
28 | register short sample=0; | 27 | register int dR=0; |
29 | register struct SynthObject *voicept=voices; | 28 | register short sample = 0; |
30 | struct SynthObject *lastvoice=&voices[MAX_VOICES]; | 29 | register struct SynthObject *voicept=voices; |
30 | |||
31 | for(i=MAX_VOICES/2; i > 0; i--) | ||
32 | { | ||
33 | if(voicept->isUsed==1) | ||
34 | { | ||
35 | sample = synthVoice(voicept); | ||
36 | dL += (sample*chPanLeft[voicept->ch])>>7; | ||
37 | dR += (sample*chPanRight[voicept->ch])>>7; | ||
38 | } | ||
39 | voicept++; | ||
40 | if(voicept->isUsed==1) | ||
41 | { | ||
42 | sample = synthVoice(voicept); | ||
43 | dL += (sample*chPanLeft[voicept->ch])>>7; | ||
44 | dR += (sample*chPanRight[voicept->ch])>>7; | ||
45 | } | ||
46 | voicept++; | ||
47 | } | ||
31 | 48 | ||
32 | while(voicept!=lastvoice) | 49 | for(i=MAX_VOICES%2; i > 0; i--) |
33 | { | 50 | { |
34 | if(voicept->isUsed==1) | 51 | if(voicept->isUsed==1) |
35 | { | 52 | { |