OSDN Git Service

* config/xtensa/lib1funcs.asm (__udivsi3, __divsi3): Rearrange special
authorbwilson <bwilson@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 10 May 2005 15:56:54 +0000 (15:56 +0000)
committerbwilson <bwilson@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 10 May 2005 15:56:54 +0000 (15:56 +0000)
case code to avoid one move instruction.
(__umodsi3, __modsi3): Merge duplicated code sequences.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@99520 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/xtensa/lib1funcs.asm

index 7e817dd..8b9235f 100644 (file)
@@ -1,3 +1,9 @@
+2005-05-10  Bob Wilson  <bob.wilson@acm.org>
+
+       * config/xtensa/lib1funcs.asm (__udivsi3, __divsi3): Rearrange special
+       case code to avoid one move instruction.
+       (__umodsi3, __modsi3): Merge duplicated code sequences.
+
 2005-05-10  Kazu Hirata  <kazu@cs.umass.edu>
 
        * config/mips/24k.md, config/sh/divtab.c, config/sh/sh.c,
 2005-05-10  Kazu Hirata  <kazu@cs.umass.edu>
 
        * config/mips/24k.md, config/sh/divtab.c, config/sh/sh.c,
index 1b11daf..bc3c452 100644 (file)
@@ -299,19 +299,21 @@ __udivsi3:
 .Lreturn:
        abi_return
 
 .Lreturn:
        abi_return
 
+.Lle_one:
+       beqz    a3, .Lerror     # if divisor == 1, return the dividend
+       abi_return
+
 .Lspecial:
        # return dividend >= divisor
 .Lspecial:
        # return dividend >= divisor
-       movi    a2, 0
-       bltu    a6, a3, .Lreturn2
+       bltu    a6, a3, .Lreturn0
        movi    a2, 1
        movi    a2, 1
-.Lreturn2:
        abi_return
 
        abi_return
 
-.Lle_one:
-       beqz    a3, .Lerror     # if divisor == 1, return the dividend
-       abi_return
 .Lerror:
 .Lerror:
-       movi    a2, 0           # just return 0; could throw an exception
+       # just return 0; could throw an exception
+
+.Lreturn0:
+       movi    a2, 0
        abi_return
        .size   __udivsi3,.-__udivsi3
 
        abi_return
        .size   __udivsi3,.-__udivsi3
 
@@ -361,22 +363,24 @@ __divsi3:
        movltz  a2, a5, a7      # return (sign < 0) ? -quotient : quotient
        abi_return
 
        movltz  a2, a5, a7      # return (sign < 0) ? -quotient : quotient
        abi_return
 
+.Lle_one:
+       beqz    a3, .Lerror
+       neg     a2, a6          # if udivisor == 1, then return...
+       movgez  a2, a6, a7      # (sign < 0) ? -udividend : udividend
+       abi_return
+
 .Lspecial:
 .Lspecial:
-       movi    a2, 0
-       bltu    a6, a3, .Lreturn2 #  if dividend < divisor, return 0
+       bltu    a6, a3, .Lreturn0 #  if dividend < divisor, return 0
        movi    a2, 1
        movi    a4, -1
        movltz  a2, a4, a7      # else return (sign < 0) ? -1 :  1 
        movi    a2, 1
        movi    a4, -1
        movltz  a2, a4, a7      # else return (sign < 0) ? -1 :  1 
-.Lreturn2:
        abi_return
 
        abi_return
 
-.Lle_one:
-       beqz    a3, .Lerror
-       neg     a2, a6          # if udivisor == 1, then return...
-       movgez  a2, a6, a7      # (sign < 0) ? -udividend : udividend
-       abi_return
 .Lerror:
 .Lerror:
-       movi    a2, 0           # just return 0; could throw an exception
+       # just return 0; could throw an exception
+
+.Lreturn0:
+       movi    a2, 0
        abi_return
        .size   __divsi3,.-__divsi3
 
        abi_return
        .size   __divsi3,.-__divsi3
 
@@ -414,17 +418,12 @@ __umodsi3:
 #endif /* !XCHAL_HAVE_LOOPS */
 .Lloopend:
 
 #endif /* !XCHAL_HAVE_LOOPS */
 .Lloopend:
 
+.Lspecial:
        bltu    a2, a3, .Lreturn
        sub     a2, a2, a3      # subtract once more if dividend >= divisor
 .Lreturn:
        abi_return
 
        bltu    a2, a3, .Lreturn
        sub     a2, a2, a3      # subtract once more if dividend >= divisor
 .Lreturn:
        abi_return
 
-.Lspecial:
-       bltu    a2, a3, .Lreturn2
-       sub     a2, a2, a3      # subtract once if dividend >= divisor
-.Lreturn2:
-       abi_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.
 .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.
@@ -468,6 +467,7 @@ __modsi3:
 #endif /* !XCHAL_HAVE_LOOPS */
 .Lloopend:
 
 #endif /* !XCHAL_HAVE_LOOPS */
 .Lloopend:
 
+.Lspecial:
        bltu    a2, a3, .Lreturn
        sub     a2, a2, a3      # subtract once more if udividend >= udivisor
 .Lreturn:
        bltu    a2, a3, .Lreturn
        sub     a2, a2, a3      # subtract once more if udividend >= udivisor
 .Lreturn:
@@ -476,15 +476,6 @@ __modsi3:
 .Lpositive:    
        abi_return
 
 .Lpositive:    
        abi_return
 
-.Lspecial:
-       bltu    a2, a3, .Lreturn2
-       sub     a2, a2, a3      # subtract once if dividend >= divisor
-.Lreturn2:
-       bgez    a7, .Lpositive2
-       neg     a2, a2          # if (dividend < 0), return -udividend
-.Lpositive2:   
-       abi_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.
 .Lle_one:
        # udivisor is either 0 or 1, so just return 0.
        # someday we may want to throw an exception if udivisor is 0.