]> git.ipfire.org Git - thirdparty/glibc.git/blame - sysdeps/s390/s390-64/add_n.S
Prefer https to http for gnu.org and fsf.org URLs
[thirdparty/glibc.git] / sysdeps / s390 / s390-64 / add_n.S
CommitLineData
847b055c
AJ
1/* Add two limb vectors of the same length > 0 and store sum in a third
2 limb vector.
04277e02 3 Copyright (C) 2001-2019 Free Software Foundation, Inc.
847b055c
AJ
4 Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
5 This file is part of the GNU MP Library.
6
7 The GNU MP Library is free software; you can redistribute it and/or modify
6d84f89a
AJ
8 it under the terms of the GNU Lesser General Public License as published by
9 the Free Software Foundation; either version 2.1 of the License, or (at your
847b055c
AJ
10 option) any later version.
11
12 The GNU MP Library is distributed in the hope that it will be useful, but
13 WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
6d84f89a 14 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
847b055c
AJ
15 License for more details.
16
6d84f89a 17 You should have received a copy of the GNU Lesser General Public License
59ba27a6 18 along with the GNU MP Library; see the file COPYING.LIB. If not,
5a82c748 19 see <https://www.gnu.org/licenses/>. */
847b055c
AJ
20
21/*
ffeac417
UD
22 INPUT PARAMETERS
23 res_ptr %r2
24 s1_ptr %r3
25 s2_ptr %r4
26 size %r5
847b055c
AJ
27*/
28
29#include "sysdep.h"
30#include "asm-syntax.h"
31
32 .text
33ENTRY(__mpn_add_n)
ffeac417 34 stg %r6,48(%r15) # save register 6
844a34a2 35 cfi_offset (%r6,-112)
ffeac417
UD
36 slgr %r1,%r1
37 lghi %r0,1 # cannot use ahi to add carry, use alr
38.L0: lg %r6,0(%r1,%r3) # .L0 -> no carry from last add
39 alg %r6,0(%r1,%r4)
40 stg %r6,0(%r1,%r2)
41 la %r1,8(%r1)
847b055c
AJ
42 brc 3,.L3
43.L1: brct %r5,.L0
ffeac417 44 slgr %r2,%r2 # no last carry to return
847b055c 45 j .Lexit
ffeac417
UD
46.L2: lg %r6,0(%r1,%r3) # .L2 -> carry from last add
47 alg %r6,0(%r1,%r4)
847b055c 48 brc 3,.L4
ffeac417
UD
49 algr %r6,%r0 # no carry yet, add carry from last add
50 stg %r6,0(%r1,%r2)
51 la %r1,8(%r1)
847b055c
AJ
52 brc 12,.L1 # new carry ?
53.L3: brct %r5,.L2
ffeac417 54 lgr %r2,%r0 # return last carry
847b055c 55 j .Lexit
ffeac417
UD
56.L4: algr %r6,%r0 # already a carry, add carry from last add
57 stg %r6,0(%r1,%r2)
58 la %r1,8(%r1)
847b055c 59 brct %r5,.L2
ffeac417
UD
60 lgr %r2,%r0 # return last carry
61.Lexit: lg %r6,48(%r15) # restore register 6
847b055c
AJ
62 br %r14
63END(__mpn_add_n)