sha512-c64xplus.pl 13 KB

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