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