lib2funcs.S (__xtensa_libgcc_window_spill, [...]): Use a syscall instructions to flush the register windows.

* config/xtensa/lib2funcs.S (__xtensa_libgcc_window_spill,
        __xtensa_nonlocal_goto): Use a syscall instructions to flush
        the register windows.

From-SVN: r52503
This commit is contained in:
Bob Wilson 2002-04-19 00:31:17 +00:00 committed by Bob Wilson
parent 46468cd96f
commit 57174693e0
2 changed files with 20 additions and 38 deletions

View File

@ -1,3 +1,9 @@
2002-04-18 Bob Wilson <bob.wilson@acm.org>
* config/xtensa/lib2funcs.S (__xtensa_libgcc_window_spill,
__xtensa_nonlocal_goto): Use a syscall instructions to flush
the register windows.
2002-04-18 Zack Weinberg <zack@codesourcery.com> 2002-04-18 Zack Weinberg <zack@codesourcery.com>
* real.h: Define REAL_VALUE_TYPE_SIZE as 96 or 160, as * real.h: Define REAL_VALUE_TYPE_SIZE as 96 or 160, as

View File

@ -30,46 +30,19 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "xtensa/xtensa-config.h" #include "xtensa/xtensa-config.h"
/* __xtensa_libgcc_window_spill: This function uses a series of nested /* __xtensa_libgcc_window_spill: This function flushes out all but the
calls to flush out all but the current register window. This is current register window. This is used to set up the stack so that
used to set up the stack so that arbitrary frames can be accessed. arbitrary frames can be accessed. */
The functions used for the nested calls are also reused by the
nonlocal goto function below. */
.align 4 .align 4
.global __xtensa_libgcc_window_spill .global __xtensa_libgcc_window_spill
.type __xtensa_libgcc_window_spill,@function .type __xtensa_libgcc_window_spill,@function
__xtensa_libgcc_window_spill: __xtensa_libgcc_window_spill:
entry sp, 48 entry sp, 32
call4 .L__wdwspill_assist52 // called with call8, only need a call4 movi a2, 0
retw syscall
.size __xtensa_libgcc_window_spill,.-__xtensa_libgcc_window_spill
.align 4
.L__wdwspill_assist56:
entry sp, 16
call4 .L__wdwspill_assist52
retw
.align 4
.L__wdwspill_assist52:
entry sp, 48
call12 .L__wdwspill_assist40
retw
.align 4
.L__wdwspill_assist40:
entry sp, 48
call12 .L__wdwspill_assist28
retw
.align 4
.L__wdwspill_assist28:
entry sp, 48
call12 .L__wdwspill_assist16
retw
.align 4
.L__wdwspill_assist16:
entry sp, 16
movi a15, 0
retw retw
.size __xtensa_libgcc_window_spill,.-__xtensa_libgcc_window_spill
/* __xtensa_nonlocal_goto: This code does all the hard work of a /* __xtensa_nonlocal_goto: This code does all the hard work of a
@ -90,7 +63,10 @@ __xtensa_nonlocal_goto:
entry sp, 32 entry sp, 32
/* flush registers */ /* flush registers */
call8 .L__wdwspill_assist56 mov a5, a2
movi a2, 0
syscall
mov a2, a5
/* Because the save area for a0-a3 is stored one frame below /* Because the save area for a0-a3 is stored one frame below
the one identified by a2, the only way to restore those the one identified by a2, the only way to restore those