]> git.ipfire.org Git - thirdparty/openssl.git/blob - crypto/x86_64cpuid.pl
Rename amd64 modules to x86_64 and update RC4 implementation.
[thirdparty/openssl.git] / crypto / x86_64cpuid.pl
1 #!/usr/bin/env perl
2
3 $output=shift;
4 $win64a=1 if ($output =~ /win64a\.[s|asm]/);
5 open STDOUT,">$output" || die "can't open $output: $!";
6
7 print<<___ if(defined($win64a));
8 _TEXT SEGMENT
9 PUBLIC OPENSSL_rdtsc
10 ALIGN 16
11 OPENSSL_rdtsc PROC
12 rdtsc
13 shl rdx,32
14 or rax,rdx
15 ret
16 OPENSSL_rdtsc ENDP
17
18 PUBLIC OPENSSL_atomic_add
19 ALIGN 16
20 OPENSSL_atomic_add PROC
21 mov eax,DWORD PTR[rcx]
22 \$Lspin: lea r8,DWORD PTR[rdx+rax]
23 lock cmpxchg DWORD PTR[rcx],r8d
24 jne \$Lspin
25 mov eax,r8d
26 cdqe
27 ret
28 OPENSSL_atomic_add ENDP
29
30 PUBLIC OPENSSL_wipe_cpu
31 ALIGN 16
32 OPENSSL_wipe_cpu PROC
33 pxor xmm0,xmm0
34 pxor xmm1,xmm1
35 pxor xmm2,xmm2
36 pxor xmm3,xmm3
37 pxor xmm4,xmm4
38 pxor xmm5,xmm5
39 xor rcx,rcx
40 xor rdx,rdx
41 xor r8,r8
42 xor r9,r9
43 xor r10,r10
44 xor r11,r11
45 lea rax,QWORD PTR[rsp+8]
46 ret
47 OPENSSL_wipe_cpu ENDP
48
49 OPENSSL_ia32_cpuid PROC
50 mov r8,rbx
51 mov eax,1
52 cpuid
53 shl rcx,32
54 mov eax,edx
55 mov rbx,r8
56 or rax,rcx
57 ret
58 OPENSSL_ia32_cpuid ENDP
59 _TEXT ENDS
60
61 CRT\$XIU SEGMENT
62 EXTRN OPENSSL_cpuid_setup:PROC
63 DQ OPENSSL_cpuid_setup
64 CRT\$XIU ENDS
65 END
66 ___
67 print<<___ if(!defined($win64a));
68 .text
69 .globl OPENSSL_rdtsc
70 .align 16
71 OPENSSL_rdtsc:
72 rdtsc
73 shl \$32,%rdx
74 or %rdx,%rax
75 ret
76 .size OPENSSL_rdtsc,.-OPENSSL_rdtsc
77
78 .globl OPENSSL_atomic_add
79 .type OPENSSL_atomic_add,\@function
80 .align 16
81 OPENSSL_atomic_add:
82 movl (%rdi),%eax
83 .Lspin: lea (%rsi,%rax),%r8
84 lock; cmpxchg %r8d,(%rdi)
85 jne .Lspin
86 mov %r8d,%eax
87 cdqe
88 ret
89 .size OPENSSL_atomic_add,.-OPENSSL_atomic_add
90
91 .globl OPENSSL_wipe_cpu
92 .type OPENSSL_wipe_cpu,\@function
93 .align 16
94 OPENSSL_wipe_cpu:
95 pxor %xmm0,%xmm0
96 pxor %xmm1,%xmm1
97 pxor %xmm2,%xmm2
98 pxor %xmm3,%xmm3
99 pxor %xmm4,%xmm4
100 pxor %xmm5,%xmm5
101 pxor %xmm6,%xmm6
102 pxor %xmm7,%xmm7
103 pxor %xmm8,%xmm8
104 pxor %xmm9,%xmm9
105 pxor %xmm10,%xmm10
106 pxor %xmm11,%xmm11
107 pxor %xmm12,%xmm12
108 pxor %xmm13,%xmm13
109 pxor %xmm14,%xmm14
110 pxor %xmm15,%xmm15
111 xor %rcx,%rcx
112 xor %rdx,%rdx
113 xor %rsi,%rsi
114 xor %rdi,%rdi
115 xor %r8,%r8
116 xor %r9,%r9
117 xor %r10,%r10
118 xor %r11,%r11
119 lea 8(%rsp),%rax
120 ret
121 .size OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu
122
123 .globl OPENSSL_ia32_cpuid
124 .align 16
125 OPENSSL_ia32_cpuid:
126 mov %rbx,%r8
127 mov \$1,%eax
128 cpuid
129 shl \$32,%rcx
130 mov %edx,%eax
131 mov %r8,%rbx
132 or %rcx,%rax
133 ret
134 .size OPENSSL_ia32_cpuid,.-OPENSSL_ia32_cpuid
135
136 .section .init
137 call OPENSSL_cpuid_setup
138 ___