p256-x86_64-asm.S 67 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467
  1. // This file is generated from a similarly-named Perl script in the BoringSSL
  2. // source tree. Do not edit by hand.
  3. #if defined(__has_feature)
  4. #if __has_feature(memory_sanitizer) && !defined(OPENSSL_NO_ASM)
  5. #define OPENSSL_NO_ASM
  6. #endif
  7. #endif
  8. #if defined(__x86_64__) && !defined(OPENSSL_NO_ASM)
  9. #if defined(BORINGSSL_PREFIX)
  10. #include <boringssl_prefix_symbols_asm.h>
  11. #endif
  12. .text
  13. .p2align 6
  14. L$poly:
  15. .quad 0xffffffffffffffff, 0x00000000ffffffff, 0x0000000000000000, 0xffffffff00000001
  16. L$One:
  17. .long 1,1,1,1,1,1,1,1
  18. L$Two:
  19. .long 2,2,2,2,2,2,2,2
  20. L$Three:
  21. .long 3,3,3,3,3,3,3,3
  22. L$ONE_mont:
  23. .quad 0x0000000000000001, 0xffffffff00000000, 0xffffffffffffffff, 0x00000000fffffffe
  24. L$ord:
  25. .quad 0xf3b9cac2fc632551, 0xbce6faada7179e84, 0xffffffffffffffff, 0xffffffff00000000
  26. L$ordK:
  27. .quad 0xccd1c8aaee00bc4f
  28. .globl _ecp_nistz256_neg
  29. .private_extern _ecp_nistz256_neg
  30. .p2align 5
  31. _ecp_nistz256_neg:
  32. pushq %r12
  33. pushq %r13
  34. L$neg_body:
  35. xorq %r8,%r8
  36. xorq %r9,%r9
  37. xorq %r10,%r10
  38. xorq %r11,%r11
  39. xorq %r13,%r13
  40. subq 0(%rsi),%r8
  41. sbbq 8(%rsi),%r9
  42. sbbq 16(%rsi),%r10
  43. movq %r8,%rax
  44. sbbq 24(%rsi),%r11
  45. leaq L$poly(%rip),%rsi
  46. movq %r9,%rdx
  47. sbbq $0,%r13
  48. addq 0(%rsi),%r8
  49. movq %r10,%rcx
  50. adcq 8(%rsi),%r9
  51. adcq 16(%rsi),%r10
  52. movq %r11,%r12
  53. adcq 24(%rsi),%r11
  54. testq %r13,%r13
  55. cmovzq %rax,%r8
  56. cmovzq %rdx,%r9
  57. movq %r8,0(%rdi)
  58. cmovzq %rcx,%r10
  59. movq %r9,8(%rdi)
  60. cmovzq %r12,%r11
  61. movq %r10,16(%rdi)
  62. movq %r11,24(%rdi)
  63. movq 0(%rsp),%r13
  64. movq 8(%rsp),%r12
  65. leaq 16(%rsp),%rsp
  66. L$neg_epilogue:
  67. .byte 0xf3,0xc3
  68. .globl _ecp_nistz256_ord_mul_mont
  69. .private_extern _ecp_nistz256_ord_mul_mont
  70. .p2align 5
  71. _ecp_nistz256_ord_mul_mont:
  72. leaq _OPENSSL_ia32cap_P(%rip),%rcx
  73. movq 8(%rcx),%rcx
  74. andl $0x80100,%ecx
  75. cmpl $0x80100,%ecx
  76. je L$ecp_nistz256_ord_mul_montx
  77. pushq %rbp
  78. pushq %rbx
  79. pushq %r12
  80. pushq %r13
  81. pushq %r14
  82. pushq %r15
  83. L$ord_mul_body:
  84. movq 0(%rdx),%rax
  85. movq %rdx,%rbx
  86. leaq L$ord(%rip),%r14
  87. movq L$ordK(%rip),%r15
  88. movq %rax,%rcx
  89. mulq 0(%rsi)
  90. movq %rax,%r8
  91. movq %rcx,%rax
  92. movq %rdx,%r9
  93. mulq 8(%rsi)
  94. addq %rax,%r9
  95. movq %rcx,%rax
  96. adcq $0,%rdx
  97. movq %rdx,%r10
  98. mulq 16(%rsi)
  99. addq %rax,%r10
  100. movq %rcx,%rax
  101. adcq $0,%rdx
  102. movq %r8,%r13
  103. imulq %r15,%r8
  104. movq %rdx,%r11
  105. mulq 24(%rsi)
  106. addq %rax,%r11
  107. movq %r8,%rax
  108. adcq $0,%rdx
  109. movq %rdx,%r12
  110. mulq 0(%r14)
  111. movq %r8,%rbp
  112. addq %rax,%r13
  113. movq %r8,%rax
  114. adcq $0,%rdx
  115. movq %rdx,%rcx
  116. subq %r8,%r10
  117. sbbq $0,%r8
  118. mulq 8(%r14)
  119. addq %rcx,%r9
  120. adcq $0,%rdx
  121. addq %rax,%r9
  122. movq %rbp,%rax
  123. adcq %rdx,%r10
  124. movq %rbp,%rdx
  125. adcq $0,%r8
  126. shlq $32,%rax
  127. shrq $32,%rdx
  128. subq %rax,%r11
  129. movq 8(%rbx),%rax
  130. sbbq %rdx,%rbp
  131. addq %r8,%r11
  132. adcq %rbp,%r12
  133. adcq $0,%r13
  134. movq %rax,%rcx
  135. mulq 0(%rsi)
  136. addq %rax,%r9
  137. movq %rcx,%rax
  138. adcq $0,%rdx
  139. movq %rdx,%rbp
  140. mulq 8(%rsi)
  141. addq %rbp,%r10
  142. adcq $0,%rdx
  143. addq %rax,%r10
  144. movq %rcx,%rax
  145. adcq $0,%rdx
  146. movq %rdx,%rbp
  147. mulq 16(%rsi)
  148. addq %rbp,%r11
  149. adcq $0,%rdx
  150. addq %rax,%r11
  151. movq %rcx,%rax
  152. adcq $0,%rdx
  153. movq %r9,%rcx
  154. imulq %r15,%r9
  155. movq %rdx,%rbp
  156. mulq 24(%rsi)
  157. addq %rbp,%r12
  158. adcq $0,%rdx
  159. xorq %r8,%r8
  160. addq %rax,%r12
  161. movq %r9,%rax
  162. adcq %rdx,%r13
  163. adcq $0,%r8
  164. mulq 0(%r14)
  165. movq %r9,%rbp
  166. addq %rax,%rcx
  167. movq %r9,%rax
  168. adcq %rdx,%rcx
  169. subq %r9,%r11
  170. sbbq $0,%r9
  171. mulq 8(%r14)
  172. addq %rcx,%r10
  173. adcq $0,%rdx
  174. addq %rax,%r10
  175. movq %rbp,%rax
  176. adcq %rdx,%r11
  177. movq %rbp,%rdx
  178. adcq $0,%r9
  179. shlq $32,%rax
  180. shrq $32,%rdx
  181. subq %rax,%r12
  182. movq 16(%rbx),%rax
  183. sbbq %rdx,%rbp
  184. addq %r9,%r12
  185. adcq %rbp,%r13
  186. adcq $0,%r8
  187. movq %rax,%rcx
  188. mulq 0(%rsi)
  189. addq %rax,%r10
  190. movq %rcx,%rax
  191. adcq $0,%rdx
  192. movq %rdx,%rbp
  193. mulq 8(%rsi)
  194. addq %rbp,%r11
  195. adcq $0,%rdx
  196. addq %rax,%r11
  197. movq %rcx,%rax
  198. adcq $0,%rdx
  199. movq %rdx,%rbp
  200. mulq 16(%rsi)
  201. addq %rbp,%r12
  202. adcq $0,%rdx
  203. addq %rax,%r12
  204. movq %rcx,%rax
  205. adcq $0,%rdx
  206. movq %r10,%rcx
  207. imulq %r15,%r10
  208. movq %rdx,%rbp
  209. mulq 24(%rsi)
  210. addq %rbp,%r13
  211. adcq $0,%rdx
  212. xorq %r9,%r9
  213. addq %rax,%r13
  214. movq %r10,%rax
  215. adcq %rdx,%r8
  216. adcq $0,%r9
  217. mulq 0(%r14)
  218. movq %r10,%rbp
  219. addq %rax,%rcx
  220. movq %r10,%rax
  221. adcq %rdx,%rcx
  222. subq %r10,%r12
  223. sbbq $0,%r10
  224. mulq 8(%r14)
  225. addq %rcx,%r11
  226. adcq $0,%rdx
  227. addq %rax,%r11
  228. movq %rbp,%rax
  229. adcq %rdx,%r12
  230. movq %rbp,%rdx
  231. adcq $0,%r10
  232. shlq $32,%rax
  233. shrq $32,%rdx
  234. subq %rax,%r13
  235. movq 24(%rbx),%rax
  236. sbbq %rdx,%rbp
  237. addq %r10,%r13
  238. adcq %rbp,%r8
  239. adcq $0,%r9
  240. movq %rax,%rcx
  241. mulq 0(%rsi)
  242. addq %rax,%r11
  243. movq %rcx,%rax
  244. adcq $0,%rdx
  245. movq %rdx,%rbp
  246. mulq 8(%rsi)
  247. addq %rbp,%r12
  248. adcq $0,%rdx
  249. addq %rax,%r12
  250. movq %rcx,%rax
  251. adcq $0,%rdx
  252. movq %rdx,%rbp
  253. mulq 16(%rsi)
  254. addq %rbp,%r13
  255. adcq $0,%rdx
  256. addq %rax,%r13
  257. movq %rcx,%rax
  258. adcq $0,%rdx
  259. movq %r11,%rcx
  260. imulq %r15,%r11
  261. movq %rdx,%rbp
  262. mulq 24(%rsi)
  263. addq %rbp,%r8
  264. adcq $0,%rdx
  265. xorq %r10,%r10
  266. addq %rax,%r8
  267. movq %r11,%rax
  268. adcq %rdx,%r9
  269. adcq $0,%r10
  270. mulq 0(%r14)
  271. movq %r11,%rbp
  272. addq %rax,%rcx
  273. movq %r11,%rax
  274. adcq %rdx,%rcx
  275. subq %r11,%r13
  276. sbbq $0,%r11
  277. mulq 8(%r14)
  278. addq %rcx,%r12
  279. adcq $0,%rdx
  280. addq %rax,%r12
  281. movq %rbp,%rax
  282. adcq %rdx,%r13
  283. movq %rbp,%rdx
  284. adcq $0,%r11
  285. shlq $32,%rax
  286. shrq $32,%rdx
  287. subq %rax,%r8
  288. sbbq %rdx,%rbp
  289. addq %r11,%r8
  290. adcq %rbp,%r9
  291. adcq $0,%r10
  292. movq %r12,%rsi
  293. subq 0(%r14),%r12
  294. movq %r13,%r11
  295. sbbq 8(%r14),%r13
  296. movq %r8,%rcx
  297. sbbq 16(%r14),%r8
  298. movq %r9,%rbp
  299. sbbq 24(%r14),%r9
  300. sbbq $0,%r10
  301. cmovcq %rsi,%r12
  302. cmovcq %r11,%r13
  303. cmovcq %rcx,%r8
  304. cmovcq %rbp,%r9
  305. movq %r12,0(%rdi)
  306. movq %r13,8(%rdi)
  307. movq %r8,16(%rdi)
  308. movq %r9,24(%rdi)
  309. movq 0(%rsp),%r15
  310. movq 8(%rsp),%r14
  311. movq 16(%rsp),%r13
  312. movq 24(%rsp),%r12
  313. movq 32(%rsp),%rbx
  314. movq 40(%rsp),%rbp
  315. leaq 48(%rsp),%rsp
  316. L$ord_mul_epilogue:
  317. .byte 0xf3,0xc3
  318. .globl _ecp_nistz256_ord_sqr_mont
  319. .private_extern _ecp_nistz256_ord_sqr_mont
  320. .p2align 5
  321. _ecp_nistz256_ord_sqr_mont:
  322. leaq _OPENSSL_ia32cap_P(%rip),%rcx
  323. movq 8(%rcx),%rcx
  324. andl $0x80100,%ecx
  325. cmpl $0x80100,%ecx
  326. je L$ecp_nistz256_ord_sqr_montx
  327. pushq %rbp
  328. pushq %rbx
  329. pushq %r12
  330. pushq %r13
  331. pushq %r14
  332. pushq %r15
  333. L$ord_sqr_body:
  334. movq 0(%rsi),%r8
  335. movq 8(%rsi),%rax
  336. movq 16(%rsi),%r14
  337. movq 24(%rsi),%r15
  338. leaq L$ord(%rip),%rsi
  339. movq %rdx,%rbx
  340. jmp L$oop_ord_sqr
  341. .p2align 5
  342. L$oop_ord_sqr:
  343. movq %rax,%rbp
  344. mulq %r8
  345. movq %rax,%r9
  346. .byte 102,72,15,110,205
  347. movq %r14,%rax
  348. movq %rdx,%r10
  349. mulq %r8
  350. addq %rax,%r10
  351. movq %r15,%rax
  352. .byte 102,73,15,110,214
  353. adcq $0,%rdx
  354. movq %rdx,%r11
  355. mulq %r8
  356. addq %rax,%r11
  357. movq %r15,%rax
  358. .byte 102,73,15,110,223
  359. adcq $0,%rdx
  360. movq %rdx,%r12
  361. mulq %r14
  362. movq %rax,%r13
  363. movq %r14,%rax
  364. movq %rdx,%r14
  365. mulq %rbp
  366. addq %rax,%r11
  367. movq %r15,%rax
  368. adcq $0,%rdx
  369. movq %rdx,%r15
  370. mulq %rbp
  371. addq %rax,%r12
  372. adcq $0,%rdx
  373. addq %r15,%r12
  374. adcq %rdx,%r13
  375. adcq $0,%r14
  376. xorq %r15,%r15
  377. movq %r8,%rax
  378. addq %r9,%r9
  379. adcq %r10,%r10
  380. adcq %r11,%r11
  381. adcq %r12,%r12
  382. adcq %r13,%r13
  383. adcq %r14,%r14
  384. adcq $0,%r15
  385. mulq %rax
  386. movq %rax,%r8
  387. .byte 102,72,15,126,200
  388. movq %rdx,%rbp
  389. mulq %rax
  390. addq %rbp,%r9
  391. adcq %rax,%r10
  392. .byte 102,72,15,126,208
  393. adcq $0,%rdx
  394. movq %rdx,%rbp
  395. mulq %rax
  396. addq %rbp,%r11
  397. adcq %rax,%r12
  398. .byte 102,72,15,126,216
  399. adcq $0,%rdx
  400. movq %rdx,%rbp
  401. movq %r8,%rcx
  402. imulq 32(%rsi),%r8
  403. mulq %rax
  404. addq %rbp,%r13
  405. adcq %rax,%r14
  406. movq 0(%rsi),%rax
  407. adcq %rdx,%r15
  408. mulq %r8
  409. movq %r8,%rbp
  410. addq %rax,%rcx
  411. movq 8(%rsi),%rax
  412. adcq %rdx,%rcx
  413. subq %r8,%r10
  414. sbbq $0,%rbp
  415. mulq %r8
  416. addq %rcx,%r9
  417. adcq $0,%rdx
  418. addq %rax,%r9
  419. movq %r8,%rax
  420. adcq %rdx,%r10
  421. movq %r8,%rdx
  422. adcq $0,%rbp
  423. movq %r9,%rcx
  424. imulq 32(%rsi),%r9
  425. shlq $32,%rax
  426. shrq $32,%rdx
  427. subq %rax,%r11
  428. movq 0(%rsi),%rax
  429. sbbq %rdx,%r8
  430. addq %rbp,%r11
  431. adcq $0,%r8
  432. mulq %r9
  433. movq %r9,%rbp
  434. addq %rax,%rcx
  435. movq 8(%rsi),%rax
  436. adcq %rdx,%rcx
  437. subq %r9,%r11
  438. sbbq $0,%rbp
  439. mulq %r9
  440. addq %rcx,%r10
  441. adcq $0,%rdx
  442. addq %rax,%r10
  443. movq %r9,%rax
  444. adcq %rdx,%r11
  445. movq %r9,%rdx
  446. adcq $0,%rbp
  447. movq %r10,%rcx
  448. imulq 32(%rsi),%r10
  449. shlq $32,%rax
  450. shrq $32,%rdx
  451. subq %rax,%r8
  452. movq 0(%rsi),%rax
  453. sbbq %rdx,%r9
  454. addq %rbp,%r8
  455. adcq $0,%r9
  456. mulq %r10
  457. movq %r10,%rbp
  458. addq %rax,%rcx
  459. movq 8(%rsi),%rax
  460. adcq %rdx,%rcx
  461. subq %r10,%r8
  462. sbbq $0,%rbp
  463. mulq %r10
  464. addq %rcx,%r11
  465. adcq $0,%rdx
  466. addq %rax,%r11
  467. movq %r10,%rax
  468. adcq %rdx,%r8
  469. movq %r10,%rdx
  470. adcq $0,%rbp
  471. movq %r11,%rcx
  472. imulq 32(%rsi),%r11
  473. shlq $32,%rax
  474. shrq $32,%rdx
  475. subq %rax,%r9
  476. movq 0(%rsi),%rax
  477. sbbq %rdx,%r10
  478. addq %rbp,%r9
  479. adcq $0,%r10
  480. mulq %r11
  481. movq %r11,%rbp
  482. addq %rax,%rcx
  483. movq 8(%rsi),%rax
  484. adcq %rdx,%rcx
  485. subq %r11,%r9
  486. sbbq $0,%rbp
  487. mulq %r11
  488. addq %rcx,%r8
  489. adcq $0,%rdx
  490. addq %rax,%r8
  491. movq %r11,%rax
  492. adcq %rdx,%r9
  493. movq %r11,%rdx
  494. adcq $0,%rbp
  495. shlq $32,%rax
  496. shrq $32,%rdx
  497. subq %rax,%r10
  498. sbbq %rdx,%r11
  499. addq %rbp,%r10
  500. adcq $0,%r11
  501. xorq %rdx,%rdx
  502. addq %r12,%r8
  503. adcq %r13,%r9
  504. movq %r8,%r12
  505. adcq %r14,%r10
  506. adcq %r15,%r11
  507. movq %r9,%rax
  508. adcq $0,%rdx
  509. subq 0(%rsi),%r8
  510. movq %r10,%r14
  511. sbbq 8(%rsi),%r9
  512. sbbq 16(%rsi),%r10
  513. movq %r11,%r15
  514. sbbq 24(%rsi),%r11
  515. sbbq $0,%rdx
  516. cmovcq %r12,%r8
  517. cmovncq %r9,%rax
  518. cmovncq %r10,%r14
  519. cmovncq %r11,%r15
  520. decq %rbx
  521. jnz L$oop_ord_sqr
  522. movq %r8,0(%rdi)
  523. movq %rax,8(%rdi)
  524. pxor %xmm1,%xmm1
  525. movq %r14,16(%rdi)
  526. pxor %xmm2,%xmm2
  527. movq %r15,24(%rdi)
  528. pxor %xmm3,%xmm3
  529. movq 0(%rsp),%r15
  530. movq 8(%rsp),%r14
  531. movq 16(%rsp),%r13
  532. movq 24(%rsp),%r12
  533. movq 32(%rsp),%rbx
  534. movq 40(%rsp),%rbp
  535. leaq 48(%rsp),%rsp
  536. L$ord_sqr_epilogue:
  537. .byte 0xf3,0xc3
  538. .p2align 5
  539. ecp_nistz256_ord_mul_montx:
  540. L$ecp_nistz256_ord_mul_montx:
  541. pushq %rbp
  542. pushq %rbx
  543. pushq %r12
  544. pushq %r13
  545. pushq %r14
  546. pushq %r15
  547. L$ord_mulx_body:
  548. movq %rdx,%rbx
  549. movq 0(%rdx),%rdx
  550. movq 0(%rsi),%r9
  551. movq 8(%rsi),%r10
  552. movq 16(%rsi),%r11
  553. movq 24(%rsi),%r12
  554. leaq -128(%rsi),%rsi
  555. leaq L$ord-128(%rip),%r14
  556. movq L$ordK(%rip),%r15
  557. mulxq %r9,%r8,%r9
  558. mulxq %r10,%rcx,%r10
  559. mulxq %r11,%rbp,%r11
  560. addq %rcx,%r9
  561. mulxq %r12,%rcx,%r12
  562. movq %r8,%rdx
  563. mulxq %r15,%rdx,%rax
  564. adcq %rbp,%r10
  565. adcq %rcx,%r11
  566. adcq $0,%r12
  567. xorq %r13,%r13
  568. mulxq 0+128(%r14),%rcx,%rbp
  569. adcxq %rcx,%r8
  570. adoxq %rbp,%r9
  571. mulxq 8+128(%r14),%rcx,%rbp
  572. adcxq %rcx,%r9
  573. adoxq %rbp,%r10
  574. mulxq 16+128(%r14),%rcx,%rbp
  575. adcxq %rcx,%r10
  576. adoxq %rbp,%r11
  577. mulxq 24+128(%r14),%rcx,%rbp
  578. movq 8(%rbx),%rdx
  579. adcxq %rcx,%r11
  580. adoxq %rbp,%r12
  581. adcxq %r8,%r12
  582. adoxq %r8,%r13
  583. adcq $0,%r13
  584. mulxq 0+128(%rsi),%rcx,%rbp
  585. adcxq %rcx,%r9
  586. adoxq %rbp,%r10
  587. mulxq 8+128(%rsi),%rcx,%rbp
  588. adcxq %rcx,%r10
  589. adoxq %rbp,%r11
  590. mulxq 16+128(%rsi),%rcx,%rbp
  591. adcxq %rcx,%r11
  592. adoxq %rbp,%r12
  593. mulxq 24+128(%rsi),%rcx,%rbp
  594. movq %r9,%rdx
  595. mulxq %r15,%rdx,%rax
  596. adcxq %rcx,%r12
  597. adoxq %rbp,%r13
  598. adcxq %r8,%r13
  599. adoxq %r8,%r8
  600. adcq $0,%r8
  601. mulxq 0+128(%r14),%rcx,%rbp
  602. adcxq %rcx,%r9
  603. adoxq %rbp,%r10
  604. mulxq 8+128(%r14),%rcx,%rbp
  605. adcxq %rcx,%r10
  606. adoxq %rbp,%r11
  607. mulxq 16+128(%r14),%rcx,%rbp
  608. adcxq %rcx,%r11
  609. adoxq %rbp,%r12
  610. mulxq 24+128(%r14),%rcx,%rbp
  611. movq 16(%rbx),%rdx
  612. adcxq %rcx,%r12
  613. adoxq %rbp,%r13
  614. adcxq %r9,%r13
  615. adoxq %r9,%r8
  616. adcq $0,%r8
  617. mulxq 0+128(%rsi),%rcx,%rbp
  618. adcxq %rcx,%r10
  619. adoxq %rbp,%r11
  620. mulxq 8+128(%rsi),%rcx,%rbp
  621. adcxq %rcx,%r11
  622. adoxq %rbp,%r12
  623. mulxq 16+128(%rsi),%rcx,%rbp
  624. adcxq %rcx,%r12
  625. adoxq %rbp,%r13
  626. mulxq 24+128(%rsi),%rcx,%rbp
  627. movq %r10,%rdx
  628. mulxq %r15,%rdx,%rax
  629. adcxq %rcx,%r13
  630. adoxq %rbp,%r8
  631. adcxq %r9,%r8
  632. adoxq %r9,%r9
  633. adcq $0,%r9
  634. mulxq 0+128(%r14),%rcx,%rbp
  635. adcxq %rcx,%r10
  636. adoxq %rbp,%r11
  637. mulxq 8+128(%r14),%rcx,%rbp
  638. adcxq %rcx,%r11
  639. adoxq %rbp,%r12
  640. mulxq 16+128(%r14),%rcx,%rbp
  641. adcxq %rcx,%r12
  642. adoxq %rbp,%r13
  643. mulxq 24+128(%r14),%rcx,%rbp
  644. movq 24(%rbx),%rdx
  645. adcxq %rcx,%r13
  646. adoxq %rbp,%r8
  647. adcxq %r10,%r8
  648. adoxq %r10,%r9
  649. adcq $0,%r9
  650. mulxq 0+128(%rsi),%rcx,%rbp
  651. adcxq %rcx,%r11
  652. adoxq %rbp,%r12
  653. mulxq 8+128(%rsi),%rcx,%rbp
  654. adcxq %rcx,%r12
  655. adoxq %rbp,%r13
  656. mulxq 16+128(%rsi),%rcx,%rbp
  657. adcxq %rcx,%r13
  658. adoxq %rbp,%r8
  659. mulxq 24+128(%rsi),%rcx,%rbp
  660. movq %r11,%rdx
  661. mulxq %r15,%rdx,%rax
  662. adcxq %rcx,%r8
  663. adoxq %rbp,%r9
  664. adcxq %r10,%r9
  665. adoxq %r10,%r10
  666. adcq $0,%r10
  667. mulxq 0+128(%r14),%rcx,%rbp
  668. adcxq %rcx,%r11
  669. adoxq %rbp,%r12
  670. mulxq 8+128(%r14),%rcx,%rbp
  671. adcxq %rcx,%r12
  672. adoxq %rbp,%r13
  673. mulxq 16+128(%r14),%rcx,%rbp
  674. adcxq %rcx,%r13
  675. adoxq %rbp,%r8
  676. mulxq 24+128(%r14),%rcx,%rbp
  677. leaq 128(%r14),%r14
  678. movq %r12,%rbx
  679. adcxq %rcx,%r8
  680. adoxq %rbp,%r9
  681. movq %r13,%rdx
  682. adcxq %r11,%r9
  683. adoxq %r11,%r10
  684. adcq $0,%r10
  685. movq %r8,%rcx
  686. subq 0(%r14),%r12
  687. sbbq 8(%r14),%r13
  688. sbbq 16(%r14),%r8
  689. movq %r9,%rbp
  690. sbbq 24(%r14),%r9
  691. sbbq $0,%r10
  692. cmovcq %rbx,%r12
  693. cmovcq %rdx,%r13
  694. cmovcq %rcx,%r8
  695. cmovcq %rbp,%r9
  696. movq %r12,0(%rdi)
  697. movq %r13,8(%rdi)
  698. movq %r8,16(%rdi)
  699. movq %r9,24(%rdi)
  700. movq 0(%rsp),%r15
  701. movq 8(%rsp),%r14
  702. movq 16(%rsp),%r13
  703. movq 24(%rsp),%r12
  704. movq 32(%rsp),%rbx
  705. movq 40(%rsp),%rbp
  706. leaq 48(%rsp),%rsp
  707. L$ord_mulx_epilogue:
  708. .byte 0xf3,0xc3
  709. .p2align 5
  710. ecp_nistz256_ord_sqr_montx:
  711. L$ecp_nistz256_ord_sqr_montx:
  712. pushq %rbp
  713. pushq %rbx
  714. pushq %r12
  715. pushq %r13
  716. pushq %r14
  717. pushq %r15
  718. L$ord_sqrx_body:
  719. movq %rdx,%rbx
  720. movq 0(%rsi),%rdx
  721. movq 8(%rsi),%r14
  722. movq 16(%rsi),%r15
  723. movq 24(%rsi),%r8
  724. leaq L$ord(%rip),%rsi
  725. jmp L$oop_ord_sqrx
  726. .p2align 5
  727. L$oop_ord_sqrx:
  728. mulxq %r14,%r9,%r10
  729. mulxq %r15,%rcx,%r11
  730. movq %rdx,%rax
  731. .byte 102,73,15,110,206
  732. mulxq %r8,%rbp,%r12
  733. movq %r14,%rdx
  734. addq %rcx,%r10
  735. .byte 102,73,15,110,215
  736. adcq %rbp,%r11
  737. adcq $0,%r12
  738. xorq %r13,%r13
  739. mulxq %r15,%rcx,%rbp
  740. adcxq %rcx,%r11
  741. adoxq %rbp,%r12
  742. mulxq %r8,%rcx,%rbp
  743. movq %r15,%rdx
  744. adcxq %rcx,%r12
  745. adoxq %rbp,%r13
  746. adcq $0,%r13
  747. mulxq %r8,%rcx,%r14
  748. movq %rax,%rdx
  749. .byte 102,73,15,110,216
  750. xorq %r15,%r15
  751. adcxq %r9,%r9
  752. adoxq %rcx,%r13
  753. adcxq %r10,%r10
  754. adoxq %r15,%r14
  755. mulxq %rdx,%r8,%rbp
  756. .byte 102,72,15,126,202
  757. adcxq %r11,%r11
  758. adoxq %rbp,%r9
  759. adcxq %r12,%r12
  760. mulxq %rdx,%rcx,%rax
  761. .byte 102,72,15,126,210
  762. adcxq %r13,%r13
  763. adoxq %rcx,%r10
  764. adcxq %r14,%r14
  765. mulxq %rdx,%rcx,%rbp
  766. .byte 0x67
  767. .byte 102,72,15,126,218
  768. adoxq %rax,%r11
  769. adcxq %r15,%r15
  770. adoxq %rcx,%r12
  771. adoxq %rbp,%r13
  772. mulxq %rdx,%rcx,%rax
  773. adoxq %rcx,%r14
  774. adoxq %rax,%r15
  775. movq %r8,%rdx
  776. mulxq 32(%rsi),%rdx,%rcx
  777. xorq %rax,%rax
  778. mulxq 0(%rsi),%rcx,%rbp
  779. adcxq %rcx,%r8
  780. adoxq %rbp,%r9
  781. mulxq 8(%rsi),%rcx,%rbp
  782. adcxq %rcx,%r9
  783. adoxq %rbp,%r10
  784. mulxq 16(%rsi),%rcx,%rbp
  785. adcxq %rcx,%r10
  786. adoxq %rbp,%r11
  787. mulxq 24(%rsi),%rcx,%rbp
  788. adcxq %rcx,%r11
  789. adoxq %rbp,%r8
  790. adcxq %rax,%r8
  791. movq %r9,%rdx
  792. mulxq 32(%rsi),%rdx,%rcx
  793. mulxq 0(%rsi),%rcx,%rbp
  794. adoxq %rcx,%r9
  795. adcxq %rbp,%r10
  796. mulxq 8(%rsi),%rcx,%rbp
  797. adoxq %rcx,%r10
  798. adcxq %rbp,%r11
  799. mulxq 16(%rsi),%rcx,%rbp
  800. adoxq %rcx,%r11
  801. adcxq %rbp,%r8
  802. mulxq 24(%rsi),%rcx,%rbp
  803. adoxq %rcx,%r8
  804. adcxq %rbp,%r9
  805. adoxq %rax,%r9
  806. movq %r10,%rdx
  807. mulxq 32(%rsi),%rdx,%rcx
  808. mulxq 0(%rsi),%rcx,%rbp
  809. adcxq %rcx,%r10
  810. adoxq %rbp,%r11
  811. mulxq 8(%rsi),%rcx,%rbp
  812. adcxq %rcx,%r11
  813. adoxq %rbp,%r8
  814. mulxq 16(%rsi),%rcx,%rbp
  815. adcxq %rcx,%r8
  816. adoxq %rbp,%r9
  817. mulxq 24(%rsi),%rcx,%rbp
  818. adcxq %rcx,%r9
  819. adoxq %rbp,%r10
  820. adcxq %rax,%r10
  821. movq %r11,%rdx
  822. mulxq 32(%rsi),%rdx,%rcx
  823. mulxq 0(%rsi),%rcx,%rbp
  824. adoxq %rcx,%r11
  825. adcxq %rbp,%r8
  826. mulxq 8(%rsi),%rcx,%rbp
  827. adoxq %rcx,%r8
  828. adcxq %rbp,%r9
  829. mulxq 16(%rsi),%rcx,%rbp
  830. adoxq %rcx,%r9
  831. adcxq %rbp,%r10
  832. mulxq 24(%rsi),%rcx,%rbp
  833. adoxq %rcx,%r10
  834. adcxq %rbp,%r11
  835. adoxq %rax,%r11
  836. addq %r8,%r12
  837. adcq %r13,%r9
  838. movq %r12,%rdx
  839. adcq %r14,%r10
  840. adcq %r15,%r11
  841. movq %r9,%r14
  842. adcq $0,%rax
  843. subq 0(%rsi),%r12
  844. movq %r10,%r15
  845. sbbq 8(%rsi),%r9
  846. sbbq 16(%rsi),%r10
  847. movq %r11,%r8
  848. sbbq 24(%rsi),%r11
  849. sbbq $0,%rax
  850. cmovncq %r12,%rdx
  851. cmovncq %r9,%r14
  852. cmovncq %r10,%r15
  853. cmovncq %r11,%r8
  854. decq %rbx
  855. jnz L$oop_ord_sqrx
  856. movq %rdx,0(%rdi)
  857. movq %r14,8(%rdi)
  858. pxor %xmm1,%xmm1
  859. movq %r15,16(%rdi)
  860. pxor %xmm2,%xmm2
  861. movq %r8,24(%rdi)
  862. pxor %xmm3,%xmm3
  863. movq 0(%rsp),%r15
  864. movq 8(%rsp),%r14
  865. movq 16(%rsp),%r13
  866. movq 24(%rsp),%r12
  867. movq 32(%rsp),%rbx
  868. movq 40(%rsp),%rbp
  869. leaq 48(%rsp),%rsp
  870. L$ord_sqrx_epilogue:
  871. .byte 0xf3,0xc3
  872. .globl _ecp_nistz256_mul_mont
  873. .private_extern _ecp_nistz256_mul_mont
  874. .p2align 5
  875. _ecp_nistz256_mul_mont:
  876. leaq _OPENSSL_ia32cap_P(%rip),%rcx
  877. movq 8(%rcx),%rcx
  878. andl $0x80100,%ecx
  879. L$mul_mont:
  880. pushq %rbp
  881. pushq %rbx
  882. pushq %r12
  883. pushq %r13
  884. pushq %r14
  885. pushq %r15
  886. L$mul_body:
  887. cmpl $0x80100,%ecx
  888. je L$mul_montx
  889. movq %rdx,%rbx
  890. movq 0(%rdx),%rax
  891. movq 0(%rsi),%r9
  892. movq 8(%rsi),%r10
  893. movq 16(%rsi),%r11
  894. movq 24(%rsi),%r12
  895. call __ecp_nistz256_mul_montq
  896. jmp L$mul_mont_done
  897. .p2align 5
  898. L$mul_montx:
  899. movq %rdx,%rbx
  900. movq 0(%rdx),%rdx
  901. movq 0(%rsi),%r9
  902. movq 8(%rsi),%r10
  903. movq 16(%rsi),%r11
  904. movq 24(%rsi),%r12
  905. leaq -128(%rsi),%rsi
  906. call __ecp_nistz256_mul_montx
  907. L$mul_mont_done:
  908. movq 0(%rsp),%r15
  909. movq 8(%rsp),%r14
  910. movq 16(%rsp),%r13
  911. movq 24(%rsp),%r12
  912. movq 32(%rsp),%rbx
  913. movq 40(%rsp),%rbp
  914. leaq 48(%rsp),%rsp
  915. L$mul_epilogue:
  916. .byte 0xf3,0xc3
  917. .p2align 5
  918. __ecp_nistz256_mul_montq:
  919. movq %rax,%rbp
  920. mulq %r9
  921. movq L$poly+8(%rip),%r14
  922. movq %rax,%r8
  923. movq %rbp,%rax
  924. movq %rdx,%r9
  925. mulq %r10
  926. movq L$poly+24(%rip),%r15
  927. addq %rax,%r9
  928. movq %rbp,%rax
  929. adcq $0,%rdx
  930. movq %rdx,%r10
  931. mulq %r11
  932. addq %rax,%r10
  933. movq %rbp,%rax
  934. adcq $0,%rdx
  935. movq %rdx,%r11
  936. mulq %r12
  937. addq %rax,%r11
  938. movq %r8,%rax
  939. adcq $0,%rdx
  940. xorq %r13,%r13
  941. movq %rdx,%r12
  942. movq %r8,%rbp
  943. shlq $32,%r8
  944. mulq %r15
  945. shrq $32,%rbp
  946. addq %r8,%r9
  947. adcq %rbp,%r10
  948. adcq %rax,%r11
  949. movq 8(%rbx),%rax
  950. adcq %rdx,%r12
  951. adcq $0,%r13
  952. xorq %r8,%r8
  953. movq %rax,%rbp
  954. mulq 0(%rsi)
  955. addq %rax,%r9
  956. movq %rbp,%rax
  957. adcq $0,%rdx
  958. movq %rdx,%rcx
  959. mulq 8(%rsi)
  960. addq %rcx,%r10
  961. adcq $0,%rdx
  962. addq %rax,%r10
  963. movq %rbp,%rax
  964. adcq $0,%rdx
  965. movq %rdx,%rcx
  966. mulq 16(%rsi)
  967. addq %rcx,%r11
  968. adcq $0,%rdx
  969. addq %rax,%r11
  970. movq %rbp,%rax
  971. adcq $0,%rdx
  972. movq %rdx,%rcx
  973. mulq 24(%rsi)
  974. addq %rcx,%r12
  975. adcq $0,%rdx
  976. addq %rax,%r12
  977. movq %r9,%rax
  978. adcq %rdx,%r13
  979. adcq $0,%r8
  980. movq %r9,%rbp
  981. shlq $32,%r9
  982. mulq %r15
  983. shrq $32,%rbp
  984. addq %r9,%r10
  985. adcq %rbp,%r11
  986. adcq %rax,%r12
  987. movq 16(%rbx),%rax
  988. adcq %rdx,%r13
  989. adcq $0,%r8
  990. xorq %r9,%r9
  991. movq %rax,%rbp
  992. mulq 0(%rsi)
  993. addq %rax,%r10
  994. movq %rbp,%rax
  995. adcq $0,%rdx
  996. movq %rdx,%rcx
  997. mulq 8(%rsi)
  998. addq %rcx,%r11
  999. adcq $0,%rdx
  1000. addq %rax,%r11
  1001. movq %rbp,%rax
  1002. adcq $0,%rdx
  1003. movq %rdx,%rcx
  1004. mulq 16(%rsi)
  1005. addq %rcx,%r12
  1006. adcq $0,%rdx
  1007. addq %rax,%r12
  1008. movq %rbp,%rax
  1009. adcq $0,%rdx
  1010. movq %rdx,%rcx
  1011. mulq 24(%rsi)
  1012. addq %rcx,%r13
  1013. adcq $0,%rdx
  1014. addq %rax,%r13
  1015. movq %r10,%rax
  1016. adcq %rdx,%r8
  1017. adcq $0,%r9
  1018. movq %r10,%rbp
  1019. shlq $32,%r10
  1020. mulq %r15
  1021. shrq $32,%rbp
  1022. addq %r10,%r11
  1023. adcq %rbp,%r12
  1024. adcq %rax,%r13
  1025. movq 24(%rbx),%rax
  1026. adcq %rdx,%r8
  1027. adcq $0,%r9
  1028. xorq %r10,%r10
  1029. movq %rax,%rbp
  1030. mulq 0(%rsi)
  1031. addq %rax,%r11
  1032. movq %rbp,%rax
  1033. adcq $0,%rdx
  1034. movq %rdx,%rcx
  1035. mulq 8(%rsi)
  1036. addq %rcx,%r12
  1037. adcq $0,%rdx
  1038. addq %rax,%r12
  1039. movq %rbp,%rax
  1040. adcq $0,%rdx
  1041. movq %rdx,%rcx
  1042. mulq 16(%rsi)
  1043. addq %rcx,%r13
  1044. adcq $0,%rdx
  1045. addq %rax,%r13
  1046. movq %rbp,%rax
  1047. adcq $0,%rdx
  1048. movq %rdx,%rcx
  1049. mulq 24(%rsi)
  1050. addq %rcx,%r8
  1051. adcq $0,%rdx
  1052. addq %rax,%r8
  1053. movq %r11,%rax
  1054. adcq %rdx,%r9
  1055. adcq $0,%r10
  1056. movq %r11,%rbp
  1057. shlq $32,%r11
  1058. mulq %r15
  1059. shrq $32,%rbp
  1060. addq %r11,%r12
  1061. adcq %rbp,%r13
  1062. movq %r12,%rcx
  1063. adcq %rax,%r8
  1064. adcq %rdx,%r9
  1065. movq %r13,%rbp
  1066. adcq $0,%r10
  1067. subq $-1,%r12
  1068. movq %r8,%rbx
  1069. sbbq %r14,%r13
  1070. sbbq $0,%r8
  1071. movq %r9,%rdx
  1072. sbbq %r15,%r9
  1073. sbbq $0,%r10
  1074. cmovcq %rcx,%r12
  1075. cmovcq %rbp,%r13
  1076. movq %r12,0(%rdi)
  1077. cmovcq %rbx,%r8
  1078. movq %r13,8(%rdi)
  1079. cmovcq %rdx,%r9
  1080. movq %r8,16(%rdi)
  1081. movq %r9,24(%rdi)
  1082. .byte 0xf3,0xc3
  1083. .globl _ecp_nistz256_sqr_mont
  1084. .private_extern _ecp_nistz256_sqr_mont
  1085. .p2align 5
  1086. _ecp_nistz256_sqr_mont:
  1087. leaq _OPENSSL_ia32cap_P(%rip),%rcx
  1088. movq 8(%rcx),%rcx
  1089. andl $0x80100,%ecx
  1090. pushq %rbp
  1091. pushq %rbx
  1092. pushq %r12
  1093. pushq %r13
  1094. pushq %r14
  1095. pushq %r15
  1096. L$sqr_body:
  1097. cmpl $0x80100,%ecx
  1098. je L$sqr_montx
  1099. movq 0(%rsi),%rax
  1100. movq 8(%rsi),%r14
  1101. movq 16(%rsi),%r15
  1102. movq 24(%rsi),%r8
  1103. call __ecp_nistz256_sqr_montq
  1104. jmp L$sqr_mont_done
  1105. .p2align 5
  1106. L$sqr_montx:
  1107. movq 0(%rsi),%rdx
  1108. movq 8(%rsi),%r14
  1109. movq 16(%rsi),%r15
  1110. movq 24(%rsi),%r8
  1111. leaq -128(%rsi),%rsi
  1112. call __ecp_nistz256_sqr_montx
  1113. L$sqr_mont_done:
  1114. movq 0(%rsp),%r15
  1115. movq 8(%rsp),%r14
  1116. movq 16(%rsp),%r13
  1117. movq 24(%rsp),%r12
  1118. movq 32(%rsp),%rbx
  1119. movq 40(%rsp),%rbp
  1120. leaq 48(%rsp),%rsp
  1121. L$sqr_epilogue:
  1122. .byte 0xf3,0xc3
  1123. .p2align 5
  1124. __ecp_nistz256_sqr_montq:
  1125. movq %rax,%r13
  1126. mulq %r14
  1127. movq %rax,%r9
  1128. movq %r15,%rax
  1129. movq %rdx,%r10
  1130. mulq %r13
  1131. addq %rax,%r10
  1132. movq %r8,%rax
  1133. adcq $0,%rdx
  1134. movq %rdx,%r11
  1135. mulq %r13
  1136. addq %rax,%r11
  1137. movq %r15,%rax
  1138. adcq $0,%rdx
  1139. movq %rdx,%r12
  1140. mulq %r14
  1141. addq %rax,%r11
  1142. movq %r8,%rax
  1143. adcq $0,%rdx
  1144. movq %rdx,%rbp
  1145. mulq %r14
  1146. addq %rax,%r12
  1147. movq %r8,%rax
  1148. adcq $0,%rdx
  1149. addq %rbp,%r12
  1150. movq %rdx,%r13
  1151. adcq $0,%r13
  1152. mulq %r15
  1153. xorq %r15,%r15
  1154. addq %rax,%r13
  1155. movq 0(%rsi),%rax
  1156. movq %rdx,%r14
  1157. adcq $0,%r14
  1158. addq %r9,%r9
  1159. adcq %r10,%r10
  1160. adcq %r11,%r11
  1161. adcq %r12,%r12
  1162. adcq %r13,%r13
  1163. adcq %r14,%r14
  1164. adcq $0,%r15
  1165. mulq %rax
  1166. movq %rax,%r8
  1167. movq 8(%rsi),%rax
  1168. movq %rdx,%rcx
  1169. mulq %rax
  1170. addq %rcx,%r9
  1171. adcq %rax,%r10
  1172. movq 16(%rsi),%rax
  1173. adcq $0,%rdx
  1174. movq %rdx,%rcx
  1175. mulq %rax
  1176. addq %rcx,%r11
  1177. adcq %rax,%r12
  1178. movq 24(%rsi),%rax
  1179. adcq $0,%rdx
  1180. movq %rdx,%rcx
  1181. mulq %rax
  1182. addq %rcx,%r13
  1183. adcq %rax,%r14
  1184. movq %r8,%rax
  1185. adcq %rdx,%r15
  1186. movq L$poly+8(%rip),%rsi
  1187. movq L$poly+24(%rip),%rbp
  1188. movq %r8,%rcx
  1189. shlq $32,%r8
  1190. mulq %rbp
  1191. shrq $32,%rcx
  1192. addq %r8,%r9
  1193. adcq %rcx,%r10
  1194. adcq %rax,%r11
  1195. movq %r9,%rax
  1196. adcq $0,%rdx
  1197. movq %r9,%rcx
  1198. shlq $32,%r9
  1199. movq %rdx,%r8
  1200. mulq %rbp
  1201. shrq $32,%rcx
  1202. addq %r9,%r10
  1203. adcq %rcx,%r11
  1204. adcq %rax,%r8
  1205. movq %r10,%rax
  1206. adcq $0,%rdx
  1207. movq %r10,%rcx
  1208. shlq $32,%r10
  1209. movq %rdx,%r9
  1210. mulq %rbp
  1211. shrq $32,%rcx
  1212. addq %r10,%r11
  1213. adcq %rcx,%r8
  1214. adcq %rax,%r9
  1215. movq %r11,%rax
  1216. adcq $0,%rdx
  1217. movq %r11,%rcx
  1218. shlq $32,%r11
  1219. movq %rdx,%r10
  1220. mulq %rbp
  1221. shrq $32,%rcx
  1222. addq %r11,%r8
  1223. adcq %rcx,%r9
  1224. adcq %rax,%r10
  1225. adcq $0,%rdx
  1226. xorq %r11,%r11
  1227. addq %r8,%r12
  1228. adcq %r9,%r13
  1229. movq %r12,%r8
  1230. adcq %r10,%r14
  1231. adcq %rdx,%r15
  1232. movq %r13,%r9
  1233. adcq $0,%r11
  1234. subq $-1,%r12
  1235. movq %r14,%r10
  1236. sbbq %rsi,%r13
  1237. sbbq $0,%r14
  1238. movq %r15,%rcx
  1239. sbbq %rbp,%r15
  1240. sbbq $0,%r11
  1241. cmovcq %r8,%r12
  1242. cmovcq %r9,%r13
  1243. movq %r12,0(%rdi)
  1244. cmovcq %r10,%r14
  1245. movq %r13,8(%rdi)
  1246. cmovcq %rcx,%r15
  1247. movq %r14,16(%rdi)
  1248. movq %r15,24(%rdi)
  1249. .byte 0xf3,0xc3
  1250. .p2align 5
  1251. __ecp_nistz256_mul_montx:
  1252. mulxq %r9,%r8,%r9
  1253. mulxq %r10,%rcx,%r10
  1254. movq $32,%r14
  1255. xorq %r13,%r13
  1256. mulxq %r11,%rbp,%r11
  1257. movq L$poly+24(%rip),%r15
  1258. adcq %rcx,%r9
  1259. mulxq %r12,%rcx,%r12
  1260. movq %r8,%rdx
  1261. adcq %rbp,%r10
  1262. shlxq %r14,%r8,%rbp
  1263. adcq %rcx,%r11
  1264. shrxq %r14,%r8,%rcx
  1265. adcq $0,%r12
  1266. addq %rbp,%r9
  1267. adcq %rcx,%r10
  1268. mulxq %r15,%rcx,%rbp
  1269. movq 8(%rbx),%rdx
  1270. adcq %rcx,%r11
  1271. adcq %rbp,%r12
  1272. adcq $0,%r13
  1273. xorq %r8,%r8
  1274. mulxq 0+128(%rsi),%rcx,%rbp
  1275. adcxq %rcx,%r9
  1276. adoxq %rbp,%r10
  1277. mulxq 8+128(%rsi),%rcx,%rbp
  1278. adcxq %rcx,%r10
  1279. adoxq %rbp,%r11
  1280. mulxq 16+128(%rsi),%rcx,%rbp
  1281. adcxq %rcx,%r11
  1282. adoxq %rbp,%r12
  1283. mulxq 24+128(%rsi),%rcx,%rbp
  1284. movq %r9,%rdx
  1285. adcxq %rcx,%r12
  1286. shlxq %r14,%r9,%rcx
  1287. adoxq %rbp,%r13
  1288. shrxq %r14,%r9,%rbp
  1289. adcxq %r8,%r13
  1290. adoxq %r8,%r8
  1291. adcq $0,%r8
  1292. addq %rcx,%r10
  1293. adcq %rbp,%r11
  1294. mulxq %r15,%rcx,%rbp
  1295. movq 16(%rbx),%rdx
  1296. adcq %rcx,%r12
  1297. adcq %rbp,%r13
  1298. adcq $0,%r8
  1299. xorq %r9,%r9
  1300. mulxq 0+128(%rsi),%rcx,%rbp
  1301. adcxq %rcx,%r10
  1302. adoxq %rbp,%r11
  1303. mulxq 8+128(%rsi),%rcx,%rbp
  1304. adcxq %rcx,%r11
  1305. adoxq %rbp,%r12
  1306. mulxq 16+128(%rsi),%rcx,%rbp
  1307. adcxq %rcx,%r12
  1308. adoxq %rbp,%r13
  1309. mulxq 24+128(%rsi),%rcx,%rbp
  1310. movq %r10,%rdx
  1311. adcxq %rcx,%r13
  1312. shlxq %r14,%r10,%rcx
  1313. adoxq %rbp,%r8
  1314. shrxq %r14,%r10,%rbp
  1315. adcxq %r9,%r8
  1316. adoxq %r9,%r9
  1317. adcq $0,%r9
  1318. addq %rcx,%r11
  1319. adcq %rbp,%r12
  1320. mulxq %r15,%rcx,%rbp
  1321. movq 24(%rbx),%rdx
  1322. adcq %rcx,%r13
  1323. adcq %rbp,%r8
  1324. adcq $0,%r9
  1325. xorq %r10,%r10
  1326. mulxq 0+128(%rsi),%rcx,%rbp
  1327. adcxq %rcx,%r11
  1328. adoxq %rbp,%r12
  1329. mulxq 8+128(%rsi),%rcx,%rbp
  1330. adcxq %rcx,%r12
  1331. adoxq %rbp,%r13
  1332. mulxq 16+128(%rsi),%rcx,%rbp
  1333. adcxq %rcx,%r13
  1334. adoxq %rbp,%r8
  1335. mulxq 24+128(%rsi),%rcx,%rbp
  1336. movq %r11,%rdx
  1337. adcxq %rcx,%r8
  1338. shlxq %r14,%r11,%rcx
  1339. adoxq %rbp,%r9
  1340. shrxq %r14,%r11,%rbp
  1341. adcxq %r10,%r9
  1342. adoxq %r10,%r10
  1343. adcq $0,%r10
  1344. addq %rcx,%r12
  1345. adcq %rbp,%r13
  1346. mulxq %r15,%rcx,%rbp
  1347. movq %r12,%rbx
  1348. movq L$poly+8(%rip),%r14
  1349. adcq %rcx,%r8
  1350. movq %r13,%rdx
  1351. adcq %rbp,%r9
  1352. adcq $0,%r10
  1353. xorl %eax,%eax
  1354. movq %r8,%rcx
  1355. sbbq $-1,%r12
  1356. sbbq %r14,%r13
  1357. sbbq $0,%r8
  1358. movq %r9,%rbp
  1359. sbbq %r15,%r9
  1360. sbbq $0,%r10
  1361. cmovcq %rbx,%r12
  1362. cmovcq %rdx,%r13
  1363. movq %r12,0(%rdi)
  1364. cmovcq %rcx,%r8
  1365. movq %r13,8(%rdi)
  1366. cmovcq %rbp,%r9
  1367. movq %r8,16(%rdi)
  1368. movq %r9,24(%rdi)
  1369. .byte 0xf3,0xc3
  1370. .p2align 5
  1371. __ecp_nistz256_sqr_montx:
  1372. mulxq %r14,%r9,%r10
  1373. mulxq %r15,%rcx,%r11
  1374. xorl %eax,%eax
  1375. adcq %rcx,%r10
  1376. mulxq %r8,%rbp,%r12
  1377. movq %r14,%rdx
  1378. adcq %rbp,%r11
  1379. adcq $0,%r12
  1380. xorq %r13,%r13
  1381. mulxq %r15,%rcx,%rbp
  1382. adcxq %rcx,%r11
  1383. adoxq %rbp,%r12
  1384. mulxq %r8,%rcx,%rbp
  1385. movq %r15,%rdx
  1386. adcxq %rcx,%r12
  1387. adoxq %rbp,%r13
  1388. adcq $0,%r13
  1389. mulxq %r8,%rcx,%r14
  1390. movq 0+128(%rsi),%rdx
  1391. xorq %r15,%r15
  1392. adcxq %r9,%r9
  1393. adoxq %rcx,%r13
  1394. adcxq %r10,%r10
  1395. adoxq %r15,%r14
  1396. mulxq %rdx,%r8,%rbp
  1397. movq 8+128(%rsi),%rdx
  1398. adcxq %r11,%r11
  1399. adoxq %rbp,%r9
  1400. adcxq %r12,%r12
  1401. mulxq %rdx,%rcx,%rax
  1402. movq 16+128(%rsi),%rdx
  1403. adcxq %r13,%r13
  1404. adoxq %rcx,%r10
  1405. adcxq %r14,%r14
  1406. .byte 0x67
  1407. mulxq %rdx,%rcx,%rbp
  1408. movq 24+128(%rsi),%rdx
  1409. adoxq %rax,%r11
  1410. adcxq %r15,%r15
  1411. adoxq %rcx,%r12
  1412. movq $32,%rsi
  1413. adoxq %rbp,%r13
  1414. .byte 0x67,0x67
  1415. mulxq %rdx,%rcx,%rax
  1416. movq L$poly+24(%rip),%rdx
  1417. adoxq %rcx,%r14
  1418. shlxq %rsi,%r8,%rcx
  1419. adoxq %rax,%r15
  1420. shrxq %rsi,%r8,%rax
  1421. movq %rdx,%rbp
  1422. addq %rcx,%r9
  1423. adcq %rax,%r10
  1424. mulxq %r8,%rcx,%r8
  1425. adcq %rcx,%r11
  1426. shlxq %rsi,%r9,%rcx
  1427. adcq $0,%r8
  1428. shrxq %rsi,%r9,%rax
  1429. addq %rcx,%r10
  1430. adcq %rax,%r11
  1431. mulxq %r9,%rcx,%r9
  1432. adcq %rcx,%r8
  1433. shlxq %rsi,%r10,%rcx
  1434. adcq $0,%r9
  1435. shrxq %rsi,%r10,%rax
  1436. addq %rcx,%r11
  1437. adcq %rax,%r8
  1438. mulxq %r10,%rcx,%r10
  1439. adcq %rcx,%r9
  1440. shlxq %rsi,%r11,%rcx
  1441. adcq $0,%r10
  1442. shrxq %rsi,%r11,%rax
  1443. addq %rcx,%r8
  1444. adcq %rax,%r9
  1445. mulxq %r11,%rcx,%r11
  1446. adcq %rcx,%r10
  1447. adcq $0,%r11
  1448. xorq %rdx,%rdx
  1449. addq %r8,%r12
  1450. movq L$poly+8(%rip),%rsi
  1451. adcq %r9,%r13
  1452. movq %r12,%r8
  1453. adcq %r10,%r14
  1454. adcq %r11,%r15
  1455. movq %r13,%r9
  1456. adcq $0,%rdx
  1457. subq $-1,%r12
  1458. movq %r14,%r10
  1459. sbbq %rsi,%r13
  1460. sbbq $0,%r14
  1461. movq %r15,%r11
  1462. sbbq %rbp,%r15
  1463. sbbq $0,%rdx
  1464. cmovcq %r8,%r12
  1465. cmovcq %r9,%r13
  1466. movq %r12,0(%rdi)
  1467. cmovcq %r10,%r14
  1468. movq %r13,8(%rdi)
  1469. cmovcq %r11,%r15
  1470. movq %r14,16(%rdi)
  1471. movq %r15,24(%rdi)
  1472. .byte 0xf3,0xc3
  1473. .globl _ecp_nistz256_select_w5
  1474. .private_extern _ecp_nistz256_select_w5
  1475. .p2align 5
  1476. _ecp_nistz256_select_w5:
  1477. leaq _OPENSSL_ia32cap_P(%rip),%rax
  1478. movq 8(%rax),%rax
  1479. testl $32,%eax
  1480. jnz L$avx2_select_w5
  1481. movdqa L$One(%rip),%xmm0
  1482. movd %edx,%xmm1
  1483. pxor %xmm2,%xmm2
  1484. pxor %xmm3,%xmm3
  1485. pxor %xmm4,%xmm4
  1486. pxor %xmm5,%xmm5
  1487. pxor %xmm6,%xmm6
  1488. pxor %xmm7,%xmm7
  1489. movdqa %xmm0,%xmm8
  1490. pshufd $0,%xmm1,%xmm1
  1491. movq $16,%rax
  1492. L$select_loop_sse_w5:
  1493. movdqa %xmm8,%xmm15
  1494. paddd %xmm0,%xmm8
  1495. pcmpeqd %xmm1,%xmm15
  1496. movdqa 0(%rsi),%xmm9
  1497. movdqa 16(%rsi),%xmm10
  1498. movdqa 32(%rsi),%xmm11
  1499. movdqa 48(%rsi),%xmm12
  1500. movdqa 64(%rsi),%xmm13
  1501. movdqa 80(%rsi),%xmm14
  1502. leaq 96(%rsi),%rsi
  1503. pand %xmm15,%xmm9
  1504. pand %xmm15,%xmm10
  1505. por %xmm9,%xmm2
  1506. pand %xmm15,%xmm11
  1507. por %xmm10,%xmm3
  1508. pand %xmm15,%xmm12
  1509. por %xmm11,%xmm4
  1510. pand %xmm15,%xmm13
  1511. por %xmm12,%xmm5
  1512. pand %xmm15,%xmm14
  1513. por %xmm13,%xmm6
  1514. por %xmm14,%xmm7
  1515. decq %rax
  1516. jnz L$select_loop_sse_w5
  1517. movdqu %xmm2,0(%rdi)
  1518. movdqu %xmm3,16(%rdi)
  1519. movdqu %xmm4,32(%rdi)
  1520. movdqu %xmm5,48(%rdi)
  1521. movdqu %xmm6,64(%rdi)
  1522. movdqu %xmm7,80(%rdi)
  1523. .byte 0xf3,0xc3
  1524. L$SEH_end_ecp_nistz256_select_w5:
  1525. .globl _ecp_nistz256_select_w7
  1526. .private_extern _ecp_nistz256_select_w7
  1527. .p2align 5
  1528. _ecp_nistz256_select_w7:
  1529. leaq _OPENSSL_ia32cap_P(%rip),%rax
  1530. movq 8(%rax),%rax
  1531. testl $32,%eax
  1532. jnz L$avx2_select_w7
  1533. movdqa L$One(%rip),%xmm8
  1534. movd %edx,%xmm1
  1535. pxor %xmm2,%xmm2
  1536. pxor %xmm3,%xmm3
  1537. pxor %xmm4,%xmm4
  1538. pxor %xmm5,%xmm5
  1539. movdqa %xmm8,%xmm0
  1540. pshufd $0,%xmm1,%xmm1
  1541. movq $64,%rax
  1542. L$select_loop_sse_w7:
  1543. movdqa %xmm8,%xmm15
  1544. paddd %xmm0,%xmm8
  1545. movdqa 0(%rsi),%xmm9
  1546. movdqa 16(%rsi),%xmm10
  1547. pcmpeqd %xmm1,%xmm15
  1548. movdqa 32(%rsi),%xmm11
  1549. movdqa 48(%rsi),%xmm12
  1550. leaq 64(%rsi),%rsi
  1551. pand %xmm15,%xmm9
  1552. pand %xmm15,%xmm10
  1553. por %xmm9,%xmm2
  1554. pand %xmm15,%xmm11
  1555. por %xmm10,%xmm3
  1556. pand %xmm15,%xmm12
  1557. por %xmm11,%xmm4
  1558. prefetcht0 255(%rsi)
  1559. por %xmm12,%xmm5
  1560. decq %rax
  1561. jnz L$select_loop_sse_w7
  1562. movdqu %xmm2,0(%rdi)
  1563. movdqu %xmm3,16(%rdi)
  1564. movdqu %xmm4,32(%rdi)
  1565. movdqu %xmm5,48(%rdi)
  1566. .byte 0xf3,0xc3
  1567. L$SEH_end_ecp_nistz256_select_w7:
  1568. .p2align 5
  1569. ecp_nistz256_avx2_select_w5:
  1570. L$avx2_select_w5:
  1571. vzeroupper
  1572. vmovdqa L$Two(%rip),%ymm0
  1573. vpxor %ymm2,%ymm2,%ymm2
  1574. vpxor %ymm3,%ymm3,%ymm3
  1575. vpxor %ymm4,%ymm4,%ymm4
  1576. vmovdqa L$One(%rip),%ymm5
  1577. vmovdqa L$Two(%rip),%ymm10
  1578. vmovd %edx,%xmm1
  1579. vpermd %ymm1,%ymm2,%ymm1
  1580. movq $8,%rax
  1581. L$select_loop_avx2_w5:
  1582. vmovdqa 0(%rsi),%ymm6
  1583. vmovdqa 32(%rsi),%ymm7
  1584. vmovdqa 64(%rsi),%ymm8
  1585. vmovdqa 96(%rsi),%ymm11
  1586. vmovdqa 128(%rsi),%ymm12
  1587. vmovdqa 160(%rsi),%ymm13
  1588. vpcmpeqd %ymm1,%ymm5,%ymm9
  1589. vpcmpeqd %ymm1,%ymm10,%ymm14
  1590. vpaddd %ymm0,%ymm5,%ymm5
  1591. vpaddd %ymm0,%ymm10,%ymm10
  1592. leaq 192(%rsi),%rsi
  1593. vpand %ymm9,%ymm6,%ymm6
  1594. vpand %ymm9,%ymm7,%ymm7
  1595. vpand %ymm9,%ymm8,%ymm8
  1596. vpand %ymm14,%ymm11,%ymm11
  1597. vpand %ymm14,%ymm12,%ymm12
  1598. vpand %ymm14,%ymm13,%ymm13
  1599. vpxor %ymm6,%ymm2,%ymm2
  1600. vpxor %ymm7,%ymm3,%ymm3
  1601. vpxor %ymm8,%ymm4,%ymm4
  1602. vpxor %ymm11,%ymm2,%ymm2
  1603. vpxor %ymm12,%ymm3,%ymm3
  1604. vpxor %ymm13,%ymm4,%ymm4
  1605. decq %rax
  1606. jnz L$select_loop_avx2_w5
  1607. vmovdqu %ymm2,0(%rdi)
  1608. vmovdqu %ymm3,32(%rdi)
  1609. vmovdqu %ymm4,64(%rdi)
  1610. vzeroupper
  1611. .byte 0xf3,0xc3
  1612. L$SEH_end_ecp_nistz256_avx2_select_w5:
  1613. .globl _ecp_nistz256_avx2_select_w7
  1614. .private_extern _ecp_nistz256_avx2_select_w7
  1615. .p2align 5
  1616. _ecp_nistz256_avx2_select_w7:
  1617. L$avx2_select_w7:
  1618. vzeroupper
  1619. vmovdqa L$Three(%rip),%ymm0
  1620. vpxor %ymm2,%ymm2,%ymm2
  1621. vpxor %ymm3,%ymm3,%ymm3
  1622. vmovdqa L$One(%rip),%ymm4
  1623. vmovdqa L$Two(%rip),%ymm8
  1624. vmovdqa L$Three(%rip),%ymm12
  1625. vmovd %edx,%xmm1
  1626. vpermd %ymm1,%ymm2,%ymm1
  1627. movq $21,%rax
  1628. L$select_loop_avx2_w7:
  1629. vmovdqa 0(%rsi),%ymm5
  1630. vmovdqa 32(%rsi),%ymm6
  1631. vmovdqa 64(%rsi),%ymm9
  1632. vmovdqa 96(%rsi),%ymm10
  1633. vmovdqa 128(%rsi),%ymm13
  1634. vmovdqa 160(%rsi),%ymm14
  1635. vpcmpeqd %ymm1,%ymm4,%ymm7
  1636. vpcmpeqd %ymm1,%ymm8,%ymm11
  1637. vpcmpeqd %ymm1,%ymm12,%ymm15
  1638. vpaddd %ymm0,%ymm4,%ymm4
  1639. vpaddd %ymm0,%ymm8,%ymm8
  1640. vpaddd %ymm0,%ymm12,%ymm12
  1641. leaq 192(%rsi),%rsi
  1642. vpand %ymm7,%ymm5,%ymm5
  1643. vpand %ymm7,%ymm6,%ymm6
  1644. vpand %ymm11,%ymm9,%ymm9
  1645. vpand %ymm11,%ymm10,%ymm10
  1646. vpand %ymm15,%ymm13,%ymm13
  1647. vpand %ymm15,%ymm14,%ymm14
  1648. vpxor %ymm5,%ymm2,%ymm2
  1649. vpxor %ymm6,%ymm3,%ymm3
  1650. vpxor %ymm9,%ymm2,%ymm2
  1651. vpxor %ymm10,%ymm3,%ymm3
  1652. vpxor %ymm13,%ymm2,%ymm2
  1653. vpxor %ymm14,%ymm3,%ymm3
  1654. decq %rax
  1655. jnz L$select_loop_avx2_w7
  1656. vmovdqa 0(%rsi),%ymm5
  1657. vmovdqa 32(%rsi),%ymm6
  1658. vpcmpeqd %ymm1,%ymm4,%ymm7
  1659. vpand %ymm7,%ymm5,%ymm5
  1660. vpand %ymm7,%ymm6,%ymm6
  1661. vpxor %ymm5,%ymm2,%ymm2
  1662. vpxor %ymm6,%ymm3,%ymm3
  1663. vmovdqu %ymm2,0(%rdi)
  1664. vmovdqu %ymm3,32(%rdi)
  1665. vzeroupper
  1666. .byte 0xf3,0xc3
  1667. L$SEH_end_ecp_nistz256_avx2_select_w7:
  1668. .p2align 5
  1669. __ecp_nistz256_add_toq:
  1670. xorq %r11,%r11
  1671. addq 0(%rbx),%r12
  1672. adcq 8(%rbx),%r13
  1673. movq %r12,%rax
  1674. adcq 16(%rbx),%r8
  1675. adcq 24(%rbx),%r9
  1676. movq %r13,%rbp
  1677. adcq $0,%r11
  1678. subq $-1,%r12
  1679. movq %r8,%rcx
  1680. sbbq %r14,%r13
  1681. sbbq $0,%r8
  1682. movq %r9,%r10
  1683. sbbq %r15,%r9
  1684. sbbq $0,%r11
  1685. cmovcq %rax,%r12
  1686. cmovcq %rbp,%r13
  1687. movq %r12,0(%rdi)
  1688. cmovcq %rcx,%r8
  1689. movq %r13,8(%rdi)
  1690. cmovcq %r10,%r9
  1691. movq %r8,16(%rdi)
  1692. movq %r9,24(%rdi)
  1693. .byte 0xf3,0xc3
  1694. .p2align 5
  1695. __ecp_nistz256_sub_fromq:
  1696. subq 0(%rbx),%r12
  1697. sbbq 8(%rbx),%r13
  1698. movq %r12,%rax
  1699. sbbq 16(%rbx),%r8
  1700. sbbq 24(%rbx),%r9
  1701. movq %r13,%rbp
  1702. sbbq %r11,%r11
  1703. addq $-1,%r12
  1704. movq %r8,%rcx
  1705. adcq %r14,%r13
  1706. adcq $0,%r8
  1707. movq %r9,%r10
  1708. adcq %r15,%r9
  1709. testq %r11,%r11
  1710. cmovzq %rax,%r12
  1711. cmovzq %rbp,%r13
  1712. movq %r12,0(%rdi)
  1713. cmovzq %rcx,%r8
  1714. movq %r13,8(%rdi)
  1715. cmovzq %r10,%r9
  1716. movq %r8,16(%rdi)
  1717. movq %r9,24(%rdi)
  1718. .byte 0xf3,0xc3
  1719. .p2align 5
  1720. __ecp_nistz256_subq:
  1721. subq %r12,%rax
  1722. sbbq %r13,%rbp
  1723. movq %rax,%r12
  1724. sbbq %r8,%rcx
  1725. sbbq %r9,%r10
  1726. movq %rbp,%r13
  1727. sbbq %r11,%r11
  1728. addq $-1,%rax
  1729. movq %rcx,%r8
  1730. adcq %r14,%rbp
  1731. adcq $0,%rcx
  1732. movq %r10,%r9
  1733. adcq %r15,%r10
  1734. testq %r11,%r11
  1735. cmovnzq %rax,%r12
  1736. cmovnzq %rbp,%r13
  1737. cmovnzq %rcx,%r8
  1738. cmovnzq %r10,%r9
  1739. .byte 0xf3,0xc3
  1740. .p2align 5
  1741. __ecp_nistz256_mul_by_2q:
  1742. xorq %r11,%r11
  1743. addq %r12,%r12
  1744. adcq %r13,%r13
  1745. movq %r12,%rax
  1746. adcq %r8,%r8
  1747. adcq %r9,%r9
  1748. movq %r13,%rbp
  1749. adcq $0,%r11
  1750. subq $-1,%r12
  1751. movq %r8,%rcx
  1752. sbbq %r14,%r13
  1753. sbbq $0,%r8
  1754. movq %r9,%r10
  1755. sbbq %r15,%r9
  1756. sbbq $0,%r11
  1757. cmovcq %rax,%r12
  1758. cmovcq %rbp,%r13
  1759. movq %r12,0(%rdi)
  1760. cmovcq %rcx,%r8
  1761. movq %r13,8(%rdi)
  1762. cmovcq %r10,%r9
  1763. movq %r8,16(%rdi)
  1764. movq %r9,24(%rdi)
  1765. .byte 0xf3,0xc3
  1766. .globl _ecp_nistz256_point_double
  1767. .private_extern _ecp_nistz256_point_double
  1768. .p2align 5
  1769. _ecp_nistz256_point_double:
  1770. leaq _OPENSSL_ia32cap_P(%rip),%rcx
  1771. movq 8(%rcx),%rcx
  1772. andl $0x80100,%ecx
  1773. cmpl $0x80100,%ecx
  1774. je L$point_doublex
  1775. pushq %rbp
  1776. pushq %rbx
  1777. pushq %r12
  1778. pushq %r13
  1779. pushq %r14
  1780. pushq %r15
  1781. subq $160+8,%rsp
  1782. L$point_doubleq_body:
  1783. L$point_double_shortcutq:
  1784. movdqu 0(%rsi),%xmm0
  1785. movq %rsi,%rbx
  1786. movdqu 16(%rsi),%xmm1
  1787. movq 32+0(%rsi),%r12
  1788. movq 32+8(%rsi),%r13
  1789. movq 32+16(%rsi),%r8
  1790. movq 32+24(%rsi),%r9
  1791. movq L$poly+8(%rip),%r14
  1792. movq L$poly+24(%rip),%r15
  1793. movdqa %xmm0,96(%rsp)
  1794. movdqa %xmm1,96+16(%rsp)
  1795. leaq 32(%rdi),%r10
  1796. leaq 64(%rdi),%r11
  1797. .byte 102,72,15,110,199
  1798. .byte 102,73,15,110,202
  1799. .byte 102,73,15,110,211
  1800. leaq 0(%rsp),%rdi
  1801. call __ecp_nistz256_mul_by_2q
  1802. movq 64+0(%rsi),%rax
  1803. movq 64+8(%rsi),%r14
  1804. movq 64+16(%rsi),%r15
  1805. movq 64+24(%rsi),%r8
  1806. leaq 64-0(%rsi),%rsi
  1807. leaq 64(%rsp),%rdi
  1808. call __ecp_nistz256_sqr_montq
  1809. movq 0+0(%rsp),%rax
  1810. movq 8+0(%rsp),%r14
  1811. leaq 0+0(%rsp),%rsi
  1812. movq 16+0(%rsp),%r15
  1813. movq 24+0(%rsp),%r8
  1814. leaq 0(%rsp),%rdi
  1815. call __ecp_nistz256_sqr_montq
  1816. movq 32(%rbx),%rax
  1817. movq 64+0(%rbx),%r9
  1818. movq 64+8(%rbx),%r10
  1819. movq 64+16(%rbx),%r11
  1820. movq 64+24(%rbx),%r12
  1821. leaq 64-0(%rbx),%rsi
  1822. leaq 32(%rbx),%rbx
  1823. .byte 102,72,15,126,215
  1824. call __ecp_nistz256_mul_montq
  1825. call __ecp_nistz256_mul_by_2q
  1826. movq 96+0(%rsp),%r12
  1827. movq 96+8(%rsp),%r13
  1828. leaq 64(%rsp),%rbx
  1829. movq 96+16(%rsp),%r8
  1830. movq 96+24(%rsp),%r9
  1831. leaq 32(%rsp),%rdi
  1832. call __ecp_nistz256_add_toq
  1833. movq 96+0(%rsp),%r12
  1834. movq 96+8(%rsp),%r13
  1835. leaq 64(%rsp),%rbx
  1836. movq 96+16(%rsp),%r8
  1837. movq 96+24(%rsp),%r9
  1838. leaq 64(%rsp),%rdi
  1839. call __ecp_nistz256_sub_fromq
  1840. movq 0+0(%rsp),%rax
  1841. movq 8+0(%rsp),%r14
  1842. leaq 0+0(%rsp),%rsi
  1843. movq 16+0(%rsp),%r15
  1844. movq 24+0(%rsp),%r8
  1845. .byte 102,72,15,126,207
  1846. call __ecp_nistz256_sqr_montq
  1847. xorq %r9,%r9
  1848. movq %r12,%rax
  1849. addq $-1,%r12
  1850. movq %r13,%r10
  1851. adcq %rsi,%r13
  1852. movq %r14,%rcx
  1853. adcq $0,%r14
  1854. movq %r15,%r8
  1855. adcq %rbp,%r15
  1856. adcq $0,%r9
  1857. xorq %rsi,%rsi
  1858. testq $1,%rax
  1859. cmovzq %rax,%r12
  1860. cmovzq %r10,%r13
  1861. cmovzq %rcx,%r14
  1862. cmovzq %r8,%r15
  1863. cmovzq %rsi,%r9
  1864. movq %r13,%rax
  1865. shrq $1,%r12
  1866. shlq $63,%rax
  1867. movq %r14,%r10
  1868. shrq $1,%r13
  1869. orq %rax,%r12
  1870. shlq $63,%r10
  1871. movq %r15,%rcx
  1872. shrq $1,%r14
  1873. orq %r10,%r13
  1874. shlq $63,%rcx
  1875. movq %r12,0(%rdi)
  1876. shrq $1,%r15
  1877. movq %r13,8(%rdi)
  1878. shlq $63,%r9
  1879. orq %rcx,%r14
  1880. orq %r9,%r15
  1881. movq %r14,16(%rdi)
  1882. movq %r15,24(%rdi)
  1883. movq 64(%rsp),%rax
  1884. leaq 64(%rsp),%rbx
  1885. movq 0+32(%rsp),%r9
  1886. movq 8+32(%rsp),%r10
  1887. leaq 0+32(%rsp),%rsi
  1888. movq 16+32(%rsp),%r11
  1889. movq 24+32(%rsp),%r12
  1890. leaq 32(%rsp),%rdi
  1891. call __ecp_nistz256_mul_montq
  1892. leaq 128(%rsp),%rdi
  1893. call __ecp_nistz256_mul_by_2q
  1894. leaq 32(%rsp),%rbx
  1895. leaq 32(%rsp),%rdi
  1896. call __ecp_nistz256_add_toq
  1897. movq 96(%rsp),%rax
  1898. leaq 96(%rsp),%rbx
  1899. movq 0+0(%rsp),%r9
  1900. movq 8+0(%rsp),%r10
  1901. leaq 0+0(%rsp),%rsi
  1902. movq 16+0(%rsp),%r11
  1903. movq 24+0(%rsp),%r12
  1904. leaq 0(%rsp),%rdi
  1905. call __ecp_nistz256_mul_montq
  1906. leaq 128(%rsp),%rdi
  1907. call __ecp_nistz256_mul_by_2q
  1908. movq 0+32(%rsp),%rax
  1909. movq 8+32(%rsp),%r14
  1910. leaq 0+32(%rsp),%rsi
  1911. movq 16+32(%rsp),%r15
  1912. movq 24+32(%rsp),%r8
  1913. .byte 102,72,15,126,199
  1914. call __ecp_nistz256_sqr_montq
  1915. leaq 128(%rsp),%rbx
  1916. movq %r14,%r8
  1917. movq %r15,%r9
  1918. movq %rsi,%r14
  1919. movq %rbp,%r15
  1920. call __ecp_nistz256_sub_fromq
  1921. movq 0+0(%rsp),%rax
  1922. movq 0+8(%rsp),%rbp
  1923. movq 0+16(%rsp),%rcx
  1924. movq 0+24(%rsp),%r10
  1925. leaq 0(%rsp),%rdi
  1926. call __ecp_nistz256_subq
  1927. movq 32(%rsp),%rax
  1928. leaq 32(%rsp),%rbx
  1929. movq %r12,%r14
  1930. xorl %ecx,%ecx
  1931. movq %r12,0+0(%rsp)
  1932. movq %r13,%r10
  1933. movq %r13,0+8(%rsp)
  1934. cmovzq %r8,%r11
  1935. movq %r8,0+16(%rsp)
  1936. leaq 0-0(%rsp),%rsi
  1937. cmovzq %r9,%r12
  1938. movq %r9,0+24(%rsp)
  1939. movq %r14,%r9
  1940. leaq 0(%rsp),%rdi
  1941. call __ecp_nistz256_mul_montq
  1942. .byte 102,72,15,126,203
  1943. .byte 102,72,15,126,207
  1944. call __ecp_nistz256_sub_fromq
  1945. leaq 160+56(%rsp),%rsi
  1946. movq -48(%rsi),%r15
  1947. movq -40(%rsi),%r14
  1948. movq -32(%rsi),%r13
  1949. movq -24(%rsi),%r12
  1950. movq -16(%rsi),%rbx
  1951. movq -8(%rsi),%rbp
  1952. leaq (%rsi),%rsp
  1953. L$point_doubleq_epilogue:
  1954. .byte 0xf3,0xc3
  1955. .globl _ecp_nistz256_point_add
  1956. .private_extern _ecp_nistz256_point_add
  1957. .p2align 5
  1958. _ecp_nistz256_point_add:
  1959. leaq _OPENSSL_ia32cap_P(%rip),%rcx
  1960. movq 8(%rcx),%rcx
  1961. andl $0x80100,%ecx
  1962. cmpl $0x80100,%ecx
  1963. je L$point_addx
  1964. pushq %rbp
  1965. pushq %rbx
  1966. pushq %r12
  1967. pushq %r13
  1968. pushq %r14
  1969. pushq %r15
  1970. subq $576+8,%rsp
  1971. L$point_addq_body:
  1972. movdqu 0(%rsi),%xmm0
  1973. movdqu 16(%rsi),%xmm1
  1974. movdqu 32(%rsi),%xmm2
  1975. movdqu 48(%rsi),%xmm3
  1976. movdqu 64(%rsi),%xmm4
  1977. movdqu 80(%rsi),%xmm5
  1978. movq %rsi,%rbx
  1979. movq %rdx,%rsi
  1980. movdqa %xmm0,384(%rsp)
  1981. movdqa %xmm1,384+16(%rsp)
  1982. movdqa %xmm2,416(%rsp)
  1983. movdqa %xmm3,416+16(%rsp)
  1984. movdqa %xmm4,448(%rsp)
  1985. movdqa %xmm5,448+16(%rsp)
  1986. por %xmm4,%xmm5
  1987. movdqu 0(%rsi),%xmm0
  1988. pshufd $0xb1,%xmm5,%xmm3
  1989. movdqu 16(%rsi),%xmm1
  1990. movdqu 32(%rsi),%xmm2
  1991. por %xmm3,%xmm5
  1992. movdqu 48(%rsi),%xmm3
  1993. movq 64+0(%rsi),%rax
  1994. movq 64+8(%rsi),%r14
  1995. movq 64+16(%rsi),%r15
  1996. movq 64+24(%rsi),%r8
  1997. movdqa %xmm0,480(%rsp)
  1998. pshufd $0x1e,%xmm5,%xmm4
  1999. movdqa %xmm1,480+16(%rsp)
  2000. movdqu 64(%rsi),%xmm0
  2001. movdqu 80(%rsi),%xmm1
  2002. movdqa %xmm2,512(%rsp)
  2003. movdqa %xmm3,512+16(%rsp)
  2004. por %xmm4,%xmm5
  2005. pxor %xmm4,%xmm4
  2006. por %xmm0,%xmm1
  2007. .byte 102,72,15,110,199
  2008. leaq 64-0(%rsi),%rsi
  2009. movq %rax,544+0(%rsp)
  2010. movq %r14,544+8(%rsp)
  2011. movq %r15,544+16(%rsp)
  2012. movq %r8,544+24(%rsp)
  2013. leaq 96(%rsp),%rdi
  2014. call __ecp_nistz256_sqr_montq
  2015. pcmpeqd %xmm4,%xmm5
  2016. pshufd $0xb1,%xmm1,%xmm4
  2017. por %xmm1,%xmm4
  2018. pshufd $0,%xmm5,%xmm5
  2019. pshufd $0x1e,%xmm4,%xmm3
  2020. por %xmm3,%xmm4
  2021. pxor %xmm3,%xmm3
  2022. pcmpeqd %xmm3,%xmm4
  2023. pshufd $0,%xmm4,%xmm4
  2024. movq 64+0(%rbx),%rax
  2025. movq 64+8(%rbx),%r14
  2026. movq 64+16(%rbx),%r15
  2027. movq 64+24(%rbx),%r8
  2028. .byte 102,72,15,110,203
  2029. leaq 64-0(%rbx),%rsi
  2030. leaq 32(%rsp),%rdi
  2031. call __ecp_nistz256_sqr_montq
  2032. movq 544(%rsp),%rax
  2033. leaq 544(%rsp),%rbx
  2034. movq 0+96(%rsp),%r9
  2035. movq 8+96(%rsp),%r10
  2036. leaq 0+96(%rsp),%rsi
  2037. movq 16+96(%rsp),%r11
  2038. movq 24+96(%rsp),%r12
  2039. leaq 224(%rsp),%rdi
  2040. call __ecp_nistz256_mul_montq
  2041. movq 448(%rsp),%rax
  2042. leaq 448(%rsp),%rbx
  2043. movq 0+32(%rsp),%r9
  2044. movq 8+32(%rsp),%r10
  2045. leaq 0+32(%rsp),%rsi
  2046. movq 16+32(%rsp),%r11
  2047. movq 24+32(%rsp),%r12
  2048. leaq 256(%rsp),%rdi
  2049. call __ecp_nistz256_mul_montq
  2050. movq 416(%rsp),%rax
  2051. leaq 416(%rsp),%rbx
  2052. movq 0+224(%rsp),%r9
  2053. movq 8+224(%rsp),%r10
  2054. leaq 0+224(%rsp),%rsi
  2055. movq 16+224(%rsp),%r11
  2056. movq 24+224(%rsp),%r12
  2057. leaq 224(%rsp),%rdi
  2058. call __ecp_nistz256_mul_montq
  2059. movq 512(%rsp),%rax
  2060. leaq 512(%rsp),%rbx
  2061. movq 0+256(%rsp),%r9
  2062. movq 8+256(%rsp),%r10
  2063. leaq 0+256(%rsp),%rsi
  2064. movq 16+256(%rsp),%r11
  2065. movq 24+256(%rsp),%r12
  2066. leaq 256(%rsp),%rdi
  2067. call __ecp_nistz256_mul_montq
  2068. leaq 224(%rsp),%rbx
  2069. leaq 64(%rsp),%rdi
  2070. call __ecp_nistz256_sub_fromq
  2071. orq %r13,%r12
  2072. movdqa %xmm4,%xmm2
  2073. orq %r8,%r12
  2074. orq %r9,%r12
  2075. por %xmm5,%xmm2
  2076. .byte 102,73,15,110,220
  2077. movq 384(%rsp),%rax
  2078. leaq 384(%rsp),%rbx
  2079. movq 0+96(%rsp),%r9
  2080. movq 8+96(%rsp),%r10
  2081. leaq 0+96(%rsp),%rsi
  2082. movq 16+96(%rsp),%r11
  2083. movq 24+96(%rsp),%r12
  2084. leaq 160(%rsp),%rdi
  2085. call __ecp_nistz256_mul_montq
  2086. movq 480(%rsp),%rax
  2087. leaq 480(%rsp),%rbx
  2088. movq 0+32(%rsp),%r9
  2089. movq 8+32(%rsp),%r10
  2090. leaq 0+32(%rsp),%rsi
  2091. movq 16+32(%rsp),%r11
  2092. movq 24+32(%rsp),%r12
  2093. leaq 192(%rsp),%rdi
  2094. call __ecp_nistz256_mul_montq
  2095. leaq 160(%rsp),%rbx
  2096. leaq 0(%rsp),%rdi
  2097. call __ecp_nistz256_sub_fromq
  2098. orq %r13,%r12
  2099. orq %r8,%r12
  2100. orq %r9,%r12
  2101. .byte 102,73,15,126,208
  2102. .byte 102,73,15,126,217
  2103. orq %r8,%r12
  2104. .byte 0x3e
  2105. jnz L$add_proceedq
  2106. testq %r9,%r9
  2107. jz L$add_doubleq
  2108. .byte 102,72,15,126,199
  2109. pxor %xmm0,%xmm0
  2110. movdqu %xmm0,0(%rdi)
  2111. movdqu %xmm0,16(%rdi)
  2112. movdqu %xmm0,32(%rdi)
  2113. movdqu %xmm0,48(%rdi)
  2114. movdqu %xmm0,64(%rdi)
  2115. movdqu %xmm0,80(%rdi)
  2116. jmp L$add_doneq
  2117. .p2align 5
  2118. L$add_doubleq:
  2119. .byte 102,72,15,126,206
  2120. .byte 102,72,15,126,199
  2121. addq $416,%rsp
  2122. jmp L$point_double_shortcutq
  2123. .p2align 5
  2124. L$add_proceedq:
  2125. movq 0+64(%rsp),%rax
  2126. movq 8+64(%rsp),%r14
  2127. leaq 0+64(%rsp),%rsi
  2128. movq 16+64(%rsp),%r15
  2129. movq 24+64(%rsp),%r8
  2130. leaq 96(%rsp),%rdi
  2131. call __ecp_nistz256_sqr_montq
  2132. movq 448(%rsp),%rax
  2133. leaq 448(%rsp),%rbx
  2134. movq 0+0(%rsp),%r9
  2135. movq 8+0(%rsp),%r10
  2136. leaq 0+0(%rsp),%rsi
  2137. movq 16+0(%rsp),%r11
  2138. movq 24+0(%rsp),%r12
  2139. leaq 352(%rsp),%rdi
  2140. call __ecp_nistz256_mul_montq
  2141. movq 0+0(%rsp),%rax
  2142. movq 8+0(%rsp),%r14
  2143. leaq 0+0(%rsp),%rsi
  2144. movq 16+0(%rsp),%r15
  2145. movq 24+0(%rsp),%r8
  2146. leaq 32(%rsp),%rdi
  2147. call __ecp_nistz256_sqr_montq
  2148. movq 544(%rsp),%rax
  2149. leaq 544(%rsp),%rbx
  2150. movq 0+352(%rsp),%r9
  2151. movq 8+352(%rsp),%r10
  2152. leaq 0+352(%rsp),%rsi
  2153. movq 16+352(%rsp),%r11
  2154. movq 24+352(%rsp),%r12
  2155. leaq 352(%rsp),%rdi
  2156. call __ecp_nistz256_mul_montq
  2157. movq 0(%rsp),%rax
  2158. leaq 0(%rsp),%rbx
  2159. movq 0+32(%rsp),%r9
  2160. movq 8+32(%rsp),%r10
  2161. leaq 0+32(%rsp),%rsi
  2162. movq 16+32(%rsp),%r11
  2163. movq 24+32(%rsp),%r12
  2164. leaq 128(%rsp),%rdi
  2165. call __ecp_nistz256_mul_montq
  2166. movq 160(%rsp),%rax
  2167. leaq 160(%rsp),%rbx
  2168. movq 0+32(%rsp),%r9
  2169. movq 8+32(%rsp),%r10
  2170. leaq 0+32(%rsp),%rsi
  2171. movq 16+32(%rsp),%r11
  2172. movq 24+32(%rsp),%r12
  2173. leaq 192(%rsp),%rdi
  2174. call __ecp_nistz256_mul_montq
  2175. xorq %r11,%r11
  2176. addq %r12,%r12
  2177. leaq 96(%rsp),%rsi
  2178. adcq %r13,%r13
  2179. movq %r12,%rax
  2180. adcq %r8,%r8
  2181. adcq %r9,%r9
  2182. movq %r13,%rbp
  2183. adcq $0,%r11
  2184. subq $-1,%r12
  2185. movq %r8,%rcx
  2186. sbbq %r14,%r13
  2187. sbbq $0,%r8
  2188. movq %r9,%r10
  2189. sbbq %r15,%r9
  2190. sbbq $0,%r11
  2191. cmovcq %rax,%r12
  2192. movq 0(%rsi),%rax
  2193. cmovcq %rbp,%r13
  2194. movq 8(%rsi),%rbp
  2195. cmovcq %rcx,%r8
  2196. movq 16(%rsi),%rcx
  2197. cmovcq %r10,%r9
  2198. movq 24(%rsi),%r10
  2199. call __ecp_nistz256_subq
  2200. leaq 128(%rsp),%rbx
  2201. leaq 288(%rsp),%rdi
  2202. call __ecp_nistz256_sub_fromq
  2203. movq 192+0(%rsp),%rax
  2204. movq 192+8(%rsp),%rbp
  2205. movq 192+16(%rsp),%rcx
  2206. movq 192+24(%rsp),%r10
  2207. leaq 320(%rsp),%rdi
  2208. call __ecp_nistz256_subq
  2209. movq %r12,0(%rdi)
  2210. movq %r13,8(%rdi)
  2211. movq %r8,16(%rdi)
  2212. movq %r9,24(%rdi)
  2213. movq 128(%rsp),%rax
  2214. leaq 128(%rsp),%rbx
  2215. movq 0+224(%rsp),%r9
  2216. movq 8+224(%rsp),%r10
  2217. leaq 0+224(%rsp),%rsi
  2218. movq 16+224(%rsp),%r11
  2219. movq 24+224(%rsp),%r12
  2220. leaq 256(%rsp),%rdi
  2221. call __ecp_nistz256_mul_montq
  2222. movq 320(%rsp),%rax
  2223. leaq 320(%rsp),%rbx
  2224. movq 0+64(%rsp),%r9
  2225. movq 8+64(%rsp),%r10
  2226. leaq 0+64(%rsp),%rsi
  2227. movq 16+64(%rsp),%r11
  2228. movq 24+64(%rsp),%r12
  2229. leaq 320(%rsp),%rdi
  2230. call __ecp_nistz256_mul_montq
  2231. leaq 256(%rsp),%rbx
  2232. leaq 320(%rsp),%rdi
  2233. call __ecp_nistz256_sub_fromq
  2234. .byte 102,72,15,126,199
  2235. movdqa %xmm5,%xmm0
  2236. movdqa %xmm5,%xmm1
  2237. pandn 352(%rsp),%xmm0
  2238. movdqa %xmm5,%xmm2
  2239. pandn 352+16(%rsp),%xmm1
  2240. movdqa %xmm5,%xmm3
  2241. pand 544(%rsp),%xmm2
  2242. pand 544+16(%rsp),%xmm3
  2243. por %xmm0,%xmm2
  2244. por %xmm1,%xmm3
  2245. movdqa %xmm4,%xmm0
  2246. movdqa %xmm4,%xmm1
  2247. pandn %xmm2,%xmm0
  2248. movdqa %xmm4,%xmm2
  2249. pandn %xmm3,%xmm1
  2250. movdqa %xmm4,%xmm3
  2251. pand 448(%rsp),%xmm2
  2252. pand 448+16(%rsp),%xmm3
  2253. por %xmm0,%xmm2
  2254. por %xmm1,%xmm3
  2255. movdqu %xmm2,64(%rdi)
  2256. movdqu %xmm3,80(%rdi)
  2257. movdqa %xmm5,%xmm0
  2258. movdqa %xmm5,%xmm1
  2259. pandn 288(%rsp),%xmm0
  2260. movdqa %xmm5,%xmm2
  2261. pandn 288+16(%rsp),%xmm1
  2262. movdqa %xmm5,%xmm3
  2263. pand 480(%rsp),%xmm2
  2264. pand 480+16(%rsp),%xmm3
  2265. por %xmm0,%xmm2
  2266. por %xmm1,%xmm3
  2267. movdqa %xmm4,%xmm0
  2268. movdqa %xmm4,%xmm1
  2269. pandn %xmm2,%xmm0
  2270. movdqa %xmm4,%xmm2
  2271. pandn %xmm3,%xmm1
  2272. movdqa %xmm4,%xmm3
  2273. pand 384(%rsp),%xmm2
  2274. pand 384+16(%rsp),%xmm3
  2275. por %xmm0,%xmm2
  2276. por %xmm1,%xmm3
  2277. movdqu %xmm2,0(%rdi)
  2278. movdqu %xmm3,16(%rdi)
  2279. movdqa %xmm5,%xmm0
  2280. movdqa %xmm5,%xmm1
  2281. pandn 320(%rsp),%xmm0
  2282. movdqa %xmm5,%xmm2
  2283. pandn 320+16(%rsp),%xmm1
  2284. movdqa %xmm5,%xmm3
  2285. pand 512(%rsp),%xmm2
  2286. pand 512+16(%rsp),%xmm3
  2287. por %xmm0,%xmm2
  2288. por %xmm1,%xmm3
  2289. movdqa %xmm4,%xmm0
  2290. movdqa %xmm4,%xmm1
  2291. pandn %xmm2,%xmm0
  2292. movdqa %xmm4,%xmm2
  2293. pandn %xmm3,%xmm1
  2294. movdqa %xmm4,%xmm3
  2295. pand 416(%rsp),%xmm2
  2296. pand 416+16(%rsp),%xmm3
  2297. por %xmm0,%xmm2
  2298. por %xmm1,%xmm3
  2299. movdqu %xmm2,32(%rdi)
  2300. movdqu %xmm3,48(%rdi)
  2301. L$add_doneq:
  2302. leaq 576+56(%rsp),%rsi
  2303. movq -48(%rsi),%r15
  2304. movq -40(%rsi),%r14
  2305. movq -32(%rsi),%r13
  2306. movq -24(%rsi),%r12
  2307. movq -16(%rsi),%rbx
  2308. movq -8(%rsi),%rbp
  2309. leaq (%rsi),%rsp
  2310. L$point_addq_epilogue:
  2311. .byte 0xf3,0xc3
  2312. .globl _ecp_nistz256_point_add_affine
  2313. .private_extern _ecp_nistz256_point_add_affine
  2314. .p2align 5
  2315. _ecp_nistz256_point_add_affine:
  2316. leaq _OPENSSL_ia32cap_P(%rip),%rcx
  2317. movq 8(%rcx),%rcx
  2318. andl $0x80100,%ecx
  2319. cmpl $0x80100,%ecx
  2320. je L$point_add_affinex
  2321. pushq %rbp
  2322. pushq %rbx
  2323. pushq %r12
  2324. pushq %r13
  2325. pushq %r14
  2326. pushq %r15
  2327. subq $480+8,%rsp
  2328. L$add_affineq_body:
  2329. movdqu 0(%rsi),%xmm0
  2330. movq %rdx,%rbx
  2331. movdqu 16(%rsi),%xmm1
  2332. movdqu 32(%rsi),%xmm2
  2333. movdqu 48(%rsi),%xmm3
  2334. movdqu 64(%rsi),%xmm4
  2335. movdqu 80(%rsi),%xmm5
  2336. movq 64+0(%rsi),%rax
  2337. movq 64+8(%rsi),%r14
  2338. movq 64+16(%rsi),%r15
  2339. movq 64+24(%rsi),%r8
  2340. movdqa %xmm0,320(%rsp)
  2341. movdqa %xmm1,320+16(%rsp)
  2342. movdqa %xmm2,352(%rsp)
  2343. movdqa %xmm3,352+16(%rsp)
  2344. movdqa %xmm4,384(%rsp)
  2345. movdqa %xmm5,384+16(%rsp)
  2346. por %xmm4,%xmm5
  2347. movdqu 0(%rbx),%xmm0
  2348. pshufd $0xb1,%xmm5,%xmm3
  2349. movdqu 16(%rbx),%xmm1
  2350. movdqu 32(%rbx),%xmm2
  2351. por %xmm3,%xmm5
  2352. movdqu 48(%rbx),%xmm3
  2353. movdqa %xmm0,416(%rsp)
  2354. pshufd $0x1e,%xmm5,%xmm4
  2355. movdqa %xmm1,416+16(%rsp)
  2356. por %xmm0,%xmm1
  2357. .byte 102,72,15,110,199
  2358. movdqa %xmm2,448(%rsp)
  2359. movdqa %xmm3,448+16(%rsp)
  2360. por %xmm2,%xmm3
  2361. por %xmm4,%xmm5
  2362. pxor %xmm4,%xmm4
  2363. por %xmm1,%xmm3
  2364. leaq 64-0(%rsi),%rsi
  2365. leaq 32(%rsp),%rdi
  2366. call __ecp_nistz256_sqr_montq
  2367. pcmpeqd %xmm4,%xmm5
  2368. pshufd $0xb1,%xmm3,%xmm4
  2369. movq 0(%rbx),%rax
  2370. movq %r12,%r9
  2371. por %xmm3,%xmm4
  2372. pshufd $0,%xmm5,%xmm5
  2373. pshufd $0x1e,%xmm4,%xmm3
  2374. movq %r13,%r10
  2375. por %xmm3,%xmm4
  2376. pxor %xmm3,%xmm3
  2377. movq %r14,%r11
  2378. pcmpeqd %xmm3,%xmm4
  2379. pshufd $0,%xmm4,%xmm4
  2380. leaq 32-0(%rsp),%rsi
  2381. movq %r15,%r12
  2382. leaq 0(%rsp),%rdi
  2383. call __ecp_nistz256_mul_montq
  2384. leaq 320(%rsp),%rbx
  2385. leaq 64(%rsp),%rdi
  2386. call __ecp_nistz256_sub_fromq
  2387. movq 384(%rsp),%rax
  2388. leaq 384(%rsp),%rbx
  2389. movq 0+32(%rsp),%r9
  2390. movq 8+32(%rsp),%r10
  2391. leaq 0+32(%rsp),%rsi
  2392. movq 16+32(%rsp),%r11
  2393. movq 24+32(%rsp),%r12
  2394. leaq 32(%rsp),%rdi
  2395. call __ecp_nistz256_mul_montq
  2396. movq 384(%rsp),%rax
  2397. leaq 384(%rsp),%rbx
  2398. movq 0+64(%rsp),%r9
  2399. movq 8+64(%rsp),%r10
  2400. leaq 0+64(%rsp),%rsi
  2401. movq 16+64(%rsp),%r11
  2402. movq 24+64(%rsp),%r12
  2403. leaq 288(%rsp),%rdi
  2404. call __ecp_nistz256_mul_montq
  2405. movq 448(%rsp),%rax
  2406. leaq 448(%rsp),%rbx
  2407. movq 0+32(%rsp),%r9
  2408. movq 8+32(%rsp),%r10
  2409. leaq 0+32(%rsp),%rsi
  2410. movq 16+32(%rsp),%r11
  2411. movq 24+32(%rsp),%r12
  2412. leaq 32(%rsp),%rdi
  2413. call __ecp_nistz256_mul_montq
  2414. leaq 352(%rsp),%rbx
  2415. leaq 96(%rsp),%rdi
  2416. call __ecp_nistz256_sub_fromq
  2417. movq 0+64(%rsp),%rax
  2418. movq 8+64(%rsp),%r14
  2419. leaq 0+64(%rsp),%rsi
  2420. movq 16+64(%rsp),%r15
  2421. movq 24+64(%rsp),%r8
  2422. leaq 128(%rsp),%rdi
  2423. call __ecp_nistz256_sqr_montq
  2424. movq 0+96(%rsp),%rax
  2425. movq 8+96(%rsp),%r14
  2426. leaq 0+96(%rsp),%rsi
  2427. movq 16+96(%rsp),%r15
  2428. movq 24+96(%rsp),%r8
  2429. leaq 192(%rsp),%rdi
  2430. call __ecp_nistz256_sqr_montq
  2431. movq 128(%rsp),%rax
  2432. leaq 128(%rsp),%rbx
  2433. movq 0+64(%rsp),%r9
  2434. movq 8+64(%rsp),%r10
  2435. leaq 0+64(%rsp),%rsi
  2436. movq 16+64(%rsp),%r11
  2437. movq 24+64(%rsp),%r12
  2438. leaq 160(%rsp),%rdi
  2439. call __ecp_nistz256_mul_montq
  2440. movq 320(%rsp),%rax
  2441. leaq 320(%rsp),%rbx
  2442. movq 0+128(%rsp),%r9
  2443. movq 8+128(%rsp),%r10
  2444. leaq 0+128(%rsp),%rsi
  2445. movq 16+128(%rsp),%r11
  2446. movq 24+128(%rsp),%r12
  2447. leaq 0(%rsp),%rdi
  2448. call __ecp_nistz256_mul_montq
  2449. xorq %r11,%r11
  2450. addq %r12,%r12
  2451. leaq 192(%rsp),%rsi
  2452. adcq %r13,%r13
  2453. movq %r12,%rax
  2454. adcq %r8,%r8
  2455. adcq %r9,%r9
  2456. movq %r13,%rbp
  2457. adcq $0,%r11
  2458. subq $-1,%r12
  2459. movq %r8,%rcx
  2460. sbbq %r14,%r13
  2461. sbbq $0,%r8
  2462. movq %r9,%r10
  2463. sbbq %r15,%r9
  2464. sbbq $0,%r11
  2465. cmovcq %rax,%r12
  2466. movq 0(%rsi),%rax
  2467. cmovcq %rbp,%r13
  2468. movq 8(%rsi),%rbp
  2469. cmovcq %rcx,%r8
  2470. movq 16(%rsi),%rcx
  2471. cmovcq %r10,%r9
  2472. movq 24(%rsi),%r10
  2473. call __ecp_nistz256_subq
  2474. leaq 160(%rsp),%rbx
  2475. leaq 224(%rsp),%rdi
  2476. call __ecp_nistz256_sub_fromq
  2477. movq 0+0(%rsp),%rax
  2478. movq 0+8(%rsp),%rbp
  2479. movq 0+16(%rsp),%rcx
  2480. movq 0+24(%rsp),%r10
  2481. leaq 64(%rsp),%rdi
  2482. call __ecp_nistz256_subq
  2483. movq %r12,0(%rdi)
  2484. movq %r13,8(%rdi)
  2485. movq %r8,16(%rdi)
  2486. movq %r9,24(%rdi)
  2487. movq 352(%rsp),%rax
  2488. leaq 352(%rsp),%rbx
  2489. movq 0+160(%rsp),%r9
  2490. movq 8+160(%rsp),%r10
  2491. leaq 0+160(%rsp),%rsi
  2492. movq 16+160(%rsp),%r11
  2493. movq 24+160(%rsp),%r12
  2494. leaq 32(%rsp),%rdi
  2495. call __ecp_nistz256_mul_montq
  2496. movq 96(%rsp),%rax
  2497. leaq 96(%rsp),%rbx
  2498. movq 0+64(%rsp),%r9
  2499. movq 8+64(%rsp),%r10
  2500. leaq 0+64(%rsp),%rsi
  2501. movq 16+64(%rsp),%r11
  2502. movq 24+64(%rsp),%r12
  2503. leaq 64(%rsp),%rdi
  2504. call __ecp_nistz256_mul_montq
  2505. leaq 32(%rsp),%rbx
  2506. leaq 256(%rsp),%rdi
  2507. call __ecp_nistz256_sub_fromq
  2508. .byte 102,72,15,126,199
  2509. movdqa %xmm5,%xmm0
  2510. movdqa %xmm5,%xmm1
  2511. pandn 288(%rsp),%xmm0
  2512. movdqa %xmm5,%xmm2
  2513. pandn 288+16(%rsp),%xmm1
  2514. movdqa %xmm5,%xmm3
  2515. pand L$ONE_mont(%rip),%xmm2
  2516. pand L$ONE_mont+16(%rip),%xmm3
  2517. por %xmm0,%xmm2
  2518. por %xmm1,%xmm3
  2519. movdqa %xmm4,%xmm0
  2520. movdqa %xmm4,%xmm1
  2521. pandn %xmm2,%xmm0
  2522. movdqa %xmm4,%xmm2
  2523. pandn %xmm3,%xmm1
  2524. movdqa %xmm4,%xmm3
  2525. pand 384(%rsp),%xmm2
  2526. pand 384+16(%rsp),%xmm3
  2527. por %xmm0,%xmm2
  2528. por %xmm1,%xmm3
  2529. movdqu %xmm2,64(%rdi)
  2530. movdqu %xmm3,80(%rdi)
  2531. movdqa %xmm5,%xmm0
  2532. movdqa %xmm5,%xmm1
  2533. pandn 224(%rsp),%xmm0
  2534. movdqa %xmm5,%xmm2
  2535. pandn 224+16(%rsp),%xmm1
  2536. movdqa %xmm5,%xmm3
  2537. pand 416(%rsp),%xmm2
  2538. pand 416+16(%rsp),%xmm3
  2539. por %xmm0,%xmm2
  2540. por %xmm1,%xmm3
  2541. movdqa %xmm4,%xmm0
  2542. movdqa %xmm4,%xmm1
  2543. pandn %xmm2,%xmm0
  2544. movdqa %xmm4,%xmm2
  2545. pandn %xmm3,%xmm1
  2546. movdqa %xmm4,%xmm3
  2547. pand 320(%rsp),%xmm2
  2548. pand 320+16(%rsp),%xmm3
  2549. por %xmm0,%xmm2
  2550. por %xmm1,%xmm3
  2551. movdqu %xmm2,0(%rdi)
  2552. movdqu %xmm3,16(%rdi)
  2553. movdqa %xmm5,%xmm0
  2554. movdqa %xmm5,%xmm1
  2555. pandn 256(%rsp),%xmm0
  2556. movdqa %xmm5,%xmm2
  2557. pandn 256+16(%rsp),%xmm1
  2558. movdqa %xmm5,%xmm3
  2559. pand 448(%rsp),%xmm2
  2560. pand 448+16(%rsp),%xmm3
  2561. por %xmm0,%xmm2
  2562. por %xmm1,%xmm3
  2563. movdqa %xmm4,%xmm0
  2564. movdqa %xmm4,%xmm1
  2565. pandn %xmm2,%xmm0
  2566. movdqa %xmm4,%xmm2
  2567. pandn %xmm3,%xmm1
  2568. movdqa %xmm4,%xmm3
  2569. pand 352(%rsp),%xmm2
  2570. pand 352+16(%rsp),%xmm3
  2571. por %xmm0,%xmm2
  2572. por %xmm1,%xmm3
  2573. movdqu %xmm2,32(%rdi)
  2574. movdqu %xmm3,48(%rdi)
  2575. leaq 480+56(%rsp),%rsi
  2576. movq -48(%rsi),%r15
  2577. movq -40(%rsi),%r14
  2578. movq -32(%rsi),%r13
  2579. movq -24(%rsi),%r12
  2580. movq -16(%rsi),%rbx
  2581. movq -8(%rsi),%rbp
  2582. leaq (%rsi),%rsp
  2583. L$add_affineq_epilogue:
  2584. .byte 0xf3,0xc3
  2585. .p2align 5
  2586. __ecp_nistz256_add_tox:
  2587. xorq %r11,%r11
  2588. adcq 0(%rbx),%r12
  2589. adcq 8(%rbx),%r13
  2590. movq %r12,%rax
  2591. adcq 16(%rbx),%r8
  2592. adcq 24(%rbx),%r9
  2593. movq %r13,%rbp
  2594. adcq $0,%r11
  2595. xorq %r10,%r10
  2596. sbbq $-1,%r12
  2597. movq %r8,%rcx
  2598. sbbq %r14,%r13
  2599. sbbq $0,%r8
  2600. movq %r9,%r10
  2601. sbbq %r15,%r9
  2602. sbbq $0,%r11
  2603. cmovcq %rax,%r12
  2604. cmovcq %rbp,%r13
  2605. movq %r12,0(%rdi)
  2606. cmovcq %rcx,%r8
  2607. movq %r13,8(%rdi)
  2608. cmovcq %r10,%r9
  2609. movq %r8,16(%rdi)
  2610. movq %r9,24(%rdi)
  2611. .byte 0xf3,0xc3
  2612. .p2align 5
  2613. __ecp_nistz256_sub_fromx:
  2614. xorq %r11,%r11
  2615. sbbq 0(%rbx),%r12
  2616. sbbq 8(%rbx),%r13
  2617. movq %r12,%rax
  2618. sbbq 16(%rbx),%r8
  2619. sbbq 24(%rbx),%r9
  2620. movq %r13,%rbp
  2621. sbbq $0,%r11
  2622. xorq %r10,%r10
  2623. adcq $-1,%r12
  2624. movq %r8,%rcx
  2625. adcq %r14,%r13
  2626. adcq $0,%r8
  2627. movq %r9,%r10
  2628. adcq %r15,%r9
  2629. btq $0,%r11
  2630. cmovncq %rax,%r12
  2631. cmovncq %rbp,%r13
  2632. movq %r12,0(%rdi)
  2633. cmovncq %rcx,%r8
  2634. movq %r13,8(%rdi)
  2635. cmovncq %r10,%r9
  2636. movq %r8,16(%rdi)
  2637. movq %r9,24(%rdi)
  2638. .byte 0xf3,0xc3
  2639. .p2align 5
  2640. __ecp_nistz256_subx:
  2641. xorq %r11,%r11
  2642. sbbq %r12,%rax
  2643. sbbq %r13,%rbp
  2644. movq %rax,%r12
  2645. sbbq %r8,%rcx
  2646. sbbq %r9,%r10
  2647. movq %rbp,%r13
  2648. sbbq $0,%r11
  2649. xorq %r9,%r9
  2650. adcq $-1,%rax
  2651. movq %rcx,%r8
  2652. adcq %r14,%rbp
  2653. adcq $0,%rcx
  2654. movq %r10,%r9
  2655. adcq %r15,%r10
  2656. btq $0,%r11
  2657. cmovcq %rax,%r12
  2658. cmovcq %rbp,%r13
  2659. cmovcq %rcx,%r8
  2660. cmovcq %r10,%r9
  2661. .byte 0xf3,0xc3
  2662. .p2align 5
  2663. __ecp_nistz256_mul_by_2x:
  2664. xorq %r11,%r11
  2665. adcq %r12,%r12
  2666. adcq %r13,%r13
  2667. movq %r12,%rax
  2668. adcq %r8,%r8
  2669. adcq %r9,%r9
  2670. movq %r13,%rbp
  2671. adcq $0,%r11
  2672. xorq %r10,%r10
  2673. sbbq $-1,%r12
  2674. movq %r8,%rcx
  2675. sbbq %r14,%r13
  2676. sbbq $0,%r8
  2677. movq %r9,%r10
  2678. sbbq %r15,%r9
  2679. sbbq $0,%r11
  2680. cmovcq %rax,%r12
  2681. cmovcq %rbp,%r13
  2682. movq %r12,0(%rdi)
  2683. cmovcq %rcx,%r8
  2684. movq %r13,8(%rdi)
  2685. cmovcq %r10,%r9
  2686. movq %r8,16(%rdi)
  2687. movq %r9,24(%rdi)
  2688. .byte 0xf3,0xc3
  2689. .p2align 5
  2690. ecp_nistz256_point_doublex:
  2691. L$point_doublex:
  2692. pushq %rbp
  2693. pushq %rbx
  2694. pushq %r12
  2695. pushq %r13
  2696. pushq %r14
  2697. pushq %r15
  2698. subq $160+8,%rsp
  2699. L$point_doublex_body:
  2700. L$point_double_shortcutx:
  2701. movdqu 0(%rsi),%xmm0
  2702. movq %rsi,%rbx
  2703. movdqu 16(%rsi),%xmm1
  2704. movq 32+0(%rsi),%r12
  2705. movq 32+8(%rsi),%r13
  2706. movq 32+16(%rsi),%r8
  2707. movq 32+24(%rsi),%r9
  2708. movq L$poly+8(%rip),%r14
  2709. movq L$poly+24(%rip),%r15
  2710. movdqa %xmm0,96(%rsp)
  2711. movdqa %xmm1,96+16(%rsp)
  2712. leaq 32(%rdi),%r10
  2713. leaq 64(%rdi),%r11
  2714. .byte 102,72,15,110,199
  2715. .byte 102,73,15,110,202
  2716. .byte 102,73,15,110,211
  2717. leaq 0(%rsp),%rdi
  2718. call __ecp_nistz256_mul_by_2x
  2719. movq 64+0(%rsi),%rdx
  2720. movq 64+8(%rsi),%r14
  2721. movq 64+16(%rsi),%r15
  2722. movq 64+24(%rsi),%r8
  2723. leaq 64-128(%rsi),%rsi
  2724. leaq 64(%rsp),%rdi
  2725. call __ecp_nistz256_sqr_montx
  2726. movq 0+0(%rsp),%rdx
  2727. movq 8+0(%rsp),%r14
  2728. leaq -128+0(%rsp),%rsi
  2729. movq 16+0(%rsp),%r15
  2730. movq 24+0(%rsp),%r8
  2731. leaq 0(%rsp),%rdi
  2732. call __ecp_nistz256_sqr_montx
  2733. movq 32(%rbx),%rdx
  2734. movq 64+0(%rbx),%r9
  2735. movq 64+8(%rbx),%r10
  2736. movq 64+16(%rbx),%r11
  2737. movq 64+24(%rbx),%r12
  2738. leaq 64-128(%rbx),%rsi
  2739. leaq 32(%rbx),%rbx
  2740. .byte 102,72,15,126,215
  2741. call __ecp_nistz256_mul_montx
  2742. call __ecp_nistz256_mul_by_2x
  2743. movq 96+0(%rsp),%r12
  2744. movq 96+8(%rsp),%r13
  2745. leaq 64(%rsp),%rbx
  2746. movq 96+16(%rsp),%r8
  2747. movq 96+24(%rsp),%r9
  2748. leaq 32(%rsp),%rdi
  2749. call __ecp_nistz256_add_tox
  2750. movq 96+0(%rsp),%r12
  2751. movq 96+8(%rsp),%r13
  2752. leaq 64(%rsp),%rbx
  2753. movq 96+16(%rsp),%r8
  2754. movq 96+24(%rsp),%r9
  2755. leaq 64(%rsp),%rdi
  2756. call __ecp_nistz256_sub_fromx
  2757. movq 0+0(%rsp),%rdx
  2758. movq 8+0(%rsp),%r14
  2759. leaq -128+0(%rsp),%rsi
  2760. movq 16+0(%rsp),%r15
  2761. movq 24+0(%rsp),%r8
  2762. .byte 102,72,15,126,207
  2763. call __ecp_nistz256_sqr_montx
  2764. xorq %r9,%r9
  2765. movq %r12,%rax
  2766. addq $-1,%r12
  2767. movq %r13,%r10
  2768. adcq %rsi,%r13
  2769. movq %r14,%rcx
  2770. adcq $0,%r14
  2771. movq %r15,%r8
  2772. adcq %rbp,%r15
  2773. adcq $0,%r9
  2774. xorq %rsi,%rsi
  2775. testq $1,%rax
  2776. cmovzq %rax,%r12
  2777. cmovzq %r10,%r13
  2778. cmovzq %rcx,%r14
  2779. cmovzq %r8,%r15
  2780. cmovzq %rsi,%r9
  2781. movq %r13,%rax
  2782. shrq $1,%r12
  2783. shlq $63,%rax
  2784. movq %r14,%r10
  2785. shrq $1,%r13
  2786. orq %rax,%r12
  2787. shlq $63,%r10
  2788. movq %r15,%rcx
  2789. shrq $1,%r14
  2790. orq %r10,%r13
  2791. shlq $63,%rcx
  2792. movq %r12,0(%rdi)
  2793. shrq $1,%r15
  2794. movq %r13,8(%rdi)
  2795. shlq $63,%r9
  2796. orq %rcx,%r14
  2797. orq %r9,%r15
  2798. movq %r14,16(%rdi)
  2799. movq %r15,24(%rdi)
  2800. movq 64(%rsp),%rdx
  2801. leaq 64(%rsp),%rbx
  2802. movq 0+32(%rsp),%r9
  2803. movq 8+32(%rsp),%r10
  2804. leaq -128+32(%rsp),%rsi
  2805. movq 16+32(%rsp),%r11
  2806. movq 24+32(%rsp),%r12
  2807. leaq 32(%rsp),%rdi
  2808. call __ecp_nistz256_mul_montx
  2809. leaq 128(%rsp),%rdi
  2810. call __ecp_nistz256_mul_by_2x
  2811. leaq 32(%rsp),%rbx
  2812. leaq 32(%rsp),%rdi
  2813. call __ecp_nistz256_add_tox
  2814. movq 96(%rsp),%rdx
  2815. leaq 96(%rsp),%rbx
  2816. movq 0+0(%rsp),%r9
  2817. movq 8+0(%rsp),%r10
  2818. leaq -128+0(%rsp),%rsi
  2819. movq 16+0(%rsp),%r11
  2820. movq 24+0(%rsp),%r12
  2821. leaq 0(%rsp),%rdi
  2822. call __ecp_nistz256_mul_montx
  2823. leaq 128(%rsp),%rdi
  2824. call __ecp_nistz256_mul_by_2x
  2825. movq 0+32(%rsp),%rdx
  2826. movq 8+32(%rsp),%r14
  2827. leaq -128+32(%rsp),%rsi
  2828. movq 16+32(%rsp),%r15
  2829. movq 24+32(%rsp),%r8
  2830. .byte 102,72,15,126,199
  2831. call __ecp_nistz256_sqr_montx
  2832. leaq 128(%rsp),%rbx
  2833. movq %r14,%r8
  2834. movq %r15,%r9
  2835. movq %rsi,%r14
  2836. movq %rbp,%r15
  2837. call __ecp_nistz256_sub_fromx
  2838. movq 0+0(%rsp),%rax
  2839. movq 0+8(%rsp),%rbp
  2840. movq 0+16(%rsp),%rcx
  2841. movq 0+24(%rsp),%r10
  2842. leaq 0(%rsp),%rdi
  2843. call __ecp_nistz256_subx
  2844. movq 32(%rsp),%rdx
  2845. leaq 32(%rsp),%rbx
  2846. movq %r12,%r14
  2847. xorl %ecx,%ecx
  2848. movq %r12,0+0(%rsp)
  2849. movq %r13,%r10
  2850. movq %r13,0+8(%rsp)
  2851. cmovzq %r8,%r11
  2852. movq %r8,0+16(%rsp)
  2853. leaq 0-128(%rsp),%rsi
  2854. cmovzq %r9,%r12
  2855. movq %r9,0+24(%rsp)
  2856. movq %r14,%r9
  2857. leaq 0(%rsp),%rdi
  2858. call __ecp_nistz256_mul_montx
  2859. .byte 102,72,15,126,203
  2860. .byte 102,72,15,126,207
  2861. call __ecp_nistz256_sub_fromx
  2862. leaq 160+56(%rsp),%rsi
  2863. movq -48(%rsi),%r15
  2864. movq -40(%rsi),%r14
  2865. movq -32(%rsi),%r13
  2866. movq -24(%rsi),%r12
  2867. movq -16(%rsi),%rbx
  2868. movq -8(%rsi),%rbp
  2869. leaq (%rsi),%rsp
  2870. L$point_doublex_epilogue:
  2871. .byte 0xf3,0xc3
  2872. .p2align 5
  2873. ecp_nistz256_point_addx:
  2874. L$point_addx:
  2875. pushq %rbp
  2876. pushq %rbx
  2877. pushq %r12
  2878. pushq %r13
  2879. pushq %r14
  2880. pushq %r15
  2881. subq $576+8,%rsp
  2882. L$point_addx_body:
  2883. movdqu 0(%rsi),%xmm0
  2884. movdqu 16(%rsi),%xmm1
  2885. movdqu 32(%rsi),%xmm2
  2886. movdqu 48(%rsi),%xmm3
  2887. movdqu 64(%rsi),%xmm4
  2888. movdqu 80(%rsi),%xmm5
  2889. movq %rsi,%rbx
  2890. movq %rdx,%rsi
  2891. movdqa %xmm0,384(%rsp)
  2892. movdqa %xmm1,384+16(%rsp)
  2893. movdqa %xmm2,416(%rsp)
  2894. movdqa %xmm3,416+16(%rsp)
  2895. movdqa %xmm4,448(%rsp)
  2896. movdqa %xmm5,448+16(%rsp)
  2897. por %xmm4,%xmm5
  2898. movdqu 0(%rsi),%xmm0
  2899. pshufd $0xb1,%xmm5,%xmm3
  2900. movdqu 16(%rsi),%xmm1
  2901. movdqu 32(%rsi),%xmm2
  2902. por %xmm3,%xmm5
  2903. movdqu 48(%rsi),%xmm3
  2904. movq 64+0(%rsi),%rdx
  2905. movq 64+8(%rsi),%r14
  2906. movq 64+16(%rsi),%r15
  2907. movq 64+24(%rsi),%r8
  2908. movdqa %xmm0,480(%rsp)
  2909. pshufd $0x1e,%xmm5,%xmm4
  2910. movdqa %xmm1,480+16(%rsp)
  2911. movdqu 64(%rsi),%xmm0
  2912. movdqu 80(%rsi),%xmm1
  2913. movdqa %xmm2,512(%rsp)
  2914. movdqa %xmm3,512+16(%rsp)
  2915. por %xmm4,%xmm5
  2916. pxor %xmm4,%xmm4
  2917. por %xmm0,%xmm1
  2918. .byte 102,72,15,110,199
  2919. leaq 64-128(%rsi),%rsi
  2920. movq %rdx,544+0(%rsp)
  2921. movq %r14,544+8(%rsp)
  2922. movq %r15,544+16(%rsp)
  2923. movq %r8,544+24(%rsp)
  2924. leaq 96(%rsp),%rdi
  2925. call __ecp_nistz256_sqr_montx
  2926. pcmpeqd %xmm4,%xmm5
  2927. pshufd $0xb1,%xmm1,%xmm4
  2928. por %xmm1,%xmm4
  2929. pshufd $0,%xmm5,%xmm5
  2930. pshufd $0x1e,%xmm4,%xmm3
  2931. por %xmm3,%xmm4
  2932. pxor %xmm3,%xmm3
  2933. pcmpeqd %xmm3,%xmm4
  2934. pshufd $0,%xmm4,%xmm4
  2935. movq 64+0(%rbx),%rdx
  2936. movq 64+8(%rbx),%r14
  2937. movq 64+16(%rbx),%r15
  2938. movq 64+24(%rbx),%r8
  2939. .byte 102,72,15,110,203
  2940. leaq 64-128(%rbx),%rsi
  2941. leaq 32(%rsp),%rdi
  2942. call __ecp_nistz256_sqr_montx
  2943. movq 544(%rsp),%rdx
  2944. leaq 544(%rsp),%rbx
  2945. movq 0+96(%rsp),%r9
  2946. movq 8+96(%rsp),%r10
  2947. leaq -128+96(%rsp),%rsi
  2948. movq 16+96(%rsp),%r11
  2949. movq 24+96(%rsp),%r12
  2950. leaq 224(%rsp),%rdi
  2951. call __ecp_nistz256_mul_montx
  2952. movq 448(%rsp),%rdx
  2953. leaq 448(%rsp),%rbx
  2954. movq 0+32(%rsp),%r9
  2955. movq 8+32(%rsp),%r10
  2956. leaq -128+32(%rsp),%rsi
  2957. movq 16+32(%rsp),%r11
  2958. movq 24+32(%rsp),%r12
  2959. leaq 256(%rsp),%rdi
  2960. call __ecp_nistz256_mul_montx
  2961. movq 416(%rsp),%rdx
  2962. leaq 416(%rsp),%rbx
  2963. movq 0+224(%rsp),%r9
  2964. movq 8+224(%rsp),%r10
  2965. leaq -128+224(%rsp),%rsi
  2966. movq 16+224(%rsp),%r11
  2967. movq 24+224(%rsp),%r12
  2968. leaq 224(%rsp),%rdi
  2969. call __ecp_nistz256_mul_montx
  2970. movq 512(%rsp),%rdx
  2971. leaq 512(%rsp),%rbx
  2972. movq 0+256(%rsp),%r9
  2973. movq 8+256(%rsp),%r10
  2974. leaq -128+256(%rsp),%rsi
  2975. movq 16+256(%rsp),%r11
  2976. movq 24+256(%rsp),%r12
  2977. leaq 256(%rsp),%rdi
  2978. call __ecp_nistz256_mul_montx
  2979. leaq 224(%rsp),%rbx
  2980. leaq 64(%rsp),%rdi
  2981. call __ecp_nistz256_sub_fromx
  2982. orq %r13,%r12
  2983. movdqa %xmm4,%xmm2
  2984. orq %r8,%r12
  2985. orq %r9,%r12
  2986. por %xmm5,%xmm2
  2987. .byte 102,73,15,110,220
  2988. movq 384(%rsp),%rdx
  2989. leaq 384(%rsp),%rbx
  2990. movq 0+96(%rsp),%r9
  2991. movq 8+96(%rsp),%r10
  2992. leaq -128+96(%rsp),%rsi
  2993. movq 16+96(%rsp),%r11
  2994. movq 24+96(%rsp),%r12
  2995. leaq 160(%rsp),%rdi
  2996. call __ecp_nistz256_mul_montx
  2997. movq 480(%rsp),%rdx
  2998. leaq 480(%rsp),%rbx
  2999. movq 0+32(%rsp),%r9
  3000. movq 8+32(%rsp),%r10
  3001. leaq -128+32(%rsp),%rsi
  3002. movq 16+32(%rsp),%r11
  3003. movq 24+32(%rsp),%r12
  3004. leaq 192(%rsp),%rdi
  3005. call __ecp_nistz256_mul_montx
  3006. leaq 160(%rsp),%rbx
  3007. leaq 0(%rsp),%rdi
  3008. call __ecp_nistz256_sub_fromx
  3009. orq %r13,%r12
  3010. orq %r8,%r12
  3011. orq %r9,%r12
  3012. .byte 102,73,15,126,208
  3013. .byte 102,73,15,126,217
  3014. orq %r8,%r12
  3015. .byte 0x3e
  3016. jnz L$add_proceedx
  3017. testq %r9,%r9
  3018. jz L$add_doublex
  3019. .byte 102,72,15,126,199
  3020. pxor %xmm0,%xmm0
  3021. movdqu %xmm0,0(%rdi)
  3022. movdqu %xmm0,16(%rdi)
  3023. movdqu %xmm0,32(%rdi)
  3024. movdqu %xmm0,48(%rdi)
  3025. movdqu %xmm0,64(%rdi)
  3026. movdqu %xmm0,80(%rdi)
  3027. jmp L$add_donex
  3028. .p2align 5
  3029. L$add_doublex:
  3030. .byte 102,72,15,126,206
  3031. .byte 102,72,15,126,199
  3032. addq $416,%rsp
  3033. jmp L$point_double_shortcutx
  3034. .p2align 5
  3035. L$add_proceedx:
  3036. movq 0+64(%rsp),%rdx
  3037. movq 8+64(%rsp),%r14
  3038. leaq -128+64(%rsp),%rsi
  3039. movq 16+64(%rsp),%r15
  3040. movq 24+64(%rsp),%r8
  3041. leaq 96(%rsp),%rdi
  3042. call __ecp_nistz256_sqr_montx
  3043. movq 448(%rsp),%rdx
  3044. leaq 448(%rsp),%rbx
  3045. movq 0+0(%rsp),%r9
  3046. movq 8+0(%rsp),%r10
  3047. leaq -128+0(%rsp),%rsi
  3048. movq 16+0(%rsp),%r11
  3049. movq 24+0(%rsp),%r12
  3050. leaq 352(%rsp),%rdi
  3051. call __ecp_nistz256_mul_montx
  3052. movq 0+0(%rsp),%rdx
  3053. movq 8+0(%rsp),%r14
  3054. leaq -128+0(%rsp),%rsi
  3055. movq 16+0(%rsp),%r15
  3056. movq 24+0(%rsp),%r8
  3057. leaq 32(%rsp),%rdi
  3058. call __ecp_nistz256_sqr_montx
  3059. movq 544(%rsp),%rdx
  3060. leaq 544(%rsp),%rbx
  3061. movq 0+352(%rsp),%r9
  3062. movq 8+352(%rsp),%r10
  3063. leaq -128+352(%rsp),%rsi
  3064. movq 16+352(%rsp),%r11
  3065. movq 24+352(%rsp),%r12
  3066. leaq 352(%rsp),%rdi
  3067. call __ecp_nistz256_mul_montx
  3068. movq 0(%rsp),%rdx
  3069. leaq 0(%rsp),%rbx
  3070. movq 0+32(%rsp),%r9
  3071. movq 8+32(%rsp),%r10
  3072. leaq -128+32(%rsp),%rsi
  3073. movq 16+32(%rsp),%r11
  3074. movq 24+32(%rsp),%r12
  3075. leaq 128(%rsp),%rdi
  3076. call __ecp_nistz256_mul_montx
  3077. movq 160(%rsp),%rdx
  3078. leaq 160(%rsp),%rbx
  3079. movq 0+32(%rsp),%r9
  3080. movq 8+32(%rsp),%r10
  3081. leaq -128+32(%rsp),%rsi
  3082. movq 16+32(%rsp),%r11
  3083. movq 24+32(%rsp),%r12
  3084. leaq 192(%rsp),%rdi
  3085. call __ecp_nistz256_mul_montx
  3086. xorq %r11,%r11
  3087. addq %r12,%r12
  3088. leaq 96(%rsp),%rsi
  3089. adcq %r13,%r13
  3090. movq %r12,%rax
  3091. adcq %r8,%r8
  3092. adcq %r9,%r9
  3093. movq %r13,%rbp
  3094. adcq $0,%r11
  3095. subq $-1,%r12
  3096. movq %r8,%rcx
  3097. sbbq %r14,%r13
  3098. sbbq $0,%r8
  3099. movq %r9,%r10
  3100. sbbq %r15,%r9
  3101. sbbq $0,%r11
  3102. cmovcq %rax,%r12
  3103. movq 0(%rsi),%rax
  3104. cmovcq %rbp,%r13
  3105. movq 8(%rsi),%rbp
  3106. cmovcq %rcx,%r8
  3107. movq 16(%rsi),%rcx
  3108. cmovcq %r10,%r9
  3109. movq 24(%rsi),%r10
  3110. call __ecp_nistz256_subx
  3111. leaq 128(%rsp),%rbx
  3112. leaq 288(%rsp),%rdi
  3113. call __ecp_nistz256_sub_fromx
  3114. movq 192+0(%rsp),%rax
  3115. movq 192+8(%rsp),%rbp
  3116. movq 192+16(%rsp),%rcx
  3117. movq 192+24(%rsp),%r10
  3118. leaq 320(%rsp),%rdi
  3119. call __ecp_nistz256_subx
  3120. movq %r12,0(%rdi)
  3121. movq %r13,8(%rdi)
  3122. movq %r8,16(%rdi)
  3123. movq %r9,24(%rdi)
  3124. movq 128(%rsp),%rdx
  3125. leaq 128(%rsp),%rbx
  3126. movq 0+224(%rsp),%r9
  3127. movq 8+224(%rsp),%r10
  3128. leaq -128+224(%rsp),%rsi
  3129. movq 16+224(%rsp),%r11
  3130. movq 24+224(%rsp),%r12
  3131. leaq 256(%rsp),%rdi
  3132. call __ecp_nistz256_mul_montx
  3133. movq 320(%rsp),%rdx
  3134. leaq 320(%rsp),%rbx
  3135. movq 0+64(%rsp),%r9
  3136. movq 8+64(%rsp),%r10
  3137. leaq -128+64(%rsp),%rsi
  3138. movq 16+64(%rsp),%r11
  3139. movq 24+64(%rsp),%r12
  3140. leaq 320(%rsp),%rdi
  3141. call __ecp_nistz256_mul_montx
  3142. leaq 256(%rsp),%rbx
  3143. leaq 320(%rsp),%rdi
  3144. call __ecp_nistz256_sub_fromx
  3145. .byte 102,72,15,126,199
  3146. movdqa %xmm5,%xmm0
  3147. movdqa %xmm5,%xmm1
  3148. pandn 352(%rsp),%xmm0
  3149. movdqa %xmm5,%xmm2
  3150. pandn 352+16(%rsp),%xmm1
  3151. movdqa %xmm5,%xmm3
  3152. pand 544(%rsp),%xmm2
  3153. pand 544+16(%rsp),%xmm3
  3154. por %xmm0,%xmm2
  3155. por %xmm1,%xmm3
  3156. movdqa %xmm4,%xmm0
  3157. movdqa %xmm4,%xmm1
  3158. pandn %xmm2,%xmm0
  3159. movdqa %xmm4,%xmm2
  3160. pandn %xmm3,%xmm1
  3161. movdqa %xmm4,%xmm3
  3162. pand 448(%rsp),%xmm2
  3163. pand 448+16(%rsp),%xmm3
  3164. por %xmm0,%xmm2
  3165. por %xmm1,%xmm3
  3166. movdqu %xmm2,64(%rdi)
  3167. movdqu %xmm3,80(%rdi)
  3168. movdqa %xmm5,%xmm0
  3169. movdqa %xmm5,%xmm1
  3170. pandn 288(%rsp),%xmm0
  3171. movdqa %xmm5,%xmm2
  3172. pandn 288+16(%rsp),%xmm1
  3173. movdqa %xmm5,%xmm3
  3174. pand 480(%rsp),%xmm2
  3175. pand 480+16(%rsp),%xmm3
  3176. por %xmm0,%xmm2
  3177. por %xmm1,%xmm3
  3178. movdqa %xmm4,%xmm0
  3179. movdqa %xmm4,%xmm1
  3180. pandn %xmm2,%xmm0
  3181. movdqa %xmm4,%xmm2
  3182. pandn %xmm3,%xmm1
  3183. movdqa %xmm4,%xmm3
  3184. pand 384(%rsp),%xmm2
  3185. pand 384+16(%rsp),%xmm3
  3186. por %xmm0,%xmm2
  3187. por %xmm1,%xmm3
  3188. movdqu %xmm2,0(%rdi)
  3189. movdqu %xmm3,16(%rdi)
  3190. movdqa %xmm5,%xmm0
  3191. movdqa %xmm5,%xmm1
  3192. pandn 320(%rsp),%xmm0
  3193. movdqa %xmm5,%xmm2
  3194. pandn 320+16(%rsp),%xmm1
  3195. movdqa %xmm5,%xmm3
  3196. pand 512(%rsp),%xmm2
  3197. pand 512+16(%rsp),%xmm3
  3198. por %xmm0,%xmm2
  3199. por %xmm1,%xmm3
  3200. movdqa %xmm4,%xmm0
  3201. movdqa %xmm4,%xmm1
  3202. pandn %xmm2,%xmm0
  3203. movdqa %xmm4,%xmm2
  3204. pandn %xmm3,%xmm1
  3205. movdqa %xmm4,%xmm3
  3206. pand 416(%rsp),%xmm2
  3207. pand 416+16(%rsp),%xmm3
  3208. por %xmm0,%xmm2
  3209. por %xmm1,%xmm3
  3210. movdqu %xmm2,32(%rdi)
  3211. movdqu %xmm3,48(%rdi)
  3212. L$add_donex:
  3213. leaq 576+56(%rsp),%rsi
  3214. movq -48(%rsi),%r15
  3215. movq -40(%rsi),%r14
  3216. movq -32(%rsi),%r13
  3217. movq -24(%rsi),%r12
  3218. movq -16(%rsi),%rbx
  3219. movq -8(%rsi),%rbp
  3220. leaq (%rsi),%rsp
  3221. L$point_addx_epilogue:
  3222. .byte 0xf3,0xc3
  3223. .p2align 5
  3224. ecp_nistz256_point_add_affinex:
  3225. L$point_add_affinex:
  3226. pushq %rbp
  3227. pushq %rbx
  3228. pushq %r12
  3229. pushq %r13
  3230. pushq %r14
  3231. pushq %r15
  3232. subq $480+8,%rsp
  3233. L$add_affinex_body:
  3234. movdqu 0(%rsi),%xmm0
  3235. movq %rdx,%rbx
  3236. movdqu 16(%rsi),%xmm1
  3237. movdqu 32(%rsi),%xmm2
  3238. movdqu 48(%rsi),%xmm3
  3239. movdqu 64(%rsi),%xmm4
  3240. movdqu 80(%rsi),%xmm5
  3241. movq 64+0(%rsi),%rdx
  3242. movq 64+8(%rsi),%r14
  3243. movq 64+16(%rsi),%r15
  3244. movq 64+24(%rsi),%r8
  3245. movdqa %xmm0,320(%rsp)
  3246. movdqa %xmm1,320+16(%rsp)
  3247. movdqa %xmm2,352(%rsp)
  3248. movdqa %xmm3,352+16(%rsp)
  3249. movdqa %xmm4,384(%rsp)
  3250. movdqa %xmm5,384+16(%rsp)
  3251. por %xmm4,%xmm5
  3252. movdqu 0(%rbx),%xmm0
  3253. pshufd $0xb1,%xmm5,%xmm3
  3254. movdqu 16(%rbx),%xmm1
  3255. movdqu 32(%rbx),%xmm2
  3256. por %xmm3,%xmm5
  3257. movdqu 48(%rbx),%xmm3
  3258. movdqa %xmm0,416(%rsp)
  3259. pshufd $0x1e,%xmm5,%xmm4
  3260. movdqa %xmm1,416+16(%rsp)
  3261. por %xmm0,%xmm1
  3262. .byte 102,72,15,110,199
  3263. movdqa %xmm2,448(%rsp)
  3264. movdqa %xmm3,448+16(%rsp)
  3265. por %xmm2,%xmm3
  3266. por %xmm4,%xmm5
  3267. pxor %xmm4,%xmm4
  3268. por %xmm1,%xmm3
  3269. leaq 64-128(%rsi),%rsi
  3270. leaq 32(%rsp),%rdi
  3271. call __ecp_nistz256_sqr_montx
  3272. pcmpeqd %xmm4,%xmm5
  3273. pshufd $0xb1,%xmm3,%xmm4
  3274. movq 0(%rbx),%rdx
  3275. movq %r12,%r9
  3276. por %xmm3,%xmm4
  3277. pshufd $0,%xmm5,%xmm5
  3278. pshufd $0x1e,%xmm4,%xmm3
  3279. movq %r13,%r10
  3280. por %xmm3,%xmm4
  3281. pxor %xmm3,%xmm3
  3282. movq %r14,%r11
  3283. pcmpeqd %xmm3,%xmm4
  3284. pshufd $0,%xmm4,%xmm4
  3285. leaq 32-128(%rsp),%rsi
  3286. movq %r15,%r12
  3287. leaq 0(%rsp),%rdi
  3288. call __ecp_nistz256_mul_montx
  3289. leaq 320(%rsp),%rbx
  3290. leaq 64(%rsp),%rdi
  3291. call __ecp_nistz256_sub_fromx
  3292. movq 384(%rsp),%rdx
  3293. leaq 384(%rsp),%rbx
  3294. movq 0+32(%rsp),%r9
  3295. movq 8+32(%rsp),%r10
  3296. leaq -128+32(%rsp),%rsi
  3297. movq 16+32(%rsp),%r11
  3298. movq 24+32(%rsp),%r12
  3299. leaq 32(%rsp),%rdi
  3300. call __ecp_nistz256_mul_montx
  3301. movq 384(%rsp),%rdx
  3302. leaq 384(%rsp),%rbx
  3303. movq 0+64(%rsp),%r9
  3304. movq 8+64(%rsp),%r10
  3305. leaq -128+64(%rsp),%rsi
  3306. movq 16+64(%rsp),%r11
  3307. movq 24+64(%rsp),%r12
  3308. leaq 288(%rsp),%rdi
  3309. call __ecp_nistz256_mul_montx
  3310. movq 448(%rsp),%rdx
  3311. leaq 448(%rsp),%rbx
  3312. movq 0+32(%rsp),%r9
  3313. movq 8+32(%rsp),%r10
  3314. leaq -128+32(%rsp),%rsi
  3315. movq 16+32(%rsp),%r11
  3316. movq 24+32(%rsp),%r12
  3317. leaq 32(%rsp),%rdi
  3318. call __ecp_nistz256_mul_montx
  3319. leaq 352(%rsp),%rbx
  3320. leaq 96(%rsp),%rdi
  3321. call __ecp_nistz256_sub_fromx
  3322. movq 0+64(%rsp),%rdx
  3323. movq 8+64(%rsp),%r14
  3324. leaq -128+64(%rsp),%rsi
  3325. movq 16+64(%rsp),%r15
  3326. movq 24+64(%rsp),%r8
  3327. leaq 128(%rsp),%rdi
  3328. call __ecp_nistz256_sqr_montx
  3329. movq 0+96(%rsp),%rdx
  3330. movq 8+96(%rsp),%r14
  3331. leaq -128+96(%rsp),%rsi
  3332. movq 16+96(%rsp),%r15
  3333. movq 24+96(%rsp),%r8
  3334. leaq 192(%rsp),%rdi
  3335. call __ecp_nistz256_sqr_montx
  3336. movq 128(%rsp),%rdx
  3337. leaq 128(%rsp),%rbx
  3338. movq 0+64(%rsp),%r9
  3339. movq 8+64(%rsp),%r10
  3340. leaq -128+64(%rsp),%rsi
  3341. movq 16+64(%rsp),%r11
  3342. movq 24+64(%rsp),%r12
  3343. leaq 160(%rsp),%rdi
  3344. call __ecp_nistz256_mul_montx
  3345. movq 320(%rsp),%rdx
  3346. leaq 320(%rsp),%rbx
  3347. movq 0+128(%rsp),%r9
  3348. movq 8+128(%rsp),%r10
  3349. leaq -128+128(%rsp),%rsi
  3350. movq 16+128(%rsp),%r11
  3351. movq 24+128(%rsp),%r12
  3352. leaq 0(%rsp),%rdi
  3353. call __ecp_nistz256_mul_montx
  3354. xorq %r11,%r11
  3355. addq %r12,%r12
  3356. leaq 192(%rsp),%rsi
  3357. adcq %r13,%r13
  3358. movq %r12,%rax
  3359. adcq %r8,%r8
  3360. adcq %r9,%r9
  3361. movq %r13,%rbp
  3362. adcq $0,%r11
  3363. subq $-1,%r12
  3364. movq %r8,%rcx
  3365. sbbq %r14,%r13
  3366. sbbq $0,%r8
  3367. movq %r9,%r10
  3368. sbbq %r15,%r9
  3369. sbbq $0,%r11
  3370. cmovcq %rax,%r12
  3371. movq 0(%rsi),%rax
  3372. cmovcq %rbp,%r13
  3373. movq 8(%rsi),%rbp
  3374. cmovcq %rcx,%r8
  3375. movq 16(%rsi),%rcx
  3376. cmovcq %r10,%r9
  3377. movq 24(%rsi),%r10
  3378. call __ecp_nistz256_subx
  3379. leaq 160(%rsp),%rbx
  3380. leaq 224(%rsp),%rdi
  3381. call __ecp_nistz256_sub_fromx
  3382. movq 0+0(%rsp),%rax
  3383. movq 0+8(%rsp),%rbp
  3384. movq 0+16(%rsp),%rcx
  3385. movq 0+24(%rsp),%r10
  3386. leaq 64(%rsp),%rdi
  3387. call __ecp_nistz256_subx
  3388. movq %r12,0(%rdi)
  3389. movq %r13,8(%rdi)
  3390. movq %r8,16(%rdi)
  3391. movq %r9,24(%rdi)
  3392. movq 352(%rsp),%rdx
  3393. leaq 352(%rsp),%rbx
  3394. movq 0+160(%rsp),%r9
  3395. movq 8+160(%rsp),%r10
  3396. leaq -128+160(%rsp),%rsi
  3397. movq 16+160(%rsp),%r11
  3398. movq 24+160(%rsp),%r12
  3399. leaq 32(%rsp),%rdi
  3400. call __ecp_nistz256_mul_montx
  3401. movq 96(%rsp),%rdx
  3402. leaq 96(%rsp),%rbx
  3403. movq 0+64(%rsp),%r9
  3404. movq 8+64(%rsp),%r10
  3405. leaq -128+64(%rsp),%rsi
  3406. movq 16+64(%rsp),%r11
  3407. movq 24+64(%rsp),%r12
  3408. leaq 64(%rsp),%rdi
  3409. call __ecp_nistz256_mul_montx
  3410. leaq 32(%rsp),%rbx
  3411. leaq 256(%rsp),%rdi
  3412. call __ecp_nistz256_sub_fromx
  3413. .byte 102,72,15,126,199
  3414. movdqa %xmm5,%xmm0
  3415. movdqa %xmm5,%xmm1
  3416. pandn 288(%rsp),%xmm0
  3417. movdqa %xmm5,%xmm2
  3418. pandn 288+16(%rsp),%xmm1
  3419. movdqa %xmm5,%xmm3
  3420. pand L$ONE_mont(%rip),%xmm2
  3421. pand L$ONE_mont+16(%rip),%xmm3
  3422. por %xmm0,%xmm2
  3423. por %xmm1,%xmm3
  3424. movdqa %xmm4,%xmm0
  3425. movdqa %xmm4,%xmm1
  3426. pandn %xmm2,%xmm0
  3427. movdqa %xmm4,%xmm2
  3428. pandn %xmm3,%xmm1
  3429. movdqa %xmm4,%xmm3
  3430. pand 384(%rsp),%xmm2
  3431. pand 384+16(%rsp),%xmm3
  3432. por %xmm0,%xmm2
  3433. por %xmm1,%xmm3
  3434. movdqu %xmm2,64(%rdi)
  3435. movdqu %xmm3,80(%rdi)
  3436. movdqa %xmm5,%xmm0
  3437. movdqa %xmm5,%xmm1
  3438. pandn 224(%rsp),%xmm0
  3439. movdqa %xmm5,%xmm2
  3440. pandn 224+16(%rsp),%xmm1
  3441. movdqa %xmm5,%xmm3
  3442. pand 416(%rsp),%xmm2
  3443. pand 416+16(%rsp),%xmm3
  3444. por %xmm0,%xmm2
  3445. por %xmm1,%xmm3
  3446. movdqa %xmm4,%xmm0
  3447. movdqa %xmm4,%xmm1
  3448. pandn %xmm2,%xmm0
  3449. movdqa %xmm4,%xmm2
  3450. pandn %xmm3,%xmm1
  3451. movdqa %xmm4,%xmm3
  3452. pand 320(%rsp),%xmm2
  3453. pand 320+16(%rsp),%xmm3
  3454. por %xmm0,%xmm2
  3455. por %xmm1,%xmm3
  3456. movdqu %xmm2,0(%rdi)
  3457. movdqu %xmm3,16(%rdi)
  3458. movdqa %xmm5,%xmm0
  3459. movdqa %xmm5,%xmm1
  3460. pandn 256(%rsp),%xmm0
  3461. movdqa %xmm5,%xmm2
  3462. pandn 256+16(%rsp),%xmm1
  3463. movdqa %xmm5,%xmm3
  3464. pand 448(%rsp),%xmm2
  3465. pand 448+16(%rsp),%xmm3
  3466. por %xmm0,%xmm2
  3467. por %xmm1,%xmm3
  3468. movdqa %xmm4,%xmm0
  3469. movdqa %xmm4,%xmm1
  3470. pandn %xmm2,%xmm0
  3471. movdqa %xmm4,%xmm2
  3472. pandn %xmm3,%xmm1
  3473. movdqa %xmm4,%xmm3
  3474. pand 352(%rsp),%xmm2
  3475. pand 352+16(%rsp),%xmm3
  3476. por %xmm0,%xmm2
  3477. por %xmm1,%xmm3
  3478. movdqu %xmm2,32(%rdi)
  3479. movdqu %xmm3,48(%rdi)
  3480. leaq 480+56(%rsp),%rsi
  3481. movq -48(%rsi),%r15
  3482. movq -40(%rsi),%r14
  3483. movq -32(%rsi),%r13
  3484. movq -24(%rsi),%r12
  3485. movq -16(%rsi),%rbx
  3486. movq -8(%rsi),%rbp
  3487. leaq (%rsi),%rsp
  3488. L$add_affinex_epilogue:
  3489. .byte 0xf3,0xc3
  3490. #endif