Updated from ../=mpn/gmp-1.906.7
[kopensolaris-gnu/glibc.git] / sysdeps / mips / mips3 / add_n.s
1  # MIPS3 __mpn_add_n -- Add two limb vectors of the same length > 0 and
2  # store sum in a third limb vector.
3
4  # Copyright (C) 1995 Free Software Foundation, Inc.
5
6  # This file is part of the GNU MP Library.
7
8  # The GNU MP Library is free software; you can redistribute it and/or modify
9  # it under the terms of the GNU Library General Public License as published by
10  # the Free Software Foundation; either version 2 of the License, or (at your
11  # option) any later version.
12
13  # The GNU MP Library is distributed in the hope that it will be useful, but
14  # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15  # or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library General Public
16  # License for more details.
17
18  # You should have received a copy of the GNU Library General Public License
19  # along with the GNU MP Library; see the file COPYING.LIB.  If not, write to
20  # the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21
22
23  # INPUT PARAMETERS
24  # res_ptr      $4
25  # s1_ptr       $5
26  # s2_ptr       $6
27  # size         $7
28
29         .text
30         .align  2
31         .globl  __mpn_add_n
32         .ent    __mpn_add_n
33 __mpn_add_n:
34         .set    noreorder
35         .set    nomacro
36
37         ld      $10,0($5)
38         ld      $11,0($6)
39
40         daddiu  $7,$7,-1
41         and     $9,$7,4-1       # number of limbs in first loop
42         beq     $9,$0,.L0       # if multiple of 4 limbs, skip first loop
43          move   $2,$0
44
45         dsubu   $7,$7,$9
46
47 .Loop0: daddiu  $9,$9,-1
48         ld      $12,8($5)
49         daddu   $11,$11,$2
50         ld      $13,8($6)
51         sltu    $8,$11,$2
52         daddu   $11,$10,$11
53         sltu    $2,$11,$10
54         sd      $11,0($4)
55         or      $2,$2,$8
56
57         daddiu  $5,$5,8
58         daddiu  $6,$6,8
59         move    $10,$12
60         move    $11,$13
61         bne     $9,$0,.Loop0
62          daddiu $4,$4,8
63
64 .L0:    beq     $7,$0,.Lend
65          nop
66
67 .Loop:  daddiu  $7,$7,-4
68
69         ld      $12,8($5)
70         daddu   $11,$11,$2
71         ld      $13,8($6)
72         sltu    $8,$11,$2
73         daddu   $11,$10,$11
74         sltu    $2,$11,$10
75         sd      $11,0($4)
76         or      $2,$2,$8
77
78         ld      $10,16($5)
79         daddu   $13,$13,$2
80         ld      $11,16($6)
81         sltu    $8,$13,$2
82         daddu   $13,$12,$13
83         sltu    $2,$13,$12
84         sd      $13,8($4)
85         or      $2,$2,$8
86
87         ld      $12,24($5)
88         daddu   $11,$11,$2
89         ld      $13,24($6)
90         sltu    $8,$11,$2
91         daddu   $11,$10,$11
92         sltu    $2,$11,$10
93         sd      $11,16($4)
94         or      $2,$2,$8
95
96         ld      $10,32($5)
97         daddu   $13,$13,$2
98         ld      $11,32($6)
99         sltu    $8,$13,$2
100         daddu   $13,$12,$13
101         sltu    $2,$13,$12
102         sd      $13,24($4)
103         or      $2,$2,$8
104
105         daddiu  $5,$5,32
106         daddiu  $6,$6,32
107
108         bne     $7,$0,.Loop
109          daddiu $4,$4,32
110
111 .Lend:  daddu   $11,$11,$2
112         sltu    $8,$11,$2
113         daddu   $11,$10,$11
114         sltu    $2,$11,$10
115         sd      $11,0($4)
116         j       $31
117         or      $2,$2,$8
118
119         .end    __mpn_add_n