During the Summer of 2010, I was successfully in getting a research scholarship to work on a research and development project known as qemu-async-llvm. The project looks at extending QEMU ability to translate from one architecture to another. (target to the host), by translating the input code to LLVM, in an effort to improve the runtime. Terms:

  • target – the target architecture that we wish to run code for
  • host – the machine that emulator code is running on (AMD64/x86_64)
  • x86_64 – the company agnostic name for AMD64.

Quick overview, LLVM is a compiler framework, QEMU is an architecture simulator. For this project the source architecture was ARM and the target was x86_64. The project is based on the work done by honours student the the University of Adelaide the year before, who put in place most the ground work and integration. My goal was to look at ways on extending on it to improve the runtime of some benchmarks. I will say this in advance the following may be confusing and may not always be exactly step by step as I was more interested in just coding rather then take a break every 5 minute to write down what I was doing.


This project is a 6 week long adventure, and I will do my best to document every day of it. I will try my best to write it in a way such that it can be understood by others.

Edit: I have not re-read all entries in its entirety so there is no guarantee on any of it being coherent.