An code evolver optimizes code by doing local changes of in function to minimize time  of 
given benchmark file.

Evolver is ran with

./evolver.rb

It goes through all subdirectories subd to optimize function in 'subd/function.S' file according 
to benchmark 'subd/test.c'. 

A 'subd/test.c' benchmark is required to output single integer of time spend with given function.

Currently evolver has limited knowledge of assembly. It needs to annotate areas it can touch 
by comments

# EVOLVE_START
# EVOLVE_END

You cannot have any jump instruction or label or instruction that set flags for conditional jump.

Second restriction is that that block cannot contain any stores as we currently do not compute
memory aliasing.

We typicaly use evolver with combination of replaying dryrun data as benchmark. 

When you want to decide between two alternative instruction sequences you can use evolver and preprocessor.
Define alternatives SEQUENCE1, SEQUENCE2 and write:

# EVOLVE_START
# define SEQUENCE SEQUENCE1
# define SEQUENCE SEQUENCE2
# EVOLVE_END
