sha1-armv8.S 28 KB

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