summaryrefslogtreecommitdiff
path: root/vere/ext/gmp/gen/x86_64-macos/mpn/mod_34lsub1.s
blob: 141c810151e1d5cce06bfbba9a1d026ccc3bd983 (plain)
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
236
237
238
239
240
241
242
243
244
245
246















































































	.text
	.align	5, 0x90
	.globl	___gmpn_mod_34lsub1
	
	
___gmpn_mod_34lsub1:

	

	mov	$0x0000FFFFFFFFFFFF, %r11

	mov	(%rdi), %rax

	cmp	$2, %rsi
	ja	Lgt2

	jb	Lone

	mov	8(%rdi), %rsi
	mov	%rax, %rdx
	shr	$48, %rax		

	and	%r11, %rdx		
	add	%rdx, %rax
	mov	%esi, %edx

	shr	$32, %rsi		
	add	%rsi, %rax

	shl	$16, %rdx		
	add	%rdx, %rax
Lone:	
	ret





Lgt2:	mov	8(%rdi), %rcx
	mov	16(%rdi), %rdx
	xor	%r9, %r9
	add	$24, %rdi
	sub	$12, %rsi
	jc	Lend
	.align	4, 0x90
Ltop:
	add	(%rdi), %rax
	adc	8(%rdi), %rcx
	adc	16(%rdi), %rdx
	adc	$0, %r9
	add	24(%rdi), %rax
	adc	32(%rdi), %rcx
	adc	40(%rdi), %rdx
	adc	$0, %r9
	add	48(%rdi), %rax
	adc	56(%rdi), %rcx
	adc	64(%rdi), %rdx
	adc	$0, %r9
	add	$72, %rdi
	sub	$9, %rsi
	jnc	Ltop

Lend:
	lea	Ltab(%rip), %r8
	movslq	36(%r8,%rsi,4), %r10
	add	%r10, %r8
	jmp	*%r8

	.text
	.align	3, 0x90
Ltab:	.set	L0_tmp, L0-Ltab
	.long	L0_tmp

	.set	L1_tmp, L1-Ltab
	.long	L1_tmp

	.set	L2_tmp, L2-Ltab
	.long	L2_tmp

	.set	L3_tmp, L3-Ltab
	.long	L3_tmp

	.set	L4_tmp, L4-Ltab
	.long	L4_tmp

	.set	L5_tmp, L5-Ltab
	.long	L5_tmp

	.set	L6_tmp, L6-Ltab
	.long	L6_tmp

	.set	L7_tmp, L7-Ltab
	.long	L7_tmp

	.set	L8_tmp, L8-Ltab
	.long	L8_tmp

	.text

L6:	add	(%rdi), %rax
	adc	8(%rdi), %rcx
	adc	16(%rdi), %rdx
	adc	$0, %r9
	add	$24, %rdi
L3:	add	(%rdi), %rax
	adc	8(%rdi), %rcx
	adc	16(%rdi), %rdx
	jmp	Lcj1

L7:	add	(%rdi), %rax
	adc	8(%rdi), %rcx
	adc	16(%rdi), %rdx
	adc	$0, %r9
	add	$24, %rdi
L4:	add	(%rdi), %rax
	adc	8(%rdi), %rcx
	adc	16(%rdi), %rdx
	adc	$0, %r9
	add	$24, %rdi
L1:	add	(%rdi), %rax
	adc	$0, %rcx
	jmp	Lcj2

L8:	add	(%rdi), %rax
	adc	8(%rdi), %rcx
	adc	16(%rdi), %rdx
	adc	$0, %r9
	add	$24, %rdi
L5:	add	(%rdi), %rax
	adc	8(%rdi), %rcx
	adc	16(%rdi), %rdx
	adc	$0, %r9
	add	$24, %rdi
L2:	add	(%rdi), %rax
	adc	8(%rdi), %rcx

Lcj2:	adc	$0, %rdx
Lcj1:	adc	$0, %r9
L0:	add	%r9, %rax
	adc	$0, %rcx
	adc	$0, %rdx
	adc	$0, %rax

	mov	%rax, %rdi		
	shr	$48, %rax		

	and	%r11, %rdi		
	mov	%ecx, %r10d	

	shr	$32, %rcx		

	add	%rdi, %rax		
	movzwl	%dx, %edi		
	shl	$16, %r10		

	add	%rcx, %rax		
	shr	$16, %rdx		

	add	%r10, %rax		
	shl	$32, %rdi		

	add	%rdx, %rax		
	add	%rdi, %rax		

	
	ret