
| i have found my investiations in this area. that is the C-- code | generated for fac worker: | | Fac_zdwfac_entry() { | c1C0: | _s1BD = I32[Sp + 0]; | if (_s1BD != 1) goto c1C4; | R1 = I32[Sp + 4]; | Sp = Sp + 8; | jump (I32[Sp + 0]); | c1C4: | _s1BI = _s1BD * I32[Sp + 4]; | _s1BF = _s1BD - 1; | I32[Sp + 4] = _s1BI; | I32[Sp + 0] = _s1BF; | jump c1C0; | } Once we do the A/B split of the code generator that I referred to, we should get something like this from the A part fac(n,m) { if n!=1 goto L return(m) L: jump fac( n-1, n*m ) } The B part will introduce the Sp nonsense. I think you'll find this a much easier optimisation target. Simon -users