Go to main content

School of Computer Science Intranet



Optimizing compiler fast PowerPC emulation, using the Jikes RVM as a dynamic binary translator (DBT). The PearColator project's home is now on SourceForge!

PearColator is a DBT built around an existing dynamic optimizing compiler and adaptive compilation framework. It is written in Java. It has a safe and portable memory model, the cost of which can be optimized away by code motion, extended array SSA transformations and other optimizations (the Jikes RVM has a clean and simple intermediate representation making it ideal for creating optimizations - Java is well known as an excellent develoment language). PearColator is cleanly written in Java, and should be portable to other JVMs at little cost. PearColator optimizes itself in parallel to its execution. As part of the Jamaica project parallelisation optimizations have been created and are being tested for PearColator. Java's exception model allows hardware exceptions to be precisely and accurately simulated in the presence of optimizing compiler optimizations.


PearColator is released under the CPL to be compatible with the Jikes RVM.


PearColator is still under development but already runs a number of applications (understandably our interest has primarily been with benchmarks). If you are looking for a fast, stable and ready to use open source PowerPC dynamic binary translator then we'd recomend PearPC or QEMU. If you are an academic researching computer architectures then you may want to try SimpleScalar as well as PearColator.


The following are results collected from PearColator and other DBTs:

Host Machine
SuSE or yellowdog Linux
Execution environment Dhrystones
C or Java version
Compressing 10MB of zeros
Computing and printing prime numbers
G3 600MHz Native execution 714285.7 0.880s 2.190s
Athlon XP 2700+ Native execution 3333333.2 0.166s 2.190s
Athlon XP 2700+ QEMU fast
fast memory model ignoring security and paging issues
500000.0 0.905s 1.720s
Athlon XP 2700+ PearPC
Running from a Darwin command prompt
140845.1 3.560s 3.740s
Athlon XP 2700+ PearColator
Result for optimal trace length
243902.4 8.968s 13.35s
Athlon XP 2700+ Jikes RVM 2503755.0 n/a n/a
Athlon XP 2700+ HotSpot 1.4.2 client 3661662.0 n/a n/a
Athlon XP 2700+ HotSpot 1.4.2 server 5753739.0 n/a n/a

Both gzip and primes only run for a short time, so the cost of optimizing compiler isn't recovered by improved performance. The optimizing compiler allows the performance of a secure and safe memory model version of PearColator to be almost half of that of the insecure QEMU fast performance.

Below is the result of running nbench on PearColator on an Athlon XP 2700+:

BYTEmark* Native Mode Benchmark ver. 2 (10/95)
Index-split by Andrew D. Balsa (11/97)
Linux/Unix* port by Uwe F. Mayer (12/96,11/97)

TEST                : Iterations/sec.  : Old Index   : New Index
                    :                  : Pentium 90* : AMD K6/233*
NUMERIC SORT        :          11.553  :       0.30  :       0.10
STRING SORT         :         0.57828  :       0.26  :       0.04
BITFIELD            :      3.2823e+06  :       0.56  :       0.12
FP EMULATION        :         0.56264  :       0.27  :       0.06
FOURIER             :          16.485  :       0.02  :       0.01
ASSIGNMENT          :         0.20576  :       0.78  :       0.20
IDEA                :           48.94  :       0.75  :       0.22
HUFFMAN             :          16.021  :       0.44  :       0.14
NEURAL NET          :        0.090893  :       0.15  :       0.06
LU DECOMPOSITION    :          2.9936  :       0.16  :       0.11
==========================ORIGINAL BYTEMARK RESULTS==========================
INTEGER INDEX       : -10.000
Baseline (MSDOS*)   : Pentium* 90, 256 KB L2-cache, Watcom* compiler 10.0
==============================LINUX DATA BELOW===============================
Ljava/lang/Error;: Unrecognised system call: 42
        at java.lang.Throwable.fillInStackTrace(Throwable.java:103)
        at java.lang.Throwable.<init>(Throwable.java:53)
        at java.lang.Throwable.<init>(Throwable.java:57)
        at java.lang.Error.<init>(Error.java:81)
        at org.binarytranslator.PPC_Emulator.PPC_ProcessSpace.doSysCall(PPC_ProcessSpace.java:2137)
        at com.ibm.JikesRVM.DummyDynamicCodeRunner.invokeCode_PC_0x1001b6c0(DynamicCodeRunner.java:0)
        at org.binarytranslator.PPC_Emulator.Main.run(Main.java:161)
        at org.binarytranslator.PPC_Emulator.Main.main(Main.java:124)
        at com.ibm.JikesRVM.MainThread.run(MainThread.java:102)
JikesRVM: exit 113

The pipe system call still needs work :-) QEMU present benchmark results for nbench here.


View the JavaDoc for the PearColator project here.

View Richard Matley's MSc thesis about PearColator here.


You've read everything, agreed to the license and are prepared to try out PearColator? Then visit SourceForge for the latest version.