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

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

version 1.1.1.1, 2000/09/09 14:12:38 version 1.1.1.2, 2003/08/25 16:06:24
Line 1 
Line 1 
 # PowerPC-64 mpn_add_n -- Add two limb vectors of the same length > 0 and  dnl  PowerPC-64 mpn_add_n -- Add two limb vectors of the same length > 0 and
 # store sum in a third limb vector.  dnl  store sum in a third limb vector.
   
 # Copyright (C) 1999, 2000 Free Software Foundation, Inc.  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_add_n)  PROLOGUE(mpn_add_n)
         mtctr   r6              # copy size into CTR          mtctr   r6              C copy size into CTR
         addic   r0,r0,0         # clear cy          addic   r0,r0,0         C clear 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
         adde    r7,r0,r8        # add limbs with cy, set cy          adde    r7,r0,r8        C add 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
         adde    r7,r10,r9       # add limbs with cy, set cy          adde    r7,r10,r9       C add 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:  adde    r7,r0,r8  .Lend:  adde    r7,r0,r8
         std     r7,8(r3)        # store ultimate result limb          std     r7,8(r3)        C store ultimate result limb
         li      r3,0            # load cy into ...          li      r3,0            C load cy into ...
         addze   r3,r3           # ... return value register          addze   r3,r3           C ... return value register
         blr          blr
 .Lexit: adde    r7,r10,r9  .Lexit: adde    r7,r10,r9
         std     r7,16(r3)          std     r7,16(r3)
         li      r3,0            # load cy into ...          li      r3,0            C load cy into ...
         addze   r3,r3           # ... return value register          addze   r3,r3           C ... return value register
         blr          blr
 EPILOGUE(mpn_add_n)  EPILOGUE(mpn_add_n)

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

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