Commit b7974b3a by Bob Wilson

lib1funcs.asm: Rename abi_entry/abi_return macros to leaf_entry/leaf_return.

	* config/xtensa/lib1funcs.asm: Rename abi_entry/abi_return macros
	to leaf_entry/leaf_return.  Change leaf_entry to add 16 bytes to
	the frame size.  Update to use the new macros.
	* config/xtensa/ieee754-sf.S: Use new leaf_entry/leaf_return macros.
	* config/xtensa/ieee754-df.S: Likewise.

From-SVN: r112604
parent 56e84019
2004-03-31 Richard Henderson <rth@redhat.com> 2006-03-31 Bob Wilson <bob.wilson@acm.org>
* config/xtensa/lib1funcs.asm: Rename abi_entry/abi_return macros
to leaf_entry/leaf_return. Change leaf_entry to add 16 bytes to
the frame size. Update to use the new macros.
* config/xtensa/ieee754-sf.S: Use new leaf_entry/leaf_return macros.
* config/xtensa/ieee754-df.S: Likewise.
2006-03-31 Richard Henderson <rth@redhat.com>
* tree-cfg.c (make_ctrl_stmt_edges, make_exit_edges): Merge into... * tree-cfg.c (make_ctrl_stmt_edges, make_exit_edges): Merge into...
(make_edges): ... here. Control fallthru creation with a local (make_edges): ... here. Control fallthru creation with a local
......
...@@ -30,10 +30,11 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA ...@@ -30,10 +30,11 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
#include "xtensa-config.h" #include "xtensa-config.h"
# Note: These functions use a minimum stack frame size of 32. This is # Force each stack frame to contain an "Extra Save Area" (ESA) of at least
# necessary for Xtensa configurations that only support a fixed register # 16 bytes. This is necessary for non-standard Xtensa configurations that
# window size of 8, where even leaf functions (such as these) need to # only support a fixed register window size of 8, where even leaf functions
# allocate space for a 4-word "extra save area". # (such as these) need the ESA for interrupt handlers.
#define MIN_ESA 16
# Define macros for the ABS and ADDX* instructions to handle cases # Define macros for the ABS and ADDX* instructions to handle cases
# where they are not included in the Xtensa processor configuration. # where they are not included in the Xtensa processor configuration.
...@@ -75,20 +76,20 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA ...@@ -75,20 +76,20 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
#endif #endif
.endm .endm
# Define macros for function entry and return, supporting either the # Define macros for leaf function entry and return, supporting either the
# standard register windowed ABI or the non-windowed call0 ABI. These # standard register windowed ABI or the non-windowed call0 ABI. These
# macros do not allocate any extra stack space, so they only work for # macros do not allocate any extra stack space, so they only work for
# leaf functions that do not need to spill anything to the stack. # leaf functions that do not need to spill anything to the stack.
.macro abi_entry reg, size .macro leaf_entry reg, size
#if XCHAL_HAVE_WINDOWED && !__XTENSA_CALL0_ABI__ #if XCHAL_HAVE_WINDOWED && !__XTENSA_CALL0_ABI__
entry \reg, \size entry \reg, \size + MIN_ESA
#else #else
/* do nothing */ /* do nothing */
#endif #endif
.endm .endm
.macro abi_return .macro leaf_return
#if XCHAL_HAVE_WINDOWED && !__XTENSA_CALL0_ABI__ #if XCHAL_HAVE_WINDOWED && !__XTENSA_CALL0_ABI__
retw retw
#else #else
...@@ -102,14 +103,14 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA ...@@ -102,14 +103,14 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
.global __mulsi3 .global __mulsi3
.type __mulsi3,@function .type __mulsi3,@function
__mulsi3: __mulsi3:
abi_entry sp, 32 leaf_entry sp, 16
#if XCHAL_HAVE_MUL16 #if XCHAL_HAVE_MUL16
or a4, a2, a3 or a4, a2, a3
srai a4, a4, 16 srai a4, a4, 16
bnez a4, .LMUL16 bnez a4, .LMUL16
mul16u a2, a2, a3 mul16u a2, a2, a3
abi_return leaf_return
.LMUL16: .LMUL16:
srai a4, a2, 16 srai a4, a2, 16
srai a5, a3, 16 srai a5, a3, 16
...@@ -165,7 +166,7 @@ __mulsi3: ...@@ -165,7 +166,7 @@ __mulsi3:
bgeui a3, 16, .Lmult_main_loop bgeui a3, 16, .Lmult_main_loop
neg a3, a2 neg a3, a2
movltz a2, a3, a5 movltz a2, a3, a5
abi_return leaf_return
.align 4 .align 4
.Lmult_main_loop: .Lmult_main_loop:
...@@ -195,7 +196,7 @@ __mulsi3: ...@@ -195,7 +196,7 @@ __mulsi3:
#endif /* !XCHAL_HAVE_MUL16 && !XCHAL_HAVE_MAC16 */ #endif /* !XCHAL_HAVE_MUL16 && !XCHAL_HAVE_MAC16 */
abi_return leaf_return
.size __mulsi3,.-__mulsi3 .size __mulsi3,.-__mulsi3
#endif /* L_mulsi3 */ #endif /* L_mulsi3 */
...@@ -264,7 +265,7 @@ __nsau_data: ...@@ -264,7 +265,7 @@ __nsau_data:
.global __udivsi3 .global __udivsi3
.type __udivsi3,@function .type __udivsi3,@function
__udivsi3: __udivsi3:
abi_entry sp, 32 leaf_entry sp, 16
bltui a3, 2, .Lle_one # check if the divisor <= 1 bltui a3, 2, .Lle_one # check if the divisor <= 1
mov a6, a2 # keep dividend in a6 mov a6, a2 # keep dividend in a6
...@@ -297,24 +298,24 @@ __udivsi3: ...@@ -297,24 +298,24 @@ __udivsi3:
bltu a6, a3, .Lreturn bltu a6, a3, .Lreturn
addi a2, a2, 1 # increment quotient if dividend >= divisor addi a2, a2, 1 # increment quotient if dividend >= divisor
.Lreturn: .Lreturn:
abi_return leaf_return
.Lle_one: .Lle_one:
beqz a3, .Lerror # if divisor == 1, return the dividend beqz a3, .Lerror # if divisor == 1, return the dividend
abi_return leaf_return
.Lspecial: .Lspecial:
# return dividend >= divisor # return dividend >= divisor
bltu a6, a3, .Lreturn0 bltu a6, a3, .Lreturn0
movi a2, 1 movi a2, 1
abi_return leaf_return
.Lerror: .Lerror:
# just return 0; could throw an exception # just return 0; could throw an exception
.Lreturn0: .Lreturn0:
movi a2, 0 movi a2, 0
abi_return leaf_return
.size __udivsi3,.-__udivsi3 .size __udivsi3,.-__udivsi3
#endif /* L_udivsi3 */ #endif /* L_udivsi3 */
...@@ -325,7 +326,7 @@ __udivsi3: ...@@ -325,7 +326,7 @@ __udivsi3:
.global __divsi3 .global __divsi3
.type __divsi3,@function .type __divsi3,@function
__divsi3: __divsi3:
abi_entry sp, 32 leaf_entry sp, 16
xor a7, a2, a3 # sign = dividend ^ divisor xor a7, a2, a3 # sign = dividend ^ divisor
do_abs a6, a2, a4 # udividend = abs(dividend) do_abs a6, a2, a4 # udividend = abs(dividend)
do_abs a3, a3, a4 # udivisor = abs(divisor) do_abs a3, a3, a4 # udivisor = abs(divisor)
...@@ -361,27 +362,27 @@ __divsi3: ...@@ -361,27 +362,27 @@ __divsi3:
.Lreturn: .Lreturn:
neg a5, a2 neg a5, a2
movltz a2, a5, a7 # return (sign < 0) ? -quotient : quotient movltz a2, a5, a7 # return (sign < 0) ? -quotient : quotient
abi_return leaf_return
.Lle_one: .Lle_one:
beqz a3, .Lerror beqz a3, .Lerror
neg a2, a6 # if udivisor == 1, then return... neg a2, a6 # if udivisor == 1, then return...
movgez a2, a6, a7 # (sign < 0) ? -udividend : udividend movgez a2, a6, a7 # (sign < 0) ? -udividend : udividend
abi_return leaf_return
.Lspecial: .Lspecial:
bltu a6, a3, .Lreturn0 # if dividend < divisor, return 0 bltu a6, a3, .Lreturn0 # if dividend < divisor, return 0
movi a2, 1 movi a2, 1
movi a4, -1 movi a4, -1
movltz a2, a4, a7 # else return (sign < 0) ? -1 : 1 movltz a2, a4, a7 # else return (sign < 0) ? -1 : 1
abi_return leaf_return
.Lerror: .Lerror:
# just return 0; could throw an exception # just return 0; could throw an exception
.Lreturn0: .Lreturn0:
movi a2, 0 movi a2, 0
abi_return leaf_return
.size __divsi3,.-__divsi3 .size __divsi3,.-__divsi3
#endif /* L_divsi3 */ #endif /* L_divsi3 */
...@@ -392,7 +393,7 @@ __divsi3: ...@@ -392,7 +393,7 @@ __divsi3:
.global __umodsi3 .global __umodsi3
.type __umodsi3,@function .type __umodsi3,@function
__umodsi3: __umodsi3:
abi_entry sp, 32 leaf_entry sp, 16
bltui a3, 2, .Lle_one # check if the divisor is <= 1 bltui a3, 2, .Lle_one # check if the divisor is <= 1
do_nsau a5, a2, a6, a7 # dividend_shift = nsau(dividend) do_nsau a5, a2, a6, a7 # dividend_shift = nsau(dividend)
...@@ -422,13 +423,13 @@ __umodsi3: ...@@ -422,13 +423,13 @@ __umodsi3:
bltu a2, a3, .Lreturn bltu a2, a3, .Lreturn
sub a2, a2, a3 # subtract once more if dividend >= divisor sub a2, a2, a3 # subtract once more if dividend >= divisor
.Lreturn: .Lreturn:
abi_return leaf_return
.Lle_one: .Lle_one:
# the divisor is either 0 or 1, so just return 0. # the divisor is either 0 or 1, so just return 0.
# someday we may want to throw an exception if the divisor is 0. # someday we may want to throw an exception if the divisor is 0.
movi a2, 0 movi a2, 0
abi_return leaf_return
.size __umodsi3,.-__umodsi3 .size __umodsi3,.-__umodsi3
#endif /* L_umodsi3 */ #endif /* L_umodsi3 */
...@@ -439,7 +440,7 @@ __umodsi3: ...@@ -439,7 +440,7 @@ __umodsi3:
.global __modsi3 .global __modsi3
.type __modsi3,@function .type __modsi3,@function
__modsi3: __modsi3:
abi_entry sp, 32 leaf_entry sp, 16
mov a7, a2 # save original (signed) dividend mov a7, a2 # save original (signed) dividend
do_abs a2, a2, a4 # udividend = abs(dividend) do_abs a2, a2, a4 # udividend = abs(dividend)
do_abs a3, a3, a4 # udivisor = abs(divisor) do_abs a3, a3, a4 # udivisor = abs(divisor)
...@@ -474,13 +475,13 @@ __modsi3: ...@@ -474,13 +475,13 @@ __modsi3:
bgez a7, .Lpositive bgez a7, .Lpositive
neg a2, a2 # if (dividend < 0), return -udividend neg a2, a2 # if (dividend < 0), return -udividend
.Lpositive: .Lpositive:
abi_return leaf_return
.Lle_one: .Lle_one:
# udivisor is either 0 or 1, so just return 0. # udivisor is either 0 or 1, so just return 0.
# someday we may want to throw an exception if udivisor is 0. # someday we may want to throw an exception if udivisor is 0.
movi a2, 0 movi a2, 0
abi_return leaf_return
.size __modsi3,.-__modsi3 .size __modsi3,.-__modsi3
#endif /* L_modsi3 */ #endif /* L_modsi3 */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment