s390x assembly pack: remove capability double-checking.
authorPatrick Steuer <patrick.steuer@de.ibm.com>
Mon, 30 Jan 2017 11:50:54 +0000 (12:50 +0100)
committerAndy Polyakov <appro@openssl.org>
Tue, 17 Oct 2017 19:58:43 +0000 (21:58 +0200)
An instruction's QUERY function is executed at initialization, iff the required
MSA level is installed. Therefore, it is sufficient to check the bits returned
by the QUERY functions. The MSA level does not have to be checked at every
function call.
crypto/aes/asm/aes-s390x.pl: The AES key schedule must be computed if the
required KM or KMC function codes are not available. Formally, the availability
of a KMC function code does not imply the availability of the corresponding KM
function code.

Signed-off-by: Patrick Steuer <patrick.steuer@de.ibm.com>
Reviewed-by: Andy Polyakov <appro@openssl.org>
Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/4501)

(cherry picked from commit af1d638730bdfad85a7fa8c3f157b2828eda7c1d)

crypto/aes/asm/aes-s390x.pl
crypto/modes/asm/ghash-s390x.pl
crypto/sha/asm/sha1-s390x.pl
crypto/sha/asm/sha512-s390x.pl

index ca575f18da951530f45aa88d28bea0fc59e9f4bf..804986ccce264226aec3fb3e9943a132f8e46115 100644 (file)
@@ -813,7 +813,7 @@ _s390x_AES_set_encrypt_key:
 .Lproceed:
 ___
 $code.=<<___ if (!$softonly);
-       # convert bits to km code, [128,192,256]->[18,19,20]
+       # convert bits to km(c) code, [128,192,256]->[18,19,20]
        lhi     %r5,-128
        lhi     %r0,18
        ar      %r5,$bits
@@ -821,13 +821,10 @@ $code.=<<___ if (!$softonly);
        ar      %r5,%r0
 
        larl    %r1,OPENSSL_s390xcap_P
-       lg      %r0,0(%r1)
-       tmhl    %r0,0x4000      # check for message-security assist
-       jz      .Lekey_internal
-
        llihh   %r0,0x8000
        srlg    %r0,%r0,0(%r5)
-       ng      %r0,48(%r1)     # check kmc capability vector
+       ng      %r0,32(%r1)     # check availability of both km...
+       ng      %r0,48(%r1)     # ...and kmc support for given key length
        jz      .Lekey_internal
 
        lmg     %r0,%r1,0($inp) # just copy 128 bits...
@@ -842,7 +839,7 @@ $code.=<<___ if (!$softonly);
        stg     %r1,24($key)
 1:     st      $bits,236($key) # save bits [for debugging purposes]
        lgr     $t0,%r5
-       st      %r5,240($key)   # save km code
+       st      %r5,240($key)   # save km(c) code
        lghi    %r2,0
        br      %r14
 ___
@@ -1440,11 +1437,6 @@ $code.=<<___ if (!$softonly);
 .Lctr32_hw_switch:
 ___
 $code.=<<___ if (!$softonly && 0);# kmctr code was measured to be ~12% slower
-       larl    $s0,OPENSSL_s390xcap_P
-       lg      $s0,8($s0)
-       tmhh    $s0,0x0004      # check for message_security-assist-4
-       jz      .Lctr32_km_loop
-
        llgfr   $s0,%r0
        lgr     $s1,%r1
        larl    %r1,OPENSSL_s390xcap_P
index 65ffaf98bca606279f7eeb9ff05be88c86e37d0e..6e628d88238a0a09ed146f50b4c1984de9390538 100644 (file)
@@ -88,9 +88,6 @@ gcm_gmult_4bit:
 ___
 $code.=<<___ if(!$softonly && 0);      # hardware is slow for single block...
        larl    %r1,OPENSSL_s390xcap_P
-       lg      %r0,0(%r1)
-       tmhl    %r0,0x4000      # check for message-security-assist
-       jz      .Lsoft_gmult
        lghi    %r0,0
        lg      %r1,24(%r1)     # load second word of kimd capabilities vector
        tmhh    %r1,0x4000      # check for function 65
@@ -126,14 +123,8 @@ gcm_ghash_4bit:
 ___
 $code.=<<___ if(!$softonly);
        larl    %r1,OPENSSL_s390xcap_P
-       lg      %r0,0(%r1)
-       tmhl    %r0,0x4000      # check for message-security-assist
-       jz      .Lsoft_ghash
-       lghi    %r0,0
-       la      %r1,16($sp)
-       .long   0xb93e0004      # kimd %r0,%r4
-       lg      %r1,24($sp)
-       tmhh    %r1,0x4000      # check for function 65
+       lg      %r0,24(%r1)     # load second word of kimd capabilities vector
+       tmhh    %r0,0x4000      # check for function 65
        jz      .Lsoft_ghash
        lghi    %r0,65          # function 65
        la      %r1,0($Xi)      # H lies right after Xi in gcm128_context
index b19606c5c514e2cfadf9751a89e3484117911185..f8ab1bbaeda60a8d161282c9c862aad20339b0ca 100644 (file)
@@ -172,9 +172,6 @@ sha1_block_data_order:
 ___
 $code.=<<___ if ($kimdfunc);
        larl    %r1,OPENSSL_s390xcap_P
-       lg      %r0,0(%r1)
-       tmhl    %r0,0x4000      # check for message-security assist
-       jz      .Lsoftware
        lg      %r0,16(%r1)     # check kimd capabilities
        tmhh    %r0,`0x8000>>$kimdfunc`
        jz      .Lsoftware
index 582d393cefb57a104997694bb19a6f527cf6ef4a..0935e5396fe074538070432d97eb9773ee3d0702 100644 (file)
@@ -244,9 +244,6 @@ $Func:
 ___
 $code.=<<___ if ($kimdfunc);
        larl    %r1,OPENSSL_s390xcap_P
-       lg      %r0,0(%r1)
-       tmhl    %r0,0x4000      # check for message-security assist
-       jz      .Lsoftware
        lg      %r0,16(%r1)     # check kimd capabilities
        tmhh    %r0,`0x8000>>$kimdfunc`
        jz      .Lsoftware