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# SHA1 block procedure for s390x. 11221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 12221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom# April 2007. 13221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom# 14221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom# Performance is >30% better than gcc 3.3 generated code. But the real 15221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom# twist is that SHA1 hardware support is detected and utilized. In 16221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom# which case performance can reach further >4.5x for larger chunks. 17221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 18221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom# January 2009. 19221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom# 20221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom# Optimize Xupdate for amount of memory references and reschedule 21221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom# instructions to favour dual-issue z10 pipeline. On z10 hardware is 22221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom# "only" ~2.3x faster than software. 23221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 24221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$kimdfunc=1; # magic function code for kimd instruction 25221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 26221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$output=shift; 27221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromopen STDOUT,">$output"; 28221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 29221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$K_00_39="%r0"; $K=$K_00_39; 30221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$K_40_79="%r1"; 31221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$ctx="%r2"; $prefetch="%r2"; 32221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$inp="%r3"; 33221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$len="%r4"; 34221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 35221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$A="%r5"; 36221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$B="%r6"; 37221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$C="%r7"; 38221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$D="%r8"; 39221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$E="%r9"; @V=($A,$B,$C,$D,$E); 40221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$t0="%r10"; 41221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$t1="%r11"; 42221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom@X=("%r12","%r13","%r14"); 43221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$sp="%r15"; 44221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 45221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$frame=160+16*4; 46221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 47221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromsub Xupdate { 48221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrommy $i=shift; 49221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 50221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$code.=<<___ if ($i==15); 51221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lg $prefetch,160($sp) ### Xupdate(16) warm-up 52221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lr $X[0],$X[2] 53221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom___ 54221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromreturn if ($i&1); # Xupdate is vectorized and executed every 2nd cycle 55221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$code.=<<___ if ($i<16); 56221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lg $X[0],`$i*4`($inp) ### Xload($i) 57221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rllg $X[1],$X[0],32 58221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom___ 59221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$code.=<<___ if ($i>=16); 60221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xgr $X[0],$prefetch ### Xupdate($i) 61221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lg $prefetch,`160+4*(($i+2)%16)`($sp) 62221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xg $X[0],`160+4*(($i+8)%16)`($sp) 63221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xgr $X[0],$prefetch 64221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rll $X[0],$X[0],1 65221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rllg $X[1],$X[0],32 66221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rll $X[1],$X[1],1 67221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rllg $X[0],$X[1],32 68221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lr $X[2],$X[1] # feedback 69221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom___ 70221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$code.=<<___ if ($i<=70); 71221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg $X[0],`160+4*($i%16)`($sp) 72221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom___ 73221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromunshift(@X,pop(@X)); 74221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom} 75221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 76221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromsub BODY_00_19 { 77221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrommy ($i,$a,$b,$c,$d,$e)=@_; 78221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrommy $xi=$X[1]; 79221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 80221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom &Xupdate($i); 81221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$code.=<<___; 82221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom alr $e,$K ### $i 83221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rll $t1,$a,5 84221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lr $t0,$d 85221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xr $t0,$c 86221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom alr $e,$t1 87221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom nr $t0,$b 88221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom alr $e,$xi 89221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xr $t0,$d 90221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rll $b,$b,30 91221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom alr $e,$t0 92221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom___ 93221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom} 94221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 95221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromsub BODY_20_39 { 96221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrommy ($i,$a,$b,$c,$d,$e)=@_; 97221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrommy $xi=$X[1]; 98221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 99221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom &Xupdate($i); 100221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$code.=<<___; 101221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom alr $e,$K ### $i 102221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rll $t1,$a,5 103221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lr $t0,$b 104221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom alr $e,$t1 105221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xr $t0,$c 106221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom alr $e,$xi 107221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom xr $t0,$d 108221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rll $b,$b,30 109221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom alr $e,$t0 110221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom___ 111221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom} 112221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 113221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromsub BODY_40_59 { 114221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrommy ($i,$a,$b,$c,$d,$e)=@_; 115221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrommy $xi=$X[1]; 116221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 117221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom &Xupdate($i); 118221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$code.=<<___; 119221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom alr $e,$K ### $i 120221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rll $t1,$a,5 121221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lr $t0,$b 122221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom alr $e,$t1 123221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom or $t0,$c 124221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lr $t1,$b 125221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom nr $t0,$d 126221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom nr $t1,$c 127221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom alr $e,$xi 128221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom or $t0,$t1 129221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rll $b,$b,30 130221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom alr $e,$t0 131221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom___ 132221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom} 133221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 134221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$code.=<<___; 135221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.text 136221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align 64 137221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.type Ktable,\@object 138221304ee937bc0910948a8be1320cb8cc4eb6d36Brian CarlstromKtable: .long 0x5a827999,0x6ed9eba1,0x8f1bbcdc,0xca62c1d6 139221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom .skip 48 #.long 0,0,0,0,0,0,0,0,0,0,0,0 140221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.size Ktable,.-Ktable 141221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.globl sha1_block_data_order 142221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.type sha1_block_data_order,\@function 143221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromsha1_block_data_order: 144221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom___ 145221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$code.=<<___ if ($kimdfunc); 146221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom larl %r1,OPENSSL_s390xcap_P 147221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lg %r0,0(%r1) 148221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom tmhl %r0,0x4000 # check for message-security assist 149221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom jz .Lsoftware 150221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi %r0,0 151221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom la %r1,16($sp) 152221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom .long 0xb93e0002 # kimd %r0,%r2 153221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lg %r0,16($sp) 154221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom tmhh %r0,`0x8000>>$kimdfunc` 155221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom jz .Lsoftware 156221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi %r0,$kimdfunc 157221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lgr %r1,$ctx 158221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lgr %r2,$inp 159221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sllg %r3,$len,6 160221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom .long 0xb93e0002 # kimd %r0,%r2 161221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom brc 1,.-4 # pay attention to "partial completion" 162221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom br %r14 163221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align 16 164221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.Lsoftware: 165221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom___ 166221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$code.=<<___; 167221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi %r1,-$frame 168221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg $ctx,16($sp) 169221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stmg %r6,%r15,48($sp) 170221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lgr %r0,$sp 171221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom la $sp,0(%r1,$sp) 172221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg %r0,0($sp) 173221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 174221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom larl $t0,Ktable 175221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom llgf $A,0($ctx) 176221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom llgf $B,4($ctx) 177221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom llgf $C,8($ctx) 178221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom llgf $D,12($ctx) 179221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom llgf $E,16($ctx) 180221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 181221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lg $K_00_39,0($t0) 182221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lg $K_40_79,8($t0) 183221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 184221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.Lloop: 185221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rllg $K_00_39,$K_00_39,32 186221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom___ 187221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromfor ($i=0;$i<20;$i++) { &BODY_00_19($i,@V); unshift(@V,pop(@V)); } 188221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$code.=<<___; 189221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rllg $K_00_39,$K_00_39,32 190221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom___ 191221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromfor (;$i<40;$i++) { &BODY_20_39($i,@V); unshift(@V,pop(@V)); } 192221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$code.=<<___; $K=$K_40_79; 193221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rllg $K_40_79,$K_40_79,32 194221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom___ 195221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromfor (;$i<60;$i++) { &BODY_40_59($i,@V); unshift(@V,pop(@V)); } 196221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$code.=<<___; 197221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rllg $K_40_79,$K_40_79,32 198221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom___ 199221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromfor (;$i<80;$i++) { &BODY_20_39($i,@V); unshift(@V,pop(@V)); } 200221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$code.=<<___; 201221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 202221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lg $ctx,`$frame+16`($sp) 203221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom la $inp,64($inp) 204221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom al $A,0($ctx) 205221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom al $B,4($ctx) 206221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom al $C,8($ctx) 207221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom al $D,12($ctx) 208221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom al $E,16($ctx) 209221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom st $A,0($ctx) 210221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom st $B,4($ctx) 211221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom st $C,8($ctx) 212221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom st $D,12($ctx) 213221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom st $E,16($ctx) 214221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom brct $len,.Lloop 215221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 216221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lmg %r6,%r15,`$frame+48`($sp) 217221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom br %r14 218221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.size sha1_block_data_order,.-sha1_block_data_order 219221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.string "SHA1 block transform for s390x, CRYPTOGAMS by <appro\@openssl.org>" 220221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.comm OPENSSL_s390xcap_P,8,8 221221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom___ 222221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 223221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$code =~ s/\`([^\`]*)\`/eval $1/gem; 224221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 225221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromprint $code; 226221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromclose STDOUT; 227