sha256-armv4.S 63 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839
  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. @ Copyright 2007-2016 The OpenSSL Project Authors. All Rights Reserved.
  15. @
  16. @ Licensed under the OpenSSL license (the "License"). You may not use
  17. @ this file except in compliance with the License. You can obtain a copy
  18. @ in the file LICENSE in the source distribution or at
  19. @ https://www.openssl.org/source/license.html
  20. @ ====================================================================
  21. @ Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
  22. @ project. The module is, however, dual licensed under OpenSSL and
  23. @ CRYPTOGAMS licenses depending on where you obtain it. For further
  24. @ details see http://www.openssl.org/~appro/cryptogams/.
  25. @
  26. @ Permission to use under GPL terms is granted.
  27. @ ====================================================================
  28. @ SHA256 block procedure for ARMv4. May 2007.
  29. @ Performance is ~2x better than gcc 3.4 generated code and in "abso-
  30. @ lute" terms is ~2250 cycles per 64-byte block or ~35 cycles per
  31. @ byte [on single-issue Xscale PXA250 core].
  32. @ July 2010.
  33. @
  34. @ Rescheduling for dual-issue pipeline resulted in 22% improvement on
  35. @ Cortex A8 core and ~20 cycles per processed byte.
  36. @ February 2011.
  37. @
  38. @ Profiler-assisted and platform-specific optimization resulted in 16%
  39. @ improvement on Cortex A8 core and ~15.4 cycles per processed byte.
  40. @ September 2013.
  41. @
  42. @ Add NEON implementation. On Cortex A8 it was measured to process one
  43. @ byte in 12.5 cycles or 23% faster than integer-only code. Snapdragon
  44. @ S4 does it in 12.5 cycles too, but it's 50% faster than integer-only
  45. @ code (meaning that latter performs sub-optimally, nothing was done
  46. @ about it).
  47. @ May 2014.
  48. @
  49. @ Add ARMv8 code path performing at 2.0 cpb on Apple A7.
  50. #ifndef __KERNEL__
  51. # include <openssl/arm_arch.h>
  52. #else
  53. # define __ARM_ARCH__ __LINUX_ARM_ARCH__
  54. # define __ARM_MAX_ARCH__ 7
  55. #endif
  56. @ Silence ARMv8 deprecated IT instruction warnings. This file is used by both
  57. @ ARMv7 and ARMv8 processors. It does have ARMv8-only code, but those
  58. @ instructions are manually-encoded. (See unsha256.)
  59. .arch armv7-a
  60. .text
  61. #if defined(__thumb2__)
  62. .syntax unified
  63. .thumb
  64. #else
  65. .code 32
  66. #endif
  67. .type K256,%object
  68. .align 5
  69. K256:
  70. .word 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
  71. .word 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5
  72. .word 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3
  73. .word 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174
  74. .word 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc
  75. .word 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da
  76. .word 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7
  77. .word 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967
  78. .word 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13
  79. .word 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85
  80. .word 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3
  81. .word 0xd192e819,0xd6990624,0xf40e3585,0x106aa070
  82. .word 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5
  83. .word 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3
  84. .word 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208
  85. .word 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
  86. .size K256,.-K256
  87. .word 0 @ terminator
  88. #if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)
  89. .LOPENSSL_armcap:
  90. .word OPENSSL_armcap_P-.Lsha256_block_data_order
  91. #endif
  92. .align 5
  93. .globl sha256_block_data_order
  94. .hidden sha256_block_data_order
  95. .type sha256_block_data_order,%function
  96. sha256_block_data_order:
  97. .Lsha256_block_data_order:
  98. #if __ARM_ARCH__<7 && !defined(__thumb2__)
  99. sub r3,pc,#8 @ sha256_block_data_order
  100. #else
  101. adr r3,.Lsha256_block_data_order
  102. #endif
  103. #if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)
  104. ldr r12,.LOPENSSL_armcap
  105. ldr r12,[r3,r12] @ OPENSSL_armcap_P
  106. #ifdef __APPLE__
  107. ldr r12,[r12]
  108. #endif
  109. tst r12,#ARMV8_SHA256
  110. bne .LARMv8
  111. tst r12,#ARMV7_NEON
  112. bne .LNEON
  113. #endif
  114. add r2,r1,r2,lsl#6 @ len to point at the end of inp
  115. stmdb sp!,{r0,r1,r2,r4-r11,lr}
  116. ldmia r0,{r4,r5,r6,r7,r8,r9,r10,r11}
  117. sub r14,r3,#256+32 @ K256
  118. sub sp,sp,#16*4 @ alloca(X[16])
  119. .Loop:
  120. # if __ARM_ARCH__>=7
  121. ldr r2,[r1],#4
  122. # else
  123. ldrb r2,[r1,#3]
  124. # endif
  125. eor r3,r5,r6 @ magic
  126. eor r12,r12,r12
  127. #if __ARM_ARCH__>=7
  128. @ ldr r2,[r1],#4 @ 0
  129. # if 0==15
  130. str r1,[sp,#17*4] @ make room for r1
  131. # endif
  132. eor r0,r8,r8,ror#5
  133. add r4,r4,r12 @ h+=Maj(a,b,c) from the past
  134. eor r0,r0,r8,ror#19 @ Sigma1(e)
  135. # ifndef __ARMEB__
  136. rev r2,r2
  137. # endif
  138. #else
  139. @ ldrb r2,[r1,#3] @ 0
  140. add r4,r4,r12 @ h+=Maj(a,b,c) from the past
  141. ldrb r12,[r1,#2]
  142. ldrb r0,[r1,#1]
  143. orr r2,r2,r12,lsl#8
  144. ldrb r12,[r1],#4
  145. orr r2,r2,r0,lsl#16
  146. # if 0==15
  147. str r1,[sp,#17*4] @ make room for r1
  148. # endif
  149. eor r0,r8,r8,ror#5
  150. orr r2,r2,r12,lsl#24
  151. eor r0,r0,r8,ror#19 @ Sigma1(e)
  152. #endif
  153. ldr r12,[r14],#4 @ *K256++
  154. add r11,r11,r2 @ h+=X[i]
  155. str r2,[sp,#0*4]
  156. eor r2,r9,r10
  157. add r11,r11,r0,ror#6 @ h+=Sigma1(e)
  158. and r2,r2,r8
  159. add r11,r11,r12 @ h+=K256[i]
  160. eor r2,r2,r10 @ Ch(e,f,g)
  161. eor r0,r4,r4,ror#11
  162. add r11,r11,r2 @ h+=Ch(e,f,g)
  163. #if 0==31
  164. and r12,r12,#0xff
  165. cmp r12,#0xf2 @ done?
  166. #endif
  167. #if 0<15
  168. # if __ARM_ARCH__>=7
  169. ldr r2,[r1],#4 @ prefetch
  170. # else
  171. ldrb r2,[r1,#3]
  172. # endif
  173. eor r12,r4,r5 @ a^b, b^c in next round
  174. #else
  175. ldr r2,[sp,#2*4] @ from future BODY_16_xx
  176. eor r12,r4,r5 @ a^b, b^c in next round
  177. ldr r1,[sp,#15*4] @ from future BODY_16_xx
  178. #endif
  179. eor r0,r0,r4,ror#20 @ Sigma0(a)
  180. and r3,r3,r12 @ (b^c)&=(a^b)
  181. add r7,r7,r11 @ d+=h
  182. eor r3,r3,r5 @ Maj(a,b,c)
  183. add r11,r11,r0,ror#2 @ h+=Sigma0(a)
  184. @ add r11,r11,r3 @ h+=Maj(a,b,c)
  185. #if __ARM_ARCH__>=7
  186. @ ldr r2,[r1],#4 @ 1
  187. # if 1==15
  188. str r1,[sp,#17*4] @ make room for r1
  189. # endif
  190. eor r0,r7,r7,ror#5
  191. add r11,r11,r3 @ h+=Maj(a,b,c) from the past
  192. eor r0,r0,r7,ror#19 @ Sigma1(e)
  193. # ifndef __ARMEB__
  194. rev r2,r2
  195. # endif
  196. #else
  197. @ ldrb r2,[r1,#3] @ 1
  198. add r11,r11,r3 @ h+=Maj(a,b,c) from the past
  199. ldrb r3,[r1,#2]
  200. ldrb r0,[r1,#1]
  201. orr r2,r2,r3,lsl#8
  202. ldrb r3,[r1],#4
  203. orr r2,r2,r0,lsl#16
  204. # if 1==15
  205. str r1,[sp,#17*4] @ make room for r1
  206. # endif
  207. eor r0,r7,r7,ror#5
  208. orr r2,r2,r3,lsl#24
  209. eor r0,r0,r7,ror#19 @ Sigma1(e)
  210. #endif
  211. ldr r3,[r14],#4 @ *K256++
  212. add r10,r10,r2 @ h+=X[i]
  213. str r2,[sp,#1*4]
  214. eor r2,r8,r9
  215. add r10,r10,r0,ror#6 @ h+=Sigma1(e)
  216. and r2,r2,r7
  217. add r10,r10,r3 @ h+=K256[i]
  218. eor r2,r2,r9 @ Ch(e,f,g)
  219. eor r0,r11,r11,ror#11
  220. add r10,r10,r2 @ h+=Ch(e,f,g)
  221. #if 1==31
  222. and r3,r3,#0xff
  223. cmp r3,#0xf2 @ done?
  224. #endif
  225. #if 1<15
  226. # if __ARM_ARCH__>=7
  227. ldr r2,[r1],#4 @ prefetch
  228. # else
  229. ldrb r2,[r1,#3]
  230. # endif
  231. eor r3,r11,r4 @ a^b, b^c in next round
  232. #else
  233. ldr r2,[sp,#3*4] @ from future BODY_16_xx
  234. eor r3,r11,r4 @ a^b, b^c in next round
  235. ldr r1,[sp,#0*4] @ from future BODY_16_xx
  236. #endif
  237. eor r0,r0,r11,ror#20 @ Sigma0(a)
  238. and r12,r12,r3 @ (b^c)&=(a^b)
  239. add r6,r6,r10 @ d+=h
  240. eor r12,r12,r4 @ Maj(a,b,c)
  241. add r10,r10,r0,ror#2 @ h+=Sigma0(a)
  242. @ add r10,r10,r12 @ h+=Maj(a,b,c)
  243. #if __ARM_ARCH__>=7
  244. @ ldr r2,[r1],#4 @ 2
  245. # if 2==15
  246. str r1,[sp,#17*4] @ make room for r1
  247. # endif
  248. eor r0,r6,r6,ror#5
  249. add r10,r10,r12 @ h+=Maj(a,b,c) from the past
  250. eor r0,r0,r6,ror#19 @ Sigma1(e)
  251. # ifndef __ARMEB__
  252. rev r2,r2
  253. # endif
  254. #else
  255. @ ldrb r2,[r1,#3] @ 2
  256. add r10,r10,r12 @ h+=Maj(a,b,c) from the past
  257. ldrb r12,[r1,#2]
  258. ldrb r0,[r1,#1]
  259. orr r2,r2,r12,lsl#8
  260. ldrb r12,[r1],#4
  261. orr r2,r2,r0,lsl#16
  262. # if 2==15
  263. str r1,[sp,#17*4] @ make room for r1
  264. # endif
  265. eor r0,r6,r6,ror#5
  266. orr r2,r2,r12,lsl#24
  267. eor r0,r0,r6,ror#19 @ Sigma1(e)
  268. #endif
  269. ldr r12,[r14],#4 @ *K256++
  270. add r9,r9,r2 @ h+=X[i]
  271. str r2,[sp,#2*4]
  272. eor r2,r7,r8
  273. add r9,r9,r0,ror#6 @ h+=Sigma1(e)
  274. and r2,r2,r6
  275. add r9,r9,r12 @ h+=K256[i]
  276. eor r2,r2,r8 @ Ch(e,f,g)
  277. eor r0,r10,r10,ror#11
  278. add r9,r9,r2 @ h+=Ch(e,f,g)
  279. #if 2==31
  280. and r12,r12,#0xff
  281. cmp r12,#0xf2 @ done?
  282. #endif
  283. #if 2<15
  284. # if __ARM_ARCH__>=7
  285. ldr r2,[r1],#4 @ prefetch
  286. # else
  287. ldrb r2,[r1,#3]
  288. # endif
  289. eor r12,r10,r11 @ a^b, b^c in next round
  290. #else
  291. ldr r2,[sp,#4*4] @ from future BODY_16_xx
  292. eor r12,r10,r11 @ a^b, b^c in next round
  293. ldr r1,[sp,#1*4] @ from future BODY_16_xx
  294. #endif
  295. eor r0,r0,r10,ror#20 @ Sigma0(a)
  296. and r3,r3,r12 @ (b^c)&=(a^b)
  297. add r5,r5,r9 @ d+=h
  298. eor r3,r3,r11 @ Maj(a,b,c)
  299. add r9,r9,r0,ror#2 @ h+=Sigma0(a)
  300. @ add r9,r9,r3 @ h+=Maj(a,b,c)
  301. #if __ARM_ARCH__>=7
  302. @ ldr r2,[r1],#4 @ 3
  303. # if 3==15
  304. str r1,[sp,#17*4] @ make room for r1
  305. # endif
  306. eor r0,r5,r5,ror#5
  307. add r9,r9,r3 @ h+=Maj(a,b,c) from the past
  308. eor r0,r0,r5,ror#19 @ Sigma1(e)
  309. # ifndef __ARMEB__
  310. rev r2,r2
  311. # endif
  312. #else
  313. @ ldrb r2,[r1,#3] @ 3
  314. add r9,r9,r3 @ h+=Maj(a,b,c) from the past
  315. ldrb r3,[r1,#2]
  316. ldrb r0,[r1,#1]
  317. orr r2,r2,r3,lsl#8
  318. ldrb r3,[r1],#4
  319. orr r2,r2,r0,lsl#16
  320. # if 3==15
  321. str r1,[sp,#17*4] @ make room for r1
  322. # endif
  323. eor r0,r5,r5,ror#5
  324. orr r2,r2,r3,lsl#24
  325. eor r0,r0,r5,ror#19 @ Sigma1(e)
  326. #endif
  327. ldr r3,[r14],#4 @ *K256++
  328. add r8,r8,r2 @ h+=X[i]
  329. str r2,[sp,#3*4]
  330. eor r2,r6,r7
  331. add r8,r8,r0,ror#6 @ h+=Sigma1(e)
  332. and r2,r2,r5
  333. add r8,r8,r3 @ h+=K256[i]
  334. eor r2,r2,r7 @ Ch(e,f,g)
  335. eor r0,r9,r9,ror#11
  336. add r8,r8,r2 @ h+=Ch(e,f,g)
  337. #if 3==31
  338. and r3,r3,#0xff
  339. cmp r3,#0xf2 @ done?
  340. #endif
  341. #if 3<15
  342. # if __ARM_ARCH__>=7
  343. ldr r2,[r1],#4 @ prefetch
  344. # else
  345. ldrb r2,[r1,#3]
  346. # endif
  347. eor r3,r9,r10 @ a^b, b^c in next round
  348. #else
  349. ldr r2,[sp,#5*4] @ from future BODY_16_xx
  350. eor r3,r9,r10 @ a^b, b^c in next round
  351. ldr r1,[sp,#2*4] @ from future BODY_16_xx
  352. #endif
  353. eor r0,r0,r9,ror#20 @ Sigma0(a)
  354. and r12,r12,r3 @ (b^c)&=(a^b)
  355. add r4,r4,r8 @ d+=h
  356. eor r12,r12,r10 @ Maj(a,b,c)
  357. add r8,r8,r0,ror#2 @ h+=Sigma0(a)
  358. @ add r8,r8,r12 @ h+=Maj(a,b,c)
  359. #if __ARM_ARCH__>=7
  360. @ ldr r2,[r1],#4 @ 4
  361. # if 4==15
  362. str r1,[sp,#17*4] @ make room for r1
  363. # endif
  364. eor r0,r4,r4,ror#5
  365. add r8,r8,r12 @ h+=Maj(a,b,c) from the past
  366. eor r0,r0,r4,ror#19 @ Sigma1(e)
  367. # ifndef __ARMEB__
  368. rev r2,r2
  369. # endif
  370. #else
  371. @ ldrb r2,[r1,#3] @ 4
  372. add r8,r8,r12 @ h+=Maj(a,b,c) from the past
  373. ldrb r12,[r1,#2]
  374. ldrb r0,[r1,#1]
  375. orr r2,r2,r12,lsl#8
  376. ldrb r12,[r1],#4
  377. orr r2,r2,r0,lsl#16
  378. # if 4==15
  379. str r1,[sp,#17*4] @ make room for r1
  380. # endif
  381. eor r0,r4,r4,ror#5
  382. orr r2,r2,r12,lsl#24
  383. eor r0,r0,r4,ror#19 @ Sigma1(e)
  384. #endif
  385. ldr r12,[r14],#4 @ *K256++
  386. add r7,r7,r2 @ h+=X[i]
  387. str r2,[sp,#4*4]
  388. eor r2,r5,r6
  389. add r7,r7,r0,ror#6 @ h+=Sigma1(e)
  390. and r2,r2,r4
  391. add r7,r7,r12 @ h+=K256[i]
  392. eor r2,r2,r6 @ Ch(e,f,g)
  393. eor r0,r8,r8,ror#11
  394. add r7,r7,r2 @ h+=Ch(e,f,g)
  395. #if 4==31
  396. and r12,r12,#0xff
  397. cmp r12,#0xf2 @ done?
  398. #endif
  399. #if 4<15
  400. # if __ARM_ARCH__>=7
  401. ldr r2,[r1],#4 @ prefetch
  402. # else
  403. ldrb r2,[r1,#3]
  404. # endif
  405. eor r12,r8,r9 @ a^b, b^c in next round
  406. #else
  407. ldr r2,[sp,#6*4] @ from future BODY_16_xx
  408. eor r12,r8,r9 @ a^b, b^c in next round
  409. ldr r1,[sp,#3*4] @ from future BODY_16_xx
  410. #endif
  411. eor r0,r0,r8,ror#20 @ Sigma0(a)
  412. and r3,r3,r12 @ (b^c)&=(a^b)
  413. add r11,r11,r7 @ d+=h
  414. eor r3,r3,r9 @ Maj(a,b,c)
  415. add r7,r7,r0,ror#2 @ h+=Sigma0(a)
  416. @ add r7,r7,r3 @ h+=Maj(a,b,c)
  417. #if __ARM_ARCH__>=7
  418. @ ldr r2,[r1],#4 @ 5
  419. # if 5==15
  420. str r1,[sp,#17*4] @ make room for r1
  421. # endif
  422. eor r0,r11,r11,ror#5
  423. add r7,r7,r3 @ h+=Maj(a,b,c) from the past
  424. eor r0,r0,r11,ror#19 @ Sigma1(e)
  425. # ifndef __ARMEB__
  426. rev r2,r2
  427. # endif
  428. #else
  429. @ ldrb r2,[r1,#3] @ 5
  430. add r7,r7,r3 @ h+=Maj(a,b,c) from the past
  431. ldrb r3,[r1,#2]
  432. ldrb r0,[r1,#1]
  433. orr r2,r2,r3,lsl#8
  434. ldrb r3,[r1],#4
  435. orr r2,r2,r0,lsl#16
  436. # if 5==15
  437. str r1,[sp,#17*4] @ make room for r1
  438. # endif
  439. eor r0,r11,r11,ror#5
  440. orr r2,r2,r3,lsl#24
  441. eor r0,r0,r11,ror#19 @ Sigma1(e)
  442. #endif
  443. ldr r3,[r14],#4 @ *K256++
  444. add r6,r6,r2 @ h+=X[i]
  445. str r2,[sp,#5*4]
  446. eor r2,r4,r5
  447. add r6,r6,r0,ror#6 @ h+=Sigma1(e)
  448. and r2,r2,r11
  449. add r6,r6,r3 @ h+=K256[i]
  450. eor r2,r2,r5 @ Ch(e,f,g)
  451. eor r0,r7,r7,ror#11
  452. add r6,r6,r2 @ h+=Ch(e,f,g)
  453. #if 5==31
  454. and r3,r3,#0xff
  455. cmp r3,#0xf2 @ done?
  456. #endif
  457. #if 5<15
  458. # if __ARM_ARCH__>=7
  459. ldr r2,[r1],#4 @ prefetch
  460. # else
  461. ldrb r2,[r1,#3]
  462. # endif
  463. eor r3,r7,r8 @ a^b, b^c in next round
  464. #else
  465. ldr r2,[sp,#7*4] @ from future BODY_16_xx
  466. eor r3,r7,r8 @ a^b, b^c in next round
  467. ldr r1,[sp,#4*4] @ from future BODY_16_xx
  468. #endif
  469. eor r0,r0,r7,ror#20 @ Sigma0(a)
  470. and r12,r12,r3 @ (b^c)&=(a^b)
  471. add r10,r10,r6 @ d+=h
  472. eor r12,r12,r8 @ Maj(a,b,c)
  473. add r6,r6,r0,ror#2 @ h+=Sigma0(a)
  474. @ add r6,r6,r12 @ h+=Maj(a,b,c)
  475. #if __ARM_ARCH__>=7
  476. @ ldr r2,[r1],#4 @ 6
  477. # if 6==15
  478. str r1,[sp,#17*4] @ make room for r1
  479. # endif
  480. eor r0,r10,r10,ror#5
  481. add r6,r6,r12 @ h+=Maj(a,b,c) from the past
  482. eor r0,r0,r10,ror#19 @ Sigma1(e)
  483. # ifndef __ARMEB__
  484. rev r2,r2
  485. # endif
  486. #else
  487. @ ldrb r2,[r1,#3] @ 6
  488. add r6,r6,r12 @ h+=Maj(a,b,c) from the past
  489. ldrb r12,[r1,#2]
  490. ldrb r0,[r1,#1]
  491. orr r2,r2,r12,lsl#8
  492. ldrb r12,[r1],#4
  493. orr r2,r2,r0,lsl#16
  494. # if 6==15
  495. str r1,[sp,#17*4] @ make room for r1
  496. # endif
  497. eor r0,r10,r10,ror#5
  498. orr r2,r2,r12,lsl#24
  499. eor r0,r0,r10,ror#19 @ Sigma1(e)
  500. #endif
  501. ldr r12,[r14],#4 @ *K256++
  502. add r5,r5,r2 @ h+=X[i]
  503. str r2,[sp,#6*4]
  504. eor r2,r11,r4
  505. add r5,r5,r0,ror#6 @ h+=Sigma1(e)
  506. and r2,r2,r10
  507. add r5,r5,r12 @ h+=K256[i]
  508. eor r2,r2,r4 @ Ch(e,f,g)
  509. eor r0,r6,r6,ror#11
  510. add r5,r5,r2 @ h+=Ch(e,f,g)
  511. #if 6==31
  512. and r12,r12,#0xff
  513. cmp r12,#0xf2 @ done?
  514. #endif
  515. #if 6<15
  516. # if __ARM_ARCH__>=7
  517. ldr r2,[r1],#4 @ prefetch
  518. # else
  519. ldrb r2,[r1,#3]
  520. # endif
  521. eor r12,r6,r7 @ a^b, b^c in next round
  522. #else
  523. ldr r2,[sp,#8*4] @ from future BODY_16_xx
  524. eor r12,r6,r7 @ a^b, b^c in next round
  525. ldr r1,[sp,#5*4] @ from future BODY_16_xx
  526. #endif
  527. eor r0,r0,r6,ror#20 @ Sigma0(a)
  528. and r3,r3,r12 @ (b^c)&=(a^b)
  529. add r9,r9,r5 @ d+=h
  530. eor r3,r3,r7 @ Maj(a,b,c)
  531. add r5,r5,r0,ror#2 @ h+=Sigma0(a)
  532. @ add r5,r5,r3 @ h+=Maj(a,b,c)
  533. #if __ARM_ARCH__>=7
  534. @ ldr r2,[r1],#4 @ 7
  535. # if 7==15
  536. str r1,[sp,#17*4] @ make room for r1
  537. # endif
  538. eor r0,r9,r9,ror#5
  539. add r5,r5,r3 @ h+=Maj(a,b,c) from the past
  540. eor r0,r0,r9,ror#19 @ Sigma1(e)
  541. # ifndef __ARMEB__
  542. rev r2,r2
  543. # endif
  544. #else
  545. @ ldrb r2,[r1,#3] @ 7
  546. add r5,r5,r3 @ h+=Maj(a,b,c) from the past
  547. ldrb r3,[r1,#2]
  548. ldrb r0,[r1,#1]
  549. orr r2,r2,r3,lsl#8
  550. ldrb r3,[r1],#4
  551. orr r2,r2,r0,lsl#16
  552. # if 7==15
  553. str r1,[sp,#17*4] @ make room for r1
  554. # endif
  555. eor r0,r9,r9,ror#5
  556. orr r2,r2,r3,lsl#24
  557. eor r0,r0,r9,ror#19 @ Sigma1(e)
  558. #endif
  559. ldr r3,[r14],#4 @ *K256++
  560. add r4,r4,r2 @ h+=X[i]
  561. str r2,[sp,#7*4]
  562. eor r2,r10,r11
  563. add r4,r4,r0,ror#6 @ h+=Sigma1(e)
  564. and r2,r2,r9
  565. add r4,r4,r3 @ h+=K256[i]
  566. eor r2,r2,r11 @ Ch(e,f,g)
  567. eor r0,r5,r5,ror#11
  568. add r4,r4,r2 @ h+=Ch(e,f,g)
  569. #if 7==31
  570. and r3,r3,#0xff
  571. cmp r3,#0xf2 @ done?
  572. #endif
  573. #if 7<15
  574. # if __ARM_ARCH__>=7
  575. ldr r2,[r1],#4 @ prefetch
  576. # else
  577. ldrb r2,[r1,#3]
  578. # endif
  579. eor r3,r5,r6 @ a^b, b^c in next round
  580. #else
  581. ldr r2,[sp,#9*4] @ from future BODY_16_xx
  582. eor r3,r5,r6 @ a^b, b^c in next round
  583. ldr r1,[sp,#6*4] @ from future BODY_16_xx
  584. #endif
  585. eor r0,r0,r5,ror#20 @ Sigma0(a)
  586. and r12,r12,r3 @ (b^c)&=(a^b)
  587. add r8,r8,r4 @ d+=h
  588. eor r12,r12,r6 @ Maj(a,b,c)
  589. add r4,r4,r0,ror#2 @ h+=Sigma0(a)
  590. @ add r4,r4,r12 @ h+=Maj(a,b,c)
  591. #if __ARM_ARCH__>=7
  592. @ ldr r2,[r1],#4 @ 8
  593. # if 8==15
  594. str r1,[sp,#17*4] @ make room for r1
  595. # endif
  596. eor r0,r8,r8,ror#5
  597. add r4,r4,r12 @ h+=Maj(a,b,c) from the past
  598. eor r0,r0,r8,ror#19 @ Sigma1(e)
  599. # ifndef __ARMEB__
  600. rev r2,r2
  601. # endif
  602. #else
  603. @ ldrb r2,[r1,#3] @ 8
  604. add r4,r4,r12 @ h+=Maj(a,b,c) from the past
  605. ldrb r12,[r1,#2]
  606. ldrb r0,[r1,#1]
  607. orr r2,r2,r12,lsl#8
  608. ldrb r12,[r1],#4
  609. orr r2,r2,r0,lsl#16
  610. # if 8==15
  611. str r1,[sp,#17*4] @ make room for r1
  612. # endif
  613. eor r0,r8,r8,ror#5
  614. orr r2,r2,r12,lsl#24
  615. eor r0,r0,r8,ror#19 @ Sigma1(e)
  616. #endif
  617. ldr r12,[r14],#4 @ *K256++
  618. add r11,r11,r2 @ h+=X[i]
  619. str r2,[sp,#8*4]
  620. eor r2,r9,r10
  621. add r11,r11,r0,ror#6 @ h+=Sigma1(e)
  622. and r2,r2,r8
  623. add r11,r11,r12 @ h+=K256[i]
  624. eor r2,r2,r10 @ Ch(e,f,g)
  625. eor r0,r4,r4,ror#11
  626. add r11,r11,r2 @ h+=Ch(e,f,g)
  627. #if 8==31
  628. and r12,r12,#0xff
  629. cmp r12,#0xf2 @ done?
  630. #endif
  631. #if 8<15
  632. # if __ARM_ARCH__>=7
  633. ldr r2,[r1],#4 @ prefetch
  634. # else
  635. ldrb r2,[r1,#3]
  636. # endif
  637. eor r12,r4,r5 @ a^b, b^c in next round
  638. #else
  639. ldr r2,[sp,#10*4] @ from future BODY_16_xx
  640. eor r12,r4,r5 @ a^b, b^c in next round
  641. ldr r1,[sp,#7*4] @ from future BODY_16_xx
  642. #endif
  643. eor r0,r0,r4,ror#20 @ Sigma0(a)
  644. and r3,r3,r12 @ (b^c)&=(a^b)
  645. add r7,r7,r11 @ d+=h
  646. eor r3,r3,r5 @ Maj(a,b,c)
  647. add r11,r11,r0,ror#2 @ h+=Sigma0(a)
  648. @ add r11,r11,r3 @ h+=Maj(a,b,c)
  649. #if __ARM_ARCH__>=7
  650. @ ldr r2,[r1],#4 @ 9
  651. # if 9==15
  652. str r1,[sp,#17*4] @ make room for r1
  653. # endif
  654. eor r0,r7,r7,ror#5
  655. add r11,r11,r3 @ h+=Maj(a,b,c) from the past
  656. eor r0,r0,r7,ror#19 @ Sigma1(e)
  657. # ifndef __ARMEB__
  658. rev r2,r2
  659. # endif
  660. #else
  661. @ ldrb r2,[r1,#3] @ 9
  662. add r11,r11,r3 @ h+=Maj(a,b,c) from the past
  663. ldrb r3,[r1,#2]
  664. ldrb r0,[r1,#1]
  665. orr r2,r2,r3,lsl#8
  666. ldrb r3,[r1],#4
  667. orr r2,r2,r0,lsl#16
  668. # if 9==15
  669. str r1,[sp,#17*4] @ make room for r1
  670. # endif
  671. eor r0,r7,r7,ror#5
  672. orr r2,r2,r3,lsl#24
  673. eor r0,r0,r7,ror#19 @ Sigma1(e)
  674. #endif
  675. ldr r3,[r14],#4 @ *K256++
  676. add r10,r10,r2 @ h+=X[i]
  677. str r2,[sp,#9*4]
  678. eor r2,r8,r9
  679. add r10,r10,r0,ror#6 @ h+=Sigma1(e)
  680. and r2,r2,r7
  681. add r10,r10,r3 @ h+=K256[i]
  682. eor r2,r2,r9 @ Ch(e,f,g)
  683. eor r0,r11,r11,ror#11
  684. add r10,r10,r2 @ h+=Ch(e,f,g)
  685. #if 9==31
  686. and r3,r3,#0xff
  687. cmp r3,#0xf2 @ done?
  688. #endif
  689. #if 9<15
  690. # if __ARM_ARCH__>=7
  691. ldr r2,[r1],#4 @ prefetch
  692. # else
  693. ldrb r2,[r1,#3]
  694. # endif
  695. eor r3,r11,r4 @ a^b, b^c in next round
  696. #else
  697. ldr r2,[sp,#11*4] @ from future BODY_16_xx
  698. eor r3,r11,r4 @ a^b, b^c in next round
  699. ldr r1,[sp,#8*4] @ from future BODY_16_xx
  700. #endif
  701. eor r0,r0,r11,ror#20 @ Sigma0(a)
  702. and r12,r12,r3 @ (b^c)&=(a^b)
  703. add r6,r6,r10 @ d+=h
  704. eor r12,r12,r4 @ Maj(a,b,c)
  705. add r10,r10,r0,ror#2 @ h+=Sigma0(a)
  706. @ add r10,r10,r12 @ h+=Maj(a,b,c)
  707. #if __ARM_ARCH__>=7
  708. @ ldr r2,[r1],#4 @ 10
  709. # if 10==15
  710. str r1,[sp,#17*4] @ make room for r1
  711. # endif
  712. eor r0,r6,r6,ror#5
  713. add r10,r10,r12 @ h+=Maj(a,b,c) from the past
  714. eor r0,r0,r6,ror#19 @ Sigma1(e)
  715. # ifndef __ARMEB__
  716. rev r2,r2
  717. # endif
  718. #else
  719. @ ldrb r2,[r1,#3] @ 10
  720. add r10,r10,r12 @ h+=Maj(a,b,c) from the past
  721. ldrb r12,[r1,#2]
  722. ldrb r0,[r1,#1]
  723. orr r2,r2,r12,lsl#8
  724. ldrb r12,[r1],#4
  725. orr r2,r2,r0,lsl#16
  726. # if 10==15
  727. str r1,[sp,#17*4] @ make room for r1
  728. # endif
  729. eor r0,r6,r6,ror#5
  730. orr r2,r2,r12,lsl#24
  731. eor r0,r0,r6,ror#19 @ Sigma1(e)
  732. #endif
  733. ldr r12,[r14],#4 @ *K256++
  734. add r9,r9,r2 @ h+=X[i]
  735. str r2,[sp,#10*4]
  736. eor r2,r7,r8
  737. add r9,r9,r0,ror#6 @ h+=Sigma1(e)
  738. and r2,r2,r6
  739. add r9,r9,r12 @ h+=K256[i]
  740. eor r2,r2,r8 @ Ch(e,f,g)
  741. eor r0,r10,r10,ror#11
  742. add r9,r9,r2 @ h+=Ch(e,f,g)
  743. #if 10==31
  744. and r12,r12,#0xff
  745. cmp r12,#0xf2 @ done?
  746. #endif
  747. #if 10<15
  748. # if __ARM_ARCH__>=7
  749. ldr r2,[r1],#4 @ prefetch
  750. # else
  751. ldrb r2,[r1,#3]
  752. # endif
  753. eor r12,r10,r11 @ a^b, b^c in next round
  754. #else
  755. ldr r2,[sp,#12*4] @ from future BODY_16_xx
  756. eor r12,r10,r11 @ a^b, b^c in next round
  757. ldr r1,[sp,#9*4] @ from future BODY_16_xx
  758. #endif
  759. eor r0,r0,r10,ror#20 @ Sigma0(a)
  760. and r3,r3,r12 @ (b^c)&=(a^b)
  761. add r5,r5,r9 @ d+=h
  762. eor r3,r3,r11 @ Maj(a,b,c)
  763. add r9,r9,r0,ror#2 @ h+=Sigma0(a)
  764. @ add r9,r9,r3 @ h+=Maj(a,b,c)
  765. #if __ARM_ARCH__>=7
  766. @ ldr r2,[r1],#4 @ 11
  767. # if 11==15
  768. str r1,[sp,#17*4] @ make room for r1
  769. # endif
  770. eor r0,r5,r5,ror#5
  771. add r9,r9,r3 @ h+=Maj(a,b,c) from the past
  772. eor r0,r0,r5,ror#19 @ Sigma1(e)
  773. # ifndef __ARMEB__
  774. rev r2,r2
  775. # endif
  776. #else
  777. @ ldrb r2,[r1,#3] @ 11
  778. add r9,r9,r3 @ h+=Maj(a,b,c) from the past
  779. ldrb r3,[r1,#2]
  780. ldrb r0,[r1,#1]
  781. orr r2,r2,r3,lsl#8
  782. ldrb r3,[r1],#4
  783. orr r2,r2,r0,lsl#16
  784. # if 11==15
  785. str r1,[sp,#17*4] @ make room for r1
  786. # endif
  787. eor r0,r5,r5,ror#5
  788. orr r2,r2,r3,lsl#24
  789. eor r0,r0,r5,ror#19 @ Sigma1(e)
  790. #endif
  791. ldr r3,[r14],#4 @ *K256++
  792. add r8,r8,r2 @ h+=X[i]
  793. str r2,[sp,#11*4]
  794. eor r2,r6,r7
  795. add r8,r8,r0,ror#6 @ h+=Sigma1(e)
  796. and r2,r2,r5
  797. add r8,r8,r3 @ h+=K256[i]
  798. eor r2,r2,r7 @ Ch(e,f,g)
  799. eor r0,r9,r9,ror#11
  800. add r8,r8,r2 @ h+=Ch(e,f,g)
  801. #if 11==31
  802. and r3,r3,#0xff
  803. cmp r3,#0xf2 @ done?
  804. #endif
  805. #if 11<15
  806. # if __ARM_ARCH__>=7
  807. ldr r2,[r1],#4 @ prefetch
  808. # else
  809. ldrb r2,[r1,#3]
  810. # endif
  811. eor r3,r9,r10 @ a^b, b^c in next round
  812. #else
  813. ldr r2,[sp,#13*4] @ from future BODY_16_xx
  814. eor r3,r9,r10 @ a^b, b^c in next round
  815. ldr r1,[sp,#10*4] @ from future BODY_16_xx
  816. #endif
  817. eor r0,r0,r9,ror#20 @ Sigma0(a)
  818. and r12,r12,r3 @ (b^c)&=(a^b)
  819. add r4,r4,r8 @ d+=h
  820. eor r12,r12,r10 @ Maj(a,b,c)
  821. add r8,r8,r0,ror#2 @ h+=Sigma0(a)
  822. @ add r8,r8,r12 @ h+=Maj(a,b,c)
  823. #if __ARM_ARCH__>=7
  824. @ ldr r2,[r1],#4 @ 12
  825. # if 12==15
  826. str r1,[sp,#17*4] @ make room for r1
  827. # endif
  828. eor r0,r4,r4,ror#5
  829. add r8,r8,r12 @ h+=Maj(a,b,c) from the past
  830. eor r0,r0,r4,ror#19 @ Sigma1(e)
  831. # ifndef __ARMEB__
  832. rev r2,r2
  833. # endif
  834. #else
  835. @ ldrb r2,[r1,#3] @ 12
  836. add r8,r8,r12 @ h+=Maj(a,b,c) from the past
  837. ldrb r12,[r1,#2]
  838. ldrb r0,[r1,#1]
  839. orr r2,r2,r12,lsl#8
  840. ldrb r12,[r1],#4
  841. orr r2,r2,r0,lsl#16
  842. # if 12==15
  843. str r1,[sp,#17*4] @ make room for r1
  844. # endif
  845. eor r0,r4,r4,ror#5
  846. orr r2,r2,r12,lsl#24
  847. eor r0,r0,r4,ror#19 @ Sigma1(e)
  848. #endif
  849. ldr r12,[r14],#4 @ *K256++
  850. add r7,r7,r2 @ h+=X[i]
  851. str r2,[sp,#12*4]
  852. eor r2,r5,r6
  853. add r7,r7,r0,ror#6 @ h+=Sigma1(e)
  854. and r2,r2,r4
  855. add r7,r7,r12 @ h+=K256[i]
  856. eor r2,r2,r6 @ Ch(e,f,g)
  857. eor r0,r8,r8,ror#11
  858. add r7,r7,r2 @ h+=Ch(e,f,g)
  859. #if 12==31
  860. and r12,r12,#0xff
  861. cmp r12,#0xf2 @ done?
  862. #endif
  863. #if 12<15
  864. # if __ARM_ARCH__>=7
  865. ldr r2,[r1],#4 @ prefetch
  866. # else
  867. ldrb r2,[r1,#3]
  868. # endif
  869. eor r12,r8,r9 @ a^b, b^c in next round
  870. #else
  871. ldr r2,[sp,#14*4] @ from future BODY_16_xx
  872. eor r12,r8,r9 @ a^b, b^c in next round
  873. ldr r1,[sp,#11*4] @ from future BODY_16_xx
  874. #endif
  875. eor r0,r0,r8,ror#20 @ Sigma0(a)
  876. and r3,r3,r12 @ (b^c)&=(a^b)
  877. add r11,r11,r7 @ d+=h
  878. eor r3,r3,r9 @ Maj(a,b,c)
  879. add r7,r7,r0,ror#2 @ h+=Sigma0(a)
  880. @ add r7,r7,r3 @ h+=Maj(a,b,c)
  881. #if __ARM_ARCH__>=7
  882. @ ldr r2,[r1],#4 @ 13
  883. # if 13==15
  884. str r1,[sp,#17*4] @ make room for r1
  885. # endif
  886. eor r0,r11,r11,ror#5
  887. add r7,r7,r3 @ h+=Maj(a,b,c) from the past
  888. eor r0,r0,r11,ror#19 @ Sigma1(e)
  889. # ifndef __ARMEB__
  890. rev r2,r2
  891. # endif
  892. #else
  893. @ ldrb r2,[r1,#3] @ 13
  894. add r7,r7,r3 @ h+=Maj(a,b,c) from the past
  895. ldrb r3,[r1,#2]
  896. ldrb r0,[r1,#1]
  897. orr r2,r2,r3,lsl#8
  898. ldrb r3,[r1],#4
  899. orr r2,r2,r0,lsl#16
  900. # if 13==15
  901. str r1,[sp,#17*4] @ make room for r1
  902. # endif
  903. eor r0,r11,r11,ror#5
  904. orr r2,r2,r3,lsl#24
  905. eor r0,r0,r11,ror#19 @ Sigma1(e)
  906. #endif
  907. ldr r3,[r14],#4 @ *K256++
  908. add r6,r6,r2 @ h+=X[i]
  909. str r2,[sp,#13*4]
  910. eor r2,r4,r5
  911. add r6,r6,r0,ror#6 @ h+=Sigma1(e)
  912. and r2,r2,r11
  913. add r6,r6,r3 @ h+=K256[i]
  914. eor r2,r2,r5 @ Ch(e,f,g)
  915. eor r0,r7,r7,ror#11
  916. add r6,r6,r2 @ h+=Ch(e,f,g)
  917. #if 13==31
  918. and r3,r3,#0xff
  919. cmp r3,#0xf2 @ done?
  920. #endif
  921. #if 13<15
  922. # if __ARM_ARCH__>=7
  923. ldr r2,[r1],#4 @ prefetch
  924. # else
  925. ldrb r2,[r1,#3]
  926. # endif
  927. eor r3,r7,r8 @ a^b, b^c in next round
  928. #else
  929. ldr r2,[sp,#15*4] @ from future BODY_16_xx
  930. eor r3,r7,r8 @ a^b, b^c in next round
  931. ldr r1,[sp,#12*4] @ from future BODY_16_xx
  932. #endif
  933. eor r0,r0,r7,ror#20 @ Sigma0(a)
  934. and r12,r12,r3 @ (b^c)&=(a^b)
  935. add r10,r10,r6 @ d+=h
  936. eor r12,r12,r8 @ Maj(a,b,c)
  937. add r6,r6,r0,ror#2 @ h+=Sigma0(a)
  938. @ add r6,r6,r12 @ h+=Maj(a,b,c)
  939. #if __ARM_ARCH__>=7
  940. @ ldr r2,[r1],#4 @ 14
  941. # if 14==15
  942. str r1,[sp,#17*4] @ make room for r1
  943. # endif
  944. eor r0,r10,r10,ror#5
  945. add r6,r6,r12 @ h+=Maj(a,b,c) from the past
  946. eor r0,r0,r10,ror#19 @ Sigma1(e)
  947. # ifndef __ARMEB__
  948. rev r2,r2
  949. # endif
  950. #else
  951. @ ldrb r2,[r1,#3] @ 14
  952. add r6,r6,r12 @ h+=Maj(a,b,c) from the past
  953. ldrb r12,[r1,#2]
  954. ldrb r0,[r1,#1]
  955. orr r2,r2,r12,lsl#8
  956. ldrb r12,[r1],#4
  957. orr r2,r2,r0,lsl#16
  958. # if 14==15
  959. str r1,[sp,#17*4] @ make room for r1
  960. # endif
  961. eor r0,r10,r10,ror#5
  962. orr r2,r2,r12,lsl#24
  963. eor r0,r0,r10,ror#19 @ Sigma1(e)
  964. #endif
  965. ldr r12,[r14],#4 @ *K256++
  966. add r5,r5,r2 @ h+=X[i]
  967. str r2,[sp,#14*4]
  968. eor r2,r11,r4
  969. add r5,r5,r0,ror#6 @ h+=Sigma1(e)
  970. and r2,r2,r10
  971. add r5,r5,r12 @ h+=K256[i]
  972. eor r2,r2,r4 @ Ch(e,f,g)
  973. eor r0,r6,r6,ror#11
  974. add r5,r5,r2 @ h+=Ch(e,f,g)
  975. #if 14==31
  976. and r12,r12,#0xff
  977. cmp r12,#0xf2 @ done?
  978. #endif
  979. #if 14<15
  980. # if __ARM_ARCH__>=7
  981. ldr r2,[r1],#4 @ prefetch
  982. # else
  983. ldrb r2,[r1,#3]
  984. # endif
  985. eor r12,r6,r7 @ a^b, b^c in next round
  986. #else
  987. ldr r2,[sp,#0*4] @ from future BODY_16_xx
  988. eor r12,r6,r7 @ a^b, b^c in next round
  989. ldr r1,[sp,#13*4] @ from future BODY_16_xx
  990. #endif
  991. eor r0,r0,r6,ror#20 @ Sigma0(a)
  992. and r3,r3,r12 @ (b^c)&=(a^b)
  993. add r9,r9,r5 @ d+=h
  994. eor r3,r3,r7 @ Maj(a,b,c)
  995. add r5,r5,r0,ror#2 @ h+=Sigma0(a)
  996. @ add r5,r5,r3 @ h+=Maj(a,b,c)
  997. #if __ARM_ARCH__>=7
  998. @ ldr r2,[r1],#4 @ 15
  999. # if 15==15
  1000. str r1,[sp,#17*4] @ make room for r1
  1001. # endif
  1002. eor r0,r9,r9,ror#5
  1003. add r5,r5,r3 @ h+=Maj(a,b,c) from the past
  1004. eor r0,r0,r9,ror#19 @ Sigma1(e)
  1005. # ifndef __ARMEB__
  1006. rev r2,r2
  1007. # endif
  1008. #else
  1009. @ ldrb r2,[r1,#3] @ 15
  1010. add r5,r5,r3 @ h+=Maj(a,b,c) from the past
  1011. ldrb r3,[r1,#2]
  1012. ldrb r0,[r1,#1]
  1013. orr r2,r2,r3,lsl#8
  1014. ldrb r3,[r1],#4
  1015. orr r2,r2,r0,lsl#16
  1016. # if 15==15
  1017. str r1,[sp,#17*4] @ make room for r1
  1018. # endif
  1019. eor r0,r9,r9,ror#5
  1020. orr r2,r2,r3,lsl#24
  1021. eor r0,r0,r9,ror#19 @ Sigma1(e)
  1022. #endif
  1023. ldr r3,[r14],#4 @ *K256++
  1024. add r4,r4,r2 @ h+=X[i]
  1025. str r2,[sp,#15*4]
  1026. eor r2,r10,r11
  1027. add r4,r4,r0,ror#6 @ h+=Sigma1(e)
  1028. and r2,r2,r9
  1029. add r4,r4,r3 @ h+=K256[i]
  1030. eor r2,r2,r11 @ Ch(e,f,g)
  1031. eor r0,r5,r5,ror#11
  1032. add r4,r4,r2 @ h+=Ch(e,f,g)
  1033. #if 15==31
  1034. and r3,r3,#0xff
  1035. cmp r3,#0xf2 @ done?
  1036. #endif
  1037. #if 15<15
  1038. # if __ARM_ARCH__>=7
  1039. ldr r2,[r1],#4 @ prefetch
  1040. # else
  1041. ldrb r2,[r1,#3]
  1042. # endif
  1043. eor r3,r5,r6 @ a^b, b^c in next round
  1044. #else
  1045. ldr r2,[sp,#1*4] @ from future BODY_16_xx
  1046. eor r3,r5,r6 @ a^b, b^c in next round
  1047. ldr r1,[sp,#14*4] @ from future BODY_16_xx
  1048. #endif
  1049. eor r0,r0,r5,ror#20 @ Sigma0(a)
  1050. and r12,r12,r3 @ (b^c)&=(a^b)
  1051. add r8,r8,r4 @ d+=h
  1052. eor r12,r12,r6 @ Maj(a,b,c)
  1053. add r4,r4,r0,ror#2 @ h+=Sigma0(a)
  1054. @ add r4,r4,r12 @ h+=Maj(a,b,c)
  1055. .Lrounds_16_xx:
  1056. @ ldr r2,[sp,#1*4] @ 16
  1057. @ ldr r1,[sp,#14*4]
  1058. mov r0,r2,ror#7
  1059. add r4,r4,r12 @ h+=Maj(a,b,c) from the past
  1060. mov r12,r1,ror#17
  1061. eor r0,r0,r2,ror#18
  1062. eor r12,r12,r1,ror#19
  1063. eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])
  1064. ldr r2,[sp,#0*4]
  1065. eor r12,r12,r1,lsr#10 @ sigma1(X[i+14])
  1066. ldr r1,[sp,#9*4]
  1067. add r12,r12,r0
  1068. eor r0,r8,r8,ror#5 @ from BODY_00_15
  1069. add r2,r2,r12
  1070. eor r0,r0,r8,ror#19 @ Sigma1(e)
  1071. add r2,r2,r1 @ X[i]
  1072. ldr r12,[r14],#4 @ *K256++
  1073. add r11,r11,r2 @ h+=X[i]
  1074. str r2,[sp,#0*4]
  1075. eor r2,r9,r10
  1076. add r11,r11,r0,ror#6 @ h+=Sigma1(e)
  1077. and r2,r2,r8
  1078. add r11,r11,r12 @ h+=K256[i]
  1079. eor r2,r2,r10 @ Ch(e,f,g)
  1080. eor r0,r4,r4,ror#11
  1081. add r11,r11,r2 @ h+=Ch(e,f,g)
  1082. #if 16==31
  1083. and r12,r12,#0xff
  1084. cmp r12,#0xf2 @ done?
  1085. #endif
  1086. #if 16<15
  1087. # if __ARM_ARCH__>=7
  1088. ldr r2,[r1],#4 @ prefetch
  1089. # else
  1090. ldrb r2,[r1,#3]
  1091. # endif
  1092. eor r12,r4,r5 @ a^b, b^c in next round
  1093. #else
  1094. ldr r2,[sp,#2*4] @ from future BODY_16_xx
  1095. eor r12,r4,r5 @ a^b, b^c in next round
  1096. ldr r1,[sp,#15*4] @ from future BODY_16_xx
  1097. #endif
  1098. eor r0,r0,r4,ror#20 @ Sigma0(a)
  1099. and r3,r3,r12 @ (b^c)&=(a^b)
  1100. add r7,r7,r11 @ d+=h
  1101. eor r3,r3,r5 @ Maj(a,b,c)
  1102. add r11,r11,r0,ror#2 @ h+=Sigma0(a)
  1103. @ add r11,r11,r3 @ h+=Maj(a,b,c)
  1104. @ ldr r2,[sp,#2*4] @ 17
  1105. @ ldr r1,[sp,#15*4]
  1106. mov r0,r2,ror#7
  1107. add r11,r11,r3 @ h+=Maj(a,b,c) from the past
  1108. mov r3,r1,ror#17
  1109. eor r0,r0,r2,ror#18
  1110. eor r3,r3,r1,ror#19
  1111. eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])
  1112. ldr r2,[sp,#1*4]
  1113. eor r3,r3,r1,lsr#10 @ sigma1(X[i+14])
  1114. ldr r1,[sp,#10*4]
  1115. add r3,r3,r0
  1116. eor r0,r7,r7,ror#5 @ from BODY_00_15
  1117. add r2,r2,r3
  1118. eor r0,r0,r7,ror#19 @ Sigma1(e)
  1119. add r2,r2,r1 @ X[i]
  1120. ldr r3,[r14],#4 @ *K256++
  1121. add r10,r10,r2 @ h+=X[i]
  1122. str r2,[sp,#1*4]
  1123. eor r2,r8,r9
  1124. add r10,r10,r0,ror#6 @ h+=Sigma1(e)
  1125. and r2,r2,r7
  1126. add r10,r10,r3 @ h+=K256[i]
  1127. eor r2,r2,r9 @ Ch(e,f,g)
  1128. eor r0,r11,r11,ror#11
  1129. add r10,r10,r2 @ h+=Ch(e,f,g)
  1130. #if 17==31
  1131. and r3,r3,#0xff
  1132. cmp r3,#0xf2 @ done?
  1133. #endif
  1134. #if 17<15
  1135. # if __ARM_ARCH__>=7
  1136. ldr r2,[r1],#4 @ prefetch
  1137. # else
  1138. ldrb r2,[r1,#3]
  1139. # endif
  1140. eor r3,r11,r4 @ a^b, b^c in next round
  1141. #else
  1142. ldr r2,[sp,#3*4] @ from future BODY_16_xx
  1143. eor r3,r11,r4 @ a^b, b^c in next round
  1144. ldr r1,[sp,#0*4] @ from future BODY_16_xx
  1145. #endif
  1146. eor r0,r0,r11,ror#20 @ Sigma0(a)
  1147. and r12,r12,r3 @ (b^c)&=(a^b)
  1148. add r6,r6,r10 @ d+=h
  1149. eor r12,r12,r4 @ Maj(a,b,c)
  1150. add r10,r10,r0,ror#2 @ h+=Sigma0(a)
  1151. @ add r10,r10,r12 @ h+=Maj(a,b,c)
  1152. @ ldr r2,[sp,#3*4] @ 18
  1153. @ ldr r1,[sp,#0*4]
  1154. mov r0,r2,ror#7
  1155. add r10,r10,r12 @ h+=Maj(a,b,c) from the past
  1156. mov r12,r1,ror#17
  1157. eor r0,r0,r2,ror#18
  1158. eor r12,r12,r1,ror#19
  1159. eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])
  1160. ldr r2,[sp,#2*4]
  1161. eor r12,r12,r1,lsr#10 @ sigma1(X[i+14])
  1162. ldr r1,[sp,#11*4]
  1163. add r12,r12,r0
  1164. eor r0,r6,r6,ror#5 @ from BODY_00_15
  1165. add r2,r2,r12
  1166. eor r0,r0,r6,ror#19 @ Sigma1(e)
  1167. add r2,r2,r1 @ X[i]
  1168. ldr r12,[r14],#4 @ *K256++
  1169. add r9,r9,r2 @ h+=X[i]
  1170. str r2,[sp,#2*4]
  1171. eor r2,r7,r8
  1172. add r9,r9,r0,ror#6 @ h+=Sigma1(e)
  1173. and r2,r2,r6
  1174. add r9,r9,r12 @ h+=K256[i]
  1175. eor r2,r2,r8 @ Ch(e,f,g)
  1176. eor r0,r10,r10,ror#11
  1177. add r9,r9,r2 @ h+=Ch(e,f,g)
  1178. #if 18==31
  1179. and r12,r12,#0xff
  1180. cmp r12,#0xf2 @ done?
  1181. #endif
  1182. #if 18<15
  1183. # if __ARM_ARCH__>=7
  1184. ldr r2,[r1],#4 @ prefetch
  1185. # else
  1186. ldrb r2,[r1,#3]
  1187. # endif
  1188. eor r12,r10,r11 @ a^b, b^c in next round
  1189. #else
  1190. ldr r2,[sp,#4*4] @ from future BODY_16_xx
  1191. eor r12,r10,r11 @ a^b, b^c in next round
  1192. ldr r1,[sp,#1*4] @ from future BODY_16_xx
  1193. #endif
  1194. eor r0,r0,r10,ror#20 @ Sigma0(a)
  1195. and r3,r3,r12 @ (b^c)&=(a^b)
  1196. add r5,r5,r9 @ d+=h
  1197. eor r3,r3,r11 @ Maj(a,b,c)
  1198. add r9,r9,r0,ror#2 @ h+=Sigma0(a)
  1199. @ add r9,r9,r3 @ h+=Maj(a,b,c)
  1200. @ ldr r2,[sp,#4*4] @ 19
  1201. @ ldr r1,[sp,#1*4]
  1202. mov r0,r2,ror#7
  1203. add r9,r9,r3 @ h+=Maj(a,b,c) from the past
  1204. mov r3,r1,ror#17
  1205. eor r0,r0,r2,ror#18
  1206. eor r3,r3,r1,ror#19
  1207. eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])
  1208. ldr r2,[sp,#3*4]
  1209. eor r3,r3,r1,lsr#10 @ sigma1(X[i+14])
  1210. ldr r1,[sp,#12*4]
  1211. add r3,r3,r0
  1212. eor r0,r5,r5,ror#5 @ from BODY_00_15
  1213. add r2,r2,r3
  1214. eor r0,r0,r5,ror#19 @ Sigma1(e)
  1215. add r2,r2,r1 @ X[i]
  1216. ldr r3,[r14],#4 @ *K256++
  1217. add r8,r8,r2 @ h+=X[i]
  1218. str r2,[sp,#3*4]
  1219. eor r2,r6,r7
  1220. add r8,r8,r0,ror#6 @ h+=Sigma1(e)
  1221. and r2,r2,r5
  1222. add r8,r8,r3 @ h+=K256[i]
  1223. eor r2,r2,r7 @ Ch(e,f,g)
  1224. eor r0,r9,r9,ror#11
  1225. add r8,r8,r2 @ h+=Ch(e,f,g)
  1226. #if 19==31
  1227. and r3,r3,#0xff
  1228. cmp r3,#0xf2 @ done?
  1229. #endif
  1230. #if 19<15
  1231. # if __ARM_ARCH__>=7
  1232. ldr r2,[r1],#4 @ prefetch
  1233. # else
  1234. ldrb r2,[r1,#3]
  1235. # endif
  1236. eor r3,r9,r10 @ a^b, b^c in next round
  1237. #else
  1238. ldr r2,[sp,#5*4] @ from future BODY_16_xx
  1239. eor r3,r9,r10 @ a^b, b^c in next round
  1240. ldr r1,[sp,#2*4] @ from future BODY_16_xx
  1241. #endif
  1242. eor r0,r0,r9,ror#20 @ Sigma0(a)
  1243. and r12,r12,r3 @ (b^c)&=(a^b)
  1244. add r4,r4,r8 @ d+=h
  1245. eor r12,r12,r10 @ Maj(a,b,c)
  1246. add r8,r8,r0,ror#2 @ h+=Sigma0(a)
  1247. @ add r8,r8,r12 @ h+=Maj(a,b,c)
  1248. @ ldr r2,[sp,#5*4] @ 20
  1249. @ ldr r1,[sp,#2*4]
  1250. mov r0,r2,ror#7
  1251. add r8,r8,r12 @ h+=Maj(a,b,c) from the past
  1252. mov r12,r1,ror#17
  1253. eor r0,r0,r2,ror#18
  1254. eor r12,r12,r1,ror#19
  1255. eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])
  1256. ldr r2,[sp,#4*4]
  1257. eor r12,r12,r1,lsr#10 @ sigma1(X[i+14])
  1258. ldr r1,[sp,#13*4]
  1259. add r12,r12,r0
  1260. eor r0,r4,r4,ror#5 @ from BODY_00_15
  1261. add r2,r2,r12
  1262. eor r0,r0,r4,ror#19 @ Sigma1(e)
  1263. add r2,r2,r1 @ X[i]
  1264. ldr r12,[r14],#4 @ *K256++
  1265. add r7,r7,r2 @ h+=X[i]
  1266. str r2,[sp,#4*4]
  1267. eor r2,r5,r6
  1268. add r7,r7,r0,ror#6 @ h+=Sigma1(e)
  1269. and r2,r2,r4
  1270. add r7,r7,r12 @ h+=K256[i]
  1271. eor r2,r2,r6 @ Ch(e,f,g)
  1272. eor r0,r8,r8,ror#11
  1273. add r7,r7,r2 @ h+=Ch(e,f,g)
  1274. #if 20==31
  1275. and r12,r12,#0xff
  1276. cmp r12,#0xf2 @ done?
  1277. #endif
  1278. #if 20<15
  1279. # if __ARM_ARCH__>=7
  1280. ldr r2,[r1],#4 @ prefetch
  1281. # else
  1282. ldrb r2,[r1,#3]
  1283. # endif
  1284. eor r12,r8,r9 @ a^b, b^c in next round
  1285. #else
  1286. ldr r2,[sp,#6*4] @ from future BODY_16_xx
  1287. eor r12,r8,r9 @ a^b, b^c in next round
  1288. ldr r1,[sp,#3*4] @ from future BODY_16_xx
  1289. #endif
  1290. eor r0,r0,r8,ror#20 @ Sigma0(a)
  1291. and r3,r3,r12 @ (b^c)&=(a^b)
  1292. add r11,r11,r7 @ d+=h
  1293. eor r3,r3,r9 @ Maj(a,b,c)
  1294. add r7,r7,r0,ror#2 @ h+=Sigma0(a)
  1295. @ add r7,r7,r3 @ h+=Maj(a,b,c)
  1296. @ ldr r2,[sp,#6*4] @ 21
  1297. @ ldr r1,[sp,#3*4]
  1298. mov r0,r2,ror#7
  1299. add r7,r7,r3 @ h+=Maj(a,b,c) from the past
  1300. mov r3,r1,ror#17
  1301. eor r0,r0,r2,ror#18
  1302. eor r3,r3,r1,ror#19
  1303. eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])
  1304. ldr r2,[sp,#5*4]
  1305. eor r3,r3,r1,lsr#10 @ sigma1(X[i+14])
  1306. ldr r1,[sp,#14*4]
  1307. add r3,r3,r0
  1308. eor r0,r11,r11,ror#5 @ from BODY_00_15
  1309. add r2,r2,r3
  1310. eor r0,r0,r11,ror#19 @ Sigma1(e)
  1311. add r2,r2,r1 @ X[i]
  1312. ldr r3,[r14],#4 @ *K256++
  1313. add r6,r6,r2 @ h+=X[i]
  1314. str r2,[sp,#5*4]
  1315. eor r2,r4,r5
  1316. add r6,r6,r0,ror#6 @ h+=Sigma1(e)
  1317. and r2,r2,r11
  1318. add r6,r6,r3 @ h+=K256[i]
  1319. eor r2,r2,r5 @ Ch(e,f,g)
  1320. eor r0,r7,r7,ror#11
  1321. add r6,r6,r2 @ h+=Ch(e,f,g)
  1322. #if 21==31
  1323. and r3,r3,#0xff
  1324. cmp r3,#0xf2 @ done?
  1325. #endif
  1326. #if 21<15
  1327. # if __ARM_ARCH__>=7
  1328. ldr r2,[r1],#4 @ prefetch
  1329. # else
  1330. ldrb r2,[r1,#3]
  1331. # endif
  1332. eor r3,r7,r8 @ a^b, b^c in next round
  1333. #else
  1334. ldr r2,[sp,#7*4] @ from future BODY_16_xx
  1335. eor r3,r7,r8 @ a^b, b^c in next round
  1336. ldr r1,[sp,#4*4] @ from future BODY_16_xx
  1337. #endif
  1338. eor r0,r0,r7,ror#20 @ Sigma0(a)
  1339. and r12,r12,r3 @ (b^c)&=(a^b)
  1340. add r10,r10,r6 @ d+=h
  1341. eor r12,r12,r8 @ Maj(a,b,c)
  1342. add r6,r6,r0,ror#2 @ h+=Sigma0(a)
  1343. @ add r6,r6,r12 @ h+=Maj(a,b,c)
  1344. @ ldr r2,[sp,#7*4] @ 22
  1345. @ ldr r1,[sp,#4*4]
  1346. mov r0,r2,ror#7
  1347. add r6,r6,r12 @ h+=Maj(a,b,c) from the past
  1348. mov r12,r1,ror#17
  1349. eor r0,r0,r2,ror#18
  1350. eor r12,r12,r1,ror#19
  1351. eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])
  1352. ldr r2,[sp,#6*4]
  1353. eor r12,r12,r1,lsr#10 @ sigma1(X[i+14])
  1354. ldr r1,[sp,#15*4]
  1355. add r12,r12,r0
  1356. eor r0,r10,r10,ror#5 @ from BODY_00_15
  1357. add r2,r2,r12
  1358. eor r0,r0,r10,ror#19 @ Sigma1(e)
  1359. add r2,r2,r1 @ X[i]
  1360. ldr r12,[r14],#4 @ *K256++
  1361. add r5,r5,r2 @ h+=X[i]
  1362. str r2,[sp,#6*4]
  1363. eor r2,r11,r4
  1364. add r5,r5,r0,ror#6 @ h+=Sigma1(e)
  1365. and r2,r2,r10
  1366. add r5,r5,r12 @ h+=K256[i]
  1367. eor r2,r2,r4 @ Ch(e,f,g)
  1368. eor r0,r6,r6,ror#11
  1369. add r5,r5,r2 @ h+=Ch(e,f,g)
  1370. #if 22==31
  1371. and r12,r12,#0xff
  1372. cmp r12,#0xf2 @ done?
  1373. #endif
  1374. #if 22<15
  1375. # if __ARM_ARCH__>=7
  1376. ldr r2,[r1],#4 @ prefetch
  1377. # else
  1378. ldrb r2,[r1,#3]
  1379. # endif
  1380. eor r12,r6,r7 @ a^b, b^c in next round
  1381. #else
  1382. ldr r2,[sp,#8*4] @ from future BODY_16_xx
  1383. eor r12,r6,r7 @ a^b, b^c in next round
  1384. ldr r1,[sp,#5*4] @ from future BODY_16_xx
  1385. #endif
  1386. eor r0,r0,r6,ror#20 @ Sigma0(a)
  1387. and r3,r3,r12 @ (b^c)&=(a^b)
  1388. add r9,r9,r5 @ d+=h
  1389. eor r3,r3,r7 @ Maj(a,b,c)
  1390. add r5,r5,r0,ror#2 @ h+=Sigma0(a)
  1391. @ add r5,r5,r3 @ h+=Maj(a,b,c)
  1392. @ ldr r2,[sp,#8*4] @ 23
  1393. @ ldr r1,[sp,#5*4]
  1394. mov r0,r2,ror#7
  1395. add r5,r5,r3 @ h+=Maj(a,b,c) from the past
  1396. mov r3,r1,ror#17
  1397. eor r0,r0,r2,ror#18
  1398. eor r3,r3,r1,ror#19
  1399. eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])
  1400. ldr r2,[sp,#7*4]
  1401. eor r3,r3,r1,lsr#10 @ sigma1(X[i+14])
  1402. ldr r1,[sp,#0*4]
  1403. add r3,r3,r0
  1404. eor r0,r9,r9,ror#5 @ from BODY_00_15
  1405. add r2,r2,r3
  1406. eor r0,r0,r9,ror#19 @ Sigma1(e)
  1407. add r2,r2,r1 @ X[i]
  1408. ldr r3,[r14],#4 @ *K256++
  1409. add r4,r4,r2 @ h+=X[i]
  1410. str r2,[sp,#7*4]
  1411. eor r2,r10,r11
  1412. add r4,r4,r0,ror#6 @ h+=Sigma1(e)
  1413. and r2,r2,r9
  1414. add r4,r4,r3 @ h+=K256[i]
  1415. eor r2,r2,r11 @ Ch(e,f,g)
  1416. eor r0,r5,r5,ror#11
  1417. add r4,r4,r2 @ h+=Ch(e,f,g)
  1418. #if 23==31
  1419. and r3,r3,#0xff
  1420. cmp r3,#0xf2 @ done?
  1421. #endif
  1422. #if 23<15
  1423. # if __ARM_ARCH__>=7
  1424. ldr r2,[r1],#4 @ prefetch
  1425. # else
  1426. ldrb r2,[r1,#3]
  1427. # endif
  1428. eor r3,r5,r6 @ a^b, b^c in next round
  1429. #else
  1430. ldr r2,[sp,#9*4] @ from future BODY_16_xx
  1431. eor r3,r5,r6 @ a^b, b^c in next round
  1432. ldr r1,[sp,#6*4] @ from future BODY_16_xx
  1433. #endif
  1434. eor r0,r0,r5,ror#20 @ Sigma0(a)
  1435. and r12,r12,r3 @ (b^c)&=(a^b)
  1436. add r8,r8,r4 @ d+=h
  1437. eor r12,r12,r6 @ Maj(a,b,c)
  1438. add r4,r4,r0,ror#2 @ h+=Sigma0(a)
  1439. @ add r4,r4,r12 @ h+=Maj(a,b,c)
  1440. @ ldr r2,[sp,#9*4] @ 24
  1441. @ ldr r1,[sp,#6*4]
  1442. mov r0,r2,ror#7
  1443. add r4,r4,r12 @ h+=Maj(a,b,c) from the past
  1444. mov r12,r1,ror#17
  1445. eor r0,r0,r2,ror#18
  1446. eor r12,r12,r1,ror#19
  1447. eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])
  1448. ldr r2,[sp,#8*4]
  1449. eor r12,r12,r1,lsr#10 @ sigma1(X[i+14])
  1450. ldr r1,[sp,#1*4]
  1451. add r12,r12,r0
  1452. eor r0,r8,r8,ror#5 @ from BODY_00_15
  1453. add r2,r2,r12
  1454. eor r0,r0,r8,ror#19 @ Sigma1(e)
  1455. add r2,r2,r1 @ X[i]
  1456. ldr r12,[r14],#4 @ *K256++
  1457. add r11,r11,r2 @ h+=X[i]
  1458. str r2,[sp,#8*4]
  1459. eor r2,r9,r10
  1460. add r11,r11,r0,ror#6 @ h+=Sigma1(e)
  1461. and r2,r2,r8
  1462. add r11,r11,r12 @ h+=K256[i]
  1463. eor r2,r2,r10 @ Ch(e,f,g)
  1464. eor r0,r4,r4,ror#11
  1465. add r11,r11,r2 @ h+=Ch(e,f,g)
  1466. #if 24==31
  1467. and r12,r12,#0xff
  1468. cmp r12,#0xf2 @ done?
  1469. #endif
  1470. #if 24<15
  1471. # if __ARM_ARCH__>=7
  1472. ldr r2,[r1],#4 @ prefetch
  1473. # else
  1474. ldrb r2,[r1,#3]
  1475. # endif
  1476. eor r12,r4,r5 @ a^b, b^c in next round
  1477. #else
  1478. ldr r2,[sp,#10*4] @ from future BODY_16_xx
  1479. eor r12,r4,r5 @ a^b, b^c in next round
  1480. ldr r1,[sp,#7*4] @ from future BODY_16_xx
  1481. #endif
  1482. eor r0,r0,r4,ror#20 @ Sigma0(a)
  1483. and r3,r3,r12 @ (b^c)&=(a^b)
  1484. add r7,r7,r11 @ d+=h
  1485. eor r3,r3,r5 @ Maj(a,b,c)
  1486. add r11,r11,r0,ror#2 @ h+=Sigma0(a)
  1487. @ add r11,r11,r3 @ h+=Maj(a,b,c)
  1488. @ ldr r2,[sp,#10*4] @ 25
  1489. @ ldr r1,[sp,#7*4]
  1490. mov r0,r2,ror#7
  1491. add r11,r11,r3 @ h+=Maj(a,b,c) from the past
  1492. mov r3,r1,ror#17
  1493. eor r0,r0,r2,ror#18
  1494. eor r3,r3,r1,ror#19
  1495. eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])
  1496. ldr r2,[sp,#9*4]
  1497. eor r3,r3,r1,lsr#10 @ sigma1(X[i+14])
  1498. ldr r1,[sp,#2*4]
  1499. add r3,r3,r0
  1500. eor r0,r7,r7,ror#5 @ from BODY_00_15
  1501. add r2,r2,r3
  1502. eor r0,r0,r7,ror#19 @ Sigma1(e)
  1503. add r2,r2,r1 @ X[i]
  1504. ldr r3,[r14],#4 @ *K256++
  1505. add r10,r10,r2 @ h+=X[i]
  1506. str r2,[sp,#9*4]
  1507. eor r2,r8,r9
  1508. add r10,r10,r0,ror#6 @ h+=Sigma1(e)
  1509. and r2,r2,r7
  1510. add r10,r10,r3 @ h+=K256[i]
  1511. eor r2,r2,r9 @ Ch(e,f,g)
  1512. eor r0,r11,r11,ror#11
  1513. add r10,r10,r2 @ h+=Ch(e,f,g)
  1514. #if 25==31
  1515. and r3,r3,#0xff
  1516. cmp r3,#0xf2 @ done?
  1517. #endif
  1518. #if 25<15
  1519. # if __ARM_ARCH__>=7
  1520. ldr r2,[r1],#4 @ prefetch
  1521. # else
  1522. ldrb r2,[r1,#3]
  1523. # endif
  1524. eor r3,r11,r4 @ a^b, b^c in next round
  1525. #else
  1526. ldr r2,[sp,#11*4] @ from future BODY_16_xx
  1527. eor r3,r11,r4 @ a^b, b^c in next round
  1528. ldr r1,[sp,#8*4] @ from future BODY_16_xx
  1529. #endif
  1530. eor r0,r0,r11,ror#20 @ Sigma0(a)
  1531. and r12,r12,r3 @ (b^c)&=(a^b)
  1532. add r6,r6,r10 @ d+=h
  1533. eor r12,r12,r4 @ Maj(a,b,c)
  1534. add r10,r10,r0,ror#2 @ h+=Sigma0(a)
  1535. @ add r10,r10,r12 @ h+=Maj(a,b,c)
  1536. @ ldr r2,[sp,#11*4] @ 26
  1537. @ ldr r1,[sp,#8*4]
  1538. mov r0,r2,ror#7
  1539. add r10,r10,r12 @ h+=Maj(a,b,c) from the past
  1540. mov r12,r1,ror#17
  1541. eor r0,r0,r2,ror#18
  1542. eor r12,r12,r1,ror#19
  1543. eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])
  1544. ldr r2,[sp,#10*4]
  1545. eor r12,r12,r1,lsr#10 @ sigma1(X[i+14])
  1546. ldr r1,[sp,#3*4]
  1547. add r12,r12,r0
  1548. eor r0,r6,r6,ror#5 @ from BODY_00_15
  1549. add r2,r2,r12
  1550. eor r0,r0,r6,ror#19 @ Sigma1(e)
  1551. add r2,r2,r1 @ X[i]
  1552. ldr r12,[r14],#4 @ *K256++
  1553. add r9,r9,r2 @ h+=X[i]
  1554. str r2,[sp,#10*4]
  1555. eor r2,r7,r8
  1556. add r9,r9,r0,ror#6 @ h+=Sigma1(e)
  1557. and r2,r2,r6
  1558. add r9,r9,r12 @ h+=K256[i]
  1559. eor r2,r2,r8 @ Ch(e,f,g)
  1560. eor r0,r10,r10,ror#11
  1561. add r9,r9,r2 @ h+=Ch(e,f,g)
  1562. #if 26==31
  1563. and r12,r12,#0xff
  1564. cmp r12,#0xf2 @ done?
  1565. #endif
  1566. #if 26<15
  1567. # if __ARM_ARCH__>=7
  1568. ldr r2,[r1],#4 @ prefetch
  1569. # else
  1570. ldrb r2,[r1,#3]
  1571. # endif
  1572. eor r12,r10,r11 @ a^b, b^c in next round
  1573. #else
  1574. ldr r2,[sp,#12*4] @ from future BODY_16_xx
  1575. eor r12,r10,r11 @ a^b, b^c in next round
  1576. ldr r1,[sp,#9*4] @ from future BODY_16_xx
  1577. #endif
  1578. eor r0,r0,r10,ror#20 @ Sigma0(a)
  1579. and r3,r3,r12 @ (b^c)&=(a^b)
  1580. add r5,r5,r9 @ d+=h
  1581. eor r3,r3,r11 @ Maj(a,b,c)
  1582. add r9,r9,r0,ror#2 @ h+=Sigma0(a)
  1583. @ add r9,r9,r3 @ h+=Maj(a,b,c)
  1584. @ ldr r2,[sp,#12*4] @ 27
  1585. @ ldr r1,[sp,#9*4]
  1586. mov r0,r2,ror#7
  1587. add r9,r9,r3 @ h+=Maj(a,b,c) from the past
  1588. mov r3,r1,ror#17
  1589. eor r0,r0,r2,ror#18
  1590. eor r3,r3,r1,ror#19
  1591. eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])
  1592. ldr r2,[sp,#11*4]
  1593. eor r3,r3,r1,lsr#10 @ sigma1(X[i+14])
  1594. ldr r1,[sp,#4*4]
  1595. add r3,r3,r0
  1596. eor r0,r5,r5,ror#5 @ from BODY_00_15
  1597. add r2,r2,r3
  1598. eor r0,r0,r5,ror#19 @ Sigma1(e)
  1599. add r2,r2,r1 @ X[i]
  1600. ldr r3,[r14],#4 @ *K256++
  1601. add r8,r8,r2 @ h+=X[i]
  1602. str r2,[sp,#11*4]
  1603. eor r2,r6,r7
  1604. add r8,r8,r0,ror#6 @ h+=Sigma1(e)
  1605. and r2,r2,r5
  1606. add r8,r8,r3 @ h+=K256[i]
  1607. eor r2,r2,r7 @ Ch(e,f,g)
  1608. eor r0,r9,r9,ror#11
  1609. add r8,r8,r2 @ h+=Ch(e,f,g)
  1610. #if 27==31
  1611. and r3,r3,#0xff
  1612. cmp r3,#0xf2 @ done?
  1613. #endif
  1614. #if 27<15
  1615. # if __ARM_ARCH__>=7
  1616. ldr r2,[r1],#4 @ prefetch
  1617. # else
  1618. ldrb r2,[r1,#3]
  1619. # endif
  1620. eor r3,r9,r10 @ a^b, b^c in next round
  1621. #else
  1622. ldr r2,[sp,#13*4] @ from future BODY_16_xx
  1623. eor r3,r9,r10 @ a^b, b^c in next round
  1624. ldr r1,[sp,#10*4] @ from future BODY_16_xx
  1625. #endif
  1626. eor r0,r0,r9,ror#20 @ Sigma0(a)
  1627. and r12,r12,r3 @ (b^c)&=(a^b)
  1628. add r4,r4,r8 @ d+=h
  1629. eor r12,r12,r10 @ Maj(a,b,c)
  1630. add r8,r8,r0,ror#2 @ h+=Sigma0(a)
  1631. @ add r8,r8,r12 @ h+=Maj(a,b,c)
  1632. @ ldr r2,[sp,#13*4] @ 28
  1633. @ ldr r1,[sp,#10*4]
  1634. mov r0,r2,ror#7
  1635. add r8,r8,r12 @ h+=Maj(a,b,c) from the past
  1636. mov r12,r1,ror#17
  1637. eor r0,r0,r2,ror#18
  1638. eor r12,r12,r1,ror#19
  1639. eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])
  1640. ldr r2,[sp,#12*4]
  1641. eor r12,r12,r1,lsr#10 @ sigma1(X[i+14])
  1642. ldr r1,[sp,#5*4]
  1643. add r12,r12,r0
  1644. eor r0,r4,r4,ror#5 @ from BODY_00_15
  1645. add r2,r2,r12
  1646. eor r0,r0,r4,ror#19 @ Sigma1(e)
  1647. add r2,r2,r1 @ X[i]
  1648. ldr r12,[r14],#4 @ *K256++
  1649. add r7,r7,r2 @ h+=X[i]
  1650. str r2,[sp,#12*4]
  1651. eor r2,r5,r6
  1652. add r7,r7,r0,ror#6 @ h+=Sigma1(e)
  1653. and r2,r2,r4
  1654. add r7,r7,r12 @ h+=K256[i]
  1655. eor r2,r2,r6 @ Ch(e,f,g)
  1656. eor r0,r8,r8,ror#11
  1657. add r7,r7,r2 @ h+=Ch(e,f,g)
  1658. #if 28==31
  1659. and r12,r12,#0xff
  1660. cmp r12,#0xf2 @ done?
  1661. #endif
  1662. #if 28<15
  1663. # if __ARM_ARCH__>=7
  1664. ldr r2,[r1],#4 @ prefetch
  1665. # else
  1666. ldrb r2,[r1,#3]
  1667. # endif
  1668. eor r12,r8,r9 @ a^b, b^c in next round
  1669. #else
  1670. ldr r2,[sp,#14*4] @ from future BODY_16_xx
  1671. eor r12,r8,r9 @ a^b, b^c in next round
  1672. ldr r1,[sp,#11*4] @ from future BODY_16_xx
  1673. #endif
  1674. eor r0,r0,r8,ror#20 @ Sigma0(a)
  1675. and r3,r3,r12 @ (b^c)&=(a^b)
  1676. add r11,r11,r7 @ d+=h
  1677. eor r3,r3,r9 @ Maj(a,b,c)
  1678. add r7,r7,r0,ror#2 @ h+=Sigma0(a)
  1679. @ add r7,r7,r3 @ h+=Maj(a,b,c)
  1680. @ ldr r2,[sp,#14*4] @ 29
  1681. @ ldr r1,[sp,#11*4]
  1682. mov r0,r2,ror#7
  1683. add r7,r7,r3 @ h+=Maj(a,b,c) from the past
  1684. mov r3,r1,ror#17
  1685. eor r0,r0,r2,ror#18
  1686. eor r3,r3,r1,ror#19
  1687. eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])
  1688. ldr r2,[sp,#13*4]
  1689. eor r3,r3,r1,lsr#10 @ sigma1(X[i+14])
  1690. ldr r1,[sp,#6*4]
  1691. add r3,r3,r0
  1692. eor r0,r11,r11,ror#5 @ from BODY_00_15
  1693. add r2,r2,r3
  1694. eor r0,r0,r11,ror#19 @ Sigma1(e)
  1695. add r2,r2,r1 @ X[i]
  1696. ldr r3,[r14],#4 @ *K256++
  1697. add r6,r6,r2 @ h+=X[i]
  1698. str r2,[sp,#13*4]
  1699. eor r2,r4,r5
  1700. add r6,r6,r0,ror#6 @ h+=Sigma1(e)
  1701. and r2,r2,r11
  1702. add r6,r6,r3 @ h+=K256[i]
  1703. eor r2,r2,r5 @ Ch(e,f,g)
  1704. eor r0,r7,r7,ror#11
  1705. add r6,r6,r2 @ h+=Ch(e,f,g)
  1706. #if 29==31
  1707. and r3,r3,#0xff
  1708. cmp r3,#0xf2 @ done?
  1709. #endif
  1710. #if 29<15
  1711. # if __ARM_ARCH__>=7
  1712. ldr r2,[r1],#4 @ prefetch
  1713. # else
  1714. ldrb r2,[r1,#3]
  1715. # endif
  1716. eor r3,r7,r8 @ a^b, b^c in next round
  1717. #else
  1718. ldr r2,[sp,#15*4] @ from future BODY_16_xx
  1719. eor r3,r7,r8 @ a^b, b^c in next round
  1720. ldr r1,[sp,#12*4] @ from future BODY_16_xx
  1721. #endif
  1722. eor r0,r0,r7,ror#20 @ Sigma0(a)
  1723. and r12,r12,r3 @ (b^c)&=(a^b)
  1724. add r10,r10,r6 @ d+=h
  1725. eor r12,r12,r8 @ Maj(a,b,c)
  1726. add r6,r6,r0,ror#2 @ h+=Sigma0(a)
  1727. @ add r6,r6,r12 @ h+=Maj(a,b,c)
  1728. @ ldr r2,[sp,#15*4] @ 30
  1729. @ ldr r1,[sp,#12*4]
  1730. mov r0,r2,ror#7
  1731. add r6,r6,r12 @ h+=Maj(a,b,c) from the past
  1732. mov r12,r1,ror#17
  1733. eor r0,r0,r2,ror#18
  1734. eor r12,r12,r1,ror#19
  1735. eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])
  1736. ldr r2,[sp,#14*4]
  1737. eor r12,r12,r1,lsr#10 @ sigma1(X[i+14])
  1738. ldr r1,[sp,#7*4]
  1739. add r12,r12,r0
  1740. eor r0,r10,r10,ror#5 @ from BODY_00_15
  1741. add r2,r2,r12
  1742. eor r0,r0,r10,ror#19 @ Sigma1(e)
  1743. add r2,r2,r1 @ X[i]
  1744. ldr r12,[r14],#4 @ *K256++
  1745. add r5,r5,r2 @ h+=X[i]
  1746. str r2,[sp,#14*4]
  1747. eor r2,r11,r4
  1748. add r5,r5,r0,ror#6 @ h+=Sigma1(e)
  1749. and r2,r2,r10
  1750. add r5,r5,r12 @ h+=K256[i]
  1751. eor r2,r2,r4 @ Ch(e,f,g)
  1752. eor r0,r6,r6,ror#11
  1753. add r5,r5,r2 @ h+=Ch(e,f,g)
  1754. #if 30==31
  1755. and r12,r12,#0xff
  1756. cmp r12,#0xf2 @ done?
  1757. #endif
  1758. #if 30<15
  1759. # if __ARM_ARCH__>=7
  1760. ldr r2,[r1],#4 @ prefetch
  1761. # else
  1762. ldrb r2,[r1,#3]
  1763. # endif
  1764. eor r12,r6,r7 @ a^b, b^c in next round
  1765. #else
  1766. ldr r2,[sp,#0*4] @ from future BODY_16_xx
  1767. eor r12,r6,r7 @ a^b, b^c in next round
  1768. ldr r1,[sp,#13*4] @ from future BODY_16_xx
  1769. #endif
  1770. eor r0,r0,r6,ror#20 @ Sigma0(a)
  1771. and r3,r3,r12 @ (b^c)&=(a^b)
  1772. add r9,r9,r5 @ d+=h
  1773. eor r3,r3,r7 @ Maj(a,b,c)
  1774. add r5,r5,r0,ror#2 @ h+=Sigma0(a)
  1775. @ add r5,r5,r3 @ h+=Maj(a,b,c)
  1776. @ ldr r2,[sp,#0*4] @ 31
  1777. @ ldr r1,[sp,#13*4]
  1778. mov r0,r2,ror#7
  1779. add r5,r5,r3 @ h+=Maj(a,b,c) from the past
  1780. mov r3,r1,ror#17
  1781. eor r0,r0,r2,ror#18
  1782. eor r3,r3,r1,ror#19
  1783. eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])
  1784. ldr r2,[sp,#15*4]
  1785. eor r3,r3,r1,lsr#10 @ sigma1(X[i+14])
  1786. ldr r1,[sp,#8*4]
  1787. add r3,r3,r0
  1788. eor r0,r9,r9,ror#5 @ from BODY_00_15
  1789. add r2,r2,r3
  1790. eor r0,r0,r9,ror#19 @ Sigma1(e)
  1791. add r2,r2,r1 @ X[i]
  1792. ldr r3,[r14],#4 @ *K256++
  1793. add r4,r4,r2 @ h+=X[i]
  1794. str r2,[sp,#15*4]
  1795. eor r2,r10,r11
  1796. add r4,r4,r0,ror#6 @ h+=Sigma1(e)
  1797. and r2,r2,r9
  1798. add r4,r4,r3 @ h+=K256[i]
  1799. eor r2,r2,r11 @ Ch(e,f,g)
  1800. eor r0,r5,r5,ror#11
  1801. add r4,r4,r2 @ h+=Ch(e,f,g)
  1802. #if 31==31
  1803. and r3,r3,#0xff
  1804. cmp r3,#0xf2 @ done?
  1805. #endif
  1806. #if 31<15
  1807. # if __ARM_ARCH__>=7
  1808. ldr r2,[r1],#4 @ prefetch
  1809. # else
  1810. ldrb r2,[r1,#3]
  1811. # endif
  1812. eor r3,r5,r6 @ a^b, b^c in next round
  1813. #else
  1814. ldr r2,[sp,#1*4] @ from future BODY_16_xx
  1815. eor r3,r5,r6 @ a^b, b^c in next round
  1816. ldr r1,[sp,#14*4] @ from future BODY_16_xx
  1817. #endif
  1818. eor r0,r0,r5,ror#20 @ Sigma0(a)
  1819. and r12,r12,r3 @ (b^c)&=(a^b)
  1820. add r8,r8,r4 @ d+=h
  1821. eor r12,r12,r6 @ Maj(a,b,c)
  1822. add r4,r4,r0,ror#2 @ h+=Sigma0(a)
  1823. @ add r4,r4,r12 @ h+=Maj(a,b,c)
  1824. #if __ARM_ARCH__>=7
  1825. ite eq @ Thumb2 thing, sanity check in ARM
  1826. #endif
  1827. ldreq r3,[sp,#16*4] @ pull ctx
  1828. bne .Lrounds_16_xx
  1829. add r4,r4,r12 @ h+=Maj(a,b,c) from the past
  1830. ldr r0,[r3,#0]
  1831. ldr r2,[r3,#4]
  1832. ldr r12,[r3,#8]
  1833. add r4,r4,r0
  1834. ldr r0,[r3,#12]
  1835. add r5,r5,r2
  1836. ldr r2,[r3,#16]
  1837. add r6,r6,r12
  1838. ldr r12,[r3,#20]
  1839. add r7,r7,r0
  1840. ldr r0,[r3,#24]
  1841. add r8,r8,r2
  1842. ldr r2,[r3,#28]
  1843. add r9,r9,r12
  1844. ldr r1,[sp,#17*4] @ pull inp
  1845. ldr r12,[sp,#18*4] @ pull inp+len
  1846. add r10,r10,r0
  1847. add r11,r11,r2
  1848. stmia r3,{r4,r5,r6,r7,r8,r9,r10,r11}
  1849. cmp r1,r12
  1850. sub r14,r14,#256 @ rewind Ktbl
  1851. bne .Loop
  1852. add sp,sp,#19*4 @ destroy frame
  1853. #if __ARM_ARCH__>=5
  1854. ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,pc}
  1855. #else
  1856. ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,lr}
  1857. tst lr,#1
  1858. moveq pc,lr @ be binary compatible with V4, yet
  1859. .word 0xe12fff1e @ interoperable with Thumb ISA:-)
  1860. #endif
  1861. .size sha256_block_data_order,.-sha256_block_data_order
  1862. #if __ARM_MAX_ARCH__>=7
  1863. .arch armv7-a
  1864. .fpu neon
  1865. .globl sha256_block_data_order_neon
  1866. .hidden sha256_block_data_order_neon
  1867. .type sha256_block_data_order_neon,%function
  1868. .align 5
  1869. .skip 16
  1870. sha256_block_data_order_neon:
  1871. .LNEON:
  1872. stmdb sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}
  1873. sub r11,sp,#16*4+16
  1874. adr r14,K256
  1875. bic r11,r11,#15 @ align for 128-bit stores
  1876. mov r12,sp
  1877. mov sp,r11 @ alloca
  1878. add r2,r1,r2,lsl#6 @ len to point at the end of inp
  1879. vld1.8 {q0},[r1]!
  1880. vld1.8 {q1},[r1]!
  1881. vld1.8 {q2},[r1]!
  1882. vld1.8 {q3},[r1]!
  1883. vld1.32 {q8},[r14,:128]!
  1884. vld1.32 {q9},[r14,:128]!
  1885. vld1.32 {q10},[r14,:128]!
  1886. vld1.32 {q11},[r14,:128]!
  1887. vrev32.8 q0,q0 @ yes, even on
  1888. str r0,[sp,#64]
  1889. vrev32.8 q1,q1 @ big-endian
  1890. str r1,[sp,#68]
  1891. mov r1,sp
  1892. vrev32.8 q2,q2
  1893. str r2,[sp,#72]
  1894. vrev32.8 q3,q3
  1895. str r12,[sp,#76] @ save original sp
  1896. vadd.i32 q8,q8,q0
  1897. vadd.i32 q9,q9,q1
  1898. vst1.32 {q8},[r1,:128]!
  1899. vadd.i32 q10,q10,q2
  1900. vst1.32 {q9},[r1,:128]!
  1901. vadd.i32 q11,q11,q3
  1902. vst1.32 {q10},[r1,:128]!
  1903. vst1.32 {q11},[r1,:128]!
  1904. ldmia r0,{r4,r5,r6,r7,r8,r9,r10,r11}
  1905. sub r1,r1,#64
  1906. ldr r2,[sp,#0]
  1907. eor r12,r12,r12
  1908. eor r3,r5,r6
  1909. b .L_00_48
  1910. .align 4
  1911. .L_00_48:
  1912. vext.8 q8,q0,q1,#4
  1913. add r11,r11,r2
  1914. eor r2,r9,r10
  1915. eor r0,r8,r8,ror#5
  1916. vext.8 q9,q2,q3,#4
  1917. add r4,r4,r12
  1918. and r2,r2,r8
  1919. eor r12,r0,r8,ror#19
  1920. vshr.u32 q10,q8,#7
  1921. eor r0,r4,r4,ror#11
  1922. eor r2,r2,r10
  1923. vadd.i32 q0,q0,q9
  1924. add r11,r11,r12,ror#6
  1925. eor r12,r4,r5
  1926. vshr.u32 q9,q8,#3
  1927. eor r0,r0,r4,ror#20
  1928. add r11,r11,r2
  1929. vsli.32 q10,q8,#25
  1930. ldr r2,[sp,#4]
  1931. and r3,r3,r12
  1932. vshr.u32 q11,q8,#18
  1933. add r7,r7,r11
  1934. add r11,r11,r0,ror#2
  1935. eor r3,r3,r5
  1936. veor q9,q9,q10
  1937. add r10,r10,r2
  1938. vsli.32 q11,q8,#14
  1939. eor r2,r8,r9
  1940. eor r0,r7,r7,ror#5
  1941. vshr.u32 d24,d7,#17
  1942. add r11,r11,r3
  1943. and r2,r2,r7
  1944. veor q9,q9,q11
  1945. eor r3,r0,r7,ror#19
  1946. eor r0,r11,r11,ror#11
  1947. vsli.32 d24,d7,#15
  1948. eor r2,r2,r9
  1949. add r10,r10,r3,ror#6
  1950. vshr.u32 d25,d7,#10
  1951. eor r3,r11,r4
  1952. eor r0,r0,r11,ror#20
  1953. vadd.i32 q0,q0,q9
  1954. add r10,r10,r2
  1955. ldr r2,[sp,#8]
  1956. veor d25,d25,d24
  1957. and r12,r12,r3
  1958. add r6,r6,r10
  1959. vshr.u32 d24,d7,#19
  1960. add r10,r10,r0,ror#2
  1961. eor r12,r12,r4
  1962. vsli.32 d24,d7,#13
  1963. add r9,r9,r2
  1964. eor r2,r7,r8
  1965. veor d25,d25,d24
  1966. eor r0,r6,r6,ror#5
  1967. add r10,r10,r12
  1968. vadd.i32 d0,d0,d25
  1969. and r2,r2,r6
  1970. eor r12,r0,r6,ror#19
  1971. vshr.u32 d24,d0,#17
  1972. eor r0,r10,r10,ror#11
  1973. eor r2,r2,r8
  1974. vsli.32 d24,d0,#15
  1975. add r9,r9,r12,ror#6
  1976. eor r12,r10,r11
  1977. vshr.u32 d25,d0,#10
  1978. eor r0,r0,r10,ror#20
  1979. add r9,r9,r2
  1980. veor d25,d25,d24
  1981. ldr r2,[sp,#12]
  1982. and r3,r3,r12
  1983. vshr.u32 d24,d0,#19
  1984. add r5,r5,r9
  1985. add r9,r9,r0,ror#2
  1986. eor r3,r3,r11
  1987. vld1.32 {q8},[r14,:128]!
  1988. add r8,r8,r2
  1989. vsli.32 d24,d0,#13
  1990. eor r2,r6,r7
  1991. eor r0,r5,r5,ror#5
  1992. veor d25,d25,d24
  1993. add r9,r9,r3
  1994. and r2,r2,r5
  1995. vadd.i32 d1,d1,d25
  1996. eor r3,r0,r5,ror#19
  1997. eor r0,r9,r9,ror#11
  1998. vadd.i32 q8,q8,q0
  1999. eor r2,r2,r7
  2000. add r8,r8,r3,ror#6
  2001. eor r3,r9,r10
  2002. eor r0,r0,r9,ror#20
  2003. add r8,r8,r2
  2004. ldr r2,[sp,#16]
  2005. and r12,r12,r3
  2006. add r4,r4,r8
  2007. vst1.32 {q8},[r1,:128]!
  2008. add r8,r8,r0,ror#2
  2009. eor r12,r12,r10
  2010. vext.8 q8,q1,q2,#4
  2011. add r7,r7,r2
  2012. eor r2,r5,r6
  2013. eor r0,r4,r4,ror#5
  2014. vext.8 q9,q3,q0,#4
  2015. add r8,r8,r12
  2016. and r2,r2,r4
  2017. eor r12,r0,r4,ror#19
  2018. vshr.u32 q10,q8,#7
  2019. eor r0,r8,r8,ror#11
  2020. eor r2,r2,r6
  2021. vadd.i32 q1,q1,q9
  2022. add r7,r7,r12,ror#6
  2023. eor r12,r8,r9
  2024. vshr.u32 q9,q8,#3
  2025. eor r0,r0,r8,ror#20
  2026. add r7,r7,r2
  2027. vsli.32 q10,q8,#25
  2028. ldr r2,[sp,#20]
  2029. and r3,r3,r12
  2030. vshr.u32 q11,q8,#18
  2031. add r11,r11,r7
  2032. add r7,r7,r0,ror#2
  2033. eor r3,r3,r9
  2034. veor q9,q9,q10
  2035. add r6,r6,r2
  2036. vsli.32 q11,q8,#14
  2037. eor r2,r4,r5
  2038. eor r0,r11,r11,ror#5
  2039. vshr.u32 d24,d1,#17
  2040. add r7,r7,r3
  2041. and r2,r2,r11
  2042. veor q9,q9,q11
  2043. eor r3,r0,r11,ror#19
  2044. eor r0,r7,r7,ror#11
  2045. vsli.32 d24,d1,#15
  2046. eor r2,r2,r5
  2047. add r6,r6,r3,ror#6
  2048. vshr.u32 d25,d1,#10
  2049. eor r3,r7,r8
  2050. eor r0,r0,r7,ror#20
  2051. vadd.i32 q1,q1,q9
  2052. add r6,r6,r2
  2053. ldr r2,[sp,#24]
  2054. veor d25,d25,d24
  2055. and r12,r12,r3
  2056. add r10,r10,r6
  2057. vshr.u32 d24,d1,#19
  2058. add r6,r6,r0,ror#2
  2059. eor r12,r12,r8
  2060. vsli.32 d24,d1,#13
  2061. add r5,r5,r2
  2062. eor r2,r11,r4
  2063. veor d25,d25,d24
  2064. eor r0,r10,r10,ror#5
  2065. add r6,r6,r12
  2066. vadd.i32 d2,d2,d25
  2067. and r2,r2,r10
  2068. eor r12,r0,r10,ror#19
  2069. vshr.u32 d24,d2,#17
  2070. eor r0,r6,r6,ror#11
  2071. eor r2,r2,r4
  2072. vsli.32 d24,d2,#15
  2073. add r5,r5,r12,ror#6
  2074. eor r12,r6,r7
  2075. vshr.u32 d25,d2,#10
  2076. eor r0,r0,r6,ror#20
  2077. add r5,r5,r2
  2078. veor d25,d25,d24
  2079. ldr r2,[sp,#28]
  2080. and r3,r3,r12
  2081. vshr.u32 d24,d2,#19
  2082. add r9,r9,r5
  2083. add r5,r5,r0,ror#2
  2084. eor r3,r3,r7
  2085. vld1.32 {q8},[r14,:128]!
  2086. add r4,r4,r2
  2087. vsli.32 d24,d2,#13
  2088. eor r2,r10,r11
  2089. eor r0,r9,r9,ror#5
  2090. veor d25,d25,d24
  2091. add r5,r5,r3
  2092. and r2,r2,r9
  2093. vadd.i32 d3,d3,d25
  2094. eor r3,r0,r9,ror#19
  2095. eor r0,r5,r5,ror#11
  2096. vadd.i32 q8,q8,q1
  2097. eor r2,r2,r11
  2098. add r4,r4,r3,ror#6
  2099. eor r3,r5,r6
  2100. eor r0,r0,r5,ror#20
  2101. add r4,r4,r2
  2102. ldr r2,[sp,#32]
  2103. and r12,r12,r3
  2104. add r8,r8,r4
  2105. vst1.32 {q8},[r1,:128]!
  2106. add r4,r4,r0,ror#2
  2107. eor r12,r12,r6
  2108. vext.8 q8,q2,q3,#4
  2109. add r11,r11,r2
  2110. eor r2,r9,r10
  2111. eor r0,r8,r8,ror#5
  2112. vext.8 q9,q0,q1,#4
  2113. add r4,r4,r12
  2114. and r2,r2,r8
  2115. eor r12,r0,r8,ror#19
  2116. vshr.u32 q10,q8,#7
  2117. eor r0,r4,r4,ror#11
  2118. eor r2,r2,r10
  2119. vadd.i32 q2,q2,q9
  2120. add r11,r11,r12,ror#6
  2121. eor r12,r4,r5
  2122. vshr.u32 q9,q8,#3
  2123. eor r0,r0,r4,ror#20
  2124. add r11,r11,r2
  2125. vsli.32 q10,q8,#25
  2126. ldr r2,[sp,#36]
  2127. and r3,r3,r12
  2128. vshr.u32 q11,q8,#18
  2129. add r7,r7,r11
  2130. add r11,r11,r0,ror#2
  2131. eor r3,r3,r5
  2132. veor q9,q9,q10
  2133. add r10,r10,r2
  2134. vsli.32 q11,q8,#14
  2135. eor r2,r8,r9
  2136. eor r0,r7,r7,ror#5
  2137. vshr.u32 d24,d3,#17
  2138. add r11,r11,r3
  2139. and r2,r2,r7
  2140. veor q9,q9,q11
  2141. eor r3,r0,r7,ror#19
  2142. eor r0,r11,r11,ror#11
  2143. vsli.32 d24,d3,#15
  2144. eor r2,r2,r9
  2145. add r10,r10,r3,ror#6
  2146. vshr.u32 d25,d3,#10
  2147. eor r3,r11,r4
  2148. eor r0,r0,r11,ror#20
  2149. vadd.i32 q2,q2,q9
  2150. add r10,r10,r2
  2151. ldr r2,[sp,#40]
  2152. veor d25,d25,d24
  2153. and r12,r12,r3
  2154. add r6,r6,r10
  2155. vshr.u32 d24,d3,#19
  2156. add r10,r10,r0,ror#2
  2157. eor r12,r12,r4
  2158. vsli.32 d24,d3,#13
  2159. add r9,r9,r2
  2160. eor r2,r7,r8
  2161. veor d25,d25,d24
  2162. eor r0,r6,r6,ror#5
  2163. add r10,r10,r12
  2164. vadd.i32 d4,d4,d25
  2165. and r2,r2,r6
  2166. eor r12,r0,r6,ror#19
  2167. vshr.u32 d24,d4,#17
  2168. eor r0,r10,r10,ror#11
  2169. eor r2,r2,r8
  2170. vsli.32 d24,d4,#15
  2171. add r9,r9,r12,ror#6
  2172. eor r12,r10,r11
  2173. vshr.u32 d25,d4,#10
  2174. eor r0,r0,r10,ror#20
  2175. add r9,r9,r2
  2176. veor d25,d25,d24
  2177. ldr r2,[sp,#44]
  2178. and r3,r3,r12
  2179. vshr.u32 d24,d4,#19
  2180. add r5,r5,r9
  2181. add r9,r9,r0,ror#2
  2182. eor r3,r3,r11
  2183. vld1.32 {q8},[r14,:128]!
  2184. add r8,r8,r2
  2185. vsli.32 d24,d4,#13
  2186. eor r2,r6,r7
  2187. eor r0,r5,r5,ror#5
  2188. veor d25,d25,d24
  2189. add r9,r9,r3
  2190. and r2,r2,r5
  2191. vadd.i32 d5,d5,d25
  2192. eor r3,r0,r5,ror#19
  2193. eor r0,r9,r9,ror#11
  2194. vadd.i32 q8,q8,q2
  2195. eor r2,r2,r7
  2196. add r8,r8,r3,ror#6
  2197. eor r3,r9,r10
  2198. eor r0,r0,r9,ror#20
  2199. add r8,r8,r2
  2200. ldr r2,[sp,#48]
  2201. and r12,r12,r3
  2202. add r4,r4,r8
  2203. vst1.32 {q8},[r1,:128]!
  2204. add r8,r8,r0,ror#2
  2205. eor r12,r12,r10
  2206. vext.8 q8,q3,q0,#4
  2207. add r7,r7,r2
  2208. eor r2,r5,r6
  2209. eor r0,r4,r4,ror#5
  2210. vext.8 q9,q1,q2,#4
  2211. add r8,r8,r12
  2212. and r2,r2,r4
  2213. eor r12,r0,r4,ror#19
  2214. vshr.u32 q10,q8,#7
  2215. eor r0,r8,r8,ror#11
  2216. eor r2,r2,r6
  2217. vadd.i32 q3,q3,q9
  2218. add r7,r7,r12,ror#6
  2219. eor r12,r8,r9
  2220. vshr.u32 q9,q8,#3
  2221. eor r0,r0,r8,ror#20
  2222. add r7,r7,r2
  2223. vsli.32 q10,q8,#25
  2224. ldr r2,[sp,#52]
  2225. and r3,r3,r12
  2226. vshr.u32 q11,q8,#18
  2227. add r11,r11,r7
  2228. add r7,r7,r0,ror#2
  2229. eor r3,r3,r9
  2230. veor q9,q9,q10
  2231. add r6,r6,r2
  2232. vsli.32 q11,q8,#14
  2233. eor r2,r4,r5
  2234. eor r0,r11,r11,ror#5
  2235. vshr.u32 d24,d5,#17
  2236. add r7,r7,r3
  2237. and r2,r2,r11
  2238. veor q9,q9,q11
  2239. eor r3,r0,r11,ror#19
  2240. eor r0,r7,r7,ror#11
  2241. vsli.32 d24,d5,#15
  2242. eor r2,r2,r5
  2243. add r6,r6,r3,ror#6
  2244. vshr.u32 d25,d5,#10
  2245. eor r3,r7,r8
  2246. eor r0,r0,r7,ror#20
  2247. vadd.i32 q3,q3,q9
  2248. add r6,r6,r2
  2249. ldr r2,[sp,#56]
  2250. veor d25,d25,d24
  2251. and r12,r12,r3
  2252. add r10,r10,r6
  2253. vshr.u32 d24,d5,#19
  2254. add r6,r6,r0,ror#2
  2255. eor r12,r12,r8
  2256. vsli.32 d24,d5,#13
  2257. add r5,r5,r2
  2258. eor r2,r11,r4
  2259. veor d25,d25,d24
  2260. eor r0,r10,r10,ror#5
  2261. add r6,r6,r12
  2262. vadd.i32 d6,d6,d25
  2263. and r2,r2,r10
  2264. eor r12,r0,r10,ror#19
  2265. vshr.u32 d24,d6,#17
  2266. eor r0,r6,r6,ror#11
  2267. eor r2,r2,r4
  2268. vsli.32 d24,d6,#15
  2269. add r5,r5,r12,ror#6
  2270. eor r12,r6,r7
  2271. vshr.u32 d25,d6,#10
  2272. eor r0,r0,r6,ror#20
  2273. add r5,r5,r2
  2274. veor d25,d25,d24
  2275. ldr r2,[sp,#60]
  2276. and r3,r3,r12
  2277. vshr.u32 d24,d6,#19
  2278. add r9,r9,r5
  2279. add r5,r5,r0,ror#2
  2280. eor r3,r3,r7
  2281. vld1.32 {q8},[r14,:128]!
  2282. add r4,r4,r2
  2283. vsli.32 d24,d6,#13
  2284. eor r2,r10,r11
  2285. eor r0,r9,r9,ror#5
  2286. veor d25,d25,d24
  2287. add r5,r5,r3
  2288. and r2,r2,r9
  2289. vadd.i32 d7,d7,d25
  2290. eor r3,r0,r9,ror#19
  2291. eor r0,r5,r5,ror#11
  2292. vadd.i32 q8,q8,q3
  2293. eor r2,r2,r11
  2294. add r4,r4,r3,ror#6
  2295. eor r3,r5,r6
  2296. eor r0,r0,r5,ror#20
  2297. add r4,r4,r2
  2298. ldr r2,[r14]
  2299. and r12,r12,r3
  2300. add r8,r8,r4
  2301. vst1.32 {q8},[r1,:128]!
  2302. add r4,r4,r0,ror#2
  2303. eor r12,r12,r6
  2304. teq r2,#0 @ check for K256 terminator
  2305. ldr r2,[sp,#0]
  2306. sub r1,r1,#64
  2307. bne .L_00_48
  2308. ldr r1,[sp,#68]
  2309. ldr r0,[sp,#72]
  2310. sub r14,r14,#256 @ rewind r14
  2311. teq r1,r0
  2312. it eq
  2313. subeq r1,r1,#64 @ avoid SEGV
  2314. vld1.8 {q0},[r1]! @ load next input block
  2315. vld1.8 {q1},[r1]!
  2316. vld1.8 {q2},[r1]!
  2317. vld1.8 {q3},[r1]!
  2318. it ne
  2319. strne r1,[sp,#68]
  2320. mov r1,sp
  2321. add r11,r11,r2
  2322. eor r2,r9,r10
  2323. eor r0,r8,r8,ror#5
  2324. add r4,r4,r12
  2325. vld1.32 {q8},[r14,:128]!
  2326. and r2,r2,r8
  2327. eor r12,r0,r8,ror#19
  2328. eor r0,r4,r4,ror#11
  2329. eor r2,r2,r10
  2330. vrev32.8 q0,q0
  2331. add r11,r11,r12,ror#6
  2332. eor r12,r4,r5
  2333. eor r0,r0,r4,ror#20
  2334. add r11,r11,r2
  2335. vadd.i32 q8,q8,q0
  2336. ldr r2,[sp,#4]
  2337. and r3,r3,r12
  2338. add r7,r7,r11
  2339. add r11,r11,r0,ror#2
  2340. eor r3,r3,r5
  2341. add r10,r10,r2
  2342. eor r2,r8,r9
  2343. eor r0,r7,r7,ror#5
  2344. add r11,r11,r3
  2345. and r2,r2,r7
  2346. eor r3,r0,r7,ror#19
  2347. eor r0,r11,r11,ror#11
  2348. eor r2,r2,r9
  2349. add r10,r10,r3,ror#6
  2350. eor r3,r11,r4
  2351. eor r0,r0,r11,ror#20
  2352. add r10,r10,r2
  2353. ldr r2,[sp,#8]
  2354. and r12,r12,r3
  2355. add r6,r6,r10
  2356. add r10,r10,r0,ror#2
  2357. eor r12,r12,r4
  2358. add r9,r9,r2
  2359. eor r2,r7,r8
  2360. eor r0,r6,r6,ror#5
  2361. add r10,r10,r12
  2362. and r2,r2,r6
  2363. eor r12,r0,r6,ror#19
  2364. eor r0,r10,r10,ror#11
  2365. eor r2,r2,r8
  2366. add r9,r9,r12,ror#6
  2367. eor r12,r10,r11
  2368. eor r0,r0,r10,ror#20
  2369. add r9,r9,r2
  2370. ldr r2,[sp,#12]
  2371. and r3,r3,r12
  2372. add r5,r5,r9
  2373. add r9,r9,r0,ror#2
  2374. eor r3,r3,r11
  2375. add r8,r8,r2
  2376. eor r2,r6,r7
  2377. eor r0,r5,r5,ror#5
  2378. add r9,r9,r3
  2379. and r2,r2,r5
  2380. eor r3,r0,r5,ror#19
  2381. eor r0,r9,r9,ror#11
  2382. eor r2,r2,r7
  2383. add r8,r8,r3,ror#6
  2384. eor r3,r9,r10
  2385. eor r0,r0,r9,ror#20
  2386. add r8,r8,r2
  2387. ldr r2,[sp,#16]
  2388. and r12,r12,r3
  2389. add r4,r4,r8
  2390. add r8,r8,r0,ror#2
  2391. eor r12,r12,r10
  2392. vst1.32 {q8},[r1,:128]!
  2393. add r7,r7,r2
  2394. eor r2,r5,r6
  2395. eor r0,r4,r4,ror#5
  2396. add r8,r8,r12
  2397. vld1.32 {q8},[r14,:128]!
  2398. and r2,r2,r4
  2399. eor r12,r0,r4,ror#19
  2400. eor r0,r8,r8,ror#11
  2401. eor r2,r2,r6
  2402. vrev32.8 q1,q1
  2403. add r7,r7,r12,ror#6
  2404. eor r12,r8,r9
  2405. eor r0,r0,r8,ror#20
  2406. add r7,r7,r2
  2407. vadd.i32 q8,q8,q1
  2408. ldr r2,[sp,#20]
  2409. and r3,r3,r12
  2410. add r11,r11,r7
  2411. add r7,r7,r0,ror#2
  2412. eor r3,r3,r9
  2413. add r6,r6,r2
  2414. eor r2,r4,r5
  2415. eor r0,r11,r11,ror#5
  2416. add r7,r7,r3
  2417. and r2,r2,r11
  2418. eor r3,r0,r11,ror#19
  2419. eor r0,r7,r7,ror#11
  2420. eor r2,r2,r5
  2421. add r6,r6,r3,ror#6
  2422. eor r3,r7,r8
  2423. eor r0,r0,r7,ror#20
  2424. add r6,r6,r2
  2425. ldr r2,[sp,#24]
  2426. and r12,r12,r3
  2427. add r10,r10,r6
  2428. add r6,r6,r0,ror#2
  2429. eor r12,r12,r8
  2430. add r5,r5,r2
  2431. eor r2,r11,r4
  2432. eor r0,r10,r10,ror#5
  2433. add r6,r6,r12
  2434. and r2,r2,r10
  2435. eor r12,r0,r10,ror#19
  2436. eor r0,r6,r6,ror#11
  2437. eor r2,r2,r4
  2438. add r5,r5,r12,ror#6
  2439. eor r12,r6,r7
  2440. eor r0,r0,r6,ror#20
  2441. add r5,r5,r2
  2442. ldr r2,[sp,#28]
  2443. and r3,r3,r12
  2444. add r9,r9,r5
  2445. add r5,r5,r0,ror#2
  2446. eor r3,r3,r7
  2447. add r4,r4,r2
  2448. eor r2,r10,r11
  2449. eor r0,r9,r9,ror#5
  2450. add r5,r5,r3
  2451. and r2,r2,r9
  2452. eor r3,r0,r9,ror#19
  2453. eor r0,r5,r5,ror#11
  2454. eor r2,r2,r11
  2455. add r4,r4,r3,ror#6
  2456. eor r3,r5,r6
  2457. eor r0,r0,r5,ror#20
  2458. add r4,r4,r2
  2459. ldr r2,[sp,#32]
  2460. and r12,r12,r3
  2461. add r8,r8,r4
  2462. add r4,r4,r0,ror#2
  2463. eor r12,r12,r6
  2464. vst1.32 {q8},[r1,:128]!
  2465. add r11,r11,r2
  2466. eor r2,r9,r10
  2467. eor r0,r8,r8,ror#5
  2468. add r4,r4,r12
  2469. vld1.32 {q8},[r14,:128]!
  2470. and r2,r2,r8
  2471. eor r12,r0,r8,ror#19
  2472. eor r0,r4,r4,ror#11
  2473. eor r2,r2,r10
  2474. vrev32.8 q2,q2
  2475. add r11,r11,r12,ror#6
  2476. eor r12,r4,r5
  2477. eor r0,r0,r4,ror#20
  2478. add r11,r11,r2
  2479. vadd.i32 q8,q8,q2
  2480. ldr r2,[sp,#36]
  2481. and r3,r3,r12
  2482. add r7,r7,r11
  2483. add r11,r11,r0,ror#2
  2484. eor r3,r3,r5
  2485. add r10,r10,r2
  2486. eor r2,r8,r9
  2487. eor r0,r7,r7,ror#5
  2488. add r11,r11,r3
  2489. and r2,r2,r7
  2490. eor r3,r0,r7,ror#19
  2491. eor r0,r11,r11,ror#11
  2492. eor r2,r2,r9
  2493. add r10,r10,r3,ror#6
  2494. eor r3,r11,r4
  2495. eor r0,r0,r11,ror#20
  2496. add r10,r10,r2
  2497. ldr r2,[sp,#40]
  2498. and r12,r12,r3
  2499. add r6,r6,r10
  2500. add r10,r10,r0,ror#2
  2501. eor r12,r12,r4
  2502. add r9,r9,r2
  2503. eor r2,r7,r8
  2504. eor r0,r6,r6,ror#5
  2505. add r10,r10,r12
  2506. and r2,r2,r6
  2507. eor r12,r0,r6,ror#19
  2508. eor r0,r10,r10,ror#11
  2509. eor r2,r2,r8
  2510. add r9,r9,r12,ror#6
  2511. eor r12,r10,r11
  2512. eor r0,r0,r10,ror#20
  2513. add r9,r9,r2
  2514. ldr r2,[sp,#44]
  2515. and r3,r3,r12
  2516. add r5,r5,r9
  2517. add r9,r9,r0,ror#2
  2518. eor r3,r3,r11
  2519. add r8,r8,r2
  2520. eor r2,r6,r7
  2521. eor r0,r5,r5,ror#5
  2522. add r9,r9,r3
  2523. and r2,r2,r5
  2524. eor r3,r0,r5,ror#19
  2525. eor r0,r9,r9,ror#11
  2526. eor r2,r2,r7
  2527. add r8,r8,r3,ror#6
  2528. eor r3,r9,r10
  2529. eor r0,r0,r9,ror#20
  2530. add r8,r8,r2
  2531. ldr r2,[sp,#48]
  2532. and r12,r12,r3
  2533. add r4,r4,r8
  2534. add r8,r8,r0,ror#2
  2535. eor r12,r12,r10
  2536. vst1.32 {q8},[r1,:128]!
  2537. add r7,r7,r2
  2538. eor r2,r5,r6
  2539. eor r0,r4,r4,ror#5
  2540. add r8,r8,r12
  2541. vld1.32 {q8},[r14,:128]!
  2542. and r2,r2,r4
  2543. eor r12,r0,r4,ror#19
  2544. eor r0,r8,r8,ror#11
  2545. eor r2,r2,r6
  2546. vrev32.8 q3,q3
  2547. add r7,r7,r12,ror#6
  2548. eor r12,r8,r9
  2549. eor r0,r0,r8,ror#20
  2550. add r7,r7,r2
  2551. vadd.i32 q8,q8,q3
  2552. ldr r2,[sp,#52]
  2553. and r3,r3,r12
  2554. add r11,r11,r7
  2555. add r7,r7,r0,ror#2
  2556. eor r3,r3,r9
  2557. add r6,r6,r2
  2558. eor r2,r4,r5
  2559. eor r0,r11,r11,ror#5
  2560. add r7,r7,r3
  2561. and r2,r2,r11
  2562. eor r3,r0,r11,ror#19
  2563. eor r0,r7,r7,ror#11
  2564. eor r2,r2,r5
  2565. add r6,r6,r3,ror#6
  2566. eor r3,r7,r8
  2567. eor r0,r0,r7,ror#20
  2568. add r6,r6,r2
  2569. ldr r2,[sp,#56]
  2570. and r12,r12,r3
  2571. add r10,r10,r6
  2572. add r6,r6,r0,ror#2
  2573. eor r12,r12,r8
  2574. add r5,r5,r2
  2575. eor r2,r11,r4
  2576. eor r0,r10,r10,ror#5
  2577. add r6,r6,r12
  2578. and r2,r2,r10
  2579. eor r12,r0,r10,ror#19
  2580. eor r0,r6,r6,ror#11
  2581. eor r2,r2,r4
  2582. add r5,r5,r12,ror#6
  2583. eor r12,r6,r7
  2584. eor r0,r0,r6,ror#20
  2585. add r5,r5,r2
  2586. ldr r2,[sp,#60]
  2587. and r3,r3,r12
  2588. add r9,r9,r5
  2589. add r5,r5,r0,ror#2
  2590. eor r3,r3,r7
  2591. add r4,r4,r2
  2592. eor r2,r10,r11
  2593. eor r0,r9,r9,ror#5
  2594. add r5,r5,r3
  2595. and r2,r2,r9
  2596. eor r3,r0,r9,ror#19
  2597. eor r0,r5,r5,ror#11
  2598. eor r2,r2,r11
  2599. add r4,r4,r3,ror#6
  2600. eor r3,r5,r6
  2601. eor r0,r0,r5,ror#20
  2602. add r4,r4,r2
  2603. ldr r2,[sp,#64]
  2604. and r12,r12,r3
  2605. add r8,r8,r4
  2606. add r4,r4,r0,ror#2
  2607. eor r12,r12,r6
  2608. vst1.32 {q8},[r1,:128]!
  2609. ldr r0,[r2,#0]
  2610. add r4,r4,r12 @ h+=Maj(a,b,c) from the past
  2611. ldr r12,[r2,#4]
  2612. ldr r3,[r2,#8]
  2613. ldr r1,[r2,#12]
  2614. add r4,r4,r0 @ accumulate
  2615. ldr r0,[r2,#16]
  2616. add r5,r5,r12
  2617. ldr r12,[r2,#20]
  2618. add r6,r6,r3
  2619. ldr r3,[r2,#24]
  2620. add r7,r7,r1
  2621. ldr r1,[r2,#28]
  2622. add r8,r8,r0
  2623. str r4,[r2],#4
  2624. add r9,r9,r12
  2625. str r5,[r2],#4
  2626. add r10,r10,r3
  2627. str r6,[r2],#4
  2628. add r11,r11,r1
  2629. str r7,[r2],#4
  2630. stmia r2,{r8,r9,r10,r11}
  2631. ittte ne
  2632. movne r1,sp
  2633. ldrne r2,[sp,#0]
  2634. eorne r12,r12,r12
  2635. ldreq sp,[sp,#76] @ restore original sp
  2636. itt ne
  2637. eorne r3,r5,r6
  2638. bne .L_00_48
  2639. ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,pc}
  2640. .size sha256_block_data_order_neon,.-sha256_block_data_order_neon
  2641. #endif
  2642. #if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)
  2643. # if defined(__thumb2__)
  2644. # define INST(a,b,c,d) .byte c,d|0xc,a,b
  2645. # else
  2646. # define INST(a,b,c,d) .byte a,b,c,d
  2647. # endif
  2648. .type sha256_block_data_order_armv8,%function
  2649. .align 5
  2650. sha256_block_data_order_armv8:
  2651. .LARMv8:
  2652. vld1.32 {q0,q1},[r0]
  2653. sub r3,r3,#256+32
  2654. add r2,r1,r2,lsl#6 @ len to point at the end of inp
  2655. b .Loop_v8
  2656. .align 4
  2657. .Loop_v8:
  2658. vld1.8 {q8,q9},[r1]!
  2659. vld1.8 {q10,q11},[r1]!
  2660. vld1.32 {q12},[r3]!
  2661. vrev32.8 q8,q8
  2662. vrev32.8 q9,q9
  2663. vrev32.8 q10,q10
  2664. vrev32.8 q11,q11
  2665. vmov q14,q0 @ offload
  2666. vmov q15,q1
  2667. teq r1,r2
  2668. vld1.32 {q13},[r3]!
  2669. vadd.i32 q12,q12,q8
  2670. INST(0xe2,0x03,0xfa,0xf3) @ sha256su0 q8,q9
  2671. vmov q2,q0
  2672. INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12
  2673. INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12
  2674. INST(0xe6,0x0c,0x64,0xf3) @ sha256su1 q8,q10,q11
  2675. vld1.32 {q12},[r3]!
  2676. vadd.i32 q13,q13,q9
  2677. INST(0xe4,0x23,0xfa,0xf3) @ sha256su0 q9,q10
  2678. vmov q2,q0
  2679. INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13
  2680. INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13
  2681. INST(0xe0,0x2c,0x66,0xf3) @ sha256su1 q9,q11,q8
  2682. vld1.32 {q13},[r3]!
  2683. vadd.i32 q12,q12,q10
  2684. INST(0xe6,0x43,0xfa,0xf3) @ sha256su0 q10,q11
  2685. vmov q2,q0
  2686. INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12
  2687. INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12
  2688. INST(0xe2,0x4c,0x60,0xf3) @ sha256su1 q10,q8,q9
  2689. vld1.32 {q12},[r3]!
  2690. vadd.i32 q13,q13,q11
  2691. INST(0xe0,0x63,0xfa,0xf3) @ sha256su0 q11,q8
  2692. vmov q2,q0
  2693. INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13
  2694. INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13
  2695. INST(0xe4,0x6c,0x62,0xf3) @ sha256su1 q11,q9,q10
  2696. vld1.32 {q13},[r3]!
  2697. vadd.i32 q12,q12,q8
  2698. INST(0xe2,0x03,0xfa,0xf3) @ sha256su0 q8,q9
  2699. vmov q2,q0
  2700. INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12
  2701. INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12
  2702. INST(0xe6,0x0c,0x64,0xf3) @ sha256su1 q8,q10,q11
  2703. vld1.32 {q12},[r3]!
  2704. vadd.i32 q13,q13,q9
  2705. INST(0xe4,0x23,0xfa,0xf3) @ sha256su0 q9,q10
  2706. vmov q2,q0
  2707. INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13
  2708. INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13
  2709. INST(0xe0,0x2c,0x66,0xf3) @ sha256su1 q9,q11,q8
  2710. vld1.32 {q13},[r3]!
  2711. vadd.i32 q12,q12,q10
  2712. INST(0xe6,0x43,0xfa,0xf3) @ sha256su0 q10,q11
  2713. vmov q2,q0
  2714. INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12
  2715. INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12
  2716. INST(0xe2,0x4c,0x60,0xf3) @ sha256su1 q10,q8,q9
  2717. vld1.32 {q12},[r3]!
  2718. vadd.i32 q13,q13,q11
  2719. INST(0xe0,0x63,0xfa,0xf3) @ sha256su0 q11,q8
  2720. vmov q2,q0
  2721. INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13
  2722. INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13
  2723. INST(0xe4,0x6c,0x62,0xf3) @ sha256su1 q11,q9,q10
  2724. vld1.32 {q13},[r3]!
  2725. vadd.i32 q12,q12,q8
  2726. INST(0xe2,0x03,0xfa,0xf3) @ sha256su0 q8,q9
  2727. vmov q2,q0
  2728. INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12
  2729. INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12
  2730. INST(0xe6,0x0c,0x64,0xf3) @ sha256su1 q8,q10,q11
  2731. vld1.32 {q12},[r3]!
  2732. vadd.i32 q13,q13,q9
  2733. INST(0xe4,0x23,0xfa,0xf3) @ sha256su0 q9,q10
  2734. vmov q2,q0
  2735. INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13
  2736. INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13
  2737. INST(0xe0,0x2c,0x66,0xf3) @ sha256su1 q9,q11,q8
  2738. vld1.32 {q13},[r3]!
  2739. vadd.i32 q12,q12,q10
  2740. INST(0xe6,0x43,0xfa,0xf3) @ sha256su0 q10,q11
  2741. vmov q2,q0
  2742. INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12
  2743. INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12
  2744. INST(0xe2,0x4c,0x60,0xf3) @ sha256su1 q10,q8,q9
  2745. vld1.32 {q12},[r3]!
  2746. vadd.i32 q13,q13,q11
  2747. INST(0xe0,0x63,0xfa,0xf3) @ sha256su0 q11,q8
  2748. vmov q2,q0
  2749. INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13
  2750. INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13
  2751. INST(0xe4,0x6c,0x62,0xf3) @ sha256su1 q11,q9,q10
  2752. vld1.32 {q13},[r3]!
  2753. vadd.i32 q12,q12,q8
  2754. vmov q2,q0
  2755. INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12
  2756. INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12
  2757. vld1.32 {q12},[r3]!
  2758. vadd.i32 q13,q13,q9
  2759. vmov q2,q0
  2760. INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13
  2761. INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13
  2762. vld1.32 {q13},[r3]
  2763. vadd.i32 q12,q12,q10
  2764. sub r3,r3,#256-16 @ rewind
  2765. vmov q2,q0
  2766. INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12
  2767. INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12
  2768. vadd.i32 q13,q13,q11
  2769. vmov q2,q0
  2770. INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13
  2771. INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13
  2772. vadd.i32 q0,q0,q14
  2773. vadd.i32 q1,q1,q15
  2774. it ne
  2775. bne .Loop_v8
  2776. vst1.32 {q0,q1},[r0]
  2777. bx lr @ bx lr
  2778. .size sha256_block_data_order_armv8,.-sha256_block_data_order_armv8
  2779. #endif
  2780. .byte 83,72,65,50,53,54,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
  2781. .align 2
  2782. .align 2
  2783. #if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)
  2784. .comm OPENSSL_armcap_P,4,4
  2785. .hidden OPENSSL_armcap_P
  2786. #endif
  2787. #endif
  2788. #endif // !OPENSSL_NO_ASM
  2789. .section .note.GNU-stack,"",%progbits