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 https://github.com/evoasm/evoasm $ 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).
- Fork it ( https://github.com/furunkel/evoasm/fork )
- Create your feature branch (
git checkout -b my-new-feature)
- Commit your changes (
git commit -am 'Add some feature')
- Push to the branch (
git push origin my-new-feature)
- Create a new Pull Request