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

Diff for /OpenXM_contrib/gmp/mpn/powerpc32/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 
 dnl PowerPC-32 mpn_add_n -- Add two limb vectors of the same length > 0 and  dnl  PowerPC 750 mpn_add_n -- add mpn limb vectors.
 dnl store sum in a third limb vector.  
   
 dnl Copyright (C) 1995, 1997, 2000 Free Software Foundation, Inc.  dnl  Copyright 2002 Free Software Foundation, Inc.
   dnl
   dnl  This file is part of the GNU MP Library.
   dnl
   dnl  The GNU MP Library is free software; you can redistribute it and/or
   dnl  modify it under the terms of the GNU Lesser General Public License as
   dnl  published by the Free Software Foundation; either version 2.1 of the
   dnl  License, or (at your option) any later version.
   dnl
   dnl  The GNU MP Library is distributed in the hope that it will be useful,
   dnl  but WITHOUT ANY WARRANTY; without even the implied warranty of
   dnl  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   dnl  Lesser General Public License for more details.
   dnl
   dnl  You should have received a copy of the GNU Lesser General Public
   dnl  License along with the GNU MP Library; see the file COPYING.LIB.  If
   dnl  not, write to the Free Software Foundation, Inc., 59 Temple Place -
   dnl  Suite 330, Boston, MA 02111-1307, USA.
   
 dnl This file is part of the GNU MP Library.  include(`../config.m4')
   
 dnl The GNU MP Library is free software; you can redistribute it and/or modify  
 dnl it under the terms of the GNU Lesser General Public License as published by  
 dnl the Free Software Foundation; either version 2.1 of the License, or (at your  
 dnl option) any later version.  
   
 dnl The GNU MP Library is distributed in the hope that it will be useful, but  C       cycles/limb
 dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY  C 604e:     4.0
 dnl or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public  C 750:      4.0
 dnl License for more details.  
   
 dnl You should have received a copy of the GNU Lesser General Public License  
 dnl along with the GNU MP Library; see the file COPYING.LIB.  If not, write to  
 dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,  
 dnl MA 02111-1307, USA.  
   
   C mp_limb_t mpn_add_n (mp_ptr dst, mp_srcptr src1, mp_srcptr src2,
   C                      mp_size_t size);
   C
   C The use of offsets xp-wp and yp-wp is necessary for 4.0 c/l on 750.
   
 dnl INPUT PARAMETERS  
 dnl res_ptr     r3  
 dnl s1_ptr      r4  
 dnl s2_ptr      r5  
 dnl size        r6  
   
 include(`../config.m4')  
   
 ASM_START()  ASM_START()
 PROLOGUE(mpn_add_n)  PROLOGUE(mpn_add_n)
         mtctr   r6              C copy size into CTR  
         addic   r0,r0,0         C clear cy  
         lwz     r8,0(r4)        C load least significant s1 limb  
         lwz     r0,0(r5)        C load least significant s2 limb  
         addi    r3,r3,-4        C offset res_ptr, it's updated before it's used  
         bdz     .Lend           C If done, skip loop  
 .Loop:  lwz     r9,4(r4)        C load s1 limb  
         lwz     r10,4(r5)       C load s2 limb  
         adde    r7,r0,r8        C add limbs with cy, set cy  
         stw     r7,4(r3)        C store result limb  
         bdz     .Lexit          C decrement CTR and exit if done  
         lwzu    r8,8(r4)        C load s1 limb and update s1_ptr  
         lwzu    r0,8(r5)        C load s2 limb and update s2_ptr  
         adde    r7,r10,r9       C add limbs with cy, set cy  
         stwu    r7,8(r3)        C store result limb and update res_ptr  
         bdnz    .Loop           C decrement CTR and loop back  
   
 .Lend:  adde    r7,r0,r8          C r3    wp
         stw     r7,4(r3)        C store ultimate result limb          C r4    xp
         li      r3,0            C load cy into ...          C r5    yp
         addze   r3,r3           C ... return value register          C r6    size
   
           mtctr   r6              C size
           lwz     r6, 0(r4)       C xp[0]
   
           lwz     r7, 0(r5)       C yp[0]
           sub     r4, r4, r3      C xp-wp
   
           sub     r5, r5, r3      C yp-wp
           addi    r4, r4, 4       C xp-wp-4
   
           addi    r5, r5, 4       C yp-wp-4
           addc    r6, r6, r7
   
           stw     r6, 0(r3)       C wp[0]
           bdz     L(done)
   
   
   L(top):
           C r3    wp, incrementing
           C r4    xp-wp+4
           C r5    yp-wp+4
           C r6    scratch
           C r7    scratch
   
           lwzx    r6, r4,r3       C xp[i]
   
           lwzx    r7, r5,r3       C yp[i]
   
           C serialize
           adde    r6, r6, r7
   
           stwu    r6, 4(r3)       C wp[i]
           bdnz    L(top)
   
   
   L(done):
           li      r3, 0
   
           addze   r3, r3          C carry out
         blr          blr
 .Lexit: adde    r7,r10,r9  
         stw     r7,8(r3)  EPILOGUE()
         li      r3,0            C load cy into ...  
         addze   r3,r3           C ... return value register  
         blr  
 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>