sha1-armv4-large.S 31 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490
  1. #include "arm_arch.h"
  2. .text
  3. #if defined(__thumb2__)
  4. .syntax unified
  5. .thumb
  6. #else
  7. .code 32
  8. #endif
  9. .global sha1_block_data_order
  10. .type sha1_block_data_order,%function
  11. .align 5
  12. sha1_block_data_order:
  13. #if __ARM_MAX_ARCH__>=7
  14. .Lsha1_block:
  15. adr r3,.Lsha1_block
  16. ldr r12,.LOPENSSL_armcap
  17. ldr r12,[r3,r12] @ OPENSSL_armcap_P
  18. #ifdef __APPLE__
  19. ldr r12,[r12]
  20. #endif
  21. tst r12,#ARMV8_SHA1
  22. bne .LARMv8
  23. tst r12,#ARMV7_NEON
  24. bne .LNEON
  25. #endif
  26. stmdb sp!,{r4-r12,lr}
  27. add r2,r1,r2,lsl#6 @ r2 to point at the end of r1
  28. ldmia r0,{r3,r4,r5,r6,r7}
  29. .Lloop:
  30. ldr r8,.LK_00_19
  31. mov r14,sp
  32. sub sp,sp,#15*4
  33. mov r5,r5,ror#30
  34. mov r6,r6,ror#30
  35. mov r7,r7,ror#30 @ [6]
  36. .L_00_15:
  37. #if __ARM_ARCH__<7
  38. ldrb r10,[r1,#2]
  39. ldrb r9,[r1,#3]
  40. ldrb r11,[r1,#1]
  41. add r7,r8,r7,ror#2 @ E+=K_00_19
  42. ldrb r12,[r1],#4
  43. orr r9,r9,r10,lsl#8
  44. eor r10,r5,r6 @ F_xx_xx
  45. orr r9,r9,r11,lsl#16
  46. add r7,r7,r3,ror#27 @ E+=ROR(A,27)
  47. orr r9,r9,r12,lsl#24
  48. #else
  49. ldr r9,[r1],#4 @ handles unaligned
  50. add r7,r8,r7,ror#2 @ E+=K_00_19
  51. eor r10,r5,r6 @ F_xx_xx
  52. add r7,r7,r3,ror#27 @ E+=ROR(A,27)
  53. #ifdef __ARMEL__
  54. rev r9,r9 @ byte swap
  55. #endif
  56. #endif
  57. and r10,r4,r10,ror#2
  58. add r7,r7,r9 @ E+=X[i]
  59. eor r10,r10,r6,ror#2 @ F_00_19(B,C,D)
  60. str r9,[r14,#-4]!
  61. add r7,r7,r10 @ E+=F_00_19(B,C,D)
  62. #if __ARM_ARCH__<7
  63. ldrb r10,[r1,#2]
  64. ldrb r9,[r1,#3]
  65. ldrb r11,[r1,#1]
  66. add r6,r8,r6,ror#2 @ E+=K_00_19
  67. ldrb r12,[r1],#4
  68. orr r9,r9,r10,lsl#8
  69. eor r10,r4,r5 @ F_xx_xx
  70. orr r9,r9,r11,lsl#16
  71. add r6,r6,r7,ror#27 @ E+=ROR(A,27)
  72. orr r9,r9,r12,lsl#24
  73. #else
  74. ldr r9,[r1],#4 @ handles unaligned
  75. add r6,r8,r6,ror#2 @ E+=K_00_19
  76. eor r10,r4,r5 @ F_xx_xx
  77. add r6,r6,r7,ror#27 @ E+=ROR(A,27)
  78. #ifdef __ARMEL__
  79. rev r9,r9 @ byte swap
  80. #endif
  81. #endif
  82. and r10,r3,r10,ror#2
  83. add r6,r6,r9 @ E+=X[i]
  84. eor r10,r10,r5,ror#2 @ F_00_19(B,C,D)
  85. str r9,[r14,#-4]!
  86. add r6,r6,r10 @ E+=F_00_19(B,C,D)
  87. #if __ARM_ARCH__<7
  88. ldrb r10,[r1,#2]
  89. ldrb r9,[r1,#3]
  90. ldrb r11,[r1,#1]
  91. add r5,r8,r5,ror#2 @ E+=K_00_19
  92. ldrb r12,[r1],#4
  93. orr r9,r9,r10,lsl#8
  94. eor r10,r3,r4 @ F_xx_xx
  95. orr r9,r9,r11,lsl#16
  96. add r5,r5,r6,ror#27 @ E+=ROR(A,27)
  97. orr r9,r9,r12,lsl#24
  98. #else
  99. ldr r9,[r1],#4 @ handles unaligned
  100. add r5,r8,r5,ror#2 @ E+=K_00_19
  101. eor r10,r3,r4 @ F_xx_xx
  102. add r5,r5,r6,ror#27 @ E+=ROR(A,27)
  103. #ifdef __ARMEL__
  104. rev r9,r9 @ byte swap
  105. #endif
  106. #endif
  107. and r10,r7,r10,ror#2
  108. add r5,r5,r9 @ E+=X[i]
  109. eor r10,r10,r4,ror#2 @ F_00_19(B,C,D)
  110. str r9,[r14,#-4]!
  111. add r5,r5,r10 @ E+=F_00_19(B,C,D)
  112. #if __ARM_ARCH__<7
  113. ldrb r10,[r1,#2]
  114. ldrb r9,[r1,#3]
  115. ldrb r11,[r1,#1]
  116. add r4,r8,r4,ror#2 @ E+=K_00_19
  117. ldrb r12,[r1],#4
  118. orr r9,r9,r10,lsl#8
  119. eor r10,r7,r3 @ F_xx_xx
  120. orr r9,r9,r11,lsl#16
  121. add r4,r4,r5,ror#27 @ E+=ROR(A,27)
  122. orr r9,r9,r12,lsl#24
  123. #else
  124. ldr r9,[r1],#4 @ handles unaligned
  125. add r4,r8,r4,ror#2 @ E+=K_00_19
  126. eor r10,r7,r3 @ F_xx_xx
  127. add r4,r4,r5,ror#27 @ E+=ROR(A,27)
  128. #ifdef __ARMEL__
  129. rev r9,r9 @ byte swap
  130. #endif
  131. #endif
  132. and r10,r6,r10,ror#2
  133. add r4,r4,r9 @ E+=X[i]
  134. eor r10,r10,r3,ror#2 @ F_00_19(B,C,D)
  135. str r9,[r14,#-4]!
  136. add r4,r4,r10 @ E+=F_00_19(B,C,D)
  137. #if __ARM_ARCH__<7
  138. ldrb r10,[r1,#2]
  139. ldrb r9,[r1,#3]
  140. ldrb r11,[r1,#1]
  141. add r3,r8,r3,ror#2 @ E+=K_00_19
  142. ldrb r12,[r1],#4
  143. orr r9,r9,r10,lsl#8
  144. eor r10,r6,r7 @ F_xx_xx
  145. orr r9,r9,r11,lsl#16
  146. add r3,r3,r4,ror#27 @ E+=ROR(A,27)
  147. orr r9,r9,r12,lsl#24
  148. #else
  149. ldr r9,[r1],#4 @ handles unaligned
  150. add r3,r8,r3,ror#2 @ E+=K_00_19
  151. eor r10,r6,r7 @ F_xx_xx
  152. add r3,r3,r4,ror#27 @ E+=ROR(A,27)
  153. #ifdef __ARMEL__
  154. rev r9,r9 @ byte swap
  155. #endif
  156. #endif
  157. and r10,r5,r10,ror#2
  158. add r3,r3,r9 @ E+=X[i]
  159. eor r10,r10,r7,ror#2 @ F_00_19(B,C,D)
  160. str r9,[r14,#-4]!
  161. add r3,r3,r10 @ E+=F_00_19(B,C,D)
  162. #if defined(__thumb2__)
  163. mov r12,sp
  164. teq r14,r12
  165. #else
  166. teq r14,sp
  167. #endif
  168. bne .L_00_15 @ [((11+4)*5+2)*3]
  169. sub sp,sp,#25*4
  170. #if __ARM_ARCH__<7
  171. ldrb r10,[r1,#2]
  172. ldrb r9,[r1,#3]
  173. ldrb r11,[r1,#1]
  174. add r7,r8,r7,ror#2 @ E+=K_00_19
  175. ldrb r12,[r1],#4
  176. orr r9,r9,r10,lsl#8
  177. eor r10,r5,r6 @ F_xx_xx
  178. orr r9,r9,r11,lsl#16
  179. add r7,r7,r3,ror#27 @ E+=ROR(A,27)
  180. orr r9,r9,r12,lsl#24
  181. #else
  182. ldr r9,[r1],#4 @ handles unaligned
  183. add r7,r8,r7,ror#2 @ E+=K_00_19
  184. eor r10,r5,r6 @ F_xx_xx
  185. add r7,r7,r3,ror#27 @ E+=ROR(A,27)
  186. #ifdef __ARMEL__
  187. rev r9,r9 @ byte swap
  188. #endif
  189. #endif
  190. and r10,r4,r10,ror#2
  191. add r7,r7,r9 @ E+=X[i]
  192. eor r10,r10,r6,ror#2 @ F_00_19(B,C,D)
  193. str r9,[r14,#-4]!
  194. add r7,r7,r10 @ E+=F_00_19(B,C,D)
  195. ldr r9,[r14,#15*4]
  196. ldr r10,[r14,#13*4]
  197. ldr r11,[r14,#7*4]
  198. add r6,r8,r6,ror#2 @ E+=K_xx_xx
  199. ldr r12,[r14,#2*4]
  200. eor r9,r9,r10
  201. eor r11,r11,r12 @ 1 cycle stall
  202. eor r10,r4,r5 @ F_xx_xx
  203. mov r9,r9,ror#31
  204. add r6,r6,r7,ror#27 @ E+=ROR(A,27)
  205. eor r9,r9,r11,ror#31
  206. str r9,[r14,#-4]!
  207. and r10,r3,r10,ror#2 @ F_xx_xx
  208. @ F_xx_xx
  209. add r6,r6,r9 @ E+=X[i]
  210. eor r10,r10,r5,ror#2 @ F_00_19(B,C,D)
  211. add r6,r6,r10 @ E+=F_00_19(B,C,D)
  212. ldr r9,[r14,#15*4]
  213. ldr r10,[r14,#13*4]
  214. ldr r11,[r14,#7*4]
  215. add r5,r8,r5,ror#2 @ E+=K_xx_xx
  216. ldr r12,[r14,#2*4]
  217. eor r9,r9,r10
  218. eor r11,r11,r12 @ 1 cycle stall
  219. eor r10,r3,r4 @ F_xx_xx
  220. mov r9,r9,ror#31
  221. add r5,r5,r6,ror#27 @ E+=ROR(A,27)
  222. eor r9,r9,r11,ror#31
  223. str r9,[r14,#-4]!
  224. and r10,r7,r10,ror#2 @ F_xx_xx
  225. @ F_xx_xx
  226. add r5,r5,r9 @ E+=X[i]
  227. eor r10,r10,r4,ror#2 @ F_00_19(B,C,D)
  228. add r5,r5,r10 @ E+=F_00_19(B,C,D)
  229. ldr r9,[r14,#15*4]
  230. ldr r10,[r14,#13*4]
  231. ldr r11,[r14,#7*4]
  232. add r4,r8,r4,ror#2 @ E+=K_xx_xx
  233. ldr r12,[r14,#2*4]
  234. eor r9,r9,r10
  235. eor r11,r11,r12 @ 1 cycle stall
  236. eor r10,r7,r3 @ F_xx_xx
  237. mov r9,r9,ror#31
  238. add r4,r4,r5,ror#27 @ E+=ROR(A,27)
  239. eor r9,r9,r11,ror#31
  240. str r9,[r14,#-4]!
  241. and r10,r6,r10,ror#2 @ F_xx_xx
  242. @ F_xx_xx
  243. add r4,r4,r9 @ E+=X[i]
  244. eor r10,r10,r3,ror#2 @ F_00_19(B,C,D)
  245. add r4,r4,r10 @ E+=F_00_19(B,C,D)
  246. ldr r9,[r14,#15*4]
  247. ldr r10,[r14,#13*4]
  248. ldr r11,[r14,#7*4]
  249. add r3,r8,r3,ror#2 @ E+=K_xx_xx
  250. ldr r12,[r14,#2*4]
  251. eor r9,r9,r10
  252. eor r11,r11,r12 @ 1 cycle stall
  253. eor r10,r6,r7 @ F_xx_xx
  254. mov r9,r9,ror#31
  255. add r3,r3,r4,ror#27 @ E+=ROR(A,27)
  256. eor r9,r9,r11,ror#31
  257. str r9,[r14,#-4]!
  258. and r10,r5,r10,ror#2 @ F_xx_xx
  259. @ F_xx_xx
  260. add r3,r3,r9 @ E+=X[i]
  261. eor r10,r10,r7,ror#2 @ F_00_19(B,C,D)
  262. add r3,r3,r10 @ E+=F_00_19(B,C,D)
  263. ldr r8,.LK_20_39 @ [+15+16*4]
  264. cmn sp,#0 @ [+3], clear carry to denote 20_39
  265. .L_20_39_or_60_79:
  266. ldr r9,[r14,#15*4]
  267. ldr r10,[r14,#13*4]
  268. ldr r11,[r14,#7*4]
  269. add r7,r8,r7,ror#2 @ E+=K_xx_xx
  270. ldr r12,[r14,#2*4]
  271. eor r9,r9,r10
  272. eor r11,r11,r12 @ 1 cycle stall
  273. eor r10,r5,r6 @ F_xx_xx
  274. mov r9,r9,ror#31
  275. add r7,r7,r3,ror#27 @ E+=ROR(A,27)
  276. eor r9,r9,r11,ror#31
  277. str r9,[r14,#-4]!
  278. eor r10,r4,r10,ror#2 @ F_xx_xx
  279. @ F_xx_xx
  280. add r7,r7,r9 @ E+=X[i]
  281. add r7,r7,r10 @ E+=F_20_39(B,C,D)
  282. ldr r9,[r14,#15*4]
  283. ldr r10,[r14,#13*4]
  284. ldr r11,[r14,#7*4]
  285. add r6,r8,r6,ror#2 @ E+=K_xx_xx
  286. ldr r12,[r14,#2*4]
  287. eor r9,r9,r10
  288. eor r11,r11,r12 @ 1 cycle stall
  289. eor r10,r4,r5 @ F_xx_xx
  290. mov r9,r9,ror#31
  291. add r6,r6,r7,ror#27 @ E+=ROR(A,27)
  292. eor r9,r9,r11,ror#31
  293. str r9,[r14,#-4]!
  294. eor r10,r3,r10,ror#2 @ F_xx_xx
  295. @ F_xx_xx
  296. add r6,r6,r9 @ E+=X[i]
  297. add r6,r6,r10 @ E+=F_20_39(B,C,D)
  298. ldr r9,[r14,#15*4]
  299. ldr r10,[r14,#13*4]
  300. ldr r11,[r14,#7*4]
  301. add r5,r8,r5,ror#2 @ E+=K_xx_xx
  302. ldr r12,[r14,#2*4]
  303. eor r9,r9,r10
  304. eor r11,r11,r12 @ 1 cycle stall
  305. eor r10,r3,r4 @ F_xx_xx
  306. mov r9,r9,ror#31
  307. add r5,r5,r6,ror#27 @ E+=ROR(A,27)
  308. eor r9,r9,r11,ror#31
  309. str r9,[r14,#-4]!
  310. eor r10,r7,r10,ror#2 @ F_xx_xx
  311. @ F_xx_xx
  312. add r5,r5,r9 @ E+=X[i]
  313. add r5,r5,r10 @ E+=F_20_39(B,C,D)
  314. ldr r9,[r14,#15*4]
  315. ldr r10,[r14,#13*4]
  316. ldr r11,[r14,#7*4]
  317. add r4,r8,r4,ror#2 @ E+=K_xx_xx
  318. ldr r12,[r14,#2*4]
  319. eor r9,r9,r10
  320. eor r11,r11,r12 @ 1 cycle stall
  321. eor r10,r7,r3 @ F_xx_xx
  322. mov r9,r9,ror#31
  323. add r4,r4,r5,ror#27 @ E+=ROR(A,27)
  324. eor r9,r9,r11,ror#31
  325. str r9,[r14,#-4]!
  326. eor r10,r6,r10,ror#2 @ F_xx_xx
  327. @ F_xx_xx
  328. add r4,r4,r9 @ E+=X[i]
  329. add r4,r4,r10 @ E+=F_20_39(B,C,D)
  330. ldr r9,[r14,#15*4]
  331. ldr r10,[r14,#13*4]
  332. ldr r11,[r14,#7*4]
  333. add r3,r8,r3,ror#2 @ E+=K_xx_xx
  334. ldr r12,[r14,#2*4]
  335. eor r9,r9,r10
  336. eor r11,r11,r12 @ 1 cycle stall
  337. eor r10,r6,r7 @ F_xx_xx
  338. mov r9,r9,ror#31
  339. add r3,r3,r4,ror#27 @ E+=ROR(A,27)
  340. eor r9,r9,r11,ror#31
  341. str r9,[r14,#-4]!
  342. eor r10,r5,r10,ror#2 @ F_xx_xx
  343. @ F_xx_xx
  344. add r3,r3,r9 @ E+=X[i]
  345. add r3,r3,r10 @ E+=F_20_39(B,C,D)
  346. #if defined(__thumb2__)
  347. mov r12,sp
  348. teq r14,r12
  349. #else
  350. teq r14,sp @ preserve carry
  351. #endif
  352. bne .L_20_39_or_60_79 @ [+((12+3)*5+2)*4]
  353. bcs .L_done @ [+((12+3)*5+2)*4], spare 300 bytes
  354. ldr r8,.LK_40_59
  355. sub sp,sp,#20*4 @ [+2]
  356. .L_40_59:
  357. ldr r9,[r14,#15*4]
  358. ldr r10,[r14,#13*4]
  359. ldr r11,[r14,#7*4]
  360. add r7,r8,r7,ror#2 @ E+=K_xx_xx
  361. ldr r12,[r14,#2*4]
  362. eor r9,r9,r10
  363. eor r11,r11,r12 @ 1 cycle stall
  364. eor r10,r5,r6 @ F_xx_xx
  365. mov r9,r9,ror#31
  366. add r7,r7,r3,ror#27 @ E+=ROR(A,27)
  367. eor r9,r9,r11,ror#31
  368. str r9,[r14,#-4]!
  369. and r10,r4,r10,ror#2 @ F_xx_xx
  370. and r11,r5,r6 @ F_xx_xx
  371. add r7,r7,r9 @ E+=X[i]
  372. add r7,r7,r10 @ E+=F_40_59(B,C,D)
  373. add r7,r7,r11,ror#2
  374. ldr r9,[r14,#15*4]
  375. ldr r10,[r14,#13*4]
  376. ldr r11,[r14,#7*4]
  377. add r6,r8,r6,ror#2 @ E+=K_xx_xx
  378. ldr r12,[r14,#2*4]
  379. eor r9,r9,r10
  380. eor r11,r11,r12 @ 1 cycle stall
  381. eor r10,r4,r5 @ F_xx_xx
  382. mov r9,r9,ror#31
  383. add r6,r6,r7,ror#27 @ E+=ROR(A,27)
  384. eor r9,r9,r11,ror#31
  385. str r9,[r14,#-4]!
  386. and r10,r3,r10,ror#2 @ F_xx_xx
  387. and r11,r4,r5 @ F_xx_xx
  388. add r6,r6,r9 @ E+=X[i]
  389. add r6,r6,r10 @ E+=F_40_59(B,C,D)
  390. add r6,r6,r11,ror#2
  391. ldr r9,[r14,#15*4]
  392. ldr r10,[r14,#13*4]
  393. ldr r11,[r14,#7*4]
  394. add r5,r8,r5,ror#2 @ E+=K_xx_xx
  395. ldr r12,[r14,#2*4]
  396. eor r9,r9,r10
  397. eor r11,r11,r12 @ 1 cycle stall
  398. eor r10,r3,r4 @ F_xx_xx
  399. mov r9,r9,ror#31
  400. add r5,r5,r6,ror#27 @ E+=ROR(A,27)
  401. eor r9,r9,r11,ror#31
  402. str r9,[r14,#-4]!
  403. and r10,r7,r10,ror#2 @ F_xx_xx
  404. and r11,r3,r4 @ F_xx_xx
  405. add r5,r5,r9 @ E+=X[i]
  406. add r5,r5,r10 @ E+=F_40_59(B,C,D)
  407. add r5,r5,r11,ror#2
  408. ldr r9,[r14,#15*4]
  409. ldr r10,[r14,#13*4]
  410. ldr r11,[r14,#7*4]
  411. add r4,r8,r4,ror#2 @ E+=K_xx_xx
  412. ldr r12,[r14,#2*4]
  413. eor r9,r9,r10
  414. eor r11,r11,r12 @ 1 cycle stall
  415. eor r10,r7,r3 @ F_xx_xx
  416. mov r9,r9,ror#31
  417. add r4,r4,r5,ror#27 @ E+=ROR(A,27)
  418. eor r9,r9,r11,ror#31
  419. str r9,[r14,#-4]!
  420. and r10,r6,r10,ror#2 @ F_xx_xx
  421. and r11,r7,r3 @ F_xx_xx
  422. add r4,r4,r9 @ E+=X[i]
  423. add r4,r4,r10 @ E+=F_40_59(B,C,D)
  424. add r4,r4,r11,ror#2
  425. ldr r9,[r14,#15*4]
  426. ldr r10,[r14,#13*4]
  427. ldr r11,[r14,#7*4]
  428. add r3,r8,r3,ror#2 @ E+=K_xx_xx
  429. ldr r12,[r14,#2*4]
  430. eor r9,r9,r10
  431. eor r11,r11,r12 @ 1 cycle stall
  432. eor r10,r6,r7 @ F_xx_xx
  433. mov r9,r9,ror#31
  434. add r3,r3,r4,ror#27 @ E+=ROR(A,27)
  435. eor r9,r9,r11,ror#31
  436. str r9,[r14,#-4]!
  437. and r10,r5,r10,ror#2 @ F_xx_xx
  438. and r11,r6,r7 @ F_xx_xx
  439. add r3,r3,r9 @ E+=X[i]
  440. add r3,r3,r10 @ E+=F_40_59(B,C,D)
  441. add r3,r3,r11,ror#2
  442. #if defined(__thumb2__)
  443. mov r12,sp
  444. teq r14,r12
  445. #else
  446. teq r14,sp
  447. #endif
  448. bne .L_40_59 @ [+((12+5)*5+2)*4]
  449. ldr r8,.LK_60_79
  450. sub sp,sp,#20*4
  451. cmp sp,#0 @ set carry to denote 60_79
  452. b .L_20_39_or_60_79 @ [+4], spare 300 bytes
  453. .L_done:
  454. add sp,sp,#80*4 @ "deallocate" stack frame
  455. ldmia r0,{r8,r9,r10,r11,r12}
  456. add r3,r8,r3
  457. add r4,r9,r4
  458. add r5,r10,r5,ror#2
  459. add r6,r11,r6,ror#2
  460. add r7,r12,r7,ror#2
  461. stmia r0,{r3,r4,r5,r6,r7}
  462. teq r1,r2
  463. bne .Lloop @ [+18], total 1307
  464. #if __ARM_ARCH__>=5
  465. ldmia sp!,{r4-r12,pc}
  466. #else
  467. ldmia sp!,{r4-r12,lr}
  468. tst lr,#1
  469. moveq pc,lr @ be binary compatible with V4, yet
  470. .word 0xe12fff1e @ interoperable with Thumb ISA:-)
  471. #endif
  472. .size sha1_block_data_order,.-sha1_block_data_order
  473. .align 5
  474. .LK_00_19: .word 0x5a827999
  475. .LK_20_39: .word 0x6ed9eba1
  476. .LK_40_59: .word 0x8f1bbcdc
  477. .LK_60_79: .word 0xca62c1d6
  478. #if __ARM_MAX_ARCH__>=7
  479. .LOPENSSL_armcap:
  480. .word OPENSSL_armcap_P-.Lsha1_block
  481. #endif
  482. .asciz "SHA1 block transform for ARMv4/NEON/ARMv8, CRYPTOGAMS by <appro@openssl.org>"
  483. .align 5
  484. #if __ARM_MAX_ARCH__>=7
  485. .arch armv7-a
  486. .fpu neon
  487. .type sha1_block_data_order_neon,%function
  488. .align 4
  489. sha1_block_data_order_neon:
  490. .LNEON:
  491. stmdb sp!,{r4-r12,lr}
  492. add r2,r1,r2,lsl#6 @ r2 to point at the end of r1
  493. @ dmb @ errata #451034 on early Cortex A8
  494. @ vstmdb sp!,{d8-d15} @ ABI specification says so
  495. mov r14,sp
  496. sub r12,sp,#64
  497. adr r8,.LK_00_19
  498. bic r12,r12,#15 @ align for 128-bit stores
  499. ldmia r0,{r3,r4,r5,r6,r7} @ load context
  500. mov sp,r12 @ alloca
  501. vld1.8 {q0-q1},[r1]! @ handles unaligned
  502. veor q15,q15,q15
  503. vld1.8 {q2-q3},[r1]!
  504. vld1.32 {d28[],d29[]},[r8,:32]! @ load K_00_19
  505. vrev32.8 q0,q0 @ yes, even on
  506. vrev32.8 q1,q1 @ big-endian...
  507. vrev32.8 q2,q2
  508. vadd.i32 q8,q0,q14
  509. vrev32.8 q3,q3
  510. vadd.i32 q9,q1,q14
  511. vst1.32 {q8},[r12,:128]!
  512. vadd.i32 q10,q2,q14
  513. vst1.32 {q9},[r12,:128]!
  514. vst1.32 {q10},[r12,:128]!
  515. ldr r9,[sp] @ big RAW stall
  516. .Loop_neon:
  517. vext.8 q8,q0,q1,#8
  518. bic r10,r6,r4
  519. add r7,r7,r9
  520. and r11,r5,r4
  521. vadd.i32 q13,q3,q14
  522. ldr r9,[sp,#4]
  523. add r7,r7,r3,ror#27
  524. vext.8 q12,q3,q15,#4
  525. eor r11,r11,r10
  526. mov r4,r4,ror#2
  527. add r7,r7,r11
  528. veor q8,q8,q0
  529. bic r10,r5,r3
  530. add r6,r6,r9
  531. veor q12,q12,q2
  532. and r11,r4,r3
  533. ldr r9,[sp,#8]
  534. veor q12,q12,q8
  535. add r6,r6,r7,ror#27
  536. eor r11,r11,r10
  537. vst1.32 {q13},[r12,:128]!
  538. sub r12,r12,#64
  539. mov r3,r3,ror#2
  540. add r6,r6,r11
  541. vext.8 q13,q15,q12,#4
  542. bic r10,r4,r7
  543. add r5,r5,r9
  544. vadd.i32 q8,q12,q12
  545. and r11,r3,r7
  546. ldr r9,[sp,#12]
  547. vsri.32 q8,q12,#31
  548. add r5,r5,r6,ror#27
  549. eor r11,r11,r10
  550. mov r7,r7,ror#2
  551. vshr.u32 q12,q13,#30
  552. add r5,r5,r11
  553. bic r10,r3,r6
  554. vshl.u32 q13,q13,#2
  555. add r4,r4,r9
  556. and r11,r7,r6
  557. veor q8,q8,q12
  558. ldr r9,[sp,#16]
  559. add r4,r4,r5,ror#27
  560. veor q8,q8,q13
  561. eor r11,r11,r10
  562. mov r6,r6,ror#2
  563. add r4,r4,r11
  564. vext.8 q9,q1,q2,#8
  565. bic r10,r7,r5
  566. add r3,r3,r9
  567. and r11,r6,r5
  568. vadd.i32 q13,q8,q14
  569. ldr r9,[sp,#20]
  570. vld1.32 {d28[],d29[]},[r8,:32]!
  571. add r3,r3,r4,ror#27
  572. vext.8 q12,q8,q15,#4
  573. eor r11,r11,r10
  574. mov r5,r5,ror#2
  575. add r3,r3,r11
  576. veor q9,q9,q1
  577. bic r10,r6,r4
  578. add r7,r7,r9
  579. veor q12,q12,q3
  580. and r11,r5,r4
  581. ldr r9,[sp,#24]
  582. veor q12,q12,q9
  583. add r7,r7,r3,ror#27
  584. eor r11,r11,r10
  585. vst1.32 {q13},[r12,:128]!
  586. mov r4,r4,ror#2
  587. add r7,r7,r11
  588. vext.8 q13,q15,q12,#4
  589. bic r10,r5,r3
  590. add r6,r6,r9
  591. vadd.i32 q9,q12,q12
  592. and r11,r4,r3
  593. ldr r9,[sp,#28]
  594. vsri.32 q9,q12,#31
  595. add r6,r6,r7,ror#27
  596. eor r11,r11,r10
  597. mov r3,r3,ror#2
  598. vshr.u32 q12,q13,#30
  599. add r6,r6,r11
  600. bic r10,r4,r7
  601. vshl.u32 q13,q13,#2
  602. add r5,r5,r9
  603. and r11,r3,r7
  604. veor q9,q9,q12
  605. ldr r9,[sp,#32]
  606. add r5,r5,r6,ror#27
  607. veor q9,q9,q13
  608. eor r11,r11,r10
  609. mov r7,r7,ror#2
  610. add r5,r5,r11
  611. vext.8 q10,q2,q3,#8
  612. bic r10,r3,r6
  613. add r4,r4,r9
  614. and r11,r7,r6
  615. vadd.i32 q13,q9,q14
  616. ldr r9,[sp,#36]
  617. add r4,r4,r5,ror#27
  618. vext.8 q12,q9,q15,#4
  619. eor r11,r11,r10
  620. mov r6,r6,ror#2
  621. add r4,r4,r11
  622. veor q10,q10,q2
  623. bic r10,r7,r5
  624. add r3,r3,r9
  625. veor q12,q12,q8
  626. and r11,r6,r5
  627. ldr r9,[sp,#40]
  628. veor q12,q12,q10
  629. add r3,r3,r4,ror#27
  630. eor r11,r11,r10
  631. vst1.32 {q13},[r12,:128]!
  632. mov r5,r5,ror#2
  633. add r3,r3,r11
  634. vext.8 q13,q15,q12,#4
  635. bic r10,r6,r4
  636. add r7,r7,r9
  637. vadd.i32 q10,q12,q12
  638. and r11,r5,r4
  639. ldr r9,[sp,#44]
  640. vsri.32 q10,q12,#31
  641. add r7,r7,r3,ror#27
  642. eor r11,r11,r10
  643. mov r4,r4,ror#2
  644. vshr.u32 q12,q13,#30
  645. add r7,r7,r11
  646. bic r10,r5,r3
  647. vshl.u32 q13,q13,#2
  648. add r6,r6,r9
  649. and r11,r4,r3
  650. veor q10,q10,q12
  651. ldr r9,[sp,#48]
  652. add r6,r6,r7,ror#27
  653. veor q10,q10,q13
  654. eor r11,r11,r10
  655. mov r3,r3,ror#2
  656. add r6,r6,r11
  657. vext.8 q11,q3,q8,#8
  658. bic r10,r4,r7
  659. add r5,r5,r9
  660. and r11,r3,r7
  661. vadd.i32 q13,q10,q14
  662. ldr r9,[sp,#52]
  663. add r5,r5,r6,ror#27
  664. vext.8 q12,q10,q15,#4
  665. eor r11,r11,r10
  666. mov r7,r7,ror#2
  667. add r5,r5,r11
  668. veor q11,q11,q3
  669. bic r10,r3,r6
  670. add r4,r4,r9
  671. veor q12,q12,q9
  672. and r11,r7,r6
  673. ldr r9,[sp,#56]
  674. veor q12,q12,q11
  675. add r4,r4,r5,ror#27
  676. eor r11,r11,r10
  677. vst1.32 {q13},[r12,:128]!
  678. mov r6,r6,ror#2
  679. add r4,r4,r11
  680. vext.8 q13,q15,q12,#4
  681. bic r10,r7,r5
  682. add r3,r3,r9
  683. vadd.i32 q11,q12,q12
  684. and r11,r6,r5
  685. ldr r9,[sp,#60]
  686. vsri.32 q11,q12,#31
  687. add r3,r3,r4,ror#27
  688. eor r11,r11,r10
  689. mov r5,r5,ror#2
  690. vshr.u32 q12,q13,#30
  691. add r3,r3,r11
  692. bic r10,r6,r4
  693. vshl.u32 q13,q13,#2
  694. add r7,r7,r9
  695. and r11,r5,r4
  696. veor q11,q11,q12
  697. ldr r9,[sp,#0]
  698. add r7,r7,r3,ror#27
  699. veor q11,q11,q13
  700. eor r11,r11,r10
  701. mov r4,r4,ror#2
  702. add r7,r7,r11
  703. vext.8 q12,q10,q11,#8
  704. bic r10,r5,r3
  705. add r6,r6,r9
  706. and r11,r4,r3
  707. veor q0,q0,q8
  708. ldr r9,[sp,#4]
  709. add r6,r6,r7,ror#27
  710. veor q0,q0,q1
  711. eor r11,r11,r10
  712. mov r3,r3,ror#2
  713. vadd.i32 q13,q11,q14
  714. add r6,r6,r11
  715. bic r10,r4,r7
  716. veor q12,q12,q0
  717. add r5,r5,r9
  718. and r11,r3,r7
  719. vshr.u32 q0,q12,#30
  720. ldr r9,[sp,#8]
  721. add r5,r5,r6,ror#27
  722. vst1.32 {q13},[r12,:128]!
  723. sub r12,r12,#64
  724. eor r11,r11,r10
  725. mov r7,r7,ror#2
  726. vsli.32 q0,q12,#2
  727. add r5,r5,r11
  728. bic r10,r3,r6
  729. add r4,r4,r9
  730. and r11,r7,r6
  731. ldr r9,[sp,#12]
  732. add r4,r4,r5,ror#27
  733. eor r11,r11,r10
  734. mov r6,r6,ror#2
  735. add r4,r4,r11
  736. bic r10,r7,r5
  737. add r3,r3,r9
  738. and r11,r6,r5
  739. ldr r9,[sp,#16]
  740. add r3,r3,r4,ror#27
  741. eor r11,r11,r10
  742. mov r5,r5,ror#2
  743. add r3,r3,r11
  744. vext.8 q12,q11,q0,#8
  745. eor r10,r4,r6
  746. add r7,r7,r9
  747. ldr r9,[sp,#20]
  748. veor q1,q1,q9
  749. eor r11,r10,r5
  750. add r7,r7,r3,ror#27
  751. veor q1,q1,q2
  752. mov r4,r4,ror#2
  753. add r7,r7,r11
  754. vadd.i32 q13,q0,q14
  755. eor r10,r3,r5
  756. add r6,r6,r9
  757. veor q12,q12,q1
  758. ldr r9,[sp,#24]
  759. eor r11,r10,r4
  760. vshr.u32 q1,q12,#30
  761. add r6,r6,r7,ror#27
  762. mov r3,r3,ror#2
  763. vst1.32 {q13},[r12,:128]!
  764. add r6,r6,r11
  765. eor r10,r7,r4
  766. vsli.32 q1,q12,#2
  767. add r5,r5,r9
  768. ldr r9,[sp,#28]
  769. eor r11,r10,r3
  770. add r5,r5,r6,ror#27
  771. mov r7,r7,ror#2
  772. add r5,r5,r11
  773. eor r10,r6,r3
  774. add r4,r4,r9
  775. ldr r9,[sp,#32]
  776. eor r11,r10,r7
  777. add r4,r4,r5,ror#27
  778. mov r6,r6,ror#2
  779. add r4,r4,r11
  780. vext.8 q12,q0,q1,#8
  781. eor r10,r5,r7
  782. add r3,r3,r9
  783. ldr r9,[sp,#36]
  784. veor q2,q2,q10
  785. eor r11,r10,r6
  786. add r3,r3,r4,ror#27
  787. veor q2,q2,q3
  788. mov r5,r5,ror#2
  789. add r3,r3,r11
  790. vadd.i32 q13,q1,q14
  791. eor r10,r4,r6
  792. vld1.32 {d28[],d29[]},[r8,:32]!
  793. add r7,r7,r9
  794. veor q12,q12,q2
  795. ldr r9,[sp,#40]
  796. eor r11,r10,r5
  797. vshr.u32 q2,q12,#30
  798. add r7,r7,r3,ror#27
  799. mov r4,r4,ror#2
  800. vst1.32 {q13},[r12,:128]!
  801. add r7,r7,r11
  802. eor r10,r3,r5
  803. vsli.32 q2,q12,#2
  804. add r6,r6,r9
  805. ldr r9,[sp,#44]
  806. eor r11,r10,r4
  807. add r6,r6,r7,ror#27
  808. mov r3,r3,ror#2
  809. add r6,r6,r11
  810. eor r10,r7,r4
  811. add r5,r5,r9
  812. ldr r9,[sp,#48]
  813. eor r11,r10,r3
  814. add r5,r5,r6,ror#27
  815. mov r7,r7,ror#2
  816. add r5,r5,r11
  817. vext.8 q12,q1,q2,#8
  818. eor r10,r6,r3
  819. add r4,r4,r9
  820. ldr r9,[sp,#52]
  821. veor q3,q3,q11
  822. eor r11,r10,r7
  823. add r4,r4,r5,ror#27
  824. veor q3,q3,q8
  825. mov r6,r6,ror#2
  826. add r4,r4,r11
  827. vadd.i32 q13,q2,q14
  828. eor r10,r5,r7
  829. add r3,r3,r9
  830. veor q12,q12,q3
  831. ldr r9,[sp,#56]
  832. eor r11,r10,r6
  833. vshr.u32 q3,q12,#30
  834. add r3,r3,r4,ror#27
  835. mov r5,r5,ror#2
  836. vst1.32 {q13},[r12,:128]!
  837. add r3,r3,r11
  838. eor r10,r4,r6
  839. vsli.32 q3,q12,#2
  840. add r7,r7,r9
  841. ldr r9,[sp,#60]
  842. eor r11,r10,r5
  843. add r7,r7,r3,ror#27
  844. mov r4,r4,ror#2
  845. add r7,r7,r11
  846. eor r10,r3,r5
  847. add r6,r6,r9
  848. ldr r9,[sp,#0]
  849. eor r11,r10,r4
  850. add r6,r6,r7,ror#27
  851. mov r3,r3,ror#2
  852. add r6,r6,r11
  853. vext.8 q12,q2,q3,#8
  854. eor r10,r7,r4
  855. add r5,r5,r9
  856. ldr r9,[sp,#4]
  857. veor q8,q8,q0
  858. eor r11,r10,r3
  859. add r5,r5,r6,ror#27
  860. veor q8,q8,q9
  861. mov r7,r7,ror#2
  862. add r5,r5,r11
  863. vadd.i32 q13,q3,q14
  864. eor r10,r6,r3
  865. add r4,r4,r9
  866. veor q12,q12,q8
  867. ldr r9,[sp,#8]
  868. eor r11,r10,r7
  869. vshr.u32 q8,q12,#30
  870. add r4,r4,r5,ror#27
  871. mov r6,r6,ror#2
  872. vst1.32 {q13},[r12,:128]!
  873. sub r12,r12,#64
  874. add r4,r4,r11
  875. eor r10,r5,r7
  876. vsli.32 q8,q12,#2
  877. add r3,r3,r9
  878. ldr r9,[sp,#12]
  879. eor r11,r10,r6
  880. add r3,r3,r4,ror#27
  881. mov r5,r5,ror#2
  882. add r3,r3,r11
  883. eor r10,r4,r6
  884. add r7,r7,r9
  885. ldr r9,[sp,#16]
  886. eor r11,r10,r5
  887. add r7,r7,r3,ror#27
  888. mov r4,r4,ror#2
  889. add r7,r7,r11
  890. vext.8 q12,q3,q8,#8
  891. eor r10,r3,r5
  892. add r6,r6,r9
  893. ldr r9,[sp,#20]
  894. veor q9,q9,q1
  895. eor r11,r10,r4
  896. add r6,r6,r7,ror#27
  897. veor q9,q9,q10
  898. mov r3,r3,ror#2
  899. add r6,r6,r11
  900. vadd.i32 q13,q8,q14
  901. eor r10,r7,r4
  902. add r5,r5,r9
  903. veor q12,q12,q9
  904. ldr r9,[sp,#24]
  905. eor r11,r10,r3
  906. vshr.u32 q9,q12,#30
  907. add r5,r5,r6,ror#27
  908. mov r7,r7,ror#2
  909. vst1.32 {q13},[r12,:128]!
  910. add r5,r5,r11
  911. eor r10,r6,r3
  912. vsli.32 q9,q12,#2
  913. add r4,r4,r9
  914. ldr r9,[sp,#28]
  915. eor r11,r10,r7
  916. add r4,r4,r5,ror#27
  917. mov r6,r6,ror#2
  918. add r4,r4,r11
  919. eor r10,r5,r7
  920. add r3,r3,r9
  921. ldr r9,[sp,#32]
  922. eor r11,r10,r6
  923. add r3,r3,r4,ror#27
  924. mov r5,r5,ror#2
  925. add r3,r3,r11
  926. vext.8 q12,q8,q9,#8
  927. add r7,r7,r9
  928. and r10,r5,r6
  929. ldr r9,[sp,#36]
  930. veor q10,q10,q2
  931. add r7,r7,r3,ror#27
  932. eor r11,r5,r6
  933. veor q10,q10,q11
  934. add r7,r7,r10
  935. and r11,r11,r4
  936. vadd.i32 q13,q9,q14
  937. mov r4,r4,ror#2
  938. add r7,r7,r11
  939. veor q12,q12,q10
  940. add r6,r6,r9
  941. and r10,r4,r5
  942. vshr.u32 q10,q12,#30
  943. ldr r9,[sp,#40]
  944. add r6,r6,r7,ror#27
  945. vst1.32 {q13},[r12,:128]!
  946. eor r11,r4,r5
  947. add r6,r6,r10
  948. vsli.32 q10,q12,#2
  949. and r11,r11,r3
  950. mov r3,r3,ror#2
  951. add r6,r6,r11
  952. add r5,r5,r9
  953. and r10,r3,r4
  954. ldr r9,[sp,#44]
  955. add r5,r5,r6,ror#27
  956. eor r11,r3,r4
  957. add r5,r5,r10
  958. and r11,r11,r7
  959. mov r7,r7,ror#2
  960. add r5,r5,r11
  961. add r4,r4,r9
  962. and r10,r7,r3
  963. ldr r9,[sp,#48]
  964. add r4,r4,r5,ror#27
  965. eor r11,r7,r3
  966. add r4,r4,r10
  967. and r11,r11,r6
  968. mov r6,r6,ror#2
  969. add r4,r4,r11
  970. vext.8 q12,q9,q10,#8
  971. add r3,r3,r9
  972. and r10,r6,r7
  973. ldr r9,[sp,#52]
  974. veor q11,q11,q3
  975. add r3,r3,r4,ror#27
  976. eor r11,r6,r7
  977. veor q11,q11,q0
  978. add r3,r3,r10
  979. and r11,r11,r5
  980. vadd.i32 q13,q10,q14
  981. mov r5,r5,ror#2
  982. vld1.32 {d28[],d29[]},[r8,:32]!
  983. add r3,r3,r11
  984. veor q12,q12,q11
  985. add r7,r7,r9
  986. and r10,r5,r6
  987. vshr.u32 q11,q12,#30
  988. ldr r9,[sp,#56]
  989. add r7,r7,r3,ror#27
  990. vst1.32 {q13},[r12,:128]!
  991. eor r11,r5,r6
  992. add r7,r7,r10
  993. vsli.32 q11,q12,#2
  994. and r11,r11,r4
  995. mov r4,r4,ror#2
  996. add r7,r7,r11
  997. add r6,r6,r9
  998. and r10,r4,r5
  999. ldr r9,[sp,#60]
  1000. add r6,r6,r7,ror#27
  1001. eor r11,r4,r5
  1002. add r6,r6,r10
  1003. and r11,r11,r3
  1004. mov r3,r3,ror#2
  1005. add r6,r6,r11
  1006. add r5,r5,r9
  1007. and r10,r3,r4
  1008. ldr r9,[sp,#0]
  1009. add r5,r5,r6,ror#27
  1010. eor r11,r3,r4
  1011. add r5,r5,r10
  1012. and r11,r11,r7
  1013. mov r7,r7,ror#2
  1014. add r5,r5,r11
  1015. vext.8 q12,q10,q11,#8
  1016. add r4,r4,r9
  1017. and r10,r7,r3
  1018. ldr r9,[sp,#4]
  1019. veor q0,q0,q8
  1020. add r4,r4,r5,ror#27
  1021. eor r11,r7,r3
  1022. veor q0,q0,q1
  1023. add r4,r4,r10
  1024. and r11,r11,r6
  1025. vadd.i32 q13,q11,q14
  1026. mov r6,r6,ror#2
  1027. add r4,r4,r11
  1028. veor q12,q12,q0
  1029. add r3,r3,r9
  1030. and r10,r6,r7
  1031. vshr.u32 q0,q12,#30
  1032. ldr r9,[sp,#8]
  1033. add r3,r3,r4,ror#27
  1034. vst1.32 {q13},[r12,:128]!
  1035. sub r12,r12,#64
  1036. eor r11,r6,r7
  1037. add r3,r3,r10
  1038. vsli.32 q0,q12,#2
  1039. and r11,r11,r5
  1040. mov r5,r5,ror#2
  1041. add r3,r3,r11
  1042. add r7,r7,r9
  1043. and r10,r5,r6
  1044. ldr r9,[sp,#12]
  1045. add r7,r7,r3,ror#27
  1046. eor r11,r5,r6
  1047. add r7,r7,r10
  1048. and r11,r11,r4
  1049. mov r4,r4,ror#2
  1050. add r7,r7,r11
  1051. add r6,r6,r9
  1052. and r10,r4,r5
  1053. ldr r9,[sp,#16]
  1054. add r6,r6,r7,ror#27
  1055. eor r11,r4,r5
  1056. add r6,r6,r10
  1057. and r11,r11,r3
  1058. mov r3,r3,ror#2
  1059. add r6,r6,r11
  1060. vext.8 q12,q11,q0,#8
  1061. add r5,r5,r9
  1062. and r10,r3,r4
  1063. ldr r9,[sp,#20]
  1064. veor q1,q1,q9
  1065. add r5,r5,r6,ror#27
  1066. eor r11,r3,r4
  1067. veor q1,q1,q2
  1068. add r5,r5,r10
  1069. and r11,r11,r7
  1070. vadd.i32 q13,q0,q14
  1071. mov r7,r7,ror#2
  1072. add r5,r5,r11
  1073. veor q12,q12,q1
  1074. add r4,r4,r9
  1075. and r10,r7,r3
  1076. vshr.u32 q1,q12,#30
  1077. ldr r9,[sp,#24]
  1078. add r4,r4,r5,ror#27
  1079. vst1.32 {q13},[r12,:128]!
  1080. eor r11,r7,r3
  1081. add r4,r4,r10
  1082. vsli.32 q1,q12,#2
  1083. and r11,r11,r6
  1084. mov r6,r6,ror#2
  1085. add r4,r4,r11
  1086. add r3,r3,r9
  1087. and r10,r6,r7
  1088. ldr r9,[sp,#28]
  1089. add r3,r3,r4,ror#27
  1090. eor r11,r6,r7
  1091. add r3,r3,r10
  1092. and r11,r11,r5
  1093. mov r5,r5,ror#2
  1094. add r3,r3,r11
  1095. add r7,r7,r9
  1096. and r10,r5,r6
  1097. ldr r9,[sp,#32]
  1098. add r7,r7,r3,ror#27
  1099. eor r11,r5,r6
  1100. add r7,r7,r10
  1101. and r11,r11,r4
  1102. mov r4,r4,ror#2
  1103. add r7,r7,r11
  1104. vext.8 q12,q0,q1,#8
  1105. add r6,r6,r9
  1106. and r10,r4,r5
  1107. ldr r9,[sp,#36]
  1108. veor q2,q2,q10
  1109. add r6,r6,r7,ror#27
  1110. eor r11,r4,r5
  1111. veor q2,q2,q3
  1112. add r6,r6,r10
  1113. and r11,r11,r3
  1114. vadd.i32 q13,q1,q14
  1115. mov r3,r3,ror#2
  1116. add r6,r6,r11
  1117. veor q12,q12,q2
  1118. add r5,r5,r9
  1119. and r10,r3,r4
  1120. vshr.u32 q2,q12,#30
  1121. ldr r9,[sp,#40]
  1122. add r5,r5,r6,ror#27
  1123. vst1.32 {q13},[r12,:128]!
  1124. eor r11,r3,r4
  1125. add r5,r5,r10
  1126. vsli.32 q2,q12,#2
  1127. and r11,r11,r7
  1128. mov r7,r7,ror#2
  1129. add r5,r5,r11
  1130. add r4,r4,r9
  1131. and r10,r7,r3
  1132. ldr r9,[sp,#44]
  1133. add r4,r4,r5,ror#27
  1134. eor r11,r7,r3
  1135. add r4,r4,r10
  1136. and r11,r11,r6
  1137. mov r6,r6,ror#2
  1138. add r4,r4,r11
  1139. add r3,r3,r9
  1140. and r10,r6,r7
  1141. ldr r9,[sp,#48]
  1142. add r3,r3,r4,ror#27
  1143. eor r11,r6,r7
  1144. add r3,r3,r10
  1145. and r11,r11,r5
  1146. mov r5,r5,ror#2
  1147. add r3,r3,r11
  1148. vext.8 q12,q1,q2,#8
  1149. eor r10,r4,r6
  1150. add r7,r7,r9
  1151. ldr r9,[sp,#52]
  1152. veor q3,q3,q11
  1153. eor r11,r10,r5
  1154. add r7,r7,r3,ror#27
  1155. veor q3,q3,q8
  1156. mov r4,r4,ror#2
  1157. add r7,r7,r11
  1158. vadd.i32 q13,q2,q14
  1159. eor r10,r3,r5
  1160. add r6,r6,r9
  1161. veor q12,q12,q3
  1162. ldr r9,[sp,#56]
  1163. eor r11,r10,r4
  1164. vshr.u32 q3,q12,#30
  1165. add r6,r6,r7,ror#27
  1166. mov r3,r3,ror#2
  1167. vst1.32 {q13},[r12,:128]!
  1168. add r6,r6,r11
  1169. eor r10,r7,r4
  1170. vsli.32 q3,q12,#2
  1171. add r5,r5,r9
  1172. ldr r9,[sp,#60]
  1173. eor r11,r10,r3
  1174. add r5,r5,r6,ror#27
  1175. mov r7,r7,ror#2
  1176. add r5,r5,r11
  1177. eor r10,r6,r3
  1178. add r4,r4,r9
  1179. ldr r9,[sp,#0]
  1180. eor r11,r10,r7
  1181. add r4,r4,r5,ror#27
  1182. mov r6,r6,ror#2
  1183. add r4,r4,r11
  1184. vadd.i32 q13,q3,q14
  1185. eor r10,r5,r7
  1186. add r3,r3,r9
  1187. vst1.32 {q13},[r12,:128]!
  1188. sub r12,r12,#64
  1189. teq r1,r2
  1190. sub r8,r8,#16
  1191. it eq
  1192. subeq r1,r1,#64
  1193. vld1.8 {q0-q1},[r1]!
  1194. ldr r9,[sp,#4]
  1195. eor r11,r10,r6
  1196. vld1.8 {q2-q3},[r1]!
  1197. add r3,r3,r4,ror#27
  1198. mov r5,r5,ror#2
  1199. vld1.32 {d28[],d29[]},[r8,:32]!
  1200. add r3,r3,r11
  1201. eor r10,r4,r6
  1202. vrev32.8 q0,q0
  1203. add r7,r7,r9
  1204. ldr r9,[sp,#8]
  1205. eor r11,r10,r5
  1206. add r7,r7,r3,ror#27
  1207. mov r4,r4,ror#2
  1208. add r7,r7,r11
  1209. eor r10,r3,r5
  1210. add r6,r6,r9
  1211. ldr r9,[sp,#12]
  1212. eor r11,r10,r4
  1213. add r6,r6,r7,ror#27
  1214. mov r3,r3,ror#2
  1215. add r6,r6,r11
  1216. eor r10,r7,r4
  1217. add r5,r5,r9
  1218. ldr r9,[sp,#16]
  1219. eor r11,r10,r3
  1220. add r5,r5,r6,ror#27
  1221. mov r7,r7,ror#2
  1222. add r5,r5,r11
  1223. vrev32.8 q1,q1
  1224. eor r10,r6,r3
  1225. add r4,r4,r9
  1226. vadd.i32 q8,q0,q14
  1227. ldr r9,[sp,#20]
  1228. eor r11,r10,r7
  1229. vst1.32 {q8},[r12,:128]!
  1230. add r4,r4,r5,ror#27
  1231. mov r6,r6,ror#2
  1232. add r4,r4,r11
  1233. eor r10,r5,r7
  1234. add r3,r3,r9
  1235. ldr r9,[sp,#24]
  1236. eor r11,r10,r6
  1237. add r3,r3,r4,ror#27
  1238. mov r5,r5,ror#2
  1239. add r3,r3,r11
  1240. eor r10,r4,r6
  1241. add r7,r7,r9
  1242. ldr r9,[sp,#28]
  1243. eor r11,r10,r5
  1244. add r7,r7,r3,ror#27
  1245. mov r4,r4,ror#2
  1246. add r7,r7,r11
  1247. eor r10,r3,r5
  1248. add r6,r6,r9
  1249. ldr r9,[sp,#32]
  1250. eor r11,r10,r4
  1251. add r6,r6,r7,ror#27
  1252. mov r3,r3,ror#2
  1253. add r6,r6,r11
  1254. vrev32.8 q2,q2
  1255. eor r10,r7,r4
  1256. add r5,r5,r9
  1257. vadd.i32 q9,q1,q14
  1258. ldr r9,[sp,#36]
  1259. eor r11,r10,r3
  1260. vst1.32 {q9},[r12,:128]!
  1261. add r5,r5,r6,ror#27
  1262. mov r7,r7,ror#2
  1263. add r5,r5,r11
  1264. eor r10,r6,r3
  1265. add r4,r4,r9
  1266. ldr r9,[sp,#40]
  1267. eor r11,r10,r7
  1268. add r4,r4,r5,ror#27
  1269. mov r6,r6,ror#2
  1270. add r4,r4,r11
  1271. eor r10,r5,r7
  1272. add r3,r3,r9
  1273. ldr r9,[sp,#44]
  1274. eor r11,r10,r6
  1275. add r3,r3,r4,ror#27
  1276. mov r5,r5,ror#2
  1277. add r3,r3,r11
  1278. eor r10,r4,r6
  1279. add r7,r7,r9
  1280. ldr r9,[sp,#48]
  1281. eor r11,r10,r5
  1282. add r7,r7,r3,ror#27
  1283. mov r4,r4,ror#2
  1284. add r7,r7,r11
  1285. vrev32.8 q3,q3
  1286. eor r10,r3,r5
  1287. add r6,r6,r9
  1288. vadd.i32 q10,q2,q14
  1289. ldr r9,[sp,#52]
  1290. eor r11,r10,r4
  1291. vst1.32 {q10},[r12,:128]!
  1292. add r6,r6,r7,ror#27
  1293. mov r3,r3,ror#2
  1294. add r6,r6,r11
  1295. eor r10,r7,r4
  1296. add r5,r5,r9
  1297. ldr r9,[sp,#56]
  1298. eor r11,r10,r3
  1299. add r5,r5,r6,ror#27
  1300. mov r7,r7,ror#2
  1301. add r5,r5,r11
  1302. eor r10,r6,r3
  1303. add r4,r4,r9
  1304. ldr r9,[sp,#60]
  1305. eor r11,r10,r7
  1306. add r4,r4,r5,ror#27
  1307. mov r6,r6,ror#2
  1308. add r4,r4,r11
  1309. eor r10,r5,r7
  1310. add r3,r3,r9
  1311. eor r11,r10,r6
  1312. add r3,r3,r4,ror#27
  1313. mov r5,r5,ror#2
  1314. add r3,r3,r11
  1315. ldmia r0,{r9,r10,r11,r12} @ accumulate context
  1316. add r3,r3,r9
  1317. ldr r9,[r0,#16]
  1318. add r4,r4,r10
  1319. add r5,r5,r11
  1320. add r6,r6,r12
  1321. it eq
  1322. moveq sp,r14
  1323. add r7,r7,r9
  1324. it ne
  1325. ldrne r9,[sp]
  1326. stmia r0,{r3,r4,r5,r6,r7}
  1327. itt ne
  1328. addne r12,sp,#3*16
  1329. bne .Loop_neon
  1330. @ vldmia sp!,{d8-d15}
  1331. ldmia sp!,{r4-r12,pc}
  1332. .size sha1_block_data_order_neon,.-sha1_block_data_order_neon
  1333. #endif
  1334. #if __ARM_MAX_ARCH__>=7
  1335. # if defined(__thumb2__)
  1336. # define INST(a,b,c,d) .byte c,d|0xf,a,b
  1337. # else
  1338. # define INST(a,b,c,d) .byte a,b,c,d|0x10
  1339. # endif
  1340. .type sha1_block_data_order_armv8,%function
  1341. .align 5
  1342. sha1_block_data_order_armv8:
  1343. .LARMv8:
  1344. vstmdb sp!,{d8-d15} @ ABI specification says so
  1345. veor q1,q1,q1
  1346. adr r3,.LK_00_19
  1347. vld1.32 {q0},[r0]!
  1348. vld1.32 {d2[0]},[r0]
  1349. sub r0,r0,#16
  1350. vld1.32 {d16[],d17[]},[r3,:32]!
  1351. vld1.32 {d18[],d19[]},[r3,:32]!
  1352. vld1.32 {d20[],d21[]},[r3,:32]!
  1353. vld1.32 {d22[],d23[]},[r3,:32]
  1354. .Loop_v8:
  1355. vld1.8 {q4-q5},[r1]!
  1356. vld1.8 {q6-q7},[r1]!
  1357. vrev32.8 q4,q4
  1358. vrev32.8 q5,q5
  1359. vadd.i32 q12,q8,q4
  1360. vrev32.8 q6,q6
  1361. vmov q14,q0 @ offload
  1362. subs r2,r2,#1
  1363. vadd.i32 q13,q8,q5
  1364. vrev32.8 q7,q7
  1365. INST(0xc0,0x62,0xb9,0xf3) @ sha1h q3,q0 @ 0
  1366. INST(0x68,0x0c,0x02,0xe2) @ sha1c q0,q1,q12
  1367. vadd.i32 q12,q8,q6
  1368. INST(0x4c,0x8c,0x3a,0xe2) @ sha1su0 q4,q5,q6
  1369. INST(0xc0,0x42,0xb9,0xf3) @ sha1h q2,q0 @ 1
  1370. INST(0x6a,0x0c,0x06,0xe2) @ sha1c q0,q3,q13
  1371. vadd.i32 q13,q8,q7
  1372. INST(0x8e,0x83,0xba,0xf3) @ sha1su1 q4,q7
  1373. INST(0x4e,0xac,0x3c,0xe2) @ sha1su0 q5,q6,q7
  1374. INST(0xc0,0x62,0xb9,0xf3) @ sha1h q3,q0 @ 2
  1375. INST(0x68,0x0c,0x04,0xe2) @ sha1c q0,q2,q12
  1376. vadd.i32 q12,q8,q4
  1377. INST(0x88,0xa3,0xba,0xf3) @ sha1su1 q5,q4
  1378. INST(0x48,0xcc,0x3e,0xe2) @ sha1su0 q6,q7,q4
  1379. INST(0xc0,0x42,0xb9,0xf3) @ sha1h q2,q0 @ 3
  1380. INST(0x6a,0x0c,0x06,0xe2) @ sha1c q0,q3,q13
  1381. vadd.i32 q13,q9,q5
  1382. INST(0x8a,0xc3,0xba,0xf3) @ sha1su1 q6,q5
  1383. INST(0x4a,0xec,0x38,0xe2) @ sha1su0 q7,q4,q5
  1384. INST(0xc0,0x62,0xb9,0xf3) @ sha1h q3,q0 @ 4
  1385. INST(0x68,0x0c,0x04,0xe2) @ sha1c q0,q2,q12
  1386. vadd.i32 q12,q9,q6
  1387. INST(0x8c,0xe3,0xba,0xf3) @ sha1su1 q7,q6
  1388. INST(0x4c,0x8c,0x3a,0xe2) @ sha1su0 q4,q5,q6
  1389. INST(0xc0,0x42,0xb9,0xf3) @ sha1h q2,q0 @ 5
  1390. INST(0x6a,0x0c,0x16,0xe2) @ sha1p q0,q3,q13
  1391. vadd.i32 q13,q9,q7
  1392. INST(0x8e,0x83,0xba,0xf3) @ sha1su1 q4,q7
  1393. INST(0x4e,0xac,0x3c,0xe2) @ sha1su0 q5,q6,q7
  1394. INST(0xc0,0x62,0xb9,0xf3) @ sha1h q3,q0 @ 6
  1395. INST(0x68,0x0c,0x14,0xe2) @ sha1p q0,q2,q12
  1396. vadd.i32 q12,q9,q4
  1397. INST(0x88,0xa3,0xba,0xf3) @ sha1su1 q5,q4
  1398. INST(0x48,0xcc,0x3e,0xe2) @ sha1su0 q6,q7,q4
  1399. INST(0xc0,0x42,0xb9,0xf3) @ sha1h q2,q0 @ 7
  1400. INST(0x6a,0x0c,0x16,0xe2) @ sha1p q0,q3,q13
  1401. vadd.i32 q13,q9,q5
  1402. INST(0x8a,0xc3,0xba,0xf3) @ sha1su1 q6,q5
  1403. INST(0x4a,0xec,0x38,0xe2) @ sha1su0 q7,q4,q5
  1404. INST(0xc0,0x62,0xb9,0xf3) @ sha1h q3,q0 @ 8
  1405. INST(0x68,0x0c,0x14,0xe2) @ sha1p q0,q2,q12
  1406. vadd.i32 q12,q10,q6
  1407. INST(0x8c,0xe3,0xba,0xf3) @ sha1su1 q7,q6
  1408. INST(0x4c,0x8c,0x3a,0xe2) @ sha1su0 q4,q5,q6
  1409. INST(0xc0,0x42,0xb9,0xf3) @ sha1h q2,q0 @ 9
  1410. INST(0x6a,0x0c,0x16,0xe2) @ sha1p q0,q3,q13
  1411. vadd.i32 q13,q10,q7
  1412. INST(0x8e,0x83,0xba,0xf3) @ sha1su1 q4,q7
  1413. INST(0x4e,0xac,0x3c,0xe2) @ sha1su0 q5,q6,q7
  1414. INST(0xc0,0x62,0xb9,0xf3) @ sha1h q3,q0 @ 10
  1415. INST(0x68,0x0c,0x24,0xe2) @ sha1m q0,q2,q12
  1416. vadd.i32 q12,q10,q4
  1417. INST(0x88,0xa3,0xba,0xf3) @ sha1su1 q5,q4
  1418. INST(0x48,0xcc,0x3e,0xe2) @ sha1su0 q6,q7,q4
  1419. INST(0xc0,0x42,0xb9,0xf3) @ sha1h q2,q0 @ 11
  1420. INST(0x6a,0x0c,0x26,0xe2) @ sha1m q0,q3,q13
  1421. vadd.i32 q13,q10,q5
  1422. INST(0x8a,0xc3,0xba,0xf3) @ sha1su1 q6,q5
  1423. INST(0x4a,0xec,0x38,0xe2) @ sha1su0 q7,q4,q5
  1424. INST(0xc0,0x62,0xb9,0xf3) @ sha1h q3,q0 @ 12
  1425. INST(0x68,0x0c,0x24,0xe2) @ sha1m q0,q2,q12
  1426. vadd.i32 q12,q10,q6
  1427. INST(0x8c,0xe3,0xba,0xf3) @ sha1su1 q7,q6
  1428. INST(0x4c,0x8c,0x3a,0xe2) @ sha1su0 q4,q5,q6
  1429. INST(0xc0,0x42,0xb9,0xf3) @ sha1h q2,q0 @ 13
  1430. INST(0x6a,0x0c,0x26,0xe2) @ sha1m q0,q3,q13
  1431. vadd.i32 q13,q11,q7
  1432. INST(0x8e,0x83,0xba,0xf3) @ sha1su1 q4,q7
  1433. INST(0x4e,0xac,0x3c,0xe2) @ sha1su0 q5,q6,q7
  1434. INST(0xc0,0x62,0xb9,0xf3) @ sha1h q3,q0 @ 14
  1435. INST(0x68,0x0c,0x24,0xe2) @ sha1m q0,q2,q12
  1436. vadd.i32 q12,q11,q4
  1437. INST(0x88,0xa3,0xba,0xf3) @ sha1su1 q5,q4
  1438. INST(0x48,0xcc,0x3e,0xe2) @ sha1su0 q6,q7,q4
  1439. INST(0xc0,0x42,0xb9,0xf3) @ sha1h q2,q0 @ 15
  1440. INST(0x6a,0x0c,0x16,0xe2) @ sha1p q0,q3,q13
  1441. vadd.i32 q13,q11,q5
  1442. INST(0x8a,0xc3,0xba,0xf3) @ sha1su1 q6,q5
  1443. INST(0x4a,0xec,0x38,0xe2) @ sha1su0 q7,q4,q5
  1444. INST(0xc0,0x62,0xb9,0xf3) @ sha1h q3,q0 @ 16
  1445. INST(0x68,0x0c,0x14,0xe2) @ sha1p q0,q2,q12
  1446. vadd.i32 q12,q11,q6
  1447. INST(0x8c,0xe3,0xba,0xf3) @ sha1su1 q7,q6
  1448. INST(0xc0,0x42,0xb9,0xf3) @ sha1h q2,q0 @ 17
  1449. INST(0x6a,0x0c,0x16,0xe2) @ sha1p q0,q3,q13
  1450. vadd.i32 q13,q11,q7
  1451. INST(0xc0,0x62,0xb9,0xf3) @ sha1h q3,q0 @ 18
  1452. INST(0x68,0x0c,0x14,0xe2) @ sha1p q0,q2,q12
  1453. INST(0xc0,0x42,0xb9,0xf3) @ sha1h q2,q0 @ 19
  1454. INST(0x6a,0x0c,0x16,0xe2) @ sha1p q0,q3,q13
  1455. vadd.i32 q1,q1,q2
  1456. vadd.i32 q0,q0,q14
  1457. bne .Loop_v8
  1458. vst1.32 {q0},[r0]!
  1459. vst1.32 {d2[0]},[r0]
  1460. vldmia sp!,{d8-d15}
  1461. bx lr @ bx lr
  1462. .size sha1_block_data_order_armv8,.-sha1_block_data_order_armv8
  1463. #endif
  1464. #if __ARM_MAX_ARCH__>=7
  1465. .comm OPENSSL_armcap_P,4,4
  1466. #endif