[project @ 2000-08-18 15:44:28 by simonmar]
[ghc-hetmet.git] / ghc / rts / gmp / mpn / vax / sub_n.s
index a891c44..eff4b1c 100644 (file)
@@ -1,21 +1,21 @@
-# VAX __mpn_sub_n -- Subtract two limb vectors of the same length > 0 and store
+# VAX __gmpn_sub_n -- Subtract two limb vectors of the same length > 0 and store
 # difference in a third limb vector.
 
-# Copyright (C) 1992, 1994 Free Software Foundation, Inc.
+# Copyright (C) 1999, 2000 Free Software Foundation, Inc.
 
 # This file is part of the GNU MP Library.
 
 # The GNU MP Library is free software; you can redistribute it and/or modify
-# it under the terms of the GNU Library General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or (at your
+# it under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or (at your
 # option) any later version.
 
 # The GNU MP Library is distributed in the hope that it will be useful, but
 # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-# or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library General Public
+# or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
 # License for more details.
 
-# You should have received a copy of the GNU Library General Public License
+# You should have received a copy of the GNU Lesser General Public License
 # along with the GNU MP Library; see the file COPYING.LIB.  If not, write to
 # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
 # MA 02111-1307, USA.
 
 .text
        .align 1
-.globl ___mpn_sub_n
-___mpn_sub_n:
+.globl ___gmpn_sub_n
+___gmpn_sub_n:
        .word   0x0
        movl    16(ap),r0
        movl    12(ap),r1
        movl    8(ap),r2
        movl    4(ap),r3
-       subl2   r4,r4
-
-Loop:
+       mnegl   r0,r5
+       addl2   $3,r0
+       ashl    $-2,r0,r0       # unroll loop count
+       bicl2   $-4,r5          # mask out low 2 bits
+       movaq   (r5)[r5],r5     # 9x
+       jmp     Loop(r5)
+
+Loop:  movl    (r2)+,r4
+       sbwc    (r1)+,r4
+       movl    r4,(r3)+
+       movl    (r2)+,r4
+       sbwc    (r1)+,r4
+       movl    r4,(r3)+
+       movl    (r2)+,r4
+       sbwc    (r1)+,r4
+       movl    r4,(r3)+
        movl    (r2)+,r4
        sbwc    (r1)+,r4
        movl    r4,(r3)+
-       jsobgtr r0,Loop
+       sobgtr  r0,Loop
 
        adwc    r0,r0
        ret