As of January 2023, this project is no longer being maintained. Many parts of this projects have open-source alternatives that are part of a bigger effort and that are actively maintained:
- llvm-exegesis allows analyzing individual instructions or snippets of assembly code.
- llvm-mca is a CPU pipeline simulation tool.
- uops.info provides detailed performance characteristics and a machine-readable database of x86-64 instructions.
Google's EXEgesis project aims to improve code generation in compilers, via:
- Providing machine-readable lists of instructions for hardware vendors and microarchitectures.
- Providing tools for debugging the performance of code based on this data.
For a high-level overview of our efforts, see the slides for a tech talk about EXEgesis (July 2017).
We are providing tools to measure instruction latencies and
µOps scheduling. We have
contributed that part into LLVM as as the
llvm-exegesis
tool.
This repository provides a set of tools for extracting data about instructions and latencies from canonical sources and converting them into machine-readable form. Some require parsing PDF files; others are more straightforward.
The output data is available in the form of a Protocol Buffer message.
It includes:
- A textual description. e.g.
Add with carry imm8 to AL.
- The raw encoding. e.g.
14 ib
and equivalent LLVM mnemonic. e.g.ADC8i8
- Intel x86-64 - done
- Issue tracker: https://github.com/google/EXEgesis/issues
- Mailing list: [email protected]
We welcome patches -- see CONTRIBUTING for more information on how to submit a patch.