• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 "ring_core_generated/prefix_symbols_nasm.inc"
5%ifidn __OUTPUT_FORMAT__,obj
6section	code	use32 class=code align=64
7%elifidn __OUTPUT_FORMAT__,win32
8$@feat.00 equ 1
9section	.text	code align=64
10%else
11section	.text	code
12%endif
13;extern	_OPENSSL_ia32cap_P
14global	_bn_mul_mont
15align	16
16_bn_mul_mont:
17L$_bn_mul_mont_begin:
18	push	ebp
19	push	ebx
20	push	esi
21	push	edi
22	xor	eax,eax
23	mov	edi,DWORD [40+esp]
24	lea	esi,[20+esp]
25	lea	edx,[24+esp]
26	add	edi,2
27	neg	edi
28	lea	ebp,[edi*4+esp-32]
29	neg	edi
30	mov	eax,ebp
31	sub	eax,edx
32	and	eax,2047
33	sub	ebp,eax
34	xor	edx,ebp
35	and	edx,2048
36	xor	edx,2048
37	sub	ebp,edx
38	and	ebp,-64
39	mov	eax,esp
40	sub	eax,ebp
41	and	eax,-4096
42	mov	edx,esp
43	lea	esp,[eax*1+ebp]
44	mov	eax,DWORD [esp]
45	cmp	esp,ebp
46	ja	NEAR L$000page_walk
47	jmp	NEAR L$001page_walk_done
48align	16
49L$000page_walk:
50	lea	esp,[esp-4096]
51	mov	eax,DWORD [esp]
52	cmp	esp,ebp
53	ja	NEAR L$000page_walk
54L$001page_walk_done:
55	mov	eax,DWORD [esi]
56	mov	ebx,DWORD [4+esi]
57	mov	ecx,DWORD [8+esi]
58	mov	ebp,DWORD [12+esi]
59	mov	esi,DWORD [16+esi]
60	mov	esi,DWORD [esi]
61	mov	DWORD [4+esp],eax
62	mov	DWORD [8+esp],ebx
63	mov	DWORD [12+esp],ecx
64	mov	DWORD [16+esp],ebp
65	mov	DWORD [20+esp],esi
66	lea	ebx,[edi-3]
67	mov	DWORD [24+esp],edx
68	lea	eax,[_OPENSSL_ia32cap_P]
69	bt	DWORD [eax],26
70	mov	eax,-1
71	movd	mm7,eax
72	mov	esi,DWORD [8+esp]
73	mov	edi,DWORD [12+esp]
74	mov	ebp,DWORD [16+esp]
75	xor	edx,edx
76	xor	ecx,ecx
77	movd	mm4,DWORD [edi]
78	movd	mm5,DWORD [esi]
79	movd	mm3,DWORD [ebp]
80	pmuludq	mm5,mm4
81	movq	mm2,mm5
82	movq	mm0,mm5
83	pand	mm0,mm7
84	pmuludq	mm5,[20+esp]
85	pmuludq	mm3,mm5
86	paddq	mm3,mm0
87	movd	mm1,DWORD [4+ebp]
88	movd	mm0,DWORD [4+esi]
89	psrlq	mm2,32
90	psrlq	mm3,32
91	inc	ecx
92align	16
93L$0021st:
94	pmuludq	mm0,mm4
95	pmuludq	mm1,mm5
96	paddq	mm2,mm0
97	paddq	mm3,mm1
98	movq	mm0,mm2
99	pand	mm0,mm7
100	movd	mm1,DWORD [4+ecx*4+ebp]
101	paddq	mm3,mm0
102	movd	mm0,DWORD [4+ecx*4+esi]
103	psrlq	mm2,32
104	movd	DWORD [28+ecx*4+esp],mm3
105	psrlq	mm3,32
106	lea	ecx,[1+ecx]
107	cmp	ecx,ebx
108	jl	NEAR L$0021st
109	pmuludq	mm0,mm4
110	pmuludq	mm1,mm5
111	paddq	mm2,mm0
112	paddq	mm3,mm1
113	movq	mm0,mm2
114	pand	mm0,mm7
115	paddq	mm3,mm0
116	movd	DWORD [28+ecx*4+esp],mm3
117	psrlq	mm2,32
118	psrlq	mm3,32
119	paddq	mm3,mm2
120	movq	[32+ebx*4+esp],mm3
121	inc	edx
122L$003outer:
123	xor	ecx,ecx
124	movd	mm4,DWORD [edx*4+edi]
125	movd	mm5,DWORD [esi]
126	movd	mm6,DWORD [32+esp]
127	movd	mm3,DWORD [ebp]
128	pmuludq	mm5,mm4
129	paddq	mm5,mm6
130	movq	mm0,mm5
131	movq	mm2,mm5
132	pand	mm0,mm7
133	pmuludq	mm5,[20+esp]
134	pmuludq	mm3,mm5
135	paddq	mm3,mm0
136	movd	mm6,DWORD [36+esp]
137	movd	mm1,DWORD [4+ebp]
138	movd	mm0,DWORD [4+esi]
139	psrlq	mm2,32
140	psrlq	mm3,32
141	paddq	mm2,mm6
142	inc	ecx
143	dec	ebx
144L$004inner:
145	pmuludq	mm0,mm4
146	pmuludq	mm1,mm5
147	paddq	mm2,mm0
148	paddq	mm3,mm1
149	movq	mm0,mm2
150	movd	mm6,DWORD [36+ecx*4+esp]
151	pand	mm0,mm7
152	movd	mm1,DWORD [4+ecx*4+ebp]
153	paddq	mm3,mm0
154	movd	mm0,DWORD [4+ecx*4+esi]
155	psrlq	mm2,32
156	movd	DWORD [28+ecx*4+esp],mm3
157	psrlq	mm3,32
158	paddq	mm2,mm6
159	dec	ebx
160	lea	ecx,[1+ecx]
161	jnz	NEAR L$004inner
162	mov	ebx,ecx
163	pmuludq	mm0,mm4
164	pmuludq	mm1,mm5
165	paddq	mm2,mm0
166	paddq	mm3,mm1
167	movq	mm0,mm2
168	pand	mm0,mm7
169	paddq	mm3,mm0
170	movd	DWORD [28+ecx*4+esp],mm3
171	psrlq	mm2,32
172	psrlq	mm3,32
173	movd	mm6,DWORD [36+ebx*4+esp]
174	paddq	mm3,mm2
175	paddq	mm3,mm6
176	movq	[32+ebx*4+esp],mm3
177	lea	edx,[1+edx]
178	cmp	edx,ebx
179	jle	NEAR L$003outer
180	emms
181align	16
182L$005common_tail:
183	mov	ebp,DWORD [16+esp]
184	mov	edi,DWORD [4+esp]
185	lea	esi,[32+esp]
186	mov	eax,DWORD [esi]
187	mov	ecx,ebx
188	xor	edx,edx
189align	16
190L$006sub:
191	sbb	eax,DWORD [edx*4+ebp]
192	mov	DWORD [edx*4+edi],eax
193	dec	ecx
194	mov	eax,DWORD [4+edx*4+esi]
195	lea	edx,[1+edx]
196	jge	NEAR L$006sub
197	sbb	eax,0
198	mov	edx,-1
199	xor	edx,eax
200	jmp	NEAR L$007copy
201align	16
202L$007copy:
203	mov	esi,DWORD [32+ebx*4+esp]
204	mov	ebp,DWORD [ebx*4+edi]
205	mov	DWORD [32+ebx*4+esp],ecx
206	and	esi,eax
207	and	ebp,edx
208	or	ebp,esi
209	mov	DWORD [ebx*4+edi],ebp
210	dec	ebx
211	jge	NEAR L$007copy
212	mov	esp,DWORD [24+esp]
213	mov	eax,1
214	pop	edi
215	pop	esi
216	pop	ebx
217	pop	ebp
218	ret
219db	77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105
220db	112,108,105,99,97,116,105,111,110,32,102,111,114,32,120,56
221db	54,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121
222db	32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46
223db	111,114,103,62,0
224segment	.bss
225common	_OPENSSL_ia32cap_P 16
226