1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28#include <asm/export.h>
29
30 .set noreorder
31 .set noat
32
33 .text
34
35 .globl __udiv_qrnnd
36 .ent __udiv_qrnnd
37__udiv_qrnnd:
38 .frame $30,0,$26,0
39 .prologue 0
40
41#define cnt $2
42#define tmp $3
43#define rem_ptr $16
44#define n1 $17
45#define n0 $18
46#define d $19
47#define qb $20
48#define AT $at
49
50 ldiq cnt,16
51 blt d,$largedivisor
52
53$loop1: cmplt n0,0,tmp
54 addq n1,n1,n1
55 bis n1,tmp,n1
56 addq n0,n0,n0
57 cmpule d,n1,qb
58 subq n1,d,tmp
59 cmovne qb,tmp,n1
60 bis n0,qb,n0
61 cmplt n0,0,tmp
62 addq n1,n1,n1
63 bis n1,tmp,n1
64 addq n0,n0,n0
65 cmpule d,n1,qb
66 subq n1,d,tmp
67 cmovne qb,tmp,n1
68 bis n0,qb,n0
69 cmplt n0,0,tmp
70 addq n1,n1,n1
71 bis n1,tmp,n1
72 addq n0,n0,n0
73 cmpule d,n1,qb
74 subq n1,d,tmp
75 cmovne qb,tmp,n1
76 bis n0,qb,n0
77 cmplt n0,0,tmp
78 addq n1,n1,n1
79 bis n1,tmp,n1
80 addq n0,n0,n0
81 cmpule d,n1,qb
82 subq n1,d,tmp
83 cmovne qb,tmp,n1
84 bis n0,qb,n0
85 subq cnt,1,cnt
86 bgt cnt,$loop1
87 stq n1,0(rem_ptr)
88 bis $31,n0,$0
89 ret $31,($26),1
90
91$largedivisor:
92 and n0,1,$4
93
94 srl n0,1,n0
95 sll n1,63,tmp
96 or tmp,n0,n0
97 srl n1,1,n1
98
99 and d,1,$6
100 srl d,1,$5
101 addq $5,$6,$5
102
103$loop2: cmplt n0,0,tmp
104 addq n1,n1,n1
105 bis n1,tmp,n1
106 addq n0,n0,n0
107 cmpule $5,n1,qb
108 subq n1,$5,tmp
109 cmovne qb,tmp,n1
110 bis n0,qb,n0
111 cmplt n0,0,tmp
112 addq n1,n1,n1
113 bis n1,tmp,n1
114 addq n0,n0,n0
115 cmpule $5,n1,qb
116 subq n1,$5,tmp
117 cmovne qb,tmp,n1
118 bis n0,qb,n0
119 cmplt n0,0,tmp
120 addq n1,n1,n1
121 bis n1,tmp,n1
122 addq n0,n0,n0
123 cmpule $5,n1,qb
124 subq n1,$5,tmp
125 cmovne qb,tmp,n1
126 bis n0,qb,n0
127 cmplt n0,0,tmp
128 addq n1,n1,n1
129 bis n1,tmp,n1
130 addq n0,n0,n0
131 cmpule $5,n1,qb
132 subq n1,$5,tmp
133 cmovne qb,tmp,n1
134 bis n0,qb,n0
135 subq cnt,1,cnt
136 bgt cnt,$loop2
137
138 addq n1,n1,n1
139 addq $4,n1,n1
140 bne $6,$Odd
141 stq n1,0(rem_ptr)
142 bis $31,n0,$0
143 ret $31,($26),1
144
145$Odd:
146
147 addq n1,n0,n1
148
149 cmpult n1,n0,tmp
150 subq n1,d,AT
151 addq n0,tmp,n0
152 cmovne tmp,AT,n1
153
154 cmpult n1,d,tmp
155 addq n0,1,AT
156 cmoveq tmp,AT,n0
157 subq n1,d,AT
158 cmoveq tmp,AT,n1
159
160 stq n1,0(rem_ptr)
161 bis $31,n0,$0
162 ret $31,($26),1
163
164 .end __udiv_qrnnd
165EXPORT_SYMBOL(__udiv_qrnnd)
166