Tizen 2.1 base
[external/gmp.git] / mpn / pa32 / hppa2_0 / add_n.asm
1 dnl  HP-PA 2.0 32-bit mpn_add_n -- Add two limb vectors of the same length > 0
2 dnl  and store sum in a third limb vector.
3
4 dnl  Copyright 1997, 1998, 2000, 2001, 2002 Free Software Foundation, Inc.
5
6 dnl  This file is part of the GNU MP Library.
7
8 dnl  The GNU MP Library is free software; you can redistribute it and/or modify
9 dnl  it under the terms of the GNU Lesser General Public License as published
10 dnl  by the Free Software Foundation; either version 3 of the License, or (at
11 dnl  your option) any later version.
12
13 dnl  The GNU MP Library is distributed in the hope that it will be useful, but
14 dnl  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15 dnl  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
16 dnl  License for more details.
17
18 dnl  You should have received a copy of the GNU Lesser General Public License
19 dnl  along with the GNU MP Library.  If not, see http://www.gnu.org/licenses/.
20
21 include(`../config.m4')
22
23 C INPUT PARAMETERS
24 C res_ptr       gr26
25 C s1_ptr        gr25
26 C s2_ptr        gr24
27 C size          gr23
28
29 C This runs at 2 cycles/limb on PA8000.
30
31 ASM_START()
32 PROLOGUE(mpn_add_n)
33         sub             %r0,%r23,%r22
34         zdep            %r22,30,3,%r28          C r28 = 2 * (-n & 7)
35         zdep            %r22,29,3,%r22          C r22 = 4 * (-n & 7)
36         sub             %r25,%r22,%r25          C offset s1_ptr
37         sub             %r24,%r22,%r24          C offset s2_ptr
38         sub             %r26,%r22,%r26          C offset res_ptr
39         blr             %r28,%r0                C branch into loop
40         add             %r0,%r0,%r0             C reset carry
41
42 LDEF(loop)
43         ldw             0(%r25),%r20
44         ldw             0(%r24),%r31
45         addc            %r20,%r31,%r20
46         stw             %r20,0(%r26)
47
48 LDEF(7)
49         ldw             4(%r25),%r21
50         ldw             4(%r24),%r19
51         addc            %r21,%r19,%r21
52         stw             %r21,4(%r26)
53
54 LDEF(6)
55         ldw             8(%r25),%r20
56         ldw             8(%r24),%r31
57         addc            %r20,%r31,%r20
58         stw             %r20,8(%r26)
59
60 LDEF(5)
61         ldw             12(%r25),%r21
62         ldw             12(%r24),%r19
63         addc            %r21,%r19,%r21
64         stw             %r21,12(%r26)
65
66 LDEF(4)
67         ldw             16(%r25),%r20
68         ldw             16(%r24),%r31
69         addc            %r20,%r31,%r20
70         stw             %r20,16(%r26)
71
72 LDEF(3)
73         ldw             20(%r25),%r21
74         ldw             20(%r24),%r19
75         addc            %r21,%r19,%r21
76         stw             %r21,20(%r26)
77
78 LDEF(2)
79         ldw             24(%r25),%r20
80         ldw             24(%r24),%r31
81         addc            %r20,%r31,%r20
82         stw             %r20,24(%r26)
83
84 LDEF(1)
85         ldw             28(%r25),%r21
86         ldo             32(%r25),%r25
87         ldw             28(%r24),%r19
88         addc            %r21,%r19,%r21
89         stw             %r21,28(%r26)
90         ldo             32(%r24),%r24
91         addib,>         -8,%r23,L(loop)
92         ldo             32(%r26),%r26
93
94         bv              (%r2)
95         addc            %r0,%r0,%r28
96 EPILOGUE()