sha1-armv8.S 28 KB

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