diff mp3lib/decod386.c @ 8543:60fe896e437c

decode_i586.c version uses %ebp for its own use, so: - we need to compile this with -fomit-frame-pointer or we cannot access the function parameters - we need to save & restore %ebp, or we'll destroy the caller's stack ptr
author arpi
date Tue, 24 Dec 2002 00:05:43 +0000
parents 131497b1f6ad
children 1320f1b3229d
line wrap: on
line diff
--- a/mp3lib/decod386.c	Mon Dec 23 22:13:46 2002 +0000
+++ b/mp3lib/decod386.c	Tue Dec 24 00:05:43 2002 +0000
@@ -164,18 +164,19 @@
   static const int step = 2;
   static int bo = 1;
   short *samples = (short *) (out + *pnt);
-
   real *b0,(*buf)[0x110];
   int clip = 0;
   int bo1;
+
+  *pnt += 128;
+
 /* optimized for x86 */
 #if defined(CAN_COMPILE_X86_ASM)
   if ( synth_func )
    {
-    int ret;
-    ret=(*synth_func)( bandPtr,channel,samples);
-    *pnt+=128;
-    return ret;
+//    printf("Calling %p, bandPtr=%p channel=%d samples=%p\n",synth_func,bandPtr,channel,samples);
+    // FIXME: synth_func() may destroy EBP, don't rely on stack contents!!!
+    return (*synth_func)( bandPtr,channel,samples);
    }
 #endif
   if(!channel) {     /* channel=0 */
@@ -264,7 +265,6 @@
       WRITE_SAMPLE(samples,sum,clip);
     }
   }
-  *pnt += 128;
 
   return clip;