aboutsummaryrefslogtreecommitdiff
path: root/crypto/poly1305
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/poly1305')
-rwxr-xr-xcrypto/poly1305/asm/poly1305-s390x.pl5
1 files changed, 4 insertions, 1 deletions
diff --git a/crypto/poly1305/asm/poly1305-s390x.pl b/crypto/poly1305/asm/poly1305-s390x.pl
index ce6a85f..49b3f79 100755
--- a/crypto/poly1305/asm/poly1305-s390x.pl
+++ b/crypto/poly1305/asm/poly1305-s390x.pl
@@ -78,13 +78,15 @@ $code.=<<___;
.type poly1305_blocks,\@function
.align 16
poly1305_blocks:
- srl${g} $len,$len,4
+ srl${g} $len,4 # fixed-up in 64-bit build
lghi %r0,0
cl${g}r $len,%r0
je .Lno_data
stm${g} %r6,%r14,`6*$SIZE_T`($sp)
+ llgfr $padbit,$padbit # clear upper half, much needed with
+ # non-64-bit ABI
lg $r0,32($ctx) # load key
lg $r1,40($ctx)
@@ -211,6 +213,7 @@ ___
}
$code =~ s/\`([^\`]*)\`/eval $1/gem;
+$code =~ s/\b(srlg\s+)(%r[0-9]+\s*,)\s*([0-9]+)/$1$2$2$3/gm;
print $code;
close STDOUT;