|Subject:||[Qemu-devel] Sparc port|
|Date:||Sun, 08 Jun 2003 12:10:22 +0200|
|User-agent:||Mozilla/5.0 (X11; U; Linux i586; en-US; rv:1.1) Gecko/20020828|
I am now trying to make the Sparc port work again. I added a sparc disassembler so that debugging is easier.
In order to support direct block chaining, it is necessary that no prologue or epilogue are added in the generated code. It should be easy to do by moving the add/sub sp/fp in the call code in exec-i386.c.
Moreover, the 'restore' used in exec-i386.c in cpu_loop_exit() is not safe because we cannot be sure that there was exactly one call level.
I have two ideas :1) We use -mflat for exec-i386.c and helper-i386.c but not for op-i386.c to avoid gcc bugs. Now that op-i386.c only contains opcodes, the code inside should almost look like '-mflat' code.
2) We can patch cpu_exit_loop() by doing the right number of restores (maybe a single longjmp would suffice as l0...l7 are still saved.
Another more general idea for all archs is to call the generated code with a 'jump' instead of doing a call. It would be marginaly more complicated and would permit more optimisation (currently, on PowerPC and Alpha the code is very inefficient if a helper is called because the return address must be saved in a new generated stack frame).
|[Prev in Thread]||Current Thread||[Next in Thread]|