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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
|
.text
.align 3
.globl ___gmpn_preinv_divrem_1
___gmpn_preinv_divrem_1:
cbz x3, Lfz
stp x29, x30, [sp, #-80]!
mov x29, sp
stp x19, x20, [sp, #16]
stp x21, x22, [sp, #32]
stp x23, x24, [sp, #48]
sub x21, x3, #1
add x7, x21, x1
add x20, x2, x21, lsl #3
add x19, x0, x7, lsl #3
mov x24, x1
mov x22, x4
mov x0, x5
tbnz x4, #63, Lnentry
mov x23, x6
b Luentry
.text
.align 3
.globl ___gmpn_divrem_1
___gmpn_divrem_1:
cbz x3, Lfz
stp x29, x30, [sp, #-80]!
mov x29, sp
stp x19, x20, [sp, #16]
stp x21, x22, [sp, #32]
stp x23, x24, [sp, #48]
sub x21, x3, #1
add x7, x21, x1
add x20, x2, x21, lsl #3
add x19, x0, x7, lsl #3
mov x24, x1
mov x22, x4
tbnz x4, #63, Lnormalised
Lunnorm:
clz x23, x22
lsl x0, x22, x23
bl ___gmpn_invert_limb
Luentry:
lsl x22, x22, x23
ldr x7, [x20], #-8
sub x8, xzr, x23
lsr x11, x7, x8
lsl x1, x7, x23
cbz x21, Luend
Lutop:ldr x7, [x20], #-8
add x2, x11, #1
mul x10, x11, x0
umulh x17, x11, x0
lsr x9, x7, x8
orr x1, x1, x9
adds x10, x1, x10
adc x2, x2, x17
msub x11, x22, x2, x1
lsl x1, x7, x23
cmp x10, x11
add x14, x11, x22
csel x11, x14, x11, cc
sbc x2, x2, xzr
cmp x11, x22
bcs Lufx
Luok: str x2, [x19], #-8
sub x21, x21, #1
cbnz x21, Lutop
Luend:add x2, x11, #1
mul x10, x11, x0
umulh x17, x11, x0
adds x10, x1, x10
adc x2, x2, x17
msub x11, x22, x2, x1
cmp x10, x11
add x14, x11, x22
csel x11, x14, x11, cc
sbc x2, x2, xzr
subs x14, x11, x22
adc x2, x2, xzr
csel x11, x14, x11, cs
str x2, [x19], #-8
cbnz x24, Lftop
lsr x0, x11, x23
ldp x19, x20, [sp, #16]
ldp x21, x22, [sp, #32]
ldp x23, x24, [sp, #48]
ldp x29, x30, [sp], #80
ret
Lufx: add x2, x2, #1
sub x11, x11, x22
b Luok
Lnormalised:
mov x0, x22
bl ___gmpn_invert_limb
Lnentry:
ldr x7, [x20], #-8
subs x14, x7, x22
adc x2, xzr, xzr
csel x11, x14, x7, cs
b Lnok
Lntop:ldr x1, [x20], #-8
add x2, x11, #1
mul x10, x11, x0
umulh x17, x11, x0
adds x10, x1, x10
adc x2, x2, x17
msub x11, x22, x2, x1
cmp x10, x11
add x14, x11, x22
csel x11, x14, x11, cc
sbc x2, x2, xzr
cmp x11, x22
bcs Lnfx
Lnok: str x2, [x19], #-8
sub x21, x21, #1
tbz x21, #63, Lntop
Lnend:cbnz x24, Lfrac
mov x0, x11
ldp x19, x20, [sp, #16]
ldp x21, x22, [sp, #32]
ldp x23, x24, [sp, #48]
ldp x29, x30, [sp], #80
ret
Lnfx: add x2, x2, #1
sub x11, x11, x22
b Lnok
Lfrac:mov x23, #0
Lftop:add x2, x11, #1
mul x10, x11, x0
umulh x17, x11, x0
add x2, x2, x17
msub x11, x22, x2, xzr
cmp x10, x11
add x14, x11, x22
csel x11, x14, x11, cc
sbc x2, x2, xzr
str x2, [x19], #-8
sub x24, x24, #1
cbnz x24, Lftop
lsr x0, x11, x23
ldp x19, x20, [sp, #16]
ldp x21, x22, [sp, #32]
ldp x23, x24, [sp, #48]
ldp x29, x30, [sp], #80
ret
Lfz: cbz x1, Lzend
Lztop:str xzr, [x0], #8
sub x1, x1, #1
cbnz x1, Lztop
Lzend:mov x0, #0
ret
|