x86_64cpuid.S revision 1.1
1.text 2 3.globl OPENSSL_atomic_add 4.type OPENSSL_atomic_add,@function 5.align 16 6OPENSSL_atomic_add: 7 movl (%rdi),%eax 8.Lspin: leaq (%rsi,%rax,1),%r8 9.byte 0xf0 10 cmpxchgl %r8d,(%rdi) 11 jne .Lspin 12 movl %r8d,%eax 13.byte 0x48,0x98 14 .byte 0xf3,0xc3 15.size OPENSSL_atomic_add,.-OPENSSL_atomic_add 16 17.globl OPENSSL_rdtsc 18.type OPENSSL_rdtsc,@function 19.align 16 20OPENSSL_rdtsc: 21 rdtsc 22 shlq $32,%rdx 23 orq %rdx,%rax 24 .byte 0xf3,0xc3 25.size OPENSSL_rdtsc,.-OPENSSL_rdtsc 26 27.globl OPENSSL_ia32_cpuid 28.type OPENSSL_ia32_cpuid,@function 29.align 16 30OPENSSL_ia32_cpuid: 31 movq %rbx,%r8 32 33 xorl %eax,%eax 34 cpuid 35 movl %eax,%r11d 36 37 xorl %eax,%eax 38 cmpl $1970169159,%ebx 39 setne %al 40 movl %eax,%r9d 41 cmpl $1231384169,%edx 42 setne %al 43 orl %eax,%r9d 44 cmpl $1818588270,%ecx 45 setne %al 46 orl %eax,%r9d 47 jz .Lintel 48 49 cmpl $1752462657,%ebx 50 setne %al 51 movl %eax,%r10d 52 cmpl $1769238117,%edx 53 setne %al 54 orl %eax,%r10d 55 cmpl $1145913699,%ecx 56 setne %al 57 orl %eax,%r10d 58 jnz .Lintel 59 60 61 movl $2147483648,%eax 62 cpuid 63 cmpl $2147483656,%eax 64 jb .Lintel 65 66 movl $2147483656,%eax 67 cpuid 68 movzbq %cl,%r10 69 incq %r10 70 71 movl $1,%eax 72 cpuid 73 btl $28,%edx 74 jnc .Ldone 75 shrl $16,%ebx 76 cmpb %r10b,%bl 77 ja .Ldone 78 andl $4026531839,%edx 79 jmp .Ldone 80 81.Lintel: 82 cmpl $4,%r11d 83 movl $-1,%r10d 84 jb .Lnocacheinfo 85 86 movl $4,%eax 87 movl $0,%ecx 88 cpuid 89 movl %eax,%r10d 90 shrl $14,%r10d 91 andl $4095,%r10d 92 93.Lnocacheinfo: 94 movl $1,%eax 95 cpuid 96 cmpl $0,%r9d 97 jne .Lnotintel 98 orl $1048576,%edx 99 andb $15,%ah 100 cmpb $15,%ah 101 je .Lnotintel 102 orl $1073741824,%edx 103.Lnotintel: 104 btl $28,%edx 105 jnc .Ldone 106 andl $4026531839,%edx 107 cmpl $0,%r10d 108 je .Ldone 109 110 orl $268435456,%edx 111 shrl $16,%ebx 112 cmpb $1,%bl 113 ja .Ldone 114 andl $4026531839,%edx 115.Ldone: 116 shlq $32,%rcx 117 movl %edx,%eax 118 movq %r8,%rbx 119 orq %rcx,%rax 120 .byte 0xf3,0xc3 121.size OPENSSL_ia32_cpuid,.-OPENSSL_ia32_cpuid 122 123.globl OPENSSL_cleanse 124.type OPENSSL_cleanse,@function 125.align 16 126OPENSSL_cleanse: 127 xorq %rax,%rax 128 cmpq $15,%rsi 129 jae .Lot 130 cmpq $0,%rsi 131 je .Lret 132.Little: 133 movb %al,(%rdi) 134 subq $1,%rsi 135 leaq 1(%rdi),%rdi 136 jnz .Little 137.Lret: 138 .byte 0xf3,0xc3 139.align 16 140.Lot: 141 testq $7,%rdi 142 jz .Laligned 143 movb %al,(%rdi) 144 leaq -1(%rsi),%rsi 145 leaq 1(%rdi),%rdi 146 jmp .Lot 147.Laligned: 148 movq %rax,(%rdi) 149 leaq -8(%rsi),%rsi 150 testq $-8,%rsi 151 leaq 8(%rdi),%rdi 152 jnz .Laligned 153 cmpq $0,%rsi 154 jne .Little 155 .byte 0xf3,0xc3 156.size OPENSSL_cleanse,.-OPENSSL_cleanse 157.globl OPENSSL_wipe_cpu 158.type OPENSSL_wipe_cpu,@function 159.align 16 160OPENSSL_wipe_cpu: 161 pxor %xmm0,%xmm0 162 pxor %xmm1,%xmm1 163 pxor %xmm2,%xmm2 164 pxor %xmm3,%xmm3 165 pxor %xmm4,%xmm4 166 pxor %xmm5,%xmm5 167 pxor %xmm6,%xmm6 168 pxor %xmm7,%xmm7 169 pxor %xmm8,%xmm8 170 pxor %xmm9,%xmm9 171 pxor %xmm10,%xmm10 172 pxor %xmm11,%xmm11 173 pxor %xmm12,%xmm12 174 pxor %xmm13,%xmm13 175 pxor %xmm14,%xmm14 176 pxor %xmm15,%xmm15 177 xorq %rcx,%rcx 178 xorq %rdx,%rdx 179 xorq %rsi,%rsi 180 xorq %rdi,%rdi 181 xorq %r8,%r8 182 xorq %r9,%r9 183 xorq %r10,%r10 184 xorq %r11,%r11 185 leaq 8(%rsp),%rax 186 .byte 0xf3,0xc3 187.size OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu 188