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 1404ef91b390dfcc6125913e2f2af502d23d7a5112Brian Carlstromopen OUT,"| \"$^X\" $xlate $flavour $output"; 1504ef91b390dfcc6125913e2f2af502d23d7a5112Brian Carlstrom*STDOUT=*OUT; 16392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 17392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom($arg1,$arg2,$arg3,$arg4)=$win64?("%rcx","%rdx","%r8", "%r9") : # Win64 order 18392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom ("%rdi","%rsi","%rdx","%rcx"); # Unix order 19221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 20221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromprint<<___; 21221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.extern OPENSSL_cpuid_setup 22392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.hidden OPENSSL_cpuid_setup 23221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.section .init 24221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom call OPENSSL_cpuid_setup 25656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 26392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.hidden OPENSSL_ia32cap_P 27392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.comm OPENSSL_ia32cap_P,8,4 28392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 29656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.text 30656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 31656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.globl OPENSSL_atomic_add 32221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.type OPENSSL_atomic_add,\@abi-omnipotent 33656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.align 16 34656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectOPENSSL_atomic_add: 35221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom movl ($arg1),%eax 36221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.Lspin: leaq ($arg2,%rax),%r8 37221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom .byte 0xf0 # lock 38221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom cmpxchgl %r8d,($arg1) 39656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project jne .Lspin 40656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project movl %r8d,%eax 41221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom .byte 0x48,0x98 # cltq/cdqe 42656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ret 43656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.size OPENSSL_atomic_add,.-OPENSSL_atomic_add 44656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 45656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.globl OPENSSL_rdtsc 46656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.type OPENSSL_rdtsc,\@abi-omnipotent 47656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.align 16 48656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectOPENSSL_rdtsc: 49656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rdtsc 50656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project shl \$32,%rdx 51656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project or %rdx,%rax 52656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ret 53656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.size OPENSSL_rdtsc,.-OPENSSL_rdtsc 54656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 55656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.globl OPENSSL_ia32_cpuid 56656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.type OPENSSL_ia32_cpuid,\@abi-omnipotent 57656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.align 16 58656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectOPENSSL_ia32_cpuid: 59392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom mov %rbx,%r8 # save %rbx 60656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 61656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project xor %eax,%eax 62656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project cpuid 63221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov %eax,%r11d # max value for standard query level 64221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 65656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project xor %eax,%eax 66656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project cmp \$0x756e6547,%ebx # "Genu" 67656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project setne %al 68656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov %eax,%r9d 69656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project cmp \$0x49656e69,%edx # "ineI" 70656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project setne %al 71656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project or %eax,%r9d 72656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project cmp \$0x6c65746e,%ecx # "ntel" 73656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project setne %al 74221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom or %eax,%r9d # 0 indicates Intel CPU 75221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom jz .Lintel 76221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 77221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom cmp \$0x68747541,%ebx # "Auth" 78221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom setne %al 79221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov %eax,%r10d 80221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom cmp \$0x69746E65,%edx # "enti" 81221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom setne %al 82221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom or %eax,%r10d 83221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom cmp \$0x444D4163,%ecx # "cAMD" 84221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom setne %al 85221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom or %eax,%r10d # 0 indicates AMD CPU 86221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom jnz .Lintel 87221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 88221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom # AMD specific 89221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov \$0x80000000,%eax 90221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom cpuid 91392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom cmp \$0x80000001,%eax 92392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom jb .Lintel 93392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom mov %eax,%r10d 94392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom mov \$0x80000001,%eax 95392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom cpuid 96392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom or %ecx,%r9d 97392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom and \$0x00000801,%r9d # isolate AMD XOP bit, 1<<11 98392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 99392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom cmp \$0x80000008,%r10d 100221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom jb .Lintel 101221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 102221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov \$0x80000008,%eax 103221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom cpuid 104221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom movzb %cl,%r10 # number of cores - 1 105221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom inc %r10 # number of cores 106221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 107221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov \$1,%eax 108221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom cpuid 109221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom bt \$28,%edx # test hyper-threading bit 110392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom jnc .Lgeneric 111221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom shr \$16,%ebx # number of logical processors 112221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom cmp %r10b,%bl 113392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom ja .Lgeneric 114221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom and \$0xefffffff,%edx # ~(1<<28) 115392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom jmp .Lgeneric 116221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 117221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.Lintel: 118221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom cmp \$4,%r11d 119221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov \$-1,%r10d 120221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom jb .Lnocacheinfo 121221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 122221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov \$4,%eax 123221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov \$0,%ecx # query L1D 124221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom cpuid 125221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov %eax,%r10d 126221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom shr \$14,%r10d 127221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom and \$0xfff,%r10d # number of cores -1 per L1D 128656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 129221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.Lnocacheinfo: 130656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov \$1,%eax 131656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project cpuid 132392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom and \$0xbfefffff,%edx # force reserved bits to 0 133656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project cmp \$0,%r9d 134656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project jne .Lnotintel 135392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom or \$0x40000000,%edx # set reserved bit#30 on Intel CPUs 136656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and \$15,%ah 137656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project cmp \$15,%ah # examine Family ID 138392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom jne .Lnotintel 139392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom or \$0x00100000,%edx # set reserved bit#20 to engage RC4_CHAR 140656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.Lnotintel: 141656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bt \$28,%edx # test hyper-threading bit 142392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom jnc .Lgeneric 143221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom and \$0xefffffff,%edx # ~(1<<28) 144221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom cmp \$0,%r10d 145392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom je .Lgeneric 146221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 147221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom or \$0x10000000,%edx # 1<<28 148656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project shr \$16,%ebx 149656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project cmp \$1,%bl # see if cache is shared 150392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom ja .Lgeneric 151656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and \$0xefffffff,%edx # ~(1<<28) 152392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.Lgeneric: 153392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom and \$0x00000800,%r9d # isolate AMD XOP flag 154392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom and \$0xfffff7ff,%ecx 155392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom or %ecx,%r9d # merge AMD XOP flag 156392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 157392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom mov %edx,%r10d # %r9d:%r10d is copy of %ecx:%edx 158392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom bt \$27,%r9d # check OSXSAVE bit 159392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom jnc .Lclear_avx 160392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom xor %ecx,%ecx # XCR0 161392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom .byte 0x0f,0x01,0xd0 # xgetbv 162392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom and \$6,%eax # isolate XMM and YMM state support 163392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom cmp \$6,%eax 164392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom je .Ldone 165392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.Lclear_avx: 166392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom mov \$0xefffe7ff,%eax # ~(1<<28|1<<12|1<<11) 167392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom and %eax,%r9d # clear AVX, FMA and AMD XOP bits 168656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.Ldone: 169392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom shl \$32,%r9 170392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom mov %r10d,%eax 171392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom mov %r8,%rbx # restore %rbx 172392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom or %r9,%rax 173656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ret 174656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.size OPENSSL_ia32_cpuid,.-OPENSSL_ia32_cpuid 175221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 176221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.globl OPENSSL_cleanse 177221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.type OPENSSL_cleanse,\@abi-omnipotent 178221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align 16 179221304ee937bc0910948a8be1320cb8cc4eb6d36Brian CarlstromOPENSSL_cleanse: 180221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xor %rax,%rax 181221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom cmp \$15,$arg2 182221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom jae .Lot 183221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom cmp \$0,$arg2 184221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom je .Lret 185221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.Little: 186221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov %al,($arg1) 187221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sub \$1,$arg2 188221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lea 1($arg1),$arg1 189221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom jnz .Little 1903d3a1b8fcf46ca3bdb3d8f09acd6ef604624a30dBrian Carlstrom.Lret: 1913d3a1b8fcf46ca3bdb3d8f09acd6ef604624a30dBrian Carlstrom ret 192221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align 16 193221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.Lot: 194221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom test \$7,$arg1 195221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom jz .Laligned 196221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov %al,($arg1) 197221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lea -1($arg2),$arg2 198221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lea 1($arg1),$arg1 199221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom jmp .Lot 200221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.Laligned: 201221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mov %rax,($arg1) 202221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lea -8($arg2),$arg2 203221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom test \$-8,$arg2 204221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lea 8($arg1),$arg1 205221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom jnz .Laligned 206221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom cmp \$0,$arg2 207221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom jne .Little 208221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ret 209221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.size OPENSSL_cleanse,.-OPENSSL_cleanse 210221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom___ 211221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 212221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromprint<<___ if (!$win64); 213221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.globl OPENSSL_wipe_cpu 214221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.type OPENSSL_wipe_cpu,\@abi-omnipotent 215221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align 16 216221304ee937bc0910948a8be1320cb8cc4eb6d36Brian CarlstromOPENSSL_wipe_cpu: 217221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pxor %xmm0,%xmm0 218221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pxor %xmm1,%xmm1 219221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pxor %xmm2,%xmm2 220221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pxor %xmm3,%xmm3 221221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pxor %xmm4,%xmm4 222221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pxor %xmm5,%xmm5 223221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pxor %xmm6,%xmm6 224221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pxor %xmm7,%xmm7 225221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pxor %xmm8,%xmm8 226221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pxor %xmm9,%xmm9 227221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pxor %xmm10,%xmm10 228221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pxor %xmm11,%xmm11 229221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pxor %xmm12,%xmm12 230221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pxor %xmm13,%xmm13 231221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pxor %xmm14,%xmm14 232221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pxor %xmm15,%xmm15 233221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xorq %rcx,%rcx 234221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xorq %rdx,%rdx 235221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xorq %rsi,%rsi 236221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xorq %rdi,%rdi 237221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xorq %r8,%r8 238221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xorq %r9,%r9 239221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xorq %r10,%r10 240221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xorq %r11,%r11 241221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom leaq 8(%rsp),%rax 242221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ret 243221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.size OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu 244656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project___ 245221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromprint<<___ if ($win64); 246221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.globl OPENSSL_wipe_cpu 247221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.type OPENSSL_wipe_cpu,\@abi-omnipotent 248221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align 16 249221304ee937bc0910948a8be1320cb8cc4eb6d36Brian CarlstromOPENSSL_wipe_cpu: 250221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pxor %xmm0,%xmm0 251221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pxor %xmm1,%xmm1 252221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pxor %xmm2,%xmm2 253221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pxor %xmm3,%xmm3 254221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pxor %xmm4,%xmm4 255221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom pxor %xmm5,%xmm5 256221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xorq %rcx,%rcx 257221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xorq %rdx,%rdx 258221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xorq %r8,%r8 259221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xorq %r9,%r9 260221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xorq %r10,%r10 261221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xorq %r11,%r11 262221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom leaq 8(%rsp),%rax 263221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ret 264221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.size OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu 265221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom___ 266221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 267392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstromprint<<___; 268392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.globl OPENSSL_ia32_rdrand 269392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.type OPENSSL_ia32_rdrand,\@abi-omnipotent 270392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.align 16 271392aa7cc7d2b122614c5393c3e357da07fd07af3Brian CarlstromOPENSSL_ia32_rdrand: 272392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom mov \$8,%ecx 273392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.Loop_rdrand: 274392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom rdrand %rax 275392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom jc .Lbreak_rdrand 276392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom loop .Loop_rdrand 277392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.Lbreak_rdrand: 278392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom cmp \$0,%rax 279392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom cmove %rcx,%rax 280392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom ret 281392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.size OPENSSL_ia32_rdrand,.-OPENSSL_ia32_rdrand 282392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom___ 283392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 284656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectclose STDOUT; # flush 285