xref: /freebsd/sys/crypto/openssl/amd64/x86_64cpuid.S (revision c0855eaa3ee9614804b6bd6a255aa9f71e095f43)
1bc3d5698SJohn Baldwin/* Do not modify. This file is auto-generated from x86_64cpuid.pl. */
2bc3d5698SJohn Baldwin
3bc3d5698SJohn Baldwin.hidden	OPENSSL_cpuid_setup
4bc3d5698SJohn Baldwin.section	.init
5bc3d5698SJohn Baldwin	call	OPENSSL_cpuid_setup
6bc3d5698SJohn Baldwin
7bc3d5698SJohn Baldwin.hidden	OPENSSL_ia32cap_P
8bc3d5698SJohn Baldwin.comm	OPENSSL_ia32cap_P,16,4
9bc3d5698SJohn Baldwin
10bc3d5698SJohn Baldwin.text
11bc3d5698SJohn Baldwin
12bc3d5698SJohn Baldwin.globl	OPENSSL_atomic_add
13bc3d5698SJohn Baldwin.type	OPENSSL_atomic_add,@function
14bc3d5698SJohn Baldwin.align	16
15bc3d5698SJohn BaldwinOPENSSL_atomic_add:
16*c0855eaaSJohn Baldwin.cfi_startproc
17*c0855eaaSJohn Baldwin.byte	243,15,30,250
18bc3d5698SJohn Baldwin	movl	(%rdi),%eax
19bc3d5698SJohn Baldwin.Lspin:	leaq	(%rsi,%rax,1),%r8
20bc3d5698SJohn Baldwin.byte	0xf0
21bc3d5698SJohn Baldwin	cmpxchgl	%r8d,(%rdi)
22bc3d5698SJohn Baldwin	jne	.Lspin
23bc3d5698SJohn Baldwin	movl	%r8d,%eax
24bc3d5698SJohn Baldwin.byte	0x48,0x98
25bc3d5698SJohn Baldwin	.byte	0xf3,0xc3
26*c0855eaaSJohn Baldwin.cfi_endproc
27bc3d5698SJohn Baldwin.size	OPENSSL_atomic_add,.-OPENSSL_atomic_add
28bc3d5698SJohn Baldwin
29bc3d5698SJohn Baldwin.globl	OPENSSL_rdtsc
30bc3d5698SJohn Baldwin.type	OPENSSL_rdtsc,@function
31bc3d5698SJohn Baldwin.align	16
32bc3d5698SJohn BaldwinOPENSSL_rdtsc:
33*c0855eaaSJohn Baldwin.cfi_startproc
34*c0855eaaSJohn Baldwin.byte	243,15,30,250
35bc3d5698SJohn Baldwin	rdtsc
36bc3d5698SJohn Baldwin	shlq	$32,%rdx
37bc3d5698SJohn Baldwin	orq	%rdx,%rax
38bc3d5698SJohn Baldwin	.byte	0xf3,0xc3
39*c0855eaaSJohn Baldwin.cfi_endproc
40bc3d5698SJohn Baldwin.size	OPENSSL_rdtsc,.-OPENSSL_rdtsc
41bc3d5698SJohn Baldwin
42bc3d5698SJohn Baldwin.globl	OPENSSL_ia32_cpuid
43bc3d5698SJohn Baldwin.type	OPENSSL_ia32_cpuid,@function
44bc3d5698SJohn Baldwin.align	16
45bc3d5698SJohn BaldwinOPENSSL_ia32_cpuid:
46bc3d5698SJohn Baldwin.cfi_startproc
47*c0855eaaSJohn Baldwin.byte	243,15,30,250
48bc3d5698SJohn Baldwin	movq	%rbx,%r8
49bc3d5698SJohn Baldwin.cfi_register	%rbx,%r8
50bc3d5698SJohn Baldwin
51bc3d5698SJohn Baldwin	xorl	%eax,%eax
52bc3d5698SJohn Baldwin	movq	%rax,8(%rdi)
53bc3d5698SJohn Baldwin	cpuid
54bc3d5698SJohn Baldwin	movl	%eax,%r11d
55bc3d5698SJohn Baldwin
56bc3d5698SJohn Baldwin	xorl	%eax,%eax
57bc3d5698SJohn Baldwin	cmpl	$0x756e6547,%ebx
58bc3d5698SJohn Baldwin	setne	%al
59bc3d5698SJohn Baldwin	movl	%eax,%r9d
60bc3d5698SJohn Baldwin	cmpl	$0x49656e69,%edx
61bc3d5698SJohn Baldwin	setne	%al
62bc3d5698SJohn Baldwin	orl	%eax,%r9d
63bc3d5698SJohn Baldwin	cmpl	$0x6c65746e,%ecx
64bc3d5698SJohn Baldwin	setne	%al
65bc3d5698SJohn Baldwin	orl	%eax,%r9d
66bc3d5698SJohn Baldwin	jz	.Lintel
67bc3d5698SJohn Baldwin
68bc3d5698SJohn Baldwin	cmpl	$0x68747541,%ebx
69bc3d5698SJohn Baldwin	setne	%al
70bc3d5698SJohn Baldwin	movl	%eax,%r10d
71bc3d5698SJohn Baldwin	cmpl	$0x69746E65,%edx
72bc3d5698SJohn Baldwin	setne	%al
73bc3d5698SJohn Baldwin	orl	%eax,%r10d
74bc3d5698SJohn Baldwin	cmpl	$0x444D4163,%ecx
75bc3d5698SJohn Baldwin	setne	%al
76bc3d5698SJohn Baldwin	orl	%eax,%r10d
77bc3d5698SJohn Baldwin	jnz	.Lintel
78bc3d5698SJohn Baldwin
79bc3d5698SJohn Baldwin
80bc3d5698SJohn Baldwin	movl	$0x80000000,%eax
81bc3d5698SJohn Baldwin	cpuid
82bc3d5698SJohn Baldwin	cmpl	$0x80000001,%eax
83bc3d5698SJohn Baldwin	jb	.Lintel
84bc3d5698SJohn Baldwin	movl	%eax,%r10d
85bc3d5698SJohn Baldwin	movl	$0x80000001,%eax
86bc3d5698SJohn Baldwin	cpuid
87bc3d5698SJohn Baldwin	orl	%ecx,%r9d
88bc3d5698SJohn Baldwin	andl	$0x00000801,%r9d
89bc3d5698SJohn Baldwin
90bc3d5698SJohn Baldwin	cmpl	$0x80000008,%r10d
91bc3d5698SJohn Baldwin	jb	.Lintel
92bc3d5698SJohn Baldwin
93bc3d5698SJohn Baldwin	movl	$0x80000008,%eax
94bc3d5698SJohn Baldwin	cpuid
95bc3d5698SJohn Baldwin	movzbq	%cl,%r10
96bc3d5698SJohn Baldwin	incq	%r10
97bc3d5698SJohn Baldwin
98bc3d5698SJohn Baldwin	movl	$1,%eax
99bc3d5698SJohn Baldwin	cpuid
100bc3d5698SJohn Baldwin	btl	$28,%edx
101bc3d5698SJohn Baldwin	jnc	.Lgeneric
102bc3d5698SJohn Baldwin	shrl	$16,%ebx
103bc3d5698SJohn Baldwin	cmpb	%r10b,%bl
104bc3d5698SJohn Baldwin	ja	.Lgeneric
105bc3d5698SJohn Baldwin	andl	$0xefffffff,%edx
106bc3d5698SJohn Baldwin	jmp	.Lgeneric
107bc3d5698SJohn Baldwin
108bc3d5698SJohn Baldwin.Lintel:
109bc3d5698SJohn Baldwin	cmpl	$4,%r11d
110bc3d5698SJohn Baldwin	movl	$-1,%r10d
111bc3d5698SJohn Baldwin	jb	.Lnocacheinfo
112bc3d5698SJohn Baldwin
113bc3d5698SJohn Baldwin	movl	$4,%eax
114bc3d5698SJohn Baldwin	movl	$0,%ecx
115bc3d5698SJohn Baldwin	cpuid
116bc3d5698SJohn Baldwin	movl	%eax,%r10d
117bc3d5698SJohn Baldwin	shrl	$14,%r10d
118bc3d5698SJohn Baldwin	andl	$0xfff,%r10d
119bc3d5698SJohn Baldwin
120bc3d5698SJohn Baldwin.Lnocacheinfo:
121bc3d5698SJohn Baldwin	movl	$1,%eax
122bc3d5698SJohn Baldwin	cpuid
123bc3d5698SJohn Baldwin	movd	%eax,%xmm0
124bc3d5698SJohn Baldwin	andl	$0xbfefffff,%edx
125bc3d5698SJohn Baldwin	cmpl	$0,%r9d
126bc3d5698SJohn Baldwin	jne	.Lnotintel
127bc3d5698SJohn Baldwin	orl	$0x40000000,%edx
128bc3d5698SJohn Baldwin	andb	$15,%ah
129bc3d5698SJohn Baldwin	cmpb	$15,%ah
130bc3d5698SJohn Baldwin	jne	.LnotP4
131bc3d5698SJohn Baldwin	orl	$0x00100000,%edx
132bc3d5698SJohn Baldwin.LnotP4:
133bc3d5698SJohn Baldwin	cmpb	$6,%ah
134bc3d5698SJohn Baldwin	jne	.Lnotintel
135bc3d5698SJohn Baldwin	andl	$0x0fff0ff0,%eax
136bc3d5698SJohn Baldwin	cmpl	$0x00050670,%eax
137bc3d5698SJohn Baldwin	je	.Lknights
138bc3d5698SJohn Baldwin	cmpl	$0x00080650,%eax
139bc3d5698SJohn Baldwin	jne	.Lnotintel
140bc3d5698SJohn Baldwin.Lknights:
141bc3d5698SJohn Baldwin	andl	$0xfbffffff,%ecx
142bc3d5698SJohn Baldwin
143bc3d5698SJohn Baldwin.Lnotintel:
144bc3d5698SJohn Baldwin	btl	$28,%edx
145bc3d5698SJohn Baldwin	jnc	.Lgeneric
146bc3d5698SJohn Baldwin	andl	$0xefffffff,%edx
147bc3d5698SJohn Baldwin	cmpl	$0,%r10d
148bc3d5698SJohn Baldwin	je	.Lgeneric
149bc3d5698SJohn Baldwin
150bc3d5698SJohn Baldwin	orl	$0x10000000,%edx
151bc3d5698SJohn Baldwin	shrl	$16,%ebx
152bc3d5698SJohn Baldwin	cmpb	$1,%bl
153bc3d5698SJohn Baldwin	ja	.Lgeneric
154bc3d5698SJohn Baldwin	andl	$0xefffffff,%edx
155bc3d5698SJohn Baldwin.Lgeneric:
156bc3d5698SJohn Baldwin	andl	$0x00000800,%r9d
157bc3d5698SJohn Baldwin	andl	$0xfffff7ff,%ecx
158bc3d5698SJohn Baldwin	orl	%ecx,%r9d
159bc3d5698SJohn Baldwin
160bc3d5698SJohn Baldwin	movl	%edx,%r10d
161bc3d5698SJohn Baldwin
162bc3d5698SJohn Baldwin	cmpl	$7,%r11d
163bc3d5698SJohn Baldwin	jb	.Lno_extended_info
164bc3d5698SJohn Baldwin	movl	$7,%eax
165bc3d5698SJohn Baldwin	xorl	%ecx,%ecx
166bc3d5698SJohn Baldwin	cpuid
167bc3d5698SJohn Baldwin	btl	$26,%r9d
168bc3d5698SJohn Baldwin	jc	.Lnotknights
169bc3d5698SJohn Baldwin	andl	$0xfff7ffff,%ebx
170bc3d5698SJohn Baldwin.Lnotknights:
171bc3d5698SJohn Baldwin	movd	%xmm0,%eax
172bc3d5698SJohn Baldwin	andl	$0x0fff0ff0,%eax
173bc3d5698SJohn Baldwin	cmpl	$0x00050650,%eax
174bc3d5698SJohn Baldwin	jne	.Lnotskylakex
175bc3d5698SJohn Baldwin	andl	$0xfffeffff,%ebx
176bc3d5698SJohn Baldwin
177bc3d5698SJohn Baldwin.Lnotskylakex:
178bc3d5698SJohn Baldwin	movl	%ebx,8(%rdi)
179bc3d5698SJohn Baldwin	movl	%ecx,12(%rdi)
180bc3d5698SJohn Baldwin.Lno_extended_info:
181bc3d5698SJohn Baldwin
182bc3d5698SJohn Baldwin	btl	$27,%r9d
183bc3d5698SJohn Baldwin	jnc	.Lclear_avx
184bc3d5698SJohn Baldwin	xorl	%ecx,%ecx
185bc3d5698SJohn Baldwin.byte	0x0f,0x01,0xd0
186bc3d5698SJohn Baldwin	andl	$0xe6,%eax
187bc3d5698SJohn Baldwin	cmpl	$0xe6,%eax
188bc3d5698SJohn Baldwin	je	.Ldone
189bc3d5698SJohn Baldwin	andl	$0x3fdeffff,8(%rdi)
190bc3d5698SJohn Baldwin
191bc3d5698SJohn Baldwin
192bc3d5698SJohn Baldwin
193bc3d5698SJohn Baldwin
194bc3d5698SJohn Baldwin	andl	$6,%eax
195bc3d5698SJohn Baldwin	cmpl	$6,%eax
196bc3d5698SJohn Baldwin	je	.Ldone
197bc3d5698SJohn Baldwin.Lclear_avx:
198bc3d5698SJohn Baldwin	movl	$0xefffe7ff,%eax
199bc3d5698SJohn Baldwin	andl	%eax,%r9d
200bc3d5698SJohn Baldwin	movl	$0x3fdeffdf,%eax
201bc3d5698SJohn Baldwin	andl	%eax,8(%rdi)
202bc3d5698SJohn Baldwin.Ldone:
203bc3d5698SJohn Baldwin	shlq	$32,%r9
204bc3d5698SJohn Baldwin	movl	%r10d,%eax
205bc3d5698SJohn Baldwin	movq	%r8,%rbx
206bc3d5698SJohn Baldwin.cfi_restore	%rbx
207bc3d5698SJohn Baldwin	orq	%r9,%rax
208bc3d5698SJohn Baldwin	.byte	0xf3,0xc3
209bc3d5698SJohn Baldwin.cfi_endproc
210bc3d5698SJohn Baldwin.size	OPENSSL_ia32_cpuid,.-OPENSSL_ia32_cpuid
211bc3d5698SJohn Baldwin
212bc3d5698SJohn Baldwin.globl	OPENSSL_cleanse
213bc3d5698SJohn Baldwin.type	OPENSSL_cleanse,@function
214bc3d5698SJohn Baldwin.align	16
215bc3d5698SJohn BaldwinOPENSSL_cleanse:
216*c0855eaaSJohn Baldwin.cfi_startproc
217*c0855eaaSJohn Baldwin.byte	243,15,30,250
218bc3d5698SJohn Baldwin	xorq	%rax,%rax
219bc3d5698SJohn Baldwin	cmpq	$15,%rsi
220bc3d5698SJohn Baldwin	jae	.Lot
221bc3d5698SJohn Baldwin	cmpq	$0,%rsi
222bc3d5698SJohn Baldwin	je	.Lret
223bc3d5698SJohn Baldwin.Little:
224bc3d5698SJohn Baldwin	movb	%al,(%rdi)
225bc3d5698SJohn Baldwin	subq	$1,%rsi
226bc3d5698SJohn Baldwin	leaq	1(%rdi),%rdi
227bc3d5698SJohn Baldwin	jnz	.Little
228bc3d5698SJohn Baldwin.Lret:
229bc3d5698SJohn Baldwin	.byte	0xf3,0xc3
230bc3d5698SJohn Baldwin.align	16
231bc3d5698SJohn Baldwin.Lot:
232bc3d5698SJohn Baldwin	testq	$7,%rdi
233bc3d5698SJohn Baldwin	jz	.Laligned
234bc3d5698SJohn Baldwin	movb	%al,(%rdi)
235bc3d5698SJohn Baldwin	leaq	-1(%rsi),%rsi
236bc3d5698SJohn Baldwin	leaq	1(%rdi),%rdi
237bc3d5698SJohn Baldwin	jmp	.Lot
238bc3d5698SJohn Baldwin.Laligned:
239bc3d5698SJohn Baldwin	movq	%rax,(%rdi)
240bc3d5698SJohn Baldwin	leaq	-8(%rsi),%rsi
241bc3d5698SJohn Baldwin	testq	$-8,%rsi
242bc3d5698SJohn Baldwin	leaq	8(%rdi),%rdi
243bc3d5698SJohn Baldwin	jnz	.Laligned
244bc3d5698SJohn Baldwin	cmpq	$0,%rsi
245bc3d5698SJohn Baldwin	jne	.Little
246bc3d5698SJohn Baldwin	.byte	0xf3,0xc3
247*c0855eaaSJohn Baldwin.cfi_endproc
248bc3d5698SJohn Baldwin.size	OPENSSL_cleanse,.-OPENSSL_cleanse
249bc3d5698SJohn Baldwin
250bc3d5698SJohn Baldwin.globl	CRYPTO_memcmp
251bc3d5698SJohn Baldwin.type	CRYPTO_memcmp,@function
252bc3d5698SJohn Baldwin.align	16
253bc3d5698SJohn BaldwinCRYPTO_memcmp:
254*c0855eaaSJohn Baldwin.cfi_startproc
255*c0855eaaSJohn Baldwin.byte	243,15,30,250
256bc3d5698SJohn Baldwin	xorq	%rax,%rax
257bc3d5698SJohn Baldwin	xorq	%r10,%r10
258bc3d5698SJohn Baldwin	cmpq	$0,%rdx
259bc3d5698SJohn Baldwin	je	.Lno_data
260bc3d5698SJohn Baldwin	cmpq	$16,%rdx
261bc3d5698SJohn Baldwin	jne	.Loop_cmp
262bc3d5698SJohn Baldwin	movq	(%rdi),%r10
263bc3d5698SJohn Baldwin	movq	8(%rdi),%r11
264bc3d5698SJohn Baldwin	movq	$1,%rdx
265bc3d5698SJohn Baldwin	xorq	(%rsi),%r10
266bc3d5698SJohn Baldwin	xorq	8(%rsi),%r11
267bc3d5698SJohn Baldwin	orq	%r11,%r10
268bc3d5698SJohn Baldwin	cmovnzq	%rdx,%rax
269bc3d5698SJohn Baldwin	.byte	0xf3,0xc3
270bc3d5698SJohn Baldwin
271bc3d5698SJohn Baldwin.align	16
272bc3d5698SJohn Baldwin.Loop_cmp:
273bc3d5698SJohn Baldwin	movb	(%rdi),%r10b
274bc3d5698SJohn Baldwin	leaq	1(%rdi),%rdi
275bc3d5698SJohn Baldwin	xorb	(%rsi),%r10b
276bc3d5698SJohn Baldwin	leaq	1(%rsi),%rsi
277bc3d5698SJohn Baldwin	orb	%r10b,%al
278bc3d5698SJohn Baldwin	decq	%rdx
279bc3d5698SJohn Baldwin	jnz	.Loop_cmp
280bc3d5698SJohn Baldwin	negq	%rax
281bc3d5698SJohn Baldwin	shrq	$63,%rax
282bc3d5698SJohn Baldwin.Lno_data:
283bc3d5698SJohn Baldwin	.byte	0xf3,0xc3
284*c0855eaaSJohn Baldwin.cfi_endproc
285bc3d5698SJohn Baldwin.size	CRYPTO_memcmp,.-CRYPTO_memcmp
286bc3d5698SJohn Baldwin.globl	OPENSSL_wipe_cpu
287bc3d5698SJohn Baldwin.type	OPENSSL_wipe_cpu,@function
288bc3d5698SJohn Baldwin.align	16
289bc3d5698SJohn BaldwinOPENSSL_wipe_cpu:
290*c0855eaaSJohn Baldwin.cfi_startproc
291*c0855eaaSJohn Baldwin.byte	243,15,30,250
292bc3d5698SJohn Baldwin	pxor	%xmm0,%xmm0
293bc3d5698SJohn Baldwin	pxor	%xmm1,%xmm1
294bc3d5698SJohn Baldwin	pxor	%xmm2,%xmm2
295bc3d5698SJohn Baldwin	pxor	%xmm3,%xmm3
296bc3d5698SJohn Baldwin	pxor	%xmm4,%xmm4
297bc3d5698SJohn Baldwin	pxor	%xmm5,%xmm5
298bc3d5698SJohn Baldwin	pxor	%xmm6,%xmm6
299bc3d5698SJohn Baldwin	pxor	%xmm7,%xmm7
300bc3d5698SJohn Baldwin	pxor	%xmm8,%xmm8
301bc3d5698SJohn Baldwin	pxor	%xmm9,%xmm9
302bc3d5698SJohn Baldwin	pxor	%xmm10,%xmm10
303bc3d5698SJohn Baldwin	pxor	%xmm11,%xmm11
304bc3d5698SJohn Baldwin	pxor	%xmm12,%xmm12
305bc3d5698SJohn Baldwin	pxor	%xmm13,%xmm13
306bc3d5698SJohn Baldwin	pxor	%xmm14,%xmm14
307bc3d5698SJohn Baldwin	pxor	%xmm15,%xmm15
308bc3d5698SJohn Baldwin	xorq	%rcx,%rcx
309bc3d5698SJohn Baldwin	xorq	%rdx,%rdx
310bc3d5698SJohn Baldwin	xorq	%rsi,%rsi
311bc3d5698SJohn Baldwin	xorq	%rdi,%rdi
312bc3d5698SJohn Baldwin	xorq	%r8,%r8
313bc3d5698SJohn Baldwin	xorq	%r9,%r9
314bc3d5698SJohn Baldwin	xorq	%r10,%r10
315bc3d5698SJohn Baldwin	xorq	%r11,%r11
316bc3d5698SJohn Baldwin	leaq	8(%rsp),%rax
317bc3d5698SJohn Baldwin	.byte	0xf3,0xc3
318*c0855eaaSJohn Baldwin.cfi_endproc
319bc3d5698SJohn Baldwin.size	OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu
320bc3d5698SJohn Baldwin.globl	OPENSSL_instrument_bus
321bc3d5698SJohn Baldwin.type	OPENSSL_instrument_bus,@function
322bc3d5698SJohn Baldwin.align	16
323bc3d5698SJohn BaldwinOPENSSL_instrument_bus:
324*c0855eaaSJohn Baldwin.cfi_startproc
325*c0855eaaSJohn Baldwin.byte	243,15,30,250
326bc3d5698SJohn Baldwin	movq	%rdi,%r10
327bc3d5698SJohn Baldwin	movq	%rsi,%rcx
328bc3d5698SJohn Baldwin	movq	%rsi,%r11
329bc3d5698SJohn Baldwin
330bc3d5698SJohn Baldwin	rdtsc
331bc3d5698SJohn Baldwin	movl	%eax,%r8d
332bc3d5698SJohn Baldwin	movl	$0,%r9d
333bc3d5698SJohn Baldwin	clflush	(%r10)
334bc3d5698SJohn Baldwin.byte	0xf0
335bc3d5698SJohn Baldwin	addl	%r9d,(%r10)
336bc3d5698SJohn Baldwin	jmp	.Loop
337bc3d5698SJohn Baldwin.align	16
338bc3d5698SJohn Baldwin.Loop:	rdtsc
339bc3d5698SJohn Baldwin	movl	%eax,%edx
340bc3d5698SJohn Baldwin	subl	%r8d,%eax
341bc3d5698SJohn Baldwin	movl	%edx,%r8d
342bc3d5698SJohn Baldwin	movl	%eax,%r9d
343bc3d5698SJohn Baldwin	clflush	(%r10)
344bc3d5698SJohn Baldwin.byte	0xf0
345bc3d5698SJohn Baldwin	addl	%eax,(%r10)
346bc3d5698SJohn Baldwin	leaq	4(%r10),%r10
347bc3d5698SJohn Baldwin	subq	$1,%rcx
348bc3d5698SJohn Baldwin	jnz	.Loop
349bc3d5698SJohn Baldwin
350bc3d5698SJohn Baldwin	movq	%r11,%rax
351bc3d5698SJohn Baldwin	.byte	0xf3,0xc3
352*c0855eaaSJohn Baldwin.cfi_endproc
353bc3d5698SJohn Baldwin.size	OPENSSL_instrument_bus,.-OPENSSL_instrument_bus
354bc3d5698SJohn Baldwin
355bc3d5698SJohn Baldwin.globl	OPENSSL_instrument_bus2
356bc3d5698SJohn Baldwin.type	OPENSSL_instrument_bus2,@function
357bc3d5698SJohn Baldwin.align	16
358bc3d5698SJohn BaldwinOPENSSL_instrument_bus2:
359*c0855eaaSJohn Baldwin.cfi_startproc
360*c0855eaaSJohn Baldwin.byte	243,15,30,250
361bc3d5698SJohn Baldwin	movq	%rdi,%r10
362bc3d5698SJohn Baldwin	movq	%rsi,%rcx
363bc3d5698SJohn Baldwin	movq	%rdx,%r11
364bc3d5698SJohn Baldwin	movq	%rcx,8(%rsp)
365bc3d5698SJohn Baldwin
366bc3d5698SJohn Baldwin	rdtsc
367bc3d5698SJohn Baldwin	movl	%eax,%r8d
368bc3d5698SJohn Baldwin	movl	$0,%r9d
369bc3d5698SJohn Baldwin
370bc3d5698SJohn Baldwin	clflush	(%r10)
371bc3d5698SJohn Baldwin.byte	0xf0
372bc3d5698SJohn Baldwin	addl	%r9d,(%r10)
373bc3d5698SJohn Baldwin
374bc3d5698SJohn Baldwin	rdtsc
375bc3d5698SJohn Baldwin	movl	%eax,%edx
376bc3d5698SJohn Baldwin	subl	%r8d,%eax
377bc3d5698SJohn Baldwin	movl	%edx,%r8d
378bc3d5698SJohn Baldwin	movl	%eax,%r9d
379bc3d5698SJohn Baldwin.Loop2:
380bc3d5698SJohn Baldwin	clflush	(%r10)
381bc3d5698SJohn Baldwin.byte	0xf0
382bc3d5698SJohn Baldwin	addl	%eax,(%r10)
383bc3d5698SJohn Baldwin
384bc3d5698SJohn Baldwin	subq	$1,%r11
385bc3d5698SJohn Baldwin	jz	.Ldone2
386bc3d5698SJohn Baldwin
387bc3d5698SJohn Baldwin	rdtsc
388bc3d5698SJohn Baldwin	movl	%eax,%edx
389bc3d5698SJohn Baldwin	subl	%r8d,%eax
390bc3d5698SJohn Baldwin	movl	%edx,%r8d
391bc3d5698SJohn Baldwin	cmpl	%r9d,%eax
392bc3d5698SJohn Baldwin	movl	%eax,%r9d
393bc3d5698SJohn Baldwin	movl	$0,%edx
394bc3d5698SJohn Baldwin	setne	%dl
395bc3d5698SJohn Baldwin	subq	%rdx,%rcx
396bc3d5698SJohn Baldwin	leaq	(%r10,%rdx,4),%r10
397bc3d5698SJohn Baldwin	jnz	.Loop2
398bc3d5698SJohn Baldwin
399bc3d5698SJohn Baldwin.Ldone2:
400bc3d5698SJohn Baldwin	movq	8(%rsp),%rax
401bc3d5698SJohn Baldwin	subq	%rcx,%rax
402bc3d5698SJohn Baldwin	.byte	0xf3,0xc3
403*c0855eaaSJohn Baldwin.cfi_endproc
404bc3d5698SJohn Baldwin.size	OPENSSL_instrument_bus2,.-OPENSSL_instrument_bus2
405bc3d5698SJohn Baldwin.globl	OPENSSL_ia32_rdrand_bytes
406bc3d5698SJohn Baldwin.type	OPENSSL_ia32_rdrand_bytes,@function
407bc3d5698SJohn Baldwin.align	16
408bc3d5698SJohn BaldwinOPENSSL_ia32_rdrand_bytes:
409*c0855eaaSJohn Baldwin.cfi_startproc
410*c0855eaaSJohn Baldwin.byte	243,15,30,250
411bc3d5698SJohn Baldwin	xorq	%rax,%rax
412bc3d5698SJohn Baldwin	cmpq	$0,%rsi
413bc3d5698SJohn Baldwin	je	.Ldone_rdrand_bytes
414bc3d5698SJohn Baldwin
415bc3d5698SJohn Baldwin	movq	$8,%r11
416bc3d5698SJohn Baldwin.Loop_rdrand_bytes:
417bc3d5698SJohn Baldwin.byte	73,15,199,242
418bc3d5698SJohn Baldwin	jc	.Lbreak_rdrand_bytes
419bc3d5698SJohn Baldwin	decq	%r11
420bc3d5698SJohn Baldwin	jnz	.Loop_rdrand_bytes
421bc3d5698SJohn Baldwin	jmp	.Ldone_rdrand_bytes
422bc3d5698SJohn Baldwin
423bc3d5698SJohn Baldwin.align	16
424bc3d5698SJohn Baldwin.Lbreak_rdrand_bytes:
425bc3d5698SJohn Baldwin	cmpq	$8,%rsi
426bc3d5698SJohn Baldwin	jb	.Ltail_rdrand_bytes
427bc3d5698SJohn Baldwin	movq	%r10,(%rdi)
428bc3d5698SJohn Baldwin	leaq	8(%rdi),%rdi
429bc3d5698SJohn Baldwin	addq	$8,%rax
430bc3d5698SJohn Baldwin	subq	$8,%rsi
431bc3d5698SJohn Baldwin	jz	.Ldone_rdrand_bytes
432bc3d5698SJohn Baldwin	movq	$8,%r11
433bc3d5698SJohn Baldwin	jmp	.Loop_rdrand_bytes
434bc3d5698SJohn Baldwin
435bc3d5698SJohn Baldwin.align	16
436bc3d5698SJohn Baldwin.Ltail_rdrand_bytes:
437bc3d5698SJohn Baldwin	movb	%r10b,(%rdi)
438bc3d5698SJohn Baldwin	leaq	1(%rdi),%rdi
439bc3d5698SJohn Baldwin	incq	%rax
440bc3d5698SJohn Baldwin	shrq	$8,%r10
441bc3d5698SJohn Baldwin	decq	%rsi
442bc3d5698SJohn Baldwin	jnz	.Ltail_rdrand_bytes
443bc3d5698SJohn Baldwin
444bc3d5698SJohn Baldwin.Ldone_rdrand_bytes:
445bc3d5698SJohn Baldwin	xorq	%r10,%r10
446bc3d5698SJohn Baldwin	.byte	0xf3,0xc3
447*c0855eaaSJohn Baldwin.cfi_endproc
448bc3d5698SJohn Baldwin.size	OPENSSL_ia32_rdrand_bytes,.-OPENSSL_ia32_rdrand_bytes
449bc3d5698SJohn Baldwin.globl	OPENSSL_ia32_rdseed_bytes
450bc3d5698SJohn Baldwin.type	OPENSSL_ia32_rdseed_bytes,@function
451bc3d5698SJohn Baldwin.align	16
452bc3d5698SJohn BaldwinOPENSSL_ia32_rdseed_bytes:
453*c0855eaaSJohn Baldwin.cfi_startproc
454*c0855eaaSJohn Baldwin.byte	243,15,30,250
455bc3d5698SJohn Baldwin	xorq	%rax,%rax
456bc3d5698SJohn Baldwin	cmpq	$0,%rsi
457bc3d5698SJohn Baldwin	je	.Ldone_rdseed_bytes
458bc3d5698SJohn Baldwin
459bc3d5698SJohn Baldwin	movq	$8,%r11
460bc3d5698SJohn Baldwin.Loop_rdseed_bytes:
461bc3d5698SJohn Baldwin.byte	73,15,199,250
462bc3d5698SJohn Baldwin	jc	.Lbreak_rdseed_bytes
463bc3d5698SJohn Baldwin	decq	%r11
464bc3d5698SJohn Baldwin	jnz	.Loop_rdseed_bytes
465bc3d5698SJohn Baldwin	jmp	.Ldone_rdseed_bytes
466bc3d5698SJohn Baldwin
467bc3d5698SJohn Baldwin.align	16
468bc3d5698SJohn Baldwin.Lbreak_rdseed_bytes:
469bc3d5698SJohn Baldwin	cmpq	$8,%rsi
470bc3d5698SJohn Baldwin	jb	.Ltail_rdseed_bytes
471bc3d5698SJohn Baldwin	movq	%r10,(%rdi)
472bc3d5698SJohn Baldwin	leaq	8(%rdi),%rdi
473bc3d5698SJohn Baldwin	addq	$8,%rax
474bc3d5698SJohn Baldwin	subq	$8,%rsi
475bc3d5698SJohn Baldwin	jz	.Ldone_rdseed_bytes
476bc3d5698SJohn Baldwin	movq	$8,%r11
477bc3d5698SJohn Baldwin	jmp	.Loop_rdseed_bytes
478bc3d5698SJohn Baldwin
479bc3d5698SJohn Baldwin.align	16
480bc3d5698SJohn Baldwin.Ltail_rdseed_bytes:
481bc3d5698SJohn Baldwin	movb	%r10b,(%rdi)
482bc3d5698SJohn Baldwin	leaq	1(%rdi),%rdi
483bc3d5698SJohn Baldwin	incq	%rax
484bc3d5698SJohn Baldwin	shrq	$8,%r10
485bc3d5698SJohn Baldwin	decq	%rsi
486bc3d5698SJohn Baldwin	jnz	.Ltail_rdseed_bytes
487bc3d5698SJohn Baldwin
488bc3d5698SJohn Baldwin.Ldone_rdseed_bytes:
489bc3d5698SJohn Baldwin	xorq	%r10,%r10
490bc3d5698SJohn Baldwin	.byte	0xf3,0xc3
491*c0855eaaSJohn Baldwin.cfi_endproc
492bc3d5698SJohn Baldwin.size	OPENSSL_ia32_rdseed_bytes,.-OPENSSL_ia32_rdseed_bytes
493*c0855eaaSJohn Baldwin	.section ".note.gnu.property", "a"
494*c0855eaaSJohn Baldwin	.p2align 3
495*c0855eaaSJohn Baldwin	.long 1f - 0f
496*c0855eaaSJohn Baldwin	.long 4f - 1f
497*c0855eaaSJohn Baldwin	.long 5
498*c0855eaaSJohn Baldwin0:
499*c0855eaaSJohn Baldwin	# "GNU" encoded with .byte, since .asciz isn't supported
500*c0855eaaSJohn Baldwin	# on Solaris.
501*c0855eaaSJohn Baldwin	.byte 0x47
502*c0855eaaSJohn Baldwin	.byte 0x4e
503*c0855eaaSJohn Baldwin	.byte 0x55
504*c0855eaaSJohn Baldwin	.byte 0
505*c0855eaaSJohn Baldwin1:
506*c0855eaaSJohn Baldwin	.p2align 3
507*c0855eaaSJohn Baldwin	.long 0xc0000002
508*c0855eaaSJohn Baldwin	.long 3f - 2f
509*c0855eaaSJohn Baldwin2:
510*c0855eaaSJohn Baldwin	.long 3
511*c0855eaaSJohn Baldwin3:
512*c0855eaaSJohn Baldwin	.p2align 3
513*c0855eaaSJohn Baldwin4:
514