From: <gb...@di...> - 2000-09-13 17:29:12
|
Hi, I managed to make the JIT compiler working. The problem is that it is still unstable and slow. In fact, by disassembling the generated code, I noticed that it just generates calls to the instructions handlers. I know where this may come from (the optlev thing I don't know what it is used for...) and I am trying to solve that problem. It currently requires have_get_word_unswapped *disabled*. When enabled, the compiler-execute process seems to hang when I start Speedometer tests. This may come from the the fact that I have overlooked at MOVEM handlers that explicitely bswap memory. I fixed support for unswapped_get_word in the main compile loop, however. I got rid of the pissoff thing but use an extra SPCFLAG in order to make the jitted code returning when necessary, if spcflags are tested, of course. Another rule is that the compiler is disabled when processing an emul_op. The reason of that is because an emul_op might flush the translation cache while the execution of that emul_op was required from compiled code. Though an emul_op marks the end of a block, I will let it as is for now. i.e. not compiling blocks while emul_op'ing. BTW, the Makefile.in grew up a lot, maybe should we find a more clever rule to compile all parts at once... I also prepared a new table68k with better flag usage and control flow information. This should make longer compiled blocks as flag usage information for instructions such as BFEXT was unknown thus making BFEXT an end-block marker. I would like a new prefs item, for at least the translation cache size. I am using "cachesize" but if you prefer another name (e.g. "jit_cachesize") just tell me so. One more thing: the resulting BasiliskII file is quite big (~3 MB) and the time to compile it is not negligible on my poor computer (AMD K6-2/300). Just hope this won't hurt the host caches... Bye. -- Gwenolé Beauchesne |