1 ! SPARC v9 __mpn_add_n -- Add two limb vectors of the same length > 0 and store
2 ! sum in a third limb vector.
4 ! Copyright (C) 1995, 1996 Free Software Foundation, Inc.
6 ! This file is part of the GNU MP Library.
8 ! The GNU MP Library is free software; you can redistribute it and/or modify
9 ! it under the terms of the GNU Library General Public License as published by
10 ! the Free Software Foundation; either version 2 of the License, or (at your
11 ! option) any later version.
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
15 ! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
16 ! License for more details.
18 ! You should have received a copy of the GNU Library General Public License
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,
33 .type __mpn_add_n,#function
38 add %o1,%g1,%o1 ! make s1_ptr point at end
39 add %o2,%g1,%o2 ! make s2_ptr point at end
40 add %o0,%g1,%o0 ! make res_ptr point at end
41 mov 0,%o4 ! clear carry variable
42 sllx %g3,3,%o5 ! compute initial address index
44 .Loop: ldx [%o2+%o5],%g1 ! load s2 limb
45 add %g3,1,%g3 ! increment loop count
46 ldx [%o1+%o5],%g2 ! load s1 limb
47 addcc %g1,%o4,%g1 ! add s2 limb and carry variable
48 movcc %xcc,0,%o4 ! if carry-out, o4 was 1; clear it
49 addcc %g1,%g2,%g1 ! add s1 limb to sum
50 stx %g1,[%o0+%o5] ! store result
51 add %o5,8,%o5 ! increment address index
53 movcs %xcc,1,%o4 ! if s1 add gave carry, record it
58 .size __mpn_add_n,.LLfe1-__mpn_add_n