]> git.ipfire.org Git - thirdparty/gcc.git/blame - libgcc/config/alpha/qrnnd.S
Update copyright years.
[thirdparty/gcc.git] / libgcc / config / alpha / qrnnd.S
CommitLineData
6da9c622 1 # Alpha 21064 __udiv_qrnnd
a5544970 2 # Copyright (C) 1992-2019 Free Software Foundation, Inc.
6da9c622
RK
3
4 # This file is part of GCC.
5
6 # The GNU MP Library is free software; you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
748086b7 8 # the Free Software Foundation; either version 3 of the License, or (at your
6da9c622
RK
9 # option) any later version.
10
6da9c622
RK
11 # This file is distributed in the hope that it will be useful, but
12 # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13 # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
14 # License for more details.
15
748086b7
JJ
16 # Under Section 7 of GPL version 3, you are granted additional
17 # permissions described in the GCC Runtime Library Exception, version
18 # 3.1, as published by the Free Software Foundation.
19
20 # You should have received a copy of the GNU General Public License and
21 # a copy of the GCC Runtime Library Exception along with this program;
22 # see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
23 # <http://www.gnu.org/licenses/>.
6da9c622 24
3ac7c0f2
RH
25#ifdef __ELF__
26.section .note.GNU-stack,""
27#endif
28
6da9c622
RK
29 .set noreorder
30 .set noat
31
32 .text
33
34 .globl __udiv_qrnnd
35 .ent __udiv_qrnnd
f2a176dc
TG
36#ifdef __VMS__
37__udiv_qrnnd..en:
38 .frame $29,0,$26,0
39 .prologue
40#else
6da9c622
RK
41__udiv_qrnnd:
42 .frame $30,0,$26,0
43 .prologue 0
f2a176dc 44#endif
6da9c622
RK
45
46#define cnt $2
47#define tmp $3
48#define rem_ptr $16
49#define n1 $17
50#define n0 $18
51#define d $19
52#define qb $20
53#define AT $at
54
55 ldiq cnt,16
56 blt d,$largedivisor
57
58$loop1: cmplt n0,0,tmp
59 addq n1,n1,n1
60 bis n1,tmp,n1
61 addq n0,n0,n0
62 cmpule d,n1,qb
63 subq n1,d,tmp
64 cmovne qb,tmp,n1
65 bis n0,qb,n0
66 cmplt n0,0,tmp
67 addq n1,n1,n1
68 bis n1,tmp,n1
69 addq n0,n0,n0
70 cmpule d,n1,qb
71 subq n1,d,tmp
72 cmovne qb,tmp,n1
73 bis n0,qb,n0
74 cmplt n0,0,tmp
75 addq n1,n1,n1
76 bis n1,tmp,n1
77 addq n0,n0,n0
78 cmpule d,n1,qb
79 subq n1,d,tmp
80 cmovne qb,tmp,n1
81 bis n0,qb,n0
82 cmplt n0,0,tmp
83 addq n1,n1,n1
84 bis n1,tmp,n1
85 addq n0,n0,n0
86 cmpule d,n1,qb
87 subq n1,d,tmp
88 cmovne qb,tmp,n1
89 bis n0,qb,n0
90 subq cnt,1,cnt
91 bgt cnt,$loop1
92 stq n1,0(rem_ptr)
93 bis $31,n0,$0
94 ret $31,($26),1
95
96$largedivisor:
97 and n0,1,$4
98
99 srl n0,1,n0
100 sll n1,63,tmp
101 or tmp,n0,n0
102 srl n1,1,n1
103
104 and d,1,$6
105 srl d,1,$5
106 addq $5,$6,$5
107
108$loop2: cmplt n0,0,tmp
109 addq n1,n1,n1
110 bis n1,tmp,n1
111 addq n0,n0,n0
112 cmpule $5,n1,qb
113 subq n1,$5,tmp
114 cmovne qb,tmp,n1
115 bis n0,qb,n0
116 cmplt n0,0,tmp
117 addq n1,n1,n1
118 bis n1,tmp,n1
119 addq n0,n0,n0
120 cmpule $5,n1,qb
121 subq n1,$5,tmp
122 cmovne qb,tmp,n1
123 bis n0,qb,n0
124 cmplt n0,0,tmp
125 addq n1,n1,n1
126 bis n1,tmp,n1
127 addq n0,n0,n0
128 cmpule $5,n1,qb
129 subq n1,$5,tmp
130 cmovne qb,tmp,n1
131 bis n0,qb,n0
132 cmplt n0,0,tmp
133 addq n1,n1,n1
134 bis n1,tmp,n1
135 addq n0,n0,n0
136 cmpule $5,n1,qb
137 subq n1,$5,tmp
138 cmovne qb,tmp,n1
139 bis n0,qb,n0
140 subq cnt,1,cnt
141 bgt cnt,$loop2
142
143 addq n1,n1,n1
144 addq $4,n1,n1
145 bne $6,$Odd
146 stq n1,0(rem_ptr)
147 bis $31,n0,$0
148 ret $31,($26),1
149
150$Odd:
151 /* q' in n0. r' in n1 */
152 addq n1,n0,n1
153
154 cmpult n1,n0,tmp # tmp := carry from addq
155 subq n1,d,AT
156 addq n0,tmp,n0
157 cmovne tmp,AT,n1
158
159 cmpult n1,d,tmp
160 addq n0,1,AT
161 cmoveq tmp,AT,n0
162 subq n1,d,AT
163 cmoveq tmp,AT,n1
164
165 stq n1,0(rem_ptr)
166 bis $31,n0,$0
167 ret $31,($26),1
168
f2a176dc
TG
169#ifdef __VMS__
170 .link
171 .align 3
172__udiv_qrnnd:
173 .pdesc __udiv_qrnnd..en,null
174#endif
6da9c622 175 .end __udiv_qrnnd