xref: /freebsd/sys/crypto/openssl/amd64/e_padlock-x86_64.S (revision c0855eaa3ee9614804b6bd6a255aa9f71e095f43)
1bc3d5698SJohn Baldwin/* Do not modify. This file is auto-generated from e_padlock-x86_64.pl. */
2bc3d5698SJohn Baldwin.text
3bc3d5698SJohn Baldwin.globl	padlock_capability
4bc3d5698SJohn Baldwin.type	padlock_capability,@function
5bc3d5698SJohn Baldwin.align	16
6bc3d5698SJohn Baldwinpadlock_capability:
7bc3d5698SJohn Baldwin	movq	%rbx,%r8
8bc3d5698SJohn Baldwin	xorl	%eax,%eax
9bc3d5698SJohn Baldwin	cpuid
10bc3d5698SJohn Baldwin	xorl	%eax,%eax
11bc3d5698SJohn Baldwin	cmpl	$0x746e6543,%ebx
12bc3d5698SJohn Baldwin	jne	.Lzhaoxin
13bc3d5698SJohn Baldwin	cmpl	$0x48727561,%edx
14bc3d5698SJohn Baldwin	jne	.Lnoluck
15bc3d5698SJohn Baldwin	cmpl	$0x736c7561,%ecx
16bc3d5698SJohn Baldwin	jne	.Lnoluck
17bc3d5698SJohn Baldwin	jmp	.LzhaoxinEnd
18bc3d5698SJohn Baldwin.Lzhaoxin:
19bc3d5698SJohn Baldwin	cmpl	$0x68532020,%ebx
20bc3d5698SJohn Baldwin	jne	.Lnoluck
21bc3d5698SJohn Baldwin	cmpl	$0x68676e61,%edx
22bc3d5698SJohn Baldwin	jne	.Lnoluck
23bc3d5698SJohn Baldwin	cmpl	$0x20206961,%ecx
24bc3d5698SJohn Baldwin	jne	.Lnoluck
25bc3d5698SJohn Baldwin.LzhaoxinEnd:
26bc3d5698SJohn Baldwin	movl	$0xC0000000,%eax
27bc3d5698SJohn Baldwin	cpuid
28bc3d5698SJohn Baldwin	movl	%eax,%edx
29bc3d5698SJohn Baldwin	xorl	%eax,%eax
30bc3d5698SJohn Baldwin	cmpl	$0xC0000001,%edx
31bc3d5698SJohn Baldwin	jb	.Lnoluck
32bc3d5698SJohn Baldwin	movl	$0xC0000001,%eax
33bc3d5698SJohn Baldwin	cpuid
34bc3d5698SJohn Baldwin	movl	%edx,%eax
35bc3d5698SJohn Baldwin	andl	$0xffffffef,%eax
36bc3d5698SJohn Baldwin	orl	$0x10,%eax
37bc3d5698SJohn Baldwin.Lnoluck:
38bc3d5698SJohn Baldwin	movq	%r8,%rbx
39bc3d5698SJohn Baldwin	.byte	0xf3,0xc3
40bc3d5698SJohn Baldwin.size	padlock_capability,.-padlock_capability
41bc3d5698SJohn Baldwin
42bc3d5698SJohn Baldwin.globl	padlock_key_bswap
43bc3d5698SJohn Baldwin.type	padlock_key_bswap,@function
44bc3d5698SJohn Baldwin.align	16
45bc3d5698SJohn Baldwinpadlock_key_bswap:
46bc3d5698SJohn Baldwin	movl	240(%rdi),%edx
47f1cf4900SJung-uk Kim	incl	%edx
48f1cf4900SJung-uk Kim	shll	$2,%edx
49bc3d5698SJohn Baldwin.Lbswap_loop:
50bc3d5698SJohn Baldwin	movl	(%rdi),%eax
51bc3d5698SJohn Baldwin	bswapl	%eax
52bc3d5698SJohn Baldwin	movl	%eax,(%rdi)
53bc3d5698SJohn Baldwin	leaq	4(%rdi),%rdi
54bc3d5698SJohn Baldwin	subl	$1,%edx
55bc3d5698SJohn Baldwin	jnz	.Lbswap_loop
56bc3d5698SJohn Baldwin	.byte	0xf3,0xc3
57bc3d5698SJohn Baldwin.size	padlock_key_bswap,.-padlock_key_bswap
58bc3d5698SJohn Baldwin
59bc3d5698SJohn Baldwin.globl	padlock_verify_context
60bc3d5698SJohn Baldwin.type	padlock_verify_context,@function
61bc3d5698SJohn Baldwin.align	16
62bc3d5698SJohn Baldwinpadlock_verify_context:
63bc3d5698SJohn Baldwin	movq	%rdi,%rdx
64bc3d5698SJohn Baldwin	pushf
65bc3d5698SJohn Baldwin	leaq	.Lpadlock_saved_context(%rip),%rax
66bc3d5698SJohn Baldwin	call	_padlock_verify_ctx
67bc3d5698SJohn Baldwin	leaq	8(%rsp),%rsp
68bc3d5698SJohn Baldwin	.byte	0xf3,0xc3
69bc3d5698SJohn Baldwin.size	padlock_verify_context,.-padlock_verify_context
70bc3d5698SJohn Baldwin
71bc3d5698SJohn Baldwin.type	_padlock_verify_ctx,@function
72bc3d5698SJohn Baldwin.align	16
73bc3d5698SJohn Baldwin_padlock_verify_ctx:
74bc3d5698SJohn Baldwin	movq	8(%rsp),%r8
75bc3d5698SJohn Baldwin	btq	$30,%r8
76bc3d5698SJohn Baldwin	jnc	.Lverified
77bc3d5698SJohn Baldwin	cmpq	(%rax),%rdx
78bc3d5698SJohn Baldwin	je	.Lverified
79bc3d5698SJohn Baldwin	pushf
80bc3d5698SJohn Baldwin	popf
81bc3d5698SJohn Baldwin.Lverified:
82bc3d5698SJohn Baldwin	movq	%rdx,(%rax)
83bc3d5698SJohn Baldwin	.byte	0xf3,0xc3
84bc3d5698SJohn Baldwin.size	_padlock_verify_ctx,.-_padlock_verify_ctx
85bc3d5698SJohn Baldwin
86bc3d5698SJohn Baldwin.globl	padlock_reload_key
87bc3d5698SJohn Baldwin.type	padlock_reload_key,@function
88bc3d5698SJohn Baldwin.align	16
89bc3d5698SJohn Baldwinpadlock_reload_key:
90bc3d5698SJohn Baldwin	pushf
91bc3d5698SJohn Baldwin	popf
92bc3d5698SJohn Baldwin	.byte	0xf3,0xc3
93bc3d5698SJohn Baldwin.size	padlock_reload_key,.-padlock_reload_key
94bc3d5698SJohn Baldwin
95bc3d5698SJohn Baldwin.globl	padlock_aes_block
96bc3d5698SJohn Baldwin.type	padlock_aes_block,@function
97bc3d5698SJohn Baldwin.align	16
98bc3d5698SJohn Baldwinpadlock_aes_block:
99bc3d5698SJohn Baldwin	movq	%rbx,%r8
100bc3d5698SJohn Baldwin	movq	$1,%rcx
101bc3d5698SJohn Baldwin	leaq	32(%rdx),%rbx
102bc3d5698SJohn Baldwin	leaq	16(%rdx),%rdx
103bc3d5698SJohn Baldwin.byte	0xf3,0x0f,0xa7,0xc8
104bc3d5698SJohn Baldwin	movq	%r8,%rbx
105bc3d5698SJohn Baldwin	.byte	0xf3,0xc3
106bc3d5698SJohn Baldwin.size	padlock_aes_block,.-padlock_aes_block
107bc3d5698SJohn Baldwin
108bc3d5698SJohn Baldwin.globl	padlock_xstore
109bc3d5698SJohn Baldwin.type	padlock_xstore,@function
110bc3d5698SJohn Baldwin.align	16
111bc3d5698SJohn Baldwinpadlock_xstore:
112bc3d5698SJohn Baldwin	movl	%esi,%edx
113bc3d5698SJohn Baldwin.byte	0x0f,0xa7,0xc0
114bc3d5698SJohn Baldwin	.byte	0xf3,0xc3
115bc3d5698SJohn Baldwin.size	padlock_xstore,.-padlock_xstore
116bc3d5698SJohn Baldwin
117bc3d5698SJohn Baldwin.globl	padlock_sha1_oneshot
118bc3d5698SJohn Baldwin.type	padlock_sha1_oneshot,@function
119bc3d5698SJohn Baldwin.align	16
120bc3d5698SJohn Baldwinpadlock_sha1_oneshot:
121bc3d5698SJohn Baldwin	movq	%rdx,%rcx
122bc3d5698SJohn Baldwin	movq	%rdi,%rdx
123bc3d5698SJohn Baldwin	movups	(%rdi),%xmm0
124bc3d5698SJohn Baldwin	subq	$128+8,%rsp
125bc3d5698SJohn Baldwin	movl	16(%rdi),%eax
126bc3d5698SJohn Baldwin	movaps	%xmm0,(%rsp)
127bc3d5698SJohn Baldwin	movq	%rsp,%rdi
128bc3d5698SJohn Baldwin	movl	%eax,16(%rsp)
129bc3d5698SJohn Baldwin	xorq	%rax,%rax
130bc3d5698SJohn Baldwin.byte	0xf3,0x0f,0xa6,0xc8
131bc3d5698SJohn Baldwin	movaps	(%rsp),%xmm0
132bc3d5698SJohn Baldwin	movl	16(%rsp),%eax
133bc3d5698SJohn Baldwin	addq	$128+8,%rsp
134bc3d5698SJohn Baldwin	movups	%xmm0,(%rdx)
135bc3d5698SJohn Baldwin	movl	%eax,16(%rdx)
136bc3d5698SJohn Baldwin	.byte	0xf3,0xc3
137bc3d5698SJohn Baldwin.size	padlock_sha1_oneshot,.-padlock_sha1_oneshot
138bc3d5698SJohn Baldwin
139bc3d5698SJohn Baldwin.globl	padlock_sha1_blocks
140bc3d5698SJohn Baldwin.type	padlock_sha1_blocks,@function
141bc3d5698SJohn Baldwin.align	16
142bc3d5698SJohn Baldwinpadlock_sha1_blocks:
143bc3d5698SJohn Baldwin	movq	%rdx,%rcx
144bc3d5698SJohn Baldwin	movq	%rdi,%rdx
145bc3d5698SJohn Baldwin	movups	(%rdi),%xmm0
146bc3d5698SJohn Baldwin	subq	$128+8,%rsp
147bc3d5698SJohn Baldwin	movl	16(%rdi),%eax
148bc3d5698SJohn Baldwin	movaps	%xmm0,(%rsp)
149bc3d5698SJohn Baldwin	movq	%rsp,%rdi
150bc3d5698SJohn Baldwin	movl	%eax,16(%rsp)
151bc3d5698SJohn Baldwin	movq	$-1,%rax
152bc3d5698SJohn Baldwin.byte	0xf3,0x0f,0xa6,0xc8
153bc3d5698SJohn Baldwin	movaps	(%rsp),%xmm0
154bc3d5698SJohn Baldwin	movl	16(%rsp),%eax
155bc3d5698SJohn Baldwin	addq	$128+8,%rsp
156bc3d5698SJohn Baldwin	movups	%xmm0,(%rdx)
157bc3d5698SJohn Baldwin	movl	%eax,16(%rdx)
158bc3d5698SJohn Baldwin	.byte	0xf3,0xc3
159bc3d5698SJohn Baldwin.size	padlock_sha1_blocks,.-padlock_sha1_blocks
160bc3d5698SJohn Baldwin
161bc3d5698SJohn Baldwin.globl	padlock_sha256_oneshot
162bc3d5698SJohn Baldwin.type	padlock_sha256_oneshot,@function
163bc3d5698SJohn Baldwin.align	16
164bc3d5698SJohn Baldwinpadlock_sha256_oneshot:
165bc3d5698SJohn Baldwin	movq	%rdx,%rcx
166bc3d5698SJohn Baldwin	movq	%rdi,%rdx
167bc3d5698SJohn Baldwin	movups	(%rdi),%xmm0
168bc3d5698SJohn Baldwin	subq	$128+8,%rsp
169bc3d5698SJohn Baldwin	movups	16(%rdi),%xmm1
170bc3d5698SJohn Baldwin	movaps	%xmm0,(%rsp)
171bc3d5698SJohn Baldwin	movq	%rsp,%rdi
172bc3d5698SJohn Baldwin	movaps	%xmm1,16(%rsp)
173bc3d5698SJohn Baldwin	xorq	%rax,%rax
174bc3d5698SJohn Baldwin.byte	0xf3,0x0f,0xa6,0xd0
175bc3d5698SJohn Baldwin	movaps	(%rsp),%xmm0
176bc3d5698SJohn Baldwin	movaps	16(%rsp),%xmm1
177bc3d5698SJohn Baldwin	addq	$128+8,%rsp
178bc3d5698SJohn Baldwin	movups	%xmm0,(%rdx)
179bc3d5698SJohn Baldwin	movups	%xmm1,16(%rdx)
180bc3d5698SJohn Baldwin	.byte	0xf3,0xc3
181bc3d5698SJohn Baldwin.size	padlock_sha256_oneshot,.-padlock_sha256_oneshot
182bc3d5698SJohn Baldwin
183bc3d5698SJohn Baldwin.globl	padlock_sha256_blocks
184bc3d5698SJohn Baldwin.type	padlock_sha256_blocks,@function
185bc3d5698SJohn Baldwin.align	16
186bc3d5698SJohn Baldwinpadlock_sha256_blocks:
187bc3d5698SJohn Baldwin	movq	%rdx,%rcx
188bc3d5698SJohn Baldwin	movq	%rdi,%rdx
189bc3d5698SJohn Baldwin	movups	(%rdi),%xmm0
190bc3d5698SJohn Baldwin	subq	$128+8,%rsp
191bc3d5698SJohn Baldwin	movups	16(%rdi),%xmm1
192bc3d5698SJohn Baldwin	movaps	%xmm0,(%rsp)
193bc3d5698SJohn Baldwin	movq	%rsp,%rdi
194bc3d5698SJohn Baldwin	movaps	%xmm1,16(%rsp)
195bc3d5698SJohn Baldwin	movq	$-1,%rax
196bc3d5698SJohn Baldwin.byte	0xf3,0x0f,0xa6,0xd0
197bc3d5698SJohn Baldwin	movaps	(%rsp),%xmm0
198bc3d5698SJohn Baldwin	movaps	16(%rsp),%xmm1
199bc3d5698SJohn Baldwin	addq	$128+8,%rsp
200bc3d5698SJohn Baldwin	movups	%xmm0,(%rdx)
201bc3d5698SJohn Baldwin	movups	%xmm1,16(%rdx)
202bc3d5698SJohn Baldwin	.byte	0xf3,0xc3
203bc3d5698SJohn Baldwin.size	padlock_sha256_blocks,.-padlock_sha256_blocks
204bc3d5698SJohn Baldwin
205bc3d5698SJohn Baldwin.globl	padlock_sha512_blocks
206bc3d5698SJohn Baldwin.type	padlock_sha512_blocks,@function
207bc3d5698SJohn Baldwin.align	16
208bc3d5698SJohn Baldwinpadlock_sha512_blocks:
209bc3d5698SJohn Baldwin	movq	%rdx,%rcx
210bc3d5698SJohn Baldwin	movq	%rdi,%rdx
211bc3d5698SJohn Baldwin	movups	(%rdi),%xmm0
212bc3d5698SJohn Baldwin	subq	$128+8,%rsp
213bc3d5698SJohn Baldwin	movups	16(%rdi),%xmm1
214bc3d5698SJohn Baldwin	movups	32(%rdi),%xmm2
215bc3d5698SJohn Baldwin	movups	48(%rdi),%xmm3
216bc3d5698SJohn Baldwin	movaps	%xmm0,(%rsp)
217bc3d5698SJohn Baldwin	movq	%rsp,%rdi
218bc3d5698SJohn Baldwin	movaps	%xmm1,16(%rsp)
219bc3d5698SJohn Baldwin	movaps	%xmm2,32(%rsp)
220bc3d5698SJohn Baldwin	movaps	%xmm3,48(%rsp)
221bc3d5698SJohn Baldwin.byte	0xf3,0x0f,0xa6,0xe0
222bc3d5698SJohn Baldwin	movaps	(%rsp),%xmm0
223bc3d5698SJohn Baldwin	movaps	16(%rsp),%xmm1
224bc3d5698SJohn Baldwin	movaps	32(%rsp),%xmm2
225bc3d5698SJohn Baldwin	movaps	48(%rsp),%xmm3
226bc3d5698SJohn Baldwin	addq	$128+8,%rsp
227bc3d5698SJohn Baldwin	movups	%xmm0,(%rdx)
228bc3d5698SJohn Baldwin	movups	%xmm1,16(%rdx)
229bc3d5698SJohn Baldwin	movups	%xmm2,32(%rdx)
230bc3d5698SJohn Baldwin	movups	%xmm3,48(%rdx)
231bc3d5698SJohn Baldwin	.byte	0xf3,0xc3
232bc3d5698SJohn Baldwin.size	padlock_sha512_blocks,.-padlock_sha512_blocks
233bc3d5698SJohn Baldwin.globl	padlock_ecb_encrypt
234bc3d5698SJohn Baldwin.type	padlock_ecb_encrypt,@function
235bc3d5698SJohn Baldwin.align	16
236bc3d5698SJohn Baldwinpadlock_ecb_encrypt:
237bc3d5698SJohn Baldwin	pushq	%rbp
238bc3d5698SJohn Baldwin	pushq	%rbx
239bc3d5698SJohn Baldwin
240bc3d5698SJohn Baldwin	xorl	%eax,%eax
241bc3d5698SJohn Baldwin	testq	$15,%rdx
242bc3d5698SJohn Baldwin	jnz	.Lecb_abort
243bc3d5698SJohn Baldwin	testq	$15,%rcx
244bc3d5698SJohn Baldwin	jnz	.Lecb_abort
245bc3d5698SJohn Baldwin	leaq	.Lpadlock_saved_context(%rip),%rax
246bc3d5698SJohn Baldwin	pushf
247bc3d5698SJohn Baldwin	cld
248bc3d5698SJohn Baldwin	call	_padlock_verify_ctx
249bc3d5698SJohn Baldwin	leaq	16(%rdx),%rdx
250bc3d5698SJohn Baldwin	xorl	%eax,%eax
251bc3d5698SJohn Baldwin	xorl	%ebx,%ebx
252bc3d5698SJohn Baldwin	testl	$32,(%rdx)
253bc3d5698SJohn Baldwin	jnz	.Lecb_aligned
254bc3d5698SJohn Baldwin	testq	$0x0f,%rdi
255bc3d5698SJohn Baldwin	setz	%al
256bc3d5698SJohn Baldwin	testq	$0x0f,%rsi
257bc3d5698SJohn Baldwin	setz	%bl
258bc3d5698SJohn Baldwin	testl	%ebx,%eax
259bc3d5698SJohn Baldwin	jnz	.Lecb_aligned
260bc3d5698SJohn Baldwin	negq	%rax
261bc3d5698SJohn Baldwin	movq	$512,%rbx
262bc3d5698SJohn Baldwin	notq	%rax
263bc3d5698SJohn Baldwin	leaq	(%rsp),%rbp
264bc3d5698SJohn Baldwin	cmpq	%rbx,%rcx
265bc3d5698SJohn Baldwin	cmovcq	%rcx,%rbx
266bc3d5698SJohn Baldwin	andq	%rbx,%rax
267bc3d5698SJohn Baldwin	movq	%rcx,%rbx
268bc3d5698SJohn Baldwin	negq	%rax
269bc3d5698SJohn Baldwin	andq	$512-1,%rbx
270bc3d5698SJohn Baldwin	leaq	(%rax,%rbp,1),%rsp
271bc3d5698SJohn Baldwin	movq	$512,%rax
272bc3d5698SJohn Baldwin	cmovzq	%rax,%rbx
273bc3d5698SJohn Baldwin	cmpq	%rbx,%rcx
274bc3d5698SJohn Baldwin	ja	.Lecb_loop
275bc3d5698SJohn Baldwin	movq	%rsi,%rax
276bc3d5698SJohn Baldwin	cmpq	%rsp,%rbp
277bc3d5698SJohn Baldwin	cmoveq	%rdi,%rax
278bc3d5698SJohn Baldwin	addq	%rcx,%rax
279bc3d5698SJohn Baldwin	negq	%rax
280bc3d5698SJohn Baldwin	andq	$0xfff,%rax
281bc3d5698SJohn Baldwin	cmpq	$128,%rax
282bc3d5698SJohn Baldwin	movq	$-128,%rax
283bc3d5698SJohn Baldwin	cmovaeq	%rbx,%rax
284bc3d5698SJohn Baldwin	andq	%rax,%rbx
285bc3d5698SJohn Baldwin	jz	.Lecb_unaligned_tail
286bc3d5698SJohn Baldwin	jmp	.Lecb_loop
287bc3d5698SJohn Baldwin.align	16
288bc3d5698SJohn Baldwin.Lecb_loop:
289bc3d5698SJohn Baldwin	cmpq	%rcx,%rbx
290bc3d5698SJohn Baldwin	cmovaq	%rcx,%rbx
291bc3d5698SJohn Baldwin	movq	%rdi,%r8
292bc3d5698SJohn Baldwin	movq	%rsi,%r9
293bc3d5698SJohn Baldwin	movq	%rcx,%r10
294bc3d5698SJohn Baldwin	movq	%rbx,%rcx
295bc3d5698SJohn Baldwin	movq	%rbx,%r11
296bc3d5698SJohn Baldwin	testq	$0x0f,%rdi
297bc3d5698SJohn Baldwin	cmovnzq	%rsp,%rdi
298bc3d5698SJohn Baldwin	testq	$0x0f,%rsi
299bc3d5698SJohn Baldwin	jz	.Lecb_inp_aligned
300bc3d5698SJohn Baldwin	shrq	$3,%rcx
301bc3d5698SJohn Baldwin.byte	0xf3,0x48,0xa5
302bc3d5698SJohn Baldwin	subq	%rbx,%rdi
303bc3d5698SJohn Baldwin	movq	%rbx,%rcx
304bc3d5698SJohn Baldwin	movq	%rdi,%rsi
305bc3d5698SJohn Baldwin.Lecb_inp_aligned:
306bc3d5698SJohn Baldwin	leaq	-16(%rdx),%rax
307bc3d5698SJohn Baldwin	leaq	16(%rdx),%rbx
308bc3d5698SJohn Baldwin	shrq	$4,%rcx
309bc3d5698SJohn Baldwin.byte	0xf3,0x0f,0xa7,200
310bc3d5698SJohn Baldwin	movq	%r8,%rdi
311bc3d5698SJohn Baldwin	movq	%r11,%rbx
312bc3d5698SJohn Baldwin	testq	$0x0f,%rdi
313bc3d5698SJohn Baldwin	jz	.Lecb_out_aligned
314bc3d5698SJohn Baldwin	movq	%rbx,%rcx
315bc3d5698SJohn Baldwin	leaq	(%rsp),%rsi
316bc3d5698SJohn Baldwin	shrq	$3,%rcx
317bc3d5698SJohn Baldwin.byte	0xf3,0x48,0xa5
318bc3d5698SJohn Baldwin	subq	%rbx,%rdi
319bc3d5698SJohn Baldwin.Lecb_out_aligned:
320bc3d5698SJohn Baldwin	movq	%r9,%rsi
321bc3d5698SJohn Baldwin	movq	%r10,%rcx
322bc3d5698SJohn Baldwin	addq	%rbx,%rdi
323bc3d5698SJohn Baldwin	addq	%rbx,%rsi
324bc3d5698SJohn Baldwin	subq	%rbx,%rcx
325bc3d5698SJohn Baldwin	movq	$512,%rbx
326bc3d5698SJohn Baldwin	jz	.Lecb_break
327bc3d5698SJohn Baldwin	cmpq	%rbx,%rcx
328bc3d5698SJohn Baldwin	jae	.Lecb_loop
329bc3d5698SJohn Baldwin.Lecb_unaligned_tail:
330bc3d5698SJohn Baldwin	xorl	%eax,%eax
331bc3d5698SJohn Baldwin	cmpq	%rsp,%rbp
332bc3d5698SJohn Baldwin	cmoveq	%rcx,%rax
333bc3d5698SJohn Baldwin	movq	%rdi,%r8
334bc3d5698SJohn Baldwin	movq	%rcx,%rbx
335bc3d5698SJohn Baldwin	subq	%rax,%rsp
336bc3d5698SJohn Baldwin	shrq	$3,%rcx
337bc3d5698SJohn Baldwin	leaq	(%rsp),%rdi
338bc3d5698SJohn Baldwin.byte	0xf3,0x48,0xa5
339bc3d5698SJohn Baldwin	movq	%rsp,%rsi
340bc3d5698SJohn Baldwin	movq	%r8,%rdi
341bc3d5698SJohn Baldwin	movq	%rbx,%rcx
342bc3d5698SJohn Baldwin	jmp	.Lecb_loop
343bc3d5698SJohn Baldwin.align	16
344bc3d5698SJohn Baldwin.Lecb_break:
345bc3d5698SJohn Baldwin	cmpq	%rbp,%rsp
346bc3d5698SJohn Baldwin	je	.Lecb_done
347bc3d5698SJohn Baldwin
348bc3d5698SJohn Baldwin	pxor	%xmm0,%xmm0
349bc3d5698SJohn Baldwin	leaq	(%rsp),%rax
350bc3d5698SJohn Baldwin.Lecb_bzero:
351bc3d5698SJohn Baldwin	movaps	%xmm0,(%rax)
352bc3d5698SJohn Baldwin	leaq	16(%rax),%rax
353bc3d5698SJohn Baldwin	cmpq	%rax,%rbp
354bc3d5698SJohn Baldwin	ja	.Lecb_bzero
355bc3d5698SJohn Baldwin
356bc3d5698SJohn Baldwin.Lecb_done:
357bc3d5698SJohn Baldwin	leaq	(%rbp),%rsp
358bc3d5698SJohn Baldwin	jmp	.Lecb_exit
359bc3d5698SJohn Baldwin
360bc3d5698SJohn Baldwin.align	16
361bc3d5698SJohn Baldwin.Lecb_aligned:
362bc3d5698SJohn Baldwin	leaq	(%rsi,%rcx,1),%rbp
363bc3d5698SJohn Baldwin	negq	%rbp
364bc3d5698SJohn Baldwin	andq	$0xfff,%rbp
365bc3d5698SJohn Baldwin	xorl	%eax,%eax
366bc3d5698SJohn Baldwin	cmpq	$128,%rbp
367bc3d5698SJohn Baldwin	movq	$128-1,%rbp
368bc3d5698SJohn Baldwin	cmovaeq	%rax,%rbp
369bc3d5698SJohn Baldwin	andq	%rcx,%rbp
370bc3d5698SJohn Baldwin	subq	%rbp,%rcx
371bc3d5698SJohn Baldwin	jz	.Lecb_aligned_tail
372bc3d5698SJohn Baldwin	leaq	-16(%rdx),%rax
373bc3d5698SJohn Baldwin	leaq	16(%rdx),%rbx
374bc3d5698SJohn Baldwin	shrq	$4,%rcx
375bc3d5698SJohn Baldwin.byte	0xf3,0x0f,0xa7,200
376bc3d5698SJohn Baldwin	testq	%rbp,%rbp
377bc3d5698SJohn Baldwin	jz	.Lecb_exit
378bc3d5698SJohn Baldwin
379bc3d5698SJohn Baldwin.Lecb_aligned_tail:
380bc3d5698SJohn Baldwin	movq	%rdi,%r8
381bc3d5698SJohn Baldwin	movq	%rbp,%rbx
382bc3d5698SJohn Baldwin	movq	%rbp,%rcx
383bc3d5698SJohn Baldwin	leaq	(%rsp),%rbp
384bc3d5698SJohn Baldwin	subq	%rcx,%rsp
385bc3d5698SJohn Baldwin	shrq	$3,%rcx
386bc3d5698SJohn Baldwin	leaq	(%rsp),%rdi
387bc3d5698SJohn Baldwin.byte	0xf3,0x48,0xa5
388bc3d5698SJohn Baldwin	leaq	(%r8),%rdi
389bc3d5698SJohn Baldwin	leaq	(%rsp),%rsi
390bc3d5698SJohn Baldwin	movq	%rbx,%rcx
391bc3d5698SJohn Baldwin	jmp	.Lecb_loop
392bc3d5698SJohn Baldwin.Lecb_exit:
393bc3d5698SJohn Baldwin	movl	$1,%eax
394bc3d5698SJohn Baldwin	leaq	8(%rsp),%rsp
395bc3d5698SJohn Baldwin.Lecb_abort:
396bc3d5698SJohn Baldwin	popq	%rbx
397bc3d5698SJohn Baldwin	popq	%rbp
398bc3d5698SJohn Baldwin	.byte	0xf3,0xc3
399bc3d5698SJohn Baldwin.size	padlock_ecb_encrypt,.-padlock_ecb_encrypt
400bc3d5698SJohn Baldwin.globl	padlock_cbc_encrypt
401bc3d5698SJohn Baldwin.type	padlock_cbc_encrypt,@function
402bc3d5698SJohn Baldwin.align	16
403bc3d5698SJohn Baldwinpadlock_cbc_encrypt:
404bc3d5698SJohn Baldwin	pushq	%rbp
405bc3d5698SJohn Baldwin	pushq	%rbx
406bc3d5698SJohn Baldwin
407bc3d5698SJohn Baldwin	xorl	%eax,%eax
408bc3d5698SJohn Baldwin	testq	$15,%rdx
409bc3d5698SJohn Baldwin	jnz	.Lcbc_abort
410bc3d5698SJohn Baldwin	testq	$15,%rcx
411bc3d5698SJohn Baldwin	jnz	.Lcbc_abort
412bc3d5698SJohn Baldwin	leaq	.Lpadlock_saved_context(%rip),%rax
413bc3d5698SJohn Baldwin	pushf
414bc3d5698SJohn Baldwin	cld
415bc3d5698SJohn Baldwin	call	_padlock_verify_ctx
416bc3d5698SJohn Baldwin	leaq	16(%rdx),%rdx
417bc3d5698SJohn Baldwin	xorl	%eax,%eax
418bc3d5698SJohn Baldwin	xorl	%ebx,%ebx
419bc3d5698SJohn Baldwin	testl	$32,(%rdx)
420bc3d5698SJohn Baldwin	jnz	.Lcbc_aligned
421bc3d5698SJohn Baldwin	testq	$0x0f,%rdi
422bc3d5698SJohn Baldwin	setz	%al
423bc3d5698SJohn Baldwin	testq	$0x0f,%rsi
424bc3d5698SJohn Baldwin	setz	%bl
425bc3d5698SJohn Baldwin	testl	%ebx,%eax
426bc3d5698SJohn Baldwin	jnz	.Lcbc_aligned
427bc3d5698SJohn Baldwin	negq	%rax
428bc3d5698SJohn Baldwin	movq	$512,%rbx
429bc3d5698SJohn Baldwin	notq	%rax
430bc3d5698SJohn Baldwin	leaq	(%rsp),%rbp
431bc3d5698SJohn Baldwin	cmpq	%rbx,%rcx
432bc3d5698SJohn Baldwin	cmovcq	%rcx,%rbx
433bc3d5698SJohn Baldwin	andq	%rbx,%rax
434bc3d5698SJohn Baldwin	movq	%rcx,%rbx
435bc3d5698SJohn Baldwin	negq	%rax
436bc3d5698SJohn Baldwin	andq	$512-1,%rbx
437bc3d5698SJohn Baldwin	leaq	(%rax,%rbp,1),%rsp
438bc3d5698SJohn Baldwin	movq	$512,%rax
439bc3d5698SJohn Baldwin	cmovzq	%rax,%rbx
440bc3d5698SJohn Baldwin	cmpq	%rbx,%rcx
441bc3d5698SJohn Baldwin	ja	.Lcbc_loop
442bc3d5698SJohn Baldwin	movq	%rsi,%rax
443bc3d5698SJohn Baldwin	cmpq	%rsp,%rbp
444bc3d5698SJohn Baldwin	cmoveq	%rdi,%rax
445bc3d5698SJohn Baldwin	addq	%rcx,%rax
446bc3d5698SJohn Baldwin	negq	%rax
447bc3d5698SJohn Baldwin	andq	$0xfff,%rax
448bc3d5698SJohn Baldwin	cmpq	$64,%rax
449bc3d5698SJohn Baldwin	movq	$-64,%rax
450bc3d5698SJohn Baldwin	cmovaeq	%rbx,%rax
451bc3d5698SJohn Baldwin	andq	%rax,%rbx
452bc3d5698SJohn Baldwin	jz	.Lcbc_unaligned_tail
453bc3d5698SJohn Baldwin	jmp	.Lcbc_loop
454bc3d5698SJohn Baldwin.align	16
455bc3d5698SJohn Baldwin.Lcbc_loop:
456bc3d5698SJohn Baldwin	cmpq	%rcx,%rbx
457bc3d5698SJohn Baldwin	cmovaq	%rcx,%rbx
458bc3d5698SJohn Baldwin	movq	%rdi,%r8
459bc3d5698SJohn Baldwin	movq	%rsi,%r9
460bc3d5698SJohn Baldwin	movq	%rcx,%r10
461bc3d5698SJohn Baldwin	movq	%rbx,%rcx
462bc3d5698SJohn Baldwin	movq	%rbx,%r11
463bc3d5698SJohn Baldwin	testq	$0x0f,%rdi
464bc3d5698SJohn Baldwin	cmovnzq	%rsp,%rdi
465bc3d5698SJohn Baldwin	testq	$0x0f,%rsi
466bc3d5698SJohn Baldwin	jz	.Lcbc_inp_aligned
467bc3d5698SJohn Baldwin	shrq	$3,%rcx
468bc3d5698SJohn Baldwin.byte	0xf3,0x48,0xa5
469bc3d5698SJohn Baldwin	subq	%rbx,%rdi
470bc3d5698SJohn Baldwin	movq	%rbx,%rcx
471bc3d5698SJohn Baldwin	movq	%rdi,%rsi
472bc3d5698SJohn Baldwin.Lcbc_inp_aligned:
473bc3d5698SJohn Baldwin	leaq	-16(%rdx),%rax
474bc3d5698SJohn Baldwin	leaq	16(%rdx),%rbx
475bc3d5698SJohn Baldwin	shrq	$4,%rcx
476bc3d5698SJohn Baldwin.byte	0xf3,0x0f,0xa7,208
477bc3d5698SJohn Baldwin	movdqa	(%rax),%xmm0
478bc3d5698SJohn Baldwin	movdqa	%xmm0,-16(%rdx)
479bc3d5698SJohn Baldwin	movq	%r8,%rdi
480bc3d5698SJohn Baldwin	movq	%r11,%rbx
481bc3d5698SJohn Baldwin	testq	$0x0f,%rdi
482bc3d5698SJohn Baldwin	jz	.Lcbc_out_aligned
483bc3d5698SJohn Baldwin	movq	%rbx,%rcx
484bc3d5698SJohn Baldwin	leaq	(%rsp),%rsi
485bc3d5698SJohn Baldwin	shrq	$3,%rcx
486bc3d5698SJohn Baldwin.byte	0xf3,0x48,0xa5
487bc3d5698SJohn Baldwin	subq	%rbx,%rdi
488bc3d5698SJohn Baldwin.Lcbc_out_aligned:
489bc3d5698SJohn Baldwin	movq	%r9,%rsi
490bc3d5698SJohn Baldwin	movq	%r10,%rcx
491bc3d5698SJohn Baldwin	addq	%rbx,%rdi
492bc3d5698SJohn Baldwin	addq	%rbx,%rsi
493bc3d5698SJohn Baldwin	subq	%rbx,%rcx
494bc3d5698SJohn Baldwin	movq	$512,%rbx
495bc3d5698SJohn Baldwin	jz	.Lcbc_break
496bc3d5698SJohn Baldwin	cmpq	%rbx,%rcx
497bc3d5698SJohn Baldwin	jae	.Lcbc_loop
498bc3d5698SJohn Baldwin.Lcbc_unaligned_tail:
499bc3d5698SJohn Baldwin	xorl	%eax,%eax
500bc3d5698SJohn Baldwin	cmpq	%rsp,%rbp
501bc3d5698SJohn Baldwin	cmoveq	%rcx,%rax
502bc3d5698SJohn Baldwin	movq	%rdi,%r8
503bc3d5698SJohn Baldwin	movq	%rcx,%rbx
504bc3d5698SJohn Baldwin	subq	%rax,%rsp
505bc3d5698SJohn Baldwin	shrq	$3,%rcx
506bc3d5698SJohn Baldwin	leaq	(%rsp),%rdi
507bc3d5698SJohn Baldwin.byte	0xf3,0x48,0xa5
508bc3d5698SJohn Baldwin	movq	%rsp,%rsi
509bc3d5698SJohn Baldwin	movq	%r8,%rdi
510bc3d5698SJohn Baldwin	movq	%rbx,%rcx
511bc3d5698SJohn Baldwin	jmp	.Lcbc_loop
512bc3d5698SJohn Baldwin.align	16
513bc3d5698SJohn Baldwin.Lcbc_break:
514bc3d5698SJohn Baldwin	cmpq	%rbp,%rsp
515bc3d5698SJohn Baldwin	je	.Lcbc_done
516bc3d5698SJohn Baldwin
517bc3d5698SJohn Baldwin	pxor	%xmm0,%xmm0
518bc3d5698SJohn Baldwin	leaq	(%rsp),%rax
519bc3d5698SJohn Baldwin.Lcbc_bzero:
520bc3d5698SJohn Baldwin	movaps	%xmm0,(%rax)
521bc3d5698SJohn Baldwin	leaq	16(%rax),%rax
522bc3d5698SJohn Baldwin	cmpq	%rax,%rbp
523bc3d5698SJohn Baldwin	ja	.Lcbc_bzero
524bc3d5698SJohn Baldwin
525bc3d5698SJohn Baldwin.Lcbc_done:
526bc3d5698SJohn Baldwin	leaq	(%rbp),%rsp
527bc3d5698SJohn Baldwin	jmp	.Lcbc_exit
528bc3d5698SJohn Baldwin
529bc3d5698SJohn Baldwin.align	16
530bc3d5698SJohn Baldwin.Lcbc_aligned:
531bc3d5698SJohn Baldwin	leaq	(%rsi,%rcx,1),%rbp
532bc3d5698SJohn Baldwin	negq	%rbp
533bc3d5698SJohn Baldwin	andq	$0xfff,%rbp
534bc3d5698SJohn Baldwin	xorl	%eax,%eax
535bc3d5698SJohn Baldwin	cmpq	$64,%rbp
536bc3d5698SJohn Baldwin	movq	$64-1,%rbp
537bc3d5698SJohn Baldwin	cmovaeq	%rax,%rbp
538bc3d5698SJohn Baldwin	andq	%rcx,%rbp
539bc3d5698SJohn Baldwin	subq	%rbp,%rcx
540bc3d5698SJohn Baldwin	jz	.Lcbc_aligned_tail
541bc3d5698SJohn Baldwin	leaq	-16(%rdx),%rax
542bc3d5698SJohn Baldwin	leaq	16(%rdx),%rbx
543bc3d5698SJohn Baldwin	shrq	$4,%rcx
544bc3d5698SJohn Baldwin.byte	0xf3,0x0f,0xa7,208
545bc3d5698SJohn Baldwin	movdqa	(%rax),%xmm0
546bc3d5698SJohn Baldwin	movdqa	%xmm0,-16(%rdx)
547bc3d5698SJohn Baldwin	testq	%rbp,%rbp
548bc3d5698SJohn Baldwin	jz	.Lcbc_exit
549bc3d5698SJohn Baldwin
550bc3d5698SJohn Baldwin.Lcbc_aligned_tail:
551bc3d5698SJohn Baldwin	movq	%rdi,%r8
552bc3d5698SJohn Baldwin	movq	%rbp,%rbx
553bc3d5698SJohn Baldwin	movq	%rbp,%rcx
554bc3d5698SJohn Baldwin	leaq	(%rsp),%rbp
555bc3d5698SJohn Baldwin	subq	%rcx,%rsp
556bc3d5698SJohn Baldwin	shrq	$3,%rcx
557bc3d5698SJohn Baldwin	leaq	(%rsp),%rdi
558bc3d5698SJohn Baldwin.byte	0xf3,0x48,0xa5
559bc3d5698SJohn Baldwin	leaq	(%r8),%rdi
560bc3d5698SJohn Baldwin	leaq	(%rsp),%rsi
561bc3d5698SJohn Baldwin	movq	%rbx,%rcx
562bc3d5698SJohn Baldwin	jmp	.Lcbc_loop
563bc3d5698SJohn Baldwin.Lcbc_exit:
564bc3d5698SJohn Baldwin	movl	$1,%eax
565bc3d5698SJohn Baldwin	leaq	8(%rsp),%rsp
566bc3d5698SJohn Baldwin.Lcbc_abort:
567bc3d5698SJohn Baldwin	popq	%rbx
568bc3d5698SJohn Baldwin	popq	%rbp
569bc3d5698SJohn Baldwin	.byte	0xf3,0xc3
570bc3d5698SJohn Baldwin.size	padlock_cbc_encrypt,.-padlock_cbc_encrypt
571bc3d5698SJohn Baldwin.globl	padlock_cfb_encrypt
572bc3d5698SJohn Baldwin.type	padlock_cfb_encrypt,@function
573bc3d5698SJohn Baldwin.align	16
574bc3d5698SJohn Baldwinpadlock_cfb_encrypt:
575bc3d5698SJohn Baldwin	pushq	%rbp
576bc3d5698SJohn Baldwin	pushq	%rbx
577bc3d5698SJohn Baldwin
578bc3d5698SJohn Baldwin	xorl	%eax,%eax
579bc3d5698SJohn Baldwin	testq	$15,%rdx
580bc3d5698SJohn Baldwin	jnz	.Lcfb_abort
581bc3d5698SJohn Baldwin	testq	$15,%rcx
582bc3d5698SJohn Baldwin	jnz	.Lcfb_abort
583bc3d5698SJohn Baldwin	leaq	.Lpadlock_saved_context(%rip),%rax
584bc3d5698SJohn Baldwin	pushf
585bc3d5698SJohn Baldwin	cld
586bc3d5698SJohn Baldwin	call	_padlock_verify_ctx
587bc3d5698SJohn Baldwin	leaq	16(%rdx),%rdx
588bc3d5698SJohn Baldwin	xorl	%eax,%eax
589bc3d5698SJohn Baldwin	xorl	%ebx,%ebx
590bc3d5698SJohn Baldwin	testl	$32,(%rdx)
591bc3d5698SJohn Baldwin	jnz	.Lcfb_aligned
592bc3d5698SJohn Baldwin	testq	$0x0f,%rdi
593bc3d5698SJohn Baldwin	setz	%al
594bc3d5698SJohn Baldwin	testq	$0x0f,%rsi
595bc3d5698SJohn Baldwin	setz	%bl
596bc3d5698SJohn Baldwin	testl	%ebx,%eax
597bc3d5698SJohn Baldwin	jnz	.Lcfb_aligned
598bc3d5698SJohn Baldwin	negq	%rax
599bc3d5698SJohn Baldwin	movq	$512,%rbx
600bc3d5698SJohn Baldwin	notq	%rax
601bc3d5698SJohn Baldwin	leaq	(%rsp),%rbp
602bc3d5698SJohn Baldwin	cmpq	%rbx,%rcx
603bc3d5698SJohn Baldwin	cmovcq	%rcx,%rbx
604bc3d5698SJohn Baldwin	andq	%rbx,%rax
605bc3d5698SJohn Baldwin	movq	%rcx,%rbx
606bc3d5698SJohn Baldwin	negq	%rax
607bc3d5698SJohn Baldwin	andq	$512-1,%rbx
608bc3d5698SJohn Baldwin	leaq	(%rax,%rbp,1),%rsp
609bc3d5698SJohn Baldwin	movq	$512,%rax
610bc3d5698SJohn Baldwin	cmovzq	%rax,%rbx
611bc3d5698SJohn Baldwin	jmp	.Lcfb_loop
612bc3d5698SJohn Baldwin.align	16
613bc3d5698SJohn Baldwin.Lcfb_loop:
614bc3d5698SJohn Baldwin	cmpq	%rcx,%rbx
615bc3d5698SJohn Baldwin	cmovaq	%rcx,%rbx
616bc3d5698SJohn Baldwin	movq	%rdi,%r8
617bc3d5698SJohn Baldwin	movq	%rsi,%r9
618bc3d5698SJohn Baldwin	movq	%rcx,%r10
619bc3d5698SJohn Baldwin	movq	%rbx,%rcx
620bc3d5698SJohn Baldwin	movq	%rbx,%r11
621bc3d5698SJohn Baldwin	testq	$0x0f,%rdi
622bc3d5698SJohn Baldwin	cmovnzq	%rsp,%rdi
623bc3d5698SJohn Baldwin	testq	$0x0f,%rsi
624bc3d5698SJohn Baldwin	jz	.Lcfb_inp_aligned
625bc3d5698SJohn Baldwin	shrq	$3,%rcx
626bc3d5698SJohn Baldwin.byte	0xf3,0x48,0xa5
627bc3d5698SJohn Baldwin	subq	%rbx,%rdi
628bc3d5698SJohn Baldwin	movq	%rbx,%rcx
629bc3d5698SJohn Baldwin	movq	%rdi,%rsi
630bc3d5698SJohn Baldwin.Lcfb_inp_aligned:
631bc3d5698SJohn Baldwin	leaq	-16(%rdx),%rax
632bc3d5698SJohn Baldwin	leaq	16(%rdx),%rbx
633bc3d5698SJohn Baldwin	shrq	$4,%rcx
634bc3d5698SJohn Baldwin.byte	0xf3,0x0f,0xa7,224
635bc3d5698SJohn Baldwin	movdqa	(%rax),%xmm0
636bc3d5698SJohn Baldwin	movdqa	%xmm0,-16(%rdx)
637bc3d5698SJohn Baldwin	movq	%r8,%rdi
638bc3d5698SJohn Baldwin	movq	%r11,%rbx
639bc3d5698SJohn Baldwin	testq	$0x0f,%rdi
640bc3d5698SJohn Baldwin	jz	.Lcfb_out_aligned
641bc3d5698SJohn Baldwin	movq	%rbx,%rcx
642bc3d5698SJohn Baldwin	leaq	(%rsp),%rsi
643bc3d5698SJohn Baldwin	shrq	$3,%rcx
644bc3d5698SJohn Baldwin.byte	0xf3,0x48,0xa5
645bc3d5698SJohn Baldwin	subq	%rbx,%rdi
646bc3d5698SJohn Baldwin.Lcfb_out_aligned:
647bc3d5698SJohn Baldwin	movq	%r9,%rsi
648bc3d5698SJohn Baldwin	movq	%r10,%rcx
649bc3d5698SJohn Baldwin	addq	%rbx,%rdi
650bc3d5698SJohn Baldwin	addq	%rbx,%rsi
651bc3d5698SJohn Baldwin	subq	%rbx,%rcx
652bc3d5698SJohn Baldwin	movq	$512,%rbx
653bc3d5698SJohn Baldwin	jnz	.Lcfb_loop
654bc3d5698SJohn Baldwin	cmpq	%rbp,%rsp
655bc3d5698SJohn Baldwin	je	.Lcfb_done
656bc3d5698SJohn Baldwin
657bc3d5698SJohn Baldwin	pxor	%xmm0,%xmm0
658bc3d5698SJohn Baldwin	leaq	(%rsp),%rax
659bc3d5698SJohn Baldwin.Lcfb_bzero:
660bc3d5698SJohn Baldwin	movaps	%xmm0,(%rax)
661bc3d5698SJohn Baldwin	leaq	16(%rax),%rax
662bc3d5698SJohn Baldwin	cmpq	%rax,%rbp
663bc3d5698SJohn Baldwin	ja	.Lcfb_bzero
664bc3d5698SJohn Baldwin
665bc3d5698SJohn Baldwin.Lcfb_done:
666bc3d5698SJohn Baldwin	leaq	(%rbp),%rsp
667bc3d5698SJohn Baldwin	jmp	.Lcfb_exit
668bc3d5698SJohn Baldwin
669bc3d5698SJohn Baldwin.align	16
670bc3d5698SJohn Baldwin.Lcfb_aligned:
671bc3d5698SJohn Baldwin	leaq	-16(%rdx),%rax
672bc3d5698SJohn Baldwin	leaq	16(%rdx),%rbx
673bc3d5698SJohn Baldwin	shrq	$4,%rcx
674bc3d5698SJohn Baldwin.byte	0xf3,0x0f,0xa7,224
675bc3d5698SJohn Baldwin	movdqa	(%rax),%xmm0
676bc3d5698SJohn Baldwin	movdqa	%xmm0,-16(%rdx)
677bc3d5698SJohn Baldwin.Lcfb_exit:
678bc3d5698SJohn Baldwin	movl	$1,%eax
679bc3d5698SJohn Baldwin	leaq	8(%rsp),%rsp
680bc3d5698SJohn Baldwin.Lcfb_abort:
681bc3d5698SJohn Baldwin	popq	%rbx
682bc3d5698SJohn Baldwin	popq	%rbp
683bc3d5698SJohn Baldwin	.byte	0xf3,0xc3
684bc3d5698SJohn Baldwin.size	padlock_cfb_encrypt,.-padlock_cfb_encrypt
685bc3d5698SJohn Baldwin.globl	padlock_ofb_encrypt
686bc3d5698SJohn Baldwin.type	padlock_ofb_encrypt,@function
687bc3d5698SJohn Baldwin.align	16
688bc3d5698SJohn Baldwinpadlock_ofb_encrypt:
689bc3d5698SJohn Baldwin	pushq	%rbp
690bc3d5698SJohn Baldwin	pushq	%rbx
691bc3d5698SJohn Baldwin
692bc3d5698SJohn Baldwin	xorl	%eax,%eax
693bc3d5698SJohn Baldwin	testq	$15,%rdx
694bc3d5698SJohn Baldwin	jnz	.Lofb_abort
695bc3d5698SJohn Baldwin	testq	$15,%rcx
696bc3d5698SJohn Baldwin	jnz	.Lofb_abort
697bc3d5698SJohn Baldwin	leaq	.Lpadlock_saved_context(%rip),%rax
698bc3d5698SJohn Baldwin	pushf
699bc3d5698SJohn Baldwin	cld
700bc3d5698SJohn Baldwin	call	_padlock_verify_ctx
701bc3d5698SJohn Baldwin	leaq	16(%rdx),%rdx
702bc3d5698SJohn Baldwin	xorl	%eax,%eax
703bc3d5698SJohn Baldwin	xorl	%ebx,%ebx
704bc3d5698SJohn Baldwin	testl	$32,(%rdx)
705bc3d5698SJohn Baldwin	jnz	.Lofb_aligned
706bc3d5698SJohn Baldwin	testq	$0x0f,%rdi
707bc3d5698SJohn Baldwin	setz	%al
708bc3d5698SJohn Baldwin	testq	$0x0f,%rsi
709bc3d5698SJohn Baldwin	setz	%bl
710bc3d5698SJohn Baldwin	testl	%ebx,%eax
711bc3d5698SJohn Baldwin	jnz	.Lofb_aligned
712bc3d5698SJohn Baldwin	negq	%rax
713bc3d5698SJohn Baldwin	movq	$512,%rbx
714bc3d5698SJohn Baldwin	notq	%rax
715bc3d5698SJohn Baldwin	leaq	(%rsp),%rbp
716bc3d5698SJohn Baldwin	cmpq	%rbx,%rcx
717bc3d5698SJohn Baldwin	cmovcq	%rcx,%rbx
718bc3d5698SJohn Baldwin	andq	%rbx,%rax
719bc3d5698SJohn Baldwin	movq	%rcx,%rbx
720bc3d5698SJohn Baldwin	negq	%rax
721bc3d5698SJohn Baldwin	andq	$512-1,%rbx
722bc3d5698SJohn Baldwin	leaq	(%rax,%rbp,1),%rsp
723bc3d5698SJohn Baldwin	movq	$512,%rax
724bc3d5698SJohn Baldwin	cmovzq	%rax,%rbx
725bc3d5698SJohn Baldwin	jmp	.Lofb_loop
726bc3d5698SJohn Baldwin.align	16
727bc3d5698SJohn Baldwin.Lofb_loop:
728bc3d5698SJohn Baldwin	cmpq	%rcx,%rbx
729bc3d5698SJohn Baldwin	cmovaq	%rcx,%rbx
730bc3d5698SJohn Baldwin	movq	%rdi,%r8
731bc3d5698SJohn Baldwin	movq	%rsi,%r9
732bc3d5698SJohn Baldwin	movq	%rcx,%r10
733bc3d5698SJohn Baldwin	movq	%rbx,%rcx
734bc3d5698SJohn Baldwin	movq	%rbx,%r11
735bc3d5698SJohn Baldwin	testq	$0x0f,%rdi
736bc3d5698SJohn Baldwin	cmovnzq	%rsp,%rdi
737bc3d5698SJohn Baldwin	testq	$0x0f,%rsi
738bc3d5698SJohn Baldwin	jz	.Lofb_inp_aligned
739bc3d5698SJohn Baldwin	shrq	$3,%rcx
740bc3d5698SJohn Baldwin.byte	0xf3,0x48,0xa5
741bc3d5698SJohn Baldwin	subq	%rbx,%rdi
742bc3d5698SJohn Baldwin	movq	%rbx,%rcx
743bc3d5698SJohn Baldwin	movq	%rdi,%rsi
744bc3d5698SJohn Baldwin.Lofb_inp_aligned:
745bc3d5698SJohn Baldwin	leaq	-16(%rdx),%rax
746bc3d5698SJohn Baldwin	leaq	16(%rdx),%rbx
747bc3d5698SJohn Baldwin	shrq	$4,%rcx
748bc3d5698SJohn Baldwin.byte	0xf3,0x0f,0xa7,232
749bc3d5698SJohn Baldwin	movdqa	(%rax),%xmm0
750bc3d5698SJohn Baldwin	movdqa	%xmm0,-16(%rdx)
751bc3d5698SJohn Baldwin	movq	%r8,%rdi
752bc3d5698SJohn Baldwin	movq	%r11,%rbx
753bc3d5698SJohn Baldwin	testq	$0x0f,%rdi
754bc3d5698SJohn Baldwin	jz	.Lofb_out_aligned
755bc3d5698SJohn Baldwin	movq	%rbx,%rcx
756bc3d5698SJohn Baldwin	leaq	(%rsp),%rsi
757bc3d5698SJohn Baldwin	shrq	$3,%rcx
758bc3d5698SJohn Baldwin.byte	0xf3,0x48,0xa5
759bc3d5698SJohn Baldwin	subq	%rbx,%rdi
760bc3d5698SJohn Baldwin.Lofb_out_aligned:
761bc3d5698SJohn Baldwin	movq	%r9,%rsi
762bc3d5698SJohn Baldwin	movq	%r10,%rcx
763bc3d5698SJohn Baldwin	addq	%rbx,%rdi
764bc3d5698SJohn Baldwin	addq	%rbx,%rsi
765bc3d5698SJohn Baldwin	subq	%rbx,%rcx
766bc3d5698SJohn Baldwin	movq	$512,%rbx
767bc3d5698SJohn Baldwin	jnz	.Lofb_loop
768bc3d5698SJohn Baldwin	cmpq	%rbp,%rsp
769bc3d5698SJohn Baldwin	je	.Lofb_done
770bc3d5698SJohn Baldwin
771bc3d5698SJohn Baldwin	pxor	%xmm0,%xmm0
772bc3d5698SJohn Baldwin	leaq	(%rsp),%rax
773bc3d5698SJohn Baldwin.Lofb_bzero:
774bc3d5698SJohn Baldwin	movaps	%xmm0,(%rax)
775bc3d5698SJohn Baldwin	leaq	16(%rax),%rax
776bc3d5698SJohn Baldwin	cmpq	%rax,%rbp
777bc3d5698SJohn Baldwin	ja	.Lofb_bzero
778bc3d5698SJohn Baldwin
779bc3d5698SJohn Baldwin.Lofb_done:
780bc3d5698SJohn Baldwin	leaq	(%rbp),%rsp
781bc3d5698SJohn Baldwin	jmp	.Lofb_exit
782bc3d5698SJohn Baldwin
783bc3d5698SJohn Baldwin.align	16
784bc3d5698SJohn Baldwin.Lofb_aligned:
785bc3d5698SJohn Baldwin	leaq	-16(%rdx),%rax
786bc3d5698SJohn Baldwin	leaq	16(%rdx),%rbx
787bc3d5698SJohn Baldwin	shrq	$4,%rcx
788bc3d5698SJohn Baldwin.byte	0xf3,0x0f,0xa7,232
789bc3d5698SJohn Baldwin	movdqa	(%rax),%xmm0
790bc3d5698SJohn Baldwin	movdqa	%xmm0,-16(%rdx)
791bc3d5698SJohn Baldwin.Lofb_exit:
792bc3d5698SJohn Baldwin	movl	$1,%eax
793bc3d5698SJohn Baldwin	leaq	8(%rsp),%rsp
794bc3d5698SJohn Baldwin.Lofb_abort:
795bc3d5698SJohn Baldwin	popq	%rbx
796bc3d5698SJohn Baldwin	popq	%rbp
797bc3d5698SJohn Baldwin	.byte	0xf3,0xc3
798bc3d5698SJohn Baldwin.size	padlock_ofb_encrypt,.-padlock_ofb_encrypt
799bc3d5698SJohn Baldwin.globl	padlock_ctr32_encrypt
800bc3d5698SJohn Baldwin.type	padlock_ctr32_encrypt,@function
801bc3d5698SJohn Baldwin.align	16
802bc3d5698SJohn Baldwinpadlock_ctr32_encrypt:
803bc3d5698SJohn Baldwin	pushq	%rbp
804bc3d5698SJohn Baldwin	pushq	%rbx
805bc3d5698SJohn Baldwin
806bc3d5698SJohn Baldwin	xorl	%eax,%eax
807bc3d5698SJohn Baldwin	testq	$15,%rdx
808bc3d5698SJohn Baldwin	jnz	.Lctr32_abort
809bc3d5698SJohn Baldwin	testq	$15,%rcx
810bc3d5698SJohn Baldwin	jnz	.Lctr32_abort
811bc3d5698SJohn Baldwin	leaq	.Lpadlock_saved_context(%rip),%rax
812bc3d5698SJohn Baldwin	pushf
813bc3d5698SJohn Baldwin	cld
814bc3d5698SJohn Baldwin	call	_padlock_verify_ctx
815bc3d5698SJohn Baldwin	leaq	16(%rdx),%rdx
816bc3d5698SJohn Baldwin	xorl	%eax,%eax
817bc3d5698SJohn Baldwin	xorl	%ebx,%ebx
818bc3d5698SJohn Baldwin	testl	$32,(%rdx)
819bc3d5698SJohn Baldwin	jnz	.Lctr32_aligned
820bc3d5698SJohn Baldwin	testq	$0x0f,%rdi
821bc3d5698SJohn Baldwin	setz	%al
822bc3d5698SJohn Baldwin	testq	$0x0f,%rsi
823bc3d5698SJohn Baldwin	setz	%bl
824bc3d5698SJohn Baldwin	testl	%ebx,%eax
825bc3d5698SJohn Baldwin	jnz	.Lctr32_aligned
826bc3d5698SJohn Baldwin	negq	%rax
827bc3d5698SJohn Baldwin	movq	$512,%rbx
828bc3d5698SJohn Baldwin	notq	%rax
829bc3d5698SJohn Baldwin	leaq	(%rsp),%rbp
830bc3d5698SJohn Baldwin	cmpq	%rbx,%rcx
831bc3d5698SJohn Baldwin	cmovcq	%rcx,%rbx
832bc3d5698SJohn Baldwin	andq	%rbx,%rax
833bc3d5698SJohn Baldwin	movq	%rcx,%rbx
834bc3d5698SJohn Baldwin	negq	%rax
835bc3d5698SJohn Baldwin	andq	$512-1,%rbx
836bc3d5698SJohn Baldwin	leaq	(%rax,%rbp,1),%rsp
837bc3d5698SJohn Baldwin	movq	$512,%rax
838bc3d5698SJohn Baldwin	cmovzq	%rax,%rbx
839bc3d5698SJohn Baldwin.Lctr32_reenter:
840bc3d5698SJohn Baldwin	movl	-4(%rdx),%eax
841bc3d5698SJohn Baldwin	bswapl	%eax
842bc3d5698SJohn Baldwin	negl	%eax
843bc3d5698SJohn Baldwin	andl	$31,%eax
844bc3d5698SJohn Baldwin	movq	$512,%rbx
845bc3d5698SJohn Baldwin	shll	$4,%eax
846bc3d5698SJohn Baldwin	cmovzq	%rbx,%rax
847bc3d5698SJohn Baldwin	cmpq	%rax,%rcx
848bc3d5698SJohn Baldwin	cmovaq	%rax,%rbx
849bc3d5698SJohn Baldwin	cmovbeq	%rcx,%rbx
850bc3d5698SJohn Baldwin	cmpq	%rbx,%rcx
851bc3d5698SJohn Baldwin	ja	.Lctr32_loop
852bc3d5698SJohn Baldwin	movq	%rsi,%rax
853bc3d5698SJohn Baldwin	cmpq	%rsp,%rbp
854bc3d5698SJohn Baldwin	cmoveq	%rdi,%rax
855bc3d5698SJohn Baldwin	addq	%rcx,%rax
856bc3d5698SJohn Baldwin	negq	%rax
857bc3d5698SJohn Baldwin	andq	$0xfff,%rax
858bc3d5698SJohn Baldwin	cmpq	$32,%rax
859bc3d5698SJohn Baldwin	movq	$-32,%rax
860bc3d5698SJohn Baldwin	cmovaeq	%rbx,%rax
861bc3d5698SJohn Baldwin	andq	%rax,%rbx
862bc3d5698SJohn Baldwin	jz	.Lctr32_unaligned_tail
863bc3d5698SJohn Baldwin	jmp	.Lctr32_loop
864bc3d5698SJohn Baldwin.align	16
865bc3d5698SJohn Baldwin.Lctr32_loop:
866bc3d5698SJohn Baldwin	cmpq	%rcx,%rbx
867bc3d5698SJohn Baldwin	cmovaq	%rcx,%rbx
868bc3d5698SJohn Baldwin	movq	%rdi,%r8
869bc3d5698SJohn Baldwin	movq	%rsi,%r9
870bc3d5698SJohn Baldwin	movq	%rcx,%r10
871bc3d5698SJohn Baldwin	movq	%rbx,%rcx
872bc3d5698SJohn Baldwin	movq	%rbx,%r11
873bc3d5698SJohn Baldwin	testq	$0x0f,%rdi
874bc3d5698SJohn Baldwin	cmovnzq	%rsp,%rdi
875bc3d5698SJohn Baldwin	testq	$0x0f,%rsi
876bc3d5698SJohn Baldwin	jz	.Lctr32_inp_aligned
877bc3d5698SJohn Baldwin	shrq	$3,%rcx
878bc3d5698SJohn Baldwin.byte	0xf3,0x48,0xa5
879bc3d5698SJohn Baldwin	subq	%rbx,%rdi
880bc3d5698SJohn Baldwin	movq	%rbx,%rcx
881bc3d5698SJohn Baldwin	movq	%rdi,%rsi
882bc3d5698SJohn Baldwin.Lctr32_inp_aligned:
883bc3d5698SJohn Baldwin	leaq	-16(%rdx),%rax
884bc3d5698SJohn Baldwin	leaq	16(%rdx),%rbx
885bc3d5698SJohn Baldwin	shrq	$4,%rcx
886bc3d5698SJohn Baldwin.byte	0xf3,0x0f,0xa7,216
887bc3d5698SJohn Baldwin	movl	-4(%rdx),%eax
888bc3d5698SJohn Baldwin	testl	$0xffff0000,%eax
889bc3d5698SJohn Baldwin	jnz	.Lctr32_no_carry
890bc3d5698SJohn Baldwin	bswapl	%eax
891bc3d5698SJohn Baldwin	addl	$0x10000,%eax
892bc3d5698SJohn Baldwin	bswapl	%eax
893bc3d5698SJohn Baldwin	movl	%eax,-4(%rdx)
894bc3d5698SJohn Baldwin.Lctr32_no_carry:
895bc3d5698SJohn Baldwin	movq	%r8,%rdi
896bc3d5698SJohn Baldwin	movq	%r11,%rbx
897bc3d5698SJohn Baldwin	testq	$0x0f,%rdi
898bc3d5698SJohn Baldwin	jz	.Lctr32_out_aligned
899bc3d5698SJohn Baldwin	movq	%rbx,%rcx
900bc3d5698SJohn Baldwin	leaq	(%rsp),%rsi
901bc3d5698SJohn Baldwin	shrq	$3,%rcx
902bc3d5698SJohn Baldwin.byte	0xf3,0x48,0xa5
903bc3d5698SJohn Baldwin	subq	%rbx,%rdi
904bc3d5698SJohn Baldwin.Lctr32_out_aligned:
905bc3d5698SJohn Baldwin	movq	%r9,%rsi
906bc3d5698SJohn Baldwin	movq	%r10,%rcx
907bc3d5698SJohn Baldwin	addq	%rbx,%rdi
908bc3d5698SJohn Baldwin	addq	%rbx,%rsi
909bc3d5698SJohn Baldwin	subq	%rbx,%rcx
910bc3d5698SJohn Baldwin	movq	$512,%rbx
911bc3d5698SJohn Baldwin	jz	.Lctr32_break
912bc3d5698SJohn Baldwin	cmpq	%rbx,%rcx
913bc3d5698SJohn Baldwin	jae	.Lctr32_loop
914bc3d5698SJohn Baldwin	movq	%rcx,%rbx
915bc3d5698SJohn Baldwin	movq	%rsi,%rax
916bc3d5698SJohn Baldwin	cmpq	%rsp,%rbp
917bc3d5698SJohn Baldwin	cmoveq	%rdi,%rax
918bc3d5698SJohn Baldwin	addq	%rcx,%rax
919bc3d5698SJohn Baldwin	negq	%rax
920bc3d5698SJohn Baldwin	andq	$0xfff,%rax
921bc3d5698SJohn Baldwin	cmpq	$32,%rax
922bc3d5698SJohn Baldwin	movq	$-32,%rax
923bc3d5698SJohn Baldwin	cmovaeq	%rbx,%rax
924bc3d5698SJohn Baldwin	andq	%rax,%rbx
925bc3d5698SJohn Baldwin	jnz	.Lctr32_loop
926bc3d5698SJohn Baldwin.Lctr32_unaligned_tail:
927bc3d5698SJohn Baldwin	xorl	%eax,%eax
928bc3d5698SJohn Baldwin	cmpq	%rsp,%rbp
929bc3d5698SJohn Baldwin	cmoveq	%rcx,%rax
930bc3d5698SJohn Baldwin	movq	%rdi,%r8
931bc3d5698SJohn Baldwin	movq	%rcx,%rbx
932bc3d5698SJohn Baldwin	subq	%rax,%rsp
933bc3d5698SJohn Baldwin	shrq	$3,%rcx
934bc3d5698SJohn Baldwin	leaq	(%rsp),%rdi
935bc3d5698SJohn Baldwin.byte	0xf3,0x48,0xa5
936bc3d5698SJohn Baldwin	movq	%rsp,%rsi
937bc3d5698SJohn Baldwin	movq	%r8,%rdi
938bc3d5698SJohn Baldwin	movq	%rbx,%rcx
939bc3d5698SJohn Baldwin	jmp	.Lctr32_loop
940bc3d5698SJohn Baldwin.align	16
941bc3d5698SJohn Baldwin.Lctr32_break:
942bc3d5698SJohn Baldwin	cmpq	%rbp,%rsp
943bc3d5698SJohn Baldwin	je	.Lctr32_done
944bc3d5698SJohn Baldwin
945bc3d5698SJohn Baldwin	pxor	%xmm0,%xmm0
946bc3d5698SJohn Baldwin	leaq	(%rsp),%rax
947bc3d5698SJohn Baldwin.Lctr32_bzero:
948bc3d5698SJohn Baldwin	movaps	%xmm0,(%rax)
949bc3d5698SJohn Baldwin	leaq	16(%rax),%rax
950bc3d5698SJohn Baldwin	cmpq	%rax,%rbp
951bc3d5698SJohn Baldwin	ja	.Lctr32_bzero
952bc3d5698SJohn Baldwin
953bc3d5698SJohn Baldwin.Lctr32_done:
954bc3d5698SJohn Baldwin	leaq	(%rbp),%rsp
955bc3d5698SJohn Baldwin	jmp	.Lctr32_exit
956bc3d5698SJohn Baldwin
957bc3d5698SJohn Baldwin.align	16
958bc3d5698SJohn Baldwin.Lctr32_aligned:
959bc3d5698SJohn Baldwin	movl	-4(%rdx),%eax
960bc3d5698SJohn Baldwin	bswapl	%eax
961bc3d5698SJohn Baldwin	negl	%eax
962bc3d5698SJohn Baldwin	andl	$0xffff,%eax
963bc3d5698SJohn Baldwin	movq	$1048576,%rbx
964bc3d5698SJohn Baldwin	shll	$4,%eax
965bc3d5698SJohn Baldwin	cmovzq	%rbx,%rax
966bc3d5698SJohn Baldwin	cmpq	%rax,%rcx
967bc3d5698SJohn Baldwin	cmovaq	%rax,%rbx
968bc3d5698SJohn Baldwin	cmovbeq	%rcx,%rbx
969bc3d5698SJohn Baldwin	jbe	.Lctr32_aligned_skip
970bc3d5698SJohn Baldwin
971bc3d5698SJohn Baldwin.Lctr32_aligned_loop:
972bc3d5698SJohn Baldwin	movq	%rcx,%r10
973bc3d5698SJohn Baldwin	movq	%rbx,%rcx
974bc3d5698SJohn Baldwin	movq	%rbx,%r11
975bc3d5698SJohn Baldwin
976bc3d5698SJohn Baldwin	leaq	-16(%rdx),%rax
977bc3d5698SJohn Baldwin	leaq	16(%rdx),%rbx
978bc3d5698SJohn Baldwin	shrq	$4,%rcx
979bc3d5698SJohn Baldwin.byte	0xf3,0x0f,0xa7,216
980bc3d5698SJohn Baldwin
981bc3d5698SJohn Baldwin	movl	-4(%rdx),%eax
982bc3d5698SJohn Baldwin	bswapl	%eax
983bc3d5698SJohn Baldwin	addl	$0x10000,%eax
984bc3d5698SJohn Baldwin	bswapl	%eax
985bc3d5698SJohn Baldwin	movl	%eax,-4(%rdx)
986bc3d5698SJohn Baldwin
987bc3d5698SJohn Baldwin	movq	%r10,%rcx
988bc3d5698SJohn Baldwin	subq	%r11,%rcx
989bc3d5698SJohn Baldwin	movq	$1048576,%rbx
990bc3d5698SJohn Baldwin	jz	.Lctr32_exit
991bc3d5698SJohn Baldwin	cmpq	%rbx,%rcx
992bc3d5698SJohn Baldwin	jae	.Lctr32_aligned_loop
993bc3d5698SJohn Baldwin
994bc3d5698SJohn Baldwin.Lctr32_aligned_skip:
995bc3d5698SJohn Baldwin	leaq	(%rsi,%rcx,1),%rbp
996bc3d5698SJohn Baldwin	negq	%rbp
997bc3d5698SJohn Baldwin	andq	$0xfff,%rbp
998bc3d5698SJohn Baldwin	xorl	%eax,%eax
999bc3d5698SJohn Baldwin	cmpq	$32,%rbp
1000bc3d5698SJohn Baldwin	movq	$32-1,%rbp
1001bc3d5698SJohn Baldwin	cmovaeq	%rax,%rbp
1002bc3d5698SJohn Baldwin	andq	%rcx,%rbp
1003bc3d5698SJohn Baldwin	subq	%rbp,%rcx
1004bc3d5698SJohn Baldwin	jz	.Lctr32_aligned_tail
1005bc3d5698SJohn Baldwin	leaq	-16(%rdx),%rax
1006bc3d5698SJohn Baldwin	leaq	16(%rdx),%rbx
1007bc3d5698SJohn Baldwin	shrq	$4,%rcx
1008bc3d5698SJohn Baldwin.byte	0xf3,0x0f,0xa7,216
1009bc3d5698SJohn Baldwin	testq	%rbp,%rbp
1010bc3d5698SJohn Baldwin	jz	.Lctr32_exit
1011bc3d5698SJohn Baldwin
1012bc3d5698SJohn Baldwin.Lctr32_aligned_tail:
1013bc3d5698SJohn Baldwin	movq	%rdi,%r8
1014bc3d5698SJohn Baldwin	movq	%rbp,%rbx
1015bc3d5698SJohn Baldwin	movq	%rbp,%rcx
1016bc3d5698SJohn Baldwin	leaq	(%rsp),%rbp
1017bc3d5698SJohn Baldwin	subq	%rcx,%rsp
1018bc3d5698SJohn Baldwin	shrq	$3,%rcx
1019bc3d5698SJohn Baldwin	leaq	(%rsp),%rdi
1020bc3d5698SJohn Baldwin.byte	0xf3,0x48,0xa5
1021bc3d5698SJohn Baldwin	leaq	(%r8),%rdi
1022bc3d5698SJohn Baldwin	leaq	(%rsp),%rsi
1023bc3d5698SJohn Baldwin	movq	%rbx,%rcx
1024bc3d5698SJohn Baldwin	jmp	.Lctr32_loop
1025bc3d5698SJohn Baldwin.Lctr32_exit:
1026bc3d5698SJohn Baldwin	movl	$1,%eax
1027bc3d5698SJohn Baldwin	leaq	8(%rsp),%rsp
1028bc3d5698SJohn Baldwin.Lctr32_abort:
1029bc3d5698SJohn Baldwin	popq	%rbx
1030bc3d5698SJohn Baldwin	popq	%rbp
1031bc3d5698SJohn Baldwin	.byte	0xf3,0xc3
1032bc3d5698SJohn Baldwin.size	padlock_ctr32_encrypt,.-padlock_ctr32_encrypt
1033bc3d5698SJohn Baldwin.byte	86,73,65,32,80,97,100,108,111,99,107,32,120,56,54,95,54,52,32,109,111,100,117,108,101,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
1034bc3d5698SJohn Baldwin.align	16
1035bc3d5698SJohn Baldwin.data
1036bc3d5698SJohn Baldwin.align	8
1037bc3d5698SJohn Baldwin.Lpadlock_saved_context:
1038bc3d5698SJohn Baldwin.quad	0
1039*c0855eaaSJohn Baldwin	.section ".note.gnu.property", "a"
1040*c0855eaaSJohn Baldwin	.p2align 3
1041*c0855eaaSJohn Baldwin	.long 1f - 0f
1042*c0855eaaSJohn Baldwin	.long 4f - 1f
1043*c0855eaaSJohn Baldwin	.long 5
1044*c0855eaaSJohn Baldwin0:
1045*c0855eaaSJohn Baldwin	# "GNU" encoded with .byte, since .asciz isn't supported
1046*c0855eaaSJohn Baldwin	# on Solaris.
1047*c0855eaaSJohn Baldwin	.byte 0x47
1048*c0855eaaSJohn Baldwin	.byte 0x4e
1049*c0855eaaSJohn Baldwin	.byte 0x55
1050*c0855eaaSJohn Baldwin	.byte 0
1051*c0855eaaSJohn Baldwin1:
1052*c0855eaaSJohn Baldwin	.p2align 3
1053*c0855eaaSJohn Baldwin	.long 0xc0000002
1054*c0855eaaSJohn Baldwin	.long 3f - 2f
1055*c0855eaaSJohn Baldwin2:
1056*c0855eaaSJohn Baldwin	.long 3
1057*c0855eaaSJohn Baldwin3:
1058*c0855eaaSJohn Baldwin	.p2align 3
1059*c0855eaaSJohn Baldwin4:
1060