Hi Francois, On Mon, Feb 7, 2011 at 12:12 AM, Francois Stephany < [email protected]> wrote:
> Hi Eliot, > > Probably a stupid question but what's the difference between > SimpleStackBasedCogit and StackToRegisterMappingCogit ? See the following thread: http://lists.squeakfoundation.org/pipermail/squeak-dev/2010-November/155269.html http://lists.squeakfoundation.org/pipermail/squeak-dev/2011-January/156356.html Here's a summary: The SimpleStackBasedCogit is a one-to-one translation of bytecodes to machine code so tat every push or pop in the bytecode results in a corresponding push or pop in the generted code. This results in a machine that passes all parameters on the stack and reifies all comparison results as either true or false. The StackToRegisterMappingCogit defers generating code until it reaches a bytecode that consumes operands on the stack (i.e. a send, a temp or inst var store, a return, a closure creation or an Array creation ( {...} )). This results in a machine that is able to pass parameters in registers for small arity sends (currently 0 or 1 arg), and able to inline some integer arithmetic and comparison, e.g. that involved in inlined to:do: loops, and can do some constant folding (hint: write 2 + 3 + 4 + i, not i + 2 + 3 + 4). There are two main benefits. The StackToRegisterMappingCogit produces machine code that is about 20% more compact than the SimpleStackBasedCogit (hence meaning less frequent code zone reclamations and better cache performance) and considerably faster for microbenchmarks, for example the empty 1 to: 100000000 do: [:i|] (equivalent to i := 1. [i <= 100000000] whileTrue: [i := i + 1]) is 4 times faster than the SimpleStackBasedCogit. At a macro level StackToRegisterMappingCogit speeds up code such as compiling a method by about 10%, with low-level arithmetic-intensive code showing greater speedups. best, Eliot > > new Cog VMs are available, SimpleStackBasedCogit @ >> http://www.mirandabanda.org/files/Cog/VM/VM.r2359/ and >> StackToRegisterMappingCogit @ >> http://www.mirandabanda.org/files/Cog/VM/VM.r2361. I think the new code >> generator is ready for prime time now. I fixed a number of bugs over >> the past three weeks and we're now using the StackToRegisterMappingCogit >> internally at Teleplace. >> > > >
