Commit a2c2290b by Bob Wilson Committed by Bob Wilson

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
parent 9f8b8073
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> 2007-04-25 Dirk Mueller <dmueller@suse.de>
* c-typeck.c (build_compound_expr): Annotate warning() * c-typeck.c (build_compound_expr): Annotate warning()
......
/* Assembly functions for the Xtensa version of libgcc1. /* 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. Contributed by Bob Wilson (bwilson@tensilica.com) at Tensilica.
This file is part of GCC. This file is part of GCC.
...@@ -530,7 +531,11 @@ __udivsi3: ...@@ -530,7 +531,11 @@ __udivsi3:
leaf_return leaf_return
.Lerror: .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: .Lreturn0:
movi a2, 0 movi a2, 0
...@@ -597,7 +602,11 @@ __divsi3: ...@@ -597,7 +602,11 @@ __divsi3:
leaf_return leaf_return
.Lerror: .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: .Lreturn0:
movi a2, 0 movi a2, 0
...@@ -645,10 +654,16 @@ __umodsi3: ...@@ -645,10 +654,16 @@ __umodsi3:
leaf_return leaf_return
.Lle_one: .Lle_one:
/* The divisor is either 0 or 1, so just return 0. beqz a3, .Lerror
Someday we may want to throw an exception if the divisor is 0. */
movi a2, 0 movi a2, 0
leaf_return 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 .size __umodsi3,.-__umodsi3
#endif /* L_umodsi3 */ #endif /* L_umodsi3 */
...@@ -697,10 +712,16 @@ __modsi3: ...@@ -697,10 +712,16 @@ __modsi3:
leaf_return leaf_return
.Lle_one: .Lle_one:
/* udivisor is either 0 or 1, so just return 0. beqz a3, .Lerror
Someday we may want to throw an exception if udivisor is 0. */
movi a2, 0 movi a2, 0
leaf_return 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 .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