[BACK]Return to sub_n.asm CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / gmp / mpn / powerpc64

Diff for /OpenXM_contrib/gmp/mpn/powerpc64/Attic/sub_n.asm between version 1.1.1.1 and 1.1.1.2

version 1.1.1.1, 2000/09/09 14:12:39 version 1.1.1.2, 2003/08/25 16:06:24
Line 1 
Line 1 
 # PowerPC-64 mpn_sub_n -- Subtract two limb vectors of the same length > 0  dnl  PowerPC-64 mpn_sub_n -- Subtract two limb vectors of the same length > 0
 # and store difference in a third limb vector.  dnl  and store difference in a third limb vector.
   
 # Copyright (C) 1999, 2000 Free Software Foundation, Inc.b  dnl  Copyright 1999, 2000, 2001 Free Software Foundation, Inc.
   
 # This file is part of the GNU MP Library.  dnl  This file is part of the GNU MP Library.
   
 # The GNU MP Library is free software; you can redistribute it and/or modify  dnl  The GNU MP Library is free software; you can redistribute it and/or modify
 # it under the terms of the GNU Lesser General Public License as published by  dnl  it under the terms of the GNU Lesser General Public License as published
 # the Free Software Foundation; either version 2.1 of the License, or (at your  dnl  by the Free Software Foundation; either version 2.1 of the License, or (at
 # option) any later version.  dnl  your option) any later version.
   
 # The GNU MP Library is distributed in the hope that it will be useful, but  dnl  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  dnl  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 # or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public  dnl  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
 # License for more details.  dnl  License for more details.
   
 # You should have received a copy of the GNU Lesser General Public License  dnl  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  dnl  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,  dnl  the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
 # MA 02111-1307, USA.  dnl  MA 02111-1307, USA.
   
   include(`../config.m4')
   
 # INPUT PARAMETERS  C INPUT PARAMETERS
 # res_ptr       r3  C res_ptr       r3
 # s1_ptr        r4  C s1_ptr        r4
 # s2_ptr        r5  C s2_ptr        r5
 # size          r6  C size          r6
   
 include(`../config.m4')  C This code runs at 1.5 cycles/limb on the PPC630.
   
 ASM_START()  ASM_START()
 PROLOGUE(mpn_sub_n)  PROLOGUE(mpn_sub_n)
         mtctr   r6              # copy size into CTR          mtctr   r6              C copy size into CTR
         addic   r0,r6,-1        # set cy          addic   r0,r6,-1        C set cy
         ld      r8,0(r4)        # load least significant s1 limb          ld      r8,0(r4)        C load least significant s1 limb
         ld      r0,0(r5)        # load least significant s2 limb          ld      r0,0(r5)        C load least significant s2 limb
         addi    r3,r3,-8        # offset res_ptr, it's updated before it's used          addi    r3,r3,-8        C offset res_ptr, it's updated before it's used
         bdz     .Lend           # If done, skip loop          bdz     .Lend           C If done, skip loop
 .Loop:  ld      r9,8(r4)        # load s1 limb  .Loop:  ld      r9,8(r4)        C load s1 limb
         ld      r10,8(r5)       # load s2 limb          ld      r10,8(r5)       C load s2 limb
         subfe   r7,r0,r8        # subtract limbs with cy, set cy          subfe   r7,r0,r8        C subtract limbs with cy, set cy
         std     r7,8(r3)        # store result limb          std     r7,8(r3)        C store result limb
         bdz     .Lexit          # decrement CTR and exit if done          bdz     .Lexit          C decrement CTR and exit if done
         ldu     r8,16(r4)       # load s1 limb and update s1_ptr          ldu     r8,16(r4)       C load s1 limb and update s1_ptr
         ldu     r0,16(r5)       # load s2 limb and update s2_ptr          ldu     r0,16(r5)       C load s2 limb and update s2_ptr
         subfe   r7,r10,r9       # subtract limbs with cy, set cy          subfe   r7,r10,r9       C subtract limbs with cy, set cy
         stdu    r7,16(r3)       # store result limb and update res_ptr          stdu    r7,16(r3)       C store result limb and update res_ptr
         bdnz    .Loop           # decrement CTR and loop back          bdnz    .Loop           C decrement CTR and loop back
   
 .Lend:  subfe   r7,r0,r8  .Lend:  subfe   r7,r0,r8
         std     r7,8(r3)        # store ultimate result limb          std     r7,8(r3)        C store ultimate result limb
         subfe   r3,r0,r0        # load !cy into ...          subfe   r3,r0,r0        C load !cy into ...
         subfic  r3,r3,0         # ... return value register          subfic  r3,r3,0         C ... return value register
         blr          blr
 .Lexit: subfe   r7,r10,r9  .Lexit: subfe   r7,r10,r9
         std     r7,16(r3)          std     r7,16(r3)
         subfe   r3,r0,r0        # load !cy into ...          subfe   r3,r0,r0        C load !cy into ...
         subfic  r3,r3,0         # ... return value register          subfic  r3,r3,0         C ... return value register
         blr          blr
 EPILOGUE(mpn_sub_n)  EPILOGUE(mpn_sub_n)

Legend:
Removed from v.1.1.1.1  
changed lines
  Added in v.1.1.1.2

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>