[kaffe] Threaded code and quick instructions for Kaffe

jserv at linux2.cc.ntu.edu.tw jserv@linux2.cc.ntu.edu.tw
Tue Jun 1 00:07:02 PDT 2004


--uAKRQypu60I7Lcqm
Content-Type: text/plain; charset=big5
Content-Disposition: inline

Hello all,

  After looking up Helmut Eller's Threaded code interpreter patch
[1], I attempt to migrate his patch to Kaffe 1.1.x version, and it 
is almost finished, which is attached against kaffe cvs in this mail.

  Helmut Eller quoted his patch as following:

    Threaded code provides about 10% speedup over the original 
    bytecode interpreter, threaded code and quick instructions 
    provide about a factor of three (detailed results[2]). More 
    performance improvements in the kaffe interpreter should be 
    possible without too much work (e.g., stack caching); the 
    benefit of threaded code and quick instructions would be 
    even more prominent if these optimizations were applied.

  So that, it would be great to merge into Kaffe development to
gain performance benefit over improved interpreter, and it could
act an important role in JIT/Interpreter integration[3].

  After applying the patch, you should re-configure kaffe with
--with-engine=intrp and rebuild all.

cheers,
Jim Huang

[1] http://www.complang.tuwien.ac.at/java/kaffe-threaded/
[2] http://www.complang.tuwien.ac.at/java/kaffe-threaded/benchmarks.txt
[3] http://www.flux.utah.edu/~tullmann/kaffe/jitintrp/

--uAKRQypu60I7Lcqm
Content-Type: application/octet-stream
Content-Disposition: attachment; filename="threaded-intrp.diff.gz"
Content-Transfer-Encoding: base64

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

--uAKRQypu60I7Lcqm--




More information about the kaffe mailing list