*Binary Optimisers* are sometimes called "Post Link optimisers". These products can be viewed as "X to X binary translators". Another name is Binary Rewriting systems. * [[http://www.hp.com][HP]]'s [[http://www.hpl.hp.com/cambridge/projects/Dynamo][Dynamo]] is pretty much the leader in this field * Wiggins/Redstone is an experimental dynamic optimiser that uses a novel combination of hardware sampling and software instrumentation to dynamically collect hot path information. It is unpublished as of 2001, but there is a series of slides from a presentation at Hot Chips 11, entitled [[http://world.std.com/~gorton/professional/deaver.pdf][Wiggins/Redstone: An On-line Program Specializer]]. * [[http://www.research.microsoft.com][Microsoft]]'s Mojo is a research dynamic optimiser for Windows. See the paper [[http://www.ece.wisc.edu/~jes/902/papers/mojo.pdf][Mojo: A Dynamic Optimization System]]. Results to date are not good (most programs slow down), but they have directions for future improvements. * [[http://www.cs.arizona.edu/solar/index.html][Software Optimization at Link-time And Run-time (SOLAR)]] at the University of Arizona. From their web page: _The SOLAR project is developing binary rewriting techniques for flexible link-time and run-time code optimizations. We are exploring a variety of applications, architectures, and optimization metrics. Applications include traditional sequential programs, parallel scientific programs that use a message passing library such as MPI, and mobile computing applications. We have developed link-time optimizers for the Compaq Alpha and Intel IA-32 (Pentium) architectures, and are building one for the Intel/HP IA-64 (Itanium) architecture._ *Optimisers Requiring Source Code* (link time or post link). Although these are static optimisers, they rely on special information (profile information or object files) that are not available without the source code to the program being optimised, and so are not really binary translators. They are somewhat related, so they are mentioned here. * [[http://www.compaq.com][Compaq]]'s spike (see [[http://www.tru64unix.compaq.com/dtk/misc_docs/prog_gd][Tru64 Unix Programmer's Guide]] and search for "spike") is actually a static (but post link) optimiser that can take advantage of profile information. Thus, it's not really a binary translator. * [[http://www.cs.arizona.edu/alto][Alto]] is a link time optimiser. It is therefore able to see all of the code at once (including libraries). Again, not a binary translator. *Binary program compactors*. These systems compact programs to deal with the fact that hard disks are increasing in speed slower than processors are, or that embedded devices often have limited memory. * [[http://www.innaworks.com][Innaworks]]' [[http://www.innaworks.com/mBooster.html][mBooster]] is the first commercial recompiler for J2ME midlets and iAppli applications. mBooster is actually an optimizing recompiler. It takes J2ME bytecode and recompiles using agressive compiler-based optimization techniques to generate optimized J2ME bytecode. Common J2ME mobile phones today have very tight size constraints: 64kB is the norm. * [[http://www.cs.arizona.edu/squeeze][Squeeze]] at the University of Arizona, is a project aimed at reducing the memory footprint for executables on palm sized devices. * [[http://www.elis.rug.ac.be/~brdsutte/squeeze++][Squeeze++]] is an evolution of Sqeeze. It is an example of binary compaction, applying aggressive whole-program optimization and code abstraction techniques on binary programs. Squeeze++ compacted programs are up to 70% smaller and at the same time 20% faster. Squeeze++ is a binary rewriter rather than a binary translator. ----- CategoryBinaryTranslation