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>
* 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"
/* __xtensa_libgcc_window_spill: This function uses a series of nested
calls to flush out all but the current register window. This is
used to set up the stack so that arbitrary frames can be accessed.
The functions used for the nested calls are also reused by the
nonlocal goto function below. */
/* __xtensa_libgcc_window_spill: This function flushes out all but the
current register window. This is used to set up the stack so that
arbitrary frames can be accessed. */
.align 4
.global __xtensa_libgcc_window_spill
.type __xtensa_libgcc_window_spill,@function
.align 4
.global __xtensa_libgcc_window_spill
.type __xtensa_libgcc_window_spill,@function
__xtensa_libgcc_window_spill:
entry sp, 48
call4 .L__wdwspill_assist52 // called with call8, only need a call4
retw
.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
entry sp, 32
movi a2, 0
syscall
retw
.size __xtensa_libgcc_window_spill,.-__xtensa_libgcc_window_spill
/* __xtensa_nonlocal_goto: This code does all the hard work of a
@ -90,7 +63,10 @@ __xtensa_nonlocal_goto:
entry sp, 32
/* 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
the one identified by a2, the only way to restore those