Stop using unimplemented cipher classes.
[openssl.git] / crypto / s390xcpuid.S
index f411be65957209258e410290c72abea7e6710f86..9aa23c3e46edaf15896d9a50bb9d195fa5c2d3b8 100644 (file)
 .text
+// Copyright 2009-2016 The OpenSSL Project Authors. All Rights Reserved.
+//
+// Licensed under the OpenSSL license (the "License").  You may not use
+// this file except in compliance with the License.  You can obtain a copy
+// in the file LICENSE in the source distribution or at
+// https://www.openssl.org/source/license.html
+
+#include "s390x_arch.h"
 
 .globl OPENSSL_s390x_facilities
 .type  OPENSSL_s390x_facilities,@function
 .align 16
 OPENSSL_s390x_facilities:
        lghi    %r0,0
-       .long   0xb2b0f010      # stfle 16(%r15)
-       lg      %r2,16(%r15)
+       larl    %r4,OPENSSL_s390xcap_P
+
+       stg     %r0,S390X_STFLE+8(%r4)  # wipe capability vectors
+       stg     %r0,S390X_STFLE+16(%r4)
+       stg     %r0,S390X_STFLE+24(%r4)
+       stg     %r0,S390X_KIMD(%r4)
+       stg     %r0,S390X_KIMD+8(%r4)
+       stg     %r0,S390X_KLMD(%r4)
+       stg     %r0,S390X_KLMD+8(%r4)
+       stg     %r0,S390X_KM(%r4)
+       stg     %r0,S390X_KM+8(%r4)
+       stg     %r0,S390X_KMC(%r4)
+       stg     %r0,S390X_KMC+8(%r4)
+       stg     %r0,S390X_KMAC(%r4)
+       stg     %r0,S390X_KMAC+8(%r4)
+       stg     %r0,S390X_KMCTR(%r4)
+       stg     %r0,S390X_KMCTR+8(%r4)
+       stg     %r0,S390X_KMO(%r4)
+       stg     %r0,S390X_KMO+8(%r4)
+       stg     %r0,S390X_KMF(%r4)
+       stg     %r0,S390X_KMF+8(%r4)
+       stg     %r0,S390X_PRNO(%r4)
+       stg     %r0,S390X_PRNO+8(%r4)
+       stg     %r0,S390X_KMA(%r4)
+       stg     %r0,S390X_KMA+8(%r4)
+
+       .long   0xb2b04000              # stfle 0(%r4)
+       brc     8,.Ldone
+       lghi    %r0,1
+       .long   0xb2b04000              # stfle 0(%r4)
+       brc     8,.Ldone
+       lghi    %r0,2
+       .long   0xb2b04000              # stfle 0(%r4)
+.Ldone:
+       lmg     %r2,%r3,S390X_STFLE(%r4)
+       tmhl    %r2,0x4000              # check for message-security-assist
+       jz      .Lret
+
+       lghi    %r0,S390X_QUERY         # query kimd capabilities
+       la      %r1,S390X_KIMD(%r4)
+       .long   0xb93e0002              # kimd %r0,%r2
+
+       lghi    %r0,S390X_QUERY         # query klmd capabilities
+       la      %r1,S390X_KLMD(%r4)
+       .long   0xb93f0002              # klmd %r0,%r2
+
+       lghi    %r0,S390X_QUERY         # query km capability vector
+       la      %r1,S390X_KM(%r4)
+       .long   0xb92e0042              # km %r4,%r2
+
+       lghi    %r0,S390X_QUERY         # query kmc capability vector
+       la      %r1,S390X_KMC(%r4)
+       .long   0xb92f0042              # kmc %r4,%r2
+
+       lghi    %r0,S390X_QUERY         # query kmac capability vector
+       la      %r1,S390X_KMAC(%r4)
+       .long   0xb91e0042              # kmac %r4,%r2
+
+       tmhh    %r3,0x0004              # check for message-security-assist-4
+       jz      .Lret
+
+       lghi    %r0,S390X_QUERY         # query kmctr capability vector
+       la      %r1,S390X_KMCTR(%r4)
+       .long   0xb92d2042              # kmctr %r4,%r2,%r2
+
+       lghi    %r0,S390X_QUERY         # query kmo capability vector
+       la      %r1,S390X_KMO(%r4)
+       .long   0xb92b0042              # kmo %r4,%r2
+
+       lghi    %r0,S390X_QUERY         # query kmf capability vector
+       la      %r1,S390X_KMF(%r4)
+       .long   0xb92a0042              # kmf %r4,%r2
+
+       tml     %r2,0x40                # check for message-security-assist-5
+       jz      .Lret
+
+       lghi    %r0,S390X_QUERY         # query prno capability vector
+       la      %r1,S390X_PRNO(%r4)
+       .long   0xb93c0042              # prno %r4,%r2
+
+       lg      %r2,S390X_STFLE+16(%r4)
+       tmhl    %r2,0x2000              # check for message-security-assist-8
+       jz      .Lret
+
+       lghi    %r0,S390X_QUERY         # query kma capability vector
+       la      %r1,S390X_KMA(%r4)
+       .long   0xb9294022              # kma %r2,%r4,%r2
+
+.Lret:
        br      %r14
 .size  OPENSSL_s390x_facilities,.-OPENSSL_s390x_facilities
 
