Path: blob/main/sys/crypto/openssl/amd64/x86_64-mont.S
39482 views
/* Do not modify. This file is auto-generated from x86_64-mont.pl. */1.text2345.globl bn_mul_mont6.type bn_mul_mont,@function7.align 168bn_mul_mont:9.cfi_startproc10movl %r9d,%r9d11movq %rsp,%rax12.cfi_def_cfa_register %rax13testl $3,%r9d14jnz .Lmul_enter15cmpl $8,%r9d16jb .Lmul_enter17movl OPENSSL_ia32cap_P+8(%rip),%r11d18cmpq %rsi,%rdx19jne .Lmul4x_enter20testl $7,%r9d21jz .Lsqr8x_enter22jmp .Lmul4x_enter2324.align 1625.Lmul_enter:26pushq %rbx27.cfi_offset %rbx,-1628pushq %rbp29.cfi_offset %rbp,-2430pushq %r1231.cfi_offset %r12,-3232pushq %r1333.cfi_offset %r13,-4034pushq %r1435.cfi_offset %r14,-4836pushq %r1537.cfi_offset %r15,-563839negq %r940movq %rsp,%r1141leaq -16(%rsp,%r9,8),%r1042negq %r943andq $-1024,%r1044454647484950515253subq %r10,%r1154andq $-4096,%r1155leaq (%r10,%r11,1),%rsp56movq (%rsp),%r1157cmpq %r10,%rsp58ja .Lmul_page_walk59jmp .Lmul_page_walk_done6061.align 1662.Lmul_page_walk:63leaq -4096(%rsp),%rsp64movq (%rsp),%r1165cmpq %r10,%rsp66ja .Lmul_page_walk67.Lmul_page_walk_done:6869movq %rax,8(%rsp,%r9,8)70.cfi_escape 0x0f,0x0a,0x77,0x08,0x79,0x00,0x38,0x1e,0x22,0x06,0x23,0x0871.Lmul_body:72movq %rdx,%r1273movq (%r8),%r874movq (%r12),%rbx75movq (%rsi),%rax7677xorq %r14,%r1478xorq %r15,%r157980movq %r8,%rbp81mulq %rbx82movq %rax,%r1083movq (%rcx),%rax8485imulq %r10,%rbp86movq %rdx,%r118788mulq %rbp89addq %rax,%r1090movq 8(%rsi),%rax91adcq $0,%rdx92movq %rdx,%r139394leaq 1(%r15),%r1595jmp .L1st_enter9697.align 1698.L1st:99addq %rax,%r13100movq (%rsi,%r15,8),%rax101adcq $0,%rdx102addq %r11,%r13103movq %r10,%r11104adcq $0,%rdx105movq %r13,-16(%rsp,%r15,8)106movq %rdx,%r13107108.L1st_enter:109mulq %rbx110addq %rax,%r11111movq (%rcx,%r15,8),%rax112adcq $0,%rdx113leaq 1(%r15),%r15114movq %rdx,%r10115116mulq %rbp117cmpq %r9,%r15118jne .L1st119120addq %rax,%r13121movq (%rsi),%rax122adcq $0,%rdx123addq %r11,%r13124adcq $0,%rdx125movq %r13,-16(%rsp,%r15,8)126movq %rdx,%r13127movq %r10,%r11128129xorq %rdx,%rdx130addq %r11,%r13131adcq $0,%rdx132movq %r13,-8(%rsp,%r9,8)133movq %rdx,(%rsp,%r9,8)134135leaq 1(%r14),%r14136jmp .Louter137.align 16138.Louter:139movq (%r12,%r14,8),%rbx140xorq %r15,%r15141movq %r8,%rbp142movq (%rsp),%r10143mulq %rbx144addq %rax,%r10145movq (%rcx),%rax146adcq $0,%rdx147148imulq %r10,%rbp149movq %rdx,%r11150151mulq %rbp152addq %rax,%r10153movq 8(%rsi),%rax154adcq $0,%rdx155movq 8(%rsp),%r10156movq %rdx,%r13157158leaq 1(%r15),%r15159jmp .Linner_enter160161.align 16162.Linner:163addq %rax,%r13164movq (%rsi,%r15,8),%rax165adcq $0,%rdx166addq %r10,%r13167movq (%rsp,%r15,8),%r10168adcq $0,%rdx169movq %r13,-16(%rsp,%r15,8)170movq %rdx,%r13171172.Linner_enter:173mulq %rbx174addq %rax,%r11175movq (%rcx,%r15,8),%rax176adcq $0,%rdx177addq %r11,%r10178movq %rdx,%r11179adcq $0,%r11180leaq 1(%r15),%r15181182mulq %rbp183cmpq %r9,%r15184jne .Linner185186addq %rax,%r13187movq (%rsi),%rax188adcq $0,%rdx189addq %r10,%r13190movq (%rsp,%r15,8),%r10191adcq $0,%rdx192movq %r13,-16(%rsp,%r15,8)193movq %rdx,%r13194195xorq %rdx,%rdx196addq %r11,%r13197adcq $0,%rdx198addq %r10,%r13199adcq $0,%rdx200movq %r13,-8(%rsp,%r9,8)201movq %rdx,(%rsp,%r9,8)202203leaq 1(%r14),%r14204cmpq %r9,%r14205jb .Louter206207xorq %r14,%r14208movq (%rsp),%rax209movq %r9,%r15210211.align 16212.Lsub: sbbq (%rcx,%r14,8),%rax213movq %rax,(%rdi,%r14,8)214movq 8(%rsp,%r14,8),%rax215leaq 1(%r14),%r14216decq %r15217jnz .Lsub218219sbbq $0,%rax220movq $-1,%rbx221xorq %rax,%rbx222xorq %r14,%r14223movq %r9,%r15224225.Lcopy:226movq (%rdi,%r14,8),%rcx227movq (%rsp,%r14,8),%rdx228andq %rbx,%rcx229andq %rax,%rdx230movq %r9,(%rsp,%r14,8)231orq %rcx,%rdx232movq %rdx,(%rdi,%r14,8)233leaq 1(%r14),%r14234subq $1,%r15235jnz .Lcopy236237movq 8(%rsp,%r9,8),%rsi238.cfi_def_cfa %rsi,8239movq $1,%rax240movq -48(%rsi),%r15241.cfi_restore %r15242movq -40(%rsi),%r14243.cfi_restore %r14244movq -32(%rsi),%r13245.cfi_restore %r13246movq -24(%rsi),%r12247.cfi_restore %r12248movq -16(%rsi),%rbp249.cfi_restore %rbp250movq -8(%rsi),%rbx251.cfi_restore %rbx252leaq (%rsi),%rsp253.cfi_def_cfa_register %rsp254.Lmul_epilogue:255.byte 0xf3,0xc3256.cfi_endproc257.size bn_mul_mont,.-bn_mul_mont258.type bn_mul4x_mont,@function259.align 16260bn_mul4x_mont:261.cfi_startproc262movl %r9d,%r9d263movq %rsp,%rax264.cfi_def_cfa_register %rax265.Lmul4x_enter:266andl $0x80100,%r11d267cmpl $0x80100,%r11d268je .Lmulx4x_enter269pushq %rbx270.cfi_offset %rbx,-16271pushq %rbp272.cfi_offset %rbp,-24273pushq %r12274.cfi_offset %r12,-32275pushq %r13276.cfi_offset %r13,-40277pushq %r14278.cfi_offset %r14,-48279pushq %r15280.cfi_offset %r15,-56281282negq %r9283movq %rsp,%r11284leaq -32(%rsp,%r9,8),%r10285negq %r9286andq $-1024,%r10287288subq %r10,%r11289andq $-4096,%r11290leaq (%r10,%r11,1),%rsp291movq (%rsp),%r11292cmpq %r10,%rsp293ja .Lmul4x_page_walk294jmp .Lmul4x_page_walk_done295296.Lmul4x_page_walk:297leaq -4096(%rsp),%rsp298movq (%rsp),%r11299cmpq %r10,%rsp300ja .Lmul4x_page_walk301.Lmul4x_page_walk_done:302303movq %rax,8(%rsp,%r9,8)304.cfi_escape 0x0f,0x0a,0x77,0x08,0x79,0x00,0x38,0x1e,0x22,0x06,0x23,0x08305.Lmul4x_body:306movq %rdi,16(%rsp,%r9,8)307movq %rdx,%r12308movq (%r8),%r8309movq (%r12),%rbx310movq (%rsi),%rax311312xorq %r14,%r14313xorq %r15,%r15314315movq %r8,%rbp316mulq %rbx317movq %rax,%r10318movq (%rcx),%rax319320imulq %r10,%rbp321movq %rdx,%r11322323mulq %rbp324addq %rax,%r10325movq 8(%rsi),%rax326adcq $0,%rdx327movq %rdx,%rdi328329mulq %rbx330addq %rax,%r11331movq 8(%rcx),%rax332adcq $0,%rdx333movq %rdx,%r10334335mulq %rbp336addq %rax,%rdi337movq 16(%rsi),%rax338adcq $0,%rdx339addq %r11,%rdi340leaq 4(%r15),%r15341adcq $0,%rdx342movq %rdi,(%rsp)343movq %rdx,%r13344jmp .L1st4x345.align 16346.L1st4x:347mulq %rbx348addq %rax,%r10349movq -16(%rcx,%r15,8),%rax350adcq $0,%rdx351movq %rdx,%r11352353mulq %rbp354addq %rax,%r13355movq -8(%rsi,%r15,8),%rax356adcq $0,%rdx357addq %r10,%r13358adcq $0,%rdx359movq %r13,-24(%rsp,%r15,8)360movq %rdx,%rdi361362mulq %rbx363addq %rax,%r11364movq -8(%rcx,%r15,8),%rax365adcq $0,%rdx366movq %rdx,%r10367368mulq %rbp369addq %rax,%rdi370movq (%rsi,%r15,8),%rax371adcq $0,%rdx372addq %r11,%rdi373adcq $0,%rdx374movq %rdi,-16(%rsp,%r15,8)375movq %rdx,%r13376377mulq %rbx378addq %rax,%r10379movq (%rcx,%r15,8),%rax380adcq $0,%rdx381movq %rdx,%r11382383mulq %rbp384addq %rax,%r13385movq 8(%rsi,%r15,8),%rax386adcq $0,%rdx387addq %r10,%r13388adcq $0,%rdx389movq %r13,-8(%rsp,%r15,8)390movq %rdx,%rdi391392mulq %rbx393addq %rax,%r11394movq 8(%rcx,%r15,8),%rax395adcq $0,%rdx396leaq 4(%r15),%r15397movq %rdx,%r10398399mulq %rbp400addq %rax,%rdi401movq -16(%rsi,%r15,8),%rax402adcq $0,%rdx403addq %r11,%rdi404adcq $0,%rdx405movq %rdi,-32(%rsp,%r15,8)406movq %rdx,%r13407cmpq %r9,%r15408jb .L1st4x409410mulq %rbx411addq %rax,%r10412movq -16(%rcx,%r15,8),%rax413adcq $0,%rdx414movq %rdx,%r11415416mulq %rbp417addq %rax,%r13418movq -8(%rsi,%r15,8),%rax419adcq $0,%rdx420addq %r10,%r13421adcq $0,%rdx422movq %r13,-24(%rsp,%r15,8)423movq %rdx,%rdi424425mulq %rbx426addq %rax,%r11427movq -8(%rcx,%r15,8),%rax428adcq $0,%rdx429movq %rdx,%r10430431mulq %rbp432addq %rax,%rdi433movq (%rsi),%rax434adcq $0,%rdx435addq %r11,%rdi436adcq $0,%rdx437movq %rdi,-16(%rsp,%r15,8)438movq %rdx,%r13439440xorq %rdi,%rdi441addq %r10,%r13442adcq $0,%rdi443movq %r13,-8(%rsp,%r15,8)444movq %rdi,(%rsp,%r15,8)445446leaq 1(%r14),%r14447.align 4448.Louter4x:449movq (%r12,%r14,8),%rbx450xorq %r15,%r15451movq (%rsp),%r10452movq %r8,%rbp453mulq %rbx454addq %rax,%r10455movq (%rcx),%rax456adcq $0,%rdx457458imulq %r10,%rbp459movq %rdx,%r11460461mulq %rbp462addq %rax,%r10463movq 8(%rsi),%rax464adcq $0,%rdx465movq %rdx,%rdi466467mulq %rbx468addq %rax,%r11469movq 8(%rcx),%rax470adcq $0,%rdx471addq 8(%rsp),%r11472adcq $0,%rdx473movq %rdx,%r10474475mulq %rbp476addq %rax,%rdi477movq 16(%rsi),%rax478adcq $0,%rdx479addq %r11,%rdi480leaq 4(%r15),%r15481adcq $0,%rdx482movq %rdi,(%rsp)483movq %rdx,%r13484jmp .Linner4x485.align 16486.Linner4x:487mulq %rbx488addq %rax,%r10489movq -16(%rcx,%r15,8),%rax490adcq $0,%rdx491addq -16(%rsp,%r15,8),%r10492adcq $0,%rdx493movq %rdx,%r11494495mulq %rbp496addq %rax,%r13497movq -8(%rsi,%r15,8),%rax498adcq $0,%rdx499addq %r10,%r13500adcq $0,%rdx501movq %r13,-24(%rsp,%r15,8)502movq %rdx,%rdi503504mulq %rbx505addq %rax,%r11506movq -8(%rcx,%r15,8),%rax507adcq $0,%rdx508addq -8(%rsp,%r15,8),%r11509adcq $0,%rdx510movq %rdx,%r10511512mulq %rbp513addq %rax,%rdi514movq (%rsi,%r15,8),%rax515adcq $0,%rdx516addq %r11,%rdi517adcq $0,%rdx518movq %rdi,-16(%rsp,%r15,8)519movq %rdx,%r13520521mulq %rbx522addq %rax,%r10523movq (%rcx,%r15,8),%rax524adcq $0,%rdx525addq (%rsp,%r15,8),%r10526adcq $0,%rdx527movq %rdx,%r11528529mulq %rbp530addq %rax,%r13531movq 8(%rsi,%r15,8),%rax532adcq $0,%rdx533addq %r10,%r13534adcq $0,%rdx535movq %r13,-8(%rsp,%r15,8)536movq %rdx,%rdi537538mulq %rbx539addq %rax,%r11540movq 8(%rcx,%r15,8),%rax541adcq $0,%rdx542addq 8(%rsp,%r15,8),%r11543adcq $0,%rdx544leaq 4(%r15),%r15545movq %rdx,%r10546547mulq %rbp548addq %rax,%rdi549movq -16(%rsi,%r15,8),%rax550adcq $0,%rdx551addq %r11,%rdi552adcq $0,%rdx553movq %rdi,-32(%rsp,%r15,8)554movq %rdx,%r13555cmpq %r9,%r15556jb .Linner4x557558mulq %rbx559addq %rax,%r10560movq -16(%rcx,%r15,8),%rax561adcq $0,%rdx562addq -16(%rsp,%r15,8),%r10563adcq $0,%rdx564movq %rdx,%r11565566mulq %rbp567addq %rax,%r13568movq -8(%rsi,%r15,8),%rax569adcq $0,%rdx570addq %r10,%r13571adcq $0,%rdx572movq %r13,-24(%rsp,%r15,8)573movq %rdx,%rdi574575mulq %rbx576addq %rax,%r11577movq -8(%rcx,%r15,8),%rax578adcq $0,%rdx579addq -8(%rsp,%r15,8),%r11580adcq $0,%rdx581leaq 1(%r14),%r14582movq %rdx,%r10583584mulq %rbp585addq %rax,%rdi586movq (%rsi),%rax587adcq $0,%rdx588addq %r11,%rdi589adcq $0,%rdx590movq %rdi,-16(%rsp,%r15,8)591movq %rdx,%r13592593xorq %rdi,%rdi594addq %r10,%r13595adcq $0,%rdi596addq (%rsp,%r9,8),%r13597adcq $0,%rdi598movq %r13,-8(%rsp,%r15,8)599movq %rdi,(%rsp,%r15,8)600601cmpq %r9,%r14602jb .Louter4x603movq 16(%rsp,%r9,8),%rdi604leaq -4(%r9),%r15605movq 0(%rsp),%rax606movq 8(%rsp),%rdx607shrq $2,%r15608leaq (%rsp),%rsi609xorq %r14,%r14610611subq 0(%rcx),%rax612movq 16(%rsi),%rbx613movq 24(%rsi),%rbp614sbbq 8(%rcx),%rdx615616.Lsub4x:617movq %rax,0(%rdi,%r14,8)618movq %rdx,8(%rdi,%r14,8)619sbbq 16(%rcx,%r14,8),%rbx620movq 32(%rsi,%r14,8),%rax621movq 40(%rsi,%r14,8),%rdx622sbbq 24(%rcx,%r14,8),%rbp623movq %rbx,16(%rdi,%r14,8)624movq %rbp,24(%rdi,%r14,8)625sbbq 32(%rcx,%r14,8),%rax626movq 48(%rsi,%r14,8),%rbx627movq 56(%rsi,%r14,8),%rbp628sbbq 40(%rcx,%r14,8),%rdx629leaq 4(%r14),%r14630decq %r15631jnz .Lsub4x632633movq %rax,0(%rdi,%r14,8)634movq 32(%rsi,%r14,8),%rax635sbbq 16(%rcx,%r14,8),%rbx636movq %rdx,8(%rdi,%r14,8)637sbbq 24(%rcx,%r14,8),%rbp638movq %rbx,16(%rdi,%r14,8)639640sbbq $0,%rax641movq %rbp,24(%rdi,%r14,8)642pxor %xmm0,%xmm0643.byte 102,72,15,110,224644pcmpeqd %xmm5,%xmm5645pshufd $0,%xmm4,%xmm4646movq %r9,%r15647pxor %xmm4,%xmm5648shrq $2,%r15649xorl %eax,%eax650651jmp .Lcopy4x652.align 16653.Lcopy4x:654movdqa (%rsp,%rax,1),%xmm1655movdqu (%rdi,%rax,1),%xmm2656pand %xmm4,%xmm1657pand %xmm5,%xmm2658movdqa 16(%rsp,%rax,1),%xmm3659movdqa %xmm0,(%rsp,%rax,1)660por %xmm2,%xmm1661movdqu 16(%rdi,%rax,1),%xmm2662movdqu %xmm1,(%rdi,%rax,1)663pand %xmm4,%xmm3664pand %xmm5,%xmm2665movdqa %xmm0,16(%rsp,%rax,1)666por %xmm2,%xmm3667movdqu %xmm3,16(%rdi,%rax,1)668leaq 32(%rax),%rax669decq %r15670jnz .Lcopy4x671movq 8(%rsp,%r9,8),%rsi672.cfi_def_cfa %rsi, 8673movq $1,%rax674movq -48(%rsi),%r15675.cfi_restore %r15676movq -40(%rsi),%r14677.cfi_restore %r14678movq -32(%rsi),%r13679.cfi_restore %r13680movq -24(%rsi),%r12681.cfi_restore %r12682movq -16(%rsi),%rbp683.cfi_restore %rbp684movq -8(%rsi),%rbx685.cfi_restore %rbx686leaq (%rsi),%rsp687.cfi_def_cfa_register %rsp688.Lmul4x_epilogue:689.byte 0xf3,0xc3690.cfi_endproc691.size bn_mul4x_mont,.-bn_mul4x_mont692693694695.type bn_sqr8x_mont,@function696.align 32697bn_sqr8x_mont:698.cfi_startproc699movq %rsp,%rax700.cfi_def_cfa_register %rax701.Lsqr8x_enter:702pushq %rbx703.cfi_offset %rbx,-16704pushq %rbp705.cfi_offset %rbp,-24706pushq %r12707.cfi_offset %r12,-32708pushq %r13709.cfi_offset %r13,-40710pushq %r14711.cfi_offset %r14,-48712pushq %r15713.cfi_offset %r15,-56714.Lsqr8x_prologue:715716movl %r9d,%r10d717shll $3,%r9d718shlq $3+2,%r10719negq %r9720721722723724725726leaq -64(%rsp,%r9,2),%r11727movq %rsp,%rbp728movq (%r8),%r8729subq %rsi,%r11730andq $4095,%r11731cmpq %r11,%r10732jb .Lsqr8x_sp_alt733subq %r11,%rbp734leaq -64(%rbp,%r9,2),%rbp735jmp .Lsqr8x_sp_done736737.align 32738.Lsqr8x_sp_alt:739leaq 4096-64(,%r9,2),%r10740leaq -64(%rbp,%r9,2),%rbp741subq %r10,%r11742movq $0,%r10743cmovcq %r10,%r11744subq %r11,%rbp745.Lsqr8x_sp_done:746andq $-64,%rbp747movq %rsp,%r11748subq %rbp,%r11749andq $-4096,%r11750leaq (%r11,%rbp,1),%rsp751movq (%rsp),%r10752cmpq %rbp,%rsp753ja .Lsqr8x_page_walk754jmp .Lsqr8x_page_walk_done755756.align 16757.Lsqr8x_page_walk:758leaq -4096(%rsp),%rsp759movq (%rsp),%r10760cmpq %rbp,%rsp761ja .Lsqr8x_page_walk762.Lsqr8x_page_walk_done:763764movq %r9,%r10765negq %r9766767movq %r8,32(%rsp)768movq %rax,40(%rsp)769.cfi_escape 0x0f,0x05,0x77,0x28,0x06,0x23,0x08770.Lsqr8x_body:771772.byte 102,72,15,110,209773pxor %xmm0,%xmm0774.byte 102,72,15,110,207775.byte 102,73,15,110,218776movl OPENSSL_ia32cap_P+8(%rip),%eax777andl $0x80100,%eax778cmpl $0x80100,%eax779jne .Lsqr8x_nox780781call bn_sqrx8x_internal782783784785786leaq (%r8,%rcx,1),%rbx787movq %rcx,%r9788movq %rcx,%rdx789.byte 102,72,15,126,207790sarq $3+2,%rcx791jmp .Lsqr8x_sub792793.align 32794.Lsqr8x_nox:795call bn_sqr8x_internal796797798799800leaq (%rdi,%r9,1),%rbx801movq %r9,%rcx802movq %r9,%rdx803.byte 102,72,15,126,207804sarq $3+2,%rcx805jmp .Lsqr8x_sub806807.align 32808.Lsqr8x_sub:809movq 0(%rbx),%r12810movq 8(%rbx),%r13811movq 16(%rbx),%r14812movq 24(%rbx),%r15813leaq 32(%rbx),%rbx814sbbq 0(%rbp),%r12815sbbq 8(%rbp),%r13816sbbq 16(%rbp),%r14817sbbq 24(%rbp),%r15818leaq 32(%rbp),%rbp819movq %r12,0(%rdi)820movq %r13,8(%rdi)821movq %r14,16(%rdi)822movq %r15,24(%rdi)823leaq 32(%rdi),%rdi824incq %rcx825jnz .Lsqr8x_sub826827sbbq $0,%rax828leaq (%rbx,%r9,1),%rbx829leaq (%rdi,%r9,1),%rdi830831.byte 102,72,15,110,200832pxor %xmm0,%xmm0833pshufd $0,%xmm1,%xmm1834movq 40(%rsp),%rsi835.cfi_def_cfa %rsi,8836jmp .Lsqr8x_cond_copy837838.align 32839.Lsqr8x_cond_copy:840movdqa 0(%rbx),%xmm2841movdqa 16(%rbx),%xmm3842leaq 32(%rbx),%rbx843movdqu 0(%rdi),%xmm4844movdqu 16(%rdi),%xmm5845leaq 32(%rdi),%rdi846movdqa %xmm0,-32(%rbx)847movdqa %xmm0,-16(%rbx)848movdqa %xmm0,-32(%rbx,%rdx,1)849movdqa %xmm0,-16(%rbx,%rdx,1)850pcmpeqd %xmm1,%xmm0851pand %xmm1,%xmm2852pand %xmm1,%xmm3853pand %xmm0,%xmm4854pand %xmm0,%xmm5855pxor %xmm0,%xmm0856por %xmm2,%xmm4857por %xmm3,%xmm5858movdqu %xmm4,-32(%rdi)859movdqu %xmm5,-16(%rdi)860addq $32,%r9861jnz .Lsqr8x_cond_copy862863movq $1,%rax864movq -48(%rsi),%r15865.cfi_restore %r15866movq -40(%rsi),%r14867.cfi_restore %r14868movq -32(%rsi),%r13869.cfi_restore %r13870movq -24(%rsi),%r12871.cfi_restore %r12872movq -16(%rsi),%rbp873.cfi_restore %rbp874movq -8(%rsi),%rbx875.cfi_restore %rbx876leaq (%rsi),%rsp877.cfi_def_cfa_register %rsp878.Lsqr8x_epilogue:879.byte 0xf3,0xc3880.cfi_endproc881.size bn_sqr8x_mont,.-bn_sqr8x_mont882.type bn_mulx4x_mont,@function883.align 32884bn_mulx4x_mont:885.cfi_startproc886movq %rsp,%rax887.cfi_def_cfa_register %rax888.Lmulx4x_enter:889pushq %rbx890.cfi_offset %rbx,-16891pushq %rbp892.cfi_offset %rbp,-24893pushq %r12894.cfi_offset %r12,-32895pushq %r13896.cfi_offset %r13,-40897pushq %r14898.cfi_offset %r14,-48899pushq %r15900.cfi_offset %r15,-56901.Lmulx4x_prologue:902903shll $3,%r9d904xorq %r10,%r10905subq %r9,%r10906movq (%r8),%r8907leaq -72(%rsp,%r10,1),%rbp908andq $-128,%rbp909movq %rsp,%r11910subq %rbp,%r11911andq $-4096,%r11912leaq (%r11,%rbp,1),%rsp913movq (%rsp),%r10914cmpq %rbp,%rsp915ja .Lmulx4x_page_walk916jmp .Lmulx4x_page_walk_done917918.align 16919.Lmulx4x_page_walk:920leaq -4096(%rsp),%rsp921movq (%rsp),%r10922cmpq %rbp,%rsp923ja .Lmulx4x_page_walk924.Lmulx4x_page_walk_done:925926leaq (%rdx,%r9,1),%r10927928929930931932933934935936937938939movq %r9,0(%rsp)940shrq $5,%r9941movq %r10,16(%rsp)942subq $1,%r9943movq %r8,24(%rsp)944movq %rdi,32(%rsp)945movq %rax,40(%rsp)946.cfi_escape 0x0f,0x05,0x77,0x28,0x06,0x23,0x08947movq %r9,48(%rsp)948jmp .Lmulx4x_body949950.align 32951.Lmulx4x_body:952leaq 8(%rdx),%rdi953movq (%rdx),%rdx954leaq 64+32(%rsp),%rbx955movq %rdx,%r9956957mulxq 0(%rsi),%r8,%rax958mulxq 8(%rsi),%r11,%r14959addq %rax,%r11960movq %rdi,8(%rsp)961mulxq 16(%rsi),%r12,%r13962adcq %r14,%r12963adcq $0,%r13964965movq %r8,%rdi966imulq 24(%rsp),%r8967xorq %rbp,%rbp968969mulxq 24(%rsi),%rax,%r14970movq %r8,%rdx971leaq 32(%rsi),%rsi972adcxq %rax,%r13973adcxq %rbp,%r14974975mulxq 0(%rcx),%rax,%r10976adcxq %rax,%rdi977adoxq %r11,%r10978mulxq 8(%rcx),%rax,%r11979adcxq %rax,%r10980adoxq %r12,%r11981.byte 0xc4,0x62,0xfb,0xf6,0xa1,0x10,0x00,0x00,0x00982movq 48(%rsp),%rdi983movq %r10,-32(%rbx)984adcxq %rax,%r11985adoxq %r13,%r12986mulxq 24(%rcx),%rax,%r15987movq %r9,%rdx988movq %r11,-24(%rbx)989adcxq %rax,%r12990adoxq %rbp,%r15991leaq 32(%rcx),%rcx992movq %r12,-16(%rbx)993994jmp .Lmulx4x_1st995996.align 32997.Lmulx4x_1st:998adcxq %rbp,%r15999mulxq 0(%rsi),%r10,%rax1000adcxq %r14,%r101001mulxq 8(%rsi),%r11,%r141002adcxq %rax,%r111003mulxq 16(%rsi),%r12,%rax1004adcxq %r14,%r121005mulxq 24(%rsi),%r13,%r141006.byte 0x67,0x671007movq %r8,%rdx1008adcxq %rax,%r131009adcxq %rbp,%r141010leaq 32(%rsi),%rsi1011leaq 32(%rbx),%rbx10121013adoxq %r15,%r101014mulxq 0(%rcx),%rax,%r151015adcxq %rax,%r101016adoxq %r15,%r111017mulxq 8(%rcx),%rax,%r151018adcxq %rax,%r111019adoxq %r15,%r121020mulxq 16(%rcx),%rax,%r151021movq %r10,-40(%rbx)1022adcxq %rax,%r121023movq %r11,-32(%rbx)1024adoxq %r15,%r131025mulxq 24(%rcx),%rax,%r151026movq %r9,%rdx1027movq %r12,-24(%rbx)1028adcxq %rax,%r131029adoxq %rbp,%r151030leaq 32(%rcx),%rcx1031movq %r13,-16(%rbx)10321033decq %rdi1034jnz .Lmulx4x_1st10351036movq 0(%rsp),%rax1037movq 8(%rsp),%rdi1038adcq %rbp,%r151039addq %r15,%r141040sbbq %r15,%r151041movq %r14,-8(%rbx)1042jmp .Lmulx4x_outer10431044.align 321045.Lmulx4x_outer:1046movq (%rdi),%rdx1047leaq 8(%rdi),%rdi1048subq %rax,%rsi1049movq %r15,(%rbx)1050leaq 64+32(%rsp),%rbx1051subq %rax,%rcx10521053mulxq 0(%rsi),%r8,%r111054xorl %ebp,%ebp1055movq %rdx,%r91056mulxq 8(%rsi),%r14,%r121057adoxq -32(%rbx),%r81058adcxq %r14,%r111059mulxq 16(%rsi),%r15,%r131060adoxq -24(%rbx),%r111061adcxq %r15,%r121062adoxq -16(%rbx),%r121063adcxq %rbp,%r131064adoxq %rbp,%r1310651066movq %rdi,8(%rsp)1067movq %r8,%r151068imulq 24(%rsp),%r81069xorl %ebp,%ebp10701071mulxq 24(%rsi),%rax,%r141072movq %r8,%rdx1073adcxq %rax,%r131074adoxq -8(%rbx),%r131075adcxq %rbp,%r141076leaq 32(%rsi),%rsi1077adoxq %rbp,%r1410781079mulxq 0(%rcx),%rax,%r101080adcxq %rax,%r151081adoxq %r11,%r101082mulxq 8(%rcx),%rax,%r111083adcxq %rax,%r101084adoxq %r12,%r111085mulxq 16(%rcx),%rax,%r121086movq %r10,-32(%rbx)1087adcxq %rax,%r111088adoxq %r13,%r121089mulxq 24(%rcx),%rax,%r151090movq %r9,%rdx1091movq %r11,-24(%rbx)1092leaq 32(%rcx),%rcx1093adcxq %rax,%r121094adoxq %rbp,%r151095movq 48(%rsp),%rdi1096movq %r12,-16(%rbx)10971098jmp .Lmulx4x_inner10991100.align 321101.Lmulx4x_inner:1102mulxq 0(%rsi),%r10,%rax1103adcxq %rbp,%r151104adoxq %r14,%r101105mulxq 8(%rsi),%r11,%r141106adcxq 0(%rbx),%r101107adoxq %rax,%r111108mulxq 16(%rsi),%r12,%rax1109adcxq 8(%rbx),%r111110adoxq %r14,%r121111mulxq 24(%rsi),%r13,%r141112movq %r8,%rdx1113adcxq 16(%rbx),%r121114adoxq %rax,%r131115adcxq 24(%rbx),%r131116adoxq %rbp,%r141117leaq 32(%rsi),%rsi1118leaq 32(%rbx),%rbx1119adcxq %rbp,%r1411201121adoxq %r15,%r101122mulxq 0(%rcx),%rax,%r151123adcxq %rax,%r101124adoxq %r15,%r111125mulxq 8(%rcx),%rax,%r151126adcxq %rax,%r111127adoxq %r15,%r121128mulxq 16(%rcx),%rax,%r151129movq %r10,-40(%rbx)1130adcxq %rax,%r121131adoxq %r15,%r131132mulxq 24(%rcx),%rax,%r151133movq %r9,%rdx1134movq %r11,-32(%rbx)1135movq %r12,-24(%rbx)1136adcxq %rax,%r131137adoxq %rbp,%r151138leaq 32(%rcx),%rcx1139movq %r13,-16(%rbx)11401141decq %rdi1142jnz .Lmulx4x_inner11431144movq 0(%rsp),%rax1145movq 8(%rsp),%rdi1146adcq %rbp,%r151147subq 0(%rbx),%rbp1148adcq %r15,%r141149sbbq %r15,%r151150movq %r14,-8(%rbx)11511152cmpq 16(%rsp),%rdi1153jne .Lmulx4x_outer11541155leaq 64(%rsp),%rbx1156subq %rax,%rcx1157negq %r151158movq %rax,%rdx1159shrq $3+2,%rax1160movq 32(%rsp),%rdi1161jmp .Lmulx4x_sub11621163.align 321164.Lmulx4x_sub:1165movq 0(%rbx),%r111166movq 8(%rbx),%r121167movq 16(%rbx),%r131168movq 24(%rbx),%r141169leaq 32(%rbx),%rbx1170sbbq 0(%rcx),%r111171sbbq 8(%rcx),%r121172sbbq 16(%rcx),%r131173sbbq 24(%rcx),%r141174leaq 32(%rcx),%rcx1175movq %r11,0(%rdi)1176movq %r12,8(%rdi)1177movq %r13,16(%rdi)1178movq %r14,24(%rdi)1179leaq 32(%rdi),%rdi1180decq %rax1181jnz .Lmulx4x_sub11821183sbbq $0,%r151184leaq 64(%rsp),%rbx1185subq %rdx,%rdi11861187.byte 102,73,15,110,2071188pxor %xmm0,%xmm01189pshufd $0,%xmm1,%xmm11190movq 40(%rsp),%rsi1191.cfi_def_cfa %rsi,81192jmp .Lmulx4x_cond_copy11931194.align 321195.Lmulx4x_cond_copy:1196movdqa 0(%rbx),%xmm21197movdqa 16(%rbx),%xmm31198leaq 32(%rbx),%rbx1199movdqu 0(%rdi),%xmm41200movdqu 16(%rdi),%xmm51201leaq 32(%rdi),%rdi1202movdqa %xmm0,-32(%rbx)1203movdqa %xmm0,-16(%rbx)1204pcmpeqd %xmm1,%xmm01205pand %xmm1,%xmm21206pand %xmm1,%xmm31207pand %xmm0,%xmm41208pand %xmm0,%xmm51209pxor %xmm0,%xmm01210por %xmm2,%xmm41211por %xmm3,%xmm51212movdqu %xmm4,-32(%rdi)1213movdqu %xmm5,-16(%rdi)1214subq $32,%rdx1215jnz .Lmulx4x_cond_copy12161217movq %rdx,(%rbx)12181219movq $1,%rax1220movq -48(%rsi),%r151221.cfi_restore %r151222movq -40(%rsi),%r141223.cfi_restore %r141224movq -32(%rsi),%r131225.cfi_restore %r131226movq -24(%rsi),%r121227.cfi_restore %r121228movq -16(%rsi),%rbp1229.cfi_restore %rbp1230movq -8(%rsi),%rbx1231.cfi_restore %rbx1232leaq (%rsi),%rsp1233.cfi_def_cfa_register %rsp1234.Lmulx4x_epilogue:1235.byte 0xf3,0xc31236.cfi_endproc1237.size bn_mulx4x_mont,.-bn_mulx4x_mont1238.byte 77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105,112,108,105,99,97,116,105,111,110,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,01239.align 161240.section ".note.gnu.property", "a"1241.p2align 31242.long 1f - 0f1243.long 4f - 1f1244.long 512450:1246# "GNU" encoded with .byte, since .asciz isn't supported1247# on Solaris.1248.byte 0x471249.byte 0x4e1250.byte 0x551251.byte 012521:1253.p2align 31254.long 0xc00000021255.long 3f - 2f12562:1257.long 312583:1259.p2align 312604:126112621263