1221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#!/usr/bin/env perl 2221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom# 3221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom# ==================================================================== 4221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom# Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL 5221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom# project. The module is, however, dual licensed under OpenSSL and 6221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom# CRYPTOGAMS licenses depending on where you obtain it. For further 7221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom# details see http://www.openssl.org/~appro/cryptogams/. 8221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom# ==================================================================== 9221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom# 10221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom# February 2009 11221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom# 12221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom# Performance is 2x of gcc 3.4.6 on z10. Coding "secret" is to 13221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom# "cluster" Address Generation Interlocks, so that one pipeline stall 14221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom# resolves several dependencies. 15221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 16392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom# November 2010. 17392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom# 18392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom# Adapt for -m31 build. If kernel supports what's called "highgprs" 19392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom# feature on Linux [see /proc/cpuinfo], it's possible to use 64-bit 20392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom# instructions and achieve "64-bit" performance even in 31-bit legacy 21392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom# application context. The feature is not specific to any particular 22392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom# processor, as long as it's "z-CPU". Latter implies that the code 23392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom# remains z/Architecture specific. On z990 it was measured to perform 24392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom# 50% better than code generated by gcc 4.3. 25392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 26392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom$flavour = shift; 27392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 28392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstromif ($flavour =~ /3[12]/) { 29392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom $SIZE_T=4; 30392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom $g=""; 31392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom} else { 32392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom $SIZE_T=8; 33392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom $g="g"; 34392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom} 35392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 36392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstromwhile (($output=shift) && ($output!~/^\w[\w\-]*\.\w+$/)) {} 37392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstromopen STDOUT,">$output"; 38392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 39221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$rp="%r14"; 40221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$sp="%r15"; 41221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$code=<<___; 42221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.text 43221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 44221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom___ 45221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 46221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom# void RC4(RC4_KEY *key,size_t len,const void *inp,void *out) 47221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom{ 48221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$acc="%r0"; 49221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$cnt="%r1"; 50221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$key="%r2"; 51221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$len="%r3"; 52221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$inp="%r4"; 53221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$out="%r5"; 54221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 55221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom@XX=("%r6","%r7"); 56221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom@TX=("%r8","%r9"); 57221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$YY="%r10"; 58221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$TY="%r11"; 59221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 60221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$code.=<<___; 61221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.globl RC4 62221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.type RC4,\@function 63221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align 64 64221304ee937bc0910948a8be1320cb8cc4eb6d36Brian CarlstromRC4: 65392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom stm${g} %r6,%r11,6*$SIZE_T($sp) 66392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom___ 67392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom$code.=<<___ if ($flavour =~ /3[12]/); 68392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom llgfr $len,$len 69392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom___ 70392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom$code.=<<___; 71221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom llgc $XX[0],0($key) 72221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom llgc $YY,1($key) 73221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom la $XX[0],1($XX[0]) 74221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom nill $XX[0],0xff 75221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom srlg $cnt,$len,3 76221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ltgr $cnt,$cnt 77221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom llgc $TX[0],2($XX[0],$key) 78221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom jz .Lshort 79221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom j .Loop8 80221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 81221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align 64 82221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.Loop8: 83221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom___ 84221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromfor ($i=0;$i<8;$i++) { 85221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$code.=<<___; 86221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom la $YY,0($YY,$TX[0]) # $i 87221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom nill $YY,255 88221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom la $XX[1],1($XX[0]) 89221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom nill $XX[1],255 90221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom___ 91221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$code.=<<___ if ($i==1); 92221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom llgc $acc,2($TY,$key) 93221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom___ 94221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$code.=<<___ if ($i>1); 95221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sllg $acc,$acc,8 96221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ic $acc,2($TY,$key) 97221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom___ 98221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$code.=<<___; 99221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom llgc $TY,2($YY,$key) 100221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stc $TX[0],2($YY,$key) 101221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom llgc $TX[1],2($XX[1],$key) 102221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stc $TY,2($XX[0],$key) 103221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom cr $XX[1],$YY 104221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom jne .Lcmov$i 105221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom la $TX[1],0($TX[0]) 106221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.Lcmov$i: 107221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom la $TY,0($TY,$TX[0]) 108221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom nill $TY,255 109221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom___ 110221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrompush(@TX,shift(@TX)); push(@XX,shift(@XX)); # "rotate" registers 111221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom} 112221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 113221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$code.=<<___; 114221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lg $TX[1],0($inp) 115221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sllg $acc,$acc,8 116221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom la $inp,8($inp) 117221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ic $acc,2($TY,$key) 118221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xgr $acc,$TX[1] 119221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg $acc,0($out) 120221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom la $out,8($out) 121392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom brctg $cnt,.Loop8 122221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 123221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.Lshort: 124221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi $acc,7 125221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ngr $len,$acc 126221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom jz .Lexit 127221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom j .Loop1 128221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 129221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align 16 130221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.Loop1: 131221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom la $YY,0($YY,$TX[0]) 132221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom nill $YY,255 133221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom llgc $TY,2($YY,$key) 134221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stc $TX[0],2($YY,$key) 135221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stc $TY,2($XX[0],$key) 136221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ar $TY,$TX[0] 137221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ahi $XX[0],1 138221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom nill $TY,255 139221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom nill $XX[0],255 140221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom llgc $acc,0($inp) 141221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom la $inp,1($inp) 142221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom llgc $TY,2($TY,$key) 143221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom llgc $TX[0],2($XX[0],$key) 144221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xr $acc,$TY 145221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stc $acc,0($out) 146221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom la $out,1($out) 147221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom brct $len,.Loop1 148221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 149221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.Lexit: 150221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ahi $XX[0],-1 151221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stc $XX[0],0($key) 152221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stc $YY,1($key) 153392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom lm${g} %r6,%r11,6*$SIZE_T($sp) 154221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom br $rp 155221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.size RC4,.-RC4 156221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.string "RC4 for s390x, CRYPTOGAMS by <appro\@openssl.org>" 157221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 158221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom___ 159221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom} 160221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 161221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom# void RC4_set_key(RC4_KEY *key,unsigned int len,const void *inp) 162221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom{ 163221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$cnt="%r0"; 164221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$idx="%r1"; 165221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$key="%r2"; 166221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$len="%r3"; 167221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$inp="%r4"; 168221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$acc="%r5"; 169221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$dat="%r6"; 170221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$ikey="%r7"; 171221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$iinp="%r8"; 172221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 173221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$code.=<<___; 174a1a5710c055e139ea00e785f9eb55b3af3e4dab1Brian Carlstrom.globl private_RC4_set_key 175a1a5710c055e139ea00e785f9eb55b3af3e4dab1Brian Carlstrom.type private_RC4_set_key,\@function 176221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align 64 177a1a5710c055e139ea00e785f9eb55b3af3e4dab1Brian Carlstromprivate_RC4_set_key: 178392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom stm${g} %r6,%r8,6*$SIZE_T($sp) 179221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lhi $cnt,256 180221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom la $idx,0(%r0) 181221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sth $idx,0($key) 182221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align 4 183221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.L1stloop: 184221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stc $idx,2($idx,$key) 185221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom la $idx,1($idx) 186221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom brct $cnt,.L1stloop 187221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 188221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi $ikey,-256 189221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lr $cnt,$len 190221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom la $iinp,0(%r0) 191221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom la $idx,0(%r0) 192221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align 16 193221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.L2ndloop: 194221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom llgc $acc,2+256($ikey,$key) 195221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom llgc $dat,0($iinp,$inp) 196221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom la $idx,0($idx,$acc) 197221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom la $ikey,1($ikey) 198221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom la $idx,0($idx,$dat) 199221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom nill $idx,255 200221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom la $iinp,1($iinp) 201221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom tml $ikey,255 202221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom llgc $dat,2($idx,$key) 203221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stc $dat,2+256-1($ikey,$key) 204221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stc $acc,2($idx,$key) 205221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom jz .Ldone 206221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom brct $cnt,.L2ndloop 207221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lr $cnt,$len 208221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom la $iinp,0(%r0) 209221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom j .L2ndloop 210221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.Ldone: 211392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom lm${g} %r6,%r8,6*$SIZE_T($sp) 212221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom br $rp 213a1a5710c055e139ea00e785f9eb55b3af3e4dab1Brian Carlstrom.size private_RC4_set_key,.-private_RC4_set_key 214221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 215221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom___ 216221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom} 217221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 218221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom# const char *RC4_options() 219221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$code.=<<___; 220221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.globl RC4_options 221221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.type RC4_options,\@function 222221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align 16 223221304ee937bc0910948a8be1320cb8cc4eb6d36Brian CarlstromRC4_options: 224221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom larl %r2,.Loptions 225221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom br %r14 226221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.size RC4_options,.-RC4_options 227221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.section .rodata 228221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.Loptions: 229221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align 8 230221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.string "rc4(8x,char)" 231221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom___ 232221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 233221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromprint $code; 234392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstromclose STDOUT; # force flush 235