@@ -56,10 +151,15 @@ OPENSSL_wipe_cpu:
 .type  OPENSSL_cleanse,@function
 .align 16
 OPENSSL_cleanse:
+#if !defined(__s390x__) && !defined(__s390x)
+       llgfr   %r3,%r3
+#endif
        lghi    %r4,15
        lghi    %r0,0
        clgr    %r3,%r4
        jh      .Lot
+       clgr    %r3,%r0
+       bcr     8,%r14
 .Little:
        stc     %r0,0(%r2)
        la      %r2,1(%r2)
@@ -81,3 +181,57 @@ OPENSSL_cleanse:
        jnz     .Little
        br      %r14
 .size  OPENSSL_cleanse,.-OPENSSL_cleanse
+
+.globl CRYPTO_memcmp
+.type  CRYPTO_memcmp,@function
+.align 16
+CRYPTO_memcmp:
+#if !defined(__s390x__) && !defined(__s390x)
+       llgfr   %r4,%r4
+#endif
+       lghi    %r5,0
+       clgr    %r4,%r5
+       je      .Lno_data
+
+.Loop_cmp:
+       llgc    %r0,0(%r2)
+       la      %r2,1(%r2)
+       llgc    %r1,0(%r3)
+       la      %r3,1(%r3)
+       xr      %r1,%r0
+       or      %r5,%r1
+       brctg   %r4,.Loop_cmp
+
+       lnr     %r5,%r5
+       srl     %r5,31
+.Lno_data:
+       lgr     %r2,%r5
+       br      %r14
+.size  CRYPTO_memcmp,.-CRYPTO_memcmp
+
+.globl OPENSSL_instrument_bus
+.type  OPENSSL_instrument_bus,@function
+.align 16
+OPENSSL_instrument_bus:
+       lghi    %r2,0
+       br      %r14
+.size  OPENSSL_instrument_bus,.-OPENSSL_instrument_bus
+
+.globl OPENSSL_instrument_bus2
+.type  OPENSSL_instrument_bus2,@function
+.align 16
+OPENSSL_instrument_bus2:
+       lghi    %r2,0
+       br      %r14
+.size  OPENSSL_instrument_bus2,.-OPENSSL_instrument_bus2
+
+.globl OPENSSL_vx_probe
+.type  OPENSSL_vx_probe,@function
+.align 16
+OPENSSL_vx_probe:
+       .word   0xe700,0x0000,0x0044    # vzero %v0
+       br      %r14
+.size  OPENSSL_vx_probe,.-OPENSSL_vx_probe
+
+.section       .init
+       brasl   %r14,OPENSSL_cpuid_setup