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