]> git.ipfire.org Git - thirdparty/glibc.git/blame - sysdeps/alpha/udiv_qrnnd.S
Update copyright dates with scripts/update-copyrights
[thirdparty/glibc.git] / sysdeps / alpha / udiv_qrnnd.S
CommitLineData
3b84e62e
RM
1 # Alpha 21064 __udiv_qrnnd
2
2b778ceb 3 # Copyright (C) 1992-2021 Free Software Foundation, Inc.
3b84e62e
RM
4
5 # This file is part of the GNU MP Library.
6
7 # The GNU MP Library is free software; you can redistribute it and/or modify
f01ec467
AJ
8 # it under the terms of the GNU Lesser General Public License as published by
9 # the Free Software Foundation; either version 2.1 of the License, or (at your
3b84e62e
RM
10 # option) any later version.
11
12 # The GNU MP Library is distributed in the hope that it will be useful, but
13 # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
f01ec467 14 # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
3b84e62e
RM
15 # License for more details.
16
f01ec467 17 # You should have received a copy of the GNU Lesser General Public License
5a82c748 18 # along with the GNU MP Library. If not, see <https://www.gnu.org/licenses/>.
3b84e62e 19
24c177a0 20#include <sysdep.h>
3b84e62e
RM
21
22 .set noreorder
23 .set noat
24c177a0
RM
24
25 .text
26
27LEAF(__udiv_qrnnd, 0)
60c74cf0
UD
28#ifdef PROF
29 ldgp gp, 0(pv)
30 lda AT, _mcount
31 jsr AT, (AT), _mcount
32 .prologue 1
33#else
3b84e62e 34 .prologue 0
60c74cf0
UD
35#endif
36
3b84e62e
RM
37#define cnt $2
38#define tmp $3
39#define rem_ptr $16
40#define n1 $17
41#define n0 $18
42#define d $19
43#define qb $20
44
45 ldiq cnt,16
60c74cf0 46 blt d,$largedivisor
3b84e62e 47
60c74cf0 48$loop1: cmplt n0,0,tmp
3b84e62e
RM
49 addq n1,n1,n1
50 bis n1,tmp,n1
51 addq n0,n0,n0
52 cmpule d,n1,qb
53 subq n1,d,tmp
54 cmovne qb,tmp,n1
55 bis n0,qb,n0
56 cmplt n0,0,tmp
57 addq n1,n1,n1
58 bis n1,tmp,n1
59 addq n0,n0,n0
60 cmpule d,n1,qb
61 subq n1,d,tmp
62 cmovne qb,tmp,n1
63 bis n0,qb,n0
64 cmplt n0,0,tmp
65 addq n1,n1,n1
66 bis n1,tmp,n1
67 addq n0,n0,n0
68 cmpule d,n1,qb
69 subq n1,d,tmp
70 cmovne qb,tmp,n1
71 bis n0,qb,n0
72 cmplt n0,0,tmp
73 addq n1,n1,n1
74 bis n1,tmp,n1
75 addq n0,n0,n0
76 cmpule d,n1,qb
77 subq n1,d,tmp
78 cmovne qb,tmp,n1
79 bis n0,qb,n0
80 subq cnt,1,cnt
60c74cf0 81 bgt cnt,$loop1
3b84e62e
RM
82 stq n1,0(rem_ptr)
83 bis $31,n0,$0
84 ret $31,($26),1
85
60c74cf0 86$largedivisor:
3b84e62e
RM
87 and n0,1,$4
88
89 srl n0,1,n0
90 sll n1,63,tmp
91 or tmp,n0,n0
92 srl n1,1,n1
93
94 and d,1,$6
95 srl d,1,$5
96 addq $5,$6,$5
97
60c74cf0 98$loop2: cmplt n0,0,tmp
3b84e62e
RM
99 addq n1,n1,n1
100 bis n1,tmp,n1
101 addq n0,n0,n0
102 cmpule $5,n1,qb
103 subq n1,$5,tmp
104 cmovne qb,tmp,n1
105 bis n0,qb,n0
106 cmplt n0,0,tmp
107 addq n1,n1,n1
108 bis n1,tmp,n1
109 addq n0,n0,n0
110 cmpule $5,n1,qb
111 subq n1,$5,tmp
112 cmovne qb,tmp,n1
113 bis n0,qb,n0
114 cmplt n0,0,tmp
115 addq n1,n1,n1
116 bis n1,tmp,n1
117 addq n0,n0,n0
118 cmpule $5,n1,qb
119 subq n1,$5,tmp
120 cmovne qb,tmp,n1
121 bis n0,qb,n0
122 cmplt n0,0,tmp
123 addq n1,n1,n1
124 bis n1,tmp,n1
125 addq n0,n0,n0
126 cmpule $5,n1,qb
127 subq n1,$5,tmp
128 cmovne qb,tmp,n1
129 bis n0,qb,n0
130 subq cnt,1,cnt
60c74cf0 131 bgt cnt,$loop2
3b84e62e
RM
132
133 addq n1,n1,n1
134 addq $4,n1,n1
60c74cf0 135 bne $6,$Odd
3b84e62e
RM
136 stq n1,0(rem_ptr)
137 bis $31,n0,$0
138 ret $31,($26),1
139
60c74cf0 140$Odd:
3a29975f 141 /* q' in n0. r' in n1 */
3b84e62e 142 addq n1,n0,n1
60c74cf0 143
3b84e62e 144 cmpult n1,n0,tmp # tmp := carry from addq
60c74cf0
UD
145 subq n1,d,AT
146 addq n0,tmp,n0
147 cmovne tmp,AT,n1
148
149 cmpult n1,d,tmp
150 addq n0,1,AT
151 cmoveq tmp,AT,n0
152 subq n1,d,AT
153 cmoveq tmp,AT,n1
154
3b84e62e
RM
155 stq n1,0(rem_ptr)
156 bis $31,n0,$0
157 ret $31,($26),1
158
159 .end __udiv_qrnnd