1238405Sjkim	# $FreeBSD$
2238405Sjkim.text
3238405Sjkim
4238405Sjkim.type	_mul_1x1,@function
5238405Sjkim.align	16
6238405Sjkim_mul_1x1:
7238405Sjkim	subq	$128+8,%rsp
8238405Sjkim	movq	$-1,%r9
9238405Sjkim	leaq	(%rax,%rax,1),%rsi
10238405Sjkim	shrq	$3,%r9
11238405Sjkim	leaq	(,%rax,4),%rdi
12238405Sjkim	andq	%rax,%r9
13238405Sjkim	leaq	(,%rax,8),%r12
14238405Sjkim	sarq	$63,%rax
15238405Sjkim	leaq	(%r9,%r9,1),%r10
16238405Sjkim	sarq	$63,%rsi
17238405Sjkim	leaq	(,%r9,4),%r11
18238405Sjkim	andq	%rbp,%rax
19238405Sjkim	sarq	$63,%rdi
20238405Sjkim	movq	%rax,%rdx
21238405Sjkim	shlq	$63,%rax
22238405Sjkim	andq	%rbp,%rsi
23238405Sjkim	shrq	$1,%rdx
24238405Sjkim	movq	%rsi,%rcx
25238405Sjkim	shlq	$62,%rsi
26238405Sjkim	andq	%rbp,%rdi
27238405Sjkim	shrq	$2,%rcx
28238405Sjkim	xorq	%rsi,%rax
29238405Sjkim	movq	%rdi,%rbx
30238405Sjkim	shlq	$61,%rdi
31238405Sjkim	xorq	%rcx,%rdx
32238405Sjkim	shrq	$3,%rbx
33238405Sjkim	xorq	%rdi,%rax
34238405Sjkim	xorq	%rbx,%rdx
35238405Sjkim
36238405Sjkim	movq	%r9,%r13
37238405Sjkim	movq	$0,0(%rsp)
38238405Sjkim	xorq	%r10,%r13
39238405Sjkim	movq	%r9,8(%rsp)
40238405Sjkim	movq	%r11,%r14
41238405Sjkim	movq	%r10,16(%rsp)
42238405Sjkim	xorq	%r12,%r14
43238405Sjkim	movq	%r13,24(%rsp)
44238405Sjkim
45238405Sjkim	xorq	%r11,%r9
46238405Sjkim	movq	%r11,32(%rsp)
47238405Sjkim	xorq	%r11,%r10
48238405Sjkim	movq	%r9,40(%rsp)
49238405Sjkim	xorq	%r11,%r13
50238405Sjkim	movq	%r10,48(%rsp)
51238405Sjkim	xorq	%r14,%r9
52238405Sjkim	movq	%r13,56(%rsp)
53238405Sjkim	xorq	%r14,%r10
54238405Sjkim
55238405Sjkim	movq	%r12,64(%rsp)
56238405Sjkim	xorq	%r14,%r13
57238405Sjkim	movq	%r9,72(%rsp)
58238405Sjkim	xorq	%r11,%r9
59238405Sjkim	movq	%r10,80(%rsp)
60238405Sjkim	xorq	%r11,%r10
61238405Sjkim	movq	%r13,88(%rsp)
62238405Sjkim
63238405Sjkim	xorq	%r11,%r13
64238405Sjkim	movq	%r14,96(%rsp)
65238405Sjkim	movq	%r8,%rsi
66238405Sjkim	movq	%r9,104(%rsp)
67238405Sjkim	andq	%rbp,%rsi
68238405Sjkim	movq	%r10,112(%rsp)
69238405Sjkim	shrq	$4,%rbp
70238405Sjkim	movq	%r13,120(%rsp)
71238405Sjkim	movq	%r8,%rdi
72238405Sjkim	andq	%rbp,%rdi
73238405Sjkim	shrq	$4,%rbp
74238405Sjkim
75238405Sjkim	movq	(%rsp,%rsi,8),%xmm0
76238405Sjkim	movq	%r8,%rsi
77238405Sjkim	andq	%rbp,%rsi
78238405Sjkim	shrq	$4,%rbp
79238405Sjkim	movq	(%rsp,%rdi,8),%rcx
80238405Sjkim	movq	%r8,%rdi
81238405Sjkim	movq	%rcx,%rbx
82238405Sjkim	shlq	$4,%rcx
83238405Sjkim	andq	%rbp,%rdi
84238405Sjkim	movq	(%rsp,%rsi,8),%xmm1
85238405Sjkim	shrq	$60,%rbx
86238405Sjkim	xorq	%rcx,%rax
87238405Sjkim	pslldq	$1,%xmm1
88238405Sjkim	movq	%r8,%rsi
89238405Sjkim	shrq	$4,%rbp
90238405Sjkim	xorq	%rbx,%rdx
91238405Sjkim	andq	%rbp,%rsi
92238405Sjkim	shrq	$4,%rbp
93238405Sjkim	pxor	%xmm1,%xmm0
94238405Sjkim	movq	(%rsp,%rdi,8),%rcx
95238405Sjkim	movq	%r8,%rdi
96238405Sjkim	movq	%rcx,%rbx
97238405Sjkim	shlq	$12,%rcx
98238405Sjkim	andq	%rbp,%rdi
99238405Sjkim	movq	(%rsp,%rsi,8),%xmm1
100238405Sjkim	shrq	$52,%rbx
101238405Sjkim	xorq	%rcx,%rax
102238405Sjkim	pslldq	$2,%xmm1
103238405Sjkim	movq	%r8,%rsi
104238405Sjkim	shrq	$4,%rbp
105238405Sjkim	xorq	%rbx,%rdx
106238405Sjkim	andq	%rbp,%rsi
107238405Sjkim	shrq	$4,%rbp
108238405Sjkim	pxor	%xmm1,%xmm0
109238405Sjkim	movq	(%rsp,%rdi,8),%rcx
110238405Sjkim	movq	%r8,%rdi
111238405Sjkim	movq	%rcx,%rbx
112238405Sjkim	shlq	$20,%rcx
113238405Sjkim	andq	%rbp,%rdi
114238405Sjkim	movq	(%rsp,%rsi,8),%xmm1
115238405Sjkim	shrq	$44,%rbx
116238405Sjkim	xorq	%rcx,%rax
117238405Sjkim	pslldq	$3,%xmm1
118238405Sjkim	movq	%r8,%rsi
119238405Sjkim	shrq	$4,%rbp
120238405Sjkim	xorq	%rbx,%rdx
121238405Sjkim	andq	%rbp,%rsi
122238405Sjkim	shrq	$4,%rbp
123238405Sjkim	pxor	%xmm1,%xmm0
124238405Sjkim	movq	(%rsp,%rdi,8),%rcx
125238405Sjkim	movq	%r8,%rdi
126238405Sjkim	movq	%rcx,%rbx
127238405Sjkim	shlq	$28,%rcx
128238405Sjkim	andq	%rbp,%rdi
129238405Sjkim	movq	(%rsp,%rsi,8),%xmm1
130238405Sjkim	shrq	$36,%rbx
131238405Sjkim	xorq	%rcx,%rax
132238405Sjkim	pslldq	$4,%xmm1
133238405Sjkim	movq	%r8,%rsi
134238405Sjkim	shrq	$4,%rbp
135238405Sjkim	xorq	%rbx,%rdx
136238405Sjkim	andq	%rbp,%rsi
137238405Sjkim	shrq	$4,%rbp
138238405Sjkim	pxor	%xmm1,%xmm0
139238405Sjkim	movq	(%rsp,%rdi,8),%rcx
140238405Sjkim	movq	%r8,%rdi
141238405Sjkim	movq	%rcx,%rbx
142238405Sjkim	shlq	$36,%rcx
143238405Sjkim	andq	%rbp,%rdi
144238405Sjkim	movq	(%rsp,%rsi,8),%xmm1
145238405Sjkim	shrq	$28,%rbx
146238405Sjkim	xorq	%rcx,%rax
147238405Sjkim	pslldq	$5,%xmm1
148238405Sjkim	movq	%r8,%rsi
149238405Sjkim	shrq	$4,%rbp
150238405Sjkim	xorq	%rbx,%rdx
151238405Sjkim	andq	%rbp,%rsi
152238405Sjkim	shrq	$4,%rbp
153238405Sjkim	pxor	%xmm1,%xmm0
154238405Sjkim	movq	(%rsp,%rdi,8),%rcx
155238405Sjkim	movq	%r8,%rdi
156238405Sjkim	movq	%rcx,%rbx
157238405Sjkim	shlq	$44,%rcx
158238405Sjkim	andq	%rbp,%rdi
159238405Sjkim	movq	(%rsp,%rsi,8),%xmm1
160238405Sjkim	shrq	$20,%rbx
161238405Sjkim	xorq	%rcx,%rax
162238405Sjkim	pslldq	$6,%xmm1
163238405Sjkim	movq	%r8,%rsi
164238405Sjkim	shrq	$4,%rbp
165238405Sjkim	xorq	%rbx,%rdx
166238405Sjkim	andq	%rbp,%rsi
167238405Sjkim	shrq	$4,%rbp
168238405Sjkim	pxor	%xmm1,%xmm0
169238405Sjkim	movq	(%rsp,%rdi,8),%rcx
170238405Sjkim	movq	%r8,%rdi
171238405Sjkim	movq	%rcx,%rbx
172238405Sjkim	shlq	$52,%rcx
173238405Sjkim	andq	%rbp,%rdi
174238405Sjkim	movq	(%rsp,%rsi,8),%xmm1
175238405Sjkim	shrq	$12,%rbx
176238405Sjkim	xorq	%rcx,%rax
177238405Sjkim	pslldq	$7,%xmm1
178238405Sjkim	movq	%r8,%rsi
179238405Sjkim	shrq	$4,%rbp
180238405Sjkim	xorq	%rbx,%rdx
181238405Sjkim	andq	%rbp,%rsi
182238405Sjkim	shrq	$4,%rbp
183238405Sjkim	pxor	%xmm1,%xmm0
184238405Sjkim	movq	(%rsp,%rdi,8),%rcx
185238405Sjkim	movq	%rcx,%rbx
186238405Sjkim	shlq	$60,%rcx
187238405Sjkim.byte	102,72,15,126,198
188238405Sjkim	shrq	$4,%rbx
189238405Sjkim	xorq	%rcx,%rax
190238405Sjkim	psrldq	$8,%xmm0
191238405Sjkim	xorq	%rbx,%rdx
192238405Sjkim.byte	102,72,15,126,199
193238405Sjkim	xorq	%rsi,%rax
194238405Sjkim	xorq	%rdi,%rdx
195238405Sjkim
196238405Sjkim	addq	$128+8,%rsp
197238405Sjkim	.byte	0xf3,0xc3
198238405Sjkim.Lend_mul_1x1:
199238405Sjkim.size	_mul_1x1,.-_mul_1x1
200238405Sjkim
201238405Sjkim.globl	bn_GF2m_mul_2x2
202238405Sjkim.type	bn_GF2m_mul_2x2,@function
203238405Sjkim.align	16
204238405Sjkimbn_GF2m_mul_2x2:
205238405Sjkim	movq	OPENSSL_ia32cap_P(%rip),%rax
206238405Sjkim	btq	$33,%rax
207238405Sjkim	jnc	.Lvanilla_mul_2x2
208238405Sjkim
209238405Sjkim.byte	102,72,15,110,198
210238405Sjkim.byte	102,72,15,110,201
211238405Sjkim.byte	102,72,15,110,210
212238405Sjkim.byte	102,73,15,110,216
213238405Sjkim	movdqa	%xmm0,%xmm4
214238405Sjkim	movdqa	%xmm1,%xmm5
215238405Sjkim.byte	102,15,58,68,193,0
216238405Sjkim	pxor	%xmm2,%xmm4
217238405Sjkim	pxor	%xmm3,%xmm5
218238405Sjkim.byte	102,15,58,68,211,0
219238405Sjkim.byte	102,15,58,68,229,0
220238405Sjkim	xorps	%xmm0,%xmm4
221238405Sjkim	xorps	%xmm2,%xmm4
222238405Sjkim	movdqa	%xmm4,%xmm5
223238405Sjkim	pslldq	$8,%xmm4
224238405Sjkim	psrldq	$8,%xmm5
225238405Sjkim	pxor	%xmm4,%xmm2
226238405Sjkim	pxor	%xmm5,%xmm0
227238405Sjkim	movdqu	%xmm2,0(%rdi)
228238405Sjkim	movdqu	%xmm0,16(%rdi)
229238405Sjkim	.byte	0xf3,0xc3
230238405Sjkim
231238405Sjkim.align	16
232238405Sjkim.Lvanilla_mul_2x2:
233238405Sjkim	leaq	-136(%rsp),%rsp
234238405Sjkim	movq	%r14,80(%rsp)
235238405Sjkim	movq	%r13,88(%rsp)
236238405Sjkim	movq	%r12,96(%rsp)
237238405Sjkim	movq	%rbp,104(%rsp)
238238405Sjkim	movq	%rbx,112(%rsp)
239238405Sjkim.Lbody_mul_2x2:
240238405Sjkim	movq	%rdi,32(%rsp)
241238405Sjkim	movq	%rsi,40(%rsp)
242238405Sjkim	movq	%rdx,48(%rsp)
243238405Sjkim	movq	%rcx,56(%rsp)
244238405Sjkim	movq	%r8,64(%rsp)
245238405Sjkim
246238405Sjkim	movq	$15,%r8
247238405Sjkim	movq	%rsi,%rax
248238405Sjkim	movq	%rcx,%rbp
249238405Sjkim	call	_mul_1x1
250238405Sjkim	movq	%rax,16(%rsp)
251238405Sjkim	movq	%rdx,24(%rsp)
252238405Sjkim
253238405Sjkim	movq	48(%rsp),%rax
254238405Sjkim	movq	64(%rsp),%rbp
255238405Sjkim	call	_mul_1x1
256238405Sjkim	movq	%rax,0(%rsp)
257238405Sjkim	movq	%rdx,8(%rsp)
258238405Sjkim
259238405Sjkim	movq	40(%rsp),%rax
260238405Sjkim	movq	56(%rsp),%rbp
261238405Sjkim	xorq	48(%rsp),%rax
262238405Sjkim	xorq	64(%rsp),%rbp
263238405Sjkim	call	_mul_1x1
264238405Sjkim	movq	0(%rsp),%rbx
265238405Sjkim	movq	8(%rsp),%rcx
266238405Sjkim	movq	16(%rsp),%rdi
267238405Sjkim	movq	24(%rsp),%rsi
268238405Sjkim	movq	32(%rsp),%rbp
269238405Sjkim
270238405Sjkim	xorq	%rdx,%rax
271238405Sjkim	xorq	%rcx,%rdx
272238405Sjkim	xorq	%rbx,%rax
273238405Sjkim	movq	%rbx,0(%rbp)
274238405Sjkim	xorq	%rdi,%rdx
275238405Sjkim	movq	%rsi,24(%rbp)
276238405Sjkim	xorq	%rsi,%rax
277238405Sjkim	xorq	%rsi,%rdx
278238405Sjkim	xorq	%rdx,%rax
279238405Sjkim	movq	%rdx,16(%rbp)
280238405Sjkim	movq	%rax,8(%rbp)
281238405Sjkim
282238405Sjkim	movq	80(%rsp),%r14
283238405Sjkim	movq	88(%rsp),%r13
284238405Sjkim	movq	96(%rsp),%r12
285238405Sjkim	movq	104(%rsp),%rbp
286238405Sjkim	movq	112(%rsp),%rbx
287238405Sjkim	leaq	136(%rsp),%rsp
288238405Sjkim	.byte	0xf3,0xc3
289238405Sjkim.Lend_mul_2x2:
290238405Sjkim.size	bn_GF2m_mul_2x2,.-bn_GF2m_mul_2x2
291238405Sjkim.byte	71,70,40,50,94,109,41,32,77,117,108,116,105,112,108,105,99,97,116,105,111,110,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
292238405Sjkim.align	16
293