some more internall structure changes
[gnupg.git] / mpi / alpha / mpih-add1.S
1 /* alpha  add_n -- Add two limb vectors of the same length > 0 and store
2  *                 sum in a third limb vector.
3  *
4  *      Copyright (C) 1995 Free Software Foundation, Inc.
5  *      Copyright (C) 1998 Free Software Foundation, Inc.
6  *
7  * This file is part of GNUPG.
8  *
9  * GNUPG is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * GNUPG is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software
21  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
22  */
23
24
25
26 /*******************
27  *  mpi_limb_t
28  *  mpihelp_add_n( mpi_ptr_t res_ptr,   ($16)
29  *                 mpi_ptr_t s1_ptr,    ($17)
30  *                 mpi_ptr_t s2_ptr,    ($18)
31  *                 mpi_size_t size)     ($19)
32  */
33
34
35         .set    noreorder
36         .set    noat
37 .text
38         .align  3
39         .globl  mpihelp_add_n
40         .ent    mpihelp_add_n
41 mpihelp_add_n:
42         .frame  $30,0,$26,0
43
44         ldq     $3,0($17)
45         ldq     $4,0($18)
46
47         subq    $19,1,$19
48         and     $19,4-1,$2      # number of limbs in first loop
49         bis     $31,$31,$0
50         beq     $2,.L0          # if multiple of 4 limbs, skip first loop
51
52         subq    $19,$2,$19
53
54 .Loop0: subq    $2,1,$2
55         ldq     $5,8($17)
56         addq    $4,$0,$4
57         ldq     $6,8($18)
58         cmpult  $4,$0,$1
59         addq    $3,$4,$4
60         cmpult  $4,$3,$0
61         stq     $4,0($16)
62         or      $0,$1,$0
63
64         addq    $17,8,$17
65         addq    $18,8,$18
66         bis     $5,$5,$3
67         bis     $6,$6,$4
68         addq    $16,8,$16
69         bne     $2,.Loop0
70
71 .L0:    beq     $19,.Lend
72
73         .align  3
74 .Loop:  subq    $19,4,$19
75
76         ldq     $5,8($17)
77         addq    $4,$0,$4
78         ldq     $6,8($18)
79         cmpult  $4,$0,$1
80         addq    $3,$4,$4
81         cmpult  $4,$3,$0
82         stq     $4,0($16)
83         or      $0,$1,$0
84
85         ldq     $3,16($17)
86         addq    $6,$0,$6
87         ldq     $4,16($18)
88         cmpult  $6,$0,$1
89         addq    $5,$6,$6
90         cmpult  $6,$5,$0
91         stq     $6,8($16)
92         or      $0,$1,$0
93
94         ldq     $5,24($17)
95         addq    $4,$0,$4
96         ldq     $6,24($18)
97         cmpult  $4,$0,$1
98         addq    $3,$4,$4
99         cmpult  $4,$3,$0
100         stq     $4,16($16)
101         or      $0,$1,$0
102
103         ldq     $3,32($17)
104         addq    $6,$0,$6
105         ldq     $4,32($18)
106         cmpult  $6,$0,$1
107         addq    $5,$6,$6
108         cmpult  $6,$5,$0
109         stq     $6,24($16)
110         or      $0,$1,$0
111
112         addq    $17,32,$17
113         addq    $18,32,$18
114         addq    $16,32,$16
115         bne     $19,.Loop
116
117 .Lend:  addq    $4,$0,$4
118         cmpult  $4,$0,$1
119         addq    $3,$4,$4
120         cmpult  $4,$3,$0
121         stq     $4,0($16)
122         or      $0,$1,$0
123         ret     $31,($26),1
124
125         .end    mpihelp_add_n
126