mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-16 17:21:07 +08:00
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:
parent
46468cd96f
commit
57174693e0
@ -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
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user