Upload Kmake

This commit is contained in:
Gorochu
2026-05-26 23:36:42 -07:00
parent ba051b2f74
commit 555ec72358
41615 changed files with 13344630 additions and 1 deletions

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,201 @@
.text
.type _mul_1x1,@function
.align 16
_mul_1x1:
lgr %r6,%r3
sllg %r7,%r3,1
sllg %r8,%r3,2
sllg %r9,%r3,3
srag %r3,%r6,63 # broadcast 63rd bit
nihh %r6,0x1fff
srag %r12,%r7,63 # broadcast 62nd bit
nihh %r7,0x3fff
srag %r13,%r8,63 # broadcast 61st bit
nihh %r8,0x7fff
ngr %r3,%r5
ngr %r12,%r5
ngr %r13,%r5
lghi %r0,0
lgr %r10,%r6
stg %r0,96(%r15) # tab[0]=0
xgr %r10,%r7
stg %r6,104(%r15) # tab[1]=a1
lgr %r11,%r8
stg %r7,112(%r15) # tab[2]=a2
xgr %r11,%r9
stg %r10,120(%r15) # tab[3]=a1^a2
xgr %r6,%r8
stg %r8,128(%r15) # tab[4]=a4
xgr %r7,%r8
stg %r6,136(%r15) # tab[5]=a1^a4
xgr %r10,%r8
stg %r7,144(%r15) # tab[6]=a2^a4
xgr %r6,%r11
stg %r10,152(%r15) # tab[7]=a1^a2^a4
xgr %r7,%r11
stg %r9,160(%r15) # tab[8]=a8
xgr %r10,%r11
stg %r6,168(%r15) # tab[9]=a1^a8
xgr %r6,%r8
stg %r7,176(%r15) # tab[10]=a2^a8
xgr %r7,%r8
stg %r10,184(%r15) # tab[11]=a1^a2^a8
xgr %r10,%r8
stg %r11,192(%r15) # tab[12]=a4^a8
srlg %r4,%r3,1
stg %r6,200(%r15) # tab[13]=a1^a4^a8
sllg %r3,%r3,63
stg %r7,208(%r15) # tab[14]=a2^a4^a8
srlg %r0,%r12,2
stg %r10,216(%r15) # tab[15]=a1^a2^a4^a8
lghi %r9,120
sllg %r6,%r12,62
sllg %r12,%r5,3
srlg %r1,%r13,3
ngr %r12,%r9
sllg %r7,%r13,61
srlg %r13,%r5,4-3
xgr %r4,%r0
ngr %r13,%r9
xgr %r3,%r6
xgr %r4,%r1
xgr %r3,%r7
xg %r3,96(%r12,%r15)
srlg %r12,%r5,8-3
ngr %r12,%r9
lg %r1,96(%r13,%r15)
srlg %r13,%r5,12-3
sllg %r0,%r1,4
ngr %r13,%r9
srlg %r1,%r1,60
xgr %r3,%r0
xgr %r4,%r1
lg %r0,96(%r12,%r15)
srlg %r12,%r5,16-3
sllg %r1,%r0,8
ngr %r12,%r9
srlg %r0,%r0,56
xgr %r3,%r1
xgr %r4,%r0
lg %r1,96(%r13,%r15)
srlg %r13,%r5,20-3
sllg %r0,%r1,12
ngr %r13,%r9
srlg %r1,%r1,52
xgr %r3,%r0
xgr %r4,%r1
lg %r0,96(%r12,%r15)
srlg %r12,%r5,24-3
sllg %r1,%r0,16
ngr %r12,%r9
srlg %r0,%r0,48
xgr %r3,%r1
xgr %r4,%r0
lg %r1,96(%r13,%r15)
srlg %r13,%r5,28-3
sllg %r0,%r1,20
ngr %r13,%r9
srlg %r1,%r1,44
xgr %r3,%r0
xgr %r4,%r1
lg %r0,96(%r12,%r15)
srlg %r12,%r5,32-3
sllg %r1,%r0,24
ngr %r12,%r9
srlg %r0,%r0,40
xgr %r3,%r1
xgr %r4,%r0
lg %r1,96(%r13,%r15)
srlg %r13,%r5,36-3
sllg %r0,%r1,28
ngr %r13,%r9
srlg %r1,%r1,36
xgr %r3,%r0
xgr %r4,%r1
lg %r0,96(%r12,%r15)
srlg %r12,%r5,40-3
sllg %r1,%r0,32
ngr %r12,%r9
srlg %r0,%r0,32
xgr %r3,%r1
xgr %r4,%r0
lg %r1,96(%r13,%r15)
srlg %r13,%r5,44-3
sllg %r0,%r1,36
ngr %r13,%r9
srlg %r1,%r1,28
xgr %r3,%r0
xgr %r4,%r1
lg %r0,96(%r12,%r15)
srlg %r12,%r5,48-3
sllg %r1,%r0,40
ngr %r12,%r9
srlg %r0,%r0,24
xgr %r3,%r1
xgr %r4,%r0
lg %r1,96(%r13,%r15)
srlg %r13,%r5,52-3
sllg %r0,%r1,44
ngr %r13,%r9
srlg %r1,%r1,20
xgr %r3,%r0
xgr %r4,%r1
lg %r0,96(%r12,%r15)
srlg %r12,%r5,56-3
sllg %r1,%r0,48
ngr %r12,%r9
srlg %r0,%r0,16
xgr %r3,%r1
xgr %r4,%r0
lg %r1,96(%r13,%r15)
srlg %r13,%r5,60-3
sllg %r0,%r1,52
ngr %r13,%r9
srlg %r1,%r1,12
xgr %r3,%r0
xgr %r4,%r1
lg %r0,96(%r12,%r15)
sllg %r1,%r0,56
srlg %r0,%r0,8
xgr %r3,%r1
xgr %r4,%r0
lg %r1,96(%r13,%r15)
sllg %r0,%r1,60
srlg %r1,%r1,4
xgr %r3,%r0
xgr %r4,%r1
br %r14
.size _mul_1x1,.-_mul_1x1
.globl bn_GF2m_mul_2x2
.type bn_GF2m_mul_2x2,@function
.align 16
bn_GF2m_mul_2x2:
stm %r3,%r15,3*4(%r15)
lghi %r1,-96-128
la %r0,0(%r15)
la %r15,0(%r1,%r15) # alloca
st %r0,0(%r15) # back chain
sllg %r3,%r3,32
sllg %r5,%r5,32
or %r3,%r4
or %r5,%r6
bras %r14,_mul_1x1
rllg %r3,%r3,32
rllg %r4,%r4,32
stmg %r3,%r4,0(%r2)
lm %r6,%r15,248(%r15)
br %r14
.size bn_GF2m_mul_2x2,.-bn_GF2m_mul_2x2
.string "GF(2^m) Multiplication for s390x, CRYPTOGAMS by <appro@openssl.org>"

View File

@ -0,0 +1,176 @@
.text
.globl bn_mul_mont
.type bn_mul_mont,@function
bn_mul_mont:
lgf %r1,96(%r15) # pull %r1
sla %r1,2 # %r1 to enumerate bytes
la %r4,0(%r1,%r4)
st %r2,2*4(%r15)
cghi %r1,16 #
lghi %r2,0 #
blr %r14 # if(%r1<16) return 0;
tmll %r1,4
bnzr %r14 # if (%r1&1) return 0;
stm %r3,%r15,3*4(%r15)
lghi %r2,-96-8 # leave room for carry bit
lcgr %r7,%r1 # -%r1
lgr %r0,%r15
la %r2,0(%r2,%r15)
la %r15,0(%r7,%r2) # alloca
st %r0,0(%r15) # back chain
sra %r1,3 # restore %r1
la %r4,0(%r7,%r4) # restore %r4
ahi %r1,-1 # adjust %r1 for inner loop
lg %r6,0(%r6) # pull n0
rllg %r6,%r6,32
lg %r2,0(%r4)
rllg %r2,%r2,32
lg %r9,0(%r3)
rllg %r9,%r9,32
mlgr %r8,%r2 # ap[0]*bp[0]
lgr %r12,%r8
lgr %r0,%r9 # "tp[0]"*n0
msgr %r0,%r6
lg %r11,0(%r5) #
rllg %r11,%r11,32
mlgr %r10,%r0 # np[0]*m1
algr %r11,%r9 # +="tp[0]"
lghi %r13,0
alcgr %r13,%r10
la %r7,8 # j=1
lr %r14,%r1
.align 16
.L1st:
lg %r9,0(%r7,%r3)
rllg %r9,%r9,32
mlgr %r8,%r2 # ap[j]*bp[0]
algr %r9,%r12
lghi %r12,0
alcgr %r12,%r8
lg %r11,0(%r7,%r5)
rllg %r11,%r11,32
mlgr %r10,%r0 # np[j]*m1
algr %r11,%r13
lghi %r13,0
alcgr %r10,%r13 # +="tp[j]"
algr %r11,%r9
alcgr %r13,%r10
stg %r11,96-8(%r7,%r15) # tp[j-1]=
la %r7,8(%r7) # j++
brct %r14,.L1st
algr %r13,%r12
lghi %r12,0
alcgr %r12,%r12 # upmost overflow bit
stg %r13,96-8(%r7,%r15)
stg %r12,96(%r7,%r15)
la %r4,8(%r4) # bp++
.Louter:
lg %r2,0(%r4) # bp[i]
rllg %r2,%r2,32
lg %r9,0(%r3)
rllg %r9,%r9,32
mlgr %r8,%r2 # ap[0]*bp[i]
alg %r9,96(%r15) # +=tp[0]
lghi %r12,0
alcgr %r12,%r8
lgr %r0,%r9
msgr %r0,%r6 # tp[0]*n0
lg %r11,0(%r5) # np[0]
rllg %r11,%r11,32
mlgr %r10,%r0 # np[0]*m1
algr %r11,%r9 # +="tp[0]"
lghi %r13,0
alcgr %r13,%r10
la %r7,8 # j=1
lr %r14,%r1
.align 16
.Linner:
lg %r9,0(%r7,%r3)
rllg %r9,%r9,32
mlgr %r8,%r2 # ap[j]*bp[i]
algr %r9,%r12
lghi %r12,0
alcgr %r8,%r12
alg %r9,96(%r7,%r15)# +=tp[j]
alcgr %r12,%r8
lg %r11,0(%r7,%r5)
rllg %r11,%r11,32
mlgr %r10,%r0 # np[j]*m1
algr %r11,%r13
lghi %r13,0
alcgr %r10,%r13
algr %r11,%r9 # +="tp[j]"
alcgr %r13,%r10
stg %r11,96-8(%r7,%r15) # tp[j-1]=
la %r7,8(%r7) # j++
brct %r14,.Linner
algr %r13,%r12
lghi %r12,0
alcgr %r12,%r12
alg %r13,96(%r7,%r15)# accumulate previous upmost overflow bit
lghi %r8,0
alcgr %r12,%r8 # new upmost overflow bit
stg %r13,96-8(%r7,%r15)
stg %r12,96(%r7,%r15)
la %r4,8(%r4) # bp++
cl %r4,120(%r7,%r15) # compare to &bp[num]
jne .Louter
l %r2,112(%r7,%r15) # reincarnate rp
la %r3,96(%r15)
ahi %r1,1 # restore %r1, incidentally clears "borrow"
la %r7,0
lr %r14,%r1
.Lsub: lg %r9,0(%r7,%r3)
lg %r11,0(%r7,%r5)
rllg %r11,%r11,32
slbgr %r9,%r11
stg %r9,0(%r7,%r2)
la %r7,8(%r7)
brct %r14,.Lsub
lghi %r8,0
slbgr %r12,%r8 # handle upmost carry
lghi %r13,-1
xgr %r13,%r12
la %r7,0
lgr %r14,%r1
.Lcopy: lg %r8,96(%r7,%r15) # conditional copy
lg %r9,0(%r7,%r2)
ngr %r8,%r12
ngr %r9,%r13
ogr %r9,%r8
rllg %r9,%r9,32
stg %r7,96(%r7,%r15) # zap tp
stg %r9,0(%r7,%r2)
la %r7,8(%r7)
brct %r14,.Lcopy
la %r1,128(%r7,%r15)
lm %r6,%r15,0(%r1)
lghi %r2,1 # signal "processed"
br %r14
.size bn_mul_mont,.-bn_mul_mont
.string "Montgomery Multiplication for s390x, CRYPTOGAMS by <appro@openssl.org>"

View File

