From 656ef1e2adb75d20a81b8763a2088b2c8e6c3058 Mon Sep 17 00:00:00 2001 From: bcook <> Date: Fri, 11 Sep 2015 12:17:57 +0000 Subject: Fixup inter-bank movq/movd operations, emit bytes for pclmulqdq again. Fixes builds gcc + Apple's assembler, working on reenabling builds with older OpenBSD releases. based on OpenSSL commit: https://git.openssl.org/?p=openssl.git;a=commitdiff;h=902b30df193afc3417a96ba72a81ed390bd50de3 ok miod@ --- src/lib/libcrypto/bn/asm/x86_64-gf2m.pl | 12 ++++++------ src/lib/libcrypto/bn/asm/x86_64-mont5.pl | 12 ++++++------ src/lib/libcrypto/perlasm/x86_64-xlate.pl | 16 +++++++++++++++- src/lib/libssl/src/crypto/bn/asm/x86_64-gf2m.pl | 12 ++++++------ src/lib/libssl/src/crypto/bn/asm/x86_64-mont5.pl | 12 ++++++------ src/lib/libssl/src/crypto/perlasm/x86_64-xlate.pl | 16 +++++++++++++++- 6 files changed, 54 insertions(+), 26 deletions(-) (limited to 'src') diff --git a/src/lib/libcrypto/bn/asm/x86_64-gf2m.pl b/src/lib/libcrypto/bn/asm/x86_64-gf2m.pl index 226c66c35e..8e45c7479b 100644 --- a/src/lib/libcrypto/bn/asm/x86_64-gf2m.pl +++ b/src/lib/libcrypto/bn/asm/x86_64-gf2m.pl @@ -143,12 +143,12 @@ $code.=<<___; mov (%rsp,$i1,8),$t1 mov $t1,$t0 shl \$`8*$n-4`,$t1 - movq $R,$i0 + movd $R,$i0 shr \$`64-(8*$n-4)`,$t0 xor $t1,$lo psrldq \$8,$R xor $t0,$hi - movq $R,$i1 + movd $R,$i1 xor $i0,$lo xor $i1,$hi @@ -171,15 +171,15 @@ bn_GF2m_mul_2x2: bt \$33,%rax jnc .Lvanilla_mul_2x2 - movq $a1,%xmm0 - movq $b1,%xmm1 - movq $a0,%xmm2 + movd $a1,%xmm0 + movd $b1,%xmm1 + movd $a0,%xmm2 ___ $code.=<<___ if ($win64); movq 40(%rsp),%xmm3 ___ $code.=<<___ if (!$win64); - movq $b0,%xmm3 + movd $b0,%xmm3 ___ $code.=<<___; movdqa %xmm0,%xmm4 diff --git a/src/lib/libcrypto/bn/asm/x86_64-mont5.pl b/src/lib/libcrypto/bn/asm/x86_64-mont5.pl index 9c88884d42..81e5c53728 100755 --- a/src/lib/libcrypto/bn/asm/x86_64-mont5.pl +++ b/src/lib/libcrypto/bn/asm/x86_64-mont5.pl @@ -120,7 +120,7 @@ $code.=<<___; lea $STRIDE($bp),$bp por %xmm3,%xmm0 - movq %xmm0,$m0 # m0=bp[0] + movd %xmm0,$m0 # m0=bp[0] mov ($n0),$n0 # pull n0[0] value mov ($ap),%rax @@ -183,7 +183,7 @@ $code.=<<___; cmp $num,$j jl .L1st - movq %xmm0,$m0 # bp[1] + movd %xmm0,$m0 # bp[1] add %rax,$hi1 mov ($ap),%rax # ap[0] @@ -266,7 +266,7 @@ $code.=<<___; cmp $num,$j jl .Linner - movq %xmm0,$m0 # bp[i+1] + movd %xmm0,$m0 # bp[i+1] add %rax,$hi1 mov ($ap),%rax # ap[0] @@ -403,7 +403,7 @@ $code.=<<___; lea $STRIDE($bp),$bp por %xmm3,%xmm0 - movq %xmm0,$m0 # m0=bp[0] + movd %xmm0,$m0 # m0=bp[0] mov ($n0),$n0 # pull n0[0] value mov ($ap),%rax @@ -550,7 +550,7 @@ $code.=<<___; mov $N[1],-16(%rsp,$j,8) # tp[j-1] mov %rdx,$N[0] - movq %xmm0,$m0 # bp[1] + movd %xmm0,$m0 # bp[1] xor $N[1],$N[1] add $A[0],$N[0] @@ -718,7 +718,7 @@ $code.=<<___; mov $N[0],-24(%rsp,$j,8) # tp[j-1] mov %rdx,$N[0] - movq %xmm0,$m0 # bp[i+1] + movd %xmm0,$m0 # bp[i+1] mov $N[1],-16(%rsp,$j,8) # tp[j-1] xor $N[1],$N[1] diff --git a/src/lib/libcrypto/perlasm/x86_64-xlate.pl b/src/lib/libcrypto/perlasm/x86_64-xlate.pl index ed1f3ed6ab..82992f41e5 100755 --- a/src/lib/libcrypto/perlasm/x86_64-xlate.pl +++ b/src/lib/libcrypto/perlasm/x86_64-xlate.pl @@ -121,7 +121,7 @@ my %globals; $self->{sz} = ""; } elsif ($self->{op} =~ /^v/) { # VEX $self->{sz} = ""; - } elsif ($self->{op} =~ /movq/ && $line =~ /%xmm/) { + } elsif ($self->{op} =~ /mov[dq]/ && $line =~ /%xmm/) { $self->{sz} = ""; } elsif ($self->{op} =~ /([a-z]{3,})([qlwb])$/) { $self->{op} = $1; @@ -698,6 +698,20 @@ my $pinsrd = sub { } }; +my $pclmulqdq = sub { + if (shift =~ /\$([x0-9a-f]+),\s*%xmm([0-9]+),\s*%xmm([0-9]+)/) { + my @opcode=(0x66); + rex(\@opcode,$3,$2); + push @opcode,0x0f,0x3a,0x44; + push @opcode,0xc0|($2&7)|(($3&7)<<3); # ModR/M + my $c=$1; + push @opcode,$c=~/^0/?oct($c):$c; + @opcode; + } else { + (); + } +}; + if ($nasm) { print <<___; default rel diff --git a/src/lib/libssl/src/crypto/bn/asm/x86_64-gf2m.pl b/src/lib/libssl/src/crypto/bn/asm/x86_64-gf2m.pl index 226c66c35e..8e45c7479b 100644 --- a/src/lib/libssl/src/crypto/bn/asm/x86_64-gf2m.pl +++ b/src/lib/libssl/src/crypto/bn/asm/x86_64-gf2m.pl @@ -143,12 +143,12 @@ $code.=<<___; mov (%rsp,$i1,8),$t1 mov $t1,$t0 shl \$`8*$n-4`,$t1 - movq $R,$i0 + movd $R,$i0 shr \$`64-(8*$n-4)`,$t0 xor $t1,$lo psrldq \$8,$R xor $t0,$hi - movq $R,$i1 + movd $R,$i1 xor $i0,$lo xor $i1,$hi @@ -171,15 +171,15 @@ bn_GF2m_mul_2x2: bt \$33,%rax jnc .Lvanilla_mul_2x2 - movq $a1,%xmm0 - movq $b1,%xmm1 - movq $a0,%xmm2 + movd $a1,%xmm0 + movd $b1,%xmm1 + movd $a0,%xmm2 ___ $code.=<<___ if ($win64); movq 40(%rsp),%xmm3 ___ $code.=<<___ if (!$win64); - movq $b0,%xmm3 + movd $b0,%xmm3 ___ $code.=<<___; movdqa %xmm0,%xmm4 diff --git a/src/lib/libssl/src/crypto/bn/asm/x86_64-mont5.pl b/src/lib/libssl/src/crypto/bn/asm/x86_64-mont5.pl index 9c88884d42..81e5c53728 100755 --- a/src/lib/libssl/src/crypto/bn/asm/x86_64-mont5.pl +++ b/src/lib/libssl/src/crypto/bn/asm/x86_64-mont5.pl @@ -120,7 +120,7 @@ $code.=<<___; lea $STRIDE($bp),$bp por %xmm3,%xmm0 - movq %xmm0,$m0 # m0=bp[0] + movd %xmm0,$m0 # m0=bp[0] mov ($n0),$n0 # pull n0[0] value mov ($ap),%rax @@ -183,7 +183,7 @@ $code.=<<___; cmp $num,$j jl .L1st - movq %xmm0,$m0 # bp[1] + movd %xmm0,$m0 # bp[1] add %rax,$hi1 mov ($ap),%rax # ap[0] @@ -266,7 +266,7 @@ $code.=<<___; cmp $num,$j jl .Linner - movq %xmm0,$m0 # bp[i+1] + movd %xmm0,$m0 # bp[i+1] add %rax,$hi1 mov ($ap),%rax # ap[0] @@ -403,7 +403,7 @@ $code.=<<___; lea $STRIDE($bp),$bp por %xmm3,%xmm0 - movq %xmm0,$m0 # m0=bp[0] + movd %xmm0,$m0 # m0=bp[0] mov ($n0),$n0 # pull n0[0] value mov ($ap),%rax @@ -550,7 +550,7 @@ $code.=<<___; mov $N[1],-16(%rsp,$j,8) # tp[j-1] mov %rdx,$N[0] - movq %xmm0,$m0 # bp[1] + movd %xmm0,$m0 # bp[1] xor $N[1],$N[1] add $A[0],$N[0] @@ -718,7 +718,7 @@ $code.=<<___; mov $N[0],-24(%rsp,$j,8) # tp[j-1] mov %rdx,$N[0] - movq %xmm0,$m0 # bp[i+1] + movd %xmm0,$m0 # bp[i+1] mov $N[1],-16(%rsp,$j,8) # tp[j-1] xor $N[1],$N[1] diff --git a/src/lib/libssl/src/crypto/perlasm/x86_64-xlate.pl b/src/lib/libssl/src/crypto/perlasm/x86_64-xlate.pl index ed1f3ed6ab..82992f41e5 100755 --- a/src/lib/libssl/src/crypto/perlasm/x86_64-xlate.pl +++ b/src/lib/libssl/src/crypto/perlasm/x86_64-xlate.pl @@ -121,7 +121,7 @@ my %globals; $self->{sz} = ""; } elsif ($self->{op} =~ /^v/) { # VEX $self->{sz} = ""; - } elsif ($self->{op} =~ /movq/ && $line =~ /%xmm/) { + } elsif ($self->{op} =~ /mov[dq]/ && $line =~ /%xmm/) { $self->{sz} = ""; } elsif ($self->{op} =~ /([a-z]{3,})([qlwb])$/) { $self->{op} = $1; @@ -698,6 +698,20 @@ my $pinsrd = sub { } }; +my $pclmulqdq = sub { + if (shift =~ /\$([x0-9a-f]+),\s*%xmm([0-9]+),\s*%xmm([0-9]+)/) { + my @opcode=(0x66); + rex(\@opcode,$3,$2); + push @opcode,0x0f,0x3a,0x44; + push @opcode,0xc0|($2&7)|(($3&7)<<3); # ModR/M + my $c=$1; + push @opcode,$c=~/^0/?oct($c):$c; + @opcode; + } else { + (); + } +}; + if ($nasm) { print <<___; default rel -- cgit v1.2.3-55-g6feb