sha1-armv4-large.S 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518
  1. // This file is generated from a similarly-named Perl script in the BoringSSL
  2. // source tree. Do not edit by hand.
  3. #if !defined(__has_feature)
  4. #define __has_feature(x) 0
  5. #endif
  6. #if __has_feature(memory_sanitizer) && !defined(OPENSSL_NO_ASM)
  7. #define OPENSSL_NO_ASM
  8. #endif
  9. #if !defined(OPENSSL_NO_ASM)
  10. #if defined(BORINGSSL_PREFIX)
  11. #include <boringssl_prefix_symbols_asm.h>
  12. #endif
  13. #include <openssl/arm_arch.h>
  14. .text
  15. #if defined(__thumb2__)
  16. .syntax unified
  17. .thumb
  18. #else
  19. .code 32
  20. #endif
  21. .globl _sha1_block_data_order
  22. .private_extern _sha1_block_data_order
  23. #ifdef __thumb2__
  24. .thumb_func _sha1_block_data_order
  25. #endif
  26. .align 5
  27. _sha1_block_data_order:
  28. #if __ARM_MAX_ARCH__>=7
  29. Lsha1_block:
  30. adr r3,Lsha1_block
  31. ldr r12,LOPENSSL_armcap
  32. ldr r12,[r3,r12] @ OPENSSL_armcap_P
  33. #ifdef __APPLE__
  34. ldr r12,[r12]
  35. #endif
  36. tst r12,#ARMV8_SHA1
  37. bne LARMv8
  38. tst r12,#ARMV7_NEON
  39. bne LNEON
  40. #endif
  41. stmdb sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}
  42. add r2,r1,r2,lsl#6 @ r2 to point at the end of r1
  43. ldmia r0,{r3,r4,r5,r6,r7}
  44. Lloop:
  45. ldr r8,LK_00_19
  46. mov r14,sp
  47. sub sp,sp,#15*4
  48. mov r5,r5,ror#30
  49. mov r6,r6,ror#30
  50. mov r7,r7,ror#30 @ [6]
  51. L_00_15:
  52. #if __ARM_ARCH__<7
  53. ldrb r10,[r1,#2]
  54. ldrb r9,[r1,#3]
  55. ldrb r11,[r1,#1]
  56. add r7,r8,r7,ror#2 @ E+=K_00_19
  57. ldrb r12,[r1],#4
  58. orr r9,r9,r10,lsl#8
  59. eor r10,r5,r6 @ F_xx_xx
  60. orr r9,r9,r11,lsl#16
  61. add r7,r7,r3,ror#27 @ E+=ROR(A,27)
  62. orr r9,r9,r12,lsl#24
  63. #else
  64. ldr r9,[r1],#4 @ handles unaligned
  65. add r7,r8,r7,ror#2 @ E+=K_00_19
  66. eor r10,r5,r6 @ F_xx_xx
  67. add r7,r7,r3,ror#27 @ E+=ROR(A,27)
  68. #ifdef __ARMEL__
  69. rev r9,r9 @ byte swap
  70. #endif
  71. #endif
  72. and r10,r4,r10,ror#2
  73. add r7,r7,r9 @ E+=X[i]
  74. eor r10,r10,r6,ror#2 @ F_00_19(B,C,D)
  75. str r9,[r14,#-4]!
  76. add r7,r7,r10 @ E+=F_00_19(B,C,D)
  77. #if __ARM_ARCH__<7
  78. ldrb r10,[r1,#2]
  79. ldrb r9,[r1,#3]
  80. ldrb r11,[r1,#1]
  81. add r6,r8,r6,ror#2 @ E+=K_00_19
  82. ldrb r12,[r1],#4
  83. orr r9,r9,r10,lsl#8
  84. eor r10,r4,r5 @ F_xx_xx
  85. orr r9,r9,r11,lsl#16
  86. add r6,r6,r7,ror#27 @ E+=ROR(A,27)
  87. orr r9,r9,r12,lsl#24
  88. #else
  89. ldr r9,[r1],#4 @ handles unaligned
  90. add r6,r8,r6,ror#2 @ E+=K_00_19
  91. eor r10,r4,r5 @ F_xx_xx
  92. add r6,r6,r7,ror#27 @ E+=ROR(A,27)
  93. #ifdef __ARMEL__
  94. rev r9,r9 @ byte swap
  95. #endif
  96. #endif
  97. and r10,r3,r10,ror#2
  98. add r6,r6,r9 @ E+=X[i]
  99. eor r10,r10,r5,ror#2 @ F_00_19(B,C,D)
  100. str r9,[r14,#-4]!
  101. add r6,r6,r10 @ E+=F_00_19(B,C,D)
  102. #if __ARM_ARCH__<7
  103. ldrb r10,[r1,#2]
  104. ldrb r9,[r1,#3]
  105. ldrb r11,[r1,#1]
  106. add r5,r8,r5,ror#2 @ E+=K_00_19
  107. ldrb r12,[r1],#4
  108. orr r9,r9,r10,lsl#8
  109. eor r10,r3,r4 @ F_xx_xx
  110. orr r9,r9,r11,lsl#16
  111. add r5,r5,r6,ror#27 @ E+=ROR(A,27)
  112. orr r9,r9,r12,lsl#24
  113. #else
  114. ldr r9,[r1],#4 @ handles unaligned
  115. add r5,r8,r5,ror#2 @ E+=K_00_19
  116. eor r10,r3,r4 @ F_xx_xx
  117. add r5,r5,r6,ror#27 @ E+=ROR(A,27)
  118. #ifdef __ARMEL__
  119. rev r9,r9 @ byte swap
  120. #endif
  121. #endif
  122. and r10,r7,r10,ror#2
  123. add r5,r5,r9 @ E+=X[i]
  124. eor r10,r10,r4,ror#2 @ F_00_19(B,C,D)
  125. str r9,[r14,#-4]!
  126. add r5,r5,r10 @ E+=F_00_19(B,C,D)
  127. #if __ARM_ARCH__<7
  128. ldrb r10,[r1,#2]
  129. ldrb r9,[r1,#3]
  130. ldrb r11,[r1,#1]
  131. add r4,r8,r4,ror#2 @ E+=K_00_19
  132. ldrb r12,[r1],#4
  133. orr r9,r9,r10,lsl#8
  134. eor r10,r7,r3 @ F_xx_xx
  135. orr r9,r9,r11,lsl#16
  136. add r4,r4,r5,ror#27 @ E+=ROR(A,27)
  137. orr r9,r9,r12,lsl#24
  138. #else
  139. ldr r9,[r1],#4 @ handles unaligned
  140. add r4,r8,r4,ror#2 @ E+=K_00_19
  141. eor r10,r7,r3 @ F_xx_xx
  142. add r4,r4,r5,ror#27 @ E+=ROR(A,27)
  143. #ifdef __ARMEL__
  144. rev r9,r9 @ byte swap
  145. #endif
  146. #endif
  147. and r10,r6,r10,ror#2
  148. add r4,r4,r9 @ E+=X[i]
  149. eor r10,r10,r3,ror#2 @ F_00_19(B,C,D)
  150. str r9,[r14,#-4]!
  151. add r4,r4,r10 @ E+=F_00_19(B,C,D)
  152. #if __ARM_ARCH__<7
  153. ldrb r10,[r1,#2]
  154. ldrb r9,[r1,#3]
  155. ldrb r11,[r1,#1]
  156. add r3,r8,r3,ror#2 @ E+=K_00_19
  157. ldrb r12,[r1],#4
  158. orr r9,r9,r10,lsl#8
  159. eor r10,r6,r7 @ F_xx_xx
  160. orr r9,r9,r11,lsl#16
  161. add r3,r3,r4,ror#27 @ E+=ROR(A,27)
  162. orr r9,r9,r12,lsl#24
  163. #else
  164. ldr r9,[r1],#4 @ handles unaligned
  165. add r3,r8,r3,ror#2 @ E+=K_00_19
  166. eor r10,r6,r7 @ F_xx_xx
  167. add r3,r3,r4,ror#27 @ E+=ROR(A,27)
  168. #ifdef __ARMEL__
  169. rev r9,r9 @ byte swap
  170. #endif
  171. #endif
  172. and r10,r5,r10,ror#2
  173. add r3,r3,r9 @ E+=X[i]
  174. eor r10,r10,r7,ror#2 @ F_00_19(B,C,D)
  175. str r9,[r14,#-4]!
  176. add r3,r3,r10 @ E+=F_00_19(B,C,D)
  177. #if defined(__thumb2__)
  178. mov r12,sp
  179. teq r14,r12
  180. #else
  181. teq r14,sp
  182. #endif
  183. bne L_00_15 @ [((11+4)*5+2)*3]
  184. sub sp,sp,#25*4
  185. #if __ARM_ARCH__<7
  186. ldrb r10,[r1,#2]
  187. ldrb r9,[r1,#3]
  188. ldrb r11,[r1,#1]
  189. add r7,r8,r7,ror#2 @ E+=K_00_19
  190. ldrb r12,[r1],#4
  191. orr r9,r9,r10,lsl#8
  192. eor r10,r5,r6 @ F_xx_xx
  193. orr r9,r9,r11,lsl#16
  194. add r7,r7,r3,ror#27 @ E+=ROR(A,27)
  195. orr r9,r9,r12,lsl#24
  196. #else
  197. ldr r9,[r1],#4 @ handles unaligned
  198. add r7,r8,r7,ror#2 @ E+=K_00_19
  199. eor r10,r5,r6 @ F_xx_xx
  200. add r7,r7,r3,ror#27 @ E+=ROR(A,27)
  201. #ifdef __ARMEL__
  202. rev r9,r9 @ byte swap
  203. #endif
  204. #endif
  205. and r10,r4,r10,ror#2
  206. add r7,r7,r9 @ E+=X[i]
  207. eor r10,r10,r6,ror#2 @ F_00_19(B,C,D)
  208. str r9,[r14,#-4]!
  209. add r7,r7,r10 @ E+=F_00_19(B,C,D)
  210. ldr r9,[r14,#15*4]
  211. ldr r10,[r14,#13*4]
  212. ldr r11,[r14,#7*4]
  213. add r6,r8,r6,ror#2 @ E+=K_xx_xx
  214. ldr r12,[r14,#2*4]
  215. eor r9,r9,r10
  216. eor r11,r11,r12 @ 1 cycle stall
  217. eor r10,r4,r5 @ F_xx_xx
  218. mov r9,r9,ror#31
  219. add r6,r6,r7,ror#27 @ E+=ROR(A,27)
  220. eor r9,r9,r11,ror#31
  221. str r9,[r14,#-4]!
  222. and r10,r3,r10,ror#2 @ F_xx_xx
  223. @ F_xx_xx
  224. add r6,r6,r9 @ E+=X[i]
  225. eor r10,r10,r5,ror#2 @ F_00_19(B,C,D)
  226. add r6,r6,r10 @ E+=F_00_19(B,C,D)
  227. ldr r9,[r14,#15*4]
  228. ldr r10,[r14,#13*4]
  229. ldr r11,[r14,#7*4]
  230. add r5,r8,r5,ror#2 @ E+=K_xx_xx
  231. ldr r12,[r14,#2*4]
  232. eor r9,r9,r10
  233. eor r11,r11,r12 @ 1 cycle stall
  234. eor r10,r3,r4 @ F_xx_xx
  235. mov r9,r9,ror#31
  236. add r5,r5,r6,ror#27 @ E+=ROR(A,27)
  237. eor r9,r9,r11,ror#31
  238. str r9,[r14,#-4]!
  239. and r10,r7,r10,ror#2 @ F_xx_xx
  240. @ F_xx_xx
  241. add r5,r5,r9 @ E+=X[i]
  242. eor r10,r10,r4,ror#2 @ F_00_19(B,C,D)
  243. add r5,r5,r10 @ E+=F_00_19(B,C,D)
  244. ldr r9,[r14,#15*4]
  245. ldr r10,[r14,#13*4]
  246. ldr r11,[r14,#7*4]
  247. add r4,r8,r4,ror#2 @ E+=K_xx_xx
  248. ldr r12,[r14,#2*4]
  249. eor r9,r9,r10
  250. eor r11,r11,r12 @ 1 cycle stall
  251. eor r10,r7,r3 @ F_xx_xx
  252. mov r9,r9,ror#31
  253. add r4,r4,r5,ror#27 @ E+=ROR(A,27)
  254. eor r9,r9,r11,ror#31
  255. str r9,[r14,#-4]!
  256. and r10,r6,r10,ror#2 @ F_xx_xx
  257. @ F_xx_xx
  258. add r4,r4,r9 @ E+=X[i]
  259. eor r10,r10,r3,ror#2 @ F_00_19(B,C,D)
  260. add r4,r4,r10 @ E+=F_00_19(B,C,D)
  261. ldr r9,[r14,#15*4]
  262. ldr r10,[r14,#13*4]
  263. ldr r11,[r14,#7*4]
  264. add r3,r8,r3,ror#2 @ E+=K_xx_xx
  265. ldr r12,[r14,#2*4]
  266. eor r9,r9,r10
  267. eor r11,r11,r12 @ 1 cycle stall
  268. eor r10,r6,r7 @ F_xx_xx
  269. mov r9,r9,ror#31
  270. add r3,r3,r4,ror#27 @ E+=ROR(A,27)
  271. eor r9,r9,r11,ror#31
  272. str r9,[r14,#-4]!
  273. and r10,r5,r10,ror#2 @ F_xx_xx
  274. @ F_xx_xx
  275. add r3,r3,r9 @ E+=X[i]
  276. eor r10,r10,r7,ror#2 @ F_00_19(B,C,D)
  277. add r3,r3,r10 @ E+=F_00_19(B,C,D)
  278. ldr r8,LK_20_39 @ [+15+16*4]
  279. cmn sp,#0 @ [+3], clear carry to denote 20_39
  280. L_20_39_or_60_79:
  281. ldr r9,[r14,#15*4]
  282. ldr r10,[r14,#13*4]
  283. ldr r11,[r14,#7*4]
  284. add r7,r8,r7,ror#2 @ E+=K_xx_xx
  285. ldr r12,[r14,#2*4]
  286. eor r9,r9,r10
  287. eor r11,r11,r12 @ 1 cycle stall
  288. eor r10,r5,r6 @ F_xx_xx
  289. mov r9,r9,ror#31
  290. add r7,r7,r3,ror#27 @ E+=ROR(A,27)
  291. eor r9,r9,r11,ror#31
  292. str r9,[r14,#-4]!
  293. eor r10,r4,r10,ror#2 @ F_xx_xx
  294. @ F_xx_xx
  295. add r7,r7,r9 @ E+=X[i]
  296. add r7,r7,r10 @ E+=F_20_39(B,C,D)
  297. ldr r9,[r14,#15*4]
  298. ldr r10,[r14,#13*4]
  299. ldr r11,[r14,#7*4]
  300. add r6,r8,r6,ror#2 @ E+=K_xx_xx
  301. ldr r12,[r14,#2*4]
  302. eor r9,r9,r10
  303. eor r11,r11,r12 @ 1 cycle stall
  304. eor r10,r4,r5 @ F_xx_xx
  305. mov r9,r9,ror#31
  306. add r6,r6,r7,ror#27 @ E+=ROR(A,27)
  307. eor r9,r9,r11,ror#31
  308. str r9,[r14,#-4]!
  309. eor r10,r3,r10,ror#2 @ F_xx_xx
  310. @ F_xx_xx
  311. add r6,r6,r9 @ E+=X[i]
  312. add r6,r6,r10 @ E+=F_20_39(B,C,D)
  313. ldr r9,[r14,#15*4]
  314. ldr r10,[r14,#13*4]
  315. ldr r11,[r14,#7*4]
  316. add r5,r8,r5,ror#2 @ E+=K_xx_xx
  317. ldr r12,[r14,#2*4]
  318. eor r9,r9,r10
  319. eor r11,r11,r12 @ 1 cycle stall
  320. eor r10,r3,r4 @ F_xx_xx
  321. mov r9,r9,ror#31
  322. add r5,r5,r6,ror#27 @ E+=ROR(A,27)
  323. eor r9,r9,r11,ror#31
  324. str r9,[r14,#-4]!
  325. eor r10,r7,r10,ror#2 @ F_xx_xx
  326. @ F_xx_xx
  327. add r5,r5,r9 @ E+=X[i]
  328. add r5,r5,r10 @ E+=F_20_39(B,C,D)
  329. ldr r9,[r14,#15*4]
  330. ldr r10,[r14,#13*4]
  331. ldr r11,[r14,#7*4]
  332. add r4,r8,r4,ror#2 @ E+=K_xx_xx
  333. ldr r12,[r14,#2*4]
  334. eor r9,r9,r10
  335. eor r11,r11,r12 @ 1 cycle stall
  336. eor r10,r7,r3 @ F_xx_xx
  337. mov r9,r9,ror#31
  338. add r4,r4,r5,ror#27 @ E+=ROR(A,27)
  339. eor r9,r9,r11,ror#31
  340. str r9,[r14,#-4]!
  341. eor r10,r6,r10,ror#2 @ F_xx_xx
  342. @ F_xx_xx
  343. add r4,r4,r9 @ E+=X[i]
  344. add r4,r4,r10 @ E+=F_20_39(B,C,D)
  345. ldr r9,[r14,#15*4]
  346. ldr r10,[r14,#13*4]
  347. ldr r11,[r14,#7*4]
  348. add r3,r8,r3,ror#2 @ E+=K_xx_xx
  349. ldr r12,[r14,#2*4]
  350. eor r9,r9,r10
  351. eor r11,r11,r12 @ 1 cycle stall
  352. eor r10,r6,r7 @ F_xx_xx
  353. mov r9,r9,ror#31
  354. add r3,r3,r4,ror#27 @ E+=ROR(A,27)
  355. eor r9,r9,r11,ror#31
  356. str r9,[r14,#-4]!
  357. eor r10,r5,r10,ror#2 @ F_xx_xx
  358. @ F_xx_xx
  359. add r3,r3,r9 @ E+=X[i]
  360. add r3,r3,r10 @ E+=F_20_39(B,C,D)
  361. #if defined(__thumb2__)
  362. mov r12,sp
  363. teq r14,r12
  364. #else
  365. teq r14,sp @ preserve carry
  366. #endif
  367. bne L_20_39_or_60_79 @ [+((12+3)*5+2)*4]
  368. bcs L_done @ [+((12+3)*5+2)*4], spare 300 bytes
  369. ldr r8,LK_40_59
  370. sub sp,sp,#20*4 @ [+2]
  371. L_40_59:
  372. ldr r9,[r14,#15*4]
  373. ldr r10,[r14,#13*4]
  374. ldr r11,[r14,#7*4]
  375. add r7,r8,r7,ror#2 @ E+=K_xx_xx
  376. ldr r12,[r14,#2*4]
  377. eor r9,r9,r10
  378. eor r11,r11,r12 @ 1 cycle stall
  379. eor r10,r5,r6 @ F_xx_xx
  380. mov r9,r9,ror#31
  381. add r7,r7,r3,ror#27 @ E+=ROR(A,27)
  382. eor r9,r9,r11,ror#31
  383. str r9,[r14,#-4]!
  384. and r10,r4,r10,ror#2 @ F_xx_xx
  385. and r11,r5,r6 @ F_xx_xx
  386. add r7,r7,r9 @ E+=X[i]
  387. add r7,r7,r10 @ E+=F_40_59(B,C,D)
  388. add r7,r7,r11,ror#2
  389. ldr r9,[r14,#15*4]
  390. ldr r10,[r14,#13*4]
  391. ldr r11,[r14,#7*4]
  392. add r6,r8,r6,ror#2 @ E+=K_xx_xx
  393. ldr r12,[r14,#2*4]
  394. eor r9,r9,r10
  395. eor r11,r11,r12 @ 1 cycle stall
  396. eor r10,r4,r5 @ F_xx_xx
  397. mov r9,r9,ror#31
  398. add r6,r6,r7,ror#27 @ E+=ROR(A,27)
  399. eor r9,r9,r11,ror#31
  400. str r9,[r14,#-4]!
  401. and r10,r3,r10,ror#2 @ F_xx_xx
  402. and r11,r4,r5 @ F_xx_xx
  403. add r6,r6,r9 @ E+=X[i]
  404. add r6,r6,r10 @ E+=F_40_59(B,C,D)
  405. add r6,r6,r11,ror#2
  406. ldr r9,[r14,#15*4]
  407. ldr r10,[r14,#13*4]
  408. ldr r11,[r14,#7*4]
  409. add r5,r8,r5,ror#2 @ E+=K_xx_xx
  410. ldr r12,[r14,#2*4]
  411. eor r9,r9,r10
  412. eor r11,r11,r12 @ 1 cycle stall
  413. eor r10,r3,r4 @ F_xx_xx
  414. mov r9,r9,ror#31
  415. add r5,r5,r6,ror#27 @ E+=ROR(A,27)
  416. eor r9,r9,r11,ror#31
  417. str r9,[r14,#-4]!
  418. and r10,r7,r10,ror#2 @ F_xx_xx
  419. and r11,r3,r4 @ F_xx_xx
  420. add r5,r5,r9 @ E+=X[i]
  421. add r5,r5,r10 @ E+=F_40_59(B,C,D)
  422. add r5,r5,r11,ror#2
  423. ldr r9,[r14,#15*4]
  424. ldr r10,[r14,#13*4]
  425. ldr r11,[r14,#7*4]
  426. add r4,r8,r4,ror#2 @ E+=K_xx_xx
  427. ldr r12,[r14,#2*4]
  428. eor r9,r9,r10
  429. eor r11,r11,r12 @ 1 cycle stall
  430. eor r10,r7,r3 @ F_xx_xx
  431. mov r9,r9,ror#31
  432. add r4,r4,r5,ror#27 @ E+=ROR(A,27)
  433. eor r9,r9,r11,ror#31
  434. str r9,[r14,#-4]!
  435. and r10,r6,r10,ror#2 @ F_xx_xx
  436. and r11,r7,r3 @ F_xx_xx
  437. add r4,r4,r9 @ E+=X[i]
  438. add r4,r4,r10 @ E+=F_40_59(B,C,D)
  439. add r4,r4,r11,ror#2
  440. ldr r9,[r14,#15*4]
  441. ldr r10,[r14,#13*4]
  442. ldr r11,[r14,#7*4]
  443. add r3,r8,r3,ror#2 @ E+=K_xx_xx
  444. ldr r12,[r14,#2*4]
  445. eor r9,r9,r10
  446. eor r11,r11,r12 @ 1 cycle stall
  447. eor r10,r6,r7 @ F_xx_xx
  448. mov r9,r9,ror#31
  449. add r3,r3,r4,ror#27 @ E+=ROR(A,27)
  450. eor r9,r9,r11,ror#31
  451. str r9,[r14,#-4]!
  452. and r10,r5,r10,ror#2 @ F_xx_xx
  453. and r11,r6,r7 @ F_xx_xx
  454. add r3,r3,r9 @ E+=X[i]
  455. add r3,r3,r10 @ E+=F_40_59(B,C,D)
  456. add r3,r3,r11,ror#2
  457. #if defined(__thumb2__)
  458. mov r12,sp
  459. teq r14,r12
  460. #else
  461. teq r14,sp
  462. #endif
  463. bne L_40_59 @ [+((12+5)*5+2)*4]
  464. ldr r8,LK_60_79
  465. sub sp,sp,#20*4
  466. cmp sp,#0 @ set carry to denote 60_79
  467. b L_20_39_or_60_79 @ [+4], spare 300 bytes
  468. L_done:
  469. add sp,sp,#80*4 @ "deallocate" stack frame
  470. ldmia r0,{r8,r9,r10,r11,r12}
  471. add r3,r8,r3
  472. add r4,r9,r4
  473. add r5,r10,r5,ror#2
  474. add r6,r11,r6,ror#2
  475. add r7,r12,r7,ror#2
  476. stmia r0,{r3,r4,r5,r6,r7}
  477. teq r1,r2
  478. bne Lloop @ [+18], total 1307
  479. #if __ARM_ARCH__>=5
  480. ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,pc}
  481. #else
  482. ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}
  483. tst lr,#1
  484. moveq pc,lr @ be binary compatible with V4, yet
  485. .word 0xe12fff1e @ interoperable with Thumb ISA:-)
  486. #endif
  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. #ifdef __thumb2__
  501. .thumb_func sha1_block_data_order_neon
  502. #endif
  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. #endif
  1348. #if __ARM_MAX_ARCH__>=7
  1349. # if defined(__thumb2__)
  1350. # define INST(a,b,c,d) .byte c,d|0xf,a,b
  1351. # else
  1352. # define INST(a,b,c,d) .byte a,b,c,d|0x10
  1353. # endif
  1354. #ifdef __thumb2__
  1355. .thumb_func sha1_block_data_order_armv8
  1356. #endif
  1357. .align 5
  1358. sha1_block_data_order_armv8:
  1359. LARMv8:
  1360. vstmdb sp!,{d8,d9,d10,d11,d12,d13,d14,d15} @ ABI specification says so
  1361. veor q1,q1,q1
  1362. adr r3,LK_00_19
  1363. vld1.32 {q0},[r0]!
  1364. vld1.32 {d2[0]},[r0]
  1365. sub r0,r0,#16
  1366. vld1.32 {d16[],d17[]},[r3,:32]!
  1367. vld1.32 {d18[],d19[]},[r3,:32]!
  1368. vld1.32 {d20[],d21[]},[r3,:32]!
  1369. vld1.32 {d22[],d23[]},[r3,:32]
  1370. Loop_v8:
  1371. vld1.8 {q4,q5},[r1]!
  1372. vld1.8 {q6,q7},[r1]!
  1373. vrev32.8 q4,q4
  1374. vrev32.8 q5,q5
  1375. vadd.i32 q12,q8,q4
  1376. vrev32.8 q6,q6
  1377. vmov q14,q0 @ offload
  1378. subs r2,r2,#1
  1379. vadd.i32 q13,q8,q5
  1380. vrev32.8 q7,q7
  1381. INST(0xc0,0x62,0xb9,0xf3) @ sha1h q3,q0 @ 0
  1382. INST(0x68,0x0c,0x02,0xe2) @ sha1c q0,q1,q12
  1383. vadd.i32 q12,q8,q6
  1384. INST(0x4c,0x8c,0x3a,0xe2) @ sha1su0 q4,q5,q6
  1385. INST(0xc0,0x42,0xb9,0xf3) @ sha1h q2,q0 @ 1
  1386. INST(0x6a,0x0c,0x06,0xe2) @ sha1c q0,q3,q13
  1387. vadd.i32 q13,q8,q7
  1388. INST(0x8e,0x83,0xba,0xf3) @ sha1su1 q4,q7
  1389. INST(0x4e,0xac,0x3c,0xe2) @ sha1su0 q5,q6,q7
  1390. INST(0xc0,0x62,0xb9,0xf3) @ sha1h q3,q0 @ 2
  1391. INST(0x68,0x0c,0x04,0xe2) @ sha1c q0,q2,q12
  1392. vadd.i32 q12,q8,q4
  1393. INST(0x88,0xa3,0xba,0xf3) @ sha1su1 q5,q4
  1394. INST(0x48,0xcc,0x3e,0xe2) @ sha1su0 q6,q7,q4
  1395. INST(0xc0,0x42,0xb9,0xf3) @ sha1h q2,q0 @ 3
  1396. INST(0x6a,0x0c,0x06,0xe2) @ sha1c q0,q3,q13
  1397. vadd.i32 q13,q9,q5
  1398. INST(0x8a,0xc3,0xba,0xf3) @ sha1su1 q6,q5
  1399. INST(0x4a,0xec,0x38,0xe2) @ sha1su0 q7,q4,q5
  1400. INST(0xc0,0x62,0xb9,0xf3) @ sha1h q3,q0 @ 4
  1401. INST(0x68,0x0c,0x04,0xe2) @ sha1c q0,q2,q12
  1402. vadd.i32 q12,q9,q6
  1403. INST(0x8c,0xe3,0xba,0xf3) @ sha1su1 q7,q6
  1404. INST(0x4c,0x8c,0x3a,0xe2) @ sha1su0 q4,q5,q6
  1405. INST(0xc0,0x42,0xb9,0xf3) @ sha1h q2,q0 @ 5
  1406. INST(0x6a,0x0c,0x16,0xe2) @ sha1p q0,q3,q13
  1407. vadd.i32 q13,q9,q7
  1408. INST(0x8e,0x83,0xba,0xf3) @ sha1su1 q4,q7
  1409. INST(0x4e,0xac,0x3c,0xe2) @ sha1su0 q5,q6,q7
  1410. INST(0xc0,0x62,0xb9,0xf3) @ sha1h q3,q0 @ 6
  1411. INST(0x68,0x0c,0x14,0xe2) @ sha1p q0,q2,q12
  1412. vadd.i32 q12,q9,q4
  1413. INST(0x88,0xa3,0xba,0xf3) @ sha1su1 q5,q4
  1414. INST(0x48,0xcc,0x3e,0xe2) @ sha1su0 q6,q7,q4
  1415. INST(0xc0,0x42,0xb9,0xf3) @ sha1h q2,q0 @ 7
  1416. INST(0x6a,0x0c,0x16,0xe2) @ sha1p q0,q3,q13
  1417. vadd.i32 q13,q9,q5
  1418. INST(0x8a,0xc3,0xba,0xf3) @ sha1su1 q6,q5
  1419. INST(0x4a,0xec,0x38,0xe2) @ sha1su0 q7,q4,q5
  1420. INST(0xc0,0x62,0xb9,0xf3) @ sha1h q3,q0 @ 8
  1421. INST(0x68,0x0c,0x14,0xe2) @ sha1p q0,q2,q12
  1422. vadd.i32 q12,q10,q6
  1423. INST(0x8c,0xe3,0xba,0xf3) @ sha1su1 q7,q6
  1424. INST(0x4c,0x8c,0x3a,0xe2) @ sha1su0 q4,q5,q6
  1425. INST(0xc0,0x42,0xb9,0xf3) @ sha1h q2,q0 @ 9
  1426. INST(0x6a,0x0c,0x16,0xe2) @ sha1p q0,q3,q13
  1427. vadd.i32 q13,q10,q7
  1428. INST(0x8e,0x83,0xba,0xf3) @ sha1su1 q4,q7
  1429. INST(0x4e,0xac,0x3c,0xe2) @ sha1su0 q5,q6,q7
  1430. INST(0xc0,0x62,0xb9,0xf3) @ sha1h q3,q0 @ 10
  1431. INST(0x68,0x0c,0x24,0xe2) @ sha1m q0,q2,q12
  1432. vadd.i32 q12,q10,q4
  1433. INST(0x88,0xa3,0xba,0xf3) @ sha1su1 q5,q4
  1434. INST(0x48,0xcc,0x3e,0xe2) @ sha1su0 q6,q7,q4
  1435. INST(0xc0,0x42,0xb9,0xf3) @ sha1h q2,q0 @ 11
  1436. INST(0x6a,0x0c,0x26,0xe2) @ sha1m q0,q3,q13
  1437. vadd.i32 q13,q10,q5
  1438. INST(0x8a,0xc3,0xba,0xf3) @ sha1su1 q6,q5
  1439. INST(0x4a,0xec,0x38,0xe2) @ sha1su0 q7,q4,q5
  1440. INST(0xc0,0x62,0xb9,0xf3) @ sha1h q3,q0 @ 12
  1441. INST(0x68,0x0c,0x24,0xe2) @ sha1m q0,q2,q12
  1442. vadd.i32 q12,q10,q6
  1443. INST(0x8c,0xe3,0xba,0xf3) @ sha1su1 q7,q6
  1444. INST(0x4c,0x8c,0x3a,0xe2) @ sha1su0 q4,q5,q6
  1445. INST(0xc0,0x42,0xb9,0xf3) @ sha1h q2,q0 @ 13
  1446. INST(0x6a,0x0c,0x26,0xe2) @ sha1m q0,q3,q13
  1447. vadd.i32 q13,q11,q7
  1448. INST(0x8e,0x83,0xba,0xf3) @ sha1su1 q4,q7
  1449. INST(0x4e,0xac,0x3c,0xe2) @ sha1su0 q5,q6,q7
  1450. INST(0xc0,0x62,0xb9,0xf3) @ sha1h q3,q0 @ 14
  1451. INST(0x68,0x0c,0x24,0xe2) @ sha1m q0,q2,q12
  1452. vadd.i32 q12,q11,q4
  1453. INST(0x88,0xa3,0xba,0xf3) @ sha1su1 q5,q4
  1454. INST(0x48,0xcc,0x3e,0xe2) @ sha1su0 q6,q7,q4
  1455. INST(0xc0,0x42,0xb9,0xf3) @ sha1h q2,q0 @ 15
  1456. INST(0x6a,0x0c,0x16,0xe2) @ sha1p q0,q3,q13
  1457. vadd.i32 q13,q11,q5
  1458. INST(0x8a,0xc3,0xba,0xf3) @ sha1su1 q6,q5
  1459. INST(0x4a,0xec,0x38,0xe2) @ sha1su0 q7,q4,q5
  1460. INST(0xc0,0x62,0xb9,0xf3) @ sha1h q3,q0 @ 16
  1461. INST(0x68,0x0c,0x14,0xe2) @ sha1p q0,q2,q12
  1462. vadd.i32 q12,q11,q6
  1463. INST(0x8c,0xe3,0xba,0xf3) @ sha1su1 q7,q6
  1464. INST(0xc0,0x42,0xb9,0xf3) @ sha1h q2,q0 @ 17
  1465. INST(0x6a,0x0c,0x16,0xe2) @ sha1p q0,q3,q13
  1466. vadd.i32 q13,q11,q7
  1467. INST(0xc0,0x62,0xb9,0xf3) @ sha1h q3,q0 @ 18
  1468. INST(0x68,0x0c,0x14,0xe2) @ sha1p q0,q2,q12
  1469. INST(0xc0,0x42,0xb9,0xf3) @ sha1h q2,q0 @ 19
  1470. INST(0x6a,0x0c,0x16,0xe2) @ sha1p q0,q3,q13
  1471. vadd.i32 q1,q1,q2
  1472. vadd.i32 q0,q0,q14
  1473. bne Loop_v8
  1474. vst1.32 {q0},[r0]!
  1475. vst1.32 {d2[0]},[r0]
  1476. vldmia sp!,{d8,d9,d10,d11,d12,d13,d14,d15}
  1477. bx lr @ bx lr
  1478. #endif
  1479. #if __ARM_MAX_ARCH__>=7
  1480. .comm _OPENSSL_armcap_P,4
  1481. .non_lazy_symbol_pointer
  1482. OPENSSL_armcap_P:
  1483. .indirect_symbol _OPENSSL_armcap_P
  1484. .long 0
  1485. .private_extern _OPENSSL_armcap_P
  1486. #endif
  1487. #endif // !OPENSSL_NO_ASM