diff options
Diffstat (limited to 'deps/openssl/config/archs/linux64-s390x/asm/crypto')
10 files changed, 915 insertions, 51 deletions
diff --git a/deps/openssl/config/archs/linux64-s390x/asm/crypto/aes/aes-s390x.S b/deps/openssl/config/archs/linux64-s390x/asm/crypto/aes/aes-s390x.S index a44e72d047..e00f81ecd4 100644 --- a/deps/openssl/config/archs/linux64-s390x/asm/crypto/aes/aes-s390x.S +++ b/deps/openssl/config/archs/linux64-s390x/asm/crypto/aes/aes-s390x.S @@ -1,3 +1,5 @@ +#include "s390x_arch.h" + .text .type AES_Te,@object @@ -458,7 +460,7 @@ _s390x_AES_encrypt: or %r9,%r1 or %r2,%r6 or %r3,%r7 - + srlg %r5,%r10,5 # i0 srlg %r6,%r10,13 # i1 nr %r5,%r0 @@ -511,7 +513,7 @@ _s390x_AES_encrypt: x %r10,24(%r4) x %r11,28(%r4) - br %r14 + br %r14 .size _s390x_AES_encrypt,.-_s390x_AES_encrypt .type AES_Td,@object .align 256 @@ -1015,7 +1017,7 @@ _s390x_AES_decrypt: x %r10,24(%r4) x %r11,28(%r4) - br %r14 + br %r14 .size _s390x_AES_decrypt,.-_s390x_AES_decrypt # void AES_set_encrypt_key(const unsigned char *in, int bits, # AES_KEY *key) { @@ -1054,8 +1056,8 @@ _s390x_AES_set_encrypt_key: larl %r1,OPENSSL_s390xcap_P llihh %r0,0x8000 srlg %r0,%r0,0(%r5) - ng %r0,32(%r1) # check availability of both km... - ng %r0,48(%r1) # ...and kmc support for given key length + ng %r0,S390X_KM(%r1) # check availability of both km... + ng %r0,S390X_KMC(%r1) # ...and kmc support for given key length jz .Lekey_internal lmg %r0,%r1,0(%r2) # just copy 128 bits... @@ -1311,7 +1313,7 @@ AES_set_decrypt_key: lhi %r1,16 cr %r0,%r1 jl .Lgo - oill %r0,0x80 # set "decrypt" bit + oill %r0,S390X_DECRYPT # set "decrypt" bit st %r0,240(%r4) br %r14 .align 16 @@ -1427,7 +1429,7 @@ AES_cbc_encrypt: .align 16 .Lkmc_truncated: ahi %r5,-1 # it's the way it's encoded in mvc - tmll %r0,0x80 + tmll %r0,S390X_DECRYPT jnz .Lkmc_truncated_dec lghi %r1,0 stg %r1,16*8(%r15) @@ -1496,7 +1498,7 @@ AES_cbc_encrypt: .Lcbc_enc_done: lg %r6,6*8(%r15) st %r8,0(%r6) - st %r9,4(%r6) + st %r9,4(%r6) st %r10,8(%r6) st %r11,12(%r6) @@ -1588,7 +1590,61 @@ AES_ctr32_encrypt: clr %r0,%r1 jl .Lctr32_software - stmg %r6,%r11,6*8(%r15) + stg %r10,10*8(%r15) + stg %r11,11*8(%r15) + + clr %r3,%r1 # does work even in 64-bit mode + jle .Lctr32_nokma # kma is slower for <= 16 blocks + + larl %r1,OPENSSL_s390xcap_P + lr %r10,%r0 + llihh %r11,0x8000 + srlg %r11,%r11,0(%r10) + ng %r11,S390X_KMA(%r1) # check kma capability vector + jz .Lctr32_nokma + + lghi %r1,-160-112 + lgr %r11,%r15 + la %r15,0(%r1,%r15) # prepare parameter block + + lhi %r1,0x0600 + sllg %r3,%r3,4 + or %r0,%r1 # set HS and LAAD flags + + stg %r11,0(%r15) # backchain + la %r1,160(%r15) + + lmg %r10,%r11,0(%r5) # copy key + stg %r10,160+80(%r15) + stg %r11,160+88(%r15) + lmg %r10,%r11,16(%r5) + stg %r10,160+96(%r15) + stg %r11,160+104(%r15) + + lmg %r10,%r11,0(%r6) # copy iv + stg %r10,160+64(%r15) + ahi %r11,-1 # kma requires counter-1 + stg %r11,160+72(%r15) + st %r11,160+12(%r15) # copy counter + + lghi %r10,0 # no AAD + lghi %r11,0 + + .long 0xb929a042 # kma %r4,%r10,%r2 + brc 1,.-4 # pay attention to "partial completion" + + stg %r0,160+80(%r15) # wipe key + stg %r0,160+88(%r15) + stg %r0,160+96(%r15) + stg %r0,160+104(%r15) + la %r15,160+112(%r15) + + lmg %r10,%r11,10*8(%r15) + br %r14 + +.align 16 +.Lctr32_nokma: + stmg %r6,%r9,6*8(%r15) slgr %r4,%r2 la %r1,0(%r5) # %r1 is permanent copy of %r5 @@ -1709,7 +1765,7 @@ _s390x_xts_km: larl %r1,OPENSSL_s390xcap_P llihh %r0,0x8000 srlg %r0,%r0,32(%r9) # check for 32+function code - ng %r0,32(%r1) # check km capability vector + ng %r0,S390X_KM(%r1) # check km capability vector lgr %r0,%r8 # restore the function code la %r1,0(%r5) # restore %r5 jz .Lxts_km_vanilla @@ -1744,7 +1800,7 @@ _s390x_xts_km: llgc %r3,2*8-1(%r15) nill %r3,0x0f # %r3%=16 br %r14 - + .align 16 .Lxts_km_vanilla: # prepare and allocate stack frame at the top of 4K page @@ -1960,7 +2016,7 @@ AES_xts_encrypt: xgr %r9,%r1 lrvgr %r9,%r9 # flip byte order lrvgr %r11,%r11 - srlg %r8,%r9,32 # smash the tweak to 4x32-bits + srlg %r8,%r9,32 # smash the tweak to 4x32-bits stg %r9,144+0(%r15) # save the tweak llgfr %r9,%r9 srlg %r10,%r11,32 @@ -2011,7 +2067,7 @@ AES_xts_encrypt: xgr %r9,%r1 lrvgr %r9,%r9 # flip byte order lrvgr %r11,%r11 - srlg %r8,%r9,32 # smash the tweak to 4x32-bits + srlg %r8,%r9,32 # smash the tweak to 4x32-bits stg %r9,144+0(%r15) # save the tweak llgfr %r9,%r9 srlg %r10,%r11,32 @@ -2188,7 +2244,7 @@ AES_xts_decrypt: xgr %r9,%r1 lrvgr %r9,%r9 # flip byte order lrvgr %r11,%r11 - srlg %r8,%r9,32 # smash the tweak to 4x32-bits + srlg %r8,%r9,32 # smash the tweak to 4x32-bits stg %r9,144+0(%r15) # save the tweak llgfr %r9,%r9 srlg %r10,%r11,32 diff --git a/deps/openssl/config/archs/linux64-s390x/asm/crypto/bn/s390x-gf2m.s b/deps/openssl/config/archs/linux64-s390x/asm/crypto/bn/s390x-gf2m.s index 1b90426659..e0b0822cae 100644 --- a/deps/openssl/config/archs/linux64-s390x/asm/crypto/bn/s390x-gf2m.s +++ b/deps/openssl/config/archs/linux64-s390x/asm/crypto/bn/s390x-gf2m.s @@ -206,7 +206,7 @@ bn_GF2m_mul_2x2: xgr %r4,%r7 xgr %r3,%r6 xgr %r4,%r8 - xgr %r3,%r9 + xgr %r3,%r9 xgr %r4,%r9 xgr %r3,%r4 stg %r4,16(%r2) diff --git a/deps/openssl/config/archs/linux64-s390x/asm/crypto/buildinf.h b/deps/openssl/config/archs/linux64-s390x/asm/crypto/buildinf.h index 2f2e17886a..8af744e54c 100644 --- a/deps/openssl/config/archs/linux64-s390x/asm/crypto/buildinf.h +++ b/deps/openssl/config/archs/linux64-s390x/asm/crypto/buildinf.h @@ -1,33 +1,42 @@ -/* auto-generated by util/mkbuildinf.pl for crypto/cversion.c */ -#define CFLAGS cflags /* - * Generate CFLAGS as an array of individual characters. This is a + * WARNING: do not edit! + * Generated by util/mkbuildinf.pl + * + * Copyright 2014-2017 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 + */ + +#define PLATFORM "platform: linux64-s390x" +#define DATE "built on: Thu Nov 22 19:35:20 2018 UTC" + +/* + * Generate compiler_flags as an array of individual characters. This is a * workaround for the situation where CFLAGS gets too long for a C90 string * literal */ -static const char cflags[] = { - 'c','o','m','p','i','l','e','r',':',' ','g','c','c',' ','-','D', - 'D','S','O','_','D','L','F','C','N',' ','-','D','H','A','V','E', - '_','D','L','F','C','N','_','H',' ','-','D','N','D','E','B','U', - 'G',' ','-','D','O','P','E','N','S','S','L','_','T','H','R','E', - 'A','D','S',' ','-','D','O','P','E','N','S','S','L','_','N','O', - '_','D','Y','N','A','M','I','C','_','E','N','G','I','N','E',' ', +static const char compiler_flags[] = { + 'c','o','m','p','i','l','e','r',':',' ','g','c','c',' ','-','f', + 'P','I','C',' ','-','p','t','h','r','e','a','d',' ','-','m','6', + '4',' ','-','W','a',',','-','-','n','o','e','x','e','c','s','t', + 'a','c','k',' ','-','W','a','l','l',' ','-','O','3',' ','-','D', + 'O','P','E','N','S','S','L','_','U','S','E','_','N','O','D','E', + 'L','E','T','E',' ','-','D','B','_','E','N','D','I','A','N',' ', '-','D','O','P','E','N','S','S','L','_','P','I','C',' ','-','D', - 'O','P','E','N','S','S','L','_','B','N','_','A','S','M','_','M', - 'O','N','T',' ','-','D','O','P','E','N','S','S','L','_','B','N', - '_','A','S','M','_','G','F','2','m',' ','-','D','S','H','A','1', - '_','A','S','M',' ','-','D','S','H','A','2','5','6','_','A','S', - 'M',' ','-','D','S','H','A','5','1','2','_','A','S','M',' ','-', - 'D','R','C','4','_','A','S','M',' ','-','D','A','E','S','_','A', - 'S','M',' ','-','D','A','E','S','_','C','T','R','_','A','S','M', - ' ','-','D','A','E','S','_','X','T','S','_','A','S','M',' ','-', - 'D','G','H','A','S','H','_','A','S','M',' ','-','D','P','O','L', - 'Y','1','3','0','5','_','A','S','M',' ','-','D','O','P','E','N', - 'S','S','L','D','I','R','=','"','\\','"','/','u','s','r','/','l', - 'o','c','a','l','/','s','s','l','\\','"','"',' ','-','D','E','N', - 'G','I','N','E','S','D','I','R','=','"','\\','"','/','u','s','r', - '/','l','o','c','a','l','/','l','i','b','/','e','n','g','i','n', - 'e','s','-','1','.','1','\\','"','"',' ','\0' + 'O','P','E','N','S','S','L','_','C','P','U','I','D','_','O','B', + 'J',' ','-','D','O','P','E','N','S','S','L','_','B','N','_','A', + 'S','M','_','M','O','N','T',' ','-','D','O','P','E','N','S','S', + 'L','_','B','N','_','A','S','M','_','G','F','2','m',' ','-','D', + 'S','H','A','1','_','A','S','M',' ','-','D','S','H','A','2','5', + '6','_','A','S','M',' ','-','D','S','H','A','5','1','2','_','A', + 'S','M',' ','-','D','K','E','C','C','A','K','1','6','0','0','_', + 'A','S','M',' ','-','D','R','C','4','_','A','S','M',' ','-','D', + 'A','E','S','_','A','S','M',' ','-','D','A','E','S','_','C','T', + 'R','_','A','S','M',' ','-','D','A','E','S','_','X','T','S','_', + 'A','S','M',' ','-','D','G','H','A','S','H','_','A','S','M',' ', + '-','D','P','O','L','Y','1','3','0','5','_','A','S','M',' ','-', + 'D','N','D','E','B','U','G','\0' }; -#define PLATFORM "platform: linux64-s390x" -#define DATE "built on: Tue Nov 20 09:38:47 2018" diff --git a/deps/openssl/config/archs/linux64-s390x/asm/crypto/include/internal/dso_conf.h b/deps/openssl/config/archs/linux64-s390x/asm/crypto/include/internal/dso_conf.h index 7a52dd1f1a..18f6ac3bff 100644 --- a/deps/openssl/config/archs/linux64-s390x/asm/crypto/include/internal/dso_conf.h +++ b/deps/openssl/config/archs/linux64-s390x/asm/crypto/include/internal/dso_conf.h @@ -1,7 +1,7 @@ /* WARNING: do not edit! */ /* Generated by Makefile from crypto/include/internal/dso_conf.h.in */ /* - * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2018 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 @@ -12,5 +12,8 @@ #ifndef HEADER_DSO_CONF_H # define HEADER_DSO_CONF_H +# define DSO_DLFCN +# define HAVE_DLFCN_H # define DSO_EXTENSION ".so" + #endif diff --git a/deps/openssl/config/archs/linux64-s390x/asm/crypto/modes/ghash-s390x.S b/deps/openssl/config/archs/linux64-s390x/asm/crypto/modes/ghash-s390x.S index 6dfaa76c35..f6bd2d0857 100644 --- a/deps/openssl/config/archs/linux64-s390x/asm/crypto/modes/ghash-s390x.S +++ b/deps/openssl/config/archs/linux64-s390x/asm/crypto/modes/ghash-s390x.S @@ -1,3 +1,5 @@ +#include "s390x_arch.h" + .text .globl gcm_gmult_4bit @@ -19,10 +21,11 @@ gcm_gmult_4bit: .align 32 gcm_ghash_4bit: larl %r1,OPENSSL_s390xcap_P - lg %r0,24(%r1) # load second word of kimd capabilities vector + lg %r0,S390X_KIMD+8(%r1) # load second word of kimd capabilities + # vector tmhh %r0,0x4000 # check for function 65 jz .Lsoft_ghash - lghi %r0,65 # function 65 + lghi %r0,S390X_GHASH # function 65 la %r1,0(%r2) # H lies right after Xi in gcm128_context .long 0xb93e0004 # kimd %r0,%r4 brc 1,.-4 # pay attention to "partial completion" @@ -40,7 +43,7 @@ gcm_ghash_4bit: lg %r0,0+1(%r2) lghi %r12,0 .Louter: - xg %r0,0(%r4) # Xi ^= inp + xg %r0,0(%r4) # Xi ^= inp xg %r1,8(%r4) xgr %r0,%r12 stg %r1,8+1(%r2) diff --git a/deps/openssl/config/archs/linux64-s390x/asm/crypto/s390xcpuid.S b/deps/openssl/config/archs/linux64-s390x/asm/crypto/s390xcpuid.S new file mode 100644 index 0000000000..7c0a5a0720 --- /dev/null +++ b/deps/openssl/config/archs/linux64-s390x/asm/crypto/s390xcpuid.S @@ -0,0 +1,323 @@ +#include "s390x_arch.h" + +.text + +.globl OPENSSL_s390x_facilities +.type OPENSSL_s390x_facilities,@function +.align 16 +OPENSSL_s390x_facilities: + lghi %r0,0 + 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 + +.globl OPENSSL_rdtsc +.type OPENSSL_rdtsc,@function +.align 16 +OPENSSL_rdtsc: + larl %r4,OPENSSL_s390xcap_P + tm S390X_STFLE+3(%r4),0x40 # check for store-clock-fast facility + jz .Lstck + + .long 0xb27cf010 # stckf 16(%r15) + lg %r2,16(%r15) + br %r14 +.Lstck: + stck 16(%r15) + lg %r2,16(%r15) + br %r14 +.size OPENSSL_rdtsc,.-OPENSSL_rdtsc + +.globl OPENSSL_atomic_add +.type OPENSSL_atomic_add,@function +.align 16 +OPENSSL_atomic_add: + l %r1,0(%r2) +.Lspin: lr %r0,%r1 + ar %r0,%r3 + cs %r1,%r0,0(%r2) + brc 4,.Lspin + lgfr %r2,%r0 # OpenSSL expects the new value + br %r14 +.size OPENSSL_atomic_add,.-OPENSSL_atomic_add + +.globl OPENSSL_wipe_cpu +.type OPENSSL_wipe_cpu,@function +.align 16 +OPENSSL_wipe_cpu: + xgr %r0,%r0 + xgr %r1,%r1 + lgr %r2,%r15 + xgr %r3,%r3 + xgr %r4,%r4 + lzdr %f0 + lzdr %f1 + lzdr %f2 + lzdr %f3 + lzdr %f4 + lzdr %f5 + lzdr %f6 + lzdr %f7 + br %r14 +.size OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu + +.globl OPENSSL_cleanse +.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) + brctg %r3,.Little + br %r14 +.align 4 +.Lot: tmll %r2,7 + jz .Laligned + stc %r0,0(%r2) + la %r2,1(%r2) + brctg %r3,.Lot +.Laligned: + srlg %r4,%r3,3 +.Loop: stg %r0,0(%r2) + la %r2,8(%r2) + brctg %r4,.Loop + lghi %r4,7 + ngr %r3,%r4 + 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 +.globl s390x_kimd +.type s390x_kimd,@function +.align 16 +s390x_kimd: + llgfr %r0,%r4 + lgr %r1,%r5 + + .long 0xb93e0002 # kimd %r0,%r2 + brc 1,.-4 # pay attention to "partial completion" + + br %r14 +.size s390x_kimd,.-s390x_kimd +.globl s390x_klmd +.type s390x_klmd,@function +.align 32 +s390x_klmd: + llgfr %r0,%r6 + lg %r1,160(%r15) + + .long 0xb93f0042 # klmd %r4,%r2 + brc 1,.-4 # pay attention to "partial completion" + + br %r14 +.size s390x_klmd,.-s390x_klmd +.globl s390x_km +.type s390x_km,@function +.align 16 +s390x_km: + lr %r0,%r5 + lgr %r1,%r6 + + .long 0xb92e0042 # km %r4,%r2 + brc 1,.-4 # pay attention to "partial completion" + + br %r14 +.size s390x_km,.-s390x_km +.globl s390x_kmac +.type s390x_kmac,@function +.align 16 +s390x_kmac: + lr %r0,%r4 + lgr %r1,%r5 + + .long 0xb91e0002 # kmac %r0,%r2 + brc 1,.-4 # pay attention to "partial completion" + + br %r14 +.size s390x_kmac,.-s390x_kmac +.globl s390x_kmo +.type s390x_kmo,@function +.align 16 +s390x_kmo: + lr %r0,%r5 + lgr %r1,%r6 + + .long 0xb92b0042 # kmo %r4,%r2 + brc 1,.-4 # pay attention to "partial completion" + + br %r14 +.size s390x_kmo,.-s390x_kmo +.globl s390x_kmf +.type s390x_kmf,@function +.align 16 +s390x_kmf: + lr %r0,%r5 + lgr %r1,%r6 + + .long 0xb92a0042 # kmf %r4,%r2 + brc 1,.-4 # pay attention to "partial completion" + + br %r14 +.size s390x_kmf,.-s390x_kmf +.globl s390x_kma +.type s390x_kma,@function +.align 16 +s390x_kma: + stg %r6,6*8(%r15) + lmg %r0,%r1,160(%r15) + + .long 0xb9292064 # kma %r6,%r2,%r4 + brc 1,.-4 # pay attention to "partial completion" + + lg %r6,6*8(%r15) + br %r14 +.size s390x_kma,.-s390x_kma +.section .init + brasl %r14,OPENSSL_cpuid_setup diff --git a/deps/openssl/config/archs/linux64-s390x/asm/crypto/sha/keccak1600-s390x.S b/deps/openssl/config/archs/linux64-s390x/asm/crypto/sha/keccak1600-s390x.S new file mode 100644 index 0000000000..1a74fdb20e --- /dev/null +++ b/deps/openssl/config/archs/linux64-s390x/asm/crypto/sha/keccak1600-s390x.S @@ -0,0 +1,464 @@ +.text + +.type __KeccakF1600,@function +.align 32 +__KeccakF1600: + stg %r14,8*14(%r15) + lg %r0,160(%r2) + lg %r1,168(%r2) + lg %r5,176(%r2) + lg %r6,184(%r2) + lg %r7,192(%r2) + larl %r4,iotas + j .Loop + +.align 16 +.Loop: + lg %r8,0(%r2) + lg %r9,48(%r2) + lg %r10,96(%r2) + lg %r11,144(%r2) + + xgr %r0,%r8 + xg %r1,8(%r2) + xg %r5,16(%r2) + xg %r6,24(%r2) + lgr %r12,%r7 + xg %r7,32(%r2) + + xg %r0,40(%r2) + xgr %r1,%r9 + xg %r5,56(%r2) + xg %r6,64(%r2) + xg %r7,72(%r2) + + xg %r0,80(%r2) + xg %r1,88(%r2) + xgr %r5,%r10 + xg %r6,104(%r2) + xg %r7,112(%r2) + + xg %r0,120(%r2) + xg %r1,128(%r2) + xg %r5,136(%r2) + xgr %r6,%r11 + xg %r7,152(%r2) + + lgr %r13,%r5 + rllg %r5,%r5,1 + xgr %r5,%r0 # D[1] = ROL64(C[2], 1) ^ C[0] + + rllg %r0,%r0,1 + xgr %r0,%r6 # D[4] = ROL64(C[0], 1) ^ C[3] + + rllg %r6,%r6,1 + xgr %r6,%r1 # D[2] = ROL64(C[3], 1) ^ C[1] + + rllg %r1,%r1,1 + xgr %r1,%r7 # D[0] = ROL64(C[1], 1) ^ C[4] + + rllg %r7,%r7,1 + xgr %r7,%r13 # D[3] = ROL64(C[4], 1) ^ C[2] + xgr %r9,%r5 + xgr %r10,%r6 + xgr %r11,%r7 + rllg %r9,%r9,44 + xgr %r12,%r0 + rllg %r10,%r10,43 + xgr %r8,%r1 + + lgr %r13,%r9 + ogr %r9,%r10 + rllg %r11,%r11,21 + xgr %r9,%r8 # C[0] ^ ( C[1] | C[2]) + rllg %r12,%r12,14 + xg %r9,0(%r4) + la %r4,8(%r4) + stg %r9,0(%r3) # R[0][0] = C[0] ^ ( C[1] | C[2]) ^ iotas[i] + + lgr %r14,%r12 + ngr %r12,%r11 + lghi %r9,-1 # no 'not' instruction :-( + xgr %r12,%r10 # C[2] ^ ( C[4] & C[3]) + xgr %r10,%r9 # not %r10 + stg %r12,16(%r3) # R[0][2] = C[2] ^ ( C[4] & C[3]) + ogr %r10,%r11 + xgr %r10,%r13 # C[1] ^ (~C[2] | C[3]) + + ngr %r13,%r8 + stg %r10,8(%r3) # R[0][1] = C[1] ^ (~C[2] | C[3]) + xgr %r13,%r14 # C[4] ^ ( C[1] & C[0]) + ogr %r14,%r8 + stg %r13,32(%r3) # R[0][4] = C[4] ^ ( C[1] & C[0]) + xgr %r14,%r11 # C[3] ^ ( C[4] | C[0]) + stg %r14,24(%r3) # R[0][3] = C[3] ^ ( C[4] | C[0]) + + + lg %r8,24(%r2) + lg %r12,176(%r2) + lg %r11,128(%r2) + lg %r9,72(%r2) + lg %r10,80(%r2) + + xgr %r8,%r7 + xgr %r12,%r6 + rllg %r8,%r8,28 + xgr %r11,%r5 + rllg %r12,%r12,61 + xgr %r9,%r0 + rllg %r11,%r11,45 + xgr %r10,%r1 + + lgr %r13,%r8 + ogr %r8,%r12 + rllg %r9,%r9,20 + xgr %r8,%r11 # C[3] ^ (C[0] | C[4]) + rllg %r10,%r10,3 + stg %r8,64(%r3) # R[1][3] = C[3] ^ (C[0] | C[4]) + + lgr %r14,%r9 + ngr %r9,%r13 + lghi %r8,-1 # no 'not' instruction :-( + xgr %r9,%r12 # C[4] ^ (C[1] & C[0]) + xgr %r12,%r8 # not %r12 + stg %r9,72(%r3) # R[1][4] = C[4] ^ (C[1] & C[0]) + + ogr %r12,%r11 + xgr %r12,%r10 # C[2] ^ (~C[4] | C[3]) + + ngr %r11,%r10 + stg %r12,56(%r3) # R[1][2] = C[2] ^ (~C[4] | C[3]) + xgr %r11,%r14 # C[1] ^ (C[3] & C[2]) + ogr %r14,%r10 + stg %r11,48(%r3) # R[1][1] = C[1] ^ (C[3] & C[2]) + xgr %r14,%r13 # C[0] ^ (C[1] | C[2]) + stg %r14,40(%r3) # R[1][0] = C[0] ^ (C[1] | C[2]) + + + lg %r10,104(%r2) + lg %r11,152(%r2) + lg %r9,56(%r2) + lg %r12,160(%r2) + lg %r8,8(%r2) + + xgr %r10,%r7 + xgr %r11,%r0 + rllg %r10,%r10,25 + xgr %r9,%r6 + rllg %r11,%r11,8 + xgr %r12,%r1 + rllg %r9,%r9,6 + xgr %r8,%r5 + + lgr %r13,%r10 + ngr %r10,%r11 + rllg %r12,%r12,18 + xgr %r10,%r9 # C[1] ^ ( C[2] & C[3]) + lghi %r14,-1 # no 'not' instruction :-( + stg %r10,88(%r3) # R[2][1] = C[1] ^ ( C[2] & C[3]) + + xgr %r11,%r14 # not %r11 + lgr %r14,%r12 + ngr %r12,%r11 + rllg %r8,%r8,1 + xgr %r12,%r13 # C[2] ^ ( C[4] & ~C[3]) + ogr %r13,%r9 + stg %r12,96(%r3) # R[2][2] = C[2] ^ ( C[4] & ~C[3]) + xgr %r13,%r8 # C[0] ^ ( C[2] | C[1]) + + ngr %r9,%r8 + stg %r13,80(%r3) # R[2][0] = C[0] ^ ( C[2] | C[1]) + xgr %r9,%r14 # C[4] ^ ( C[1] & C[0]) + ogr %r8,%r14 + stg %r9,112(%r3) # R[2][4] = C[4] ^ ( C[1] & C[0]) + xgr %r8,%r11 # ~C[3] ^ ( C[0] | C[4]) + stg %r8,104(%r3) # R[2][3] = ~C[3] ^ ( C[0] | C[4]) + + + lg %r10,88(%r2) + lg %r11,136(%r2) + lg %r9,40(%r2) + lg %r12,184(%r2) + lg %r8,32(%r2) + + xgr %r10,%r5 + xgr %r11,%r6 + rllg %r10,%r10,10 + xgr %r9,%r1 + rllg %r11,%r11,15 + xgr %r12,%r7 + rllg %r9,%r9,36 + xgr %r8,%r0 + rllg %r12,%r12,56 + + lgr %r13,%r10 + ogr %r10,%r11 + lghi %r14,-1 # no 'not' instruction :-( + xgr %r10,%r9 # C[1] ^ ( C[2] | C[3]) + xgr %r11,%r14 # not %r11 + stg %r10,128(%r3) # R[3][1] = C[1] ^ ( C[2] | C[3]) + + lgr %r14,%r12 + ogr %r12,%r11 + rllg %r8,%r8,27 + xgr %r12,%r13 # C[2] ^ ( C[4] | ~C[3]) + ngr %r13,%r9 + stg %r12,136(%r3) # R[3][2] = C[2] ^ ( C[4] | ~C[3]) + xgr %r13,%r8 # C[0] ^ ( C[2] & C[1]) + + ogr %r9,%r8 + stg %r13,120(%r3) # R[3][0] = C[0] ^ ( C[2] & C[1]) + xgr %r9,%r14 # C[4] ^ ( C[1] | C[0]) + ngr %r8,%r14 + stg %r9,152(%r3) # R[3][4] = C[4] ^ ( C[1] | C[0]) + xgr %r8,%r11 # ~C[3] ^ ( C[0] & C[4]) + stg %r8,144(%r3) # R[3][3] = ~C[3] ^ ( C[0] & C[4]) + + + xg %r6,16(%r2) + xg %r7,64(%r2) + xg %r5,168(%r2) + xg %r0,112(%r2) + xgr %r3,%r2 # xchg %r3,%r2 + rllg %r6,%r6,62 + xg %r1,120(%r2) + rllg %r7,%r7,55 + xgr %r2,%r3 + rllg %r5,%r5,2 + xgr %r3,%r2 + rllg %r0,%r0,39 + lgr %r13,%r6 + ngr %r6,%r7 + lghi %r14,-1 # no 'not' instruction :-( + xgr %r6,%r5 # C[4] ^ ( C[0] & C[1]) + xgr %r7,%r14 # not %r7 + stg %r6,192(%r2) # R[4][4] = C[4] ^ ( C[0] & C[1]) + + lgr %r14,%r0 + ngr %r0,%r7 + rllg %r1,%r1,41 + xgr %r0,%r13 # C[0] ^ ( C[2] & ~C[1]) + ogr %r13,%r5 + stg %r0,160(%r2) # R[4][0] = C[0] ^ ( C[2] & ~C[1]) + xgr %r13,%r1 # C[3] ^ ( C[0] | C[4]) + + ngr %r5,%r1 + stg %r13,184(%r2) # R[4][3] = C[3] ^ ( C[0] | C[4]) + xgr %r5,%r14 # C[2] ^ ( C[4] & C[3]) + ogr %r1,%r14 + stg %r5,176(%r2) # R[4][2] = C[2] ^ ( C[4] & C[3]) + xgr %r1,%r7 # ~C[1] ^ ( C[2] | C[3]) + + lgr %r7,%r6 # harmonize with the loop top + lgr %r6,%r13 + stg %r1,168(%r2) # R[4][1] = ~C[1] ^ ( C[2] | C[3]) + + tmll %r4,255 + jnz .Loop + + lg %r14,8*14(%r15) + br %r14 +.size __KeccakF1600,.-__KeccakF1600 +.type KeccakF1600,@function +.align 32 +KeccakF1600: +.LKeccakF1600: + lghi %r1,-360 + stmg %r6,%r15,8*6(%r15) + lgr %r0,%r15 + la %r15,0(%r1,%r15) + stg %r0,0(%r15) + + lghi %r8,-1 # no 'not' instruction :-( + lghi %r9,-1 + lghi %r10,-1 + lghi %r11,-1 + lghi %r12,-1 + lghi %r13,-1 + xg %r8,8(%r2) + xg %r9,16(%r2) + xg %r10,64(%r2) + xg %r11,96(%r2) + xg %r12,136(%r2) + xg %r13,160(%r2) + stmg %r8,%r9,8(%r2) + stg %r10,64(%r2) + stg %r11,96(%r2) + stg %r12,136(%r2) + stg %r13,160(%r2) + + la %r3,160(%r15) + + bras %r14,__KeccakF1600 + + lghi %r8,-1 # no 'not' instruction :-( + lghi %r9,-1 + lghi %r10,-1 + lghi %r11,-1 + lghi %r12,-1 + lghi %r13,-1 + xg %r8,8(%r2) + xg %r9,16(%r2) + xg %r10,64(%r2) + xg %r11,96(%r2) + xg %r12,136(%r2) + xg %r13,160(%r2) + stmg %r8,%r9,8(%r2) + stg %r10,64(%r2) + stg %r11,96(%r2) + stg %r12,136(%r2) + stg %r13,160(%r2) + + lmg %r6,%r15,360+6*8(%r15) + br %r14 +.size KeccakF1600,.-KeccakF1600 +.globl SHA3_absorb +.type SHA3_absorb,@function +.align 32 +SHA3_absorb: + lghi %r1,-360 + stmg %r5,%r15,8*5(%r15) + lgr %r0,%r15 + la %r15,0(%r1,%r15) + stg %r0,0(%r15) + + lghi %r8,-1 # no 'not' instruction :-( + lghi %r9,-1 + lghi %r10,-1 + lghi %r11,-1 + lghi %r12,-1 + lghi %r13,-1 + xg %r8,8(%r2) + xg %r9,16(%r2) + xg %r10,64(%r2) + xg %r11,96(%r2) + xg %r12,136(%r2) + xg %r13,160(%r2) + stmg %r8,%r9,8(%r2) + stg %r10,64(%r2) + stg %r11,96(%r2) + stg %r12,136(%r2) + stg %r13,160(%r2) + +.Loop_absorb: + clgr %r4,%r5 + jl .Ldone_absorb + + srlg %r5,%r5,3 + la %r1,0(%r2) + +.Lblock_absorb: + lrvg %r0,0(%r3) + la %r3,8(%r3) + xg %r0,0(%r1) + aghi %r4,-8 + stg %r0,0(%r1) + la %r1,8(%r1) + brct %r5,.Lblock_absorb + + stmg %r3,%r4,360+3*8(%r15) + la %r3,160(%r15) + bras %r14,__KeccakF1600 + lmg %r3,%r5,360+3*8(%r15) + j .Loop_absorb + +.align 16 +.Ldone_absorb: + lghi %r8,-1 # no 'not' instruction :-( + lghi %r9,-1 + lghi %r10,-1 + lghi %r11,-1 + lghi %r12,-1 + lghi %r13,-1 + xg %r8,8(%r2) + xg %r9,16(%r2) + xg %r10,64(%r2) + xg %r11,96(%r2) + xg %r12,136(%r2) + xg %r13,160(%r2) + stmg %r8,%r9,8(%r2) + stg %r10,64(%r2) + stg %r11,96(%r2) + stg %r12,136(%r2) + stg %r13,160(%r2) + + lgr %r2,%r4 # return value + + lmg %r6,%r15,360+6*8(%r15) + br %r14 +.size SHA3_absorb,.-SHA3_absorb +.globl SHA3_squeeze +.type SHA3_squeeze,@function +.align 32 +SHA3_squeeze: + srlg %r5,%r5,3 + stg %r14,2*8(%r15) + lghi %r14,8 + stg %r5,5*8(%r15) + la %r1,0(%r2) + + j .Loop_squeeze + +.align 16 +.Loop_squeeze: + clgr %r4,%r14 + jl .Ltail_squeeze + + lrvg %r0,0(%r1) + la %r1,8(%r1) + stg %r0,0(%r3) + la %r3,8(%r3) + aghi %r4,-8 # len -= 8 + jz .Ldone_squeeze + + brct %r5,.Loop_squeeze # bsz-- + + stmg %r3,%r4,3*8(%r15) + bras %r14,.LKeccakF1600 + lmg %r3,%r5,3*8(%r15) + lghi %r14,8 + la %r1,0(%r2) + j .Loop_squeeze + +.Ltail_squeeze: + lg %r0,0(%r1) +.Loop_tail_squeeze: + stc %r0,0(%r3) + la %r3,1(%r3) + srlg %r0,%r0,8 + brct %r4,.Loop_tail_squeeze + +.Ldone_squeeze: + lg %r14,2*8(%r15) + br %r14 +.size SHA3_squeeze,.-SHA3_squeeze +.align 256 + .quad 0,0,0,0,0,0,0,0 +.type iotas,@object +iotas: + .quad 0x0000000000000001 + .quad 0x0000000000008082 + .quad 0x800000000000808a + .quad 0x8000000080008000 + .quad 0x000000000000808b + .quad 0x0000000080000001 + .quad 0x8000000080008081 + .quad 0x8000000000008009 + .quad 0x000000000000008a + .quad 0x0000000000000088 + .quad 0x0000000080008009 + .quad 0x000000008000000a + .quad 0x000000008000808b + .quad 0x800000000000008b + .quad 0x8000000000008089 + .quad 0x8000000000008003 + .quad 0x8000000000008002 + .quad 0x8000000000000080 + .quad 0x000000000000800a + .quad 0x800000008000000a + .quad 0x8000000080008081 + .quad 0x8000000000008080 + .quad 0x0000000080000001 + .quad 0x8000000080008008 +.size iotas,.-iotas +.asciz "Keccak-1600 absorb and squeeze for s390x, CRYPTOGAMS by <appro@openssl.org>" diff --git a/deps/openssl/config/archs/linux64-s390x/asm/crypto/sha/sha1-s390x.S b/deps/openssl/config/archs/linux64-s390x/asm/crypto/sha/sha1-s390x.S index 5a556b5a2d..37413bfb08 100644 --- a/deps/openssl/config/archs/linux64-s390x/asm/crypto/sha/sha1-s390x.S +++ b/deps/openssl/config/archs/linux64-s390x/asm/crypto/sha/sha1-s390x.S @@ -1,3 +1,5 @@ +#include "s390x_arch.h" + .text .align 64 .type Ktable,@object @@ -8,7 +10,7 @@ Ktable: .long 0x5a827999,0x6ed9eba1,0x8f1bbcdc,0xca62c1d6 .type sha1_block_data_order,@function sha1_block_data_order: larl %r1,OPENSSL_s390xcap_P - lg %r0,16(%r1) # check kimd capabilities + lg %r0,S390X_KIMD(%r1) # check kimd capabilities tmhh %r0,16384 jz .Lsoftware lghi %r0,1 diff --git a/deps/openssl/config/archs/linux64-s390x/asm/crypto/sha/sha256-s390x.S b/deps/openssl/config/archs/linux64-s390x/asm/crypto/sha/sha256-s390x.S index e66c672764..45d3601ac2 100644 --- a/deps/openssl/config/archs/linux64-s390x/asm/crypto/sha/sha256-s390x.S +++ b/deps/openssl/config/archs/linux64-s390x/asm/crypto/sha/sha256-s390x.S @@ -1,3 +1,5 @@ +#include "s390x_arch.h" + .text .align 64 .type K256,@object @@ -24,7 +26,7 @@ K256: sha256_block_data_order: sllg %r4,%r4,6 larl %r1,OPENSSL_s390xcap_P - lg %r0,16(%r1) # check kimd capabilities + lg %r0,S390X_KIMD(%r1) # check kimd capabilities tmhh %r0,8192 jz .Lsoftware lghi %r0,2 @@ -1234,7 +1236,7 @@ sha256_block_data_order: clg %r3,256(%r15) jne .Lloop - lmg %r6,%r15,272(%r15) + lmg %r6,%r15,272(%r15) br %r14 .size sha256_block_data_order,.-sha256_block_data_order .string "SHA256 block transform for s390x, CRYPTOGAMS by <appro@openssl.org>" diff --git a/deps/openssl/config/archs/linux64-s390x/asm/crypto/sha/sha512-s390x.S b/deps/openssl/config/archs/linux64-s390x/asm/crypto/sha/sha512-s390x.S index 5ff5c6bf9f..79e4277351 100644 --- a/deps/openssl/config/archs/linux64-s390x/asm/crypto/sha/sha512-s390x.S +++ b/deps/openssl/config/archs/linux64-s390x/asm/crypto/sha/sha512-s390x.S @@ -1,3 +1,5 @@ +#include "s390x_arch.h" + .text .align 64 .type K512,@object @@ -48,7 +50,7 @@ K512: sha512_block_data_order: sllg %r4,%r4,7 larl %r1,OPENSSL_s390xcap_P - lg %r0,16(%r1) # check kimd capabilities + lg %r0,S390X_KIMD(%r1) # check kimd capabilities tmhh %r0,4096 jz .Lsoftware lghi %r0,3 @@ -1258,7 +1260,7 @@ sha512_block_data_order: clg %r3,320(%r15) jne .Lloop - lmg %r6,%r15,336(%r15) + lmg %r6,%r15,336(%r15) br %r14 .size sha512_block_data_order,.-sha512_block_data_order .string "SHA512 block transform for s390x, CRYPTOGAMS by <appro@openssl.org>" |