1/1

|
[or1ksim #64] Dynamic recompiler
by Unknown on Mar 24, 2005 |
Not available! | ||
|
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 : http://www.opencores.org/forums/openrisc/attachments/20050324/2e548d84/patch64-0001.obj
|
|||
1/1

