3 ms·
Gameboy Emulation in Javascript and HTML5
- thristian 16y agoI'd like to see somebody using the tracing-compiler technique outlined by Robert O'Callahan in an emulator for a real-life hardware system: http://weblogs.mozillazine.org/roc/archives/2010/11/implementing_a.html http://weblogs.mozillazine.org/roc/archives/2010/11/implemen...
- sparky 16y agoAm I misunderstanding or does his "tracing" stop at the basic block level? While basic blocks are completely predictable traces through the program, they are usually very short. You can get much more benefit by finding long common traces through multiple basic blocks and compiling the whole thing as a unit, providing tests and/or fixup code in case you find you actually needed to branch somewhere else in the middle of a trace. This is what I think most compiler people would call a "tracing JIT."
- thristian 16y agoHm, that's a good point. For some reason I assumed it would trace through unconditional branches, but the post I linked to does indeed say "I terminate the trace after any branch instruction", not "any conditional branch instruction". That seems like quite a missed opportunity; I wonder why the code has that restriction.
- daeken 16y agoIn the context of a JIT, you have a tradeoff to make: do you exhaust all possibilities for optimization, or do you do as little as possible to get something running. That's why you have things like Hotspot, where they initially do as little as possible to get things rolling, then optimize heavily as it finds bottlenecks. This is no easy task.
- daeken 16y agoI did this last year: http://daeken.github.com/Dyna6502Asm/ http://daeken.github.com/Dyna6502Asm/ I took the awesome 6502 emulator from http://6502asm.com/ http://6502asm.com/ and converted it to accumulate instructions from each basic block, turn them into functions, caches them, and let the JIT do its magic. While I never benchmarked it, I'd say it got between a 5x and 20x speedup on most things. It breaks certain self-modifying code (never bothered to add cache invalidation), but overall it works well.
- bryanh 16y agoWhen I see these sorts of things, I like to imagine that in 10 years we'll be playing Doom 3 run off Javascript in a browser. You know, march of progress and all.
- corysama 16y agoIt'll be a lot less than 10 years. We can already play Quake2 running on JavaScript in the browser. http://tatari.se:8080/GwtQuake.html http://tatari.se:8080/GwtQuake.html