Skip to content
master
Switch branches/tags
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
bin
 
 
 
 
lib
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Evoasm

Description

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.

Features

  • 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

Installation

$ 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

Requirements

  • 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).

Documentation

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

Contributing

  1. Fork it ( https://github.com/furunkel/evoasm/fork )
  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

License

AGPL-3.0

About

An AIMGP (Automatic Induction of Machine code by Genetic Programming) engine

Topics

Resources

License

Packages

No packages published

Languages