sha1-armv8.S 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221
  1. #include "arm_arch.h"
  2. .text
  3. .private_extern _OPENSSL_armcap_P
  4. .globl _sha1_block_data_order
  5. .align 6
  6. _sha1_block_data_order:
  7. #ifdef __ILP32__
  8. ldrsw x16,LOPENSSL_armcap_P
  9. #else
  10. ldr x16,LOPENSSL_armcap_P
  11. #endif
  12. adr x17,LOPENSSL_armcap_P
  13. add x16,x16,x17
  14. ldr w16,[x16]
  15. tst w16,#ARMV8_SHA1
  16. b.ne Lv8_entry
  17. stp x29,x30,[sp,#-96]!
  18. add x29,sp,#0
  19. stp x19,x20,[sp,#16]
  20. stp x21,x22,[sp,#32]
  21. stp x23,x24,[sp,#48]
  22. stp x25,x26,[sp,#64]
  23. stp x27,x28,[sp,#80]
  24. ldp w20,w21,[x0]
  25. ldp w22,w23,[x0,#8]
  26. ldr w24,[x0,#16]
  27. Loop:
  28. ldr x3,[x1],#64
  29. movz w28,#0x7999
  30. sub x2,x2,#1
  31. movk w28,#0x5a82,lsl#16
  32. #ifdef __ARMEB__
  33. ror x3,x3,#32
  34. #else
  35. rev32 x3,x3
  36. #endif
  37. add w24,w24,w28 // warm it up
  38. add w24,w24,w3
  39. lsr x4,x3,#32
  40. ldr x5,[x1,#-56]
  41. bic w25,w23,w21
  42. and w26,w22,w21
  43. ror w27,w20,#27
  44. add w23,w23,w28 // future e+=K
  45. orr w25,w25,w26
  46. add w24,w24,w27 // e+=rot(a,5)
  47. ror w21,w21,#2
  48. add w23,w23,w4 // future e+=X[i]
  49. add w24,w24,w25 // e+=F(b,c,d)
  50. #ifdef __ARMEB__
  51. ror x5,x5,#32
  52. #else
  53. rev32 x5,x5
  54. #endif
  55. bic w25,w22,w20
  56. and w26,w21,w20
  57. ror w27,w24,#27
  58. add w22,w22,w28 // future e+=K
  59. orr w25,w25,w26
  60. add w23,w23,w27 // e+=rot(a,5)
  61. ror w20,w20,#2
  62. add w22,w22,w5 // future e+=X[i]
  63. add w23,w23,w25 // e+=F(b,c,d)
  64. lsr x6,x5,#32
  65. ldr x7,[x1,#-48]
  66. bic w25,w21,w24
  67. and w26,w20,w24
  68. ror w27,w23,#27
  69. add w21,w21,w28 // future e+=K
  70. orr w25,w25,w26
  71. add w22,w22,w27 // e+=rot(a,5)
  72. ror w24,w24,#2
  73. add w21,w21,w6 // future e+=X[i]
  74. add w22,w22,w25 // e+=F(b,c,d)
  75. #ifdef __ARMEB__
  76. ror x7,x7,#32
  77. #else
  78. rev32 x7,x7
  79. #endif
  80. bic w25,w20,w23
  81. and w26,w24,w23
  82. ror w27,w22,#27
  83. add w20,w20,w28 // future e+=K
  84. orr w25,w25,w26
  85. add w21,w21,w27 // e+=rot(a,5)
  86. ror w23,w23,#2
  87. add w20,w20,w7 // future e+=X[i]
  88. add w21,w21,w25 // e+=F(b,c,d)
  89. lsr x8,x7,#32
  90. ldr x9,[x1,#-40]
  91. bic w25,w24,w22
  92. and w26,w23,w22
  93. ror w27,w21,#27
  94. add w24,w24,w28 // future e+=K
  95. orr w25,w25,w26
  96. add w20,w20,w27 // e+=rot(a,5)
  97. ror w22,w22,#2
  98. add w24,w24,w8 // future e+=X[i]
  99. add w20,w20,w25 // e+=F(b,c,d)
  100. #ifdef __ARMEB__
  101. ror x9,x9,#32
  102. #else
  103. rev32 x9,x9
  104. #endif
  105. bic w25,w23,w21
  106. and w26,w22,w21
  107. ror w27,w20,#27
  108. add w23,w23,w28 // future e+=K
  109. orr w25,w25,w26
  110. add w24,w24,w27 // e+=rot(a,5)
  111. ror w21,w21,#2
  112. add w23,w23,w9 // future e+=X[i]
  113. add w24,w24,w25 // e+=F(b,c,d)
  114. lsr x10,x9,#32
  115. ldr x11,[x1,#-32]
  116. bic w25,w22,w20
  117. and w26,w21,w20
  118. ror w27,w24,#27
  119. add w22,w22,w28 // future e+=K
  120. orr w25,w25,w26
  121. add w23,w23,w27 // e+=rot(a,5)
  122. ror w20,w20,#2
  123. add w22,w22,w10 // future e+=X[i]
  124. add w23,w23,w25 // e+=F(b,c,d)
  125. #ifdef __ARMEB__
  126. ror x11,x11,#32
  127. #else
  128. rev32 x11,x11
  129. #endif
  130. bic w25,w21,w24
  131. and w26,w20,w24
  132. ror w27,w23,#27
  133. add w21,w21,w28 // future e+=K
  134. orr w25,w25,w26
  135. add w22,w22,w27 // e+=rot(a,5)
  136. ror w24,w24,#2
  137. add w21,w21,w11 // future e+=X[i]
  138. add w22,w22,w25 // e+=F(b,c,d)
  139. lsr x12,x11,#32
  140. ldr x13,[x1,#-24]
  141. bic w25,w20,w23
  142. and w26,w24,w23
  143. ror w27,w22,#27
  144. add w20,w20,w28 // future e+=K
  145. orr w25,w25,w26
  146. add w21,w21,w27 // e+=rot(a,5)
  147. ror w23,w23,#2
  148. add w20,w20,w12 // future e+=X[i]
  149. add w21,w21,w25 // e+=F(b,c,d)
  150. #ifdef __ARMEB__
  151. ror x13,x13,#32
  152. #else
  153. rev32 x13,x13
  154. #endif
  155. bic w25,w24,w22
  156. and w26,w23,w22
  157. ror w27,w21,#27
  158. add w24,w24,w28 // future e+=K
  159. orr w25,w25,w26
  160. add w20,w20,w27 // e+=rot(a,5)
  161. ror w22,w22,#2
  162. add w24,w24,w13 // future e+=X[i]
  163. add w20,w20,w25 // e+=F(b,c,d)
  164. lsr x14,x13,#32
  165. ldr x15,[x1,#-16]
  166. bic w25,w23,w21
  167. and w26,w22,w21
  168. ror w27,w20,#27
  169. add w23,w23,w28 // future e+=K
  170. orr w25,w25,w26
  171. add w24,w24,w27 // e+=rot(a,5)
  172. ror w21,w21,#2
  173. add w23,w23,w14 // future e+=X[i]
  174. add w24,w24,w25 // e+=F(b,c,d)
  175. #ifdef __ARMEB__
  176. ror x15,x15,#32
  177. #else
  178. rev32 x15,x15
  179. #endif
  180. bic w25,w22,w20
  181. and w26,w21,w20
  182. ror w27,w24,#27
  183. add w22,w22,w28 // future e+=K
  184. orr w25,w25,w26
  185. add w23,w23,w27 // e+=rot(a,5)
  186. ror w20,w20,#2
  187. add w22,w22,w15 // future e+=X[i]
  188. add w23,w23,w25 // e+=F(b,c,d)
  189. lsr x16,x15,#32
  190. ldr x17,[x1,#-8]
  191. bic w25,w21,w24
  192. and w26,w20,w24
  193. ror w27,w23,#27
  194. add w21,w21,w28 // future e+=K
  195. orr w25,w25,w26
  196. add w22,w22,w27 // e+=rot(a,5)
  197. ror w24,w24,#2
  198. add w21,w21,w16 // future e+=X[i]
  199. add w22,w22,w25 // e+=F(b,c,d)
  200. #ifdef __ARMEB__
  201. ror x17,x17,#32
  202. #else
  203. rev32 x17,x17
  204. #endif
  205. bic w25,w20,w23
  206. and w26,w24,w23
  207. ror w27,w22,#27
  208. add w20,w20,w28 // future e+=K
  209. orr w25,w25,w26
  210. add w21,w21,w27 // e+=rot(a,5)
  211. ror w23,w23,#2
  212. add w20,w20,w17 // future e+=X[i]
  213. add w21,w21,w25 // e+=F(b,c,d)
  214. lsr x19,x17,#32
  215. eor w3,w3,w5
  216. bic w25,w24,w22
  217. and w26,w23,w22
  218. ror w27,w21,#27
  219. eor w3,w3,w11
  220. add w24,w24,w28 // future e+=K
  221. orr w25,w25,w26
  222. add w20,w20,w27 // e+=rot(a,5)
  223. eor w3,w3,w16
  224. ror w22,w22,#2
  225. add w24,w24,w19 // future e+=X[i]
  226. add w20,w20,w25 // e+=F(b,c,d)
  227. ror w3,w3,#31
  228. eor w4,w4,w6
  229. bic w25,w23,w21
  230. and w26,w22,w21
  231. ror w27,w20,#27
  232. eor w4,w4,w12
  233. add w23,w23,w28 // future e+=K
  234. orr w25,w25,w26
  235. add w24,w24,w27 // e+=rot(a,5)
  236. eor w4,w4,w17
  237. ror w21,w21,#2
  238. add w23,w23,w3 // future e+=X[i]
  239. add w24,w24,w25 // e+=F(b,c,d)
  240. ror w4,w4,#31
  241. eor w5,w5,w7
  242. bic w25,w22,w20
  243. and w26,w21,w20
  244. ror w27,w24,#27
  245. eor w5,w5,w13
  246. add w22,w22,w28 // future e+=K
  247. orr w25,w25,w26
  248. add w23,w23,w27 // e+=rot(a,5)
  249. eor w5,w5,w19
  250. ror w20,w20,#2
  251. add w22,w22,w4 // future e+=X[i]
  252. add w23,w23,w25 // e+=F(b,c,d)
  253. ror w5,w5,#31
  254. eor w6,w6,w8
  255. bic w25,w21,w24
  256. and w26,w20,w24
  257. ror w27,w23,#27
  258. eor w6,w6,w14
  259. add w21,w21,w28 // future e+=K
  260. orr w25,w25,w26
  261. add w22,w22,w27 // e+=rot(a,5)
  262. eor w6,w6,w3
  263. ror w24,w24,#2
  264. add w21,w21,w5 // future e+=X[i]
  265. add w22,w22,w25 // e+=F(b,c,d)
  266. ror w6,w6,#31
  267. eor w7,w7,w9
  268. bic w25,w20,w23
  269. and w26,w24,w23
  270. ror w27,w22,#27
  271. eor w7,w7,w15
  272. add w20,w20,w28 // future e+=K
  273. orr w25,w25,w26
  274. add w21,w21,w27 // e+=rot(a,5)
  275. eor w7,w7,w4
  276. ror w23,w23,#2
  277. add w20,w20,w6 // future e+=X[i]
  278. add w21,w21,w25 // e+=F(b,c,d)
  279. ror w7,w7,#31
  280. movz w28,#0xeba1
  281. movk w28,#0x6ed9,lsl#16
  282. eor w8,w8,w10
  283. bic w25,w24,w22
  284. and w26,w23,w22
  285. ror w27,w21,#27
  286. eor w8,w8,w16
  287. add w24,w24,w28 // future e+=K
  288. orr w25,w25,w26
  289. add w20,w20,w27 // e+=rot(a,5)
  290. eor w8,w8,w5
  291. ror w22,w22,#2
  292. add w24,w24,w7 // future e+=X[i]
  293. add w20,w20,w25 // e+=F(b,c,d)
  294. ror w8,w8,#31
  295. eor w9,w9,w11
  296. eor w25,w23,w21
  297. ror w27,w20,#27
  298. add w23,w23,w28 // future e+=K
  299. eor w9,w9,w17
  300. eor w25,w25,w22
  301. add w24,w24,w27 // e+=rot(a,5)
  302. ror w21,w21,#2
  303. eor w9,w9,w6
  304. add w23,w23,w8 // future e+=X[i]
  305. add w24,w24,w25 // e+=F(b,c,d)
  306. ror w9,w9,#31
  307. eor w10,w10,w12
  308. eor w25,w22,w20
  309. ror w27,w24,#27
  310. add w22,w22,w28 // future e+=K
  311. eor w10,w10,w19
  312. eor w25,w25,w21
  313. add w23,w23,w27 // e+=rot(a,5)
  314. ror w20,w20,#2
  315. eor w10,w10,w7
  316. add w22,w22,w9 // future e+=X[i]
  317. add w23,w23,w25 // e+=F(b,c,d)
  318. ror w10,w10,#31
  319. eor w11,w11,w13
  320. eor w25,w21,w24
  321. ror w27,w23,#27
  322. add w21,w21,w28 // future e+=K
  323. eor w11,w11,w3
  324. eor w25,w25,w20
  325. add w22,w22,w27 // e+=rot(a,5)
  326. ror w24,w24,#2
  327. eor w11,w11,w8
  328. add w21,w21,w10 // future e+=X[i]
  329. add w22,w22,w25 // e+=F(b,c,d)
  330. ror w11,w11,#31
  331. eor w12,w12,w14
  332. eor w25,w20,w23
  333. ror w27,w22,#27
  334. add w20,w20,w28 // future e+=K
  335. eor w12,w12,w4
  336. eor w25,w25,w24
  337. add w21,w21,w27 // e+=rot(a,5)
  338. ror w23,w23,#2
  339. eor w12,w12,w9
  340. add w20,w20,w11 // future e+=X[i]
  341. add w21,w21,w25 // e+=F(b,c,d)
  342. ror w12,w12,#31
  343. eor w13,w13,w15
  344. eor w25,w24,w22
  345. ror w27,w21,#27
  346. add w24,w24,w28 // future e+=K
  347. eor w13,w13,w5
  348. eor w25,w25,w23
  349. add w20,w20,w27 // e+=rot(a,5)
  350. ror w22,w22,#2
  351. eor w13,w13,w10
  352. add w24,w24,w12 // future e+=X[i]
  353. add w20,w20,w25 // e+=F(b,c,d)
  354. ror w13,w13,#31
  355. eor w14,w14,w16
  356. eor w25,w23,w21
  357. ror w27,w20,#27
  358. add w23,w23,w28 // future e+=K
  359. eor w14,w14,w6
  360. eor w25,w25,w22
  361. add w24,w24,w27 // e+=rot(a,5)
  362. ror w21,w21,#2
  363. eor w14,w14,w11
  364. add w23,w23,w13 // future e+=X[i]
  365. add w24,w24,w25 // e+=F(b,c,d)
  366. ror w14,w14,#31
  367. eor w15,w15,w17
  368. eor w25,w22,w20
  369. ror w27,w24,#27
  370. add w22,w22,w28 // future e+=K
  371. eor w15,w15,w7
  372. eor w25,w25,w21
  373. add w23,w23,w27 // e+=rot(a,5)
  374. ror w20,w20,#2
  375. eor w15,w15,w12
  376. add w22,w22,w14 // future e+=X[i]
  377. add w23,w23,w25 // e+=F(b,c,d)
  378. ror w15,w15,#31
  379. eor w16,w16,w19
  380. eor w25,w21,w24
  381. ror w27,w23,#27
  382. add w21,w21,w28 // future e+=K
  383. eor w16,w16,w8
  384. eor w25,w25,w20
  385. add w22,w22,w27 // e+=rot(a,5)
  386. ror w24,w24,#2
  387. eor w16,w16,w13
  388. add w21,w21,w15 // future e+=X[i]
  389. add w22,w22,w25 // e+=F(b,c,d)
  390. ror w16,w16,#31
  391. eor w17,w17,w3
  392. eor w25,w20,w23
  393. ror w27,w22,#27
  394. add w20,w20,w28 // future e+=K
  395. eor w17,w17,w9
  396. eor w25,w25,w24
  397. add w21,w21,w27 // e+=rot(a,5)
  398. ror w23,w23,#2
  399. eor w17,w17,w14
  400. add w20,w20,w16 // future e+=X[i]
  401. add w21,w21,w25 // e+=F(b,c,d)
  402. ror w17,w17,#31
  403. eor w19,w19,w4
  404. eor w25,w24,w22
  405. ror w27,w21,#27
  406. add w24,w24,w28 // future e+=K
  407. eor w19,w19,w10
  408. eor w25,w25,w23
  409. add w20,w20,w27 // e+=rot(a,5)
  410. ror w22,w22,#2
  411. eor w19,w19,w15
  412. add w24,w24,w17 // future e+=X[i]
  413. add w20,w20,w25 // e+=F(b,c,d)
  414. ror w19,w19,#31
  415. eor w3,w3,w5
  416. eor w25,w23,w21
  417. ror w27,w20,#27
  418. add w23,w23,w28 // future e+=K
  419. eor w3,w3,w11
  420. eor w25,w25,w22
  421. add w24,w24,w27 // e+=rot(a,5)
  422. ror w21,w21,#2
  423. eor w3,w3,w16
  424. add w23,w23,w19 // future e+=X[i]
  425. add w24,w24,w25 // e+=F(b,c,d)
  426. ror w3,w3,#31
  427. eor w4,w4,w6
  428. eor w25,w22,w20
  429. ror w27,w24,#27
  430. add w22,w22,w28 // future e+=K
  431. eor w4,w4,w12
  432. eor w25,w25,w21
  433. add w23,w23,w27 // e+=rot(a,5)
  434. ror w20,w20,#2
  435. eor w4,w4,w17
  436. add w22,w22,w3 // future e+=X[i]
  437. add w23,w23,w25 // e+=F(b,c,d)
  438. ror w4,w4,#31
  439. eor w5,w5,w7
  440. eor w25,w21,w24
  441. ror w27,w23,#27
  442. add w21,w21,w28 // future e+=K
  443. eor w5,w5,w13
  444. eor w25,w25,w20
  445. add w22,w22,w27 // e+=rot(a,5)
  446. ror w24,w24,#2
  447. eor w5,w5,w19
  448. add w21,w21,w4 // future e+=X[i]
  449. add w22,w22,w25 // e+=F(b,c,d)
  450. ror w5,w5,#31
  451. eor w6,w6,w8
  452. eor w25,w20,w23
  453. ror w27,w22,#27
  454. add w20,w20,w28 // future e+=K
  455. eor w6,w6,w14
  456. eor w25,w25,w24
  457. add w21,w21,w27 // e+=rot(a,5)
  458. ror w23,w23,#2
  459. eor w6,w6,w3
  460. add w20,w20,w5 // future e+=X[i]
  461. add w21,w21,w25 // e+=F(b,c,d)
  462. ror w6,w6,#31
  463. eor w7,w7,w9
  464. eor w25,w24,w22
  465. ror w27,w21,#27
  466. add w24,w24,w28 // future e+=K
  467. eor w7,w7,w15
  468. eor w25,w25,w23
  469. add w20,w20,w27 // e+=rot(a,5)
  470. ror w22,w22,#2
  471. eor w7,w7,w4
  472. add w24,w24,w6 // future e+=X[i]
  473. add w20,w20,w25 // e+=F(b,c,d)
  474. ror w7,w7,#31
  475. eor w8,w8,w10
  476. eor w25,w23,w21
  477. ror w27,w20,#27
  478. add w23,w23,w28 // future e+=K
  479. eor w8,w8,w16
  480. eor w25,w25,w22
  481. add w24,w24,w27 // e+=rot(a,5)
  482. ror w21,w21,#2
  483. eor w8,w8,w5
  484. add w23,w23,w7 // future e+=X[i]
  485. add w24,w24,w25 // e+=F(b,c,d)
  486. ror w8,w8,#31
  487. eor w9,w9,w11
  488. eor w25,w22,w20
  489. ror w27,w24,#27
  490. add w22,w22,w28 // future e+=K
  491. eor w9,w9,w17
  492. eor w25,w25,w21
  493. add w23,w23,w27 // e+=rot(a,5)
  494. ror w20,w20,#2
  495. eor w9,w9,w6
  496. add w22,w22,w8 // future e+=X[i]
  497. add w23,w23,w25 // e+=F(b,c,d)
  498. ror w9,w9,#31
  499. eor w10,w10,w12
  500. eor w25,w21,w24
  501. ror w27,w23,#27
  502. add w21,w21,w28 // future e+=K
  503. eor w10,w10,w19
  504. eor w25,w25,w20
  505. add w22,w22,w27 // e+=rot(a,5)
  506. ror w24,w24,#2
  507. eor w10,w10,w7
  508. add w21,w21,w9 // future e+=X[i]
  509. add w22,w22,w25 // e+=F(b,c,d)
  510. ror w10,w10,#31
  511. eor w11,w11,w13
  512. eor w25,w20,w23
  513. ror w27,w22,#27
  514. add w20,w20,w28 // future e+=K
  515. eor w11,w11,w3
  516. eor w25,w25,w24
  517. add w21,w21,w27 // e+=rot(a,5)
  518. ror w23,w23,#2
  519. eor w11,w11,w8
  520. add w20,w20,w10 // future e+=X[i]
  521. add w21,w21,w25 // e+=F(b,c,d)
  522. ror w11,w11,#31
  523. movz w28,#0xbcdc
  524. movk w28,#0x8f1b,lsl#16
  525. eor w12,w12,w14
  526. eor w25,w24,w22
  527. ror w27,w21,#27
  528. add w24,w24,w28 // future e+=K
  529. eor w12,w12,w4
  530. eor w25,w25,w23
  531. add w20,w20,w27 // e+=rot(a,5)
  532. ror w22,w22,#2
  533. eor w12,w12,w9
  534. add w24,w24,w11 // future e+=X[i]
  535. add w20,w20,w25 // e+=F(b,c,d)
  536. ror w12,w12,#31
  537. orr w25,w21,w22
  538. and w26,w21,w22
  539. eor w13,w13,w15
  540. ror w27,w20,#27
  541. and w25,w25,w23
  542. add w23,w23,w28 // future e+=K
  543. eor w13,w13,w5
  544. add w24,w24,w27 // e+=rot(a,5)
  545. orr w25,w25,w26
  546. ror w21,w21,#2
  547. eor w13,w13,w10
  548. add w23,w23,w12 // future e+=X[i]
  549. add w24,w24,w25 // e+=F(b,c,d)
  550. ror w13,w13,#31
  551. orr w25,w20,w21
  552. and w26,w20,w21
  553. eor w14,w14,w16
  554. ror w27,w24,#27
  555. and w25,w25,w22
  556. add w22,w22,w28 // future e+=K
  557. eor w14,w14,w6
  558. add w23,w23,w27 // e+=rot(a,5)
  559. orr w25,w25,w26
  560. ror w20,w20,#2
  561. eor w14,w14,w11
  562. add w22,w22,w13 // future e+=X[i]
  563. add w23,w23,w25 // e+=F(b,c,d)
  564. ror w14,w14,#31
  565. orr w25,w24,w20
  566. and w26,w24,w20
  567. eor w15,w15,w17
  568. ror w27,w23,#27
  569. and w25,w25,w21
  570. add w21,w21,w28 // future e+=K
  571. eor w15,w15,w7
  572. add w22,w22,w27 // e+=rot(a,5)
  573. orr w25,w25,w26
  574. ror w24,w24,#2
  575. eor w15,w15,w12
  576. add w21,w21,w14 // future e+=X[i]
  577. add w22,w22,w25 // e+=F(b,c,d)
  578. ror w15,w15,#31
  579. orr w25,w23,w24
  580. and w26,w23,w24
  581. eor w16,w16,w19
  582. ror w27,w22,#27
  583. and w25,w25,w20
  584. add w20,w20,w28 // future e+=K
  585. eor w16,w16,w8
  586. add w21,w21,w27 // e+=rot(a,5)
  587. orr w25,w25,w26
  588. ror w23,w23,#2
  589. eor w16,w16,w13
  590. add w20,w20,w15 // future e+=X[i]
  591. add w21,w21,w25 // e+=F(b,c,d)
  592. ror w16,w16,#31
  593. orr w25,w22,w23
  594. and w26,w22,w23
  595. eor w17,w17,w3
  596. ror w27,w21,#27
  597. and w25,w25,w24
  598. add w24,w24,w28 // future e+=K
  599. eor w17,w17,w9
  600. add w20,w20,w27 // e+=rot(a,5)
  601. orr w25,w25,w26
  602. ror w22,w22,#2
  603. eor w17,w17,w14
  604. add w24,w24,w16 // future e+=X[i]
  605. add w20,w20,w25 // e+=F(b,c,d)
  606. ror w17,w17,#31
  607. orr w25,w21,w22
  608. and w26,w21,w22
  609. eor w19,w19,w4
  610. ror w27,w20,#27
  611. and w25,w25,w23
  612. add w23,w23,w28 // future e+=K
  613. eor w19,w19,w10
  614. add w24,w24,w27 // e+=rot(a,5)
  615. orr w25,w25,w26
  616. ror w21,w21,#2
  617. eor w19,w19,w15
  618. add w23,w23,w17 // future e+=X[i]
  619. add w24,w24,w25 // e+=F(b,c,d)
  620. ror w19,w19,#31
  621. orr w25,w20,w21
  622. and w26,w20,w21
  623. eor w3,w3,w5
  624. ror w27,w24,#27
  625. and w25,w25,w22
  626. add w22,w22,w28 // future e+=K
  627. eor w3,w3,w11
  628. add w23,w23,w27 // e+=rot(a,5)
  629. orr w25,w25,w26
  630. ror w20,w20,#2
  631. eor w3,w3,w16
  632. add w22,w22,w19 // future e+=X[i]
  633. add w23,w23,w25 // e+=F(b,c,d)
  634. ror w3,w3,#31
  635. orr w25,w24,w20
  636. and w26,w24,w20
  637. eor w4,w4,w6
  638. ror w27,w23,#27
  639. and w25,w25,w21
  640. add w21,w21,w28 // future e+=K
  641. eor w4,w4,w12
  642. add w22,w22,w27 // e+=rot(a,5)
  643. orr w25,w25,w26
  644. ror w24,w24,#2
  645. eor w4,w4,w17
  646. add w21,w21,w3 // future e+=X[i]
  647. add w22,w22,w25 // e+=F(b,c,d)
  648. ror w4,w4,#31
  649. orr w25,w23,w24
  650. and w26,w23,w24
  651. eor w5,w5,w7
  652. ror w27,w22,#27
  653. and w25,w25,w20
  654. add w20,w20,w28 // future e+=K
  655. eor w5,w5,w13
  656. add w21,w21,w27 // e+=rot(a,5)
  657. orr w25,w25,w26
  658. ror w23,w23,#2
  659. eor w5,w5,w19
  660. add w20,w20,w4 // future e+=X[i]
  661. add w21,w21,w25 // e+=F(b,c,d)
  662. ror w5,w5,#31
  663. orr w25,w22,w23
  664. and w26,w22,w23
  665. eor w6,w6,w8
  666. ror w27,w21,#27
  667. and w25,w25,w24
  668. add w24,w24,w28 // future e+=K
  669. eor w6,w6,w14
  670. add w20,w20,w27 // e+=rot(a,5)
  671. orr w25,w25,w26
  672. ror w22,w22,#2
  673. eor w6,w6,w3
  674. add w24,w24,w5 // future e+=X[i]
  675. add w20,w20,w25 // e+=F(b,c,d)
  676. ror w6,w6,#31
  677. orr w25,w21,w22
  678. and w26,w21,w22
  679. eor w7,w7,w9
  680. ror w27,w20,#27
  681. and w25,w25,w23
  682. add w23,w23,w28 // future e+=K
  683. eor w7,w7,w15
  684. add w24,w24,w27 // e+=rot(a,5)
  685. orr w25,w25,w26
  686. ror w21,w21,#2
  687. eor w7,w7,w4
  688. add w23,w23,w6 // future e+=X[i]
  689. add w24,w24,w25 // e+=F(b,c,d)
  690. ror w7,w7,#31
  691. orr w25,w20,w21
  692. and w26,w20,w21
  693. eor w8,w8,w10
  694. ror w27,w24,#27
  695. and w25,w25,w22
  696. add w22,w22,w28 // future e+=K
  697. eor w8,w8,w16
  698. add w23,w23,w27 // e+=rot(a,5)
  699. orr w25,w25,w26
  700. ror w20,w20,#2
  701. eor w8,w8,w5
  702. add w22,w22,w7 // future e+=X[i]
  703. add w23,w23,w25 // e+=F(b,c,d)
  704. ror w8,w8,#31
  705. orr w25,w24,w20
  706. and w26,w24,w20
  707. eor w9,w9,w11
  708. ror w27,w23,#27
  709. and w25,w25,w21
  710. add w21,w21,w28 // future e+=K
  711. eor w9,w9,w17
  712. add w22,w22,w27 // e+=rot(a,5)
  713. orr w25,w25,w26
  714. ror w24,w24,#2
  715. eor w9,w9,w6
  716. add w21,w21,w8 // future e+=X[i]
  717. add w22,w22,w25 // e+=F(b,c,d)
  718. ror w9,w9,#31
  719. orr w25,w23,w24
  720. and w26,w23,w24
  721. eor w10,w10,w12
  722. ror w27,w22,#27
  723. and w25,w25,w20
  724. add w20,w20,w28 // future e+=K
  725. eor w10,w10,w19
  726. add w21,w21,w27 // e+=rot(a,5)
  727. orr w25,w25,w26
  728. ror w23,w23,#2
  729. eor w10,w10,w7
  730. add w20,w20,w9 // future e+=X[i]
  731. add w21,w21,w25 // e+=F(b,c,d)
  732. ror w10,w10,#31
  733. orr w25,w22,w23
  734. and w26,w22,w23
  735. eor w11,w11,w13
  736. ror w27,w21,#27
  737. and w25,w25,w24
  738. add w24,w24,w28 // future e+=K
  739. eor w11,w11,w3
  740. add w20,w20,w27 // e+=rot(a,5)
  741. orr w25,w25,w26
  742. ror w22,w22,#2
  743. eor w11,w11,w8
  744. add w24,w24,w10 // future e+=X[i]
  745. add w20,w20,w25 // e+=F(b,c,d)
  746. ror w11,w11,#31
  747. orr w25,w21,w22
  748. and w26,w21,w22
  749. eor w12,w12,w14
  750. ror w27,w20,#27
  751. and w25,w25,w23
  752. add w23,w23,w28 // future e+=K
  753. eor w12,w12,w4
  754. add w24,w24,w27 // e+=rot(a,5)
  755. orr w25,w25,w26
  756. ror w21,w21,#2
  757. eor w12,w12,w9
  758. add w23,w23,w11 // future e+=X[i]
  759. add w24,w24,w25 // e+=F(b,c,d)
  760. ror w12,w12,#31
  761. orr w25,w20,w21
  762. and w26,w20,w21
  763. eor w13,w13,w15
  764. ror w27,w24,#27
  765. and w25,w25,w22
  766. add w22,w22,w28 // future e+=K
  767. eor w13,w13,w5
  768. add w23,w23,w27 // e+=rot(a,5)
  769. orr w25,w25,w26
  770. ror w20,w20,#2
  771. eor w13,w13,w10
  772. add w22,w22,w12 // future e+=X[i]
  773. add w23,w23,w25 // e+=F(b,c,d)
  774. ror w13,w13,#31
  775. orr w25,w24,w20
  776. and w26,w24,w20
  777. eor w14,w14,w16
  778. ror w27,w23,#27
  779. and w25,w25,w21
  780. add w21,w21,w28 // future e+=K
  781. eor w14,w14,w6
  782. add w22,w22,w27 // e+=rot(a,5)
  783. orr w25,w25,w26
  784. ror w24,w24,#2
  785. eor w14,w14,w11
  786. add w21,w21,w13 // future e+=X[i]
  787. add w22,w22,w25 // e+=F(b,c,d)
  788. ror w14,w14,#31
  789. orr w25,w23,w24
  790. and w26,w23,w24
  791. eor w15,w15,w17
  792. ror w27,w22,#27
  793. and w25,w25,w20
  794. add w20,w20,w28 // future e+=K
  795. eor w15,w15,w7
  796. add w21,w21,w27 // e+=rot(a,5)
  797. orr w25,w25,w26
  798. ror w23,w23,#2
  799. eor w15,w15,w12
  800. add w20,w20,w14 // future e+=X[i]
  801. add w21,w21,w25 // e+=F(b,c,d)
  802. ror w15,w15,#31
  803. movz w28,#0xc1d6
  804. movk w28,#0xca62,lsl#16
  805. orr w25,w22,w23
  806. and w26,w22,w23
  807. eor w16,w16,w19
  808. ror w27,w21,#27
  809. and w25,w25,w24
  810. add w24,w24,w28 // future e+=K
  811. eor w16,w16,w8
  812. add w20,w20,w27 // e+=rot(a,5)
  813. orr w25,w25,w26
  814. ror w22,w22,#2
  815. eor w16,w16,w13
  816. add w24,w24,w15 // future e+=X[i]
  817. add w20,w20,w25 // e+=F(b,c,d)
  818. ror w16,w16,#31
  819. eor w17,w17,w3
  820. eor w25,w23,w21
  821. ror w27,w20,#27
  822. add w23,w23,w28 // future e+=K
  823. eor w17,w17,w9
  824. eor w25,w25,w22
  825. add w24,w24,w27 // e+=rot(a,5)
  826. ror w21,w21,#2
  827. eor w17,w17,w14
  828. add w23,w23,w16 // future e+=X[i]
  829. add w24,w24,w25 // e+=F(b,c,d)
  830. ror w17,w17,#31
  831. eor w19,w19,w4
  832. eor w25,w22,w20
  833. ror w27,w24,#27
  834. add w22,w22,w28 // future e+=K
  835. eor w19,w19,w10
  836. eor w25,w25,w21
  837. add w23,w23,w27 // e+=rot(a,5)
  838. ror w20,w20,#2
  839. eor w19,w19,w15
  840. add w22,w22,w17 // future e+=X[i]
  841. add w23,w23,w25 // e+=F(b,c,d)
  842. ror w19,w19,#31
  843. eor w3,w3,w5
  844. eor w25,w21,w24
  845. ror w27,w23,#27
  846. add w21,w21,w28 // future e+=K
  847. eor w3,w3,w11
  848. eor w25,w25,w20
  849. add w22,w22,w27 // e+=rot(a,5)
  850. ror w24,w24,#2
  851. eor w3,w3,w16
  852. add w21,w21,w19 // future e+=X[i]
  853. add w22,w22,w25 // e+=F(b,c,d)
  854. ror w3,w3,#31
  855. eor w4,w4,w6
  856. eor w25,w20,w23
  857. ror w27,w22,#27
  858. add w20,w20,w28 // future e+=K
  859. eor w4,w4,w12
  860. eor w25,w25,w24
  861. add w21,w21,w27 // e+=rot(a,5)
  862. ror w23,w23,#2
  863. eor w4,w4,w17
  864. add w20,w20,w3 // future e+=X[i]
  865. add w21,w21,w25 // e+=F(b,c,d)
  866. ror w4,w4,#31
  867. eor w5,w5,w7
  868. eor w25,w24,w22
  869. ror w27,w21,#27
  870. add w24,w24,w28 // future e+=K
  871. eor w5,w5,w13
  872. eor w25,w25,w23
  873. add w20,w20,w27 // e+=rot(a,5)
  874. ror w22,w22,#2
  875. eor w5,w5,w19
  876. add w24,w24,w4 // future e+=X[i]
  877. add w20,w20,w25 // e+=F(b,c,d)
  878. ror w5,w5,#31
  879. eor w6,w6,w8
  880. eor w25,w23,w21
  881. ror w27,w20,#27
  882. add w23,w23,w28 // future e+=K
  883. eor w6,w6,w14
  884. eor w25,w25,w22
  885. add w24,w24,w27 // e+=rot(a,5)
  886. ror w21,w21,#2
  887. eor w6,w6,w3
  888. add w23,w23,w5 // future e+=X[i]
  889. add w24,w24,w25 // e+=F(b,c,d)
  890. ror w6,w6,#31
  891. eor w7,w7,w9
  892. eor w25,w22,w20
  893. ror w27,w24,#27
  894. add w22,w22,w28 // future e+=K
  895. eor w7,w7,w15
  896. eor w25,w25,w21
  897. add w23,w23,w27 // e+=rot(a,5)
  898. ror w20,w20,#2
  899. eor w7,w7,w4
  900. add w22,w22,w6 // future e+=X[i]
  901. add w23,w23,w25 // e+=F(b,c,d)
  902. ror w7,w7,#31
  903. eor w8,w8,w10
  904. eor w25,w21,w24
  905. ror w27,w23,#27
  906. add w21,w21,w28 // future e+=K
  907. eor w8,w8,w16
  908. eor w25,w25,w20
  909. add w22,w22,w27 // e+=rot(a,5)
  910. ror w24,w24,#2
  911. eor w8,w8,w5
  912. add w21,w21,w7 // future e+=X[i]
  913. add w22,w22,w25 // e+=F(b,c,d)
  914. ror w8,w8,#31
  915. eor w9,w9,w11
  916. eor w25,w20,w23
  917. ror w27,w22,#27
  918. add w20,w20,w28 // future e+=K
  919. eor w9,w9,w17
  920. eor w25,w25,w24
  921. add w21,w21,w27 // e+=rot(a,5)
  922. ror w23,w23,#2
  923. eor w9,w9,w6
  924. add w20,w20,w8 // future e+=X[i]
  925. add w21,w21,w25 // e+=F(b,c,d)
  926. ror w9,w9,#31
  927. eor w10,w10,w12
  928. eor w25,w24,w22
  929. ror w27,w21,#27
  930. add w24,w24,w28 // future e+=K
  931. eor w10,w10,w19
  932. eor w25,w25,w23
  933. add w20,w20,w27 // e+=rot(a,5)
  934. ror w22,w22,#2
  935. eor w10,w10,w7
  936. add w24,w24,w9 // future e+=X[i]
  937. add w20,w20,w25 // e+=F(b,c,d)
  938. ror w10,w10,#31
  939. eor w11,w11,w13
  940. eor w25,w23,w21
  941. ror w27,w20,#27
  942. add w23,w23,w28 // future e+=K
  943. eor w11,w11,w3
  944. eor w25,w25,w22
  945. add w24,w24,w27 // e+=rot(a,5)
  946. ror w21,w21,#2
  947. eor w11,w11,w8
  948. add w23,w23,w10 // future e+=X[i]
  949. add w24,w24,w25 // e+=F(b,c,d)
  950. ror w11,w11,#31
  951. eor w12,w12,w14
  952. eor w25,w22,w20
  953. ror w27,w24,#27
  954. add w22,w22,w28 // future e+=K
  955. eor w12,w12,w4
  956. eor w25,w25,w21
  957. add w23,w23,w27 // e+=rot(a,5)
  958. ror w20,w20,#2
  959. eor w12,w12,w9
  960. add w22,w22,w11 // future e+=X[i]
  961. add w23,w23,w25 // e+=F(b,c,d)
  962. ror w12,w12,#31
  963. eor w13,w13,w15
  964. eor w25,w21,w24
  965. ror w27,w23,#27
  966. add w21,w21,w28 // future e+=K
  967. eor w13,w13,w5
  968. eor w25,w25,w20
  969. add w22,w22,w27 // e+=rot(a,5)
  970. ror w24,w24,#2
  971. eor w13,w13,w10
  972. add w21,w21,w12 // future e+=X[i]
  973. add w22,w22,w25 // e+=F(b,c,d)
  974. ror w13,w13,#31
  975. eor w14,w14,w16
  976. eor w25,w20,w23
  977. ror w27,w22,#27
  978. add w20,w20,w28 // future e+=K
  979. eor w14,w14,w6
  980. eor w25,w25,w24
  981. add w21,w21,w27 // e+=rot(a,5)
  982. ror w23,w23,#2
  983. eor w14,w14,w11
  984. add w20,w20,w13 // future e+=X[i]
  985. add w21,w21,w25 // e+=F(b,c,d)
  986. ror w14,w14,#31
  987. eor w15,w15,w17
  988. eor w25,w24,w22
  989. ror w27,w21,#27
  990. add w24,w24,w28 // future e+=K
  991. eor w15,w15,w7
  992. eor w25,w25,w23
  993. add w20,w20,w27 // e+=rot(a,5)
  994. ror w22,w22,#2
  995. eor w15,w15,w12
  996. add w24,w24,w14 // future e+=X[i]
  997. add w20,w20,w25 // e+=F(b,c,d)
  998. ror w15,w15,#31
  999. eor w16,w16,w19
  1000. eor w25,w23,w21
  1001. ror w27,w20,#27
  1002. add w23,w23,w28 // future e+=K
  1003. eor w16,w16,w8
  1004. eor w25,w25,w22
  1005. add w24,w24,w27 // e+=rot(a,5)
  1006. ror w21,w21,#2
  1007. eor w16,w16,w13
  1008. add w23,w23,w15 // future e+=X[i]
  1009. add w24,w24,w25 // e+=F(b,c,d)
  1010. ror w16,w16,#31
  1011. eor w17,w17,w3
  1012. eor w25,w22,w20
  1013. ror w27,w24,#27
  1014. add w22,w22,w28 // future e+=K
  1015. eor w17,w17,w9
  1016. eor w25,w25,w21
  1017. add w23,w23,w27 // e+=rot(a,5)
  1018. ror w20,w20,#2
  1019. eor w17,w17,w14
  1020. add w22,w22,w16 // future e+=X[i]
  1021. add w23,w23,w25 // e+=F(b,c,d)
  1022. ror w17,w17,#31
  1023. eor w19,w19,w4
  1024. eor w25,w21,w24
  1025. ror w27,w23,#27
  1026. add w21,w21,w28 // future e+=K
  1027. eor w19,w19,w10
  1028. eor w25,w25,w20
  1029. add w22,w22,w27 // e+=rot(a,5)
  1030. ror w24,w24,#2
  1031. eor w19,w19,w15
  1032. add w21,w21,w17 // future e+=X[i]
  1033. add w22,w22,w25 // e+=F(b,c,d)
  1034. ror w19,w19,#31
  1035. ldp w4,w5,[x0]
  1036. eor w25,w20,w23
  1037. ror w27,w22,#27
  1038. add w20,w20,w28 // future e+=K
  1039. eor w25,w25,w24
  1040. add w21,w21,w27 // e+=rot(a,5)
  1041. ror w23,w23,#2
  1042. add w20,w20,w19 // future e+=X[i]
  1043. add w21,w21,w25 // e+=F(b,c,d)
  1044. ldp w6,w7,[x0,#8]
  1045. eor w25,w24,w22
  1046. ror w27,w21,#27
  1047. eor w25,w25,w23
  1048. add w20,w20,w27 // e+=rot(a,5)
  1049. ror w22,w22,#2
  1050. ldr w8,[x0,#16]
  1051. add w20,w20,w25 // e+=F(b,c,d)
  1052. add w21,w21,w5
  1053. add w22,w22,w6
  1054. add w20,w20,w4
  1055. add w23,w23,w7
  1056. add w24,w24,w8
  1057. stp w20,w21,[x0]
  1058. stp w22,w23,[x0,#8]
  1059. str w24,[x0,#16]
  1060. cbnz x2,Loop
  1061. ldp x19,x20,[sp,#16]
  1062. ldp x21,x22,[sp,#32]
  1063. ldp x23,x24,[sp,#48]
  1064. ldp x25,x26,[sp,#64]
  1065. ldp x27,x28,[sp,#80]
  1066. ldr x29,[sp],#96
  1067. ret
  1068. .align 6
  1069. sha1_block_armv8:
  1070. Lv8_entry:
  1071. stp x29,x30,[sp,#-16]!
  1072. add x29,sp,#0
  1073. adr x4,Lconst
  1074. eor v1.16b,v1.16b,v1.16b
  1075. ld1 {v0.4s},[x0],#16
  1076. ld1 {v1.s}[0],[x0]
  1077. sub x0,x0,#16
  1078. ld1 {v16.4s,v17.4s,v18.4s,v19.4s},[x4]
  1079. Loop_hw:
  1080. ld1 {v4.16b,v5.16b,v6.16b,v7.16b},[x1],#64
  1081. sub x2,x2,#1
  1082. rev32 v4.16b,v4.16b
  1083. rev32 v5.16b,v5.16b
  1084. add v20.4s,v16.4s,v4.4s
  1085. rev32 v6.16b,v6.16b
  1086. orr v22.16b,v0.16b,v0.16b // offload
  1087. add v21.4s,v16.4s,v5.4s
  1088. rev32 v7.16b,v7.16b
  1089. .long 0x5e280803 //sha1h v3.16b,v0.16b
  1090. .long 0x5e140020 //sha1c v0.16b,v1.16b,v20.4s // 0
  1091. add v20.4s,v16.4s,v6.4s
  1092. .long 0x5e0630a4 //sha1su0 v4.16b,v5.16b,v6.16b
  1093. .long 0x5e280802 //sha1h v2.16b,v0.16b // 1
  1094. .long 0x5e150060 //sha1c v0.16b,v3.16b,v21.4s
  1095. add v21.4s,v16.4s,v7.4s
  1096. .long 0x5e2818e4 //sha1su1 v4.16b,v7.16b
  1097. .long 0x5e0730c5 //sha1su0 v5.16b,v6.16b,v7.16b
  1098. .long 0x5e280803 //sha1h v3.16b,v0.16b // 2
  1099. .long 0x5e140040 //sha1c v0.16b,v2.16b,v20.4s
  1100. add v20.4s,v16.4s,v4.4s
  1101. .long 0x5e281885 //sha1su1 v5.16b,v4.16b
  1102. .long 0x5e0430e6 //sha1su0 v6.16b,v7.16b,v4.16b
  1103. .long 0x5e280802 //sha1h v2.16b,v0.16b // 3
  1104. .long 0x5e150060 //sha1c v0.16b,v3.16b,v21.4s
  1105. add v21.4s,v17.4s,v5.4s
  1106. .long 0x5e2818a6 //sha1su1 v6.16b,v5.16b
  1107. .long 0x5e053087 //sha1su0 v7.16b,v4.16b,v5.16b
  1108. .long 0x5e280803 //sha1h v3.16b,v0.16b // 4
  1109. .long 0x5e140040 //sha1c v0.16b,v2.16b,v20.4s
  1110. add v20.4s,v17.4s,v6.4s
  1111. .long 0x5e2818c7 //sha1su1 v7.16b,v6.16b
  1112. .long 0x5e0630a4 //sha1su0 v4.16b,v5.16b,v6.16b
  1113. .long 0x5e280802 //sha1h v2.16b,v0.16b // 5
  1114. .long 0x5e151060 //sha1p v0.16b,v3.16b,v21.4s
  1115. add v21.4s,v17.4s,v7.4s
  1116. .long 0x5e2818e4 //sha1su1 v4.16b,v7.16b
  1117. .long 0x5e0730c5 //sha1su0 v5.16b,v6.16b,v7.16b
  1118. .long 0x5e280803 //sha1h v3.16b,v0.16b // 6
  1119. .long 0x5e141040 //sha1p v0.16b,v2.16b,v20.4s
  1120. add v20.4s,v17.4s,v4.4s
  1121. .long 0x5e281885 //sha1su1 v5.16b,v4.16b
  1122. .long 0x5e0430e6 //sha1su0 v6.16b,v7.16b,v4.16b
  1123. .long 0x5e280802 //sha1h v2.16b,v0.16b // 7
  1124. .long 0x5e151060 //sha1p v0.16b,v3.16b,v21.4s
  1125. add v21.4s,v17.4s,v5.4s
  1126. .long 0x5e2818a6 //sha1su1 v6.16b,v5.16b
  1127. .long 0x5e053087 //sha1su0 v7.16b,v4.16b,v5.16b
  1128. .long 0x5e280803 //sha1h v3.16b,v0.16b // 8
  1129. .long 0x5e141040 //sha1p v0.16b,v2.16b,v20.4s
  1130. add v20.4s,v18.4s,v6.4s
  1131. .long 0x5e2818c7 //sha1su1 v7.16b,v6.16b
  1132. .long 0x5e0630a4 //sha1su0 v4.16b,v5.16b,v6.16b
  1133. .long 0x5e280802 //sha1h v2.16b,v0.16b // 9
  1134. .long 0x5e151060 //sha1p v0.16b,v3.16b,v21.4s
  1135. add v21.4s,v18.4s,v7.4s
  1136. .long 0x5e2818e4 //sha1su1 v4.16b,v7.16b
  1137. .long 0x5e0730c5 //sha1su0 v5.16b,v6.16b,v7.16b
  1138. .long 0x5e280803 //sha1h v3.16b,v0.16b // 10
  1139. .long 0x5e142040 //sha1m v0.16b,v2.16b,v20.4s
  1140. add v20.4s,v18.4s,v4.4s
  1141. .long 0x5e281885 //sha1su1 v5.16b,v4.16b
  1142. .long 0x5e0430e6 //sha1su0 v6.16b,v7.16b,v4.16b
  1143. .long 0x5e280802 //sha1h v2.16b,v0.16b // 11
  1144. .long 0x5e152060 //sha1m v0.16b,v3.16b,v21.4s
  1145. add v21.4s,v18.4s,v5.4s
  1146. .long 0x5e2818a6 //sha1su1 v6.16b,v5.16b
  1147. .long 0x5e053087 //sha1su0 v7.16b,v4.16b,v5.16b
  1148. .long 0x5e280803 //sha1h v3.16b,v0.16b // 12
  1149. .long 0x5e142040 //sha1m v0.16b,v2.16b,v20.4s
  1150. add v20.4s,v18.4s,v6.4s
  1151. .long 0x5e2818c7 //sha1su1 v7.16b,v6.16b
  1152. .long 0x5e0630a4 //sha1su0 v4.16b,v5.16b,v6.16b
  1153. .long 0x5e280802 //sha1h v2.16b,v0.16b // 13
  1154. .long 0x5e152060 //sha1m v0.16b,v3.16b,v21.4s
  1155. add v21.4s,v19.4s,v7.4s
  1156. .long 0x5e2818e4 //sha1su1 v4.16b,v7.16b
  1157. .long 0x5e0730c5 //sha1su0 v5.16b,v6.16b,v7.16b
  1158. .long 0x5e280803 //sha1h v3.16b,v0.16b // 14
  1159. .long 0x5e142040 //sha1m v0.16b,v2.16b,v20.4s
  1160. add v20.4s,v19.4s,v4.4s
  1161. .long 0x5e281885 //sha1su1 v5.16b,v4.16b
  1162. .long 0x5e0430e6 //sha1su0 v6.16b,v7.16b,v4.16b
  1163. .long 0x5e280802 //sha1h v2.16b,v0.16b // 15
  1164. .long 0x5e151060 //sha1p v0.16b,v3.16b,v21.4s
  1165. add v21.4s,v19.4s,v5.4s
  1166. .long 0x5e2818a6 //sha1su1 v6.16b,v5.16b
  1167. .long 0x5e053087 //sha1su0 v7.16b,v4.16b,v5.16b
  1168. .long 0x5e280803 //sha1h v3.16b,v0.16b // 16
  1169. .long 0x5e141040 //sha1p v0.16b,v2.16b,v20.4s
  1170. add v20.4s,v19.4s,v6.4s
  1171. .long 0x5e2818c7 //sha1su1 v7.16b,v6.16b
  1172. .long 0x5e280802 //sha1h v2.16b,v0.16b // 17
  1173. .long 0x5e151060 //sha1p v0.16b,v3.16b,v21.4s
  1174. add v21.4s,v19.4s,v7.4s
  1175. .long 0x5e280803 //sha1h v3.16b,v0.16b // 18
  1176. .long 0x5e141040 //sha1p v0.16b,v2.16b,v20.4s
  1177. .long 0x5e280802 //sha1h v2.16b,v0.16b // 19
  1178. .long 0x5e151060 //sha1p v0.16b,v3.16b,v21.4s
  1179. add v1.4s,v1.4s,v2.4s
  1180. add v0.4s,v0.4s,v22.4s
  1181. cbnz x2,Loop_hw
  1182. st1 {v0.4s},[x0],#16
  1183. st1 {v1.s}[0],[x0]
  1184. ldr x29,[sp],#16
  1185. ret
  1186. .align 6
  1187. Lconst:
  1188. .long 0x5a827999,0x5a827999,0x5a827999,0x5a827999 //K_00_19
  1189. .long 0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1 //K_20_39
  1190. .long 0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc //K_40_59
  1191. .long 0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6 //K_60_79
  1192. LOPENSSL_armcap_P:
  1193. #ifdef __ILP32__
  1194. .long _OPENSSL_armcap_P-.
  1195. #else
  1196. .quad _OPENSSL_armcap_P-.
  1197. #endif
  1198. .byte 83,72,65,49,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
  1199. .align 2
  1200. .align 2