p256-x86_64-asm.S 76 KB

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