1#! /usr/bin/env perl 2# Copyright 2012-2020 The OpenSSL Project Authors. All Rights Reserved. 3# 4# Licensed under the Apache License 2.0 (the "License"). You may not use 5# this file except in compliance with the License. You can obtain a copy 6# in the file LICENSE in the source distribution or at 7# https://www.openssl.org/source/license.html 8 9# 10# ==================================================================== 11# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL 12# project. The module is, however, dual licensed under OpenSSL and 13# CRYPTOGAMS licenses depending on where you obtain it. For further 14# details see http://www.openssl.org/~appro/cryptogams/. 15# ==================================================================== 16# 17# SHA512 for C64x+. 18# 19# January 2012 20# 21# Performance is 19 cycles per processed byte. Compared to block 22# transform function from sha512.c compiled with cl6x with -mv6400+ 23# -o2 -DOPENSSL_SMALL_FOOTPRINT it's almost 7x faster and 2x smaller. 24# Loop unroll won't make it, this implementation, any faster, because 25# it's effectively dominated by SHRU||SHL pairs and you can't schedule 26# more of them. 27# 28# !!! Note that this module uses AMR, which means that all interrupt 29# service routines are expected to preserve it and for own well-being 30# zero it upon entry. 31 32($output = pop) =~ m|\.\w+$| and open STDOUT,">$output"; 33 34($CTXA,$INP,$NUM) = ("A4","B4","A6"); # arguments 35 $K512="A3"; 36 37($Ahi,$Actxhi,$Bhi,$Bctxhi,$Chi,$Cctxhi,$Dhi,$Dctxhi, 38 $Ehi,$Ectxhi,$Fhi,$Fctxhi,$Ghi,$Gctxhi,$Hhi,$Hctxhi)=map("A$_",(16..31)); 39($Alo,$Actxlo,$Blo,$Bctxlo,$Clo,$Cctxlo,$Dlo,$Dctxlo, 40 $Elo,$Ectxlo,$Flo,$Fctxlo,$Glo,$Gctxlo,$Hlo,$Hctxlo)=map("B$_",(16..31)); 41 42($S1hi,$CHhi,$S0hi,$t0hi)=map("A$_",(10..13)); 43($S1lo,$CHlo,$S0lo,$t0lo)=map("B$_",(10..13)); 44($T1hi, $T2hi)= ("A6","A7"); 45($T1lo,$T1carry,$T2lo,$T2carry)=("B6","B7","B8","B9"); 46($Khi,$Klo)=("A9","A8"); 47($MAJhi,$MAJlo)=($T2hi,$T2lo); 48($t1hi,$t1lo)=($Khi,"B2"); 49 $CTXB=$t1lo; 50 51($Xihi,$Xilo)=("A5","B5"); # circular/ring buffer 52 53$code.=<<___; 54 .text 55 56 .if .ASSEMBLER_VERSION<7000000 57 .asg 0,__TI_EABI__ 58 .endif 59 .if __TI_EABI__ 60 .nocmp 61 .asg sha512_block_data_order,_sha512_block_data_order 62 .endif 63 64 .asg B3,RA 65 .asg A15,FP 66 .asg B15,SP 67 68 .if .BIG_ENDIAN 69 .asg $Khi,KHI 70 .asg $Klo,KLO 71 .else 72 .asg $Khi,KLO 73 .asg $Klo,KHI 74 .endif 75 76 .global _sha512_block_data_order 77_sha512_block_data_order: 78__sha512_block: 79 .asmfunc stack_usage(40+128) 80 MV $NUM,A0 ; reassign $NUM 81|| MVK -128,B0 82 [!A0] BNOP RA ; if ($NUM==0) return; 83|| [A0] STW FP,*SP--(40) ; save frame pointer 84|| [A0] MV SP,FP 85 [A0] STDW B13:B12,*SP[4] 86|| [A0] MVK 0x00404,B1 87 [A0] STDW B11:B10,*SP[3] 88|| [A0] STDW A13:A12,*FP[-3] 89|| [A0] MVKH 0x60000,B1 90 [A0] STDW A11:A10,*SP[1] 91|| [A0] MVC B1,AMR ; setup circular addressing 92|| [A0] ADD B0,SP,SP ; alloca(128) 93 .if __TI_EABI__ 94 [A0] AND B0,SP,SP ; align stack at 128 bytes 95|| [A0] ADDKPC __sha512_block,B1 96|| [A0] MVKL \$PCR_OFFSET(K512,__sha512_block),$K512 97 [A0] MVKH \$PCR_OFFSET(K512,__sha512_block),$K512 98|| [A0] SUBAW SP,2,SP ; reserve two words above buffer 99 .else 100 [A0] AND B0,SP,SP ; align stack at 128 bytes 101|| [A0] ADDKPC __sha512_block,B1 102|| [A0] MVKL (K512-__sha512_block),$K512 103 [A0] MVKH (K512-__sha512_block),$K512 104|| [A0] SUBAW SP,2,SP ; reserve two words above buffer 105 .endif 106 ADDAW SP,3,$Xilo 107 ADDAW SP,2,$Xihi 108 109|| MV $CTXA,$CTXB 110 LDW *${CTXA}[0^.LITTLE_ENDIAN],$Ahi ; load ctx 111|| LDW *${CTXB}[1^.LITTLE_ENDIAN],$Alo 112|| ADD B1,$K512,$K512 113 LDW *${CTXA}[2^.LITTLE_ENDIAN],$Bhi 114|| LDW *${CTXB}[3^.LITTLE_ENDIAN],$Blo 115 LDW *${CTXA}[4^.LITTLE_ENDIAN],$Chi 116|| LDW *${CTXB}[5^.LITTLE_ENDIAN],$Clo 117 LDW *${CTXA}[6^.LITTLE_ENDIAN],$Dhi 118|| LDW *${CTXB}[7^.LITTLE_ENDIAN],$Dlo 119 LDW *${CTXA}[8^.LITTLE_ENDIAN],$Ehi 120|| LDW *${CTXB}[9^.LITTLE_ENDIAN],$Elo 121 LDW *${CTXA}[10^.LITTLE_ENDIAN],$Fhi 122|| LDW *${CTXB}[11^.LITTLE_ENDIAN],$Flo 123 LDW *${CTXA}[12^.LITTLE_ENDIAN],$Ghi 124|| LDW *${CTXB}[13^.LITTLE_ENDIAN],$Glo 125 LDW *${CTXA}[14^.LITTLE_ENDIAN],$Hhi 126|| LDW *${CTXB}[15^.LITTLE_ENDIAN],$Hlo 127 128 LDNDW *$INP++,B11:B10 ; pre-fetch input 129 LDDW *$K512++,$Khi:$Klo ; pre-fetch K512[0] 130outerloop?: 131 MVK 15,B0 ; loop counters 132|| MVK 64,B1 133|| SUB A0,1,A0 134 MV $Ahi,$Actxhi 135|| MV $Alo,$Actxlo 136|| MV $Bhi,$Bctxhi 137|| MV $Blo,$Bctxlo 138|| MV $Chi,$Cctxhi 139|| MV $Clo,$Cctxlo 140|| MVD $Dhi,$Dctxhi 141|| MVD $Dlo,$Dctxlo 142 MV $Ehi,$Ectxhi 143|| MV $Elo,$Ectxlo 144|| MV $Fhi,$Fctxhi 145|| MV $Flo,$Fctxlo 146|| MV $Ghi,$Gctxhi 147|| MV $Glo,$Gctxlo 148|| MVD $Hhi,$Hctxhi 149|| MVD $Hlo,$Hctxlo 150loop0_15?: 151 .if .BIG_ENDIAN 152 MV B11,$T1hi 153|| MV B10,$T1lo 154 .else 155 SWAP4 B10,$T1hi 156|| SWAP4 B11,$T1lo 157 SWAP2 $T1hi,$T1hi 158|| SWAP2 $T1lo,$T1lo 159 .endif 160loop16_79?: 161 STW $T1hi,*$Xihi++[2] 162|| STW $T1lo,*$Xilo++[2] ; X[i] = T1 163|| ADD $Hhi,$T1hi,$T1hi 164|| ADDU $Hlo,$T1lo,$T1carry:$T1lo ; T1 += h 165|| SHRU $Ehi,14,$S1hi 166|| SHL $Ehi,32-14,$S1lo 167 XOR $Fhi,$Ghi,$CHhi 168|| XOR $Flo,$Glo,$CHlo 169|| ADD KHI,$T1hi,$T1hi 170|| ADDU KLO,$T1carry:$T1lo,$T1carry:$T1lo ; T1 += K512[i] 171|| SHRU $Elo,14,$t0lo 172|| SHL $Elo,32-14,$t0hi 173 XOR $t0hi,$S1hi,$S1hi 174|| XOR $t0lo,$S1lo,$S1lo 175|| AND $Ehi,$CHhi,$CHhi 176|| AND $Elo,$CHlo,$CHlo 177|| ROTL $Ghi,0,$Hhi 178|| ROTL $Glo,0,$Hlo ; h = g 179|| SHRU $Ehi,18,$t0hi 180|| SHL $Ehi,32-18,$t0lo 181 XOR $t0hi,$S1hi,$S1hi 182|| XOR $t0lo,$S1lo,$S1lo 183|| XOR $Ghi,$CHhi,$CHhi 184|| XOR $Glo,$CHlo,$CHlo ; Ch(e,f,g) = ((f^g)&e)^g 185|| ROTL $Fhi,0,$Ghi 186|| ROTL $Flo,0,$Glo ; g = f 187|| SHRU $Elo,18,$t0lo 188|| SHL $Elo,32-18,$t0hi 189 XOR $t0hi,$S1hi,$S1hi 190|| XOR $t0lo,$S1lo,$S1lo 191|| OR $Ahi,$Bhi,$MAJhi 192|| OR $Alo,$Blo,$MAJlo 193|| ROTL $Ehi,0,$Fhi 194|| ROTL $Elo,0,$Flo ; f = e 195|| SHRU $Ehi,41-32,$t0lo 196|| SHL $Ehi,64-41,$t0hi 197 XOR $t0hi,$S1hi,$S1hi 198|| XOR $t0lo,$S1lo,$S1lo 199|| AND $Chi,$MAJhi,$MAJhi 200|| AND $Clo,$MAJlo,$MAJlo 201|| ROTL $Dhi,0,$Ehi 202|| ROTL $Dlo,0,$Elo ; e = d 203|| SHRU $Elo,41-32,$t0hi 204|| SHL $Elo,64-41,$t0lo 205 XOR $t0hi,$S1hi,$S1hi 206|| XOR $t0lo,$S1lo,$S1lo ; Sigma1(e) 207|| AND $Ahi,$Bhi,$t1hi 208|| AND $Alo,$Blo,$t1lo 209|| ROTL $Chi,0,$Dhi 210|| ROTL $Clo,0,$Dlo ; d = c 211|| SHRU $Ahi,28,$S0hi 212|| SHL $Ahi,32-28,$S0lo 213 OR $t1hi,$MAJhi,$MAJhi 214|| OR $t1lo,$MAJlo,$MAJlo ; Maj(a,b,c) = ((a|b)&c)|(a&b) 215|| ADD $CHhi,$T1hi,$T1hi 216|| ADDU $CHlo,$T1carry:$T1lo,$T1carry:$T1lo ; T1 += Ch(e,f,g) 217|| ROTL $Bhi,0,$Chi 218|| ROTL $Blo,0,$Clo ; c = b 219|| SHRU $Alo,28,$t0lo 220|| SHL $Alo,32-28,$t0hi 221 XOR $t0hi,$S0hi,$S0hi 222|| XOR $t0lo,$S0lo,$S0lo 223|| ADD $S1hi,$T1hi,$T1hi 224|| ADDU $S1lo,$T1carry:$T1lo,$T1carry:$T1lo ; T1 += Sigma1(e) 225|| ROTL $Ahi,0,$Bhi 226|| ROTL $Alo,0,$Blo ; b = a 227|| SHRU $Ahi,34-32,$t0lo 228|| SHL $Ahi,64-34,$t0hi 229 XOR $t0hi,$S0hi,$S0hi 230|| XOR $t0lo,$S0lo,$S0lo 231|| ADD $MAJhi,$T1hi,$T2hi 232|| ADDU $MAJlo,$T1carry:$T1lo,$T2carry:$T2lo ; T2 = T1+Maj(a,b,c) 233|| SHRU $Alo,34-32,$t0hi 234|| SHL $Alo,64-34,$t0lo 235 XOR $t0hi,$S0hi,$S0hi 236|| XOR $t0lo,$S0lo,$S0lo 237|| ADD $Ehi,$T1hi,$T1hi 238|| ADDU $Elo,$T1carry:$T1lo,$T1carry:$T1lo ; T1 += e 239|| [B0] BNOP loop0_15? 240|| SHRU $Ahi,39-32,$t0lo 241|| SHL $Ahi,64-39,$t0hi 242 XOR $t0hi,$S0hi,$S0hi 243|| XOR $t0lo,$S0lo,$S0lo 244|| [B0] LDNDW *$INP++,B11:B10 ; pre-fetch input 245||[!B1] BNOP break? 246|| SHRU $Alo,39-32,$t0hi 247|| SHL $Alo,64-39,$t0lo 248 XOR $t0hi,$S0hi,$S0hi 249|| XOR $t0lo,$S0lo,$S0lo ; Sigma0(a) 250|| ADD $T1carry,$T1hi,$Ehi 251|| MV $T1lo,$Elo ; e = T1 252||[!B0] LDW *${Xihi}[28],$T1hi 253||[!B0] LDW *${Xilo}[28],$T1lo ; X[i+14] 254 ADD $S0hi,$T2hi,$T2hi 255|| ADDU $S0lo,$T2carry:$T2lo,$T2carry:$T2lo ; T2 += Sigma0(a) 256|| [B1] LDDW *$K512++,$Khi:$Klo ; pre-fetch K512[i] 257 NOP ; avoid cross-path stall 258 ADD $T2carry,$T2hi,$Ahi 259|| MV $T2lo,$Alo ; a = T2 260|| [B0] SUB B0,1,B0 261;;===== branch to loop00_15? is taken here 262 NOP 263;;===== branch to break? is taken here 264 LDW *${Xihi}[2],$T2hi 265|| LDW *${Xilo}[2],$T2lo ; X[i+1] 266|| SHRU $T1hi,19,$S1hi 267|| SHL $T1hi,32-19,$S1lo 268 SHRU $T1lo,19,$t0lo 269|| SHL $T1lo,32-19,$t0hi 270 XOR $t0hi,$S1hi,$S1hi 271|| XOR $t0lo,$S1lo,$S1lo 272|| SHRU $T1hi,61-32,$t0lo 273|| SHL $T1hi,64-61,$t0hi 274 XOR $t0hi,$S1hi,$S1hi 275|| XOR $t0lo,$S1lo,$S1lo 276|| SHRU $T1lo,61-32,$t0hi 277|| SHL $T1lo,64-61,$t0lo 278 XOR $t0hi,$S1hi,$S1hi 279|| XOR $t0lo,$S1lo,$S1lo 280|| SHRU $T1hi,6,$t0hi 281|| SHL $T1hi,32-6,$t0lo 282 XOR $t0hi,$S1hi,$S1hi 283|| XOR $t0lo,$S1lo,$S1lo 284|| SHRU $T1lo,6,$t0lo 285|| LDW *${Xihi}[18],$T1hi 286|| LDW *${Xilo}[18],$T1lo ; X[i+9] 287 XOR $t0lo,$S1lo,$S1lo ; sigma1(Xi[i+14]) 288 289|| LDW *${Xihi}[0],$CHhi 290|| LDW *${Xilo}[0],$CHlo ; X[i] 291|| SHRU $T2hi,1,$S0hi 292|| SHL $T2hi,32-1,$S0lo 293 SHRU $T2lo,1,$t0lo 294|| SHL $T2lo,32-1,$t0hi 295 XOR $t0hi,$S0hi,$S0hi 296|| XOR $t0lo,$S0lo,$S0lo 297|| SHRU $T2hi,8,$t0hi 298|| SHL $T2hi,32-8,$t0lo 299 XOR $t0hi,$S0hi,$S0hi 300|| XOR $t0lo,$S0lo,$S0lo 301|| SHRU $T2lo,8,$t0lo 302|| SHL $T2lo,32-8,$t0hi 303 XOR $t0hi,$S0hi,$S0hi 304|| XOR $t0lo,$S0lo,$S0lo 305|| ADD $S1hi,$T1hi,$T1hi 306|| ADDU $S1lo,$T1lo,$T1carry:$T1lo ; T1 = X[i+9]+sigma1() 307|| [B1] BNOP loop16_79? 308|| SHRU $T2hi,7,$t0hi 309|| SHL $T2hi,32-7,$t0lo 310 XOR $t0hi,$S0hi,$S0hi 311|| XOR $t0lo,$S0lo,$S0lo 312|| ADD $CHhi,$T1hi,$T1hi 313|| ADDU $CHlo,$T1carry:$T1lo,$T1carry:$T1lo ; T1 += X[i] 314|| SHRU $T2lo,7,$t0lo 315 XOR $t0lo,$S0lo,$S0lo ; sigma0(Xi[i+1] 316 317 ADD $S0hi,$T1hi,$T1hi 318|| ADDU $S0lo,$T1carry:$T1lo,$T1carry:$T1lo ; T1 += sigma0() 319|| [B1] SUB B1,1,B1 320 NOP ; avoid cross-path stall 321 ADD $T1carry,$T1hi,$T1hi 322;;===== branch to loop16_79? is taken here 323 324break?: 325 ADD $Ahi,$Actxhi,$Ahi ; accumulate ctx 326|| ADDU $Alo,$Actxlo,$Actxlo:$Alo 327|| [A0] LDNDW *$INP++,B11:B10 ; pre-fetch input 328|| [A0] ADDK -640,$K512 ; rewind pointer to K512 329 ADD $Bhi,$Bctxhi,$Bhi 330|| ADDU $Blo,$Bctxlo,$Bctxlo:$Blo 331|| [A0] LDDW *$K512++,$Khi:$Klo ; pre-fetch K512[0] 332 ADD $Chi,$Cctxhi,$Chi 333|| ADDU $Clo,$Cctxlo,$Cctxlo:$Clo 334|| ADD $Actxlo,$Ahi,$Ahi 335||[!A0] MV $CTXA,$CTXB 336 ADD $Dhi,$Dctxhi,$Dhi 337|| ADDU $Dlo,$Dctxlo,$Dctxlo:$Dlo 338|| ADD $Bctxlo,$Bhi,$Bhi 339||[!A0] STW $Ahi,*${CTXA}[0^.LITTLE_ENDIAN] ; save ctx 340||[!A0] STW $Alo,*${CTXB}[1^.LITTLE_ENDIAN] 341 ADD $Ehi,$Ectxhi,$Ehi 342|| ADDU $Elo,$Ectxlo,$Ectxlo:$Elo 343|| ADD $Cctxlo,$Chi,$Chi 344|| [A0] BNOP outerloop? 345||[!A0] STW $Bhi,*${CTXA}[2^.LITTLE_ENDIAN] 346||[!A0] STW $Blo,*${CTXB}[3^.LITTLE_ENDIAN] 347 ADD $Fhi,$Fctxhi,$Fhi 348|| ADDU $Flo,$Fctxlo,$Fctxlo:$Flo 349|| ADD $Dctxlo,$Dhi,$Dhi 350||[!A0] STW $Chi,*${CTXA}[4^.LITTLE_ENDIAN] 351||[!A0] STW $Clo,*${CTXB}[5^.LITTLE_ENDIAN] 352 ADD $Ghi,$Gctxhi,$Ghi 353|| ADDU $Glo,$Gctxlo,$Gctxlo:$Glo 354|| ADD $Ectxlo,$Ehi,$Ehi 355||[!A0] STW $Dhi,*${CTXA}[6^.LITTLE_ENDIAN] 356||[!A0] STW $Dlo,*${CTXB}[7^.LITTLE_ENDIAN] 357 ADD $Hhi,$Hctxhi,$Hhi 358|| ADDU $Hlo,$Hctxlo,$Hctxlo:$Hlo 359|| ADD $Fctxlo,$Fhi,$Fhi 360||[!A0] STW $Ehi,*${CTXA}[8^.LITTLE_ENDIAN] 361||[!A0] STW $Elo,*${CTXB}[9^.LITTLE_ENDIAN] 362 ADD $Gctxlo,$Ghi,$Ghi 363||[!A0] STW $Fhi,*${CTXA}[10^.LITTLE_ENDIAN] 364||[!A0] STW $Flo,*${CTXB}[11^.LITTLE_ENDIAN] 365 ADD $Hctxlo,$Hhi,$Hhi 366||[!A0] STW $Ghi,*${CTXA}[12^.LITTLE_ENDIAN] 367||[!A0] STW $Glo,*${CTXB}[13^.LITTLE_ENDIAN] 368;;===== branch to outerloop? is taken here 369 370 STW $Hhi,*${CTXA}[14^.LITTLE_ENDIAN] 371|| STW $Hlo,*${CTXB}[15^.LITTLE_ENDIAN] 372|| MVK -40,B0 373 ADD FP,B0,SP ; destroy circular buffer 374|| LDDW *FP[-4],A11:A10 375 LDDW *SP[2],A13:A12 376|| LDDW *FP[-2],B11:B10 377 LDDW *SP[4],B13:B12 378|| BNOP RA 379 LDW *++SP(40),FP ; restore frame pointer 380 MVK 0,B0 381 MVC B0,AMR ; clear AMR 382 NOP 2 ; wait till FP is committed 383 .endasmfunc 384 385 .if __TI_EABI__ 386 .sect ".text:sha_asm.const" 387 .else 388 .sect ".const:sha_asm" 389 .endif 390 .align 128 391K512: 392 .uword 0x428a2f98,0xd728ae22, 0x71374491,0x23ef65cd 393 .uword 0xb5c0fbcf,0xec4d3b2f, 0xe9b5dba5,0x8189dbbc 394 .uword 0x3956c25b,0xf348b538, 0x59f111f1,0xb605d019 395 .uword 0x923f82a4,0xaf194f9b, 0xab1c5ed5,0xda6d8118 396 .uword 0xd807aa98,0xa3030242, 0x12835b01,0x45706fbe 397 .uword 0x243185be,0x4ee4b28c, 0x550c7dc3,0xd5ffb4e2 398 .uword 0x72be5d74,0xf27b896f, 0x80deb1fe,0x3b1696b1 399 .uword 0x9bdc06a7,0x25c71235, 0xc19bf174,0xcf692694 400 .uword 0xe49b69c1,0x9ef14ad2, 0xefbe4786,0x384f25e3 401 .uword 0x0fc19dc6,0x8b8cd5b5, 0x240ca1cc,0x77ac9c65 402 .uword 0x2de92c6f,0x592b0275, 0x4a7484aa,0x6ea6e483 403 .uword 0x5cb0a9dc,0xbd41fbd4, 0x76f988da,0x831153b5 404 .uword 0x983e5152,0xee66dfab, 0xa831c66d,0x2db43210 405 .uword 0xb00327c8,0x98fb213f, 0xbf597fc7,0xbeef0ee4 406 .uword 0xc6e00bf3,0x3da88fc2, 0xd5a79147,0x930aa725 407 .uword 0x06ca6351,0xe003826f, 0x14292967,0x0a0e6e70 408 .uword 0x27b70a85,0x46d22ffc, 0x2e1b2138,0x5c26c926 409 .uword 0x4d2c6dfc,0x5ac42aed, 0x53380d13,0x9d95b3df 410 .uword 0x650a7354,0x8baf63de, 0x766a0abb,0x3c77b2a8 411 .uword 0x81c2c92e,0x47edaee6, 0x92722c85,0x1482353b 412 .uword 0xa2bfe8a1,0x4cf10364, 0xa81a664b,0xbc423001 413 .uword 0xc24b8b70,0xd0f89791, 0xc76c51a3,0x0654be30 414 .uword 0xd192e819,0xd6ef5218, 0xd6990624,0x5565a910 415 .uword 0xf40e3585,0x5771202a, 0x106aa070,0x32bbd1b8 416 .uword 0x19a4c116,0xb8d2d0c8, 0x1e376c08,0x5141ab53 417 .uword 0x2748774c,0xdf8eeb99, 0x34b0bcb5,0xe19b48a8 418 .uword 0x391c0cb3,0xc5c95a63, 0x4ed8aa4a,0xe3418acb 419 .uword 0x5b9cca4f,0x7763e373, 0x682e6ff3,0xd6b2b8a3 420 .uword 0x748f82ee,0x5defb2fc, 0x78a5636f,0x43172f60 421 .uword 0x84c87814,0xa1f0ab72, 0x8cc70208,0x1a6439ec 422 .uword 0x90befffa,0x23631e28, 0xa4506ceb,0xde82bde9 423 .uword 0xbef9a3f7,0xb2c67915, 0xc67178f2,0xe372532b 424 .uword 0xca273ece,0xea26619c, 0xd186b8c7,0x21c0c207 425 .uword 0xeada7dd6,0xcde0eb1e, 0xf57d4f7f,0xee6ed178 426 .uword 0x06f067aa,0x72176fba, 0x0a637dc5,0xa2c898a6 427 .uword 0x113f9804,0xbef90dae, 0x1b710b35,0x131c471b 428 .uword 0x28db77f5,0x23047d84, 0x32caab7b,0x40c72493 429 .uword 0x3c9ebe0a,0x15c9bebc, 0x431d67c4,0x9c100d4c 430 .uword 0x4cc5d4be,0xcb3e42b6, 0x597f299c,0xfc657e2a 431 .uword 0x5fcb6fab,0x3ad6faec, 0x6c44198c,0x4a475817 432 .cstring "SHA512 block transform for C64x+, CRYPTOGAMS by <appro\@openssl.org>" 433 .align 4 434___ 435 436print $code; 437close STDOUT or die "error closing STDOUT: $!"; 438