sha1-armv4-large.S 31 KB

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