[LLVMdev] Would DosBox benefit from LLVM JIT?

David Chisnall David.Chisnall at cl.cam.ac.uk
Wed Jul 22 06:21:23 PDT 2015


A sequence of 32 instruction is not very likely to have many optimisation opportunities that LLVM can take advantage of.  You may get a speedup from longer traces, though of course the LLVM JITing time is likely to be longer, so you’d want to make sure that it’s done in a separate thread.  If you can get longer traces (and DOSBox has the infrastructure already for invalidating on self-modifying code) then you may be able to get some speedup.

There was a similar project to use LLVM in QEMU a few years ago that failed to provide a speedup.

David

> On 22 Jul 2015, at 14:06, Jacek Wielemborek <d33tah at gmail.com> wrote:
> 
> Hello,
> 
> First of all, I'd like to point out that I am a newbie in this topic
> and this is more of a "would it work?" kind of question. I basically
> just came up with a difficult problem and decided to research on it.
> 
> I recently tried to run Elder Scrolls: Daggerfall on an ARM netbook
> Toshiba AC100 and failed even after turning on the latest patches for
> "dynamic recompilation". I took a look at the code and here's what I found:
> 
> https://github.com/wjp/dosbox/blob/idados/src/cpu/core_dynrec/decoder.h#L34
> 
> The relevant macros and functions are defined there:
> 
> https://github.com/wjp/dosbox/blob/idados/src/cpu/core_dynrec/risc_armv4le-o3.h
> 
> So basically, it looks like there's code that translates instructions
> from x86 to a few other platforms in chunks of 32 opcodes. Since this
> code was too slow to me, I asked myself the question "how could it speed
> up?" and assumed that perhaps LLVM could optimize it on the fly. So,
> here's the question - would it be feasible given the assumptions above?
> What I am thinking about is a system that would:
> 
> 1. Generate LLVM IR code instead of native calls and JIT them on the fly,
> 2. Apply optimizations that I know from Clang.
> 
> I saw this example on pastebin [1] and generating functions on the fly
> looks rather straightforward, but I am not sure if it would be as easy
> if I wanted to translate machine code from one platform to another. Does
> LLVM have or integrate with any libraries that would make this
> practical? What would be the main challenges? Keep in mind that I would
> welcome even a partial answer.
> 
> Cheers,
> d33tah
> 
> [1] http://pastebin.com/f2NSGZGR
> 
> 
> 
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev





More information about the llvm-dev mailing list