@ -0,0 +1,32 @@
/*
* WARNING: do not edit!
* Generated by util/mkbuildinf.pl
*
* Copyright 2014-2025 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the Apache License 2.0 (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: linux32-s390x"
#define DATE "built on: Wed Mar 5 21:05:22 2025 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 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','3',
'1',' ','-','W','a',',','-','m','z','a','r','c','h',' ','-','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','U','I','L','D','I','N','G','_','O','P','E',
'N','S','S','L',' ','-','D','N','D','E','B','U','G','\0'
};

View File

@ -0,0 +1,917 @@
#include "s390x_arch.h"
.text
.globl ChaCha20_ctr32
.type ChaCha20_ctr32,@function
.align 32
ChaCha20_ctr32:
larl %r1,OPENSSL_s390xcap_P
lghi %r0,64
ltr %r4,%r4
bzr %r14
lg %r1,S390X_STFLE+16(%r1)
clr %r4,%r0
jle .Lshort
tmhh %r1,16384
jnz .LChaCha20_ctr32_vx
.Lshort:
ahi %r4,-64
lhi %r1,-176
stm %r6,%r15,6*4(%r15)
slr %r2,%r3
la %r4,0(%r3,%r4)
larl %r7,.Lsigma
lgr %r0,%r15
la %r15,0(%r1,%r15)
st %r0,0(%r15)
lmg %r8,%r11,0(%r5)
lmg %r12,%r13,0(%r6)
lmg %r6,%r7,0(%r7)
la %r14,0(%r3)
st %r2,176+3*4(%r15)
st %r4,176+4*4(%r15)
stmg %r6,%r13,96(%r15)
srlg %r10,%r12,32
j .Loop_outer
.align 16
.Loop_outer:
lm %r0,%r7,96+4*0(%r15)
lm %r8,%r9,96+4*10(%r15)
lm %r11,%r13,96+4*13(%r15)
stm %r8,%r9,96+4*8+4*10(%r15)
lm %r8,%r9,96+4*8(%r15)
st %r10,96+4*12(%r15)
st %r14,176+2*4(%r15)
lhi %r14,10
j .Loop
.align 4
.Loop:
alr %r0,%r4
alr %r1,%r5
xr %r10,%r0
xr %r11,%r1
rll %r10,%r10,16
rll %r11,%r11,16
alr %r8,%r10
alr %r9,%r11
xr %r4,%r8
xr %r5,%r9
rll %r4,%r4,12
rll %r5,%r5,12
alr %r0,%r4
alr %r1,%r5
xr %r10,%r0
xr %r11,%r1
rll %r10,%r10,8
rll %r11,%r11,8
alr %r8,%r10
alr %r9,%r11
xr %r4,%r8
xr %r5,%r9
rll %r4,%r4,7
rll %r5,%r5,7
stm %r8,%r9,96+4*8+4*8(%r15)
lm %r8,%r9,96+4*8+4*10(%r15)
alr %r2,%r6
alr %r3,%r7
xr %r12,%r2
xr %r13,%r3
rll %r12,%r12,16
rll %r13,%r13,16
alr %r8,%r12
alr %r9,%r13
xr %r6,%r8
xr %r7,%r9
rll %r6,%r6,12
rll %r7,%r7,12
alr %r2,%r6
alr %r3,%r7
xr %r12,%r2
xr %r13,%r3
rll %r12,%r12,8
rll %r13,%r13,8
alr %r8,%r12
alr %r9,%r13
xr %r6,%r8
xr %r7,%r9
rll %r6,%r6,7
rll %r7,%r7,7
alr %r0,%r5
alr %r1,%r6
xr %r13,%r0
xr %r10,%r1
rll %r13,%r13,16
rll %r10,%r10,16
alr %r8,%r13
alr %r9,%r10
xr %r5,%r8
xr %r6,%r9
rll %r5,%r5,12
rll %r6,%r6,12
alr %r0,%r5
alr %r1,%r6
xr %r13,%r0
xr %r10,%r1
rll %r13,%r13,8
rll %r10,%r10,8
alr %r8,%r13
alr %r9,%r10
xr %r5,%r8
xr %r6,%r9
rll %r5,%r5,7
rll %r6,%r6,7
stm %r8,%r9,96+4*8+4*10(%r15)
lm %r8,%r9,96+4*8+4*8(%r15)
alr %r2,%r7
alr %r3,%r4
xr %r11,%r2
xr %r12,%r3
rll %r11,%r11,16
rll %r12,%r12,16
alr %r8,%r11
alr %r9,%r12
xr %r7,%r8
xr %r4,%r9
rll %r7,%r7,12
rll %r4,%r4,12
alr %r2,%r7
alr %r3,%r4
xr %r11,%r2
xr %r12,%r3
rll %r11,%r11,8
rll %r12,%r12,8
alr %r8,%r11
alr %r9,%r12
xr %r7,%r8
xr %r4,%r9
rll %r7,%r7,7
rll %r4,%r4,7
brct %r14,.Loop
l %r14,176+2*4(%r15)
stm %r8,%r9,96+4*8+4*8(%r15)
lm %r8,%r9,176+3*4(%r15)
al %r0,96+4*0(%r15)
al %r1,96+4*1(%r15)
al %r2,96+4*2(%r15)
al %r3,96+4*3(%r15)
al %r4,96+4*4(%r15)
al %r5,96+4*5(%r15)
al %r6,96+4*6(%r15)
al %r7,96+4*7(%r15)
lrvr %r0,%r0
lrvr %r1,%r1
lrvr %r2,%r2
lrvr %r3,%r3
lrvr %r4,%r4
lrvr %r5,%r5
lrvr %r6,%r6
lrvr %r7,%r7
al %r10,96+4*12(%r15)
al %r11,96+4*13(%r15)
al %r12,96+4*14(%r15)
al %r13,96+4*15(%r15)
lrvr %r10,%r10
lrvr %r11,%r11
lrvr %r12,%r12
lrvr %r13,%r13
la %r8,0(%r8,%r14)
clr %r14,%r9
jh .Ltail
x %r0,4*0(%r14)
x %r1,4*1(%r14)
st %r0,4*0(%r8)
x %r2,4*2(%r14)
st %r1,4*1(%r8)
x %r3,4*3(%r14)
st %r2,4*2(%r8)
x %r4,4*4(%r14)
st %r3,4*3(%r8)
lm %r0,%r3,96+4*8+4*8(%r15)
x %r5,4*5(%r14)
st %r4,4*4(%r8)
x %r6,4*6(%r14)
al %r0,96+4*8(%r15)
st %r5,4*5(%r8)
x %r7,4*7(%r14)
al %r1,96+4*9(%r15)
st %r6,4*6(%r8)
x %r10,4*12(%r14)
al %r2,96+4*10(%r15)
st %r7,4*7(%r8)
x %r11,4*13(%r14)
al %r3,96+4*11(%r15)
st %r10,4*12(%r8)
x %r12,4*14(%r14)
st %r11,4*13(%r8)
x %r13,4*15(%r14)
st %r12,4*14(%r8)
lrvr %r0,%r0
st %r13,4*15(%r8)
lrvr %r1,%r1
lrvr %r2,%r2
lrvr %r3,%r3
lhi %r10,1
x %r0,4*8(%r14)
al %r10,96+4*12(%r15)
x %r1,4*9(%r14)
st %r0,4*8(%r8)
x %r2,4*10(%r14)
st %r1,4*9(%r8)
x %r3,4*11(%r14)
st %r2,4*10(%r8)
st %r3,4*11(%r8)
clr %r14,%r9
la %r14,64(%r14)
jl .Loop_outer
.Ldone:
xgr %r0,%r0
xgr %r1,%r1
xgr %r2,%r2
xgr %r3,%r3
stmg %r0,%r3,96+4*4(%r15)
stmg %r0,%r3,96+4*12(%r15)
lm %r6,%r15,176+6*4(%r15)
br %r14
.align 16
.Ltail:
la %r9,64(%r9)
stm %r0,%r7,96+4*0(%r15)
slr %r9,%r14
lm %r0,%r3,96+4*8+4*8(%r15)
lhi %r6,0
stm %r10,%r13,96+4*12(%r15)
al %r0,96+4*8(%r15)
al %r1,96+4*9(%r15)
al %r2,96+4*10(%r15)
al %r3,96+4*11(%r15)
lrvr %r0,%r0
lrvr %r1,%r1
lrvr %r2,%r2
lrvr %r3,%r3
stm %r0,%r3,96+4*8(%r15)
.Loop_tail:
llgc %r4,0(%r6,%r14)
llgc %r5,96(%r6,%r15)
xr %r5,%r4
stc %r5,0(%r6,%r8)
la %r6,1(%r6)
brct %r9,.Loop_tail
j .Ldone
.size ChaCha20_ctr32,.-ChaCha20_ctr32
.align 32
ChaCha20_ctr32_4x:
.LChaCha20_ctr32_4x:
stm %r6,%r7,6*4(%r15)
std %f4,16*4+2*8(%r15)
std %f6,16*4+3*8(%r15)
lhi %r1,-160
lgr %r0,%r15
la %r15,0(%r1,%r15)
st %r0,0(%r15)
larl %r7,.Lsigma
lhi %r0,10
lhi %r1,0
.word 0xe700,0x7000,0x0806 # vl %v16,0(%r7)
.word 0xe710,0x5000,0x0806 # vl %v17,0(%r5)
.word 0xe720,0x5010,0x0806 # vl %v18,16(%r5)
.word 0xe730,0x6000,0x0806 # vl %v19,0(%r6)
.word 0xe7f0,0x7040,0x0806 # vl %v31,0x40(%r7)
.word 0xe7c0,0x7050,0x0806 # vl %v28,0x50(%r7)
.word 0xe7a3,000000,0x2c4d # vrep %v26,%v19,0,2
.word 0xe731,000000,0x2822 # vlvg %v19,%r1,0,2
.word 0xe7aa,0xc000,0x2ef3 # va %v26,%v26,%v28,2
.word 0xe703,0x7060,0x0036 # vlm %v0,%v3,0x60(%r7)
.word 0xe741,000000,0x244d # vrep %v4,%v17,0,2
.word 0xe751,0x0001,0x244d # vrep %v5,%v17,1,2
.word 0xe761,0x0002,0x244d # vrep %v6,%v17,2,2
.word 0xe771,0x0003,0x244d # vrep %v7,%v17,3,2
.word 0xe782,000000,0x244d # vrep %v8,%v18,0,2
.word 0xe792,0x0001,0x244d # vrep %v9,%v18,1,2
.word 0xe7a2,0x0002,0x244d # vrep %v10,%v18,2,2
.word 0xe7b2,0x0003,0x244d # vrep %v11,%v18,3,2
.word 0xe7ca,000000,0x0456 # vlr %v12,%v26
.word 0xe7d3,0x0001,0x244d # vrep %v13,%v19,1,2
.word 0xe7e3,0x0002,0x244d # vrep %v14,%v19,2,2
.word 0xe7f3,0x0003,0x244d # vrep %v15,%v19,3,2
.Loop_4x:
.word 0xe700,0x4000,0x20f3 # va %v0,%v0,%v4,2
.word 0xe7cc,000000,0x006d # vx %v12,%v12,%v0
.word 0xe7cc,0x0010,0x2033 # verll %v12,%v12,16,2
.word 0xe711,0x5000,0x20f3 # va %v1,%v1,%v5,2
.word 0xe7dd,0x1000,0x006d # vx %v13,%v13,%v1
.word 0xe7dd,0x0010,0x2033 # verll %v13,%v13,16,2
.word 0xe722,0x6000,0x20f3 # va %v2,%v2,%v6,2
.word 0xe7ee,0x2000,0x006d # vx %v14,%v14,%v2
.word 0xe7ee,0x0010,0x2033 # verll %v14,%v14,16,2
.word 0xe733,0x7000,0x20f3 # va %v3,%v3,%v7,2
.word 0xe7ff,0x3000,0x006d # vx %v15,%v15,%v3
.word 0xe7ff,0x0010,0x2033 # verll %v15,%v15,16,2
.word 0xe788,0xc000,0x20f3 # va %v8,%v8,%v12,2
.word 0xe744,0x8000,0x006d # vx %v4,%v4,%v8
.word 0xe744,0x000c,0x2033 # verll %v4,%v4,12,2
.word 0xe799,0xd000,0x20f3 # va %v9,%v9,%v13,2
.word 0xe755,0x9000,0x006d # vx %v5,%v5,%v9
.word 0xe755,0x000c,0x2033 # verll %v5,%v5,12,2
.word 0xe7aa,0xe000,0x20f3 # va %v10,%v10,%v14,2
.word 0xe766,0xa000,0x006d # vx %v6,%v6,%v10
.word 0xe766,0x000c,0x2033 # verll %v6,%v6,12,2
.word 0xe7bb,0xf000,0x20f3 # va %v11,%v11,%v15,2
.word 0xe777,0xb000,0x006d # vx %v7,%v7,%v11
.word 0xe777,0x000c,0x2033 # verll %v7,%v7,12,2
.word 0xe700,0x4000,0x20f3 # va %v0,%v0,%v4,2
.word 0xe7cc,000000,0x006d # vx %v12,%v12,%v0
.word 0xe7cc,0x0008,0x2033 # verll %v12,%v12,8,2
.word 0xe711,0x5000,0x20f3 # va %v1,%v1,%v5,2
.word 0xe7dd,0x1000,0x006d # vx %v13,%v13,%v1
.word 0xe7dd,0x0008,0x2033 # verll %v13,%v13,8,2
.word 0xe722,0x6000,0x20f3 # va %v2,%v2,%v6,2
.word 0xe7ee,0x2000,0x006d # vx %v14,%v14,%v2
.word 0xe7ee,0x0008,0x2033 # verll %v14,%v14,8,2
.word 0xe733,0x7000,0x20f3 # va %v3,%v3,%v7,2
.word 0xe7ff,0x3000,0x006d # vx %v15,%v15,%v3
.word 0xe7ff,0x0008,0x2033 # verll %v15,%v15,8,2
.word 0xe788,0xc000,0x20f3 # va %v8,%v8,%v12,2
.word 0xe744,0x8000,0x006d # vx %v4,%v4,%v8
.word 0xe744,0x0007,0x2033 # verll %v4,%v4,7,2
.word 0xe799,0xd000,0x20f3 # va %v9,%v9,%v13,2
.word 0xe755,0x9000,0x006d # vx %v5,%v5,%v9
.word 0xe755,0x0007,0x2033 # verll %v5,%v5,7,2
.word 0xe7aa,0xe000,0x20f3 # va %v10,%v10,%v14,2
.word 0xe766,0xa000,0x006d # vx %v6,%v6,%v10
.word 0xe766,0x0007,0x2033 # verll %v6,%v6,7,2
.word 0xe7bb,0xf000,0x20f3 # va %v11,%v11,%v15,2
.word 0xe777,0xb000,0x006d # vx %v7,%v7,%v11
.word 0xe777,0x0007,0x2033 # verll %v7,%v7,7,2
.word 0xe700,0x5000,0x20f3 # va %v0,%v0,%v5,2
.word 0xe7ff,000000,0x006d # vx %v15,%v15,%v0
.word 0xe7ff,0x0010,0x2033 # verll %v15,%v15,16,2
.word 0xe711,0x6000,0x20f3 # va %v1,%v1,%v6,2
.word 0xe7cc,0x1000,0x006d # vx %v12,%v12,%v1
.word 0xe7cc,0x0010,0x2033 # verll %v12,%v12,16,2
.word 0xe722,0x7000,0x20f3 # va %v2,%v2,%v7,2
.word 0xe7dd,0x2000,0x006d # vx %v13,%v13,%v2
.word 0xe7dd,0x0010,0x2033 # verll %v13,%v13,16,2
.word 0xe733,0x4000,0x20f3 # va %v3,%v3,%v4,2
.word 0xe7ee,0x3000,0x006d # vx %v14,%v14,%v3
.word 0xe7ee,0x0010,0x2033 # verll %v14,%v14,16,2
.word 0xe7aa,0xf000,0x20f3 # va %v10,%v10,%v15,2
.word 0xe755,0xa000,0x006d # vx %v5,%v5,%v10
.word 0xe755,0x000c,0x2033 # verll %v5,%v5,12,2
.word 0xe7bb,0xc000,0x20f3 # va %v11,%v11,%v12,2
.word 0xe766,0xb000,0x006d # vx %v6,%v6,%v11
.word 0xe766,0x000c,0x2033 # verll %v6,%v6,12,2
.word 0xe788,0xd000,0x20f3 # va %v8,%v8,%v13,2
.word 0xe777,0x8000,0x006d # vx %v7,%v7,%v8
.word 0xe777,0x000c,0x2033 # verll %v7,%v7,12,2
.word 0xe799,0xe000,0x20f3 # va %v9,%v9,%v14,2
.word 0xe744,0x9000,0x006d # vx %v4,%v4,%v9
.word 0xe744,0x000c,0x2033 # verll %v4,%v4,12,2
.word 0xe700,0x5000,0x20f3 # va %v0,%v0,%v5,2
.word 0xe7ff,000000,0x006d # vx %v15,%v15,%v0
.word 0xe7ff,0x0008,0x2033 # verll %v15,%v15,8,2
.word 0xe711,0x6000,0x20f3 # va %v1,%v1,%v6,2
.word 0xe7cc,0x1000,0x006d # vx %v12,%v12,%v1
.word 0xe7cc,0x0008,0x2033 # verll %v12,%v12,8,2
.word 0xe722,0x7000,0x20f3 # va %v2,%v2,%v7,2
.word 0xe7dd,0x2000,0x006d # vx %v13,%v13,%v2
.word 0xe7dd,0x0008,0x2033 # verll %v13,%v13,8,2
.word 0xe733,0x4000,0x20f3 # va %v3,%v3,%v4,2
.word 0xe7ee,0x3000,0x006d # vx %v14,%v14,%v3
.word 0xe7ee,0x0008,0x2033 # verll %v14,%v14,8,2
.word 0xe7aa,0xf000,0x20f3 # va %v10,%v10,%v15,2
.word 0xe755,0xa000,0x006d # vx %v5,%v5,%v10
.word 0xe755,0x0007,0x2033 # verll %v5,%v5,7,2
.word 0xe7bb,0xc000,0x20f3 # va %v11,%v11,%v12,2
.word 0xe766,0xb000,0x006d # vx %v6,%v6,%v11
.word 0xe766,0x0007,0x2033 # verll %v6,%v6,7,2
.word 0xe788,0xd000,0x20f3 # va %v8,%v8,%v13,2
.word 0xe777,0x8000,0x006d # vx %v7,%v7,%v8
.word 0xe777,0x0007,0x2033 # verll %v7,%v7,7,2
.word 0xe799,0xe000,0x20f3 # va %v9,%v9,%v14,2
.word 0xe744,0x9000,0x006d # vx %v4,%v4,%v9
.word 0xe744,0x0007,0x2033 # verll %v4,%v4,7,2
brct %r0,.Loop_4x
.word 0xe7cc,0xa000,0x22f3 # va %v12,%v12,%v26,2
.word 0xe7b0,0x1000,0x2861 # vmrh %v27,%v0,%v1,2
.word 0xe7c2,0x3000,0x2861 # vmrh %v28,%v2,%v3,2
.word 0xe7d0,0x1000,0x2860 # vmrl %v29,%v0,%v1,2
.word 0xe7e2,0x3000,0x2860 # vmrl %v30,%v2,%v3,2
.word 0xe70b,0xc000,0x0684 # vpdi %v0,%v27,%v28,0
.word 0xe71b,0xc000,0x5684 # vpdi %v1,%v27,%v28,5
.word 0xe72d,0xe000,0x0684 # vpdi %v2,%v29,%v30,0
.word 0xe73d,0xe000,0x5684 # vpdi %v3,%v29,%v30,5
.word 0xe7b4,0x5000,0x2861 # vmrh %v27,%v4,%v5,2
.word 0xe7c6,0x7000,0x2861 # vmrh %v28,%v6,%v7,2
.word 0xe7d4,0x5000,0x2860 # vmrl %v29,%v4,%v5,2
.word 0xe7e6,0x7000,0x2860 # vmrl %v30,%v6,%v7,2
.word 0xe74b,0xc000,0x0684 # vpdi %v4,%v27,%v28,0
.word 0xe75b,0xc000,0x5684 # vpdi %v5,%v27,%v28,5
.word 0xe76d,0xe000,0x0684 # vpdi %v6,%v29,%v30,0
.word 0xe77d,0xe000,0x5684 # vpdi %v7,%v29,%v30,5
.word 0xe7b8,0x9000,0x2861 # vmrh %v27,%v8,%v9,2
.word 0xe7ca,0xb000,0x2861 # vmrh %v28,%v10,%v11,2
.word 0xe7d8,0x9000,0x2860 # vmrl %v29,%v8,%v9,2
.word 0xe7ea,0xb000,0x2860 # vmrl %v30,%v10,%v11,2
.word 0xe78b,0xc000,0x0684 # vpdi %v8,%v27,%v28,0
.word 0xe79b,0xc000,0x5684 # vpdi %v9,%v27,%v28,5
.word 0xe7ad,0xe000,0x0684 # vpdi %v10,%v29,%v30,0
.word 0xe7bd,0xe000,0x5684 # vpdi %v11,%v29,%v30,5
.word 0xe7bc,0xd000,0x2861 # vmrh %v27,%v12,%v13,2
.word 0xe7ce,0xf000,0x2861 # vmrh %v28,%v14,%v15,2
.word 0xe7dc,0xd000,0x2860 # vmrl %v29,%v12,%v13,2
.word 0xe7ee,0xf000,0x2860 # vmrl %v30,%v14,%v15,2
.word 0xe7cb,0xc000,0x0684 # vpdi %v12,%v27,%v28,0
.word 0xe7db,0xc000,0x5684 # vpdi %v13,%v27,%v28,5
.word 0xe7ed,0xe000,0x0684 # vpdi %v14,%v29,%v30,0
.word 0xe7fd,0xe000,0x5684 # vpdi %v15,%v29,%v30,5
.word 0xe700,000000,0x22f3 # va %v0,%v0,%v16,2
.word 0xe744,0x1000,0x22f3 # va %v4,%v4,%v17,2
.word 0xe788,0x2000,0x22f3 # va %v8,%v8,%v18,2
.word 0xe7cc,0x3000,0x22f3 # va %v12,%v12,%v19,2
.word 0xe700,000000,0xf18c # vperm %v0,%v0,%v0,%v31
.word 0xe744,0x4000,0xf18c # vperm %v4,%v4,%v4,%v31
.word 0xe788,0x8000,0xf18c # vperm %v8,%v8,%v8,%v31
.word 0xe7cc,0xc000,0xf18c # vperm %v12,%v12,%v12,%v31
.word 0xe7be,0x3000,0x0c36 # vlm %v27,%v30,0(%r3)
.word 0xe7bb,000000,0x0c6d # vx %v27,%v27,%v0
.word 0xe7cc,0x4000,0x0c6d # vx %v28,%v28,%v4
.word 0xe7dd,0x8000,0x0c6d # vx %v29,%v29,%v8
.word 0xe7ee,0xc000,0x0c6d # vx %v30,%v30,%v12
.word 0xe7be,0x2000,0x0c3e # vstm %v27,%v30,0(%r2)
la %r3,0x40(%r3)
la %r2,0x40(%r2)
ahi %r4,-64
.word 0xe701,000000,0x22f3 # va %v0,%v1,%v16,2
.word 0xe745,0x1000,0x22f3 # va %v4,%v5,%v17,2
.word 0xe789,0x2000,0x22f3 # va %v8,%v9,%v18,2
.word 0xe7cd,0x3000,0x22f3 # va %v12,%v13,%v19,2
.word 0xe700,000000,0xf18c # vperm %v0,%v0,%v0,%v31
.word 0xe744,0x4000,0xf18c # vperm %v4,%v4,%v4,%v31
.word 0xe788,0x8000,0xf18c # vperm %v8,%v8,%v8,%v31
.word 0xe7cc,0xc000,0xf18c # vperm %v12,%v12,%v12,%v31
.word 0xc24f,000000,0x0040 # clfi %r4,64
jl .Ltail_4x
.word 0xe7be,0x3000,0x0c36 # vlm %v27,%v30,0(%r3)
.word 0xe7bb,000000,0x0c6d # vx %v27,%v27,%v0
.word 0xe7cc,0x4000,0x0c6d # vx %v28,%v28,%v4
.word 0xe7dd,0x8000,0x0c6d # vx %v29,%v29,%v8
.word 0xe7ee,0xc000,0x0c6d # vx %v30,%v30,%v12
.word 0xe7be,0x2000,0x0c3e # vstm %v27,%v30,0(%r2)
la %r3,0x40(%r3)
la %r2,0x40(%r2)
ahi %r4,-64
je .Ldone_4x
.word 0xe702,000000,0x22f3 # va %v0,%v2,%v16,2
.word 0xe746,0x1000,0x22f3 # va %v4,%v6,%v17,2
.word 0xe78a,0x2000,0x22f3 # va %v8,%v10,%v18,2
.word 0xe7ce,0x3000,0x22f3 # va %v12,%v14,%v19,2
.word 0xe700,000000,0xf18c # vperm %v0,%v0,%v0,%v31
.word 0xe744,0x4000,0xf18c # vperm %v4,%v4,%v4,%v31
.word 0xe788,0x8000,0xf18c # vperm %v8,%v8,%v8,%v31
.word 0xe7cc,0xc000,0xf18c # vperm %v12,%v12,%v12,%v31
.word 0xc24f,000000,0x0040 # clfi %r4,64
jl .Ltail_4x
.word 0xe7be,0x3000,0x0c36 # vlm %v27,%v30,0(%r3)
.word 0xe7bb,000000,0x0c6d # vx %v27,%v27,%v0
.word 0xe7cc,0x4000,0x0c6d # vx %v28,%v28,%v4
.word 0xe7dd,0x8000,0x0c6d # vx %v29,%v29,%v8
.word 0xe7ee,0xc000,0x0c6d # vx %v30,%v30,%v12
.word 0xe7be,0x2000,0x0c3e # vstm %v27,%v30,0(%r2)
la %r3,0x40(%r3)
la %r2,0x40(%r2)
ahi %r4,-64
je .Ldone_4x
.word 0xe703,000000,0x22f3 # va %v0,%v3,%v16,2
.word 0xe747,0x1000,0x22f3 # va %v4,%v7,%v17,2
.word 0xe78b,0x2000,0x22f3 # va %v8,%v11,%v18,2
.word 0xe7cf,0x3000,0x22f3 # va %v12,%v15,%v19,2
.word 0xe700,000000,0xf18c # vperm %v0,%v0,%v0,%v31
.word 0xe744,0x4000,0xf18c # vperm %v4,%v4,%v4,%v31
.word 0xe788,0x8000,0xf18c # vperm %v8,%v8,%v8,%v31
.word 0xe7cc,0xc000,0xf18c # vperm %v12,%v12,%v12,%v31
.word 0xc24f,000000,0x0040 # clfi %r4,64
jl .Ltail_4x
.word 0xe7be,0x3000,0x0c36 # vlm %v27,%v30,0(%r3)
.word 0xe7bb,000000,0x0c6d # vx %v27,%v27,%v0
.word 0xe7cc,0x4000,0x0c6d # vx %v28,%v28,%v4
.word 0xe7dd,0x8000,0x0c6d # vx %v29,%v29,%v8
.word 0xe7ee,0xc000,0x0c6d # vx %v30,%v30,%v12
.word 0xe7be,0x2000,0x0c3e # vstm %v27,%v30,0(%r2)
.Ldone_4x:
ld %f4,160+16*4+2*8(%r15)
ld %f6,160+16*4+3*8(%r15)
lm %r6,%r7,160+6*4(%r15)
la %r15,160(%r15)
br %r14
.align 16
.Ltail_4x:
.word 0xe7b4,000000,0x0856 # vlr %v27,%v4
ld %f4,160+16*4+2*8(%r15)
ld %f6,160+16*4+3*8(%r15)
.word 0xe700,0xf060,0x000e # vst %v0,96+0x00(%r15)
.word 0xe7b0,0xf070,0x080e # vst %v27,96+0x10(%r15)
.word 0xe780,0xf080,0x000e # vst %v8,96+0x20(%r15)
.word 0xe7c0,0xf090,0x000e # vst %v12,96+0x30(%r15)
lghi %r1,0
.Loop_tail_4x:
llgc %r5,0(%r1,%r3)
llgc %r6,96(%r1,%r15)
xr %r6,%r5
stc %r6,0(%r1,%r2)
la %r1,1(%r1)
brct %r4,.Loop_tail_4x
lm %r6,%r7,160+6*4(%r15)
la %r15,160(%r15)
br %r14
.size ChaCha20_ctr32_4x,.-ChaCha20_ctr32_4x
.globl ChaCha20_ctr32_vx
.align 32
ChaCha20_ctr32_vx:
.LChaCha20_ctr32_vx:
.word 0xc24f,000000,0x0100 # clfi %r4,256
jle .LChaCha20_ctr32_4x
stm %r6,%r7,6*4(%r15)
std %f4,16*4+2*8(%r15)
std %f6,16*4+3*8(%r15)
lhi %r1,-160
lgr %r0,%r15
la %r15,0(%r1,%r15)
st %r0,0(%r15)
larl %r7,.Lsigma
lhi %r0,10
.word 0xe789,0x5000,0x0c36 # vlm %v24,%v25,0(%r5)
.word 0xe7a0,0x6000,0x0806 # vl %v26,0(%r6)
.word 0xe7bf,0x7000,0x0c36 # vlm %v27,%v31,0(%r7)
.Loop_outer_vx:
.word 0xe70b,000000,0x0456 # vlr %v0,%v27
.word 0xe718,000000,0x0456 # vlr %v1,%v24
.word 0xe74b,000000,0x0456 # vlr %v4,%v27
.word 0xe758,000000,0x0456 # vlr %v5,%v24
.word 0xe78b,000000,0x0456 # vlr %v8,%v27
.word 0xe798,000000,0x0456 # vlr %v9,%v24
.word 0xe7cb,000000,0x0456 # vlr %v12,%v27
.word 0xe7d8,000000,0x0456 # vlr %v13,%v24
.word 0xe70b,000000,0x0c56 # vlr %v16,%v27
.word 0xe718,000000,0x0c56 # vlr %v17,%v24
.word 0xe74b,000000,0x0c56 # vlr %v20,%v27
.word 0xe758,000000,0x0c56 # vlr %v21,%v24
.word 0xe73a,000000,0x0456 # vlr %v3,%v26
.word 0xe77a,0xc000,0x26f3 # va %v7,%v26,%v28,2
.word 0xe7ba,0xd000,0x26f3 # va %v11,%v26,%v29,2
.word 0xe7fa,0xe000,0x26f3 # va %v15,%v26,%v30,2
.word 0xe73b,0xd000,0x2af3 # va %v19,%v11,%v29,2
.word 0xe77b,0xe000,0x2af3 # va %v23,%v11,%v30,2
.word 0xe729,000000,0x0456 # vlr %v2,%v25
.word 0xe769,000000,0x0456 # vlr %v6,%v25
.word 0xe7a9,000000,0x0456 # vlr %v10,%v25
.word 0xe7e9,000000,0x0456 # vlr %v14,%v25
.word 0xe729,000000,0x0c56 # vlr %v18,%v25
.word 0xe769,000000,0x0c56 # vlr %v22,%v25
.word 0xe7c7,000000,0x0856 # vlr %v28,%v7
.word 0xe7db,000000,0x0856 # vlr %v29,%v11
.word 0xe7ef,000000,0x0856 # vlr %v30,%v15
.align 4
.Loop_vx:
.word 0xe700,0x1000,0x20f3 # va %v0,%v0,%v1,2
.word 0xe744,0x5000,0x20f3 # va %v4,%v4,%v5,2
.word 0xe788,0x9000,0x20f3 # va %v8,%v8,%v9,2
.word 0xe7cc,0xd000,0x20f3 # va %v12,%v12,%v13,2
.word 0xe700,0x1000,0x2ef3 # va %v16,%v16,%v17,2
.word 0xe744,0x5000,0x2ef3 # va %v20,%v20,%v21,2
.word 0xe733,000000,0x006d # vx %v3,%v3,%v0
.word 0xe777,0x4000,0x006d # vx %v7,%v7,%v4
.word 0xe7bb,0x8000,0x006d # vx %v11,%v11,%v8
.word 0xe7ff,0xc000,0x006d # vx %v15,%v15,%v12
.word 0xe733,000000,0x0e6d # vx %v19,%v19,%v16
.word 0xe777,0x4000,0x0e6d # vx %v23,%v23,%v20
.word 0xe733,0x0010,0x2033 # verll %v3,%v3,16,2
.word 0xe777,0x0010,0x2033 # verll %v7,%v7,16,2
.word 0xe7bb,0x0010,0x2033 # verll %v11,%v11,16,2
.word 0xe7ff,0x0010,0x2033 # verll %v15,%v15,16,2
.word 0xe733,0x0010,0x2c33 # verll %v19,%v19,16,2
.word 0xe777,0x0010,0x2c33 # verll %v23,%v23,16,2
.word 0xe722,0x3000,0x20f3 # va %v2,%v2,%v3,2
.word 0xe766,0x7000,0x20f3 # va %v6,%v6,%v7,2
.word 0xe7aa,0xb000,0x20f3 # va %v10,%v10,%v11,2
.word 0xe7ee,0xf000,0x20f3 # va %v14,%v14,%v15,2
.word 0xe722,0x3000,0x2ef3 # va %v18,%v18,%v19,2
.word 0xe766,0x7000,0x2ef3 # va %v22,%v22,%v23,2
.word 0xe711,0x2000,0x006d # vx %v1,%v1,%v2
.word 0xe755,0x6000,0x006d # vx %v5,%v5,%v6
.word 0xe799,0xa000,0x006d # vx %v9,%v9,%v10
.word 0xe7dd,0xe000,0x006d # vx %v13,%v13,%v14
.word 0xe711,0x2000,0x0e6d # vx %v17,%v17,%v18
.word 0xe755,0x6000,0x0e6d # vx %v21,%v21,%v22
.word 0xe711,0x000c,0x2033 # verll %v1,%v1,12,2
.word 0xe755,0x000c,0x2033 # verll %v5,%v5,12,2
.word 0xe799,0x000c,0x2033 # verll %v9,%v9,12,2
.word 0xe7dd,0x000c,0x2033 # verll %v13,%v13,12,2
.word 0xe711,0x000c,0x2c33 # verll %v17,%v17,12,2
.word 0xe755,0x000c,0x2c33 # verll %v21,%v21,12,2
.word 0xe700,0x1000,0x20f3 # va %v0,%v0,%v1,2
.word 0xe744,0x5000,0x20f3 # va %v4,%v4,%v5,2
.word 0xe788,0x9000,0x20f3 # va %v8,%v8,%v9,2
.word 0xe7cc,0xd000,0x20f3 # va %v12,%v12,%v13,2
.word 0xe700,0x1000,0x2ef3 # va %v16,%v16,%v17,2
.word 0xe744,0x5000,0x2ef3 # va %v20,%v20,%v21,2
.word 0xe733,000000,0x006d # vx %v3,%v3,%v0
.word 0xe777,0x4000,0x006d # vx %v7,%v7,%v4
.word 0xe7bb,0x8000,0x006d # vx %v11,%v11,%v8
.word 0xe7ff,0xc000,0x006d # vx %v15,%v15,%v12
.word 0xe733,000000,0x0e6d # vx %v19,%v19,%v16
.word 0xe777,0x4000,0x0e6d # vx %v23,%v23,%v20
.word 0xe733,0x0008,0x2033 # verll %v3,%v3,8,2
.word 0xe777,0x0008,0x2033 # verll %v7,%v7,8,2
.word 0xe7bb,0x0008,0x2033 # verll %v11,%v11,8,2
.word 0xe7ff,0x0008,0x2033 # verll %v15,%v15,8,2
.word 0xe733,0x0008,0x2c33 # verll %v19,%v19,8,2
.word 0xe777,0x0008,0x2c33 # verll %v23,%v23,8,2
.word 0xe722,0x3000,0x20f3 # va %v2,%v2,%v3,2
.word 0xe766,0x7000,0x20f3 # va %v6,%v6,%v7,2
.word 0xe7aa,0xb000,0x20f3 # va %v10,%v10,%v11,2
.word 0xe7ee,0xf000,0x20f3 # va %v14,%v14,%v15,2
.word 0xe722,0x3000,0x2ef3 # va %v18,%v18,%v19,2
.word 0xe766,0x7000,0x2ef3 # va %v22,%v22,%v23,2
.word 0xe711,0x2000,0x006d # vx %v1,%v1,%v2
.word 0xe755,0x6000,0x006d # vx %v5,%v5,%v6
.word 0xe799,0xa000,0x006d # vx %v9,%v9,%v10
.word 0xe7dd,0xe000,0x006d # vx %v13,%v13,%v14
.word 0xe711,0x2000,0x0e6d # vx %v17,%v17,%v18
.word 0xe755,0x6000,0x0e6d # vx %v21,%v21,%v22
.word 0xe711,0x0007,0x2033 # verll %v1,%v1,7,2
.word 0xe755,0x0007,0x2033 # verll %v5,%v5,7,2
.word 0xe799,0x0007,0x2033 # verll %v9,%v9,7,2
.word 0xe7dd,0x0007,0x2033 # verll %v13,%v13,7,2
.word 0xe711,0x0007,0x2c33 # verll %v17,%v17,7,2
.word 0xe755,0x0007,0x2c33 # verll %v21,%v21,7,2
.word 0xe722,0x2008,0x0077 # vsldb %v2,%v2,%v2,8
.word 0xe766,0x6008,0x0077 # vsldb %v6,%v6,%v6,8
.word 0xe7aa,0xa008,0x0077 # vsldb %v10,%v10,%v10,8
.word 0xe7ee,0xe008,0x0077 # vsldb %v14,%v14,%v14,8
.word 0xe722,0x2008,0x0e77 # vsldb %v18,%v18,%v18,8
.word 0xe766,0x6008,0x0e77 # vsldb %v22,%v22,%v22,8
.word 0xe711,0x1004,0x0077 # vsldb %v1,%v1,%v1,4
.word 0xe755,0x5004,0x0077 # vsldb %v5,%v5,%v5,4
.word 0xe799,0x9004,0x0077 # vsldb %v9,%v9,%v9,4
.word 0xe7dd,0xd004,0x0077 # vsldb %v13,%v13,%v13,4
.word 0xe711,0x1004,0x0e77 # vsldb %v17,%v17,%v17,4
.word 0xe755,0x5004,0x0e77 # vsldb %v21,%v21,%v21,4
.word 0xe733,0x300c,0x0077 # vsldb %v3,%v3,%v3,12
.word 0xe777,0x700c,0x0077 # vsldb %v7,%v7,%v7,12
.word 0xe7bb,0xb00c,0x0077 # vsldb %v11,%v11,%v11,12
.word 0xe7ff,0xf00c,0x0077 # vsldb %v15,%v15,%v15,12
.word 0xe733,0x300c,0x0e77 # vsldb %v19,%v19,%v19,12
.word 0xe777,0x700c,0x0e77 # vsldb %v23,%v23,%v23,12
.word 0xe700,0x1000,0x20f3 # va %v0,%v0,%v1,2
.word 0xe744,0x5000,0x20f3 # va %v4,%v4,%v5,2
.word 0xe788,0x9000,0x20f3 # va %v8,%v8,%v9,2
.word 0xe7cc,0xd000,0x20f3 # va %v12,%v12,%v13,2
.word 0xe700,0x1000,0x2ef3 # va %v16,%v16,%v17,2
.word 0xe744,0x5000,0x2ef3 # va %v20,%v20,%v21,2
.word 0xe733,000000,0x006d # vx %v3,%v3,%v0
.word 0xe777,0x4000,0x006d # vx %v7,%v7,%v4
.word 0xe7bb,0x8000,0x006d # vx %v11,%v11,%v8
.word 0xe7ff,0xc000,0x006d # vx %v15,%v15,%v12
.word 0xe733,000000,0x0e6d # vx %v19,%v19,%v16
.word 0xe777,0x4000,0x0e6d # vx %v23,%v23,%v20
.word 0xe733,0x0010,0x2033 # verll %v3,%v3,16,2
.word 0xe777,0x0010,0x2033 # verll %v7,%v7,16,2
.word 0xe7bb,0x0010,0x2033 # verll %v11,%v11,16,2
.word 0xe7ff,0x0010,0x2033 # verll %v15,%v15,16,2
.word 0xe733,0x0010,0x2c33 # verll %v19,%v19,16,2
.word 0xe777,0x0010,0x2c33 # verll %v23,%v23,16,2
.word 0xe722,0x3000,0x20f3 # va %v2,%v2,%v3,2
.word 0xe766,0x7000,0x20f3 # va %v6,%v6,%v7,2
.word 0xe7aa,0xb000,0x20f3 # va %v10,%v10,%v11,2
.word 0xe7ee,0xf000,0x20f3 # va %v14,%v14,%v15,2
.word 0xe722,0x3000,0x2ef3 # va %v18,%v18,%v19,2
.word 0xe766,0x7000,0x2ef3 # va %v22,%v22,%v23,2
.word 0xe711,0x2000,0x006d # vx %v1,%v1,%v2
.word 0xe755,0x6000,0x006d # vx %v5,%v5,%v6
.word 0xe799,0xa000,0x006d # vx %v9,%v9,%v10
.word 0xe7dd,0xe000,0x006d # vx %v13,%v13,%v14
.word 0xe711,0x2000,0x0e6d # vx %v17,%v17,%v18
.word 0xe755,0x6000,0x0e6d # vx %v21,%v21,%v22
.word 0xe711,0x000c,0x2033 # verll %v1,%v1,12,2
.word 0xe755,0x000c,0x2033 # verll %v5,%v5,12,2
.word 0xe799,0x000c,0x2033 # verll %v9,%v9,12,2
.word 0xe7dd,0x000c,0x2033 # verll %v13,%v13,12,2
.word 0xe711,0x000c,0x2c33 # verll %v17,%v17,12,2
.word 0xe755,0x000c,0x2c33 # verll %v21,%v21,12,2
.word 0xe700,0x1000,0x20f3 # va %v0,%v0,%v1,2
.word 0xe744,0x5000,0x20f3 # va %v4,%v4,%v5,2
.word 0xe788,0x9000,0x20f3 # va %v8,%v8,%v9,2
.word 0xe7cc,0xd000,0x20f3 # va %v12,%v12,%v13,2
.word 0xe700,0x1000,0x2ef3 # va %v16,%v16,%v17,2
.word 0xe744,0x5000,0x2ef3 # va %v20,%v20,%v21,2
.word 0xe733,000000,0x006d # vx %v3,%v3,%v0
.word 0xe777,0x4000,0x006d # vx %v7,%v7,%v4
.word 0xe7bb,0x8000,0x006d # vx %v11,%v11,%v8
.word 0xe7ff,0xc000,0x006d # vx %v15,%v15,%v12
.word 0xe733,000000,0x0e6d # vx %v19,%v19,%v16
.word 0xe777,0x4000,0x0e6d # vx %v23,%v23,%v20
.word 0xe733,0x0008,0x2033 # verll %v3,%v3,8,2
.word 0xe777,0x0008,0x2033 # verll %v7,%v7,8,2
.word 0xe7bb,0x0008,0x2033 # verll %v11,%v11,8,2
.word 0xe7ff,0x0008,0x2033 # verll %v15,%v15,8,2
.word 0xe733,0x0008,0x2c33 # verll %v19,%v19,8,2
.word 0xe777,0x0008,0x2c33 # verll %v23,%v23,8,2
.word 0xe722,0x3000,0x20f3 # va %v2,%v2,%v3,2
.word 0xe766,0x7000,0x20f3 # va %v6,%v6,%v7,2
.word 0xe7aa,0xb000,0x20f3 # va %v10,%v10,%v11,2
.word 0xe7ee,0xf000,0x20f3 # va %v14,%v14,%v15,2
.word 0xe722,0x3000,0x2ef3 # va %v18,%v18,%v19,2
.word 0xe766,0x7000,0x2ef3 # va %v22,%v22,%v23,2
.word 0xe711,0x2000,0x006d # vx %v1,%v1,%v2
.word 0xe755,0x6000,0x006d # vx %v5,%v5,%v6
.word 0xe799,0xa000,0x006d # vx %v9,%v9,%v10
.word 0xe7dd,0xe000,0x006d # vx %v13,%v13,%v14
.word 0xe711,0x2000,0x0e6d # vx %v17,%v17,%v18
.word 0xe755,0x6000,0x0e6d # vx %v21,%v21,%v22
.word 0xe711,0x0007,0x2033 # verll %v1,%v1,7,2
.word 0xe755,0x0007,0x2033 # verll %v5,%v5,7,2
.word 0xe799,0x0007,0x2033 # verll %v9,%v9,7,2
.word 0xe7dd,0x0007,0x2033 # verll %v13,%v13,7,2
.word 0xe711,0x0007,0x2c33 # verll %v17,%v17,7,2
.word 0xe755,0x0007,0x2c33 # verll %v21,%v21,7,2
.word 0xe722,0x2008,0x0077 # vsldb %v2,%v2,%v2,8
.word 0xe766,0x6008,0x0077 # vsldb %v6,%v6,%v6,8
.word 0xe7aa,0xa008,0x0077 # vsldb %v10,%v10,%v10,8
.word 0xe7ee,0xe008,0x0077 # vsldb %v14,%v14,%v14,8
.word 0xe722,0x2008,0x0e77 # vsldb %v18,%v18,%v18,8
.word 0xe766,0x6008,0x0e77 # vsldb %v22,%v22,%v22,8
.word 0xe711,0x100c,0x0077 # vsldb %v1,%v1,%v1,12
.word 0xe755,0x500c,0x0077 # vsldb %v5,%v5,%v5,12
.word 0xe799,0x900c,0x0077 # vsldb %v9,%v9,%v9,12
.word 0xe7dd,0xd00c,0x0077 # vsldb %v13,%v13,%v13,12
.word 0xe711,0x100c,0x0e77 # vsldb %v17,%v17,%v17,12
.word 0xe755,0x500c,0x0e77 # vsldb %v21,%v21,%v21,12
.word 0xe733,0x3004,0x0077 # vsldb %v3,%v3,%v3,4
.word 0xe777,0x7004,0x0077 # vsldb %v7,%v7,%v7,4
.word 0xe7bb,0xb004,0x0077 # vsldb %v11,%v11,%v11,4
.word 0xe7ff,0xf004,0x0077 # vsldb %v15,%v15,%v15,4
.word 0xe733,0x3004,0x0e77 # vsldb %v19,%v19,%v19,4
.word 0xe777,0x7004,0x0e77 # vsldb %v23,%v23,%v23,4
brct %r0,.Loop_vx
.word 0xe700,0xb000,0x22f3 # va %v0,%v0,%v27,2
.word 0xe711,0x8000,0x22f3 # va %v1,%v1,%v24,2
.word 0xe722,0x9000,0x22f3 # va %v2,%v2,%v25,2
.word 0xe733,0xa000,0x22f3 # va %v3,%v3,%v26,2
.word 0xe744,0xb000,0x22f3 # va %v4,%v4,%v27,2
.word 0xe777,0xc000,0x22f3 # va %v7,%v7,%v28,2
.word 0xe700,000000,0xf18c # vperm %v0,%v0,%v0,%v31
.word 0xe711,0x1000,0xf18c # vperm %v1,%v1,%v1,%v31
.word 0xe722,0x2000,0xf18c # vperm %v2,%v2,%v2,%v31
.word 0xe733,0x3000,0xf18c # vperm %v3,%v3,%v3,%v31
.word 0xc24f,000000,0x0040 # clfi %r4,64
jl .Ltail_vx
.word 0xe7bb,0xd000,0x22f3 # va %v11,%v11,%v29,2
.word 0xe7ff,0xe000,0x22f3 # va %v15,%v15,%v30,2
.word 0xe7be,0x3000,0x0c36 # vlm %v27,%v30,0(%r3)
.word 0xe700,0xb000,0x026d # vx %v0,%v0,%v27
.word 0xe711,0xc000,0x026d # vx %v1,%v1,%v28
.word 0xe722,0xd000,0x026d # vx %v2,%v2,%v29
.word 0xe733,0xe000,0x026d # vx %v3,%v3,%v30
.word 0xe7be,0x7000,0x0c36 # vlm %v27,%v30,0(%r7)
.word 0xe703,0x2000,0x003e # vstm %v0,%v3,0(%r2)
la %r3,0x40(%r3)
la %r2,0x40(%r2)
ahi %r4,-64
je .Ldone_vx
.word 0xe755,0x8000,0x22f3 # va %v5,%v5,%v24,2
.word 0xe766,0x9000,0x22f3 # va %v6,%v6,%v25,2
.word 0xe704,0x4000,0xf18c # vperm %v0,%v4,%v4,%v31
.word 0xe715,0x5000,0xf18c # vperm %v1,%v5,%v5,%v31
.word 0xe726,0x6000,0xf18c # vperm %v2,%v6,%v6,%v31
.word 0xe737,0x7000,0xf18c # vperm %v3,%v7,%v7,%v31
.word 0xc24f,000000,0x0040 # clfi %r4,64
jl .Ltail_vx
.word 0xe747,0x3000,0x0036 # vlm %v4,%v7,0(%r3)
.word 0xe700,0x4000,0x006d # vx %v0,%v0,%v4
.word 0xe711,0x5000,0x006d # vx %v1,%v1,%v5
.word 0xe722,0x6000,0x006d # vx %v2,%v2,%v6
.word 0xe733,0x7000,0x006d # vx %v3,%v3,%v7
.word 0xe703,0x2000,0x003e # vstm %v0,%v3,0(%r2)
la %r3,0x40(%r3)
la %r2,0x40(%r2)
ahi %r4,-64
je .Ldone_vx
.word 0xe788,0xb000,0x22f3 # va %v8,%v8,%v27,2
.word 0xe799,0x8000,0x22f3 # va %v9,%v9,%v24,2
.word 0xe7aa,0x9000,0x22f3 # va %v10,%v10,%v25,2
.word 0xe708,0x8000,0xf18c # vperm %v0,%v8,%v8,%v31
.word 0xe719,0x9000,0xf18c # vperm %v1,%v9,%v9,%v31
.word 0xe72a,0xa000,0xf18c # vperm %v2,%v10,%v10,%v31
.word 0xe73b,0xb000,0xf18c # vperm %v3,%v11,%v11,%v31
.word 0xc24f,000000,0x0040 # clfi %r4,64
jl .Ltail_vx
.word 0xe747,0x3000,0x0036 # vlm %v4,%v7,0(%r3)
.word 0xe700,0x4000,0x006d # vx %v0,%v0,%v4
.word 0xe711,0x5000,0x006d # vx %v1,%v1,%v5
.word 0xe722,0x6000,0x006d # vx %v2,%v2,%v6
.word 0xe733,0x7000,0x006d # vx %v3,%v3,%v7
.word 0xe703,0x2000,0x003e # vstm %v0,%v3,0(%r2)
la %r3,0x40(%r3)
la %r2,0x40(%r2)
ahi %r4,-64
je .Ldone_vx
.word 0xe7cc,0xb000,0x22f3 # va %v12,%v12,%v27,2
.word 0xe7dd,0x8000,0x22f3 # va %v13,%v13,%v24,2
.word 0xe7ee,0x9000,0x22f3 # va %v14,%v14,%v25,2
.word 0xe7ba,0xe000,0x26f3 # va %v11,%v26,%v30,2
.word 0xe70c,0xc000,0xf18c # vperm %v0,%v12,%v12,%v31
.word 0xe71d,0xd000,0xf18c # vperm %v1,%v13,%v13,%v31
.word 0xe72e,0xe000,0xf18c # vperm %v2,%v14,%v14,%v31
.word 0xe73f,0xf000,0xf18c # vperm %v3,%v15,%v15,%v31
.word 0xc24f,000000,0x0040 # clfi %r4,64
jl .Ltail_vx
.word 0xe7fb,0xc000,0x22f3 # va %v15,%v11,%v28,2
.word 0xe747,0x3000,0x0036 # vlm %v4,%v7,0(%r3)
.word 0xe700,0x4000,0x006d # vx %v0,%v0,%v4
.word 0xe711,0x5000,0x006d # vx %v1,%v1,%v5
.word 0xe722,0x6000,0x006d # vx %v2,%v2,%v6
.word 0xe733,0x7000,0x006d # vx %v3,%v3,%v7
.word 0xe703,0x2000,0x003e # vstm %v0,%v3,0(%r2)
la %r3,0x40(%r3)
la %r2,0x40(%r2)
ahi %r4,-64
je .Ldone_vx
.word 0xe700,0xb000,0x2ef3 # va %v16,%v16,%v27,2
.word 0xe711,0x8000,0x2ef3 # va %v17,%v17,%v24,2
.word 0xe722,0x9000,0x2ef3 # va %v18,%v18,%v25,2
.word 0xe733,0xf000,0x2cf3 # va %v19,%v19,%v15,2
.word 0xe7ff,0xc000,0x22f3 # va %v15,%v15,%v28,2
.word 0xe7ab,0xe000,0x2af3 # va %v26,%v11,%v30,2
.word 0xe700,000000,0xf78c # vperm %v0,%v16,%v16,%v31
.word 0xe711,0x1000,0xf78c # vperm %v1,%v17,%v17,%v31
.word 0xe722,0x2000,0xf78c # vperm %v2,%v18,%v18,%v31
.word 0xe733,0x3000,0xf78c # vperm %v3,%v19,%v19,%v31
.word 0xc24f,000000,0x0040 # clfi %r4,64
jl .Ltail_vx
.word 0xe747,0x3000,0x0036 # vlm %v4,%v7,0(%r3)
.word 0xe700,0x4000,0x006d # vx %v0,%v0,%v4
.word 0xe711,0x5000,0x006d # vx %v1,%v1,%v5
.word 0xe722,0x6000,0x006d # vx %v2,%v2,%v6
.word 0xe733,0x7000,0x006d # vx %v3,%v3,%v7
.word 0xe703,0x2000,0x003e # vstm %v0,%v3,0(%r2)
la %r3,0x40(%r3)
la %r2,0x40(%r2)
ahi %r4,-64
je .Ldone_vx
.word 0xe744,0xb000,0x2ef3 # va %v20,%v20,%v27,2
.word 0xe755,0x8000,0x2ef3 # va %v21,%v21,%v24,2
.word 0xe766,0x9000,0x2ef3 # va %v22,%v22,%v25,2
.word 0xe777,0xf000,0x2cf3 # va %v23,%v23,%v15,2
.word 0xe704,0x4000,0xf78c # vperm %v0,%v20,%v20,%v31
.word 0xe715,0x5000,0xf78c # vperm %v1,%v21,%v21,%v31
.word 0xe726,0x6000,0xf78c # vperm %v2,%v22,%v22,%v31
.word 0xe737,0x7000,0xf78c # vperm %v3,%v23,%v23,%v31
.word 0xc24f,000000,0x0040 # clfi %r4,64
jl .Ltail_vx
.word 0xe747,0x3000,0x0036 # vlm %v4,%v7,0(%r3)
.word 0xe700,0x4000,0x006d # vx %v0,%v0,%v4
.word 0xe711,0x5000,0x006d # vx %v1,%v1,%v5
.word 0xe722,0x6000,0x006d # vx %v2,%v2,%v6
.word 0xe733,0x7000,0x006d # vx %v3,%v3,%v7
.word 0xe703,0x2000,0x003e # vstm %v0,%v3,0(%r2)
la %r3,0x40(%r3)
la %r2,0x40(%r2)
lhi %r0,10
ahi %r4,-64
jne .Loop_outer_vx
.Ldone_vx:
ld %f4,160+16*4+2*8(%r15)
ld %f6,160+16*4+3*8(%r15)
lm %r6,%r7,160+6*4(%r15)
la %r15,160(%r15)
br %r14
.align 16
.Ltail_vx:
ld %f4,160+16*4+2*8(%r15)
ld %f6,160+16*4+3*8(%r15)
.word 0xe703,0xf060,0x003e # vstm %v0,%v3,96(%r15)
lghi %r1,0
.Loop_tail_vx:
llgc %r5,0(%r1,%r3)
llgc %r6,96(%r1,%r15)
xr %r6,%r5
stc %r6,0(%r1,%r2)
la %r1,1(%r1)
brct %r4,.Loop_tail_vx
lm %r6,%r7,160+6*4(%r15)
la %r15,160(%r15)
br %r14
.size ChaCha20_ctr32_vx,.-ChaCha20_ctr32_vx
.align 32
.Lsigma:
.long 1634760805,857760878,2036477234,1797285236
.long 1,0,0,0
.long 2,0,0,0
.long 3,0,0,0
.long 50462976,117835012,185207048,252579084
.long 0,1,2,3
.long 1634760805,1634760805,1634760805,1634760805
.long 857760878,857760878,857760878,857760878
.long 2036477234,2036477234,2036477234,2036477234
.long 1797285236,1797285236,1797285236,1797285236
.asciz "ChaCha20 for s390x, CRYPTOGAMS by <appro@openssl.org>"
.align 4

View File

@ -0,0 +1,148 @@
#include "s390x_arch.h"
.text
.globl gcm_gmult_4bit
.align 32
gcm_gmult_4bit:
stm %r6,%r14,6*4(%r15)
aghi %r2,-1
lghi %r5,1
lghi %r13,120
larl %r14,rem_4bit
lg %r1,8+1(%r2) # Xi
j .Lgmult_shortcut
.type gcm_gmult_4bit,@function
.size gcm_gmult_4bit,(.-gcm_gmult_4bit)
.globl gcm_ghash_4bit
.align 32
gcm_ghash_4bit:
larl %r1,OPENSSL_s390xcap_P
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,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"
br %r14
.align 32
.Lsoft_ghash:
llgfr %r5,%r5
stm %r6,%r14,6*4(%r15)
aghi %r2,-1
srlg %r5,%r5,4
lghi %r13,120
larl %r14,rem_4bit
lg %r1,8+1(%r2) # Xi
lg %r0,0+1(%r2)
lghi %r12,0
.Louter:
xg %r0,0(%r4) # Xi ^= inp
xg %r1,8(%r4)
xgr %r0,%r12
stg %r1,8+1(%r2)
stg %r0,0+1(%r2)
.Lgmult_shortcut:
lghi %r12,0xf0
sllg %r8,%r1,4
srlg %r10,%r1,8 # extract second byte
ngr %r8,%r12
lgr %r9,%r1
lghi %r11,14
ngr %r9,%r12
lg %r1,8(%r8,%r3)
lg %r0,0(%r8,%r3)
sllg %r8,%r10,4
sllg %r6,%r1,3
ngr %r8,%r12
ngr %r6,%r13
ngr %r10,%r12
sllg %r12,%r0,60
srlg %r1,%r1,4
srlg %r0,%r0,4
xg %r1,8(%r9,%r3)
xg %r0,0(%r9,%r3)
lgr %r9,%r10
sllg %r7,%r1,3
xgr %r1,%r12
ngr %r7,%r13
sllg %r12,%r0,60
j .Lghash_inner
.align 16
.Lghash_inner:
srlg %r1,%r1,4
srlg %r0,%r0,4
xg %r1,8(%r8,%r3)
llgc %r10,0(%r11,%r2)
xg %r0,0(%r8,%r3)
sllg %r8,%r10,4
xg %r0,0(%r6,%r14)
nill %r8,0xf0
sllg %r6,%r1,3
xgr %r1,%r12
ngr %r6,%r13
nill %r10,0xf0
sllg %r12,%r0,60
srlg %r1,%r1,4
srlg %r0,%r0,4
xg %r1,8(%r9,%r3)
xg %r0,0(%r9,%r3)
lgr %r9,%r10
xg %r0,0(%r7,%r14)
sllg %r7,%r1,3
xgr %r1,%r12
ngr %r7,%r13
sllg %r12,%r0,60
brct %r11,.Lghash_inner
srlg %r1,%r1,4
srlg %r0,%r0,4
xg %r1,8(%r8,%r3)
xg %r0,0(%r8,%r3)
sllg %r10,%r1,3
xg %r0,0(%r6,%r14)
xgr %r1,%r12
ngr %r10,%r13
sllg %r12,%r0,60
srlg %r1,%r1,4
srlg %r0,%r0,4
xg %r1,8(%r9,%r3)
xg %r0,0(%r9,%r3)
xgr %r1,%r12
xg %r0,0(%r7,%r14)
lg %r12,0(%r10,%r14)
la %r4,16(%r4)
sllg %r12,%r12,4 # correct last rem_4bit[rem]
brctg %r5,.Louter
xgr %r0,%r12
stg %r1,8+1(%r2)
stg %r0,0+1(%r2)
lm %r6,%r14,6*4(%r15)
br %r14
.type gcm_ghash_4bit,@function
.size gcm_ghash_4bit,(.-gcm_ghash_4bit)
.align 64
rem_4bit:
.long 0,0,29491200,0,58982400,0,38141952,0
.long 117964800,0,113901568,0,76283904,0,88997888,0
.long 235929600,0,265420800,0,227803136,0,206962688,0
.long 152567808,0,148504576,0,177995776,0,190709760,0
.type rem_4bit,@object
.size rem_4bit,(.-rem_4bit)
.string "GHASH for s390x, CRYPTOGAMS by <appro@openssl.org>"

View File

@ -0,0 +1,686 @@
#include "s390x_arch.h"
.text
.globl poly1305_init
.type poly1305_init,@function
.align 16
poly1305_init:
lghi %r0,0
lghi %r1,-1
stg %r0,0(%r2)
stg %r0,8(%r2)
stg %r0,16(%r2)
st %r0,24(%r2)
lgr %r5,%r2
lghi %r2,0
clr %r3,%r0
je .Lno_key
lrvg %r2,0(%r3)
lrvg %r3,8(%r3)
nihl %r1,65472
srlg %r0,%r1,4
srlg %r1,%r1,4
nill %r1,65532
ngr %r2,%r0
ngr %r3,%r1
stmg %r2,%r3,32(%r5)
larl %r1,OPENSSL_s390xcap_P
lg %r0,16(%r1)
srlg %r0,%r0,62
nill %r0,1
lcgr %r0,%r0
larl %r1,.Lpoly1305_blocks
larl %r2,.Lpoly1305_blocks_vx
larl %r3,.Lpoly1305_emit
xr %r2,%r1
nr %r2,%r0
xr %r2,%r1
stm %r2,%r3,0(%r4)
lghi %r2,1
.Lno_key:
br %r14
.size poly1305_init,.-poly1305_init
.globl poly1305_blocks
.type poly1305_blocks,@function
.align 16
poly1305_blocks:
.Lpoly1305_blocks:
ltr %r0,%r4
jz .Lno_data
stm %r6,%r14,6*4(%r15)
lg %r11,0(%r2)
lg %r13,8(%r2)
lg %r14,16(%r2)
.Lpoly1305_blocks_entry:
srl %r4,4
llgfr %r5,%r5
lg %r0,32(%r2)
lg %r1,40(%r2)
st %r2,2*4(%r15)
srlg %r2,%r1,2
algr %r2,%r1
j .Loop
.align 16
.Loop:
lrvg %r7,0(%r3)
lrvg %r9,8(%r3)
la %r3,16(%r3)
algr %r7,%r11
alcgr %r9,%r13
alcgr %r14,%r5
lgr %r11,%r7
mlgr %r6,%r0
lgr %r13,%r9
mlgr %r8,%r2
mlgr %r10,%r1
mlgr %r12,%r0
algr %r7,%r9
lgr %r9,%r14
alcgr %r6,%r8
lghi %r8,0
algr %r13,%r11
alcgr %r12,%r10
msgr %r9,%r2
msgr %r14,%r0
algr %r13,%r9
alcgr %r12,%r8
algr %r13,%r6
alcgr %r14,%r12
lghi %r11,-4
ngr %r11,%r14
srlg %r10,%r14,2
algr %r11,%r10
lghi %r12,3
ngr %r14,%r12
algr %r11,%r7
alcgr %r13,%r8
alcgr %r14,%r8
brct %r4,.Loop
l %r2,2*4(%r15)
stg %r11,0(%r2)
stg %r13,8(%r2)
stg %r14,16(%r2)
lm %r6,%r14,6*4(%r15)
.Lno_data:
br %r14
.size poly1305_blocks,.-poly1305_blocks
.type poly1305_blocks_vx,@function
.align 16
poly1305_blocks_vx:
.Lpoly1305_blocks_vx:
.word 0xc24f,000000,0x0080 # clfi %r4,128
jhe __poly1305_blocks_vx
stm %r6,%r14,6*4(%r15)
lg %r10,0(%r2)
lg %r12,8(%r2)
lg %r9,16(%r2)
llgfr %r0,%r10
srlg %r11,%r10,32
llgfr %r1,%r12
srlg %r13,%r12,32
srlg %r14,%r9,32
sllg %r0,%r0,26
algr %r11,%r0
sllg %r0,%r13,52
srlg %r13,%r13,12
sllg %r1,%r1,14
algr %r11,%r0
alcgr %r13,%r1
sllg %r0,%r14,40
srlg %r14,%r14,24
lghi %r1,0
algr %r13,%r0
alcgr %r14,%r1
llgf %r0,24(%r2)
lcgr %r0,%r0
xgr %r11,%r10
xgr %r13,%r12
xgr %r14,%r9
ngr %r11,%r0
ngr %r13,%r0
ngr %r14,%r0
xgr %r11,%r10
xgr %r13,%r12
xgr %r14,%r9
lhi %r0,0
st %r0,24(%r2)
j .Lpoly1305_blocks_entry
.size poly1305_blocks_vx,.-poly1305_blocks_vx
.type __poly1305_mul,@function
.align 16
__poly1305_mul:
.word 0xe730,0xa000,0x28a5 # vmlo %v19,%v0,%v10,2
.word 0xe740,0xb000,0x28a5 # vmlo %v20,%v0,%v11,2
.word 0xe750,0xd000,0x28a5 # vmlo %v21,%v0,%v13,2
.word 0xe760,0xf000,0x28a5 # vmlo %v22,%v0,%v15,2
.word 0xe770,0x1000,0x2aa5 # vmlo %v23,%v0,%v17,2
.word 0xe731,0x2200,0x3bad # vmalo %v19,%v1,%v18,%v19,2
.word 0xe741,0xa200,0x49ad # vmalo %v20,%v1,%v10,%v20,2
.word 0xe751,0xb200,0x59ad # vmalo %v21,%v1,%v11,%v21,2
.word 0xe761,0xd200,0x69ad # vmalo %v22,%v1,%v13,%v22,2
.word 0xe771,0xf200,0x79ad # vmalo %v23,%v1,%v15,%v23,2
.word 0xe732,0x0200,0x3bad # vmalo %v19,%v2,%v16,%v19,2
.word 0xe742,0x2200,0x4bad # vmalo %v20,%v2,%v18,%v20,2
.word 0xe752,0xa200,0x59ad # vmalo %v21,%v2,%v10,%v21,2
.word 0xe762,0xb200,0x69ad # vmalo %v22,%v2,%v11,%v22,2
.word 0xe772,0xd200,0x79ad # vmalo %v23,%v2,%v13,%v23,2
.word 0xe733,0xe200,0x39ad # vmalo %v19,%v3,%v14,%v19,2
.word 0xe743,0x0200,0x4bad # vmalo %v20,%v3,%v16,%v20,2
.word 0xe753,0x2200,0x5bad # vmalo %v21,%v3,%v18,%v21,2
.word 0xe763,0xa200,0x69ad # vmalo %v22,%v3,%v10,%v22,2
.word 0xe773,0xb200,0x79ad # vmalo %v23,%v3,%v11,%v23,2
.word 0xe734,0xc200,0x39ad # vmalo %v19,%v4,%v12,%v19,2
.word 0xe744,0xe200,0x49ad # vmalo %v20,%v4,%v14,%v20,2
.word 0xe754,0x0200,0x5bad # vmalo %v21,%v4,%v16,%v21,2
.word 0xe764,0x2200,0x6bad # vmalo %v22,%v4,%v18,%v22,2
.word 0xe774,0xa200,0x79ad # vmalo %v23,%v4,%v10,%v23,2
.word 0xe746,0x001a,0x3438 # vesrl %v4,%v22,26,3
.word 0xe713,0x001a,0x3438 # vesrl %v1,%v19,26,3
.word 0xe736,0xc000,0x0668 # vn %v3,%v22,%v28
.word 0xe703,0xc000,0x0668 # vn %v0,%v19,%v28
.word 0xe744,0x7000,0x32f3 # va %v4,%v4,%v23,3
.word 0xe711,0x4000,0x32f3 # va %v1,%v1,%v20,3
.word 0xe774,0x001a,0x3838 # vesrl %v23,%v4,26,3
.word 0xe741,0x001a,0x3838 # vesrl %v20,%v1,26,3
.word 0xe744,0xc000,0x0268 # vn %v4,%v4,%v28
.word 0xe711,0xc000,0x0268 # vn %v1,%v1,%v28
.word 0xe700,0x7000,0x32f3 # va %v0,%v0,%v23,3
.word 0xe725,0x4000,0x36f3 # va %v2,%v21,%v20,3
.word 0xe777,0x0002,0x3c30 # vesl %v23,%v23,2,3
.word 0xe752,0x001a,0x3838 # vesrl %v21,%v2,26,3
.word 0xe722,0xc000,0x0268 # vn %v2,%v2,%v28
.word 0xe700,0x7000,0x32f3 # va %v0,%v0,%v23,3
.word 0xe733,0x5000,0x32f3 # va %v3,%v3,%v21,3
.word 0xe730,0x001a,0x3838 # vesrl %v19,%v0,26,3
.word 0xe763,0x001a,0x3838 # vesrl %v22,%v3,26,3
.word 0xe700,0xc000,0x0268 # vn %v0,%v0,%v28
.word 0xe733,0xc000,0x0268 # vn %v3,%v3,%v28
.word 0xe711,0x3000,0x32f3 # va %v1,%v1,%v19,3
.word 0xe744,0x6000,0x32f3 # va %v4,%v4,%v22,3
br %r14
.size __poly1305_mul,.-__poly1305_mul
.type __poly1305_blocks_vx,@function
.align 16
__poly1305_blocks_vx:
lr %r0,%r15
stm %r10,%r15,10*4(%r15)
std %f4,16*4+2*8(%r15)
std %f6,16*4+3*8(%r15)
ahi %r15,-96
st %r0,0(%r15)
llgfr %r4,%r4
larl %r1,.Lconst
.word 0xe7c0,0x263f,0x3846 # vgm %v28,38,63,3
.word 0xe7df,0x1010,0x0c36 # vlm %v29,%v31,16(%r1)
.word 0xe300,0x2018,0x0012 # lt %r0,24(%r2)
jnz .Lskip_init
lg %r11,32(%r2)
lg %r13,40(%r2)
.word 0xecab,0x26bf,0x2655 # risbg %r10,%r11,38,191,38
srlg %r12,%r11,52
.word 0xecbb,0x26bf,0x0055 # risbg %r11,%r11,38,191,0
.word 0xe7ab,000000,0x3022 # vlvg %v10,%r11,0,3
.word 0xeccd,0x2633,0x0c55 # risbg %r12,%r13,38,51,12
.word 0xe7ba,000000,0x3022 # vlvg %v11,%r10,0,3
.word 0xecad,0x263f,0x3255 # risbg %r10,%r13,38,63,50
.word 0xe7dc,000000,0x3022 # vlvg %v13,%r12,0,3
srlg %r12,%r13,40
.word 0xe7fa,000000,0x3022 # vlvg %v15,%r10,0,3
.word 0xe71c,000000,0x3822 # vlvg %v17,%r12,0,3
.word 0xe7cb,0x0002,0x3030 # vesl %v12,%v11,2,3
.word 0xe7ed,0x0002,0x3030 # vesl %v14,%v13,2,3
.word 0xe70f,0x0002,0x3830 # vesl %v16,%v15,2,3
.word 0xe721,0x0002,0x3c30 # vesl %v18,%v17,2,3
.word 0xe70a,000000,0x0056 # vlr %v0,%v10
.word 0xe71b,000000,0x0056 # vlr %v1,%v11
.word 0xe72d,000000,0x0056 # vlr %v2,%v13
.word 0xe73f,000000,0x0056 # vlr %v3,%v15
.word 0xe741,000000,0x0456 # vlr %v4,%v17
.word 0xe7cc,0xb000,0x30f3 # va %v12,%v12,%v11,3
.word 0xe7ee,0xd000,0x30f3 # va %v14,%v14,%v13,3
.word 0xe700,0xf000,0x3cf3 # va %v16,%v16,%v15,3
.word 0xe722,0x1000,0x3ef3 # va %v18,%v18,%v17,3
brasl %r14,__poly1305_mul
.word 0xe7a0,0xa000,0x0084 # vpdi %v10,%v0,%v10,0
.word 0xe7b1,0xb000,0x0084 # vpdi %v11,%v1,%v11,0
.word 0xe7d2,0xd000,0x0084 # vpdi %v13,%v2,%v13,0
.word 0xe7f3,0xf000,0x0084 # vpdi %v15,%v3,%v15,0
.word 0xe714,0x1000,0x0a84 # vpdi %v17,%v4,%v17,0
.word 0xe700,000000,0x0084 # vpdi %v0,%v0,%v0,0
.word 0xe711,0x1000,0x0084 # vpdi %v1,%v1,%v1,0
.word 0xe722,0x2000,0x0084 # vpdi %v2,%v2,%v2,0
.word 0xe733,0x3000,0x0084 # vpdi %v3,%v3,%v3,0
.word 0xe744,0x4000,0x0084 # vpdi %v4,%v4,%v4,0
.word 0xe7cb,0x0002,0x3030 # vesl %v12,%v11,2,3
.word 0xe7ed,0x0002,0x3030 # vesl %v14,%v13,2,3
.word 0xe70f,0x0002,0x3830 # vesl %v16,%v15,2,3
.word 0xe721,0x0002,0x3c30 # vesl %v18,%v17,2,3
.word 0xe7cc,0xb000,0x30f3 # va %v12,%v12,%v11,3
.word 0xe7ee,0xd000,0x30f3 # va %v14,%v14,%v13,3
.word 0xe700,0xf000,0x3cf3 # va %v16,%v16,%v15,3
.word 0xe722,0x1000,0x3ef3 # va %v18,%v18,%v17,3
brasl %r14,__poly1305_mul
.word 0xe750,0x1000,0x0006 # vl %v5,0(%r1)
.word 0xe7aa,000000,0x508c # vperm %v10,%v10,%v0,%v5
.word 0xe7bb,0x1000,0x508c # vperm %v11,%v11,%v1,%v5
.word 0xe7dd,0x2000,0x508c # vperm %v13,%v13,%v2,%v5
.word 0xe7ff,0x3000,0x508c # vperm %v15,%v15,%v3,%v5
.word 0xe711,0x4000,0x5c8c # vperm %v17,%v17,%v4,%v5
.word 0xe7cb,0x0002,0x2030 # vesl %v12,%v11,2,2
.word 0xe7ed,0x0002,0x2030 # vesl %v14,%v13,2,2
.word 0xe70f,0x0002,0x2830 # vesl %v16,%v15,2,2
.word 0xe721,0x0002,0x2c30 # vesl %v18,%v17,2,2
.word 0xe7cc,0xb000,0x20f3 # va %v12,%v12,%v11,2
.word 0xe7ee,0xd000,0x20f3 # va %v14,%v14,%v13,2
.word 0xe700,0xf000,0x2cf3 # va %v16,%v16,%v15,2
.word 0xe722,0x1000,0x2ef3 # va %v18,%v18,%v17,2
lg %r11,0(%r2)
lg %r13,8(%r2)
lg %r14,16(%r2)
.word 0xe700,000000,0x0044 # vgbm %v0,0
.word 0xe710,000000,0x0044 # vgbm %v1,0
.word 0xe720,000000,0x0044 # vgbm %v2,0
.word 0xe730,000000,0x0044 # vgbm %v3,0
.word 0xe740,000000,0x0044 # vgbm %v4,0
.word 0xecab,0x26bf,0x2655 # risbg %r10,%r11,38,191,38
srlg %r12,%r11,52
.word 0xecbb,0x26bf,0x0055 # risbg %r11,%r11,38,191,0
.word 0xe70b,000000,0x3022 # vlvg %v0,%r11,0,3
.word 0xeccd,0x2633,0x0c55 # risbg %r12,%r13,38,51,12
.word 0xe71a,000000,0x3022 # vlvg %v1,%r10,0,3
.word 0xecad,0x263f,0x3255 # risbg %r10,%r13,38,63,50
.word 0xe72c,000000,0x3022 # vlvg %v2,%r12,0,3
srlg %r12,%r13,40
.word 0xe73a,000000,0x3022 # vlvg %v3,%r10,0,3
.word 0xecce,0x2527,0x1855 # risbg %r12,%r14,37,39,24
.word 0xe74c,000000,0x3022 # vlvg %v4,%r12,0,3
lhi %r0,1
st %r0,24(%r2)
.word 0xe7a2,0x2030,0x043e # vstm %v10,%v18,48(%r2)
.word 0xe7aa,0xa000,0x0084 # vpdi %v10,%v10,%v10,0
.word 0xe7bb,0xb000,0x0084 # vpdi %v11,%v11,%v11,0
.word 0xe7cc,0xc000,0x0084 # vpdi %v12,%v12,%v12,0
.word 0xe7dd,0xd000,0x0084 # vpdi %v13,%v13,%v13,0
.word 0xe7ee,0xe000,0x0084 # vpdi %v14,%v14,%v14,0
.word 0xe7ff,0xf000,0x0084 # vpdi %v15,%v15,%v15,0
.word 0xe700,000000,0x0e84 # vpdi %v16,%v16,%v16,0
.word 0xe711,0x1000,0x0e84 # vpdi %v17,%v17,%v17,0
.word 0xe722,0x2000,0x0e84 # vpdi %v18,%v18,%v18,0
j .Loaded_hash
.align 16
.Lskip_init:
.word 0xe700,0x2000,0x2004 # vllez %v0,0(%r2),2
.word 0xe710,0x2004,0x2004 # vllez %v1,4(%r2),2
.word 0xe720,0x2008,0x2004 # vllez %v2,8(%r2),2
.word 0xe730,0x200c,0x2004 # vllez %v3,12(%r2),2
.word 0xe740,0x2010,0x2004 # vllez %v4,16(%r2),2
.word 0xe7a0,0x2030,0x3005 # vlrep %v10,0x30(%r2),3
.word 0xe7b0,0x2040,0x3005 # vlrep %v11,0x40(%r2),3
.word 0xe7c0,0x2050,0x3005 # vlrep %v12,0x50(%r2),3
.word 0xe7d0,0x2060,0x3005 # vlrep %v13,0x60(%r2),3
.word 0xe7e0,0x2070,0x3005 # vlrep %v14,0x70(%r2),3
.word 0xe7f0,0x2080,0x3005 # vlrep %v15,0x80(%r2),3
.word 0xe700,0x2090,0x3805 # vlrep %v16,0x90(%r2),3
.word 0xe710,0x20a0,0x3805 # vlrep %v17,0xa0(%r2),3
.word 0xe720,0x20b0,0x3805 # vlrep %v18,0xb0(%r2),3
.Loaded_hash:
.word 0xe760,000000,0x0044 # vgbm %v6,0
.word 0xe780,000000,0x0044 # vgbm %v8,0
.word 0xe78b,0x3000,0x0c36 # vlm %v24,%v27,0x00(%r3)
la %r3,0x40(%r3)
.word 0xe7c0,0x061f,0x3846 # vgm %v28,6,31,3
.word 0xe790,0x0505,0x2046 # vgm %v9,5,5,2
.word 0xe75a,0xb000,0xd78c # vperm %v5,%v26,%v27,%v29
.word 0xe77a,0xb000,0xf78c # vperm %v7,%v26,%v27,%v31
.word 0xe7aa,0xb000,0xef8c # vperm %v26,%v26,%v27,%v30
.word 0xe765,0xc006,0x3272 # verim %v6,%v5,%v28,6,3
.word 0xe755,0x0020,0x3030 # vesl %v5,%v5,32,3
.word 0xe777,0x001c,0x3030 # vesl %v7,%v7,28,3
.word 0xe78a,0xc012,0x3672 # verim %v8,%v26,%v28,18,3
.word 0xe79a,0xc03a,0x3672 # verim %v9,%v26,%v28,58,3
.word 0xe755,0xc000,0x0268 # vn %v5,%v5,%v28
.word 0xe777,0xc000,0x0268 # vn %v7,%v7,%v28
.word 0xe799,0x0002,0x2038 # vesrl %v9,%v9,2,2
.word 0xe7c0,0x263f,0x3846 # vgm %v28,38,63,3
.word 0xe7a8,0x9000,0xdf8c # vperm %v26,%v24,%v25,%v29
.word 0xe7b8,0x9000,0xef8c # vperm %v27,%v24,%v25,%v30
.word 0xe798,0x9000,0xff8c # vperm %v25,%v24,%v25,%v31
.word 0xe75a,0xc000,0x3672 # verim %v5,%v26,%v28,0,3
.word 0xe76a,0xc026,0x3672 # verim %v6,%v26,%v28,38,3
.word 0xe779,0xc03c,0x3672 # verim %v7,%v25,%v28,60,3
.word 0xe78b,0xc032,0x3672 # verim %v8,%v27,%v28,50,3
.word 0xe7bb,0x0028,0x3c38 # vesrl %v27,%v27,40,3
.word 0xe799,0xb000,0x026a # vo %v9,%v9,%v27
srlg %r0,%r4,6
ahi %r0,-1
.align 16
.Loop_vx:
.word 0xe735,0xa000,0x28a4 # vmle %v19,%v5,%v10,2
.word 0xe745,0xb000,0x28a4 # vmle %v20,%v5,%v11,2
.word 0xe755,0xd000,0x28a4 # vmle %v21,%v5,%v13,2
.word 0xe765,0xf000,0x28a4 # vmle %v22,%v5,%v15,2
.word 0xe775,0x1000,0x2aa4 # vmle %v23,%v5,%v17,2
.word 0xe736,0x2200,0x3bac # vmale %v19,%v6,%v18,%v19,2
.word 0xe746,0xa200,0x49ac # vmale %v20,%v6,%v10,%v20,2
.word 0xe756,0xb200,0x59ac # vmale %v21,%v6,%v11,%v21,2
.word 0xe766,0xd200,0x69ac # vmale %v22,%v6,%v13,%v22,2
.word 0xe776,0xf200,0x79ac # vmale %v23,%v6,%v15,%v23,2
.word 0xe722,0x7000,0x20f3 # va %v2,%v2,%v7,2
.word 0xe700,0x5000,0x20f3 # va %v0,%v0,%v5,2
.word 0xe733,0x8000,0x20f3 # va %v3,%v3,%v8,2
.word 0xe711,0x6000,0x20f3 # va %v1,%v1,%v6,2
.word 0xe744,0x9000,0x20f3 # va %v4,%v4,%v9,2
.word 0xe737,0x0200,0x3bac # vmale %v19,%v7,%v16,%v19,2
.word 0xe747,0x2200,0x4bac # vmale %v20,%v7,%v18,%v20,2
.word 0xe757,0xa200,0x59ac # vmale %v21,%v7,%v10,%v21,2
.word 0xe767,0xb200,0x69ac # vmale %v22,%v7,%v11,%v22,2
.word 0xe777,0xd200,0x79ac # vmale %v23,%v7,%v13,%v23,2
.word 0xe78b,0x3000,0x0c36 # vlm %v24,%v27,0x00(%r3)
la %r3,0x40(%r3)
.word 0xe7c0,0x061f,0x3846 # vgm %v28,6,31,3
.word 0xe738,0xe200,0x39ac # vmale %v19,%v8,%v14,%v19,2
.word 0xe748,0x0200,0x4bac # vmale %v20,%v8,%v16,%v20,2
.word 0xe758,0x2200,0x5bac # vmale %v21,%v8,%v18,%v21,2
.word 0xe768,0xa200,0x69ac # vmale %v22,%v8,%v10,%v22,2
.word 0xe778,0xb200,0x79ac # vmale %v23,%v8,%v11,%v23,2
.word 0xe75a,0xb000,0xd78c # vperm %v5,%v26,%v27,%v29
.word 0xe77a,0xb000,0xf78c # vperm %v7,%v26,%v27,%v31
.word 0xe7aa,0xb000,0xef8c # vperm %v26,%v26,%v27,%v30
.word 0xe739,0xc200,0x39ac # vmale %v19,%v9,%v12,%v19,2
.word 0xe749,0xe200,0x49ac # vmale %v20,%v9,%v14,%v20,2
.word 0xe759,0x0200,0x5bac # vmale %v21,%v9,%v16,%v21,2
.word 0xe769,0x2200,0x6bac # vmale %v22,%v9,%v18,%v22,2
.word 0xe779,0xa200,0x79ac # vmale %v23,%v9,%v10,%v23,2
.word 0xe765,0xc006,0x3272 # verim %v6,%v5,%v28,6,3
.word 0xe755,0x0020,0x3030 # vesl %v5,%v5,32,3
.word 0xe777,0x001c,0x3030 # vesl %v7,%v7,28,3
.word 0xe78a,0xc012,0x3672 # verim %v8,%v26,%v28,18,3
.word 0xe730,0xa200,0x39ad # vmalo %v19,%v0,%v10,%v19,2
.word 0xe740,0xb200,0x49ad # vmalo %v20,%v0,%v11,%v20,2
.word 0xe750,0xd200,0x59ad # vmalo %v21,%v0,%v13,%v21,2
.word 0xe760,0xf200,0x69ad # vmalo %v22,%v0,%v15,%v22,2
.word 0xe770,0x1200,0x7bad # vmalo %v23,%v0,%v17,%v23,2
.word 0xe790,0x0505,0x2046 # vgm %v9,5,5,2
.word 0xe79a,0xc03a,0x3672 # verim %v9,%v26,%v28,58,3
.word 0xe755,0xc000,0x0268 # vn %v5,%v5,%v28
.word 0xe777,0xc000,0x0268 # vn %v7,%v7,%v28
.word 0xe799,0x0002,0x2038 # vesrl %v9,%v9,2,2
.word 0xe731,0x2200,0x3bad # vmalo %v19,%v1,%v18,%v19,2
.word 0xe741,0xa200,0x49ad # vmalo %v20,%v1,%v10,%v20,2
.word 0xe751,0xb200,0x59ad # vmalo %v21,%v1,%v11,%v21,2
.word 0xe761,0xd200,0x69ad # vmalo %v22,%v1,%v13,%v22,2
.word 0xe771,0xf200,0x79ad # vmalo %v23,%v1,%v15,%v23,2
.word 0xe7c0,0x263f,0x3846 # vgm %v28,38,63,3
.word 0xe7a8,0x9000,0xdf8c # vperm %v26,%v24,%v25,%v29
.word 0xe7b8,0x9000,0xef8c # vperm %v27,%v24,%v25,%v30
.word 0xe798,0x9000,0xff8c # vperm %v25,%v24,%v25,%v31
.word 0xe732,0x0200,0x3bad # vmalo %v19,%v2,%v16,%v19,2
.word 0xe742,0x2200,0x4bad # vmalo %v20,%v2,%v18,%v20,2
.word 0xe752,0xa200,0x59ad # vmalo %v21,%v2,%v10,%v21,2
.word 0xe762,0xb200,0x69ad # vmalo %v22,%v2,%v11,%v22,2
.word 0xe772,0xd200,0x79ad # vmalo %v23,%v2,%v13,%v23,2
.word 0xe75a,0xc000,0x3672 # verim %v5,%v26,%v28,0,3
.word 0xe76a,0xc026,0x3672 # verim %v6,%v26,%v28,38,3
.word 0xe779,0xc03c,0x3672 # verim %v7,%v25,%v28,60,3
.word 0xe733,0xe200,0x39ad # vmalo %v19,%v3,%v14,%v19,2
.word 0xe743,0x0200,0x4bad # vmalo %v20,%v3,%v16,%v20,2
.word 0xe753,0x2200,0x5bad # vmalo %v21,%v3,%v18,%v21,2
.word 0xe763,0xa200,0x69ad # vmalo %v22,%v3,%v10,%v22,2
.word 0xe773,0xb200,0x79ad # vmalo %v23,%v3,%v11,%v23,2
.word 0xe78b,0xc032,0x3672 # verim %v8,%v27,%v28,50,3
.word 0xe7bb,0x0028,0x3c38 # vesrl %v27,%v27,40,3
.word 0xe799,0xb000,0x026a # vo %v9,%v9,%v27
.word 0xe734,0xc200,0x39ad # vmalo %v19,%v4,%v12,%v19,2
.word 0xe744,0xe200,0x49ad # vmalo %v20,%v4,%v14,%v20,2
.word 0xe754,0x0200,0x5bad # vmalo %v21,%v4,%v16,%v21,2
.word 0xe764,0x2200,0x6bad # vmalo %v22,%v4,%v18,%v22,2
.word 0xe774,0xa200,0x79ad # vmalo %v23,%v4,%v10,%v23,2
.word 0xe746,0x001a,0x3438 # vesrl %v4,%v22,26,3
.word 0xe713,0x001a,0x3438 # vesrl %v1,%v19,26,3
.word 0xe736,0xc000,0x0668 # vn %v3,%v22,%v28
.word 0xe703,0xc000,0x0668 # vn %v0,%v19,%v28
.word 0xe744,0x7000,0x32f3 # va %v4,%v4,%v23,3
.word 0xe711,0x4000,0x32f3 # va %v1,%v1,%v20,3
.word 0xe774,0x001a,0x3838 # vesrl %v23,%v4,26,3
.word 0xe741,0x001a,0x3838 # vesrl %v20,%v1,26,3
.word 0xe744,0xc000,0x0268 # vn %v4,%v4,%v28
.word 0xe711,0xc000,0x0268 # vn %v1,%v1,%v28
.word 0xe700,0x7000,0x32f3 # va %v0,%v0,%v23,3
.word 0xe725,0x4000,0x36f3 # va %v2,%v21,%v20,3
.word 0xe777,0x0002,0x3c30 # vesl %v23,%v23,2,3
.word 0xe752,0x001a,0x3838 # vesrl %v21,%v2,26,3
.word 0xe722,0xc000,0x0268 # vn %v2,%v2,%v28
.word 0xe700,0x7000,0x32f3 # va %v0,%v0,%v23,3
.word 0xe733,0x5000,0x32f3 # va %v3,%v3,%v21,3
.word 0xe730,0x001a,0x3838 # vesrl %v19,%v0,26,3
.word 0xe763,0x001a,0x3838 # vesrl %v22,%v3,26,3
.word 0xe700,0xc000,0x0268 # vn %v0,%v0,%v28
.word 0xe733,0xc000,0x0268 # vn %v3,%v3,%v28
.word 0xe711,0x3000,0x32f3 # va %v1,%v1,%v19,3
.word 0xe744,0x6000,0x32f3 # va %v4,%v4,%v22,3
brct %r0,.Loop_vx
.word 0xe7a2,0x2030,0x0436 # vlm %v10,%v18,48(%r2)
lghi %r0,48
lcr %r4,%r4
nr %r4,%r0
slr %r3,%r4
.Last:
.word 0xe735,0xa000,0x28a4 # vmle %v19,%v5,%v10,2
.word 0xe745,0xb000,0x28a4 # vmle %v20,%v5,%v11,2
.word 0xe755,0xd000,0x28a4 # vmle %v21,%v5,%v13,2
.word 0xe765,0xf000,0x28a4 # vmle %v22,%v5,%v15,2
.word 0xe775,0x1000,0x2aa4 # vmle %v23,%v5,%v17,2
.word 0xe736,0x2200,0x3bac # vmale %v19,%v6,%v18,%v19,2
.word 0xe746,0xa200,0x49ac # vmale %v20,%v6,%v10,%v20,2
.word 0xe756,0xb200,0x59ac # vmale %v21,%v6,%v11,%v21,2
.word 0xe766,0xd200,0x69ac # vmale %v22,%v6,%v13,%v22,2
.word 0xe776,0xf200,0x79ac # vmale %v23,%v6,%v15,%v23,2
.word 0xe700,0x5000,0x20f3 # va %v0,%v0,%v5,2
.word 0xe711,0x6000,0x20f3 # va %v1,%v1,%v6,2
.word 0xe722,0x7000,0x20f3 # va %v2,%v2,%v7,2
.word 0xe733,0x8000,0x20f3 # va %v3,%v3,%v8,2
.word 0xe744,0x9000,0x20f3 # va %v4,%v4,%v9,2
.word 0xe737,0x0200,0x3bac # vmale %v19,%v7,%v16,%v19,2
.word 0xe747,0x2200,0x4bac # vmale %v20,%v7,%v18,%v20,2
.word 0xe757,0xa200,0x59ac # vmale %v21,%v7,%v10,%v21,2
.word 0xe767,0xb200,0x69ac # vmale %v22,%v7,%v11,%v22,2
.word 0xe777,0xd200,0x79ac # vmale %v23,%v7,%v13,%v23,2
.word 0xe738,0xe200,0x39ac # vmale %v19,%v8,%v14,%v19,2
.word 0xe748,0x0200,0x4bac # vmale %v20,%v8,%v16,%v20,2
.word 0xe758,0x2200,0x5bac # vmale %v21,%v8,%v18,%v21,2
.word 0xe768,0xa200,0x69ac # vmale %v22,%v8,%v10,%v22,2
.word 0xe778,0xb200,0x79ac # vmale %v23,%v8,%v11,%v23,2
.word 0xe739,0xc200,0x39ac # vmale %v19,%v9,%v12,%v19,2
.word 0xe749,0xe200,0x49ac # vmale %v20,%v9,%v14,%v20,2
.word 0xe759,0x0200,0x5bac # vmale %v21,%v9,%v16,%v21,2
.word 0xe769,0x2200,0x6bac # vmale %v22,%v9,%v18,%v22,2
.word 0xe779,0xa200,0x79ac # vmale %v23,%v9,%v10,%v23,2
.word 0xe730,0xa200,0x39ad # vmalo %v19,%v0,%v10,%v19,2
.word 0xe740,0xb200,0x49ad # vmalo %v20,%v0,%v11,%v20,2
.word 0xe750,0xd200,0x59ad # vmalo %v21,%v0,%v13,%v21,2
.word 0xe760,0xf200,0x69ad # vmalo %v22,%v0,%v15,%v22,2
.word 0xe770,0x1200,0x7bad # vmalo %v23,%v0,%v17,%v23,2
.word 0xe731,0x2200,0x3bad # vmalo %v19,%v1,%v18,%v19,2
.word 0xe741,0xa200,0x49ad # vmalo %v20,%v1,%v10,%v20,2
.word 0xe751,0xb200,0x59ad # vmalo %v21,%v1,%v11,%v21,2
.word 0xe761,0xd200,0x69ad # vmalo %v22,%v1,%v13,%v22,2
.word 0xe771,0xf200,0x79ad # vmalo %v23,%v1,%v15,%v23,2
.word 0xe732,0x0200,0x3bad # vmalo %v19,%v2,%v16,%v19,2
.word 0xe742,0x2200,0x4bad # vmalo %v20,%v2,%v18,%v20,2
.word 0xe752,0xa200,0x59ad # vmalo %v21,%v2,%v10,%v21,2
.word 0xe762,0xb200,0x69ad # vmalo %v22,%v2,%v11,%v22,2
.word 0xe772,0xd200,0x79ad # vmalo %v23,%v2,%v13,%v23,2
.word 0xe733,0xe200,0x39ad # vmalo %v19,%v3,%v14,%v19,2
.word 0xe743,0x0200,0x4bad # vmalo %v20,%v3,%v16,%v20,2
.word 0xe753,0x2200,0x5bad # vmalo %v21,%v3,%v18,%v21,2
.word 0xe763,0xa200,0x69ad # vmalo %v22,%v3,%v10,%v22,2
.word 0xe773,0xb200,0x79ad # vmalo %v23,%v3,%v11,%v23,2
.word 0xe734,0xc200,0x39ad # vmalo %v19,%v4,%v12,%v19,2
.word 0xe744,0xe200,0x49ad # vmalo %v20,%v4,%v14,%v20,2
.word 0xe754,0x0200,0x5bad # vmalo %v21,%v4,%v16,%v21,2
.word 0xe764,0x2200,0x6bad # vmalo %v22,%v4,%v18,%v22,2
.word 0xe774,0xa200,0x79ad # vmalo %v23,%v4,%v10,%v23,2
.word 0xe700,000000,0x0044 # vgbm %v0,0
.word 0xe733,000000,0x3c67 # vsumq %v19,%v19,%v0,3
.word 0xe744,000000,0x3c67 # vsumq %v20,%v20,%v0,3
.word 0xe755,000000,0x3c67 # vsumq %v21,%v21,%v0,3
.word 0xe766,000000,0x3c67 # vsumq %v22,%v22,%v0,3
.word 0xe777,000000,0x3c67 # vsumq %v23,%v23,%v0,3
.word 0xe746,0x001a,0x3438 # vesrl %v4,%v22,26,3
.word 0xe713,0x001a,0x3438 # vesrl %v1,%v19,26,3
.word 0xe736,0xc000,0x0668 # vn %v3,%v22,%v28
.word 0xe703,0xc000,0x0668 # vn %v0,%v19,%v28
.word 0xe744,0x7000,0x32f3 # va %v4,%v4,%v23,3
.word 0xe711,0x4000,0x32f3 # va %v1,%v1,%v20,3
.word 0xe774,0x001a,0x3838 # vesrl %v23,%v4,26,3
.word 0xe741,0x001a,0x3838 # vesrl %v20,%v1,26,3
.word 0xe744,0xc000,0x0268 # vn %v4,%v4,%v28
.word 0xe711,0xc000,0x0268 # vn %v1,%v1,%v28
.word 0xe700,0x7000,0x32f3 # va %v0,%v0,%v23,3
.word 0xe725,0x4000,0x36f3 # va %v2,%v21,%v20,3
.word 0xe777,0x0002,0x3c30 # vesl %v23,%v23,2,3
.word 0xe752,0x001a,0x3838 # vesrl %v21,%v2,26,3
.word 0xe722,0xc000,0x0268 # vn %v2,%v2,%v28
.word 0xe700,0x7000,0x32f3 # va %v0,%v0,%v23,3
.word 0xe733,0x5000,0x32f3 # va %v3,%v3,%v21,3
.word 0xe730,0x001a,0x3838 # vesrl %v19,%v0,26,3
.word 0xe763,0x001a,0x3838 # vesrl %v22,%v3,26,3
.word 0xe700,0xc000,0x0268 # vn %v0,%v0,%v28
.word 0xe733,0xc000,0x0268 # vn %v3,%v3,%v28
.word 0xe711,0x3000,0x32f3 # va %v1,%v1,%v19,3
.word 0xe744,0x6000,0x32f3 # va %v4,%v4,%v22,3
.word 0xc24f,000000,000000 # clfi %r4,0
je .Ldone
.word 0xe78b,0x3000,0x0c36 # vlm %v24,%v27,0x00(%r3)
.word 0xe7c0,0x061f,0x3846 # vgm %v28,6,31,3
.word 0xe790,0x0505,0x2046 # vgm %v9,5,5,2
.word 0xe75a,0xb000,0xd78c # vperm %v5,%v26,%v27,%v29
.word 0xe77a,0xb000,0xf78c # vperm %v7,%v26,%v27,%v31
.word 0xe7aa,0xb000,0xef8c # vperm %v26,%v26,%v27,%v30
.word 0xe734,0x1030,0x0806 # vl %v19,0x30(%r4,%r1)
.word 0xe744,0x1060,0x0806 # vl %v20,0x60(%r4,%r1)
.word 0xe765,0xc006,0x3272 # verim %v6,%v5,%v28,6,3
.word 0xe755,0x0020,0x3030 # vesl %v5,%v5,32,3
.word 0xe777,0x001c,0x3030 # vesl %v7,%v7,28,3
.word 0xe78a,0xc012,0x3672 # verim %v8,%v26,%v28,18,3
.word 0xe79a,0xc03a,0x3672 # verim %v9,%v26,%v28,58,3
.word 0xe755,0xc000,0x0268 # vn %v5,%v5,%v28
.word 0xe777,0xc000,0x0268 # vn %v7,%v7,%v28
.word 0xe799,0x0002,0x2038 # vesrl %v9,%v9,2,2
.word 0xe7c0,0x263f,0x3846 # vgm %v28,38,63,3
.word 0xe7a8,0x9000,0xdf8c # vperm %v26,%v24,%v25,%v29
.word 0xe7b8,0x9000,0xef8c # vperm %v27,%v24,%v25,%v30
.word 0xe798,0x9000,0xff8c # vperm %v25,%v24,%v25,%v31
.word 0xe75a,0xc000,0x3672 # verim %v5,%v26,%v28,0,3
.word 0xe76a,0xc026,0x3672 # verim %v6,%v26,%v28,38,3
.word 0xe779,0xc03c,0x3672 # verim %v7,%v25,%v28,60,3
.word 0xe78b,0xc032,0x3672 # verim %v8,%v27,%v28,50,3
.word 0xe7bb,0x0028,0x3c38 # vesrl %v27,%v27,40,3
.word 0xe799,0xb000,0x026a # vo %v9,%v9,%v27
.word 0xe700,000000,0x318c # vperm %v0,%v0,%v0,%v19
.word 0xe755,0x4000,0x0268 # vn %v5,%v5,%v20
.word 0xe711,0x1000,0x318c # vperm %v1,%v1,%v1,%v19
.word 0xe766,0x4000,0x0268 # vn %v6,%v6,%v20
.word 0xe722,0x2000,0x318c # vperm %v2,%v2,%v2,%v19
.word 0xe777,0x4000,0x0268 # vn %v7,%v7,%v20
.word 0xe733,0x3000,0x318c # vperm %v3,%v3,%v3,%v19
.word 0xe788,0x4000,0x0268 # vn %v8,%v8,%v20
.word 0xe744,0x4000,0x318c # vperm %v4,%v4,%v4,%v19
.word 0xe799,0x4000,0x0268 # vn %v9,%v9,%v20
.word 0xe755,000000,0x20f3 # va %v5,%v5,%v0,2
.word 0xe700,000000,0x0044 # vgbm %v0,0
.word 0xe766,0x1000,0x20f3 # va %v6,%v6,%v1,2
.word 0xe710,000000,0x0044 # vgbm %v1,0
.word 0xe777,0x2000,0x20f3 # va %v7,%v7,%v2,2
.word 0xe720,000000,0x0044 # vgbm %v2,0
.word 0xe788,0x3000,0x20f3 # va %v8,%v8,%v3,2
.word 0xe730,000000,0x0044 # vgbm %v3,0
.word 0xe799,0x4000,0x20f3 # va %v9,%v9,%v4,2
.word 0xe740,000000,0x0044 # vgbm %v4,0
lhi %r4,0
j .Last
.Ldone:
.word 0xe700,0x2000,0x300b # vstef %v0,0(%r2),3
.word 0xe710,0x2004,0x300b # vstef %v1,4(%r2),3
.word 0xe720,0x2008,0x300b # vstef %v2,8(%r2),3
.word 0xe730,0x200c,0x300b # vstef %v3,12(%r2),3
.word 0xe740,0x2010,0x300b # vstef %v4,16(%r2),3
ld %f4,96+16*4+2*8(%r15)
ld %f6,96+16*4+3*8(%r15)
lm %r10,%r15,96+10*4(%r15)
br %r14
.size __poly1305_blocks_vx,.-__poly1305_blocks_vx
.globl poly1305_emit
.type poly1305_emit,@function
.align 16
poly1305_emit:
.Lpoly1305_emit:
stm %r6,%r10,6*4(%r15)
lg %r8,0(%r2)
lg %r9,8(%r2)
lg %r10,16(%r2)
llgfr %r0,%r8
srlg %r5,%r8,32
llgfr %r1,%r9
srlg %r6,%r9,32
srlg %r7,%r10,32
sllg %r0,%r0,26
algr %r5,%r0
sllg %r0,%r6,52
srlg %r6,%r6,12
sllg %r1,%r1,14
algr %r5,%r0
alcgr %r6,%r1
sllg %r0,%r7,40
srlg %r7,%r7,24
lghi %r1,0
algr %r6,%r0
alcgr %r7,%r1
llgf %r0,24(%r2)
lcgr %r0,%r0
xgr %r5,%r8
xgr %r6,%r9
xgr %r7,%r10
ngr %r5,%r0
ngr %r6,%r0
ngr %r7,%r0
xgr %r5,%r8
xgr %r6,%r9
xgr %r7,%r10
lghi %r0,5
lgr %r8,%r5
lgr %r9,%r6
algr %r5,%r0
alcgr %r6,%r1
alcgr %r7,%r1
srlg %r7,%r7,2
slgr %r1,%r7
lg %r10,0(%r4)
lg %r2,8(%r4)
xgr %r5,%r8
xgr %r6,%r9
ngr %r5,%r1
ngr %r6,%r1
xgr %r5,%r8
rllg %r8,%r10,32
xgr %r6,%r9
rllg %r9,%r2,32
algr %r5,%r8
alcgr %r6,%r9
strvg %r5,0(%r3)
strvg %r6,8(%r3)
lm %r6,%r10,6*4(%r15)
br %r14
.size poly1305_emit,.-poly1305_emit
.align 16
.Lconst:
.long 67438087,336926231,202182159,471670303
.long 117835012,50462976,387323156,319951120
.long 252579084,185207048,522067228,454695192
.long 0,151521030,0,421009174
.long 0,0,0,202182159
.long 202182159,0,0,0
.long 0,0,202182159,0
.long 4294967295,0,4294967295,4294967295
.long 4294967295,0,4294967295,0
.long 0,0,4294967295,0
.string "Poly1305 for s390x, CRYPTOGAMS by <appro@openssl.org>"

View File

@ -0,0 +1,241 @@
.text
.globl RC4
.type RC4,@function
.align 64
RC4:
stm %r6,%r11,6*4(%r15)
llgfr %r3,%r3
llgc %r6,0(%r2)
llgc %r10,1(%r2)
la %r6,1(%r6)
nill %r6,0xff
srlg %r1,%r3,3
ltgr %r1,%r1
llgc %r8,2(%r6,%r2)
jz .Lshort
j .Loop8
.align 64
.Loop8:
la %r10,0(%r10,%r8) # 0
nill %r10,255
la %r7,1(%r6)
nill %r7,255
llgc %r11,2(%r10,%r2)
stc %r8,2(%r10,%r2)
llgc %r9,2(%r7,%r2)
stc %r11,2(%r6,%r2)
cr %r7,%r10
jne .Lcmov0
la %r9,0(%r8)
.Lcmov0:
la %r11,0(%r11,%r8)
nill %r11,255
la %r10,0(%r10,%r9) # 1
nill %r10,255
la %r6,1(%r7)
nill %r6,255
llgc %r0,2(%r11,%r2)
llgc %r11,2(%r10,%r2)
stc %r9,2(%r10,%r2)
llgc %r8,2(%r6,%r2)
stc %r11,2(%r7,%r2)
cr %r6,%r10
jne .Lcmov1
la %r8,0(%r9)
.Lcmov1:
la %r11,0(%r11,%r9)
nill %r11,255
la %r10,0(%r10,%r8) # 2
nill %r10,255
la %r7,1(%r6)
nill %r7,255
sllg %r0,%r0,8
ic %r0,2(%r11,%r2)
llgc %r11,2(%r10,%r2)
stc %r8,2(%r10,%r2)
llgc %r9,2(%r7,%r2)
stc %r11,2(%r6,%r2)
cr %r7,%r10
jne .Lcmov2
la %r9,0(%r8)
.Lcmov2:
la %r11,0(%r11,%r8)
nill %r11,255
la %r10,0(%r10,%r9) # 3
nill %r10,255
la %r6,1(%r7)
nill %r6,255
sllg %r0,%r0,8
ic %r0,2(%r11,%r2)
llgc %r11,2(%r10,%r2)
stc %r9,2(%r10,%r2)
llgc %r8,2(%r6,%r2)
stc %r11,2(%r7,%r2)
cr %r6,%r10
jne .Lcmov3
la %r8,0(%r9)
.Lcmov3:
la %r11,0(%r11,%r9)
nill %r11,255
la %r10,0(%r10,%r8) # 4
nill %r10,255
la %r7,1(%r6)
nill %r7,255
sllg %r0,%r0,8
ic %r0,2(%r11,%r2)
llgc %r11,2(%r10,%r2)
stc %r8,2(%r10,%r2)
llgc %r9,2(%r7,%r2)
stc %r11,2(%r6,%r2)
cr %r7,%r10
jne .Lcmov4
la %r9,0(%r8)
.Lcmov4:
la %r11,0(%r11,%r8)
nill %r11,255
la %r10,0(%r10,%r9) # 5
nill %r10,255
la %r6,1(%r7)
nill %r6,255
sllg %r0,%r0,8
ic %r0,2(%r11,%r2)
llgc %r11,2(%r10,%r2)
stc %r9,2(%r10,%r2)
llgc %r8,2(%r6,%r2)
stc %r11,2(%r7,%r2)
cr %r6,%r10
jne .Lcmov5
la %r8,0(%r9)
.Lcmov5:
la %r11,0(%r11,%r9)
nill %r11,255
la %r10,0(%r10,%r8) # 6
nill %r10,255
la %r7,1(%r6)
nill %r7,255
sllg %r0,%r0,8
ic %r0,2(%r11,%r2)
llgc %r11,2(%r10,%r2)
stc %r8,2(%r10,%r2)
llgc %r9,2(%r7,%r2)
stc %r11,2(%r6,%r2)
cr %r7,%r10
jne .Lcmov6
la %r9,0(%r8)
.Lcmov6:
la %r11,0(%r11,%r8)
nill %r11,255
la %r10,0(%r10,%r9) # 7
nill %r10,255
la %r6,1(%r7)
nill %r6,255
sllg %r0,%r0,8
ic %r0,2(%r11,%r2)
llgc %r11,2(%r10,%r2)
stc %r9,2(%r10,%r2)
llgc %r8,2(%r6,%r2)
stc %r11,2(%r7,%r2)
cr %r6,%r10
jne .Lcmov7
la %r8,0(%r9)
.Lcmov7:
la %r11,0(%r11,%r9)
nill %r11,255
lg %r9,0(%r4)
sllg %r0,%r0,8
la %r4,8(%r4)
ic %r0,2(%r11,%r2)
xgr %r0,%r9
stg %r0,0(%r5)
la %r5,8(%r5)
brctg %r1,.Loop8
.Lshort:
lghi %r0,7
ngr %r3,%r0
jz .Lexit
j .Loop1
.align 16
.Loop1:
la %r10,0(%r10,%r8)
nill %r10,255
llgc %r11,2(%r10,%r2)
stc %r8,2(%r10,%r2)
stc %r11,2(%r6,%r2)
ar %r11,%r8
ahi %r6,1
nill %r11,255
nill %r6,255
llgc %r0,0(%r4)
la %r4,1(%r4)
llgc %r11,2(%r11,%r2)
llgc %r8,2(%r6,%r2)
xr %r0,%r11
stc %r0,0(%r5)
la %r5,1(%r5)
brct %r3,.Loop1
.Lexit:
ahi %r6,-1
stc %r6,0(%r2)
stc %r10,1(%r2)
lm %r6,%r11,6*4(%r15)
br %r14
.size RC4,.-RC4
.string "RC4 for s390x, CRYPTOGAMS by <appro@openssl.org>"
.globl RC4_set_key
.type RC4_set_key,@function
.align 64
RC4_set_key:
stm %r6,%r8,6*4(%r15)
lhi %r0,256
la %r1,0
sth %r1,0(%r2)
.align 4
.L1stloop:
stc %r1,2(%r1,%r2)
la %r1,1(%r1)
brct %r0,.L1stloop
lghi %r7,-256
lr %r0,%r3
la %r8,0
la %r1,0
.align 16
.L2ndloop:
llgc %r5,2+256(%r7,%r2)
llgc %r6,0(%r8,%r4)
la %r1,0(%r1,%r5)
la %r7,1(%r7)
la %r1,0(%r1,%r6)
nill %r1,255
la %r8,1(%r8)
tml %r7,255
llgc %r6,2(%r1,%r2)
stc %r6,2+256-1(%r7,%r2)
stc %r5,2(%r1,%r2)
jz .Ldone
brct %r0,.L2ndloop
lr %r0,%r3
la %r8,0
j .L2ndloop
.Ldone:
lm %r6,%r8,6*4(%r15)
br %r14
.size RC4_set_key,.-RC4_set_key
.globl RC4_options
.type RC4_options,@function
.align 16
RC4_options:
larl %r2,.Loptions
br %r14
.size RC4_options,.-RC4_options
.section .rodata
.Loptions:
.align 8
.string "rc4(8x,char)"

View File

@ -0,0 +1,428 @@
#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)
.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:
br %r14
.size OPENSSL_s390x_facilities,.-OPENSSL_s390x_facilities
.globl OPENSSL_s390x_functions
.type OPENSSL_s390x_functions,@function
.align 16
OPENSSL_s390x_functions:
lghi %r0,0
larl %r4,OPENSSL_s390xcap_P
stg %r0,S390X_KIMD(%r4) # wipe capability vectors
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)
stg %r0,S390X_PCC(%r4)
stg %r0,S390X_PCC+8(%r4)
stg %r0,S390X_KDSA(%r4)
stg %r0,S390X_KDSA+8(%r4)
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,0x0008 # check for message-security-assist-3
jz .Lret
lghi %r0,S390X_QUERY # query pcc capability vector
la %r1,S390X_PCC(%r4)
.long 0xb92c0000 # pcc
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
tmhl %r2,0x0010 # check for message-security-assist-9
jz .Lret
lghi %r0,S390X_QUERY # query kdsa capability vector
la %r1,S390X_KDSA(%r4)
.long 0xb93a0002 # kdsa %r0,%r2
.Lret:
br %r14
.size OPENSSL_s390x_functions,.-OPENSSL_s390x_functions
.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
l %r1,96(%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
lr %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
lr %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
lr %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
lr %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:
st %r6,6*4(%r15)
lm %r0,%r1,96(%r15)
.long 0xb9292064 # kma %r6,%r2,%r4
brc 1,.-4 # pay attention to "partial completion"
l %r6,6*4(%r15)
br %r14
.size s390x_kma,.-s390x_kma
.globl s390x_pcc
.type s390x_pcc,@function
.align 16
s390x_pcc:
lr %r0,%r2
lr %r1,%r3
lhi %r2,0
.long 0xb92c0000 # pcc
brc 1,.-4 # pay attention to "partial completion"
brc 7,.Lpcc_err # if CC==0 return 0, else return 1
.Lpcc_out:
br %r14
.Lpcc_err:
lhi %r2,1
j .Lpcc_out
.size s390x_pcc,.-s390x_pcc
.globl s390x_kdsa
.type s390x_kdsa,@function
.align 16
s390x_kdsa:
lr %r0,%r2
lr %r1,%r3
lhi %r2,0
.long 0xb93a0004 # kdsa %r0,%r4
brc 1,.-4 # pay attention to "partial completion"
brc 7,.Lkdsa_err # if CC==0 return 0, else return 1
.Lkdsa_out:
br %r14
.Lkdsa_err:
lhi %r2,1
j .Lkdsa_out
.size s390x_kdsa,.-s390x_kdsa
.globl s390x_flip_endian32
.type s390x_flip_endian32,@function
.align 16
s390x_flip_endian32:
lrvg %r0,0(%r3)
lrvg %r1,8(%r3)
lrvg %r4,16(%r3)
lrvg %r5,24(%r3)
stg %r0,24(%r2)
stg %r1,16(%r2)
stg %r4,8(%r2)
stg %r5,0(%r2)
br %r14
.size s390x_flip_endian32,.-s390x_flip_endian32
.globl s390x_flip_endian64
.type s390x_flip_endian64,@function
.align 16
s390x_flip_endian64:
stmg %r6,%r9,6*4(%r15)
lrvg %r0,0(%r3)
lrvg %r1,8(%r3)
lrvg %r4,16(%r3)
lrvg %r5,24(%r3)
lrvg %r6,32(%r3)
lrvg %r7,40(%r3)
lrvg %r8,48(%r3)
lrvg %r9,56(%r3)
stg %r0,56(%r2)
stg %r1,48(%r2)
stg %r4,40(%r2)
stg %r5,32(%r2)
stg %r6,24(%r2)
stg %r7,16(%r2)
stg %r8,8(%r2)
stg %r9,0(%r2)
lmg %r6,%r9,6*4(%r15)
br %r14
.size s390x_flip_endian64,.-s390x_flip_endian64
.section .init
brasl %r14,OPENSSL_cpuid_setup

View File

@ -0,0 +1,464 @@
.text
.type __KeccakF1600,@function
.align 32
__KeccakF1600:
st %r14,4*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
l %r14,4*14(%r15)
br %r14
.size __KeccakF1600,.-__KeccakF1600
.type KeccakF1600,@function
.align 32
KeccakF1600:
.LKeccakF1600:
lghi %r1,-296
stm %r6,%r15,4*6(%r15)
lgr %r0,%r15
la %r15,0(%r1,%r15)
st %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,96(%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)
lm %r6,%r15,296+6*4(%r15)
br %r14
.size KeccakF1600,.-KeccakF1600
.globl SHA3_absorb
.type SHA3_absorb,@function
.align 32
SHA3_absorb:
lghi %r1,-296
stm %r5,%r15,4*5(%r15)
lgr %r0,%r15
la %r15,0(%r1,%r15)
st %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:
clr %r4,%r5
jl .Ldone_absorb
srl %r5,3
la %r1,0(%r2)
.Lblock_absorb:
lrvg %r0,0(%r3)
la %r3,8(%r3)
xg %r0,0(%r1)
ahi %r4,-8
stg %r0,0(%r1)
la %r1,8(%r1)
brct %r5,.Lblock_absorb
stm %r3,%r4,296+3*4(%r15)
la %r3,96(%r15)
bras %r14,__KeccakF1600
lm %r3,%r5,296+3*4(%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
lm %r6,%r15,296+6*4(%r15)
br %r14
.size SHA3_absorb,.-SHA3_absorb
.globl SHA3_squeeze
.type SHA3_squeeze,@function
.align 32
SHA3_squeeze:
srl %r5,3
st %r14,2*4(%r15)
lghi %r14,8
st %r5,5*4(%r15)
la %r1,0(%r2)
j .Loop_squeeze
.align 16
.Loop_squeeze:
clr %r4,%r14
jl .Ltail_squeeze
lrvg %r0,0(%r1)
la %r1,8(%r1)
stg %r0,0(%r3)
la %r3,8(%r3)
ahi %r4,-8 # len -= 8
jz .Ldone_squeeze
brct %r5,.Loop_squeeze # bsz--
stm %r3,%r4,3*4(%r15)
bras %r14,.LKeccakF1600
lm %r3,%r5,3*4(%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:
l %r14,2*4(%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>"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff