Skip to content

A simple MIPS to LLVM IR recompiler with ahead-of-time recompilation support

License

Notifications You must be signed in to change notification settings

Themaister/MIPS-LLVM-Jitter

Repository files navigation

MIPS-LLVM-Jitter

This implements a basic MIPS I to LLVM recompiler. It loads MIPS ELF files which target Linux. Little-endian and big-endian are both supported. No privileged instructions are supported, a handful of syscalls, enough to run some applications. The recompiler has been tested with glibc and libstdc++.

Floating point for MIPS I is supported, except FP control register rounding modes.

Only Linux as the host-OS is currently supported/tested, due to how the syscalls are implemented. Other OSes could be supported with more sophisticated syscall emulation.

LLVM 7 and 8 have been tested.

Build

Build with CMake. Nothing unusual.

Blog series

There is a blog series about this project. See:

Potential use cases

A major use case I have in mind is porting old game titles or applications with binary translation. MIPS was a fairly common architecture in the 90s and early 00s. There might be legacy applications out there which could benefit from this work.

Disclaimer

This codebase is placed on Github under a permissive license in the hope someone finds it interesting and educational. It is not expected to be useful as-is. Do not expect any support or further development (for free).

If you have any commercial use for this project which needs further development to accomplish, I might be available for contracting work. Contact me by e-mail on "post at arntzen-software.no".

About

A simple MIPS to LLVM IR recompiler with ahead-of-time recompilation support

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages