Annotation of OpenXM_contrib/gmp/mpn/power/add_n.s, Revision 1.1.1.2
1.1.1.2 ! maekawa 1: # IBM POWER __gmpn_add_n -- Add two limb vectors of equal, non-zero length.
1.1 maekawa 2:
1.1.1.2 ! maekawa 3: # Copyright (C) 1992, 1994, 1995, 1996, 1999, 2000 Free Software Foundation,
! 4: # Inc.
1.1 maekawa 5:
6: # This file is part of the GNU MP Library.
7:
8: # The GNU MP Library is free software; you can redistribute it and/or modify
1.1.1.2 ! maekawa 9: # it under the terms of the GNU Lesser General Public License as published by
! 10: # the Free Software Foundation; either version 2.1 of the License, or (at your
1.1 maekawa 11: # option) any later version.
12:
13: # The GNU MP Library is distributed in the hope that it will be useful, but
14: # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
1.1.1.2 ! maekawa 15: # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
1.1 maekawa 16: # License for more details.
17:
1.1.1.2 ! maekawa 18: # You should have received a copy of the GNU Lesser General Public License
1.1 maekawa 19: # along with the GNU MP Library; see the file COPYING.LIB. If not, write to
20: # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
21: # MA 02111-1307, USA.
22:
23:
24: # INPUT PARAMETERS
25: # res_ptr r3
26: # s1_ptr r4
27: # s2_ptr r5
28: # size r6
29:
30: .toc
1.1.1.2 ! maekawa 31: .globl __gmpn_add_n
! 32: .globl .__gmpn_add_n
! 33: .csect __gmpn_add_n[DS]
! 34: __gmpn_add_n:
! 35: .long .__gmpn_add_n, TOC[tc0], 0
! 36: .csect .text[PR]
! 37: .align 2
! 38: .__gmpn_add_n:
1.1 maekawa 39: andil. 10,6,1 # odd or even number of limbs?
40: l 8,0(4) # load least significant s1 limb
41: l 0,0(5) # load least significant s2 limb
42: cal 3,-4(3) # offset res_ptr, it's updated before it's used
43: sri 10,6,1 # count for unrolled loop
44: a 7,0,8 # add least significant limbs, set cy
45: mtctr 10 # copy count into CTR
46: beq 0,Leven # branch if even # of limbs (# of limbs >= 2)
47:
48: # We have an odd # of limbs. Add the first limbs separately.
49: cmpi 1,10,0 # is count for unrolled loop zero?
1.1.1.2 ! maekawa 50: bc 4,6,L1 # bne cr1,L1 (misassembled by gas)
1.1 maekawa 51: st 7,4(3)
52: aze 3,10 # use the fact that r10 is zero...
53: br # return
54:
55: # We added least significant limbs. Now reload the next limbs to enter loop.
56: L1: lu 8,4(4) # load s1 limb and update s1_ptr
57: lu 0,4(5) # load s2 limb and update s2_ptr
58: stu 7,4(3)
59: ae 7,0,8 # add limbs, set cy
60: Leven: lu 9,4(4) # load s1 limb and update s1_ptr
61: lu 10,4(5) # load s2 limb and update s2_ptr
62: bdz Lend # If done, skip loop
63:
64: Loop: lu 8,4(4) # load s1 limb and update s1_ptr
65: lu 0,4(5) # load s2 limb and update s2_ptr
66: ae 11,9,10 # add previous limbs with cy, set cy
67: stu 7,4(3) #
68: lu 9,4(4) # load s1 limb and update s1_ptr
69: lu 10,4(5) # load s2 limb and update s2_ptr
70: ae 7,0,8 # add previous limbs with cy, set cy
71: stu 11,4(3) #
72: bdn Loop # decrement CTR and loop back
73:
74: Lend: ae 11,9,10 # add limbs with cy, set cy
75: st 7,4(3) #
76: st 11,8(3) #
77: lil 3,0 # load cy into ...
78: aze 3,3 # ... return value register
79: br
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>