From f9664e7e87a17c675f8a0da78466d47ff5f4875f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nils=20Wallm=C3=A9nius?= Date: Sun, 30 Sep 2007 19:22:57 +0000 Subject: 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 --- apps/plugins/midi/synth.h | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) (limited to 'apps/plugins') 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 @@ * KIND, either express or implied. * ****************************************************************************/ - int initSynth(struct MIDIfile * mf, char * filename, char * drumConfig); signed short int synthVoice(struct SynthObject * so); void setPoint(struct SynthObject * so, int pt); static inline void synthSample(int * mixL, int * mixR) { - register int dL=0; - register int dR=0; - register short sample=0; - register struct SynthObject *voicept=voices; - struct SynthObject *lastvoice=&voices[MAX_VOICES]; + int i; + register int dL=0; + register int dR=0; + register short sample = 0; + register struct SynthObject *voicept=voices; + + for(i=MAX_VOICES/2; i > 0; i--) + { + if(voicept->isUsed==1) + { + sample = synthVoice(voicept); + dL += (sample*chPanLeft[voicept->ch])>>7; + dR += (sample*chPanRight[voicept->ch])>>7; + } + voicept++; + if(voicept->isUsed==1) + { + sample = synthVoice(voicept); + dL += (sample*chPanLeft[voicept->ch])>>7; + dR += (sample*chPanRight[voicept->ch])>>7; + } + voicept++; + } - while(voicept!=lastvoice) + for(i=MAX_VOICES%2; i > 0; i--) { if(voicept->isUsed==1) { -- cgit v1.2.3