IA-64

SableVM

Thursday, April 15th, 2004

SableVM is a free/Free spec-compliant and extensible JVM. It includes a JIT for PPC, SPARC and x86, but runs on several more architectures. It supports several different interpreter dispatch models (switched, threaded, inlined) and has an efficient runtime system. It is implemented in C with extensive use of M4 macros.

Machine SUIF

Friday, April 9th, 2004

Machine SUIF is “a flexible, extensible, and usable infrastructure for constructing compiler back ends.” Most notably, Machine SUIF provides a way to generate code for x86, IA-64, or Alpha from SUIF code, as well as “libraries for control- and data-flow analysis, and passes for register allocation, instruction scheduling, scalar optimization, and code layout.” The optimizations supplied by Machine SUIF are implemented on top of a substrate-independent API — therefore, one can use Machine SUIF optimizations in other compiler infrastructures by re-implementing an API. Furthermore, target-specific information to be used by low-level optimizations is supplied by dynamically-linked libraries, allowing the possibility of portable low-level optimization code.

C––, portable assembly language

Thursday, April 1st, 2004

C–– is a “portable assembly language” — a target language for compiler backends that can compile into native code on several platforms. It is implemented in OCaml and appears sufficiently general to handle a wide range of language features: for example, all values are untyped strings of bits, multiple return values are possible, and tail call optimization is readily available. C–– also supports a run-time interface, so that one may use implementations of support code that are most suitable for a given language.

There are code generators for x86, PPC, IA-64, SPARC, MIPS, ARM, and Alpha. According to the web page, as of July 2003, the x86 backend is reasonably mature, whereas the rest are under development.

Thanks to Kent Hunter for the pointer.

Open64 and derivatives

Wednesday, March 31st, 2004

Open64 (formerly Pro64) is an open-source compiler for C++ and Fortran, targeting IA-64. It uses an intermediate language called WHIRL, and includes “inter-procedural analysis and optimizations, loop-nest optimizations, scalar global optimizations, and code generation.” The mailing list for Open64 developers seems to get between 10-30 messages a month.

The CAPSL group at Delaware has developed a compiler based on Open64 called Kylin, which targets Intel’s XScale architecture. Unfortunately, as of this writing, the source code for Kylin is not available.

Intel and the Chinese Academy of Sciences have collaborated to produce the Open Research Compiler (ORC). ORC is a derivative of Open64; it includes more advanced IA-64 optimizations and has been refactored in order to “facilitate future research.” It includes SSA, region-based compilation, and edge, value, and memory profiling.