lib1funcs.asm (__udivsi3, __divsi3): Throw an exception for divide-by-zero.

* config/xtensa/lib1funcs.asm (__udivsi3, __divsi3): Throw an exception
        for divide-by-zero.
        (__umodsi3, __modsi3): Likewise.

From-SVN: r124165
This commit is contained in:
Bob Wilson 2007-04-25 21:40:42 +00:00 committed by Bob Wilson
parent 9f8b807381
commit a2c2290b62
2 changed files with 34 additions and 7 deletions

View File

@ -1,3 +1,9 @@
2007-04-25 Bob Wilson <bob.wilson@acm.org>
* config/xtensa/lib1funcs.asm (__udivsi3, __divsi3): Throw an exception
for divide-by-zero.
(__umodsi3, __modsi3): Likewise.
2007-04-25 Dirk Mueller <dmueller@suse.de>
* c-typeck.c (build_compound_expr): Annotate warning()

View File

@ -1,5 +1,6 @@
/* Assembly functions for the Xtensa version of libgcc1.
Copyright (C) 2001, 2002, 2003, 2005, 2006 Free Software Foundation, Inc.
Copyright (C) 2001, 2002, 2003, 2005, 2006, 2007
Free Software Foundation, Inc.
Contributed by Bob Wilson (bwilson@tensilica.com) at Tensilica.
This file is part of GCC.
@ -530,7 +531,11 @@ __udivsi3:
leaf_return
.Lerror:
/* just return 0; could throw an exception */
/* Divide by zero: Use an illegal instruction to force an exception.
The subsequent "DIV0" string can be recognized by the exception
handler to identify the real cause of the exception. */
ill
.ascii "DIV0"
.Lreturn0:
movi a2, 0
@ -597,7 +602,11 @@ __divsi3:
leaf_return
.Lerror:
/* just return 0; could throw an exception */
/* Divide by zero: Use an illegal instruction to force an exception.
The subsequent "DIV0" string can be recognized by the exception
handler to identify the real cause of the exception. */
ill
.ascii "DIV0"
.Lreturn0:
movi a2, 0
@ -645,10 +654,16 @@ __umodsi3:
leaf_return
.Lle_one:
/* The divisor is either 0 or 1, so just return 0.
Someday we may want to throw an exception if the divisor is 0. */
beqz a3, .Lerror
movi a2, 0
leaf_return
.Lerror:
/* Divide by zero: Use an illegal instruction to force an exception.
The subsequent "DIV0" string can be recognized by the exception
handler to identify the real cause of the exception. */
ill
.ascii "DIV0"
.size __umodsi3,.-__umodsi3
#endif /* L_umodsi3 */
@ -697,10 +712,16 @@ __modsi3:
leaf_return
.Lle_one:
/* udivisor is either 0 or 1, so just return 0.
Someday we may want to throw an exception if udivisor is 0. */
beqz a3, .Lerror
movi a2, 0
leaf_return
.Lerror:
/* Divide by zero: Use an illegal instruction to force an exception.
The subsequent "DIV0" string can be recognized by the exception
handler to identify the real cause of the exception. */
ill
.ascii "DIV0"
.size __modsi3,.-__modsi3
#endif /* L_modsi3 */