sha512-c64xplus.pl 13 KB

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