An AIMGP (Automatic Induction of Machine code by Genetic Programming) engine
Clone or download
Latest commit 726671d Dec 4, 2018



Evoasm is an AIMGP (Automatic Induction of Machine code by Genetic Programming) engine.

You give it a set of examples, that is, several input/output pairs, that describe a program's behavior. It will then try to come up with a short program (in the form of machine code) that follows your specification, by means of genetic programming. Evoasm contains a JIT that executes the generated machine code on the fly.

Currently, the only supported architecture is x86-64.


  • Fast JIT
  • x86-64 up to AVX2 (no FPU)
  • Lightweight backend C library with no third-party dependencies
  • Support for floating-point and integer inputs/outputs including SIMD vectors
  • Automatically generated and verified instruction encoder
  • Parallel island model using OpenMP
  • Ruby bindings


$ git clone --recursive
$ bundle install
# compile libevoasm, omit --no-omp if your compiler has OpenMP support
$ bundle exec rake compile -- --no-omp
$ bundle exec ruby docs/examples/sym_reg.rb # run example


  • Ruby (MRI >= 2.3)
  • Capstone for disassembling (optional).
  • Gnuplot for visualizing loss functions (optional)
  • POSIX-compliant OS (Linux and Mac OS X should both work).


Please see the API documentation, have a look at the examples or the test cases.


  1. Fork it ( )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request