x86_64cpuid.pl revision 392aa7cc7d2b122614c5393c3e357da07fd07af3
1656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#!/usr/bin/env perl 2656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 3221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$flavour = shift; 4221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$output = shift; 5221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromif ($flavour =~ /\./) { $output = $flavour; undef $flavour; } 6656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 7221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/); 8221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 9221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; 10392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or 11392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom( $xlate="${dir}perlasm/x86_64-xlate.pl" and -f $xlate) or 12392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstromdie "can't locate x86_64-xlate.pl"; 13392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 14392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstromopen STDOUT,"| $^X $xlate $flavour $output"; 15392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 16392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom($arg1,$arg2,$arg3,$arg4)=$win64?("%rcx","%rdx","%r8", "%r9") : # Win64 order 17392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom ("%rdi","%rsi","%rdx","%rcx"); # Unix order 18221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 19221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromprint<<___; 20221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.extern OPENSSL_cpuid_setup 21392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.hidden OPENSSL_cpuid_setup 22221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.section .init 23221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom call OPENSSL_cpuid_setup 24656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 25392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.hidden OPENSSL_ia32cap_P 26392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.comm OPENSSL_ia32cap_P,8,4 27392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 28656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.text 29656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 30656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.globl OPENSSL_atomic_add 31221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.type OPENSSL_atomic_add,\@abi-omnipotent 32656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.align 16 33656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectOPENSSL_atomic_add: 34221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom movl ($arg1),%eax 35221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.Lspin: leaq ($arg2,%rax),%r8 36221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom .byte 0xf0 # lock 37221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom cmpxchgl %r8d,($arg1) 38656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project jne .Lspin 39656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project movl %r8d,%eax 40221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom .byte 0x48,0x98 # cltq/cdqe 41656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ret 42656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.size OPENSSL_atomic_add,.-OPENSSL_atomic_add 43656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 44656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.globl OPENSSL_rdtsc 45656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.type OPENSSL_rdtsc,\@abi-omnipotent 46656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.align 16 47656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectOPENSSL_rdtsc: 48656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rdtsc 49656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project shl \$32,%rdx 50656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project or %rdx,%rax 51656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ret 52656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.size OPENSSL_rdtsc,.-OPENSSL_rdtsc 53656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 54656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.globl OPENSSL_ia32_cpuid 55656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.type OPENSSL_ia32_cpuid,\@abi-omnipotent 56656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.align 16 57656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectOPENSSL_ia32_cpuid: 58392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom mov %rbx,%r8 # save %rbx 59656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 60656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project xor %eax,%eax 61656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project cpuid 62221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov %eax,%r11d # max value for standard query level 63221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 64656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project xor %eax,%eax 65656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project cmp \$0x756e6547,%ebx # "Genu" 66656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project setne %al 67656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov %eax,%r9d 68656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project cmp \$0x49656e69,%edx # "ineI" 69656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project setne %al 70656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project or %eax,%r9d 71656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project cmp \$0x6c65746e,%ecx # "ntel" 72656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project setne %al 73221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom or %eax,%r9d # 0 indicates Intel CPU 74221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom jz .Lintel 75221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 76221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom cmp \$0x68747541,%ebx # "Auth" 77221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom setne %al 78221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov %eax,%r10d 79221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom cmp \$0x69746E65,%edx # "enti" 80221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom setne %al 81221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom or %eax,%r10d 82221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom cmp \$0x444D4163,%ecx # "cAMD" 83221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom setne %al 84221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom or %eax,%r10d # 0 indicates AMD CPU 85221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom jnz .Lintel 86221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 87221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom # AMD specific 88221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov \$0x80000000,%eax 89221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom cpuid 90392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom cmp \$0x80000001,%eax 91392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom jb .Lintel 92392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom mov %eax,%r10d 93392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom mov \$0x80000001,%eax 94392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom cpuid 95392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom or %ecx,%r9d 96392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom and \$0x00000801,%r9d # isolate AMD XOP bit, 1<<11 97392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 98392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom cmp \$0x80000008,%r10d 99221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom jb .Lintel 100221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 101221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov \$0x80000008,%eax 102221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom cpuid 103221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom movzb %cl,%r10 # number of cores - 1 104221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom inc %r10 # number of cores 105221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 106221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov \$1,%eax 107221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom cpuid 108221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom bt \$28,%edx # test hyper-threading bit 109392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom jnc .Lgeneric 110221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom shr \$16,%ebx # number of logical processors 111221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom cmp %r10b,%bl 112392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom ja .Lgeneric 113221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom and \$0xefffffff,%edx # ~(1<<28) 114392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom jmp .Lgeneric 115221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 116221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.Lintel: 117221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom cmp \$4,%r11d 118221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov \$-1,%r10d 119221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom jb .Lnocacheinfo 120221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 121221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov \$4,%eax 122221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov \$0,%ecx # query L1D 123221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom cpuid 124221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov %eax,%r10d 125221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom shr \$14,%r10d 126221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom and \$0xfff,%r10d # number of cores -1 per L1D 127656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 128221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.Lnocacheinfo: 129656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov \$1,%eax 130656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project cpuid 131392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom and \$0xbfefffff,%edx # force reserved bits to 0 132656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project cmp \$0,%r9d 133656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project jne .Lnotintel 134392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom or \$0x40000000,%edx # set reserved bit#30 on Intel CPUs 135656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and \$15,%ah 136656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project cmp \$15,%ah # examine Family ID 137392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom jne .Lnotintel 138392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom or \$0x00100000,%edx # set reserved bit#20 to engage RC4_CHAR 139656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.Lnotintel: 140656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bt \$28,%edx # test hyper-threading bit 141392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom jnc .Lgeneric 142221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom and \$0xefffffff,%edx # ~(1<<28) 143221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom cmp \$0,%r10d 144392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom je .Lgeneric 145221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 146221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom or \$0x10000000,%edx # 1<<28 147656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project shr \$16,%ebx 148656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project cmp \$1,%bl # see if cache is shared 149392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom ja .Lgeneric 150656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and \$0xefffffff,%edx # ~(1<<28) 151392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.Lgeneric: 152392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom and \$0x00000800,%r9d # isolate AMD XOP flag 153392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom and \$0xfffff7ff,%ecx 154392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom or %ecx,%r9d # merge AMD XOP flag 155392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 156392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom mov %edx,%r10d # %r9d:%r10d is copy of %ecx:%edx 157392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom bt \$27,%r9d # check OSXSAVE bit 158392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom jnc .Lclear_avx 159392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom xor %ecx,%ecx # XCR0 160392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom .byte 0x0f,0x01,0xd0 # xgetbv 161392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom and \$6,%eax # isolate XMM and YMM state support 162392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom cmp \$6,%eax 163392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom je .Ldone 164392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.Lclear_avx: 165392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom mov \$0xefffe7ff,%eax # ~(1<<28|1<<12|1<<11) 166392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom and %eax,%r9d # clear AVX, FMA and AMD XOP bits 167656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.Ldone: 168392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom shl \$32,%r9 169392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom mov %r10d,%eax 170392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom mov %r8,%rbx # restore %rbx 171392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom or %r9,%rax 172656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ret 173656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.size OPENSSL_ia32_cpuid,.-OPENSSL_ia32_cpuid 174221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 175221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.globl OPENSSL_cleanse 176221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.type OPENSSL_cleanse,\@abi-omnipotent 177221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align 16 178221304ee937bc0910948a8be1320cb8cc4eb6d36Brian CarlstromOPENSSL_cleanse: 179221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xor %rax,%rax 180221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom cmp \$15,$arg2 181221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom jae .Lot 182221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom cmp \$0,$arg2 183221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom je .Lret 184221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.Little: 185221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov %al,($arg1) 186221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sub \$1,$arg2 187221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lea 1($arg1),$arg1 188221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom jnz .Little 1893d3a1b8fcf46ca3bdb3d8f09acd6ef604624a30dBrian Carlstrom.Lret: 1903d3a1b8fcf46ca3bdb3d8f09acd6ef604624a30dBrian Carlstrom ret 191221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align 16 192221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.Lot: 193221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom test \$7,$arg1 194221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom jz .Laligned 195221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov %al,($arg1) 196221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lea -1($arg2),$arg2 197221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lea 1($arg1),$arg1 198221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom jmp .Lot 199221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.Laligned: 200221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov %rax,($arg1) 201221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lea -8($arg2),$arg2 202221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom test \$-8,$arg2 203221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lea 8($arg1),$arg1 204221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom jnz .Laligned 205221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom cmp \$0,$arg2 206221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom jne .Little 207221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ret 208221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.size OPENSSL_cleanse,.-OPENSSL_cleanse 209221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom___ 210221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 211221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromprint<<___ if (!$win64); 212221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.globl OPENSSL_wipe_cpu 213221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.type OPENSSL_wipe_cpu,\@abi-omnipotent 214221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align 16 215221304ee937bc0910948a8be1320cb8cc4eb6d36Brian CarlstromOPENSSL_wipe_cpu: 216221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pxor %xmm0,%xmm0 217221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pxor %xmm1,%xmm1 218221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pxor %xmm2,%xmm2 219221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pxor %xmm3,%xmm3 220221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pxor %xmm4,%xmm4 221221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pxor %xmm5,%xmm5 222221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pxor %xmm6,%xmm6 223221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pxor %xmm7,%xmm7 224221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pxor %xmm8,%xmm8 225221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pxor %xmm9,%xmm9 226221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pxor %xmm10,%xmm10 227221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pxor %xmm11,%xmm11 228221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pxor %xmm12,%xmm12 229221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pxor %xmm13,%xmm13 230221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pxor %xmm14,%xmm14 231221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pxor %xmm15,%xmm15 232221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xorq %rcx,%rcx 233221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xorq %rdx,%rdx 234221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xorq %rsi,%rsi 235221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xorq %rdi,%rdi 236221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xorq %r8,%r8 237221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xorq %r9,%r9 238221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xorq %r10,%r10 239221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xorq %r11,%r11 240221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom leaq 8(%rsp),%rax 241221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ret 242221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.size OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu 243656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project___ 244221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromprint<<___ if ($win64); 245221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.globl OPENSSL_wipe_cpu 246221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.type OPENSSL_wipe_cpu,\@abi-omnipotent 247221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align 16 248221304ee937bc0910948a8be1320cb8cc4eb6d36Brian CarlstromOPENSSL_wipe_cpu: 249221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pxor %xmm0,%xmm0 250221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pxor %xmm1,%xmm1 251221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pxor %xmm2,%xmm2 252221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pxor %xmm3,%xmm3 253221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pxor %xmm4,%xmm4 254221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pxor %xmm5,%xmm5 255221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xorq %rcx,%rcx 256221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xorq %rdx,%rdx 257221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xorq %r8,%r8 258221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xorq %r9,%r9 259221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xorq %r10,%r10 260221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xorq %r11,%r11 261221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom leaq 8(%rsp),%rax 262221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ret 263221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.size OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu 264221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom___ 265221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 266392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstromprint<<___; 267392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.globl OPENSSL_ia32_rdrand 268392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.type OPENSSL_ia32_rdrand,\@abi-omnipotent 269392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.align 16 270392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromOPENSSL_ia32_rdrand: 271392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom mov \$8,%ecx 272392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.Loop_rdrand: 273392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom rdrand %rax 274392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom jc .Lbreak_rdrand 275392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom loop .Loop_rdrand 276392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.Lbreak_rdrand: 277392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom cmp \$0,%rax 278392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom cmove %rcx,%rax 279392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom ret 280392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.size OPENSSL_ia32_rdrand,.-OPENSSL_ia32_rdrand 281392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom___ 282392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 283656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectclose STDOUT; # flush 284