x86.S 67 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244
  1. .file "aes-586.s"
  2. .text
  3. .type _x86_AES_encrypt_compact,@function
  4. .align 16
  5. _x86_AES_encrypt_compact:
  6. movl %edi,20(%esp)
  7. xorl (%edi),%eax
  8. xorl 4(%edi),%ebx
  9. xorl 8(%edi),%ecx
  10. xorl 12(%edi),%edx
  11. movl 240(%edi),%esi
  12. leal -2(%esi,%esi,1),%esi
  13. leal (%edi,%esi,8),%esi
  14. movl %esi,24(%esp)
  15. movl -128(%ebp),%edi
  16. movl -96(%ebp),%esi
  17. movl -64(%ebp),%edi
  18. movl -32(%ebp),%esi
  19. movl (%ebp),%edi
  20. movl 32(%ebp),%esi
  21. movl 64(%ebp),%edi
  22. movl 96(%ebp),%esi
  23. .align 16
  24. .L000loop:
  25. movl %eax,%esi
  26. andl $255,%esi
  27. movzbl -128(%ebp,%esi,1),%esi
  28. movzbl %bh,%edi
  29. movzbl -128(%ebp,%edi,1),%edi
  30. shll $8,%edi
  31. xorl %edi,%esi
  32. movl %ecx,%edi
  33. shrl $16,%edi
  34. andl $255,%edi
  35. movzbl -128(%ebp,%edi,1),%edi
  36. shll $16,%edi
  37. xorl %edi,%esi
  38. movl %edx,%edi
  39. shrl $24,%edi
  40. movzbl -128(%ebp,%edi,1),%edi
  41. shll $24,%edi
  42. xorl %edi,%esi
  43. movl %esi,4(%esp)
  44. movl %ebx,%esi
  45. andl $255,%esi
  46. shrl $16,%ebx
  47. movzbl -128(%ebp,%esi,1),%esi
  48. movzbl %ch,%edi
  49. movzbl -128(%ebp,%edi,1),%edi
  50. shll $8,%edi
  51. xorl %edi,%esi
  52. movl %edx,%edi
  53. shrl $16,%edi
  54. andl $255,%edi
  55. movzbl -128(%ebp,%edi,1),%edi
  56. shll $16,%edi
  57. xorl %edi,%esi
  58. movl %eax,%edi
  59. shrl $24,%edi
  60. movzbl -128(%ebp,%edi,1),%edi
  61. shll $24,%edi
  62. xorl %edi,%esi
  63. movl %esi,8(%esp)
  64. movl %ecx,%esi
  65. andl $255,%esi
  66. shrl $24,%ecx
  67. movzbl -128(%ebp,%esi,1),%esi
  68. movzbl %dh,%edi
  69. movzbl -128(%ebp,%edi,1),%edi
  70. shll $8,%edi
  71. xorl %edi,%esi
  72. movl %eax,%edi
  73. shrl $16,%edi
  74. andl $255,%edx
  75. andl $255,%edi
  76. movzbl -128(%ebp,%edi,1),%edi
  77. shll $16,%edi
  78. xorl %edi,%esi
  79. movzbl %bh,%edi
  80. movzbl -128(%ebp,%edi,1),%edi
  81. shll $24,%edi
  82. xorl %edi,%esi
  83. andl $255,%edx
  84. movzbl -128(%ebp,%edx,1),%edx
  85. movzbl %ah,%eax
  86. movzbl -128(%ebp,%eax,1),%eax
  87. shll $8,%eax
  88. xorl %eax,%edx
  89. movl 4(%esp),%eax
  90. andl $255,%ebx
  91. movzbl -128(%ebp,%ebx,1),%ebx
  92. shll $16,%ebx
  93. xorl %ebx,%edx
  94. movl 8(%esp),%ebx
  95. movzbl -128(%ebp,%ecx,1),%ecx
  96. shll $24,%ecx
  97. xorl %ecx,%edx
  98. movl %esi,%ecx
  99. movl $2155905152,%ebp
  100. andl %ecx,%ebp
  101. leal (%ecx,%ecx,1),%edi
  102. movl %ebp,%esi
  103. shrl $7,%ebp
  104. andl $4278124286,%edi
  105. subl %ebp,%esi
  106. movl %ecx,%ebp
  107. andl $454761243,%esi
  108. rorl $16,%ebp
  109. xorl %edi,%esi
  110. movl %ecx,%edi
  111. xorl %esi,%ecx
  112. rorl $24,%edi
  113. xorl %ebp,%esi
  114. roll $24,%ecx
  115. xorl %edi,%esi
  116. movl $2155905152,%ebp
  117. xorl %esi,%ecx
  118. andl %edx,%ebp
  119. leal (%edx,%edx,1),%edi
  120. movl %ebp,%esi
  121. shrl $7,%ebp
  122. andl $4278124286,%edi
  123. subl %ebp,%esi
  124. movl %edx,%ebp
  125. andl $454761243,%esi
  126. rorl $16,%ebp
  127. xorl %edi,%esi
  128. movl %edx,%edi
  129. xorl %esi,%edx
  130. rorl $24,%edi
  131. xorl %ebp,%esi
  132. roll $24,%edx
  133. xorl %edi,%esi
  134. movl $2155905152,%ebp
  135. xorl %esi,%edx
  136. andl %eax,%ebp
  137. leal (%eax,%eax,1),%edi
  138. movl %ebp,%esi
  139. shrl $7,%ebp
  140. andl $4278124286,%edi
  141. subl %ebp,%esi
  142. movl %eax,%ebp
  143. andl $454761243,%esi
  144. rorl $16,%ebp
  145. xorl %edi,%esi
  146. movl %eax,%edi
  147. xorl %esi,%eax
  148. rorl $24,%edi
  149. xorl %ebp,%esi
  150. roll $24,%eax
  151. xorl %edi,%esi
  152. movl $2155905152,%ebp
  153. xorl %esi,%eax
  154. andl %ebx,%ebp
  155. leal (%ebx,%ebx,1),%edi
  156. movl %ebp,%esi
  157. shrl $7,%ebp
  158. andl $4278124286,%edi
  159. subl %ebp,%esi
  160. movl %ebx,%ebp
  161. andl $454761243,%esi
  162. rorl $16,%ebp
  163. xorl %edi,%esi
  164. movl %ebx,%edi
  165. xorl %esi,%ebx
  166. rorl $24,%edi
  167. xorl %ebp,%esi
  168. roll $24,%ebx
  169. xorl %edi,%esi
  170. xorl %esi,%ebx
  171. movl 20(%esp),%edi
  172. movl 28(%esp),%ebp
  173. addl $16,%edi
  174. xorl (%edi),%eax
  175. xorl 4(%edi),%ebx
  176. xorl 8(%edi),%ecx
  177. xorl 12(%edi),%edx
  178. cmpl 24(%esp),%edi
  179. movl %edi,20(%esp)
  180. jb .L000loop
  181. movl %eax,%esi
  182. andl $255,%esi
  183. movzbl -128(%ebp,%esi,1),%esi
  184. movzbl %bh,%edi
  185. movzbl -128(%ebp,%edi,1),%edi
  186. shll $8,%edi
  187. xorl %edi,%esi
  188. movl %ecx,%edi
  189. shrl $16,%edi
  190. andl $255,%edi
  191. movzbl -128(%ebp,%edi,1),%edi
  192. shll $16,%edi
  193. xorl %edi,%esi
  194. movl %edx,%edi
  195. shrl $24,%edi
  196. movzbl -128(%ebp,%edi,1),%edi
  197. shll $24,%edi
  198. xorl %edi,%esi
  199. movl %esi,4(%esp)
  200. movl %ebx,%esi
  201. andl $255,%esi
  202. shrl $16,%ebx
  203. movzbl -128(%ebp,%esi,1),%esi
  204. movzbl %ch,%edi
  205. movzbl -128(%ebp,%edi,1),%edi
  206. shll $8,%edi
  207. xorl %edi,%esi
  208. movl %edx,%edi
  209. shrl $16,%edi
  210. andl $255,%edi
  211. movzbl -128(%ebp,%edi,1),%edi
  212. shll $16,%edi
  213. xorl %edi,%esi
  214. movl %eax,%edi
  215. shrl $24,%edi
  216. movzbl -128(%ebp,%edi,1),%edi
  217. shll $24,%edi
  218. xorl %edi,%esi
  219. movl %esi,8(%esp)
  220. movl %ecx,%esi
  221. andl $255,%esi
  222. shrl $24,%ecx
  223. movzbl -128(%ebp,%esi,1),%esi
  224. movzbl %dh,%edi
  225. movzbl -128(%ebp,%edi,1),%edi
  226. shll $8,%edi
  227. xorl %edi,%esi
  228. movl %eax,%edi
  229. shrl $16,%edi
  230. andl $255,%edx
  231. andl $255,%edi
  232. movzbl -128(%ebp,%edi,1),%edi
  233. shll $16,%edi
  234. xorl %edi,%esi
  235. movzbl %bh,%edi
  236. movzbl -128(%ebp,%edi,1),%edi
  237. shll $24,%edi
  238. xorl %edi,%esi
  239. movl 20(%esp),%edi
  240. andl $255,%edx
  241. movzbl -128(%ebp,%edx,1),%edx
  242. movzbl %ah,%eax
  243. movzbl -128(%ebp,%eax,1),%eax
  244. shll $8,%eax
  245. xorl %eax,%edx
  246. movl 4(%esp),%eax
  247. andl $255,%ebx
  248. movzbl -128(%ebp,%ebx,1),%ebx
  249. shll $16,%ebx
  250. xorl %ebx,%edx
  251. movl 8(%esp),%ebx
  252. movzbl -128(%ebp,%ecx,1),%ecx
  253. shll $24,%ecx
  254. xorl %ecx,%edx
  255. movl %esi,%ecx
  256. xorl 16(%edi),%eax
  257. xorl 20(%edi),%ebx
  258. xorl 24(%edi),%ecx
  259. xorl 28(%edi),%edx
  260. ret
  261. .size _x86_AES_encrypt_compact,.-_x86_AES_encrypt_compact
  262. .type _sse_AES_encrypt_compact,@function
  263. .align 16
  264. _sse_AES_encrypt_compact:
  265. pxor (%edi),%mm0
  266. pxor 8(%edi),%mm4
  267. movl 240(%edi),%esi
  268. leal -2(%esi,%esi,1),%esi
  269. leal (%edi,%esi,8),%esi
  270. movl %esi,24(%esp)
  271. movl $454761243,%eax
  272. movl %eax,8(%esp)
  273. movl %eax,12(%esp)
  274. movl -128(%ebp),%eax
  275. movl -96(%ebp),%ebx
  276. movl -64(%ebp),%ecx
  277. movl -32(%ebp),%edx
  278. movl (%ebp),%eax
  279. movl 32(%ebp),%ebx
  280. movl 64(%ebp),%ecx
  281. movl 96(%ebp),%edx
  282. .align 16
  283. .L001loop:
  284. pshufw $8,%mm0,%mm1
  285. pshufw $13,%mm4,%mm5
  286. movd %mm1,%eax
  287. movd %mm5,%ebx
  288. movl %edi,20(%esp)
  289. movzbl %al,%esi
  290. movzbl %ah,%edx
  291. pshufw $13,%mm0,%mm2
  292. movzbl -128(%ebp,%esi,1),%ecx
  293. movzbl %bl,%edi
  294. movzbl -128(%ebp,%edx,1),%edx
  295. shrl $16,%eax
  296. shll $8,%edx
  297. movzbl -128(%ebp,%edi,1),%esi
  298. movzbl %bh,%edi
  299. shll $16,%esi
  300. pshufw $8,%mm4,%mm6
  301. orl %esi,%ecx
  302. movzbl -128(%ebp,%edi,1),%esi
  303. movzbl %ah,%edi
  304. shll $24,%esi
  305. shrl $16,%ebx
  306. orl %esi,%edx
  307. movzbl -128(%ebp,%edi,1),%esi
  308. movzbl %bh,%edi
  309. shll $8,%esi
  310. orl %esi,%ecx
  311. movzbl -128(%ebp,%edi,1),%esi
  312. movzbl %al,%edi
  313. shll $24,%esi
  314. orl %esi,%ecx
  315. movzbl -128(%ebp,%edi,1),%esi
  316. movzbl %bl,%edi
  317. movd %mm2,%eax
  318. movd %ecx,%mm0
  319. movzbl -128(%ebp,%edi,1),%ecx
  320. movzbl %ah,%edi
  321. shll $16,%ecx
  322. movd %mm6,%ebx
  323. orl %esi,%ecx
  324. movzbl -128(%ebp,%edi,1),%esi
  325. movzbl %bh,%edi
  326. shll $24,%esi
  327. orl %esi,%ecx
  328. movzbl -128(%ebp,%edi,1),%esi
  329. movzbl %bl,%edi
  330. shll $8,%esi
  331. shrl $16,%ebx
  332. orl %esi,%ecx
  333. movzbl -128(%ebp,%edi,1),%esi
  334. movzbl %al,%edi
  335. shrl $16,%eax
  336. movd %ecx,%mm1
  337. movzbl -128(%ebp,%edi,1),%ecx
  338. movzbl %ah,%edi
  339. shll $16,%ecx
  340. andl $255,%eax
  341. orl %esi,%ecx
  342. punpckldq %mm1,%mm0
  343. movzbl -128(%ebp,%edi,1),%esi
  344. movzbl %bh,%edi
  345. shll $24,%esi
  346. andl $255,%ebx
  347. movzbl -128(%ebp,%eax,1),%eax
  348. orl %esi,%ecx
  349. shll $16,%eax
  350. movzbl -128(%ebp,%edi,1),%esi
  351. orl %eax,%edx
  352. shll $8,%esi
  353. movzbl -128(%ebp,%ebx,1),%ebx
  354. orl %esi,%ecx
  355. orl %ebx,%edx
  356. movl 20(%esp),%edi
  357. movd %ecx,%mm4
  358. movd %edx,%mm5
  359. punpckldq %mm5,%mm4
  360. addl $16,%edi
  361. cmpl 24(%esp),%edi
  362. ja .L002out
  363. movq 8(%esp),%mm2
  364. pxor %mm3,%mm3
  365. pxor %mm7,%mm7
  366. movq %mm0,%mm1
  367. movq %mm4,%mm5
  368. pcmpgtb %mm0,%mm3
  369. pcmpgtb %mm4,%mm7
  370. pand %mm2,%mm3
  371. pand %mm2,%mm7
  372. pshufw $177,%mm0,%mm2
  373. pshufw $177,%mm4,%mm6
  374. paddb %mm0,%mm0
  375. paddb %mm4,%mm4
  376. pxor %mm3,%mm0
  377. pxor %mm7,%mm4
  378. pshufw $177,%mm2,%mm3
  379. pshufw $177,%mm6,%mm7
  380. pxor %mm0,%mm1
  381. pxor %mm4,%mm5
  382. pxor %mm2,%mm0
  383. pxor %mm6,%mm4
  384. movq %mm3,%mm2
  385. movq %mm7,%mm6
  386. pslld $8,%mm3
  387. pslld $8,%mm7
  388. psrld $24,%mm2
  389. psrld $24,%mm6
  390. pxor %mm3,%mm0
  391. pxor %mm7,%mm4
  392. pxor %mm2,%mm0
  393. pxor %mm6,%mm4
  394. movq %mm1,%mm3
  395. movq %mm5,%mm7
  396. movq (%edi),%mm2
  397. movq 8(%edi),%mm6
  398. psrld $8,%mm1
  399. psrld $8,%mm5
  400. movl -128(%ebp),%eax
  401. pslld $24,%mm3
  402. pslld $24,%mm7
  403. movl -64(%ebp),%ebx
  404. pxor %mm1,%mm0
  405. pxor %mm5,%mm4
  406. movl (%ebp),%ecx
  407. pxor %mm3,%mm0
  408. pxor %mm7,%mm4
  409. movl 64(%ebp),%edx
  410. pxor %mm2,%mm0
  411. pxor %mm6,%mm4
  412. jmp .L001loop
  413. .align 16
  414. .L002out:
  415. pxor (%edi),%mm0
  416. pxor 8(%edi),%mm4
  417. ret
  418. .size _sse_AES_encrypt_compact,.-_sse_AES_encrypt_compact
  419. .type _x86_AES_encrypt,@function
  420. .align 16
  421. _x86_AES_encrypt:
  422. movl %edi,20(%esp)
  423. xorl (%edi),%eax
  424. xorl 4(%edi),%ebx
  425. xorl 8(%edi),%ecx
  426. xorl 12(%edi),%edx
  427. movl 240(%edi),%esi
  428. leal -2(%esi,%esi,1),%esi
  429. leal (%edi,%esi,8),%esi
  430. movl %esi,24(%esp)
  431. .align 16
  432. .L003loop:
  433. movl %eax,%esi
  434. andl $255,%esi
  435. movl (%ebp,%esi,8),%esi
  436. movzbl %bh,%edi
  437. xorl 3(%ebp,%edi,8),%esi
  438. movl %ecx,%edi
  439. shrl $16,%edi
  440. andl $255,%edi
  441. xorl 2(%ebp,%edi,8),%esi
  442. movl %edx,%edi
  443. shrl $24,%edi
  444. xorl 1(%ebp,%edi,8),%esi
  445. movl %esi,4(%esp)
  446. movl %ebx,%esi
  447. andl $255,%esi
  448. shrl $16,%ebx
  449. movl (%ebp,%esi,8),%esi
  450. movzbl %ch,%edi
  451. xorl 3(%ebp,%edi,8),%esi
  452. movl %edx,%edi
  453. shrl $16,%edi
  454. andl $255,%edi
  455. xorl 2(%ebp,%edi,8),%esi
  456. movl %eax,%edi
  457. shrl $24,%edi
  458. xorl 1(%ebp,%edi,8),%esi
  459. movl %esi,8(%esp)
  460. movl %ecx,%esi
  461. andl $255,%esi
  462. shrl $24,%ecx
  463. movl (%ebp,%esi,8),%esi
  464. movzbl %dh,%edi
  465. xorl 3(%ebp,%edi,8),%esi
  466. movl %eax,%edi
  467. shrl $16,%edi
  468. andl $255,%edx
  469. andl $255,%edi
  470. xorl 2(%ebp,%edi,8),%esi
  471. movzbl %bh,%edi
  472. xorl 1(%ebp,%edi,8),%esi
  473. movl 20(%esp),%edi
  474. movl (%ebp,%edx,8),%edx
  475. movzbl %ah,%eax
  476. xorl 3(%ebp,%eax,8),%edx
  477. movl 4(%esp),%eax
  478. andl $255,%ebx
  479. xorl 2(%ebp,%ebx,8),%edx
  480. movl 8(%esp),%ebx
  481. xorl 1(%ebp,%ecx,8),%edx
  482. movl %esi,%ecx
  483. addl $16,%edi
  484. xorl (%edi),%eax
  485. xorl 4(%edi),%ebx
  486. xorl 8(%edi),%ecx
  487. xorl 12(%edi),%edx
  488. cmpl 24(%esp),%edi
  489. movl %edi,20(%esp)
  490. jb .L003loop
  491. movl %eax,%esi
  492. andl $255,%esi
  493. movl 2(%ebp,%esi,8),%esi
  494. andl $255,%esi
  495. movzbl %bh,%edi
  496. movl (%ebp,%edi,8),%edi
  497. andl $65280,%edi
  498. xorl %edi,%esi
  499. movl %ecx,%edi
  500. shrl $16,%edi
  501. andl $255,%edi
  502. movl (%ebp,%edi,8),%edi
  503. andl $16711680,%edi
  504. xorl %edi,%esi
  505. movl %edx,%edi
  506. shrl $24,%edi
  507. movl 2(%ebp,%edi,8),%edi
  508. andl $4278190080,%edi
  509. xorl %edi,%esi
  510. movl %esi,4(%esp)
  511. movl %ebx,%esi
  512. andl $255,%esi
  513. shrl $16,%ebx
  514. movl 2(%ebp,%esi,8),%esi
  515. andl $255,%esi
  516. movzbl %ch,%edi
  517. movl (%ebp,%edi,8),%edi
  518. andl $65280,%edi
  519. xorl %edi,%esi
  520. movl %edx,%edi
  521. shrl $16,%edi
  522. andl $255,%edi
  523. movl (%ebp,%edi,8),%edi
  524. andl $16711680,%edi
  525. xorl %edi,%esi
  526. movl %eax,%edi
  527. shrl $24,%edi
  528. movl 2(%ebp,%edi,8),%edi
  529. andl $4278190080,%edi
  530. xorl %edi,%esi
  531. movl %esi,8(%esp)
  532. movl %ecx,%esi
  533. andl $255,%esi
  534. shrl $24,%ecx
  535. movl 2(%ebp,%esi,8),%esi
  536. andl $255,%esi
  537. movzbl %dh,%edi
  538. movl (%ebp,%edi,8),%edi
  539. andl $65280,%edi
  540. xorl %edi,%esi
  541. movl %eax,%edi
  542. shrl $16,%edi
  543. andl $255,%edx
  544. andl $255,%edi
  545. movl (%ebp,%edi,8),%edi
  546. andl $16711680,%edi
  547. xorl %edi,%esi
  548. movzbl %bh,%edi
  549. movl 2(%ebp,%edi,8),%edi
  550. andl $4278190080,%edi
  551. xorl %edi,%esi
  552. movl 20(%esp),%edi
  553. andl $255,%edx
  554. movl 2(%ebp,%edx,8),%edx
  555. andl $255,%edx
  556. movzbl %ah,%eax
  557. movl (%ebp,%eax,8),%eax
  558. andl $65280,%eax
  559. xorl %eax,%edx
  560. movl 4(%esp),%eax
  561. andl $255,%ebx
  562. movl (%ebp,%ebx,8),%ebx
  563. andl $16711680,%ebx
  564. xorl %ebx,%edx
  565. movl 8(%esp),%ebx
  566. movl 2(%ebp,%ecx,8),%ecx
  567. andl $4278190080,%ecx
  568. xorl %ecx,%edx
  569. movl %esi,%ecx
  570. addl $16,%edi
  571. xorl (%edi),%eax
  572. xorl 4(%edi),%ebx
  573. xorl 8(%edi),%ecx
  574. xorl 12(%edi),%edx
  575. ret
  576. .align 64
  577. .LAES_Te:
  578. .long 2774754246,2774754246
  579. .long 2222750968,2222750968
  580. .long 2574743534,2574743534
  581. .long 2373680118,2373680118
  582. .long 234025727,234025727
  583. .long 3177933782,3177933782
  584. .long 2976870366,2976870366
  585. .long 1422247313,1422247313
  586. .long 1345335392,1345335392
  587. .long 50397442,50397442
  588. .long 2842126286,2842126286
  589. .long 2099981142,2099981142
  590. .long 436141799,436141799
  591. .long 1658312629,1658312629
  592. .long 3870010189,3870010189
  593. .long 2591454956,2591454956
  594. .long 1170918031,1170918031
  595. .long 2642575903,2642575903
  596. .long 1086966153,1086966153
  597. .long 2273148410,2273148410
  598. .long 368769775,368769775
  599. .long 3948501426,3948501426
  600. .long 3376891790,3376891790
  601. .long 200339707,200339707
  602. .long 3970805057,3970805057
  603. .long 1742001331,1742001331
  604. .long 4255294047,4255294047
  605. .long 3937382213,3937382213
  606. .long 3214711843,3214711843
  607. .long 4154762323,4154762323
  608. .long 2524082916,2524082916
  609. .long 1539358875,1539358875
  610. .long 3266819957,3266819957
  611. .long 486407649,486407649
  612. .long 2928907069,2928907069
  613. .long 1780885068,1780885068
  614. .long 1513502316,1513502316
  615. .long 1094664062,1094664062
  616. .long 49805301,49805301
  617. .long 1338821763,1338821763
  618. .long 1546925160,1546925160
  619. .long 4104496465,4104496465
  620. .long 887481809,887481809
  621. .long 150073849,150073849
  622. .long 2473685474,2473685474
  623. .long 1943591083,1943591083
  624. .long 1395732834,1395732834
  625. .long 1058346282,1058346282
  626. .long 201589768,201589768
  627. .long 1388824469,1388824469
  628. .long 1696801606,1696801606
  629. .long 1589887901,1589887901
  630. .long 672667696,672667696
  631. .long 2711000631,2711000631
  632. .long 251987210,251987210
  633. .long 3046808111,3046808111
  634. .long 151455502,151455502
  635. .long 907153956,907153956
  636. .long 2608889883,2608889883
  637. .long 1038279391,1038279391
  638. .long 652995533,652995533
  639. .long 1764173646,1764173646
  640. .long 3451040383,3451040383
  641. .long 2675275242,2675275242
  642. .long 453576978,453576978
  643. .long 2659418909,2659418909
  644. .long 1949051992,1949051992
  645. .long 773462580,773462580
  646. .long 756751158,756751158
  647. .long 2993581788,2993581788
  648. .long 3998898868,3998898868
  649. .long 4221608027,4221608027
  650. .long 4132590244,4132590244
  651. .long 1295727478,1295727478
  652. .long 1641469623,1641469623
  653. .long 3467883389,3467883389
  654. .long 2066295122,2066295122
  655. .long 1055122397,1055122397
  656. .long 1898917726,1898917726
  657. .long 2542044179,2542044179
  658. .long 4115878822,4115878822
  659. .long 1758581177,1758581177
  660. .long 0,0
  661. .long 753790401,753790401
  662. .long 1612718144,1612718144
  663. .long 536673507,536673507
  664. .long 3367088505,3367088505
  665. .long 3982187446,3982187446
  666. .long 3194645204,3194645204
  667. .long 1187761037,1187761037
  668. .long 3653156455,3653156455
  669. .long 1262041458,1262041458
  670. .long 3729410708,3729410708
  671. .long 3561770136,3561770136
  672. .long 3898103984,3898103984
  673. .long 1255133061,1255133061
  674. .long 1808847035,1808847035
  675. .long 720367557,720367557
  676. .long 3853167183,3853167183
  677. .long 385612781,385612781
  678. .long 3309519750,3309519750
  679. .long 3612167578,3612167578
  680. .long 1429418854,1429418854
  681. .long 2491778321,2491778321
  682. .long 3477423498,3477423498
  683. .long 284817897,284817897
  684. .long 100794884,100794884
  685. .long 2172616702,2172616702
  686. .long 4031795360,4031795360
  687. .long 1144798328,1144798328
  688. .long 3131023141,3131023141
  689. .long 3819481163,3819481163
  690. .long 4082192802,4082192802
  691. .long 4272137053,4272137053
  692. .long 3225436288,3225436288
  693. .long 2324664069,2324664069
  694. .long 2912064063,2912064063
  695. .long 3164445985,3164445985
  696. .long 1211644016,1211644016
  697. .long 83228145,83228145
  698. .long 3753688163,3753688163
  699. .long 3249976951,3249976951
  700. .long 1977277103,1977277103
  701. .long 1663115586,1663115586
  702. .long 806359072,806359072
  703. .long 452984805,452984805
  704. .long 250868733,250868733
  705. .long 1842533055,1842533055
  706. .long 1288555905,1288555905
  707. .long 336333848,336333848
  708. .long 890442534,890442534
  709. .long 804056259,804056259
  710. .long 3781124030,3781124030
  711. .long 2727843637,2727843637
  712. .long 3427026056,3427026056
  713. .long 957814574,957814574
  714. .long 1472513171,1472513171
  715. .long 4071073621,4071073621
  716. .long 2189328124,2189328124
  717. .long 1195195770,1195195770
  718. .long 2892260552,2892260552
  719. .long 3881655738,3881655738
  720. .long 723065138,723065138
  721. .long 2507371494,2507371494
  722. .long 2690670784,2690670784
  723. .long 2558624025,2558624025
  724. .long 3511635870,3511635870
  725. .long 2145180835,2145180835
  726. .long 1713513028,1713513028
  727. .long 2116692564,2116692564
  728. .long 2878378043,2878378043
  729. .long 2206763019,2206763019
  730. .long 3393603212,3393603212
  731. .long 703524551,703524551
  732. .long 3552098411,3552098411
  733. .long 1007948840,1007948840
  734. .long 2044649127,2044649127
  735. .long 3797835452,3797835452
  736. .long 487262998,487262998
  737. .long 1994120109,1994120109
  738. .long 1004593371,1004593371
  739. .long 1446130276,1446130276
  740. .long 1312438900,1312438900
  741. .long 503974420,503974420
  742. .long 3679013266,3679013266
  743. .long 168166924,168166924
  744. .long 1814307912,1814307912
  745. .long 3831258296,3831258296
  746. .long 1573044895,1573044895
  747. .long 1859376061,1859376061
  748. .long 4021070915,4021070915
  749. .long 2791465668,2791465668
  750. .long 2828112185,2828112185
  751. .long 2761266481,2761266481
  752. .long 937747667,937747667
  753. .long 2339994098,2339994098
  754. .long 854058965,854058965
  755. .long 1137232011,1137232011
  756. .long 1496790894,1496790894
  757. .long 3077402074,3077402074
  758. .long 2358086913,2358086913
  759. .long 1691735473,1691735473
  760. .long 3528347292,3528347292
  761. .long 3769215305,3769215305
  762. .long 3027004632,3027004632
  763. .long 4199962284,4199962284
  764. .long 133494003,133494003
  765. .long 636152527,636152527
  766. .long 2942657994,2942657994
  767. .long 2390391540,2390391540
  768. .long 3920539207,3920539207
  769. .long 403179536,403179536
  770. .long 3585784431,3585784431
  771. .long 2289596656,2289596656
  772. .long 1864705354,1864705354
  773. .long 1915629148,1915629148
  774. .long 605822008,605822008
  775. .long 4054230615,4054230615
  776. .long 3350508659,3350508659
  777. .long 1371981463,1371981463
  778. .long 602466507,602466507
  779. .long 2094914977,2094914977
  780. .long 2624877800,2624877800
  781. .long 555687742,555687742
  782. .long 3712699286,3712699286
  783. .long 3703422305,3703422305
  784. .long 2257292045,2257292045
  785. .long 2240449039,2240449039
  786. .long 2423288032,2423288032
  787. .long 1111375484,1111375484
  788. .long 3300242801,3300242801
  789. .long 2858837708,2858837708
  790. .long 3628615824,3628615824
  791. .long 84083462,84083462
  792. .long 32962295,32962295
  793. .long 302911004,302911004
  794. .long 2741068226,2741068226
  795. .long 1597322602,1597322602
  796. .long 4183250862,4183250862
  797. .long 3501832553,3501832553
  798. .long 2441512471,2441512471
  799. .long 1489093017,1489093017
  800. .long 656219450,656219450
  801. .long 3114180135,3114180135
  802. .long 954327513,954327513
  803. .long 335083755,335083755
  804. .long 3013122091,3013122091
  805. .long 856756514,856756514
  806. .long 3144247762,3144247762
  807. .long 1893325225,1893325225
  808. .long 2307821063,2307821063
  809. .long 2811532339,2811532339
  810. .long 3063651117,3063651117
  811. .long 572399164,572399164
  812. .long 2458355477,2458355477
  813. .long 552200649,552200649
  814. .long 1238290055,1238290055
  815. .long 4283782570,4283782570
  816. .long 2015897680,2015897680
  817. .long 2061492133,2061492133
  818. .long 2408352771,2408352771
  819. .long 4171342169,4171342169
  820. .long 2156497161,2156497161
  821. .long 386731290,386731290
  822. .long 3669999461,3669999461
  823. .long 837215959,837215959
  824. .long 3326231172,3326231172
  825. .long 3093850320,3093850320
  826. .long 3275833730,3275833730
  827. .long 2962856233,2962856233
  828. .long 1999449434,1999449434
  829. .long 286199582,286199582
  830. .long 3417354363,3417354363
  831. .long 4233385128,4233385128
  832. .long 3602627437,3602627437
  833. .long 974525996,974525996
  834. .byte 99,124,119,123,242,107,111,197
  835. .byte 48,1,103,43,254,215,171,118
  836. .byte 202,130,201,125,250,89,71,240
  837. .byte 173,212,162,175,156,164,114,192
  838. .byte 183,253,147,38,54,63,247,204
  839. .byte 52,165,229,241,113,216,49,21
  840. .byte 4,199,35,195,24,150,5,154
  841. .byte 7,18,128,226,235,39,178,117
  842. .byte 9,131,44,26,27,110,90,160
  843. .byte 82,59,214,179,41,227,47,132
  844. .byte 83,209,0,237,32,252,177,91
  845. .byte 106,203,190,57,74,76,88,207
  846. .byte 208,239,170,251,67,77,51,133
  847. .byte 69,249,2,127,80,60,159,168
  848. .byte 81,163,64,143,146,157,56,245
  849. .byte 188,182,218,33,16,255,243,210
  850. .byte 205,12,19,236,95,151,68,23
  851. .byte 196,167,126,61,100,93,25,115
  852. .byte 96,129,79,220,34,42,144,136
  853. .byte 70,238,184,20,222,94,11,219
  854. .byte 224,50,58,10,73,6,36,92
  855. .byte 194,211,172,98,145,149,228,121
  856. .byte 231,200,55,109,141,213,78,169
  857. .byte 108,86,244,234,101,122,174,8
  858. .byte 186,120,37,46,28,166,180,198
  859. .byte 232,221,116,31,75,189,139,138
  860. .byte 112,62,181,102,72,3,246,14
  861. .byte 97,53,87,185,134,193,29,158
  862. .byte 225,248,152,17,105,217,142,148
  863. .byte 155,30,135,233,206,85,40,223
  864. .byte 140,161,137,13,191,230,66,104
  865. .byte 65,153,45,15,176,84,187,22
  866. .byte 99,124,119,123,242,107,111,197
  867. .byte 48,1,103,43,254,215,171,118
  868. .byte 202,130,201,125,250,89,71,240
  869. .byte 173,212,162,175,156,164,114,192
  870. .byte 183,253,147,38,54,63,247,204
  871. .byte 52,165,229,241,113,216,49,21
  872. .byte 4,199,35,195,24,150,5,154
  873. .byte 7,18,128,226,235,39,178,117
  874. .byte 9,131,44,26,27,110,90,160
  875. .byte 82,59,214,179,41,227,47,132
  876. .byte 83,209,0,237,32,252,177,91
  877. .byte 106,203,190,57,74,76,88,207
  878. .byte 208,239,170,251,67,77,51,133
  879. .byte 69,249,2,127,80,60,159,168
  880. .byte 81,163,64,143,146,157,56,245
  881. .byte 188,182,218,33,16,255,243,210
  882. .byte 205,12,19,236,95,151,68,23
  883. .byte 196,167,126,61,100,93,25,115
  884. .byte 96,129,79,220,34,42,144,136
  885. .byte 70,238,184,20,222,94,11,219
  886. .byte 224,50,58,10,73,6,36,92
  887. .byte 194,211,172,98,145,149,228,121
  888. .byte 231,200,55,109,141,213,78,169
  889. .byte 108,86,244,234,101,122,174,8
  890. .byte 186,120,37,46,28,166,180,198
  891. .byte 232,221,116,31,75,189,139,138
  892. .byte 112,62,181,102,72,3,246,14
  893. .byte 97,53,87,185,134,193,29,158
  894. .byte 225,248,152,17,105,217,142,148
  895. .byte 155,30,135,233,206,85,40,223
  896. .byte 140,161,137,13,191,230,66,104
  897. .byte 65,153,45,15,176,84,187,22
  898. .byte 99,124,119,123,242,107,111,197
  899. .byte 48,1,103,43,254,215,171,118
  900. .byte 202,130,201,125,250,89,71,240
  901. .byte 173,212,162,175,156,164,114,192
  902. .byte 183,253,147,38,54,63,247,204
  903. .byte 52,165,229,241,113,216,49,21
  904. .byte 4,199,35,195,24,150,5,154
  905. .byte 7,18,128,226,235,39,178,117
  906. .byte 9,131,44,26,27,110,90,160
  907. .byte 82,59,214,179,41,227,47,132
  908. .byte 83,209,0,237,32,252,177,91
  909. .byte 106,203,190,57,74,76,88,207
  910. .byte 208,239,170,251,67,77,51,133
  911. .byte 69,249,2,127,80,60,159,168
  912. .byte 81,163,64,143,146,157,56,245
  913. .byte 188,182,218,33,16,255,243,210
  914. .byte 205,12,19,236,95,151,68,23
  915. .byte 196,167,126,61,100,93,25,115
  916. .byte 96,129,79,220,34,42,144,136
  917. .byte 70,238,184,20,222,94,11,219
  918. .byte 224,50,58,10,73,6,36,92
  919. .byte 194,211,172,98,145,149,228,121
  920. .byte 231,200,55,109,141,213,78,169
  921. .byte 108,86,244,234,101,122,174,8
  922. .byte 186,120,37,46,28,166,180,198
  923. .byte 232,221,116,31,75,189,139,138
  924. .byte 112,62,181,102,72,3,246,14
  925. .byte 97,53,87,185,134,193,29,158
  926. .byte 225,248,152,17,105,217,142,148
  927. .byte 155,30,135,233,206,85,40,223
  928. .byte 140,161,137,13,191,230,66,104
  929. .byte 65,153,45,15,176,84,187,22
  930. .byte 99,124,119,123,242,107,111,197
  931. .byte 48,1,103,43,254,215,171,118
  932. .byte 202,130,201,125,250,89,71,240
  933. .byte 173,212,162,175,156,164,114,192
  934. .byte 183,253,147,38,54,63,247,204
  935. .byte 52,165,229,241,113,216,49,21
  936. .byte 4,199,35,195,24,150,5,154
  937. .byte 7,18,128,226,235,39,178,117
  938. .byte 9,131,44,26,27,110,90,160
  939. .byte 82,59,214,179,41,227,47,132
  940. .byte 83,209,0,237,32,252,177,91
  941. .byte 106,203,190,57,74,76,88,207
  942. .byte 208,239,170,251,67,77,51,133
  943. .byte 69,249,2,127,80,60,159,168
  944. .byte 81,163,64,143,146,157,56,245
  945. .byte 188,182,218,33,16,255,243,210
  946. .byte 205,12,19,236,95,151,68,23
  947. .byte 196,167,126,61,100,93,25,115
  948. .byte 96,129,79,220,34,42,144,136
  949. .byte 70,238,184,20,222,94,11,219
  950. .byte 224,50,58,10,73,6,36,92
  951. .byte 194,211,172,98,145,149,228,121
  952. .byte 231,200,55,109,141,213,78,169
  953. .byte 108,86,244,234,101,122,174,8
  954. .byte 186,120,37,46,28,166,180,198
  955. .byte 232,221,116,31,75,189,139,138
  956. .byte 112,62,181,102,72,3,246,14
  957. .byte 97,53,87,185,134,193,29,158
  958. .byte 225,248,152,17,105,217,142,148
  959. .byte 155,30,135,233,206,85,40,223
  960. .byte 140,161,137,13,191,230,66,104
  961. .byte 65,153,45,15,176,84,187,22
  962. .long 1,2,4,8
  963. .long 16,32,64,128
  964. .long 27,54,0,0
  965. .long 0,0,0,0
  966. .size _x86_AES_encrypt,.-_x86_AES_encrypt
  967. .globl AES_encrypt
  968. .type AES_encrypt,@function
  969. .align 16
  970. AES_encrypt:
  971. .L_AES_encrypt_begin:
  972. pushl %ebp
  973. pushl %ebx
  974. pushl %esi
  975. pushl %edi
  976. movl 20(%esp),%esi
  977. movl 28(%esp),%edi
  978. movl %esp,%eax
  979. subl $36,%esp
  980. andl $-64,%esp
  981. leal -127(%edi),%ebx
  982. subl %esp,%ebx
  983. negl %ebx
  984. andl $960,%ebx
  985. subl %ebx,%esp
  986. addl $4,%esp
  987. movl %eax,28(%esp)
  988. call .L004pic_point
  989. .L004pic_point:
  990. popl %ebp
  991. leal OPENSSL_ia32cap_P,%eax
  992. leal .LAES_Te-.L004pic_point(%ebp),%ebp
  993. leal 764(%esp),%ebx
  994. subl %ebp,%ebx
  995. andl $768,%ebx
  996. leal 2176(%ebp,%ebx,1),%ebp
  997. btl $25,(%eax)
  998. jnc .L005x86
  999. movq (%esi),%mm0
  1000. movq 8(%esi),%mm4
  1001. call _sse_AES_encrypt_compact
  1002. movl 28(%esp),%esp
  1003. movl 24(%esp),%esi
  1004. movq %mm0,(%esi)
  1005. movq %mm4,8(%esi)
  1006. emms
  1007. popl %edi
  1008. popl %esi
  1009. popl %ebx
  1010. popl %ebp
  1011. ret
  1012. .align 16
  1013. .L005x86:
  1014. movl %ebp,24(%esp)
  1015. movl (%esi),%eax
  1016. movl 4(%esi),%ebx
  1017. movl 8(%esi),%ecx
  1018. movl 12(%esi),%edx
  1019. call _x86_AES_encrypt_compact
  1020. movl 28(%esp),%esp
  1021. movl 24(%esp),%esi
  1022. movl %eax,(%esi)
  1023. movl %ebx,4(%esi)
  1024. movl %ecx,8(%esi)
  1025. movl %edx,12(%esi)
  1026. popl %edi
  1027. popl %esi
  1028. popl %ebx
  1029. popl %ebp
  1030. ret
  1031. .size AES_encrypt,.-.L_AES_encrypt_begin
  1032. .type _x86_AES_decrypt_compact,@function
  1033. .align 16
  1034. _x86_AES_decrypt_compact:
  1035. movl %edi,20(%esp)
  1036. xorl (%edi),%eax
  1037. xorl 4(%edi),%ebx
  1038. xorl 8(%edi),%ecx
  1039. xorl 12(%edi),%edx
  1040. movl 240(%edi),%esi
  1041. leal -2(%esi,%esi,1),%esi
  1042. leal (%edi,%esi,8),%esi
  1043. movl %esi,24(%esp)
  1044. movl -128(%ebp),%edi
  1045. movl -96(%ebp),%esi
  1046. movl -64(%ebp),%edi
  1047. movl -32(%ebp),%esi
  1048. movl (%ebp),%edi
  1049. movl 32(%ebp),%esi
  1050. movl 64(%ebp),%edi
  1051. movl 96(%ebp),%esi
  1052. .align 16
  1053. .L006loop:
  1054. movl %eax,%esi
  1055. andl $255,%esi
  1056. movzbl -128(%ebp,%esi,1),%esi
  1057. movzbl %dh,%edi
  1058. movzbl -128(%ebp,%edi,1),%edi
  1059. shll $8,%edi
  1060. xorl %edi,%esi
  1061. movl %ecx,%edi
  1062. shrl $16,%edi
  1063. andl $255,%edi
  1064. movzbl -128(%ebp,%edi,1),%edi
  1065. shll $16,%edi
  1066. xorl %edi,%esi
  1067. movl %ebx,%edi
  1068. shrl $24,%edi
  1069. movzbl -128(%ebp,%edi,1),%edi
  1070. shll $24,%edi
  1071. xorl %edi,%esi
  1072. movl %esi,4(%esp)
  1073. movl %ebx,%esi
  1074. andl $255,%esi
  1075. movzbl -128(%ebp,%esi,1),%esi
  1076. movzbl %ah,%edi
  1077. movzbl -128(%ebp,%edi,1),%edi
  1078. shll $8,%edi
  1079. xorl %edi,%esi
  1080. movl %edx,%edi
  1081. shrl $16,%edi
  1082. andl $255,%edi
  1083. movzbl -128(%ebp,%edi,1),%edi
  1084. shll $16,%edi
  1085. xorl %edi,%esi
  1086. movl %ecx,%edi
  1087. shrl $24,%edi
  1088. movzbl -128(%ebp,%edi,1),%edi
  1089. shll $24,%edi
  1090. xorl %edi,%esi
  1091. movl %esi,8(%esp)
  1092. movl %ecx,%esi
  1093. andl $255,%esi
  1094. movzbl -128(%ebp,%esi,1),%esi
  1095. movzbl %bh,%edi
  1096. movzbl -128(%ebp,%edi,1),%edi
  1097. shll $8,%edi
  1098. xorl %edi,%esi
  1099. movl %eax,%edi
  1100. shrl $16,%edi
  1101. andl $255,%edi
  1102. movzbl -128(%ebp,%edi,1),%edi
  1103. shll $16,%edi
  1104. xorl %edi,%esi
  1105. movl %edx,%edi
  1106. shrl $24,%edi
  1107. movzbl -128(%ebp,%edi,1),%edi
  1108. shll $24,%edi
  1109. xorl %edi,%esi
  1110. andl $255,%edx
  1111. movzbl -128(%ebp,%edx,1),%edx
  1112. movzbl %ch,%ecx
  1113. movzbl -128(%ebp,%ecx,1),%ecx
  1114. shll $8,%ecx
  1115. xorl %ecx,%edx
  1116. movl %esi,%ecx
  1117. shrl $16,%ebx
  1118. andl $255,%ebx
  1119. movzbl -128(%ebp,%ebx,1),%ebx
  1120. shll $16,%ebx
  1121. xorl %ebx,%edx
  1122. shrl $24,%eax
  1123. movzbl -128(%ebp,%eax,1),%eax
  1124. shll $24,%eax
  1125. xorl %eax,%edx
  1126. movl $2155905152,%edi
  1127. andl %ecx,%edi
  1128. movl %edi,%esi
  1129. shrl $7,%edi
  1130. leal (%ecx,%ecx,1),%eax
  1131. subl %edi,%esi
  1132. andl $4278124286,%eax
  1133. andl $454761243,%esi
  1134. xorl %esi,%eax
  1135. movl $2155905152,%edi
  1136. andl %eax,%edi
  1137. movl %edi,%esi
  1138. shrl $7,%edi
  1139. leal (%eax,%eax,1),%ebx
  1140. subl %edi,%esi
  1141. andl $4278124286,%ebx
  1142. andl $454761243,%esi
  1143. xorl %ecx,%eax
  1144. xorl %esi,%ebx
  1145. movl $2155905152,%edi
  1146. andl %ebx,%edi
  1147. movl %edi,%esi
  1148. shrl $7,%edi
  1149. leal (%ebx,%ebx,1),%ebp
  1150. subl %edi,%esi
  1151. andl $4278124286,%ebp
  1152. andl $454761243,%esi
  1153. xorl %ecx,%ebx
  1154. roll $8,%ecx
  1155. xorl %esi,%ebp
  1156. xorl %eax,%ecx
  1157. xorl %ebp,%eax
  1158. xorl %ebx,%ecx
  1159. xorl %ebp,%ebx
  1160. roll $24,%eax
  1161. xorl %ebp,%ecx
  1162. roll $16,%ebx
  1163. xorl %eax,%ecx
  1164. roll $8,%ebp
  1165. xorl %ebx,%ecx
  1166. movl 4(%esp),%eax
  1167. xorl %ebp,%ecx
  1168. movl %ecx,12(%esp)
  1169. movl $2155905152,%edi
  1170. andl %edx,%edi
  1171. movl %edi,%esi
  1172. shrl $7,%edi
  1173. leal (%edx,%edx,1),%ebx
  1174. subl %edi,%esi
  1175. andl $4278124286,%ebx
  1176. andl $454761243,%esi
  1177. xorl %esi,%ebx
  1178. movl $2155905152,%edi
  1179. andl %ebx,%edi
  1180. movl %edi,%esi
  1181. shrl $7,%edi
  1182. leal (%ebx,%ebx,1),%ecx
  1183. subl %edi,%esi
  1184. andl $4278124286,%ecx
  1185. andl $454761243,%esi
  1186. xorl %edx,%ebx
  1187. xorl %esi,%ecx
  1188. movl $2155905152,%edi
  1189. andl %ecx,%edi
  1190. movl %edi,%esi
  1191. shrl $7,%edi
  1192. leal (%ecx,%ecx,1),%ebp
  1193. subl %edi,%esi
  1194. andl $4278124286,%ebp
  1195. andl $454761243,%esi
  1196. xorl %edx,%ecx
  1197. roll $8,%edx
  1198. xorl %esi,%ebp
  1199. xorl %ebx,%edx
  1200. xorl %ebp,%ebx
  1201. xorl %ecx,%edx
  1202. xorl %ebp,%ecx
  1203. roll $24,%ebx
  1204. xorl %ebp,%edx
  1205. roll $16,%ecx
  1206. xorl %ebx,%edx
  1207. roll $8,%ebp
  1208. xorl %ecx,%edx
  1209. movl 8(%esp),%ebx
  1210. xorl %ebp,%edx
  1211. movl %edx,16(%esp)
  1212. movl $2155905152,%edi
  1213. andl %eax,%edi
  1214. movl %edi,%esi
  1215. shrl $7,%edi
  1216. leal (%eax,%eax,1),%ecx
  1217. subl %edi,%esi
  1218. andl $4278124286,%ecx
  1219. andl $454761243,%esi
  1220. xorl %esi,%ecx
  1221. movl $2155905152,%edi
  1222. andl %ecx,%edi
  1223. movl %edi,%esi
  1224. shrl $7,%edi
  1225. leal (%ecx,%ecx,1),%edx
  1226. subl %edi,%esi
  1227. andl $4278124286,%edx
  1228. andl $454761243,%esi
  1229. xorl %eax,%ecx
  1230. xorl %esi,%edx
  1231. movl $2155905152,%edi
  1232. andl %edx,%edi
  1233. movl %edi,%esi
  1234. shrl $7,%edi
  1235. leal (%edx,%edx,1),%ebp
  1236. subl %edi,%esi
  1237. andl $4278124286,%ebp
  1238. andl $454761243,%esi
  1239. xorl %eax,%edx
  1240. roll $8,%eax
  1241. xorl %esi,%ebp
  1242. xorl %ecx,%eax
  1243. xorl %ebp,%ecx
  1244. xorl %edx,%eax
  1245. xorl %ebp,%edx
  1246. roll $24,%ecx
  1247. xorl %ebp,%eax
  1248. roll $16,%edx
  1249. xorl %ecx,%eax
  1250. roll $8,%ebp
  1251. xorl %edx,%eax
  1252. xorl %ebp,%eax
  1253. movl $2155905152,%edi
  1254. andl %ebx,%edi
  1255. movl %edi,%esi
  1256. shrl $7,%edi
  1257. leal (%ebx,%ebx,1),%ecx
  1258. subl %edi,%esi
  1259. andl $4278124286,%ecx
  1260. andl $454761243,%esi
  1261. xorl %esi,%ecx
  1262. movl $2155905152,%edi
  1263. andl %ecx,%edi
  1264. movl %edi,%esi
  1265. shrl $7,%edi
  1266. leal (%ecx,%ecx,1),%edx
  1267. subl %edi,%esi
  1268. andl $4278124286,%edx
  1269. andl $454761243,%esi
  1270. xorl %ebx,%ecx
  1271. xorl %esi,%edx
  1272. movl $2155905152,%edi
  1273. andl %edx,%edi
  1274. movl %edi,%esi
  1275. shrl $7,%edi
  1276. leal (%edx,%edx,1),%ebp
  1277. subl %edi,%esi
  1278. andl $4278124286,%ebp
  1279. andl $454761243,%esi
  1280. xorl %ebx,%edx
  1281. roll $8,%ebx
  1282. xorl %esi,%ebp
  1283. xorl %ecx,%ebx
  1284. xorl %ebp,%ecx
  1285. xorl %edx,%ebx
  1286. xorl %ebp,%edx
  1287. roll $24,%ecx
  1288. xorl %ebp,%ebx
  1289. roll $16,%edx
  1290. xorl %ecx,%ebx
  1291. roll $8,%ebp
  1292. xorl %edx,%ebx
  1293. movl 12(%esp),%ecx
  1294. xorl %ebp,%ebx
  1295. movl 16(%esp),%edx
  1296. movl 20(%esp),%edi
  1297. movl 28(%esp),%ebp
  1298. addl $16,%edi
  1299. xorl (%edi),%eax
  1300. xorl 4(%edi),%ebx
  1301. xorl 8(%edi),%ecx
  1302. xorl 12(%edi),%edx
  1303. cmpl 24(%esp),%edi
  1304. movl %edi,20(%esp)
  1305. jb .L006loop
  1306. movl %eax,%esi
  1307. andl $255,%esi
  1308. movzbl -128(%ebp,%esi,1),%esi
  1309. movzbl %dh,%edi
  1310. movzbl -128(%ebp,%edi,1),%edi
  1311. shll $8,%edi
  1312. xorl %edi,%esi
  1313. movl %ecx,%edi
  1314. shrl $16,%edi
  1315. andl $255,%edi
  1316. movzbl -128(%ebp,%edi,1),%edi
  1317. shll $16,%edi
  1318. xorl %edi,%esi
  1319. movl %ebx,%edi
  1320. shrl $24,%edi
  1321. movzbl -128(%ebp,%edi,1),%edi
  1322. shll $24,%edi
  1323. xorl %edi,%esi
  1324. movl %esi,4(%esp)
  1325. movl %ebx,%esi
  1326. andl $255,%esi
  1327. movzbl -128(%ebp,%esi,1),%esi
  1328. movzbl %ah,%edi
  1329. movzbl -128(%ebp,%edi,1),%edi
  1330. shll $8,%edi
  1331. xorl %edi,%esi
  1332. movl %edx,%edi
  1333. shrl $16,%edi
  1334. andl $255,%edi
  1335. movzbl -128(%ebp,%edi,1),%edi
  1336. shll $16,%edi
  1337. xorl %edi,%esi
  1338. movl %ecx,%edi
  1339. shrl $24,%edi
  1340. movzbl -128(%ebp,%edi,1),%edi
  1341. shll $24,%edi
  1342. xorl %edi,%esi
  1343. movl %esi,8(%esp)
  1344. movl %ecx,%esi
  1345. andl $255,%esi
  1346. movzbl -128(%ebp,%esi,1),%esi
  1347. movzbl %bh,%edi
  1348. movzbl -128(%ebp,%edi,1),%edi
  1349. shll $8,%edi
  1350. xorl %edi,%esi
  1351. movl %eax,%edi
  1352. shrl $16,%edi
  1353. andl $255,%edi
  1354. movzbl -128(%ebp,%edi,1),%edi
  1355. shll $16,%edi
  1356. xorl %edi,%esi
  1357. movl %edx,%edi
  1358. shrl $24,%edi
  1359. movzbl -128(%ebp,%edi,1),%edi
  1360. shll $24,%edi
  1361. xorl %edi,%esi
  1362. movl 20(%esp),%edi
  1363. andl $255,%edx
  1364. movzbl -128(%ebp,%edx,1),%edx
  1365. movzbl %ch,%ecx
  1366. movzbl -128(%ebp,%ecx,1),%ecx
  1367. shll $8,%ecx
  1368. xorl %ecx,%edx
  1369. movl %esi,%ecx
  1370. shrl $16,%ebx
  1371. andl $255,%ebx
  1372. movzbl -128(%ebp,%ebx,1),%ebx
  1373. shll $16,%ebx
  1374. xorl %ebx,%edx
  1375. movl 8(%esp),%ebx
  1376. shrl $24,%eax
  1377. movzbl -128(%ebp,%eax,1),%eax
  1378. shll $24,%eax
  1379. xorl %eax,%edx
  1380. movl 4(%esp),%eax
  1381. xorl 16(%edi),%eax
  1382. xorl 20(%edi),%ebx
  1383. xorl 24(%edi),%ecx
  1384. xorl 28(%edi),%edx
  1385. ret
  1386. .size _x86_AES_decrypt_compact,.-_x86_AES_decrypt_compact
  1387. .type _sse_AES_decrypt_compact,@function
  1388. .align 16
  1389. _sse_AES_decrypt_compact:
  1390. pxor (%edi),%mm0
  1391. pxor 8(%edi),%mm4
  1392. movl 240(%edi),%esi
  1393. leal -2(%esi,%esi,1),%esi
  1394. leal (%edi,%esi,8),%esi
  1395. movl %esi,24(%esp)
  1396. movl $454761243,%eax
  1397. movl %eax,8(%esp)
  1398. movl %eax,12(%esp)
  1399. movl -128(%ebp),%eax
  1400. movl -96(%ebp),%ebx
  1401. movl -64(%ebp),%ecx
  1402. movl -32(%ebp),%edx
  1403. movl (%ebp),%eax
  1404. movl 32(%ebp),%ebx
  1405. movl 64(%ebp),%ecx
  1406. movl 96(%ebp),%edx
  1407. .align 16
  1408. .L007loop:
  1409. pshufw $12,%mm0,%mm1
  1410. pshufw $9,%mm4,%mm5
  1411. movd %mm1,%eax
  1412. movd %mm5,%ebx
  1413. movl %edi,20(%esp)
  1414. movzbl %al,%esi
  1415. movzbl %ah,%edx
  1416. pshufw $6,%mm0,%mm2
  1417. movzbl -128(%ebp,%esi,1),%ecx
  1418. movzbl %bl,%edi
  1419. movzbl -128(%ebp,%edx,1),%edx
  1420. shrl $16,%eax
  1421. shll $8,%edx
  1422. movzbl -128(%ebp,%edi,1),%esi
  1423. movzbl %bh,%edi
  1424. shll $16,%esi
  1425. pshufw $3,%mm4,%mm6
  1426. orl %esi,%ecx
  1427. movzbl -128(%ebp,%edi,1),%esi
  1428. movzbl %ah,%edi
  1429. shll $24,%esi
  1430. shrl $16,%ebx
  1431. orl %esi,%edx
  1432. movzbl -128(%ebp,%edi,1),%esi
  1433. movzbl %bh,%edi
  1434. shll $24,%esi
  1435. orl %esi,%ecx
  1436. movzbl -128(%ebp,%edi,1),%esi
  1437. movzbl %al,%edi
  1438. shll $8,%esi
  1439. movd %mm2,%eax
  1440. orl %esi,%ecx
  1441. movzbl -128(%ebp,%edi,1),%esi
  1442. movzbl %bl,%edi
  1443. shll $16,%esi
  1444. movd %mm6,%ebx
  1445. movd %ecx,%mm0
  1446. movzbl -128(%ebp,%edi,1),%ecx
  1447. movzbl %al,%edi
  1448. orl %esi,%ecx
  1449. movzbl -128(%ebp,%edi,1),%esi
  1450. movzbl %bl,%edi
  1451. orl %esi,%edx
  1452. movzbl -128(%ebp,%edi,1),%esi
  1453. movzbl %ah,%edi
  1454. shll $16,%esi
  1455. shrl $16,%eax
  1456. orl %esi,%edx
  1457. movzbl -128(%ebp,%edi,1),%esi
  1458. movzbl %bh,%edi
  1459. shrl $16,%ebx
  1460. shll $8,%esi
  1461. movd %edx,%mm1
  1462. movzbl -128(%ebp,%edi,1),%edx
  1463. movzbl %bh,%edi
  1464. shll $24,%edx
  1465. andl $255,%ebx
  1466. orl %esi,%edx
  1467. punpckldq %mm1,%mm0
  1468. movzbl -128(%ebp,%edi,1),%esi
  1469. movzbl %al,%edi
  1470. shll $8,%esi
  1471. movzbl %ah,%eax
  1472. movzbl -128(%ebp,%ebx,1),%ebx
  1473. orl %esi,%ecx
  1474. movzbl -128(%ebp,%edi,1),%esi
  1475. orl %ebx,%edx
  1476. shll $16,%esi
  1477. movzbl -128(%ebp,%eax,1),%eax
  1478. orl %esi,%edx
  1479. shll $24,%eax
  1480. orl %eax,%ecx
  1481. movl 20(%esp),%edi
  1482. movd %edx,%mm4
  1483. movd %ecx,%mm5
  1484. punpckldq %mm5,%mm4
  1485. addl $16,%edi
  1486. cmpl 24(%esp),%edi
  1487. ja .L008out
  1488. movq %mm0,%mm3
  1489. movq %mm4,%mm7
  1490. pshufw $228,%mm0,%mm2
  1491. pshufw $228,%mm4,%mm6
  1492. movq %mm0,%mm1
  1493. movq %mm4,%mm5
  1494. pshufw $177,%mm0,%mm0
  1495. pshufw $177,%mm4,%mm4
  1496. pslld $8,%mm2
  1497. pslld $8,%mm6
  1498. psrld $8,%mm3
  1499. psrld $8,%mm7
  1500. pxor %mm2,%mm0
  1501. pxor %mm6,%mm4
  1502. pxor %mm3,%mm0
  1503. pxor %mm7,%mm4
  1504. pslld $16,%mm2
  1505. pslld $16,%mm6
  1506. psrld $16,%mm3
  1507. psrld $16,%mm7
  1508. pxor %mm2,%mm0
  1509. pxor %mm6,%mm4
  1510. pxor %mm3,%mm0
  1511. pxor %mm7,%mm4
  1512. movq 8(%esp),%mm3
  1513. pxor %mm2,%mm2
  1514. pxor %mm6,%mm6
  1515. pcmpgtb %mm1,%mm2
  1516. pcmpgtb %mm5,%mm6
  1517. pand %mm3,%mm2
  1518. pand %mm3,%mm6
  1519. paddb %mm1,%mm1
  1520. paddb %mm5,%mm5
  1521. pxor %mm2,%mm1
  1522. pxor %mm6,%mm5
  1523. movq %mm1,%mm3
  1524. movq %mm5,%mm7
  1525. movq %mm1,%mm2
  1526. movq %mm5,%mm6
  1527. pxor %mm1,%mm0
  1528. pxor %mm5,%mm4
  1529. pslld $24,%mm3
  1530. pslld $24,%mm7
  1531. psrld $8,%mm2
  1532. psrld $8,%mm6
  1533. pxor %mm3,%mm0
  1534. pxor %mm7,%mm4
  1535. pxor %mm2,%mm0
  1536. pxor %mm6,%mm4
  1537. movq 8(%esp),%mm2
  1538. pxor %mm3,%mm3
  1539. pxor %mm7,%mm7
  1540. pcmpgtb %mm1,%mm3
  1541. pcmpgtb %mm5,%mm7
  1542. pand %mm2,%mm3
  1543. pand %mm2,%mm7
  1544. paddb %mm1,%mm1
  1545. paddb %mm5,%mm5
  1546. pxor %mm3,%mm1
  1547. pxor %mm7,%mm5
  1548. pshufw $177,%mm1,%mm3
  1549. pshufw $177,%mm5,%mm7
  1550. pxor %mm1,%mm0
  1551. pxor %mm5,%mm4
  1552. pxor %mm3,%mm0
  1553. pxor %mm7,%mm4
  1554. pxor %mm3,%mm3
  1555. pxor %mm7,%mm7
  1556. pcmpgtb %mm1,%mm3
  1557. pcmpgtb %mm5,%mm7
  1558. pand %mm2,%mm3
  1559. pand %mm2,%mm7
  1560. paddb %mm1,%mm1
  1561. paddb %mm5,%mm5
  1562. pxor %mm3,%mm1
  1563. pxor %mm7,%mm5
  1564. pxor %mm1,%mm0
  1565. pxor %mm5,%mm4
  1566. movq %mm1,%mm3
  1567. movq %mm5,%mm7
  1568. pshufw $177,%mm1,%mm2
  1569. pshufw $177,%mm5,%mm6
  1570. pxor %mm2,%mm0
  1571. pxor %mm6,%mm4
  1572. pslld $8,%mm1
  1573. pslld $8,%mm5
  1574. psrld $8,%mm3
  1575. psrld $8,%mm7
  1576. movq (%edi),%mm2
  1577. movq 8(%edi),%mm6
  1578. pxor %mm1,%mm0
  1579. pxor %mm5,%mm4
  1580. pxor %mm3,%mm0
  1581. pxor %mm7,%mm4
  1582. movl -128(%ebp),%eax
  1583. pslld $16,%mm1
  1584. pslld $16,%mm5
  1585. movl -64(%ebp),%ebx
  1586. psrld $16,%mm3
  1587. psrld $16,%mm7
  1588. movl (%ebp),%ecx
  1589. pxor %mm1,%mm0
  1590. pxor %mm5,%mm4
  1591. movl 64(%ebp),%edx
  1592. pxor %mm3,%mm0
  1593. pxor %mm7,%mm4
  1594. pxor %mm2,%mm0
  1595. pxor %mm6,%mm4
  1596. jmp .L007loop
  1597. .align 16
  1598. .L008out:
  1599. pxor (%edi),%mm0
  1600. pxor 8(%edi),%mm4
  1601. ret
  1602. .size _sse_AES_decrypt_compact,.-_sse_AES_decrypt_compact
  1603. .type _x86_AES_decrypt,@function
  1604. .align 16
  1605. _x86_AES_decrypt:
  1606. movl %edi,20(%esp)
  1607. xorl (%edi),%eax
  1608. xorl 4(%edi),%ebx
  1609. xorl 8(%edi),%ecx
  1610. xorl 12(%edi),%edx
  1611. movl 240(%edi),%esi
  1612. leal -2(%esi,%esi,1),%esi
  1613. leal (%edi,%esi,8),%esi
  1614. movl %esi,24(%esp)
  1615. .align 16
  1616. .L009loop:
  1617. movl %eax,%esi
  1618. andl $255,%esi
  1619. movl (%ebp,%esi,8),%esi
  1620. movzbl %dh,%edi
  1621. xorl 3(%ebp,%edi,8),%esi
  1622. movl %ecx,%edi
  1623. shrl $16,%edi
  1624. andl $255,%edi
  1625. xorl 2(%ebp,%edi,8),%esi
  1626. movl %ebx,%edi
  1627. shrl $24,%edi
  1628. xorl 1(%ebp,%edi,8),%esi
  1629. movl %esi,4(%esp)
  1630. movl %ebx,%esi
  1631. andl $255,%esi
  1632. movl (%ebp,%esi,8),%esi
  1633. movzbl %ah,%edi
  1634. xorl 3(%ebp,%edi,8),%esi
  1635. movl %edx,%edi
  1636. shrl $16,%edi
  1637. andl $255,%edi
  1638. xorl 2(%ebp,%edi,8),%esi
  1639. movl %ecx,%edi
  1640. shrl $24,%edi
  1641. xorl 1(%ebp,%edi,8),%esi
  1642. movl %esi,8(%esp)
  1643. movl %ecx,%esi
  1644. andl $255,%esi
  1645. movl (%ebp,%esi,8),%esi
  1646. movzbl %bh,%edi
  1647. xorl 3(%ebp,%edi,8),%esi
  1648. movl %eax,%edi
  1649. shrl $16,%edi
  1650. andl $255,%edi
  1651. xorl 2(%ebp,%edi,8),%esi
  1652. movl %edx,%edi
  1653. shrl $24,%edi
  1654. xorl 1(%ebp,%edi,8),%esi
  1655. movl 20(%esp),%edi
  1656. andl $255,%edx
  1657. movl (%ebp,%edx,8),%edx
  1658. movzbl %ch,%ecx
  1659. xorl 3(%ebp,%ecx,8),%edx
  1660. movl %esi,%ecx
  1661. shrl $16,%ebx
  1662. andl $255,%ebx
  1663. xorl 2(%ebp,%ebx,8),%edx
  1664. movl 8(%esp),%ebx
  1665. shrl $24,%eax
  1666. xorl 1(%ebp,%eax,8),%edx
  1667. movl 4(%esp),%eax
  1668. addl $16,%edi
  1669. xorl (%edi),%eax
  1670. xorl 4(%edi),%ebx
  1671. xorl 8(%edi),%ecx
  1672. xorl 12(%edi),%edx
  1673. cmpl 24(%esp),%edi
  1674. movl %edi,20(%esp)
  1675. jb .L009loop
  1676. leal 2176(%ebp),%ebp
  1677. movl -128(%ebp),%edi
  1678. movl -96(%ebp),%esi
  1679. movl -64(%ebp),%edi
  1680. movl -32(%ebp),%esi
  1681. movl (%ebp),%edi
  1682. movl 32(%ebp),%esi
  1683. movl 64(%ebp),%edi
  1684. movl 96(%ebp),%esi
  1685. leal -128(%ebp),%ebp
  1686. movl %eax,%esi
  1687. andl $255,%esi
  1688. movzbl (%ebp,%esi,1),%esi
  1689. movzbl %dh,%edi
  1690. movzbl (%ebp,%edi,1),%edi
  1691. shll $8,%edi
  1692. xorl %edi,%esi
  1693. movl %ecx,%edi
  1694. shrl $16,%edi
  1695. andl $255,%edi
  1696. movzbl (%ebp,%edi,1),%edi
  1697. shll $16,%edi
  1698. xorl %edi,%esi
  1699. movl %ebx,%edi
  1700. shrl $24,%edi
  1701. movzbl (%ebp,%edi,1),%edi
  1702. shll $24,%edi
  1703. xorl %edi,%esi
  1704. movl %esi,4(%esp)
  1705. movl %ebx,%esi
  1706. andl $255,%esi
  1707. movzbl (%ebp,%esi,1),%esi
  1708. movzbl %ah,%edi
  1709. movzbl (%ebp,%edi,1),%edi
  1710. shll $8,%edi
  1711. xorl %edi,%esi
  1712. movl %edx,%edi
  1713. shrl $16,%edi
  1714. andl $255,%edi
  1715. movzbl (%ebp,%edi,1),%edi
  1716. shll $16,%edi
  1717. xorl %edi,%esi
  1718. movl %ecx,%edi
  1719. shrl $24,%edi
  1720. movzbl (%ebp,%edi,1),%edi
  1721. shll $24,%edi
  1722. xorl %edi,%esi
  1723. movl %esi,8(%esp)
  1724. movl %ecx,%esi
  1725. andl $255,%esi
  1726. movzbl (%ebp,%esi,1),%esi
  1727. movzbl %bh,%edi
  1728. movzbl (%ebp,%edi,1),%edi
  1729. shll $8,%edi
  1730. xorl %edi,%esi
  1731. movl %eax,%edi
  1732. shrl $16,%edi
  1733. andl $255,%edi
  1734. movzbl (%ebp,%edi,1),%edi
  1735. shll $16,%edi
  1736. xorl %edi,%esi
  1737. movl %edx,%edi
  1738. shrl $24,%edi
  1739. movzbl (%ebp,%edi,1),%edi
  1740. shll $24,%edi
  1741. xorl %edi,%esi
  1742. movl 20(%esp),%edi
  1743. andl $255,%edx
  1744. movzbl (%ebp,%edx,1),%edx
  1745. movzbl %ch,%ecx
  1746. movzbl (%ebp,%ecx,1),%ecx
  1747. shll $8,%ecx
  1748. xorl %ecx,%edx
  1749. movl %esi,%ecx
  1750. shrl $16,%ebx
  1751. andl $255,%ebx
  1752. movzbl (%ebp,%ebx,1),%ebx
  1753. shll $16,%ebx
  1754. xorl %ebx,%edx
  1755. movl 8(%esp),%ebx
  1756. shrl $24,%eax
  1757. movzbl (%ebp,%eax,1),%eax
  1758. shll $24,%eax
  1759. xorl %eax,%edx
  1760. movl 4(%esp),%eax
  1761. leal -2048(%ebp),%ebp
  1762. addl $16,%edi
  1763. xorl (%edi),%eax
  1764. xorl 4(%edi),%ebx
  1765. xorl 8(%edi),%ecx
  1766. xorl 12(%edi),%edx
  1767. ret
  1768. .align 64
  1769. .LAES_Td:
  1770. .long 1353184337,1353184337
  1771. .long 1399144830,1399144830
  1772. .long 3282310938,3282310938
  1773. .long 2522752826,2522752826
  1774. .long 3412831035,3412831035
  1775. .long 4047871263,4047871263
  1776. .long 2874735276,2874735276
  1777. .long 2466505547,2466505547
  1778. .long 1442459680,1442459680
  1779. .long 4134368941,4134368941
  1780. .long 2440481928,2440481928
  1781. .long 625738485,625738485
  1782. .long 4242007375,4242007375
  1783. .long 3620416197,3620416197
  1784. .long 2151953702,2151953702
  1785. .long 2409849525,2409849525
  1786. .long 1230680542,1230680542
  1787. .long 1729870373,1729870373
  1788. .long 2551114309,2551114309
  1789. .long 3787521629,3787521629
  1790. .long 41234371,41234371
  1791. .long 317738113,317738113
  1792. .long 2744600205,2744600205
  1793. .long 3338261355,3338261355
  1794. .long 3881799427,3881799427
  1795. .long 2510066197,2510066197
  1796. .long 3950669247,3950669247
  1797. .long 3663286933,3663286933
  1798. .long 763608788,763608788
  1799. .long 3542185048,3542185048
  1800. .long 694804553,694804553
  1801. .long 1154009486,1154009486
  1802. .long 1787413109,1787413109
  1803. .long 2021232372,2021232372
  1804. .long 1799248025,1799248025
  1805. .long 3715217703,3715217703
  1806. .long 3058688446,3058688446
  1807. .long 397248752,397248752
  1808. .long 1722556617,1722556617
  1809. .long 3023752829,3023752829
  1810. .long 407560035,407560035
  1811. .long 2184256229,2184256229
  1812. .long 1613975959,1613975959
  1813. .long 1165972322,1165972322
  1814. .long 3765920945,3765920945
  1815. .long 2226023355,2226023355
  1816. .long 480281086,480281086
  1817. .long 2485848313,2485848313
  1818. .long 1483229296,1483229296
  1819. .long 436028815,436028815
  1820. .long 2272059028,2272059028
  1821. .long 3086515026,3086515026
  1822. .long 601060267,601060267
  1823. .long 3791801202,3791801202
  1824. .long 1468997603,1468997603
  1825. .long 715871590,715871590
  1826. .long 120122290,120122290
  1827. .long 63092015,63092015
  1828. .long 2591802758,2591802758
  1829. .long 2768779219,2768779219
  1830. .long 4068943920,4068943920
  1831. .long 2997206819,2997206819
  1832. .long 3127509762,3127509762
  1833. .long 1552029421,1552029421
  1834. .long 723308426,723308426
  1835. .long 2461301159,2461301159
  1836. .long 4042393587,4042393587
  1837. .long 2715969870,2715969870
  1838. .long 3455375973,3455375973
  1839. .long 3586000134,3586000134
  1840. .long 526529745,526529745
  1841. .long 2331944644,2331944644
  1842. .long 2639474228,2639474228
  1843. .long 2689987490,2689987490
  1844. .long 853641733,853641733
  1845. .long 1978398372,1978398372
  1846. .long 971801355,971801355
  1847. .long 2867814464,2867814464
  1848. .long 111112542,111112542
  1849. .long 1360031421,1360031421
  1850. .long 4186579262,4186579262
  1851. .long 1023860118,1023860118
  1852. .long 2919579357,2919579357
  1853. .long 1186850381,1186850381
  1854. .long 3045938321,3045938321
  1855. .long 90031217,90031217
  1856. .long 1876166148,1876166148
  1857. .long 4279586912,4279586912
  1858. .long 620468249,620468249
  1859. .long 2548678102,2548678102
  1860. .long 3426959497,3426959497
  1861. .long 2006899047,2006899047
  1862. .long 3175278768,3175278768
  1863. .long 2290845959,2290845959
  1864. .long 945494503,945494503
  1865. .long 3689859193,3689859193
  1866. .long 1191869601,1191869601
  1867. .long 3910091388,3910091388
  1868. .long 3374220536,3374220536
  1869. .long 0,0
  1870. .long 2206629897,2206629897
  1871. .long 1223502642,1223502642
  1872. .long 2893025566,2893025566
  1873. .long 1316117100,1316117100
  1874. .long 4227796733,4227796733
  1875. .long 1446544655,1446544655
  1876. .long 517320253,517320253
  1877. .long 658058550,658058550
  1878. .long 1691946762,1691946762
  1879. .long 564550760,564550760
  1880. .long 3511966619,3511966619
  1881. .long 976107044,976107044
  1882. .long 2976320012,2976320012
  1883. .long 266819475,266819475
  1884. .long 3533106868,3533106868
  1885. .long 2660342555,2660342555
  1886. .long 1338359936,1338359936
  1887. .long 2720062561,2720062561
  1888. .long 1766553434,1766553434
  1889. .long 370807324,370807324
  1890. .long 179999714,179999714
  1891. .long 3844776128,3844776128
  1892. .long 1138762300,1138762300
  1893. .long 488053522,488053522
  1894. .long 185403662,185403662
  1895. .long 2915535858,2915535858
  1896. .long 3114841645,3114841645
  1897. .long 3366526484,3366526484
  1898. .long 2233069911,2233069911
  1899. .long 1275557295,1275557295
  1900. .long 3151862254,3151862254
  1901. .long 4250959779,4250959779
  1902. .long 2670068215,2670068215
  1903. .long 3170202204,3170202204
  1904. .long 3309004356,3309004356
  1905. .long 880737115,880737115
  1906. .long 1982415755,1982415755
  1907. .long 3703972811,3703972811
  1908. .long 1761406390,1761406390
  1909. .long 1676797112,1676797112
  1910. .long 3403428311,3403428311
  1911. .long 277177154,277177154
  1912. .long 1076008723,1076008723
  1913. .long 538035844,538035844
  1914. .long 2099530373,2099530373
  1915. .long 4164795346,4164795346
  1916. .long 288553390,288553390
  1917. .long 1839278535,1839278535
  1918. .long 1261411869,1261411869
  1919. .long 4080055004,4080055004
  1920. .long 3964831245,3964831245
  1921. .long 3504587127,3504587127
  1922. .long 1813426987,1813426987
  1923. .long 2579067049,2579067049
  1924. .long 4199060497,4199060497
  1925. .long 577038663,577038663
  1926. .long 3297574056,3297574056
  1927. .long 440397984,440397984
  1928. .long 3626794326,3626794326
  1929. .long 4019204898,4019204898
  1930. .long 3343796615,3343796615
  1931. .long 3251714265,3251714265
  1932. .long 4272081548,4272081548
  1933. .long 906744984,906744984
  1934. .long 3481400742,3481400742
  1935. .long 685669029,685669029
  1936. .long 646887386,646887386
  1937. .long 2764025151,2764025151
  1938. .long 3835509292,3835509292
  1939. .long 227702864,227702864
  1940. .long 2613862250,2613862250
  1941. .long 1648787028,1648787028
  1942. .long 3256061430,3256061430
  1943. .long 3904428176,3904428176
  1944. .long 1593260334,1593260334
  1945. .long 4121936770,4121936770
  1946. .long 3196083615,3196083615
  1947. .long 2090061929,2090061929
  1948. .long 2838353263,2838353263
  1949. .long 3004310991,3004310991
  1950. .long 999926984,999926984
  1951. .long 2809993232,2809993232
  1952. .long 1852021992,1852021992
  1953. .long 2075868123,2075868123
  1954. .long 158869197,158869197
  1955. .long 4095236462,4095236462
  1956. .long 28809964,28809964
  1957. .long 2828685187,2828685187
  1958. .long 1701746150,1701746150
  1959. .long 2129067946,2129067946
  1960. .long 147831841,147831841
  1961. .long 3873969647,3873969647
  1962. .long 3650873274,3650873274
  1963. .long 3459673930,3459673930
  1964. .long 3557400554,3557400554
  1965. .long 3598495785,3598495785
  1966. .long 2947720241,2947720241
  1967. .long 824393514,824393514
  1968. .long 815048134,815048134
  1969. .long 3227951669,3227951669
  1970. .long 935087732,935087732
  1971. .long 2798289660,2798289660
  1972. .long 2966458592,2966458592
  1973. .long 366520115,366520115
  1974. .long 1251476721,1251476721
  1975. .long 4158319681,4158319681
  1976. .long 240176511,240176511
  1977. .long 804688151,804688151
  1978. .long 2379631990,2379631990
  1979. .long 1303441219,1303441219
  1980. .long 1414376140,1414376140
  1981. .long 3741619940,3741619940
  1982. .long 3820343710,3820343710
  1983. .long 461924940,461924940
  1984. .long 3089050817,3089050817
  1985. .long 2136040774,2136040774
  1986. .long 82468509,82468509
  1987. .long 1563790337,1563790337
  1988. .long 1937016826,1937016826
  1989. .long 776014843,776014843
  1990. .long 1511876531,1511876531
  1991. .long 1389550482,1389550482
  1992. .long 861278441,861278441
  1993. .long 323475053,323475053
  1994. .long 2355222426,2355222426
  1995. .long 2047648055,2047648055
  1996. .long 2383738969,2383738969
  1997. .long 2302415851,2302415851
  1998. .long 3995576782,3995576782
  1999. .long 902390199,902390199
  2000. .long 3991215329,3991215329
  2001. .long 1018251130,1018251130
  2002. .long 1507840668,1507840668
  2003. .long 1064563285,1064563285
  2004. .long 2043548696,2043548696
  2005. .long 3208103795,3208103795
  2006. .long 3939366739,3939366739
  2007. .long 1537932639,1537932639
  2008. .long 342834655,342834655
  2009. .long 2262516856,2262516856
  2010. .long 2180231114,2180231114
  2011. .long 1053059257,1053059257
  2012. .long 741614648,741614648
  2013. .long 1598071746,1598071746
  2014. .long 1925389590,1925389590
  2015. .long 203809468,203809468
  2016. .long 2336832552,2336832552
  2017. .long 1100287487,1100287487
  2018. .long 1895934009,1895934009
  2019. .long 3736275976,3736275976
  2020. .long 2632234200,2632234200
  2021. .long 2428589668,2428589668
  2022. .long 1636092795,1636092795
  2023. .long 1890988757,1890988757
  2024. .long 1952214088,1952214088
  2025. .long 1113045200,1113045200
  2026. .byte 82,9,106,213,48,54,165,56
  2027. .byte 191,64,163,158,129,243,215,251
  2028. .byte 124,227,57,130,155,47,255,135
  2029. .byte 52,142,67,68,196,222,233,203
  2030. .byte 84,123,148,50,166,194,35,61
  2031. .byte 238,76,149,11,66,250,195,78
  2032. .byte 8,46,161,102,40,217,36,178
  2033. .byte 118,91,162,73,109,139,209,37
  2034. .byte 114,248,246,100,134,104,152,22
  2035. .byte 212,164,92,204,93,101,182,146
  2036. .byte 108,112,72,80,253,237,185,218
  2037. .byte 94,21,70,87,167,141,157,132
  2038. .byte 144,216,171,0,140,188,211,10
  2039. .byte 247,228,88,5,184,179,69,6
  2040. .byte 208,44,30,143,202,63,15,2
  2041. .byte 193,175,189,3,1,19,138,107
  2042. .byte 58,145,17,65,79,103,220,234
  2043. .byte 151,242,207,206,240,180,230,115
  2044. .byte 150,172,116,34,231,173,53,133
  2045. .byte 226,249,55,232,28,117,223,110
  2046. .byte 71,241,26,113,29,41,197,137
  2047. .byte 111,183,98,14,170,24,190,27
  2048. .byte 252,86,62,75,198,210,121,32
  2049. .byte 154,219,192,254,120,205,90,244
  2050. .byte 31,221,168,51,136,7,199,49
  2051. .byte 177,18,16,89,39,128,236,95
  2052. .byte 96,81,127,169,25,181,74,13
  2053. .byte 45,229,122,159,147,201,156,239
  2054. .byte 160,224,59,77,174,42,245,176
  2055. .byte 200,235,187,60,131,83,153,97
  2056. .byte 23,43,4,126,186,119,214,38
  2057. .byte 225,105,20,99,85,33,12,125
  2058. .byte 82,9,106,213,48,54,165,56
  2059. .byte 191,64,163,158,129,243,215,251
  2060. .byte 124,227,57,130,155,47,255,135
  2061. .byte 52,142,67,68,196,222,233,203
  2062. .byte 84,123,148,50,166,194,35,61
  2063. .byte 238,76,149,11,66,250,195,78
  2064. .byte 8,46,161,102,40,217,36,178
  2065. .byte 118,91,162,73,109,139,209,37
  2066. .byte 114,248,246,100,134,104,152,22
  2067. .byte 212,164,92,204,93,101,182,146
  2068. .byte 108,112,72,80,253,237,185,218
  2069. .byte 94,21,70,87,167,141,157,132
  2070. .byte 144,216,171,0,140,188,211,10
  2071. .byte 247,228,88,5,184,179,69,6
  2072. .byte 208,44,30,143,202,63,15,2
  2073. .byte 193,175,189,3,1,19,138,107
  2074. .byte 58,145,17,65,79,103,220,234
  2075. .byte 151,242,207,206,240,180,230,115
  2076. .byte 150,172,116,34,231,173,53,133
  2077. .byte 226,249,55,232,28,117,223,110
  2078. .byte 71,241,26,113,29,41,197,137
  2079. .byte 111,183,98,14,170,24,190,27
  2080. .byte 252,86,62,75,198,210,121,32
  2081. .byte 154,219,192,254,120,205,90,244
  2082. .byte 31,221,168,51,136,7,199,49
  2083. .byte 177,18,16,89,39,128,236,95
  2084. .byte 96,81,127,169,25,181,74,13
  2085. .byte 45,229,122,159,147,201,156,239
  2086. .byte 160,224,59,77,174,42,245,176
  2087. .byte 200,235,187,60,131,83,153,97
  2088. .byte 23,43,4,126,186,119,214,38
  2089. .byte 225,105,20,99,85,33,12,125
  2090. .byte 82,9,106,213,48,54,165,56
  2091. .byte 191,64,163,158,129,243,215,251
  2092. .byte 124,227,57,130,155,47,255,135
  2093. .byte 52,142,67,68,196,222,233,203
  2094. .byte 84,123,148,50,166,194,35,61
  2095. .byte 238,76,149,11,66,250,195,78
  2096. .byte 8,46,161,102,40,217,36,178
  2097. .byte 118,91,162,73,109,139,209,37
  2098. .byte 114,248,246,100,134,104,152,22
  2099. .byte 212,164,92,204,93,101,182,146
  2100. .byte 108,112,72,80,253,237,185,218
  2101. .byte 94,21,70,87,167,141,157,132
  2102. .byte 144,216,171,0,140,188,211,10
  2103. .byte 247,228,88,5,184,179,69,6
  2104. .byte 208,44,30,143,202,63,15,2
  2105. .byte 193,175,189,3,1,19,138,107
  2106. .byte 58,145,17,65,79,103,220,234
  2107. .byte 151,242,207,206,240,180,230,115
  2108. .byte 150,172,116,34,231,173,53,133
  2109. .byte 226,249,55,232,28,117,223,110
  2110. .byte 71,241,26,113,29,41,197,137
  2111. .byte 111,183,98,14,170,24,190,27
  2112. .byte 252,86,62,75,198,210,121,32
  2113. .byte 154,219,192,254,120,205,90,244
  2114. .byte 31,221,168,51,136,7,199,49
  2115. .byte 177,18,16,89,39,128,236,95
  2116. .byte 96,81,127,169,25,181,74,13
  2117. .byte 45,229,122,159,147,201,156,239
  2118. .byte 160,224,59,77,174,42,245,176
  2119. .byte 200,235,187,60,131,83,153,97
  2120. .byte 23,43,4,126,186,119,214,38
  2121. .byte 225,105,20,99,85,33,12,125
  2122. .byte 82,9,106,213,48,54,165,56
  2123. .byte 191,64,163,158,129,243,215,251
  2124. .byte 124,227,57,130,155,47,255,135
  2125. .byte 52,142,67,68,196,222,233,203
  2126. .byte 84,123,148,50,166,194,35,61
  2127. .byte 238,76,149,11,66,250,195,78
  2128. .byte 8,46,161,102,40,217,36,178
  2129. .byte 118,91,162,73,109,139,209,37
  2130. .byte 114,248,246,100,134,104,152,22
  2131. .byte 212,164,92,204,93,101,182,146
  2132. .byte 108,112,72,80,253,237,185,218
  2133. .byte 94,21,70,87,167,141,157,132
  2134. .byte 144,216,171,0,140,188,211,10
  2135. .byte 247,228,88,5,184,179,69,6
  2136. .byte 208,44,30,143,202,63,15,2
  2137. .byte 193,175,189,3,1,19,138,107
  2138. .byte 58,145,17,65,79,103,220,234
  2139. .byte 151,242,207,206,240,180,230,115
  2140. .byte 150,172,116,34,231,173,53,133
  2141. .byte 226,249,55,232,28,117,223,110
  2142. .byte 71,241,26,113,29,41,197,137
  2143. .byte 111,183,98,14,170,24,190,27
  2144. .byte 252,86,62,75,198,210,121,32
  2145. .byte 154,219,192,254,120,205,90,244
  2146. .byte 31,221,168,51,136,7,199,49
  2147. .byte 177,18,16,89,39,128,236,95
  2148. .byte 96,81,127,169,25,181,74,13
  2149. .byte 45,229,122,159,147,201,156,239
  2150. .byte 160,224,59,77,174,42,245,176
  2151. .byte 200,235,187,60,131,83,153,97
  2152. .byte 23,43,4,126,186,119,214,38
  2153. .byte 225,105,20,99,85,33,12,125
  2154. .size _x86_AES_decrypt,.-_x86_AES_decrypt
  2155. .globl AES_decrypt
  2156. .type AES_decrypt,@function
  2157. .align 16
  2158. AES_decrypt:
  2159. .L_AES_decrypt_begin:
  2160. pushl %ebp
  2161. pushl %ebx
  2162. pushl %esi
  2163. pushl %edi
  2164. movl 20(%esp),%esi
  2165. movl 28(%esp),%edi
  2166. movl %esp,%eax
  2167. subl $36,%esp
  2168. andl $-64,%esp
  2169. leal -127(%edi),%ebx
  2170. subl %esp,%ebx
  2171. negl %ebx
  2172. andl $960,%ebx
  2173. subl %ebx,%esp
  2174. addl $4,%esp
  2175. movl %eax,28(%esp)
  2176. call .L010pic_point
  2177. .L010pic_point:
  2178. popl %ebp
  2179. leal OPENSSL_ia32cap_P,%eax
  2180. leal .LAES_Td-.L010pic_point(%ebp),%ebp
  2181. leal 764(%esp),%ebx
  2182. subl %ebp,%ebx
  2183. andl $768,%ebx
  2184. leal 2176(%ebp,%ebx,1),%ebp
  2185. btl $25,(%eax)
  2186. jnc .L011x86
  2187. movq (%esi),%mm0
  2188. movq 8(%esi),%mm4
  2189. call _sse_AES_decrypt_compact
  2190. movl 28(%esp),%esp
  2191. movl 24(%esp),%esi
  2192. movq %mm0,(%esi)
  2193. movq %mm4,8(%esi)
  2194. emms
  2195. popl %edi
  2196. popl %esi
  2197. popl %ebx
  2198. popl %ebp
  2199. ret
  2200. .align 16
  2201. .L011x86:
  2202. movl %ebp,24(%esp)
  2203. movl (%esi),%eax
  2204. movl 4(%esi),%ebx
  2205. movl 8(%esi),%ecx
  2206. movl 12(%esi),%edx
  2207. call _x86_AES_decrypt_compact
  2208. movl 28(%esp),%esp
  2209. movl 24(%esp),%esi
  2210. movl %eax,(%esi)
  2211. movl %ebx,4(%esi)
  2212. movl %ecx,8(%esi)
  2213. movl %edx,12(%esi)
  2214. popl %edi
  2215. popl %esi
  2216. popl %ebx
  2217. popl %ebp
  2218. ret
  2219. .size AES_decrypt,.-.L_AES_decrypt_begin
  2220. .globl AES_cbc_encrypt
  2221. .type AES_cbc_encrypt,@function
  2222. .align 16
  2223. AES_cbc_encrypt:
  2224. .L_AES_cbc_encrypt_begin:
  2225. pushl %ebp
  2226. pushl %ebx
  2227. pushl %esi
  2228. pushl %edi
  2229. movl 28(%esp),%ecx
  2230. cmpl $0,%ecx
  2231. je .L012drop_out
  2232. call .L013pic_point
  2233. .L013pic_point:
  2234. popl %ebp
  2235. leal OPENSSL_ia32cap_P,%eax
  2236. cmpl $0,40(%esp)
  2237. leal .LAES_Te-.L013pic_point(%ebp),%ebp
  2238. jne .L014picked_te
  2239. leal .LAES_Td-.LAES_Te(%ebp),%ebp
  2240. .L014picked_te:
  2241. pushfl
  2242. cld
  2243. cmpl $512,%ecx
  2244. jb .L015slow_way
  2245. testl $15,%ecx
  2246. jnz .L015slow_way
  2247. btl $28,(%eax)
  2248. jc .L015slow_way
  2249. leal -324(%esp),%esi
  2250. andl $-64,%esi
  2251. movl %ebp,%eax
  2252. leal 2304(%ebp),%ebx
  2253. movl %esi,%edx
  2254. andl $4095,%eax
  2255. andl $4095,%ebx
  2256. andl $4095,%edx
  2257. cmpl %ebx,%edx
  2258. jb .L016tbl_break_out
  2259. subl %ebx,%edx
  2260. subl %edx,%esi
  2261. jmp .L017tbl_ok
  2262. .align 4
  2263. .L016tbl_break_out:
  2264. subl %eax,%edx
  2265. andl $4095,%edx
  2266. addl $384,%edx
  2267. subl %edx,%esi
  2268. .align 4
  2269. .L017tbl_ok:
  2270. leal 24(%esp),%edx
  2271. xchgl %esi,%esp
  2272. addl $4,%esp
  2273. movl %ebp,24(%esp)
  2274. movl %esi,28(%esp)
  2275. movl (%edx),%eax
  2276. movl 4(%edx),%ebx
  2277. movl 12(%edx),%edi
  2278. movl 16(%edx),%esi
  2279. movl 20(%edx),%edx
  2280. movl %eax,32(%esp)
  2281. movl %ebx,36(%esp)
  2282. movl %ecx,40(%esp)
  2283. movl %edi,44(%esp)
  2284. movl %esi,48(%esp)
  2285. movl $0,316(%esp)
  2286. movl %edi,%ebx
  2287. movl $61,%ecx
  2288. subl %ebp,%ebx
  2289. movl %edi,%esi
  2290. andl $4095,%ebx
  2291. leal 76(%esp),%edi
  2292. cmpl $2304,%ebx
  2293. jb .L018do_copy
  2294. cmpl $3852,%ebx
  2295. jb .L019skip_copy
  2296. .align 4
  2297. .L018do_copy:
  2298. movl %edi,44(%esp)
  2299. .long 2784229001
  2300. .L019skip_copy:
  2301. movl $16,%edi
  2302. .align 4
  2303. .L020prefetch_tbl:
  2304. movl (%ebp),%eax
  2305. movl 32(%ebp),%ebx
  2306. movl 64(%ebp),%ecx
  2307. movl 96(%ebp),%esi
  2308. leal 128(%ebp),%ebp
  2309. subl $1,%edi
  2310. jnz .L020prefetch_tbl
  2311. subl $2048,%ebp
  2312. movl 32(%esp),%esi
  2313. movl 48(%esp),%edi
  2314. cmpl $0,%edx
  2315. je .L021fast_decrypt
  2316. movl (%edi),%eax
  2317. movl 4(%edi),%ebx
  2318. .align 16
  2319. .L022fast_enc_loop:
  2320. movl 8(%edi),%ecx
  2321. movl 12(%edi),%edx
  2322. xorl (%esi),%eax
  2323. xorl 4(%esi),%ebx
  2324. xorl 8(%esi),%ecx
  2325. xorl 12(%esi),%edx
  2326. movl 44(%esp),%edi
  2327. call _x86_AES_encrypt
  2328. movl 32(%esp),%esi
  2329. movl 36(%esp),%edi
  2330. movl %eax,(%edi)
  2331. movl %ebx,4(%edi)
  2332. movl %ecx,8(%edi)
  2333. movl %edx,12(%edi)
  2334. leal 16(%esi),%esi
  2335. movl 40(%esp),%ecx
  2336. movl %esi,32(%esp)
  2337. leal 16(%edi),%edx
  2338. movl %edx,36(%esp)
  2339. subl $16,%ecx
  2340. movl %ecx,40(%esp)
  2341. jnz .L022fast_enc_loop
  2342. movl 48(%esp),%esi
  2343. movl 8(%edi),%ecx
  2344. movl 12(%edi),%edx
  2345. movl %eax,(%esi)
  2346. movl %ebx,4(%esi)
  2347. movl %ecx,8(%esi)
  2348. movl %edx,12(%esi)
  2349. cmpl $0,316(%esp)
  2350. movl 44(%esp),%edi
  2351. je .L023skip_ezero
  2352. movl $60,%ecx
  2353. xorl %eax,%eax
  2354. .align 4
  2355. .long 2884892297
  2356. .L023skip_ezero:
  2357. movl 28(%esp),%esp
  2358. popfl
  2359. .L012drop_out:
  2360. popl %edi
  2361. popl %esi
  2362. popl %ebx
  2363. popl %ebp
  2364. ret
  2365. pushfl
  2366. .align 16
  2367. .L021fast_decrypt:
  2368. cmpl 36(%esp),%esi
  2369. je .L024fast_dec_in_place
  2370. movl %edi,52(%esp)
  2371. .align 4
  2372. .align 16
  2373. .L025fast_dec_loop:
  2374. movl (%esi),%eax
  2375. movl 4(%esi),%ebx
  2376. movl 8(%esi),%ecx
  2377. movl 12(%esi),%edx
  2378. movl 44(%esp),%edi
  2379. call _x86_AES_decrypt
  2380. movl 52(%esp),%edi
  2381. movl 40(%esp),%esi
  2382. xorl (%edi),%eax
  2383. xorl 4(%edi),%ebx
  2384. xorl 8(%edi),%ecx
  2385. xorl 12(%edi),%edx
  2386. movl 36(%esp),%edi
  2387. movl 32(%esp),%esi
  2388. movl %eax,(%edi)
  2389. movl %ebx,4(%edi)
  2390. movl %ecx,8(%edi)
  2391. movl %edx,12(%edi)
  2392. movl 40(%esp),%ecx
  2393. movl %esi,52(%esp)
  2394. leal 16(%esi),%esi
  2395. movl %esi,32(%esp)
  2396. leal 16(%edi),%edi
  2397. movl %edi,36(%esp)
  2398. subl $16,%ecx
  2399. movl %ecx,40(%esp)
  2400. jnz .L025fast_dec_loop
  2401. movl 52(%esp),%edi
  2402. movl 48(%esp),%esi
  2403. movl (%edi),%eax
  2404. movl 4(%edi),%ebx
  2405. movl 8(%edi),%ecx
  2406. movl 12(%edi),%edx
  2407. movl %eax,(%esi)
  2408. movl %ebx,4(%esi)
  2409. movl %ecx,8(%esi)
  2410. movl %edx,12(%esi)
  2411. jmp .L026fast_dec_out
  2412. .align 16
  2413. .L024fast_dec_in_place:
  2414. .L027fast_dec_in_place_loop:
  2415. movl (%esi),%eax
  2416. movl 4(%esi),%ebx
  2417. movl 8(%esi),%ecx
  2418. movl 12(%esi),%edx
  2419. leal 60(%esp),%edi
  2420. movl %eax,(%edi)
  2421. movl %ebx,4(%edi)
  2422. movl %ecx,8(%edi)
  2423. movl %edx,12(%edi)
  2424. movl 44(%esp),%edi
  2425. call _x86_AES_decrypt
  2426. movl 48(%esp),%edi
  2427. movl 36(%esp),%esi
  2428. xorl (%edi),%eax
  2429. xorl 4(%edi),%ebx
  2430. xorl 8(%edi),%ecx
  2431. xorl 12(%edi),%edx
  2432. movl %eax,(%esi)
  2433. movl %ebx,4(%esi)
  2434. movl %ecx,8(%esi)
  2435. movl %edx,12(%esi)
  2436. leal 16(%esi),%esi
  2437. movl %esi,36(%esp)
  2438. leal 60(%esp),%esi
  2439. movl (%esi),%eax
  2440. movl 4(%esi),%ebx
  2441. movl 8(%esi),%ecx
  2442. movl 12(%esi),%edx
  2443. movl %eax,(%edi)
  2444. movl %ebx,4(%edi)
  2445. movl %ecx,8(%edi)
  2446. movl %edx,12(%edi)
  2447. movl 32(%esp),%esi
  2448. movl 40(%esp),%ecx
  2449. leal 16(%esi),%esi
  2450. movl %esi,32(%esp)
  2451. subl $16,%ecx
  2452. movl %ecx,40(%esp)
  2453. jnz .L027fast_dec_in_place_loop
  2454. .align 4
  2455. .L026fast_dec_out:
  2456. cmpl $0,316(%esp)
  2457. movl 44(%esp),%edi
  2458. je .L028skip_dzero
  2459. movl $60,%ecx
  2460. xorl %eax,%eax
  2461. .align 4
  2462. .long 2884892297
  2463. .L028skip_dzero:
  2464. movl 28(%esp),%esp
  2465. popfl
  2466. popl %edi
  2467. popl %esi
  2468. popl %ebx
  2469. popl %ebp
  2470. ret
  2471. pushfl
  2472. .align 16
  2473. .L015slow_way:
  2474. movl (%eax),%eax
  2475. movl 36(%esp),%edi
  2476. leal -80(%esp),%esi
  2477. andl $-64,%esi
  2478. leal -143(%edi),%ebx
  2479. subl %esi,%ebx
  2480. negl %ebx
  2481. andl $960,%ebx
  2482. subl %ebx,%esi
  2483. leal 768(%esi),%ebx
  2484. subl %ebp,%ebx
  2485. andl $768,%ebx
  2486. leal 2176(%ebp,%ebx,1),%ebp
  2487. leal 24(%esp),%edx
  2488. xchgl %esi,%esp
  2489. addl $4,%esp
  2490. movl %ebp,24(%esp)
  2491. movl %esi,28(%esp)
  2492. movl %eax,52(%esp)
  2493. movl (%edx),%eax
  2494. movl 4(%edx),%ebx
  2495. movl 16(%edx),%esi
  2496. movl 20(%edx),%edx
  2497. movl %eax,32(%esp)
  2498. movl %ebx,36(%esp)
  2499. movl %ecx,40(%esp)
  2500. movl %edi,44(%esp)
  2501. movl %esi,48(%esp)
  2502. movl %esi,%edi
  2503. movl %eax,%esi
  2504. cmpl $0,%edx
  2505. je .L029slow_decrypt
  2506. cmpl $16,%ecx
  2507. movl %ebx,%edx
  2508. jb .L030slow_enc_tail
  2509. btl $25,52(%esp)
  2510. jnc .L031slow_enc_x86
  2511. movq (%edi),%mm0
  2512. movq 8(%edi),%mm4
  2513. .align 16
  2514. .L032slow_enc_loop_sse:
  2515. pxor (%esi),%mm0
  2516. pxor 8(%esi),%mm4
  2517. movl 44(%esp),%edi
  2518. call _sse_AES_encrypt_compact
  2519. movl 32(%esp),%esi
  2520. movl 36(%esp),%edi
  2521. movl 40(%esp),%ecx
  2522. movq %mm0,(%edi)
  2523. movq %mm4,8(%edi)
  2524. leal 16(%esi),%esi
  2525. movl %esi,32(%esp)
  2526. leal 16(%edi),%edx
  2527. movl %edx,36(%esp)
  2528. subl $16,%ecx
  2529. cmpl $16,%ecx
  2530. movl %ecx,40(%esp)
  2531. jae .L032slow_enc_loop_sse
  2532. testl $15,%ecx
  2533. jnz .L030slow_enc_tail
  2534. movl 48(%esp),%esi
  2535. movq %mm0,(%esi)
  2536. movq %mm4,8(%esi)
  2537. emms
  2538. movl 28(%esp),%esp
  2539. popfl
  2540. popl %edi
  2541. popl %esi
  2542. popl %ebx
  2543. popl %ebp
  2544. ret
  2545. pushfl
  2546. .align 16
  2547. .L031slow_enc_x86:
  2548. movl (%edi),%eax
  2549. movl 4(%edi),%ebx
  2550. .align 4
  2551. .L033slow_enc_loop_x86:
  2552. movl 8(%edi),%ecx
  2553. movl 12(%edi),%edx
  2554. xorl (%esi),%eax
  2555. xorl 4(%esi),%ebx
  2556. xorl 8(%esi),%ecx
  2557. xorl 12(%esi),%edx
  2558. movl 44(%esp),%edi
  2559. call _x86_AES_encrypt_compact
  2560. movl 32(%esp),%esi
  2561. movl 36(%esp),%edi
  2562. movl %eax,(%edi)
  2563. movl %ebx,4(%edi)
  2564. movl %ecx,8(%edi)
  2565. movl %edx,12(%edi)
  2566. movl 40(%esp),%ecx
  2567. leal 16(%esi),%esi
  2568. movl %esi,32(%esp)
  2569. leal 16(%edi),%edx
  2570. movl %edx,36(%esp)
  2571. subl $16,%ecx
  2572. cmpl $16,%ecx
  2573. movl %ecx,40(%esp)
  2574. jae .L033slow_enc_loop_x86
  2575. testl $15,%ecx
  2576. jnz .L030slow_enc_tail
  2577. movl 48(%esp),%esi
  2578. movl 8(%edi),%ecx
  2579. movl 12(%edi),%edx
  2580. movl %eax,(%esi)
  2581. movl %ebx,4(%esi)
  2582. movl %ecx,8(%esi)
  2583. movl %edx,12(%esi)
  2584. movl 28(%esp),%esp
  2585. popfl
  2586. popl %edi
  2587. popl %esi
  2588. popl %ebx
  2589. popl %ebp
  2590. ret
  2591. pushfl
  2592. .align 16
  2593. .L030slow_enc_tail:
  2594. emms
  2595. movl %edx,%edi
  2596. movl $16,%ebx
  2597. subl %ecx,%ebx
  2598. cmpl %esi,%edi
  2599. je .L034enc_in_place
  2600. .align 4
  2601. .long 2767451785
  2602. jmp .L035enc_skip_in_place
  2603. .L034enc_in_place:
  2604. leal (%edi,%ecx,1),%edi
  2605. .L035enc_skip_in_place:
  2606. movl %ebx,%ecx
  2607. xorl %eax,%eax
  2608. .align 4
  2609. .long 2868115081
  2610. movl 48(%esp),%edi
  2611. movl %edx,%esi
  2612. movl (%edi),%eax
  2613. movl 4(%edi),%ebx
  2614. movl $16,40(%esp)
  2615. jmp .L033slow_enc_loop_x86
  2616. .align 16
  2617. .L029slow_decrypt:
  2618. btl $25,52(%esp)
  2619. jnc .L036slow_dec_loop_x86
  2620. .align 4
  2621. .L037slow_dec_loop_sse:
  2622. movq (%esi),%mm0
  2623. movq 8(%esi),%mm4
  2624. movl 44(%esp),%edi
  2625. call _sse_AES_decrypt_compact
  2626. movl 32(%esp),%esi
  2627. leal 60(%esp),%eax
  2628. movl 36(%esp),%ebx
  2629. movl 40(%esp),%ecx
  2630. movl 48(%esp),%edi
  2631. movq (%esi),%mm1
  2632. movq 8(%esi),%mm5
  2633. pxor (%edi),%mm0
  2634. pxor 8(%edi),%mm4
  2635. movq %mm1,(%edi)
  2636. movq %mm5,8(%edi)
  2637. subl $16,%ecx
  2638. jc .L038slow_dec_partial_sse
  2639. movq %mm0,(%ebx)
  2640. movq %mm4,8(%ebx)
  2641. leal 16(%ebx),%ebx
  2642. movl %ebx,36(%esp)
  2643. leal 16(%esi),%esi
  2644. movl %esi,32(%esp)
  2645. movl %ecx,40(%esp)
  2646. jnz .L037slow_dec_loop_sse
  2647. emms
  2648. movl 28(%esp),%esp
  2649. popfl
  2650. popl %edi
  2651. popl %esi
  2652. popl %ebx
  2653. popl %ebp
  2654. ret
  2655. pushfl
  2656. .align 16
  2657. .L038slow_dec_partial_sse:
  2658. movq %mm0,(%eax)
  2659. movq %mm4,8(%eax)
  2660. emms
  2661. addl $16,%ecx
  2662. movl %ebx,%edi
  2663. movl %eax,%esi
  2664. .align 4
  2665. .long 2767451785
  2666. movl 28(%esp),%esp
  2667. popfl
  2668. popl %edi
  2669. popl %esi
  2670. popl %ebx
  2671. popl %ebp
  2672. ret
  2673. pushfl
  2674. .align 16
  2675. .L036slow_dec_loop_x86:
  2676. movl (%esi),%eax
  2677. movl 4(%esi),%ebx
  2678. movl 8(%esi),%ecx
  2679. movl 12(%esi),%edx
  2680. leal 60(%esp),%edi
  2681. movl %eax,(%edi)
  2682. movl %ebx,4(%edi)
  2683. movl %ecx,8(%edi)
  2684. movl %edx,12(%edi)
  2685. movl 44(%esp),%edi
  2686. call _x86_AES_decrypt_compact
  2687. movl 48(%esp),%edi
  2688. movl 40(%esp),%esi
  2689. xorl (%edi),%eax
  2690. xorl 4(%edi),%ebx
  2691. xorl 8(%edi),%ecx
  2692. xorl 12(%edi),%edx
  2693. subl $16,%esi
  2694. jc .L039slow_dec_partial_x86
  2695. movl %esi,40(%esp)
  2696. movl 36(%esp),%esi
  2697. movl %eax,(%esi)
  2698. movl %ebx,4(%esi)
  2699. movl %ecx,8(%esi)
  2700. movl %edx,12(%esi)
  2701. leal 16(%esi),%esi
  2702. movl %esi,36(%esp)
  2703. leal 60(%esp),%esi
  2704. movl (%esi),%eax
  2705. movl 4(%esi),%ebx
  2706. movl 8(%esi),%ecx
  2707. movl 12(%esi),%edx
  2708. movl %eax,(%edi)
  2709. movl %ebx,4(%edi)
  2710. movl %ecx,8(%edi)
  2711. movl %edx,12(%edi)
  2712. movl 32(%esp),%esi
  2713. leal 16(%esi),%esi
  2714. movl %esi,32(%esp)
  2715. jnz .L036slow_dec_loop_x86
  2716. movl 28(%esp),%esp
  2717. popfl
  2718. popl %edi
  2719. popl %esi
  2720. popl %ebx
  2721. popl %ebp
  2722. ret
  2723. pushfl
  2724. .align 16
  2725. .L039slow_dec_partial_x86:
  2726. leal 60(%esp),%esi
  2727. movl %eax,(%esi)
  2728. movl %ebx,4(%esi)
  2729. movl %ecx,8(%esi)
  2730. movl %edx,12(%esi)
  2731. movl 32(%esp),%esi
  2732. movl (%esi),%eax
  2733. movl 4(%esi),%ebx
  2734. movl 8(%esi),%ecx
  2735. movl 12(%esi),%edx
  2736. movl %eax,(%edi)
  2737. movl %ebx,4(%edi)
  2738. movl %ecx,8(%edi)
  2739. movl %edx,12(%edi)
  2740. movl 40(%esp),%ecx
  2741. movl 36(%esp),%edi
  2742. leal 60(%esp),%esi
  2743. .align 4
  2744. .long 2767451785
  2745. movl 28(%esp),%esp
  2746. popfl
  2747. popl %edi
  2748. popl %esi
  2749. popl %ebx
  2750. popl %ebp
  2751. ret
  2752. .size AES_cbc_encrypt,.-.L_AES_cbc_encrypt_begin
  2753. .type _x86_AES_set_encrypt_key,@function
  2754. .align 16
  2755. _x86_AES_set_encrypt_key:
  2756. pushl %ebp
  2757. pushl %ebx
  2758. pushl %esi
  2759. pushl %edi
  2760. movl 24(%esp),%esi
  2761. movl 32(%esp),%edi
  2762. testl $-1,%esi
  2763. jz .L040badpointer
  2764. testl $-1,%edi
  2765. jz .L040badpointer
  2766. call .L041pic_point
  2767. .L041pic_point:
  2768. popl %ebp
  2769. leal .LAES_Te-.L041pic_point(%ebp),%ebp
  2770. leal 2176(%ebp),%ebp
  2771. movl -128(%ebp),%eax
  2772. movl -96(%ebp),%ebx
  2773. movl -64(%ebp),%ecx
  2774. movl -32(%ebp),%edx
  2775. movl (%ebp),%eax
  2776. movl 32(%ebp),%ebx
  2777. movl 64(%ebp),%ecx
  2778. movl 96(%ebp),%edx
  2779. movl 28(%esp),%ecx
  2780. cmpl $128,%ecx
  2781. je .L04210rounds
  2782. cmpl $192,%ecx
  2783. je .L04312rounds
  2784. cmpl $256,%ecx
  2785. je .L04414rounds
  2786. movl $-2,%eax
  2787. jmp .L045exit
  2788. .L04210rounds:
  2789. movl (%esi),%eax
  2790. movl 4(%esi),%ebx
  2791. movl 8(%esi),%ecx
  2792. movl 12(%esi),%edx
  2793. movl %eax,(%edi)
  2794. movl %ebx,4(%edi)
  2795. movl %ecx,8(%edi)
  2796. movl %edx,12(%edi)
  2797. xorl %ecx,%ecx
  2798. jmp .L04610shortcut
  2799. .align 4
  2800. .L04710loop:
  2801. movl (%edi),%eax
  2802. movl 12(%edi),%edx
  2803. .L04610shortcut:
  2804. movzbl %dl,%esi
  2805. movzbl -128(%ebp,%esi,1),%ebx
  2806. movzbl %dh,%esi
  2807. shll $24,%ebx
  2808. xorl %ebx,%eax
  2809. movzbl -128(%ebp,%esi,1),%ebx
  2810. shrl $16,%edx
  2811. movzbl %dl,%esi
  2812. xorl %ebx,%eax
  2813. movzbl -128(%ebp,%esi,1),%ebx
  2814. movzbl %dh,%esi
  2815. shll $8,%ebx
  2816. xorl %ebx,%eax
  2817. movzbl -128(%ebp,%esi,1),%ebx
  2818. shll $16,%ebx
  2819. xorl %ebx,%eax
  2820. xorl 896(%ebp,%ecx,4),%eax
  2821. movl %eax,16(%edi)
  2822. xorl 4(%edi),%eax
  2823. movl %eax,20(%edi)
  2824. xorl 8(%edi),%eax
  2825. movl %eax,24(%edi)
  2826. xorl 12(%edi),%eax
  2827. movl %eax,28(%edi)
  2828. incl %ecx
  2829. addl $16,%edi
  2830. cmpl $10,%ecx
  2831. jl .L04710loop
  2832. movl $10,80(%edi)
  2833. xorl %eax,%eax
  2834. jmp .L045exit
  2835. .L04312rounds:
  2836. movl (%esi),%eax
  2837. movl 4(%esi),%ebx
  2838. movl 8(%esi),%ecx
  2839. movl 12(%esi),%edx
  2840. movl %eax,(%edi)
  2841. movl %ebx,4(%edi)
  2842. movl %ecx,8(%edi)
  2843. movl %edx,12(%edi)
  2844. movl 16(%esi),%ecx
  2845. movl 20(%esi),%edx
  2846. movl %ecx,16(%edi)
  2847. movl %edx,20(%edi)
  2848. xorl %ecx,%ecx
  2849. jmp .L04812shortcut
  2850. .align 4
  2851. .L04912loop:
  2852. movl (%edi),%eax
  2853. movl 20(%edi),%edx
  2854. .L04812shortcut:
  2855. movzbl %dl,%esi
  2856. movzbl -128(%ebp,%esi,1),%ebx
  2857. movzbl %dh,%esi
  2858. shll $24,%ebx
  2859. xorl %ebx,%eax
  2860. movzbl -128(%ebp,%esi,1),%ebx
  2861. shrl $16,%edx
  2862. movzbl %dl,%esi
  2863. xorl %ebx,%eax
  2864. movzbl -128(%ebp,%esi,1),%ebx
  2865. movzbl %dh,%esi
  2866. shll $8,%ebx
  2867. xorl %ebx,%eax
  2868. movzbl -128(%ebp,%esi,1),%ebx
  2869. shll $16,%ebx
  2870. xorl %ebx,%eax
  2871. xorl 896(%ebp,%ecx,4),%eax
  2872. movl %eax,24(%edi)
  2873. xorl 4(%edi),%eax
  2874. movl %eax,28(%edi)
  2875. xorl 8(%edi),%eax
  2876. movl %eax,32(%edi)
  2877. xorl 12(%edi),%eax
  2878. movl %eax,36(%edi)
  2879. cmpl $7,%ecx
  2880. je .L05012break
  2881. incl %ecx
  2882. xorl 16(%edi),%eax
  2883. movl %eax,40(%edi)
  2884. xorl 20(%edi),%eax
  2885. movl %eax,44(%edi)
  2886. addl $24,%edi
  2887. jmp .L04912loop
  2888. .L05012break:
  2889. movl $12,72(%edi)
  2890. xorl %eax,%eax
  2891. jmp .L045exit
  2892. .L04414rounds:
  2893. movl (%esi),%eax
  2894. movl 4(%esi),%ebx
  2895. movl 8(%esi),%ecx
  2896. movl 12(%esi),%edx
  2897. movl %eax,(%edi)
  2898. movl %ebx,4(%edi)
  2899. movl %ecx,8(%edi)
  2900. movl %edx,12(%edi)
  2901. movl 16(%esi),%eax
  2902. movl 20(%esi),%ebx
  2903. movl 24(%esi),%ecx
  2904. movl 28(%esi),%edx
  2905. movl %eax,16(%edi)
  2906. movl %ebx,20(%edi)
  2907. movl %ecx,24(%edi)
  2908. movl %edx,28(%edi)
  2909. xorl %ecx,%ecx
  2910. jmp .L05114shortcut
  2911. .align 4
  2912. .L05214loop:
  2913. movl 28(%edi),%edx
  2914. .L05114shortcut:
  2915. movl (%edi),%eax
  2916. movzbl %dl,%esi
  2917. movzbl -128(%ebp,%esi,1),%ebx
  2918. movzbl %dh,%esi
  2919. shll $24,%ebx
  2920. xorl %ebx,%eax
  2921. movzbl -128(%ebp,%esi,1),%ebx
  2922. shrl $16,%edx
  2923. movzbl %dl,%esi
  2924. xorl %ebx,%eax
  2925. movzbl -128(%ebp,%esi,1),%ebx
  2926. movzbl %dh,%esi
  2927. shll $8,%ebx
  2928. xorl %ebx,%eax
  2929. movzbl -128(%ebp,%esi,1),%ebx
  2930. shll $16,%ebx
  2931. xorl %ebx,%eax
  2932. xorl 896(%ebp,%ecx,4),%eax
  2933. movl %eax,32(%edi)
  2934. xorl 4(%edi),%eax
  2935. movl %eax,36(%edi)
  2936. xorl 8(%edi),%eax
  2937. movl %eax,40(%edi)
  2938. xorl 12(%edi),%eax
  2939. movl %eax,44(%edi)
  2940. cmpl $6,%ecx
  2941. je .L05314break
  2942. incl %ecx
  2943. movl %eax,%edx
  2944. movl 16(%edi),%eax
  2945. movzbl %dl,%esi
  2946. movzbl -128(%ebp,%esi,1),%ebx
  2947. movzbl %dh,%esi
  2948. xorl %ebx,%eax
  2949. movzbl -128(%ebp,%esi,1),%ebx
  2950. shrl $16,%edx
  2951. shll $8,%ebx
  2952. movzbl %dl,%esi
  2953. xorl %ebx,%eax
  2954. movzbl -128(%ebp,%esi,1),%ebx
  2955. movzbl %dh,%esi
  2956. shll $16,%ebx
  2957. xorl %ebx,%eax
  2958. movzbl -128(%ebp,%esi,1),%ebx
  2959. shll $24,%ebx
  2960. xorl %ebx,%eax
  2961. movl %eax,48(%edi)
  2962. xorl 20(%edi),%eax
  2963. movl %eax,52(%edi)
  2964. xorl 24(%edi),%eax
  2965. movl %eax,56(%edi)
  2966. xorl 28(%edi),%eax
  2967. movl %eax,60(%edi)
  2968. addl $32,%edi
  2969. jmp .L05214loop
  2970. .L05314break:
  2971. movl $14,48(%edi)
  2972. xorl %eax,%eax
  2973. jmp .L045exit
  2974. .L040badpointer:
  2975. movl $-1,%eax
  2976. .L045exit:
  2977. popl %edi
  2978. popl %esi
  2979. popl %ebx
  2980. popl %ebp
  2981. ret
  2982. .size _x86_AES_set_encrypt_key,.-_x86_AES_set_encrypt_key
  2983. .globl AES_set_encrypt_key
  2984. .type AES_set_encrypt_key,@function
  2985. .align 16
  2986. AES_set_encrypt_key:
  2987. .L_AES_set_encrypt_key_begin:
  2988. call _x86_AES_set_encrypt_key
  2989. ret
  2990. .size AES_set_encrypt_key,.-.L_AES_set_encrypt_key_begin
  2991. .globl AES_set_decrypt_key
  2992. .type AES_set_decrypt_key,@function
  2993. .align 16
  2994. AES_set_decrypt_key:
  2995. .L_AES_set_decrypt_key_begin:
  2996. call _x86_AES_set_encrypt_key
  2997. cmpl $0,%eax
  2998. je .L054proceed
  2999. ret
  3000. .L054proceed:
  3001. pushl %ebp
  3002. pushl %ebx
  3003. pushl %esi
  3004. pushl %edi
  3005. movl 28(%esp),%esi
  3006. movl 240(%esi),%ecx
  3007. leal (,%ecx,4),%ecx
  3008. leal (%esi,%ecx,4),%edi
  3009. .align 4
  3010. .L055invert:
  3011. movl (%esi),%eax
  3012. movl 4(%esi),%ebx
  3013. movl (%edi),%ecx
  3014. movl 4(%edi),%edx
  3015. movl %eax,(%edi)
  3016. movl %ebx,4(%edi)
  3017. movl %ecx,(%esi)
  3018. movl %edx,4(%esi)
  3019. movl 8(%esi),%eax
  3020. movl 12(%esi),%ebx
  3021. movl 8(%edi),%ecx
  3022. movl 12(%edi),%edx
  3023. movl %eax,8(%edi)
  3024. movl %ebx,12(%edi)
  3025. movl %ecx,8(%esi)
  3026. movl %edx,12(%esi)
  3027. addl $16,%esi
  3028. subl $16,%edi
  3029. cmpl %edi,%esi
  3030. jne .L055invert
  3031. movl 28(%esp),%edi
  3032. movl 240(%edi),%esi
  3033. leal -2(%esi,%esi,1),%esi
  3034. leal (%edi,%esi,8),%esi
  3035. movl %esi,28(%esp)
  3036. movl 16(%edi),%eax
  3037. .align 4
  3038. .L056permute:
  3039. addl $16,%edi
  3040. movl $2155905152,%ebp
  3041. andl %eax,%ebp
  3042. leal (%eax,%eax,1),%ebx
  3043. movl %ebp,%esi
  3044. shrl $7,%ebp
  3045. subl %ebp,%esi
  3046. andl $4278124286,%ebx
  3047. andl $454761243,%esi
  3048. xorl %esi,%ebx
  3049. movl $2155905152,%ebp
  3050. andl %ebx,%ebp
  3051. leal (%ebx,%ebx,1),%ecx
  3052. movl %ebp,%esi
  3053. shrl $7,%ebp
  3054. subl %ebp,%esi
  3055. andl $4278124286,%ecx
  3056. andl $454761243,%esi
  3057. xorl %eax,%ebx
  3058. xorl %esi,%ecx
  3059. movl $2155905152,%ebp
  3060. andl %ecx,%ebp
  3061. leal (%ecx,%ecx,1),%edx
  3062. movl %ebp,%esi
  3063. shrl $7,%ebp
  3064. xorl %eax,%ecx
  3065. subl %ebp,%esi
  3066. andl $4278124286,%edx
  3067. andl $454761243,%esi
  3068. roll $8,%eax
  3069. xorl %esi,%edx
  3070. movl 4(%edi),%ebp
  3071. xorl %ebx,%eax
  3072. xorl %edx,%ebx
  3073. xorl %ecx,%eax
  3074. roll $24,%ebx
  3075. xorl %edx,%ecx
  3076. xorl %edx,%eax
  3077. roll $16,%ecx
  3078. xorl %ebx,%eax
  3079. roll $8,%edx
  3080. xorl %ecx,%eax
  3081. movl %ebp,%ebx
  3082. xorl %edx,%eax
  3083. movl %eax,(%edi)
  3084. movl $2155905152,%ebp
  3085. andl %ebx,%ebp
  3086. leal (%ebx,%ebx,1),%ecx
  3087. movl %ebp,%esi
  3088. shrl $7,%ebp
  3089. subl %ebp,%esi
  3090. andl $4278124286,%ecx
  3091. andl $454761243,%esi
  3092. xorl %esi,%ecx
  3093. movl $2155905152,%ebp
  3094. andl %ecx,%ebp
  3095. leal (%ecx,%ecx,1),%edx
  3096. movl %ebp,%esi
  3097. shrl $7,%ebp
  3098. subl %ebp,%esi
  3099. andl $4278124286,%edx
  3100. andl $454761243,%esi
  3101. xorl %ebx,%ecx
  3102. xorl %esi,%edx
  3103. movl $2155905152,%ebp
  3104. andl %edx,%ebp
  3105. leal (%edx,%edx,1),%eax
  3106. movl %ebp,%esi
  3107. shrl $7,%ebp
  3108. xorl %ebx,%edx
  3109. subl %ebp,%esi
  3110. andl $4278124286,%eax
  3111. andl $454761243,%esi
  3112. roll $8,%ebx
  3113. xorl %esi,%eax
  3114. movl 8(%edi),%ebp
  3115. xorl %ecx,%ebx
  3116. xorl %eax,%ecx
  3117. xorl %edx,%ebx
  3118. roll $24,%ecx
  3119. xorl %eax,%edx
  3120. xorl %eax,%ebx
  3121. roll $16,%edx
  3122. xorl %ecx,%ebx
  3123. roll $8,%eax
  3124. xorl %edx,%ebx
  3125. movl %ebp,%ecx
  3126. xorl %eax,%ebx
  3127. movl %ebx,4(%edi)
  3128. movl $2155905152,%ebp
  3129. andl %ecx,%ebp
  3130. leal (%ecx,%ecx,1),%edx
  3131. movl %ebp,%esi
  3132. shrl $7,%ebp
  3133. subl %ebp,%esi
  3134. andl $4278124286,%edx
  3135. andl $454761243,%esi
  3136. xorl %esi,%edx
  3137. movl $2155905152,%ebp
  3138. andl %edx,%ebp
  3139. leal (%edx,%edx,1),%eax
  3140. movl %ebp,%esi
  3141. shrl $7,%ebp
  3142. subl %ebp,%esi
  3143. andl $4278124286,%eax
  3144. andl $454761243,%esi
  3145. xorl %ecx,%edx
  3146. xorl %esi,%eax
  3147. movl $2155905152,%ebp
  3148. andl %eax,%ebp
  3149. leal (%eax,%eax,1),%ebx
  3150. movl %ebp,%esi
  3151. shrl $7,%ebp
  3152. xorl %ecx,%eax
  3153. subl %ebp,%esi
  3154. andl $4278124286,%ebx
  3155. andl $454761243,%esi
  3156. roll $8,%ecx
  3157. xorl %esi,%ebx
  3158. movl 12(%edi),%ebp
  3159. xorl %edx,%ecx
  3160. xorl %ebx,%edx
  3161. xorl %eax,%ecx
  3162. roll $24,%edx
  3163. xorl %ebx,%eax
  3164. xorl %ebx,%ecx
  3165. roll $16,%eax
  3166. xorl %edx,%ecx
  3167. roll $8,%ebx
  3168. xorl %eax,%ecx
  3169. movl %ebp,%edx
  3170. xorl %ebx,%ecx
  3171. movl %ecx,8(%edi)
  3172. movl $2155905152,%ebp
  3173. andl %edx,%ebp
  3174. leal (%edx,%edx,1),%eax
  3175. movl %ebp,%esi
  3176. shrl $7,%ebp
  3177. subl %ebp,%esi
  3178. andl $4278124286,%eax
  3179. andl $454761243,%esi
  3180. xorl %esi,%eax
  3181. movl $2155905152,%ebp
  3182. andl %eax,%ebp
  3183. leal (%eax,%eax,1),%ebx
  3184. movl %ebp,%esi
  3185. shrl $7,%ebp
  3186. subl %ebp,%esi
  3187. andl $4278124286,%ebx
  3188. andl $454761243,%esi
  3189. xorl %edx,%eax
  3190. xorl %esi,%ebx
  3191. movl $2155905152,%ebp
  3192. andl %ebx,%ebp
  3193. leal (%ebx,%ebx,1),%ecx
  3194. movl %ebp,%esi
  3195. shrl $7,%ebp
  3196. xorl %edx,%ebx
  3197. subl %ebp,%esi
  3198. andl $4278124286,%ecx
  3199. andl $454761243,%esi
  3200. roll $8,%edx
  3201. xorl %esi,%ecx
  3202. movl 16(%edi),%ebp
  3203. xorl %eax,%edx
  3204. xorl %ecx,%eax
  3205. xorl %ebx,%edx
  3206. roll $24,%eax
  3207. xorl %ecx,%ebx
  3208. xorl %ecx,%edx
  3209. roll $16,%ebx
  3210. xorl %eax,%edx
  3211. roll $8,%ecx
  3212. xorl %ebx,%edx
  3213. movl %ebp,%eax
  3214. xorl %ecx,%edx
  3215. movl %edx,12(%edi)
  3216. cmpl 28(%esp),%edi
  3217. jb .L056permute
  3218. xorl %eax,%eax
  3219. popl %edi
  3220. popl %esi
  3221. popl %ebx
  3222. popl %ebp
  3223. ret
  3224. .size AES_set_decrypt_key,.-.L_AES_set_decrypt_key_begin
  3225. .byte 65,69,83,32,102,111,114,32,120,56,54,44,32,67,82,89
  3226. .byte 80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114
  3227. .byte 111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
  3228. .comm OPENSSL_ia32cap_P,16,4