Hi Francois,
On Mon, Feb 7, 2011 at 12:12 AM, Francois Stephany < tulipe.moutarde@gmail.com> 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.... http://lists.squeakfoundation.org/pipermail/squeak-dev/2011-January/156356.h...
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.
vm-dev@lists.squeakfoundation.org