* sysdeps/alpha/remqu.S: Detect power-of-two special case.
authorRichard Henderson <rth@redhat.com>
Wed, 31 Mar 2004 02:34:13 +0000 (02:34 +0000)
committerRichard Henderson <rth@redhat.com>
Wed, 31 Mar 2004 02:34:13 +0000 (02:34 +0000)
2004-03-30  Richard Henderson  <rth@redhat.com>

* sysdeps/alpha/remqu.S: Detect power-of-two special case.

ChangeLog
sysdeps/alpha/remqu.S

index d2303fb..4b56d0d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2004-03-30  Richard Henderson  <rth@redhat.com>
+
+       * sysdeps/alpha/remqu.S: Detect power-of-two special case.
+
 2004-03-30  Ulrich Drepper  <drepper@redhat.com>
 
        * sysdeps/generic/libc-start.c (LIBC_START_MAIN)
index 1a1dcad..fa2eb62 100644 (file)
@@ -54,24 +54,25 @@ __remqu:
           going to use the results.  */
        stq     X, 16(sp)
        stq     Y, 24(sp)
-       beq     Y, DIVBYZERO
+       subq    Y, 1, AT
 
        stt     $f0, 0(sp)
+       and     Y, AT, AT
        stt     $f1, 8(sp)
+       beq     AT, $powerof2
        cfi_rel_offset ($f0, 0)
        cfi_rel_offset ($f1, 8)
+
        ldt     $f0, 16(sp)
        ldt     $f1, 24(sp)
-
        cvtqt   $f0, $f0
        cvtqt   $f1, $f1
+
        blt     X, $x_is_neg
        divt/c  $f0, $f1, $f0
 
        /* Check to see if Y was mis-converted as signed value.  */
        ldt     $f1, 8(sp)
-       unop
-       nop
        blt     Y, $y_is_neg
 
        /* Check to see if X fit in the double as an exact value.  */
@@ -245,6 +246,16 @@ $y_is_neg:
        cfi_def_cfa_offset (0)
        ret     $31, (RA), 1
 
+       .align  4
+       cfi_def_cfa_offset (FRAME)
+$powerof2:
+       subq    Y, 1, AT
+       beq     Y, DIVBYZERO
+       and     X, AT, RV
+       lda     sp, FRAME(sp)
+       cfi_def_cfa_offset (0)
+       ret     $31, (RA), 1
+
        cfi_endproc
        .size   __remqu, .-__remqu