3 # ====================================================================
4 # Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
5 # project. The module is, however, dual licensed under OpenSSL and
6 # CRYPTOGAMS licenses depending on where you obtain it. For further
7 # details see http://www.openssl.org/~appro/cryptogams/.
8 # ====================================================================
12 while (($output=shift) && ($output!~/^\w[\w\-]*\.\w+$/)) {}
13 open STDOUT,">$output";
18 $Xi="%r2"; # argument block
23 $rem0="%r6"; # variables
46 larl $rem_4bit,rem_4bit
50 .type gcm_gmult_4bit,\@function
51 .size gcm_gmult_4bit,(.-gcm_gmult_4bit)
61 larl $rem_4bit,rem_4bit
66 xg $Zlo,8($inp) # Xi ^= inp
73 srlg $xi,$Zlo,8 # extract first two bytes
104 xg $Zlo,8($nlo,$Htbl)
106 xg $Zhi,0($rem0,$rem_4bit)
111 xg $Zhi,0($nlo,$Htbl)
118 xg $Zlo,8($nhi,$Htbl)
120 xg $Zhi,0($rem1,$rem_4bit)
124 xg $Zhi,0($nhi,$Htbl)
126 brct $cnt,.Lghash_inner
130 xg $Zlo,8($nlo,$Htbl)
132 xg $Zhi,0($rem0,$rem_4bit)
136 xg $Zhi,0($nlo,$Htbl)
140 xg $Zhi,0($rem1,$rem_4bit)
142 xg $Zlo,8($nhi,$Htbl)
145 xg $Zhi,0($nhi,$Htbl)
148 xg $Zhi,0($rem0,$rem_4bit)
155 .type gcm_ghash_4bit,\@function
156 .size gcm_ghash_4bit,(.-gcm_ghash_4bit)
160 .long `0x0000<<16`,0,`0x1C20<<16`,0,`0x3840<<16`,0,`0x2460<<16`,0
161 .long `0x7080<<16`,0,`0x6CA0<<16`,0,`0x48C0<<16`,0,`0x54E0<<16`,0
162 .long `0xE100<<16`,0,`0xFD20<<16`,0,`0xD940<<16`,0,`0xC560<<16`,0
163 .long `0x9180<<16`,0,`0x8DA0<<16`,0,`0xA9C0<<16`,0,`0xB5E0<<16`,0
164 .type rem_4bit,\@object
165 .size rem_4bit,(.-rem_4bit)
166 .string "GHASH for s390x, CRYPTOGAMS by <appro\@openssl.org>"
169 $code =~ s/\`([^\`]*)\`/eval $1/gem;