Switched to GPLv3.
[gnupg.git] / mpi / mips3 / mpih-add1.S
1 /* mips3  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, 1998, 2000
5  *                    2001 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 3 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, see <http://www.gnu.org/licenses/>.
21  */
22
23
24 /*******************
25  *  mpi_limb_t
26  *  mpihelp_add_n( mpi_ptr_t res_ptr,   ($4)
27  *                 mpi_ptr_t s1_ptr,    ($5)
28  *                 mpi_ptr_t s2_ptr,    ($6)
29  *                 mpi_size_t size)     ($7)
30  */
31
32         .text
33         .align  2
34         .globl  mpihelp_add_n
35         .ent    mpihelp_add_n
36 mpihelp_add_n:
37         .set    noreorder
38         .set    nomacro
39
40         ld      $10,0($5)
41         ld      $11,0($6)
42
43         daddiu  $7,$7,-1
44         and     $9,$7,4-1       # number of limbs in first loop
45         beq     $9,$0,.L0       # if multiple of 4 limbs, skip first loop
46          move   $2,$0
47
48         dsubu   $7,$7,$9
49
50 .Loop0: daddiu  $9,$9,-1
51         ld      $12,8($5)
52         daddu   $11,$11,$2
53         ld      $13,8($6)
54         sltu    $8,$11,$2
55         daddu   $11,$10,$11
56         sltu    $2,$11,$10
57         sd      $11,0($4)
58         or      $2,$2,$8
59
60         daddiu  $5,$5,8
61         daddiu  $6,$6,8
62         move    $10,$12
63         move    $11,$13
64         bne     $9,$0,.Loop0
65          daddiu $4,$4,8
66
67 .L0:    beq     $7,$0,.Lend
68          nop
69
70 .Loop:  daddiu  $7,$7,-4
71
72         ld      $12,8($5)
73         daddu   $11,$11,$2
74         ld      $13,8($6)
75         sltu    $8,$11,$2
76         daddu   $11,$10,$11
77         sltu    $2,$11,$10
78         sd      $11,0($4)
79         or      $2,$2,$8
80
81         ld      $10,16($5)
82         daddu   $13,$13,$2
83         ld      $11,16($6)
84         sltu    $8,$13,$2
85         daddu   $13,$12,$13
86         sltu    $2,$13,$12
87         sd      $13,8($4)
88         or      $2,$2,$8
89
90         ld      $12,24($5)
91         daddu   $11,$11,$2
92         ld      $13,24($6)
93         sltu    $8,$11,$2
94         daddu   $11,$10,$11
95         sltu    $2,$11,$10
96         sd      $11,16($4)
97         or      $2,$2,$8
98
99         ld      $10,32($5)
100         daddu   $13,$13,$2
101         ld      $11,32($6)
102         sltu    $8,$13,$2
103         daddu   $13,$12,$13
104         sltu    $2,$13,$12
105         sd      $13,24($4)
106         or      $2,$2,$8
107
108         daddiu  $5,$5,32
109         daddiu  $6,$6,32
110
111         bne     $7,$0,.Loop
112          daddiu $4,$4,32
113
114 .Lend:  daddu   $11,$11,$2
115         sltu    $8,$11,$2
116         daddu   $11,$10,$11
117         sltu    $2,$11,$10
118         sd      $11,0($4)
119         j       $31
120         or      $2,$2,$8
121
122         .end    mpihelp_add_n
123