|
Message
From: =?unknown-8bit?Q?Gy=F6rgy?= 'nog' Jeney<nog@s...>
Date: Thu Mar 24 21:10:56 CET 2005
Subject: [openrisc] [or1ksim #64] Dynamic recompiler
Hi,This is the actual dynamic recompiler implementation. For those that have not been following too closely, this implements dynamic code generation which improves execution speed by a hughe margin.
The good news is that now you won't get bored watching the weal spin (|/-) while linux is loading its ramdisk it goes so fast.
For starters here are some benchmarks loading linux until the ramdisk has loaded. This is without my delay loop calibration `optimisation' hack:
With the complex execution model (the `old' one): exit(00000000) @reset : cycles 0, insn #0 @exit : cycles 186577411, insn #78693329 diff : cycles 186577411, insn #78693329
real 2m19.102s user 2m14.060s sys 0m3.420s
With the recompiler: exit(00000000) @reset : cycles 0, insn #0 @exit : cycles 186577411, insn #0 diff : cycles 186577411, insn #0
real 1m5.502s user 0m57.440s sys 0m6.800s
The complex/simple models should continue to work as they did untill now. To use the recompiler instead of the complex execution model configure the simulator with `./configure --target=or32 --enable-execution=dynamic'.
If you decide to give the recompiler a go note that you absolutly must disable the security-enhancing kernel features like exec-shield and PAX. I don't know about the others. The problem is that they execute protect everything except the .text section of the ELF file which works fine for most programs but since this is a dynamic code generator the code that ulimatly simulates the cpu ends up being dynamically allocated (ie. Doesn't reside in the .text section).
There are still some limitations that need to be ironed out, but it is good enough to boot linux and run some of the basic utilities found in the initrd. The known limitations: 1) There are numerous missed optimistaions. Check the FIXMEs in the code. 2) Instruction cache emuation does not work as there is no instruction fetch on *any* executed instruction. The data caches work though. 3) The overflow flag is not implemented. 4) The carry flag is not implemented. 5) The mac instructions don't work (Don't know why). 6) Interactive mode (-i) doesn't work (also implies hitting CTRL-C). 7) Some stuff I surely missed.
ChangeLog: * Implement a dynamic recompiler to speed up the execution.
nog. -------------- next part -------------- A non-text attachment was scrubbed... Name: patch64.bz2 Type: application/octet-stream Size: 35389 bytes Desc: not available Url : patch64-0001.obj
|
 |