s390x assembly pack: 32-bit fixups.
authorAndy Polyakov <appro@openssl.org>
Fri, 11 Mar 2016 15:47:02 +0000 (16:47 +0100)
committerRichard Levitte <levitte@openssl.org>
Mon, 14 Mar 2016 12:52:34 +0000 (13:52 +0100)
Reviewed-by: Richard Levitte <levitte@openssl.org>
Configurations/00-base-templates.conf
Configurations/10-main.conf
crypto/poly1305/asm/poly1305-s390x.pl

index cbb5675..c284af6 100644 (file)
     },
     s390x_asm => {
        template        => 1,
-       cpuid_asm_src   => "s390xcap.c s390xcpuid.s",
+       cpuid_asm_src   => "s390xcap.c s390xcpuid.S",
        bn_asm_src      => "asm/s390x.S s390x-mont.S s390x-gf2m.s",
        aes_asm_src     => "aes-s390x.S aes-ctr.fake aes-xts.fake",
        sha1_asm_src    => "sha1-s390x.S sha256-s390x.S sha512-s390x.S",
index cddf268..6c43772 100644 (file)
@@ -781,7 +781,7 @@ sub vc_wince_info {
         #
         inherit_from     => [ "linux-generic32", asm("s390x_asm") ],
         cflags           => add("-m31 -Wa,-mzarch -DB_ENDIAN"),
-        bn_obj           => sub { my $r=join(" ",@_); $r=~s/bn\-s390x/bn_asm/; $r; },
+        bn_asm_src       => sub { my $r=join(" ",@_); $r=~s|asm/s390x\.S|bn_asm.c|; $r; },
         perlasm_scheme   => "31",
         shared_ldflag    => "-m31",
         multilib         => "/highgprs",
index ce6a85f..49b3f79 100755 (executable)
@@ -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;