ld.so definitions for s390-64.
[kopensolaris-gnu/glibc.git] / sysdeps / s390 / s390-64 / sub_n.S
1 /* __mpn_sub_n -- Add two limb vectors of the same length > 0 and store
2    sum in a third limb vector.  64 bit S/390 version.
3    Copyright (C) 2001 Free Software Foundation, Inc.
4    Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
5    This file is part of the GNU MP Library.
6
7    The GNU C Library is free software; you can redistribute it and/or
8    modify it under the terms of the GNU Library General Public License as
9    published by the Free Software Foundation; either version 2 of the
10    License, or (at your option) any later version.
11
12    The GNU C Library is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15    Library General Public License for more details.
16
17    You should have received a copy of the GNU Library General Public
18    License along with the GNU C Library; see the file COPYING.LIB.  If not,
19    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20    Boston, MA 02111-1307, USA.  */
21
22 /* INPUT PARAMETERS
23      %r2 = res_ptr
24      %r3 = s1_ptr
25      %r4 = s2_ptr
26      %r5 = size.  */
27         
28 #include "sysdep.h"
29 #include "asm-syntax.h"
30
31 ENTRY(__mpn_sub_n)
32         stg    %r6,48(%r15)   # save register 6
33         sgr    %r1,%r1
34         lghi   %r0,1          # cannot use ahi to add carry, use slr
35 .L0:    lg     %r6,0(%r1,%r3) # .L0 -> no carry from last sub
36         slg    %r6,0(%r1,%r4)
37         stg    %r6,0(%r1,%r2)
38         la     %r1,8(%r1)
39         brc    4,.L3
40 .L1:    brct   %r5,.L0
41         slgr   %r2,%r2        # no last carry to return
42         j      .Lexit
43 .L2:    lg     %r6,0(%r1,%r3) # .L2 -> carry from last sub
44         slg    %r6,0(%r1,%r4)
45         brc    4,.L4
46         slgr   %r6,%r0        # no carry yet, add carry from last sub
47         stg    %r6,0(%r1,%r2)
48         la     %r1,8(%r1)
49         brc    11,.L1         # new carry ?
50 .L3:    brct   %r5,.L2
51         lgr    %r2,%r0        # return last carry
52         j      .Lexit
53 .L4:    slgr   %r6,%r0        # already a carry, add carry from last sub
54         stg    %r6,0(%r1,%r2)
55         la     %r1,8(%r1)
56         brct   %r5,.L2
57         lgr    %r2,%r0        # return last carry
58 .Lexit: lg     %r6,48(%r15)   # restore register 6
59         br     %r14
60 END(__mpn_sub_n)