From: bwilson Date: Fri, 19 Apr 2002 00:31:17 +0000 (+0000) Subject: * config/xtensa/lib2funcs.S (__xtensa_libgcc_window_spill, X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=commitdiff_plain;h=e17ee7e608cf666c9975f5308d3758d238c9c2a1;hp=71a524bea0b1c2fd5df4a20f6935210b6d11d306 * config/xtensa/lib2funcs.S (__xtensa_libgcc_window_spill, __xtensa_nonlocal_goto): Use a syscall instructions to flush the register windows. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@52503 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 33c7b5bb47b..2e7f60ad109 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2002-04-18 Bob Wilson + + * 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 * real.h: Define REAL_VALUE_TYPE_SIZE as 96 or 160, as diff --git a/gcc/config/xtensa/lib2funcs.S b/gcc/config/xtensa/lib2funcs.S index f607e01f2ea..bdc26e85cc5 100644 --- a/gcc/config/xtensa/lib2funcs.S +++ b/gcc/config/xtensa/lib2funcs.S @@ -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. */ - - .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 +/* __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 -.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 + .align 4 + .global __xtensa_libgcc_window_spill + .type __xtensa_libgcc_window_spill,@function +__xtensa_libgcc_window_spill: + 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