sha1-armv8.S 27 KB

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