Loading crypto/aes/asm/aes-x86_64.pl +16 −11 Original line number Diff line number Diff line Loading @@ -626,14 +626,13 @@ AES_encrypt: call _x86_64_AES_encrypt_compact lea 16(%rsp),%rsp pop $out # restore out mov 16(%rsp),$out # restore out mov 24(%rsp),%rsp mov $s0,0($out) # write output vector mov $s1,4($out) mov $s2,8($out) mov $s3,12($out) mov (%rsp),%rsp pop %r15 pop %r14 pop %r13 Loading Loading @@ -1222,14 +1221,13 @@ AES_decrypt: call _x86_64_AES_decrypt_compact lea 16(%rsp),%rsp pop $out # restore out mov $s0,0($out) mov 16(%rsp),$out # restore out mov 24(%rsp),%rsp mov $s0,0($out) # write output vector mov $s1,4($out) mov $s2,8($out) mov $s3,12($out) mov (%rsp),%rsp pop %r15 pop %r14 pop %r13 Loading Loading @@ -1275,6 +1273,13 @@ $code.=<<___; .type AES_set_encrypt_key,\@function,3 .align 16 AES_set_encrypt_key: call _x86_64_AES_set_encrypt_key ret .size AES_set_encrypt_key,.-AES_set_encrypt_key .type _x86_64_AES_set_encrypt_key,\@abi-omnipotent .align 16 _x86_64_AES_set_encrypt_key: push %rbx push %rbp Loading Loading @@ -1461,8 +1466,8 @@ $code.=<<___; .Lexit: pop %rbp pop %rbx ret .size AES_set_encrypt_key,.-AES_set_encrypt_key .byte 0xf3,0xc3 # rep ret .size _x86_64_AES_set_encrypt_key,.-_x86_64_AES_set_encrypt_key ___ sub deckey_ref() Loading Loading @@ -1527,7 +1532,7 @@ $code.=<<___; .align 16 AES_set_decrypt_key: push %rdx # save key schedule call AES_set_encrypt_key call _x86_64_AES_set_encrypt_key cmp \$0,%eax pop %r8 # restore key schedule jne .Labort Loading crypto/perlasm/x86_64-xlate.pl +12 −3 Original line number Diff line number Diff line Loading @@ -85,6 +85,8 @@ my $current_function; if ($self->{op} =~ /(movz)b.*/) { # movz is pain... $self->{op} = $1; $self->{sz} = "b"; } elsif ($self->{op} =~ /call/) { $self->{sz} = "" } elsif ($self->{op} =~ /([a-z]{3,})([qlwb])/) { $self->{op} = $1; $self->{sz} = $2; Loading Loading @@ -358,7 +360,7 @@ my $current_function; $self->{value} = $v; last; }; /\.extern/ && do { $self->{value} = "EXTRN\t".$line; last; }; /\.extern/ && do { $self->{value} = "EXTRN\t".$line.":BYTE"; last; }; /\.globl/ && do { $self->{value} = "PUBLIC\t".$line; last; }; /\.type/ && do { ($sym,$type,$narg) = split(',',$line); if ($type eq "\@function") { Loading Loading @@ -394,8 +396,15 @@ my $current_function; last; }; /\.asciz/ && do { if ($line =~ /^"(.*)"$/) { $self->{value} = "DB\t" .join(",",unpack("C*",$1),0); my @str=unpack("C*",$1); push @str,0; while ($#str>15) { $self->{value}.="DB\t" .join(",",@str[0..15])."\n"; foreach (0..15) { shift @str; } } $self->{value}.="DB\t" .join(",",@str) if (@str); } last; }; Loading crypto/sha/asm/sha512-x86_64.pl +7 −1 Original line number Diff line number Diff line Loading @@ -41,7 +41,13 @@ # apparently are not atomic instructions, but implemented in microcode. $output=shift; open STDOUT,"| $^X ../perlasm/x86_64-xlate.pl $output"; $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; ( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or ( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or die "can't locate x86_64-xlate.pl"; open STDOUT,"| $^X $xlate $output"; if ($output =~ /512/) { $func="sha512_block_data_order"; Loading crypto/x86_64cpuid.pl +2 −2 Original line number Diff line number Diff line Loading @@ -136,11 +136,11 @@ OPENSSL_ia32_cpuid: cpuid cmp \$0,%r9d jne .Lnotintel or \$1<<20,%edx # use reserved bit to engage RC4_CHAR or \$0x00100000,%edx # use reserved 20th bit to engage RC4_CHAR and \$15,%ah cmp \$15,%ah # examine Family ID je .Lnotintel or \$1<<30,%edx # use reserved bit to skip unrolled loop or \$0x40000000,%edx # use reserved bit to skip unrolled loop .Lnotintel: bt \$28,%edx # test hyper-threading bit jnc .Ldone Loading Loading
crypto/aes/asm/aes-x86_64.pl +16 −11 Original line number Diff line number Diff line Loading @@ -626,14 +626,13 @@ AES_encrypt: call _x86_64_AES_encrypt_compact lea 16(%rsp),%rsp pop $out # restore out mov 16(%rsp),$out # restore out mov 24(%rsp),%rsp mov $s0,0($out) # write output vector mov $s1,4($out) mov $s2,8($out) mov $s3,12($out) mov (%rsp),%rsp pop %r15 pop %r14 pop %r13 Loading Loading @@ -1222,14 +1221,13 @@ AES_decrypt: call _x86_64_AES_decrypt_compact lea 16(%rsp),%rsp pop $out # restore out mov $s0,0($out) mov 16(%rsp),$out # restore out mov 24(%rsp),%rsp mov $s0,0($out) # write output vector mov $s1,4($out) mov $s2,8($out) mov $s3,12($out) mov (%rsp),%rsp pop %r15 pop %r14 pop %r13 Loading Loading @@ -1275,6 +1273,13 @@ $code.=<<___; .type AES_set_encrypt_key,\@function,3 .align 16 AES_set_encrypt_key: call _x86_64_AES_set_encrypt_key ret .size AES_set_encrypt_key,.-AES_set_encrypt_key .type _x86_64_AES_set_encrypt_key,\@abi-omnipotent .align 16 _x86_64_AES_set_encrypt_key: push %rbx push %rbp Loading Loading @@ -1461,8 +1466,8 @@ $code.=<<___; .Lexit: pop %rbp pop %rbx ret .size AES_set_encrypt_key,.-AES_set_encrypt_key .byte 0xf3,0xc3 # rep ret .size _x86_64_AES_set_encrypt_key,.-_x86_64_AES_set_encrypt_key ___ sub deckey_ref() Loading Loading @@ -1527,7 +1532,7 @@ $code.=<<___; .align 16 AES_set_decrypt_key: push %rdx # save key schedule call AES_set_encrypt_key call _x86_64_AES_set_encrypt_key cmp \$0,%eax pop %r8 # restore key schedule jne .Labort Loading
crypto/perlasm/x86_64-xlate.pl +12 −3 Original line number Diff line number Diff line Loading @@ -85,6 +85,8 @@ my $current_function; if ($self->{op} =~ /(movz)b.*/) { # movz is pain... $self->{op} = $1; $self->{sz} = "b"; } elsif ($self->{op} =~ /call/) { $self->{sz} = "" } elsif ($self->{op} =~ /([a-z]{3,})([qlwb])/) { $self->{op} = $1; $self->{sz} = $2; Loading Loading @@ -358,7 +360,7 @@ my $current_function; $self->{value} = $v; last; }; /\.extern/ && do { $self->{value} = "EXTRN\t".$line; last; }; /\.extern/ && do { $self->{value} = "EXTRN\t".$line.":BYTE"; last; }; /\.globl/ && do { $self->{value} = "PUBLIC\t".$line; last; }; /\.type/ && do { ($sym,$type,$narg) = split(',',$line); if ($type eq "\@function") { Loading Loading @@ -394,8 +396,15 @@ my $current_function; last; }; /\.asciz/ && do { if ($line =~ /^"(.*)"$/) { $self->{value} = "DB\t" .join(",",unpack("C*",$1),0); my @str=unpack("C*",$1); push @str,0; while ($#str>15) { $self->{value}.="DB\t" .join(",",@str[0..15])."\n"; foreach (0..15) { shift @str; } } $self->{value}.="DB\t" .join(",",@str) if (@str); } last; }; Loading
crypto/sha/asm/sha512-x86_64.pl +7 −1 Original line number Diff line number Diff line Loading @@ -41,7 +41,13 @@ # apparently are not atomic instructions, but implemented in microcode. $output=shift; open STDOUT,"| $^X ../perlasm/x86_64-xlate.pl $output"; $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; ( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or ( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or die "can't locate x86_64-xlate.pl"; open STDOUT,"| $^X $xlate $output"; if ($output =~ /512/) { $func="sha512_block_data_order"; Loading
crypto/x86_64cpuid.pl +2 −2 Original line number Diff line number Diff line Loading @@ -136,11 +136,11 @@ OPENSSL_ia32_cpuid: cpuid cmp \$0,%r9d jne .Lnotintel or \$1<<20,%edx # use reserved bit to engage RC4_CHAR or \$0x00100000,%edx # use reserved 20th bit to engage RC4_CHAR and \$15,%ah cmp \$15,%ah # examine Family ID je .Lnotintel or \$1<<30,%edx # use reserved bit to skip unrolled loop or \$0x40000000,%edx # use reserved bit to skip unrolled loop .Lnotintel: bt \$28,%edx # test hyper-threading bit jnc .Ldone Loading