summaryrefslogtreecommitdiffstats
path: root/lib/libssl/src
diff options
context:
space:
mode:
authorbcook <bcook@openbsd.org>2015-09-11 12:17:57 +0000
committerbcook <bcook@openbsd.org>2015-09-11 12:17:57 +0000
commit90d63fe2da68c2e2d9219706a367d5cd9c70b682 (patch)
tree6841c29457a000110f214fc78d333251be38cf55 /lib/libssl/src
parentFirst step at making ix(4) MPSAVE. This is largely based on the em(4) (diff)
downloadwireguard-openbsd-90d63fe2da68c2e2d9219706a367d5cd9c70b682.tar.xz
wireguard-openbsd-90d63fe2da68c2e2d9219706a367d5cd9c70b682.zip
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@
Diffstat (limited to 'lib/libssl/src')
-rw-r--r--lib/libssl/src/crypto/bn/asm/x86_64-gf2m.pl12
-rwxr-xr-xlib/libssl/src/crypto/bn/asm/x86_64-mont5.pl12
-rwxr-xr-xlib/libssl/src/crypto/perlasm/x86_64-xlate.pl16
3 files changed, 27 insertions, 13 deletions
diff --git a/lib/libssl/src/crypto/bn/asm/x86_64-gf2m.pl b/lib/libssl/src/crypto/bn/asm/x86_64-gf2m.pl
index 226c66c35e3..8e45c7479b3 100644
--- a/lib/libssl/src/crypto/bn/asm/x86_64-gf2m.pl
+++ b/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/lib/libssl/src/crypto/bn/asm/x86_64-mont5.pl b/lib/libssl/src/crypto/bn/asm/x86_64-mont5.pl
index 9c88884d424..81e5c53728d 100755
--- a/lib/libssl/src/crypto/bn/asm/x86_64-mont5.pl
+++ b/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/lib/libssl/src/crypto/perlasm/x86_64-xlate.pl b/lib/libssl/src/crypto/perlasm/x86_64-xlate.pl
index ed1f3ed6ab9..82992f41e5e 100755
--- a/lib/libssl/src/crypto/perlasm/x86_64-xlate.pl
+++ b/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