xref: /aosp_15_r20/external/cronet/third_party/boringssl/src/gen/bcm/p256_beeu-x86_64-asm-linux.S (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1// This file is generated from a similarly-named Perl script in the BoringSSL
2// source tree. Do not edit by hand.
3
4#include <openssl/asm_base.h>
5
6#if !defined(OPENSSL_NO_ASM) && defined(OPENSSL_X86_64) && defined(__ELF__)
7.text
8
9.type	beeu_mod_inverse_vartime,@function
10.hidden	beeu_mod_inverse_vartime
11.globl	beeu_mod_inverse_vartime
12.hidden beeu_mod_inverse_vartime
13.align	32
14beeu_mod_inverse_vartime:
15.cfi_startproc
16_CET_ENDBR
17	pushq	%rbp
18.cfi_adjust_cfa_offset	8
19.cfi_offset	rbp,-16
20	pushq	%r12
21.cfi_adjust_cfa_offset	8
22.cfi_offset	r12,-24
23	pushq	%r13
24.cfi_adjust_cfa_offset	8
25.cfi_offset	r13,-32
26	pushq	%r14
27.cfi_adjust_cfa_offset	8
28.cfi_offset	r14,-40
29	pushq	%r15
30.cfi_adjust_cfa_offset	8
31.cfi_offset	r15,-48
32	pushq	%rbx
33.cfi_adjust_cfa_offset	8
34.cfi_offset	rbx,-56
35	pushq	%rsi
36.cfi_adjust_cfa_offset	8
37.cfi_offset	rsi,-64
38
39	subq	$80,%rsp
40.cfi_adjust_cfa_offset	80
41	movq	%rdi,0(%rsp)
42
43
44	movq	$1,%r8
45	xorq	%r9,%r9
46	xorq	%r10,%r10
47	xorq	%r11,%r11
48	xorq	%rdi,%rdi
49
50	xorq	%r12,%r12
51	xorq	%r13,%r13
52	xorq	%r14,%r14
53	xorq	%r15,%r15
54	xorq	%rbp,%rbp
55
56
57	vmovdqu	0(%rsi),%xmm0
58	vmovdqu	16(%rsi),%xmm1
59	vmovdqu	%xmm0,48(%rsp)
60	vmovdqu	%xmm1,64(%rsp)
61
62	vmovdqu	0(%rdx),%xmm0
63	vmovdqu	16(%rdx),%xmm1
64	vmovdqu	%xmm0,16(%rsp)
65	vmovdqu	%xmm1,32(%rsp)
66
67.Lbeeu_loop:
68	xorq	%rbx,%rbx
69	orq	48(%rsp),%rbx
70	orq	56(%rsp),%rbx
71	orq	64(%rsp),%rbx
72	orq	72(%rsp),%rbx
73	jz	.Lbeeu_loop_end
74
75
76
77
78
79
80
81
82
83
84	movq	$1,%rcx
85
86
87.Lbeeu_shift_loop_XB:
88	movq	%rcx,%rbx
89	andq	48(%rsp),%rbx
90	jnz	.Lbeeu_shift_loop_end_XB
91
92
93	movq	$1,%rbx
94	andq	%r8,%rbx
95	jz	.Lshift1_0
96	addq	0(%rdx),%r8
97	adcq	8(%rdx),%r9
98	adcq	16(%rdx),%r10
99	adcq	24(%rdx),%r11
100	adcq	$0,%rdi
101
102.Lshift1_0:
103	shrdq	$1,%r9,%r8
104	shrdq	$1,%r10,%r9
105	shrdq	$1,%r11,%r10
106	shrdq	$1,%rdi,%r11
107	shrq	$1,%rdi
108
109	shlq	$1,%rcx
110
111
112
113
114
115	cmpq	$0x8000000,%rcx
116	jne	.Lbeeu_shift_loop_XB
117
118.Lbeeu_shift_loop_end_XB:
119	bsfq	%rcx,%rcx
120	testq	%rcx,%rcx
121	jz	.Lbeeu_no_shift_XB
122
123
124
125	movq	8+48(%rsp),%rax
126	movq	16+48(%rsp),%rbx
127	movq	24+48(%rsp),%rsi
128
129	shrdq	%cl,%rax,0+48(%rsp)
130	shrdq	%cl,%rbx,8+48(%rsp)
131	shrdq	%cl,%rsi,16+48(%rsp)
132
133	shrq	%cl,%rsi
134	movq	%rsi,24+48(%rsp)
135
136
137.Lbeeu_no_shift_XB:
138
139	movq	$1,%rcx
140
141
142.Lbeeu_shift_loop_YA:
143	movq	%rcx,%rbx
144	andq	16(%rsp),%rbx
145	jnz	.Lbeeu_shift_loop_end_YA
146
147
148	movq	$1,%rbx
149	andq	%r12,%rbx
150	jz	.Lshift1_1
151	addq	0(%rdx),%r12
152	adcq	8(%rdx),%r13
153	adcq	16(%rdx),%r14
154	adcq	24(%rdx),%r15
155	adcq	$0,%rbp
156
157.Lshift1_1:
158	shrdq	$1,%r13,%r12
159	shrdq	$1,%r14,%r13
160	shrdq	$1,%r15,%r14
161	shrdq	$1,%rbp,%r15
162	shrq	$1,%rbp
163
164	shlq	$1,%rcx
165
166
167
168
169
170	cmpq	$0x8000000,%rcx
171	jne	.Lbeeu_shift_loop_YA
172
173.Lbeeu_shift_loop_end_YA:
174	bsfq	%rcx,%rcx
175	testq	%rcx,%rcx
176	jz	.Lbeeu_no_shift_YA
177
178
179
180	movq	8+16(%rsp),%rax
181	movq	16+16(%rsp),%rbx
182	movq	24+16(%rsp),%rsi
183
184	shrdq	%cl,%rax,0+16(%rsp)
185	shrdq	%cl,%rbx,8+16(%rsp)
186	shrdq	%cl,%rsi,16+16(%rsp)
187
188	shrq	%cl,%rsi
189	movq	%rsi,24+16(%rsp)
190
191
192.Lbeeu_no_shift_YA:
193
194	movq	48(%rsp),%rax
195	movq	56(%rsp),%rbx
196	movq	64(%rsp),%rsi
197	movq	72(%rsp),%rcx
198	subq	16(%rsp),%rax
199	sbbq	24(%rsp),%rbx
200	sbbq	32(%rsp),%rsi
201	sbbq	40(%rsp),%rcx
202	jnc	.Lbeeu_B_bigger_than_A
203
204
205	movq	16(%rsp),%rax
206	movq	24(%rsp),%rbx
207	movq	32(%rsp),%rsi
208	movq	40(%rsp),%rcx
209	subq	48(%rsp),%rax
210	sbbq	56(%rsp),%rbx
211	sbbq	64(%rsp),%rsi
212	sbbq	72(%rsp),%rcx
213	movq	%rax,16(%rsp)
214	movq	%rbx,24(%rsp)
215	movq	%rsi,32(%rsp)
216	movq	%rcx,40(%rsp)
217
218
219	addq	%r8,%r12
220	adcq	%r9,%r13
221	adcq	%r10,%r14
222	adcq	%r11,%r15
223	adcq	%rdi,%rbp
224	jmp	.Lbeeu_loop
225
226.Lbeeu_B_bigger_than_A:
227
228	movq	%rax,48(%rsp)
229	movq	%rbx,56(%rsp)
230	movq	%rsi,64(%rsp)
231	movq	%rcx,72(%rsp)
232
233
234	addq	%r12,%r8
235	adcq	%r13,%r9
236	adcq	%r14,%r10
237	adcq	%r15,%r11
238	adcq	%rbp,%rdi
239
240	jmp	.Lbeeu_loop
241
242.Lbeeu_loop_end:
243
244
245
246
247	movq	16(%rsp),%rbx
248	subq	$1,%rbx
249	orq	24(%rsp),%rbx
250	orq	32(%rsp),%rbx
251	orq	40(%rsp),%rbx
252
253	jnz	.Lbeeu_err
254
255
256
257
258	movq	0(%rdx),%r8
259	movq	8(%rdx),%r9
260	movq	16(%rdx),%r10
261	movq	24(%rdx),%r11
262	xorq	%rdi,%rdi
263
264.Lbeeu_reduction_loop:
265	movq	%r12,16(%rsp)
266	movq	%r13,24(%rsp)
267	movq	%r14,32(%rsp)
268	movq	%r15,40(%rsp)
269	movq	%rbp,48(%rsp)
270
271
272	subq	%r8,%r12
273	sbbq	%r9,%r13
274	sbbq	%r10,%r14
275	sbbq	%r11,%r15
276	sbbq	$0,%rbp
277
278
279	cmovcq	16(%rsp),%r12
280	cmovcq	24(%rsp),%r13
281	cmovcq	32(%rsp),%r14
282	cmovcq	40(%rsp),%r15
283	jnc	.Lbeeu_reduction_loop
284
285
286	subq	%r12,%r8
287	sbbq	%r13,%r9
288	sbbq	%r14,%r10
289	sbbq	%r15,%r11
290
291.Lbeeu_save:
292
293	movq	0(%rsp),%rdi
294
295	movq	%r8,0(%rdi)
296	movq	%r9,8(%rdi)
297	movq	%r10,16(%rdi)
298	movq	%r11,24(%rdi)
299
300
301	movq	$1,%rax
302	jmp	.Lbeeu_finish
303
304.Lbeeu_err:
305
306	xorq	%rax,%rax
307
308.Lbeeu_finish:
309	addq	$80,%rsp
310.cfi_adjust_cfa_offset	-80
311	popq	%rsi
312.cfi_adjust_cfa_offset	-8
313.cfi_restore	rsi
314	popq	%rbx
315.cfi_adjust_cfa_offset	-8
316.cfi_restore	rbx
317	popq	%r15
318.cfi_adjust_cfa_offset	-8
319.cfi_restore	r15
320	popq	%r14
321.cfi_adjust_cfa_offset	-8
322.cfi_restore	r14
323	popq	%r13
324.cfi_adjust_cfa_offset	-8
325.cfi_restore	r13
326	popq	%r12
327.cfi_adjust_cfa_offset	-8
328.cfi_restore	r12
329	popq	%rbp
330.cfi_adjust_cfa_offset	-8
331.cfi_restore	rbp
332	ret
333.cfi_endproc
334
335.size	beeu_mod_inverse_vartime, .-beeu_mod_inverse_vartime
336#endif
337