| Index: openssl/crypto/rc4/asm/rc4-s390x.pl
|
| diff --git a/openssl/crypto/rc4/asm/rc4-s390x.pl b/openssl/crypto/rc4/asm/rc4-s390x.pl
|
| deleted file mode 100644
|
| index 7528ece13c308eb7d17a3ff2b39e5f9741dcf7cf..0000000000000000000000000000000000000000
|
| --- a/openssl/crypto/rc4/asm/rc4-s390x.pl
|
| +++ /dev/null
|
| @@ -1,234 +0,0 @@
|
| -#!/usr/bin/env perl
|
| -#
|
| -# ====================================================================
|
| -# Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL
|
| -# project. The module is, however, dual licensed under OpenSSL and
|
| -# CRYPTOGAMS licenses depending on where you obtain it. For further
|
| -# details see http://www.openssl.org/~appro/cryptogams/.
|
| -# ====================================================================
|
| -#
|
| -# February 2009
|
| -#
|
| -# Performance is 2x of gcc 3.4.6 on z10. Coding "secret" is to
|
| -# "cluster" Address Generation Interlocks, so that one pipeline stall
|
| -# resolves several dependencies.
|
| -
|
| -# November 2010.
|
| -#
|
| -# Adapt for -m31 build. If kernel supports what's called "highgprs"
|
| -# feature on Linux [see /proc/cpuinfo], it's possible to use 64-bit
|
| -# instructions and achieve "64-bit" performance even in 31-bit legacy
|
| -# application context. The feature is not specific to any particular
|
| -# processor, as long as it's "z-CPU". Latter implies that the code
|
| -# remains z/Architecture specific. On z990 it was measured to perform
|
| -# 50% better than code generated by gcc 4.3.
|
| -
|
| -$flavour = shift;
|
| -
|
| -if ($flavour =~ /3[12]/) {
|
| - $SIZE_T=4;
|
| - $g="";
|
| -} else {
|
| - $SIZE_T=8;
|
| - $g="g";
|
| -}
|
| -
|
| -while (($output=shift) && ($output!~/^\w[\w\-]*\.\w+$/)) {}
|
| -open STDOUT,">$output";
|
| -
|
| -$rp="%r14";
|
| -$sp="%r15";
|
| -$code=<<___;
|
| -.text
|
| -
|
| -___
|
| -
|
| -# void RC4(RC4_KEY *key,size_t len,const void *inp,void *out)
|
| -{
|
| -$acc="%r0";
|
| -$cnt="%r1";
|
| -$key="%r2";
|
| -$len="%r3";
|
| -$inp="%r4";
|
| -$out="%r5";
|
| -
|
| -@XX=("%r6","%r7");
|
| -@TX=("%r8","%r9");
|
| -$YY="%r10";
|
| -$TY="%r11";
|
| -
|
| -$code.=<<___;
|
| -.globl RC4
|
| -.type RC4,\@function
|
| -.align 64
|
| -RC4:
|
| - stm${g} %r6,%r11,6*$SIZE_T($sp)
|
| -___
|
| -$code.=<<___ if ($flavour =~ /3[12]/);
|
| - llgfr $len,$len
|
| -___
|
| -$code.=<<___;
|
| - llgc $XX[0],0($key)
|
| - llgc $YY,1($key)
|
| - la $XX[0],1($XX[0])
|
| - nill $XX[0],0xff
|
| - srlg $cnt,$len,3
|
| - ltgr $cnt,$cnt
|
| - llgc $TX[0],2($XX[0],$key)
|
| - jz .Lshort
|
| - j .Loop8
|
| -
|
| -.align 64
|
| -.Loop8:
|
| -___
|
| -for ($i=0;$i<8;$i++) {
|
| -$code.=<<___;
|
| - la $YY,0($YY,$TX[0]) # $i
|
| - nill $YY,255
|
| - la $XX[1],1($XX[0])
|
| - nill $XX[1],255
|
| -___
|
| -$code.=<<___ if ($i==1);
|
| - llgc $acc,2($TY,$key)
|
| -___
|
| -$code.=<<___ if ($i>1);
|
| - sllg $acc,$acc,8
|
| - ic $acc,2($TY,$key)
|
| -___
|
| -$code.=<<___;
|
| - llgc $TY,2($YY,$key)
|
| - stc $TX[0],2($YY,$key)
|
| - llgc $TX[1],2($XX[1],$key)
|
| - stc $TY,2($XX[0],$key)
|
| - cr $XX[1],$YY
|
| - jne .Lcmov$i
|
| - la $TX[1],0($TX[0])
|
| -.Lcmov$i:
|
| - la $TY,0($TY,$TX[0])
|
| - nill $TY,255
|
| -___
|
| -push(@TX,shift(@TX)); push(@XX,shift(@XX)); # "rotate" registers
|
| -}
|
| -
|
| -$code.=<<___;
|
| - lg $TX[1],0($inp)
|
| - sllg $acc,$acc,8
|
| - la $inp,8($inp)
|
| - ic $acc,2($TY,$key)
|
| - xgr $acc,$TX[1]
|
| - stg $acc,0($out)
|
| - la $out,8($out)
|
| - brctg $cnt,.Loop8
|
| -
|
| -.Lshort:
|
| - lghi $acc,7
|
| - ngr $len,$acc
|
| - jz .Lexit
|
| - j .Loop1
|
| -
|
| -.align 16
|
| -.Loop1:
|
| - la $YY,0($YY,$TX[0])
|
| - nill $YY,255
|
| - llgc $TY,2($YY,$key)
|
| - stc $TX[0],2($YY,$key)
|
| - stc $TY,2($XX[0],$key)
|
| - ar $TY,$TX[0]
|
| - ahi $XX[0],1
|
| - nill $TY,255
|
| - nill $XX[0],255
|
| - llgc $acc,0($inp)
|
| - la $inp,1($inp)
|
| - llgc $TY,2($TY,$key)
|
| - llgc $TX[0],2($XX[0],$key)
|
| - xr $acc,$TY
|
| - stc $acc,0($out)
|
| - la $out,1($out)
|
| - brct $len,.Loop1
|
| -
|
| -.Lexit:
|
| - ahi $XX[0],-1
|
| - stc $XX[0],0($key)
|
| - stc $YY,1($key)
|
| - lm${g} %r6,%r11,6*$SIZE_T($sp)
|
| - br $rp
|
| -.size RC4,.-RC4
|
| -.string "RC4 for s390x, CRYPTOGAMS by <appro\@openssl.org>"
|
| -
|
| -___
|
| -}
|
| -
|
| -# void RC4_set_key(RC4_KEY *key,unsigned int len,const void *inp)
|
| -{
|
| -$cnt="%r0";
|
| -$idx="%r1";
|
| -$key="%r2";
|
| -$len="%r3";
|
| -$inp="%r4";
|
| -$acc="%r5";
|
| -$dat="%r6";
|
| -$ikey="%r7";
|
| -$iinp="%r8";
|
| -
|
| -$code.=<<___;
|
| -.globl private_RC4_set_key
|
| -.type private_RC4_set_key,\@function
|
| -.align 64
|
| -private_RC4_set_key:
|
| - stm${g} %r6,%r8,6*$SIZE_T($sp)
|
| - lhi $cnt,256
|
| - la $idx,0(%r0)
|
| - sth $idx,0($key)
|
| -.align 4
|
| -.L1stloop:
|
| - stc $idx,2($idx,$key)
|
| - la $idx,1($idx)
|
| - brct $cnt,.L1stloop
|
| -
|
| - lghi $ikey,-256
|
| - lr $cnt,$len
|
| - la $iinp,0(%r0)
|
| - la $idx,0(%r0)
|
| -.align 16
|
| -.L2ndloop:
|
| - llgc $acc,2+256($ikey,$key)
|
| - llgc $dat,0($iinp,$inp)
|
| - la $idx,0($idx,$acc)
|
| - la $ikey,1($ikey)
|
| - la $idx,0($idx,$dat)
|
| - nill $idx,255
|
| - la $iinp,1($iinp)
|
| - tml $ikey,255
|
| - llgc $dat,2($idx,$key)
|
| - stc $dat,2+256-1($ikey,$key)
|
| - stc $acc,2($idx,$key)
|
| - jz .Ldone
|
| - brct $cnt,.L2ndloop
|
| - lr $cnt,$len
|
| - la $iinp,0(%r0)
|
| - j .L2ndloop
|
| -.Ldone:
|
| - lm${g} %r6,%r8,6*$SIZE_T($sp)
|
| - br $rp
|
| -.size private_RC4_set_key,.-private_RC4_set_key
|
| -
|
| -___
|
| -}
|
| -
|
| -# const char *RC4_options()
|
| -$code.=<<___;
|
| -.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)"
|
| -___
|
| -
|
| -print $code;
|
| -close STDOUT; # force flush
|
|
|