Home | History | Annotate | Download | only in asm
      1 .text
      2 
      3 .globl	bn_mul_mont
      4 .type	bn_mul_mont,@function
      5 .align	16
      6 bn_mul_mont:
      7 	testl	$3,%r9d
      8 	jnz	.Lmul_enter
      9 	cmpl	$8,%r9d
     10 	jb	.Lmul_enter
     11 	cmpq	%rsi,%rdx
     12 	jne	.Lmul4x_enter
     13 	jmp	.Lsqr4x_enter
     14 
     15 .align	16
     16 .Lmul_enter:
     17 	pushq	%rbx
     18 	pushq	%rbp
     19 	pushq	%r12
     20 	pushq	%r13
     21 	pushq	%r14
     22 	pushq	%r15
     23 
     24 	movl	%r9d,%r9d
     25 	leaq	2(%r9),%r10
     26 	movq	%rsp,%r11
     27 	negq	%r10
     28 	leaq	(%rsp,%r10,8),%rsp
     29 	andq	$-1024,%rsp
     30 
     31 	movq	%r11,8(%rsp,%r9,8)
     32 .Lmul_body:
     33 	movq	%rdx,%r12
     34 	movq	(%r8),%r8
     35 	movq	(%r12),%rbx
     36 	movq	(%rsi),%rax
     37 
     38 	xorq	%r14,%r14
     39 	xorq	%r15,%r15
     40 
     41 	movq	%r8,%rbp
     42 	mulq	%rbx
     43 	movq	%rax,%r10
     44 	movq	(%rcx),%rax
     45 
     46 	imulq	%r10,%rbp
     47 	movq	%rdx,%r11
     48 
     49 	mulq	%rbp
     50 	addq	%rax,%r10
     51 	movq	8(%rsi),%rax
     52 	adcq	$0,%rdx
     53 	movq	%rdx,%r13
     54 
     55 	leaq	1(%r15),%r15
     56 	jmp	.L1st_enter
     57 
     58 .align	16
     59 .L1st:
     60 	addq	%rax,%r13
     61 	movq	(%rsi,%r15,8),%rax
     62 	adcq	$0,%rdx
     63 	addq	%r11,%r13
     64 	movq	%r10,%r11
     65 	adcq	$0,%rdx
     66 	movq	%r13,-16(%rsp,%r15,8)
     67 	movq	%rdx,%r13
     68 
     69 .L1st_enter:
     70 	mulq	%rbx
     71 	addq	%rax,%r11
     72 	movq	(%rcx,%r15,8),%rax
     73 	adcq	$0,%rdx
     74 	leaq	1(%r15),%r15
     75 	movq	%rdx,%r10
     76 
     77 	mulq	%rbp
     78 	cmpq	%r9,%r15
     79 	jne	.L1st
     80 
     81 	addq	%rax,%r13
     82 	movq	(%rsi),%rax
     83 	adcq	$0,%rdx
     84 	addq	%r11,%r13
     85 	adcq	$0,%rdx
     86 	movq	%r13,-16(%rsp,%r15,8)
     87 	movq	%rdx,%r13
     88 	movq	%r10,%r11
     89 
     90 	xorq	%rdx,%rdx
     91 	addq	%r11,%r13
     92 	adcq	$0,%rdx
     93 	movq	%r13,-8(%rsp,%r9,8)
     94 	movq	%rdx,(%rsp,%r9,8)
     95 
     96 	leaq	1(%r14),%r14
     97 	jmp	.Louter
     98 .align	16
     99 .Louter:
    100 	movq	(%r12,%r14,8),%rbx
    101 	xorq	%r15,%r15
    102 	movq	%r8,%rbp
    103 	movq	(%rsp),%r10
    104 	mulq	%rbx
    105 	addq	%rax,%r10
    106 	movq	(%rcx),%rax
    107 	adcq	$0,%rdx
    108 
    109 	imulq	%r10,%rbp
    110 	movq	%rdx,%r11
    111 
    112 	mulq	%rbp
    113 	addq	%rax,%r10
    114 	movq	8(%rsi),%rax
    115 	adcq	$0,%rdx
    116 	movq	8(%rsp),%r10
    117 	movq	%rdx,%r13
    118 
    119 	leaq	1(%r15),%r15
    120 	jmp	.Linner_enter
    121 
    122 .align	16
    123 .Linner:
    124 	addq	%rax,%r13
    125 	movq	(%rsi,%r15,8),%rax
    126 	adcq	$0,%rdx
    127 	addq	%r10,%r13
    128 	movq	(%rsp,%r15,8),%r10
    129 	adcq	$0,%rdx
    130 	movq	%r13,-16(%rsp,%r15,8)
    131 	movq	%rdx,%r13
    132 
    133 .Linner_enter:
    134 	mulq	%rbx
    135 	addq	%rax,%r11
    136 	movq	(%rcx,%r15,8),%rax
    137 	adcq	$0,%rdx
    138 	addq	%r11,%r10
    139 	movq	%rdx,%r11
    140 	adcq	$0,%r11
    141 	leaq	1(%r15),%r15
    142 
    143 	mulq	%rbp
    144 	cmpq	%r9,%r15
    145 	jne	.Linner
    146 
    147 	addq	%rax,%r13
    148 	movq	(%rsi),%rax
    149 	adcq	$0,%rdx
    150 	addq	%r10,%r13
    151 	movq	(%rsp,%r15,8),%r10
    152 	adcq	$0,%rdx
    153 	movq	%r13,-16(%rsp,%r15,8)
    154 	movq	%rdx,%r13
    155 
    156 	xorq	%rdx,%rdx
    157 	addq	%r11,%r13
    158 	adcq	$0,%rdx
    159 	addq	%r10,%r13
    160 	adcq	$0,%rdx
    161 	movq	%r13,-8(%rsp,%r9,8)
    162 	movq	%rdx,(%rsp,%r9,8)
    163 
    164 	leaq	1(%r14),%r14
    165 	cmpq	%r9,%r14
    166 	jl	.Louter
    167 
    168 	xorq	%r14,%r14
    169 	movq	(%rsp),%rax
    170 	leaq	(%rsp),%rsi
    171 	movq	%r9,%r15
    172 	jmp	.Lsub
    173 .align	16
    174 .Lsub:	sbbq	(%rcx,%r14,8),%rax
    175 	movq	%rax,(%rdi,%r14,8)
    176 	movq	8(%rsi,%r14,8),%rax
    177 	leaq	1(%r14),%r14
    178 	decq	%r15
    179 	jnz	.Lsub
    180 
    181 	sbbq	$0,%rax
    182 	xorq	%r14,%r14
    183 	andq	%rax,%rsi
    184 	notq	%rax
    185 	movq	%rdi,%rcx
    186 	andq	%rax,%rcx
    187 	movq	%r9,%r15
    188 	orq	%rcx,%rsi
    189 .align	16
    190 .Lcopy:
    191 	movq	(%rsi,%r14,8),%rax
    192 	movq	%r14,(%rsp,%r14,8)
    193 	movq	%rax,(%rdi,%r14,8)
    194 	leaq	1(%r14),%r14
    195 	subq	$1,%r15
    196 	jnz	.Lcopy
    197 
    198 	movq	8(%rsp,%r9,8),%rsi
    199 	movq	$1,%rax
    200 	movq	(%rsi),%r15
    201 	movq	8(%rsi),%r14
    202 	movq	16(%rsi),%r13
    203 	movq	24(%rsi),%r12
    204 	movq	32(%rsi),%rbp
    205 	movq	40(%rsi),%rbx
    206 	leaq	48(%rsi),%rsp
    207 .Lmul_epilogue:
    208 	.byte	0xf3,0xc3
    209 .size	bn_mul_mont,.-bn_mul_mont
    210 .type	bn_mul4x_mont,@function
    211 .align	16
    212 bn_mul4x_mont:
    213 .Lmul4x_enter:
    214 	pushq	%rbx
    215 	pushq	%rbp
    216 	pushq	%r12
    217 	pushq	%r13
    218 	pushq	%r14
    219 	pushq	%r15
    220 
    221 	movl	%r9d,%r9d
    222 	leaq	4(%r9),%r10
    223 	movq	%rsp,%r11
    224 	negq	%r10
    225 	leaq	(%rsp,%r10,8),%rsp
    226 	andq	$-1024,%rsp
    227 
    228 	movq	%r11,8(%rsp,%r9,8)
    229 .Lmul4x_body:
    230 	movq	%rdi,16(%rsp,%r9,8)
    231 	movq	%rdx,%r12
    232 	movq	(%r8),%r8
    233 	movq	(%r12),%rbx
    234 	movq	(%rsi),%rax
    235 
    236 	xorq	%r14,%r14
    237 	xorq	%r15,%r15
    238 
    239 	movq	%r8,%rbp
    240 	mulq	%rbx
    241 	movq	%rax,%r10
    242 	movq	(%rcx),%rax
    243 
    244 	imulq	%r10,%rbp
    245 	movq	%rdx,%r11
    246 
    247 	mulq	%rbp
    248 	addq	%rax,%r10
    249 	movq	8(%rsi),%rax
    250 	adcq	$0,%rdx
    251 	movq	%rdx,%rdi
    252 
    253 	mulq	%rbx
    254 	addq	%rax,%r11
    255 	movq	8(%rcx),%rax
    256 	adcq	$0,%rdx
    257 	movq	%rdx,%r10
    258 
    259 	mulq	%rbp
    260 	addq	%rax,%rdi
    261 	movq	16(%rsi),%rax
    262 	adcq	$0,%rdx
    263 	addq	%r11,%rdi
    264 	leaq	4(%r15),%r15
    265 	adcq	$0,%rdx
    266 	movq	%rdi,(%rsp)
    267 	movq	%rdx,%r13
    268 	jmp	.L1st4x
    269 .align	16
    270 .L1st4x:
    271 	mulq	%rbx
    272 	addq	%rax,%r10
    273 	movq	-16(%rcx,%r15,8),%rax
    274 	adcq	$0,%rdx
    275 	movq	%rdx,%r11
    276 
    277 	mulq	%rbp
    278 	addq	%rax,%r13
    279 	movq	-8(%rsi,%r15,8),%rax
    280 	adcq	$0,%rdx
    281 	addq	%r10,%r13
    282 	adcq	$0,%rdx
    283 	movq	%r13,-24(%rsp,%r15,8)
    284 	movq	%rdx,%rdi
    285 
    286 	mulq	%rbx
    287 	addq	%rax,%r11
    288 	movq	-8(%rcx,%r15,8),%rax
    289 	adcq	$0,%rdx
    290 	movq	%rdx,%r10
    291 
    292 	mulq	%rbp
    293 	addq	%rax,%rdi
    294 	movq	(%rsi,%r15,8),%rax
    295 	adcq	$0,%rdx
    296 	addq	%r11,%rdi
    297 	adcq	$0,%rdx
    298 	movq	%rdi,-16(%rsp,%r15,8)
    299 	movq	%rdx,%r13
    300 
    301 	mulq	%rbx
    302 	addq	%rax,%r10
    303 	movq	(%rcx,%r15,8),%rax
    304 	adcq	$0,%rdx
    305 	movq	%rdx,%r11
    306 
    307 	mulq	%rbp
    308 	addq	%rax,%r13
    309 	movq	8(%rsi,%r15,8),%rax
    310 	adcq	$0,%rdx
    311 	addq	%r10,%r13
    312 	adcq	$0,%rdx
    313 	movq	%r13,-8(%rsp,%r15,8)
    314 	movq	%rdx,%rdi
    315 
    316 	mulq	%rbx
    317 	addq	%rax,%r11
    318 	movq	8(%rcx,%r15,8),%rax
    319 	adcq	$0,%rdx
    320 	leaq	4(%r15),%r15
    321 	movq	%rdx,%r10
    322 
    323 	mulq	%rbp
    324 	addq	%rax,%rdi
    325 	movq	-16(%rsi,%r15,8),%rax
    326 	adcq	$0,%rdx
    327 	addq	%r11,%rdi
    328 	adcq	$0,%rdx
    329 	movq	%rdi,-32(%rsp,%r15,8)
    330 	movq	%rdx,%r13
    331 	cmpq	%r9,%r15
    332 	jl	.L1st4x
    333 
    334 	mulq	%rbx
    335 	addq	%rax,%r10
    336 	movq	-16(%rcx,%r15,8),%rax
    337 	adcq	$0,%rdx
    338 	movq	%rdx,%r11
    339 
    340 	mulq	%rbp
    341 	addq	%rax,%r13
    342 	movq	-8(%rsi,%r15,8),%rax
    343 	adcq	$0,%rdx
    344 	addq	%r10,%r13
    345 	adcq	$0,%rdx
    346 	movq	%r13,-24(%rsp,%r15,8)
    347 	movq	%rdx,%rdi
    348 
    349 	mulq	%rbx
    350 	addq	%rax,%r11
    351 	movq	-8(%rcx,%r15,8),%rax
    352 	adcq	$0,%rdx
    353 	movq	%rdx,%r10
    354 
    355 	mulq	%rbp
    356 	addq	%rax,%rdi
    357 	movq	(%rsi),%rax
    358 	adcq	$0,%rdx
    359 	addq	%r11,%rdi
    360 	adcq	$0,%rdx
    361 	movq	%rdi,-16(%rsp,%r15,8)
    362 	movq	%rdx,%r13
    363 
    364 	xorq	%rdi,%rdi
    365 	addq	%r10,%r13
    366 	adcq	$0,%rdi
    367 	movq	%r13,-8(%rsp,%r15,8)
    368 	movq	%rdi,(%rsp,%r15,8)
    369 
    370 	leaq	1(%r14),%r14
    371 .align	4
    372 .Louter4x:
    373 	movq	(%r12,%r14,8),%rbx
    374 	xorq	%r15,%r15
    375 	movq	(%rsp),%r10
    376 	movq	%r8,%rbp
    377 	mulq	%rbx
    378 	addq	%rax,%r10
    379 	movq	(%rcx),%rax
    380 	adcq	$0,%rdx
    381 
    382 	imulq	%r10,%rbp
    383 	movq	%rdx,%r11
    384 
    385 	mulq	%rbp
    386 	addq	%rax,%r10
    387 	movq	8(%rsi),%rax
    388 	adcq	$0,%rdx
    389 	movq	%rdx,%rdi
    390 
    391 	mulq	%rbx
    392 	addq	%rax,%r11
    393 	movq	8(%rcx),%rax
    394 	adcq	$0,%rdx
    395 	addq	8(%rsp),%r11
    396 	adcq	$0,%rdx
    397 	movq	%rdx,%r10
    398 
    399 	mulq	%rbp
    400 	addq	%rax,%rdi
    401 	movq	16(%rsi),%rax
    402 	adcq	$0,%rdx
    403 	addq	%r11,%rdi
    404 	leaq	4(%r15),%r15
    405 	adcq	$0,%rdx
    406 	movq	%rdi,(%rsp)
    407 	movq	%rdx,%r13
    408 	jmp	.Linner4x
    409 .align	16
    410 .Linner4x:
    411 	mulq	%rbx
    412 	addq	%rax,%r10
    413 	movq	-16(%rcx,%r15,8),%rax
    414 	adcq	$0,%rdx
    415 	addq	-16(%rsp,%r15,8),%r10
    416 	adcq	$0,%rdx
    417 	movq	%rdx,%r11
    418 
    419 	mulq	%rbp
    420 	addq	%rax,%r13
    421 	movq	-8(%rsi,%r15,8),%rax
    422 	adcq	$0,%rdx
    423 	addq	%r10,%r13
    424 	adcq	$0,%rdx
    425 	movq	%r13,-24(%rsp,%r15,8)
    426 	movq	%rdx,%rdi
    427 
    428 	mulq	%rbx
    429 	addq	%rax,%r11
    430 	movq	-8(%rcx,%r15,8),%rax
    431 	adcq	$0,%rdx
    432 	addq	-8(%rsp,%r15,8),%r11
    433 	adcq	$0,%rdx
    434 	movq	%rdx,%r10
    435 
    436 	mulq	%rbp
    437 	addq	%rax,%rdi
    438 	movq	(%rsi,%r15,8),%rax
    439 	adcq	$0,%rdx
    440 	addq	%r11,%rdi
    441 	adcq	$0,%rdx
    442 	movq	%rdi,-16(%rsp,%r15,8)
    443 	movq	%rdx,%r13
    444 
    445 	mulq	%rbx
    446 	addq	%rax,%r10
    447 	movq	(%rcx,%r15,8),%rax
    448 	adcq	$0,%rdx
    449 	addq	(%rsp,%r15,8),%r10
    450 	adcq	$0,%rdx
    451 	movq	%rdx,%r11
    452 
    453 	mulq	%rbp
    454 	addq	%rax,%r13
    455 	movq	8(%rsi,%r15,8),%rax
    456 	adcq	$0,%rdx
    457 	addq	%r10,%r13
    458 	adcq	$0,%rdx
    459 	movq	%r13,-8(%rsp,%r15,8)
    460 	movq	%rdx,%rdi
    461 
    462 	mulq	%rbx
    463 	addq	%rax,%r11
    464 	movq	8(%rcx,%r15,8),%rax
    465 	adcq	$0,%rdx
    466 	addq	8(%rsp,%r15,8),%r11
    467 	adcq	$0,%rdx
    468 	leaq	4(%r15),%r15
    469 	movq	%rdx,%r10
    470 
    471 	mulq	%rbp
    472 	addq	%rax,%rdi
    473 	movq	-16(%rsi,%r15,8),%rax
    474 	adcq	$0,%rdx
    475 	addq	%r11,%rdi
    476 	adcq	$0,%rdx
    477 	movq	%rdi,-32(%rsp,%r15,8)
    478 	movq	%rdx,%r13
    479 	cmpq	%r9,%r15
    480 	jl	.Linner4x
    481 
    482 	mulq	%rbx
    483 	addq	%rax,%r10
    484 	movq	-16(%rcx,%r15,8),%rax
    485 	adcq	$0,%rdx
    486 	addq	-16(%rsp,%r15,8),%r10
    487 	adcq	$0,%rdx
    488 	movq	%rdx,%r11
    489 
    490 	mulq	%rbp
    491 	addq	%rax,%r13
    492 	movq	-8(%rsi,%r15,8),%rax
    493 	adcq	$0,%rdx
    494 	addq	%r10,%r13
    495 	adcq	$0,%rdx
    496 	movq	%r13,-24(%rsp,%r15,8)
    497 	movq	%rdx,%rdi
    498 
    499 	mulq	%rbx
    500 	addq	%rax,%r11
    501 	movq	-8(%rcx,%r15,8),%rax
    502 	adcq	$0,%rdx
    503 	addq	-8(%rsp,%r15,8),%r11
    504 	adcq	$0,%rdx
    505 	leaq	1(%r14),%r14
    506 	movq	%rdx,%r10
    507 
    508 	mulq	%rbp
    509 	addq	%rax,%rdi
    510 	movq	(%rsi),%rax
    511 	adcq	$0,%rdx
    512 	addq	%r11,%rdi
    513 	adcq	$0,%rdx
    514 	movq	%rdi,-16(%rsp,%r15,8)
    515 	movq	%rdx,%r13
    516 
    517 	xorq	%rdi,%rdi
    518 	addq	%r10,%r13
    519 	adcq	$0,%rdi
    520 	addq	(%rsp,%r9,8),%r13
    521 	adcq	$0,%rdi
    522 	movq	%r13,-8(%rsp,%r15,8)
    523 	movq	%rdi,(%rsp,%r15,8)
    524 
    525 	cmpq	%r9,%r14
    526 	jl	.Louter4x
    527 	movq	16(%rsp,%r9,8),%rdi
    528 	movq	0(%rsp),%rax
    529 	pxor	%xmm0,%xmm0
    530 	movq	8(%rsp),%rdx
    531 	shrq	$2,%r9
    532 	leaq	(%rsp),%rsi
    533 	xorq	%r14,%r14
    534 
    535 	subq	0(%rcx),%rax
    536 	movq	16(%rsi),%rbx
    537 	movq	24(%rsi),%rbp
    538 	sbbq	8(%rcx),%rdx
    539 	leaq	-1(%r9),%r15
    540 	jmp	.Lsub4x
    541 .align	16
    542 .Lsub4x:
    543 	movq	%rax,0(%rdi,%r14,8)
    544 	movq	%rdx,8(%rdi,%r14,8)
    545 	sbbq	16(%rcx,%r14,8),%rbx
    546 	movq	32(%rsi,%r14,8),%rax
    547 	movq	40(%rsi,%r14,8),%rdx
    548 	sbbq	24(%rcx,%r14,8),%rbp
    549 	movq	%rbx,16(%rdi,%r14,8)
    550 	movq	%rbp,24(%rdi,%r14,8)
    551 	sbbq	32(%rcx,%r14,8),%rax
    552 	movq	48(%rsi,%r14,8),%rbx
    553 	movq	56(%rsi,%r14,8),%rbp
    554 	sbbq	40(%rcx,%r14,8),%rdx
    555 	leaq	4(%r14),%r14
    556 	decq	%r15
    557 	jnz	.Lsub4x
    558 
    559 	movq	%rax,0(%rdi,%r14,8)
    560 	movq	32(%rsi,%r14,8),%rax
    561 	sbbq	16(%rcx,%r14,8),%rbx
    562 	movq	%rdx,8(%rdi,%r14,8)
    563 	sbbq	24(%rcx,%r14,8),%rbp
    564 	movq	%rbx,16(%rdi,%r14,8)
    565 
    566 	sbbq	$0,%rax
    567 	movq	%rbp,24(%rdi,%r14,8)
    568 	xorq	%r14,%r14
    569 	andq	%rax,%rsi
    570 	notq	%rax
    571 	movq	%rdi,%rcx
    572 	andq	%rax,%rcx
    573 	leaq	-1(%r9),%r15
    574 	orq	%rcx,%rsi
    575 
    576 	movdqu	(%rsi),%xmm1
    577 	movdqa	%xmm0,(%rsp)
    578 	movdqu	%xmm1,(%rdi)
    579 	jmp	.Lcopy4x
    580 .align	16
    581 .Lcopy4x:
    582 	movdqu	16(%rsi,%r14,1),%xmm2
    583 	movdqu	32(%rsi,%r14,1),%xmm1
    584 	movdqa	%xmm0,16(%rsp,%r14,1)
    585 	movdqu	%xmm2,16(%rdi,%r14,1)
    586 	movdqa	%xmm0,32(%rsp,%r14,1)
    587 	movdqu	%xmm1,32(%rdi,%r14,1)
    588 	leaq	32(%r14),%r14
    589 	decq	%r15
    590 	jnz	.Lcopy4x
    591 
    592 	shlq	$2,%r9
    593 	movdqu	16(%rsi,%r14,1),%xmm2
    594 	movdqa	%xmm0,16(%rsp,%r14,1)
    595 	movdqu	%xmm2,16(%rdi,%r14,1)
    596 	movq	8(%rsp,%r9,8),%rsi
    597 	movq	$1,%rax
    598 	movq	(%rsi),%r15
    599 	movq	8(%rsi),%r14
    600 	movq	16(%rsi),%r13
    601 	movq	24(%rsi),%r12
    602 	movq	32(%rsi),%rbp
    603 	movq	40(%rsi),%rbx
    604 	leaq	48(%rsi),%rsp
    605 .Lmul4x_epilogue:
    606 	.byte	0xf3,0xc3
    607 .size	bn_mul4x_mont,.-bn_mul4x_mont
    608 .type	bn_sqr4x_mont,@function
    609 .align	16
    610 bn_sqr4x_mont:
    611 .Lsqr4x_enter:
    612 	pushq	%rbx
    613 	pushq	%rbp
    614 	pushq	%r12
    615 	pushq	%r13
    616 	pushq	%r14
    617 	pushq	%r15
    618 
    619 	shll	$3,%r9d
    620 	xorq	%r10,%r10
    621 	movq	%rsp,%r11
    622 	subq	%r9,%r10
    623 	movq	(%r8),%r8
    624 	leaq	-72(%rsp,%r10,2),%rsp
    625 	andq	$-1024,%rsp
    626 
    627 
    628 
    629 
    630 
    631 
    632 
    633 
    634 
    635 
    636 
    637 	movq	%rdi,32(%rsp)
    638 	movq	%rcx,40(%rsp)
    639 	movq	%r8,48(%rsp)
    640 	movq	%r11,56(%rsp)
    641 .Lsqr4x_body:
    642 
    643 
    644 
    645 
    646 
    647 
    648 
    649 	leaq	32(%r10),%rbp
    650 	leaq	(%rsi,%r9,1),%rsi
    651 
    652 	movq	%r9,%rcx
    653 
    654 
    655 	movq	-32(%rsi,%rbp,1),%r14
    656 	leaq	64(%rsp,%r9,2),%rdi
    657 	movq	-24(%rsi,%rbp,1),%rax
    658 	leaq	-32(%rdi,%rbp,1),%rdi
    659 	movq	-16(%rsi,%rbp,1),%rbx
    660 	movq	%rax,%r15
    661 
    662 	mulq	%r14
    663 	movq	%rax,%r10
    664 	movq	%rbx,%rax
    665 	movq	%rdx,%r11
    666 	movq	%r10,-24(%rdi,%rbp,1)
    667 
    668 	xorq	%r10,%r10
    669 	mulq	%r14
    670 	addq	%rax,%r11
    671 	movq	%rbx,%rax
    672 	adcq	%rdx,%r10
    673 	movq	%r11,-16(%rdi,%rbp,1)
    674 
    675 	leaq	-16(%rbp),%rcx
    676 
    677 
    678 	movq	8(%rsi,%rcx,1),%rbx
    679 	mulq	%r15
    680 	movq	%rax,%r12
    681 	movq	%rbx,%rax
    682 	movq	%rdx,%r13
    683 
    684 	xorq	%r11,%r11
    685 	addq	%r12,%r10
    686 	leaq	16(%rcx),%rcx
    687 	adcq	$0,%r11
    688 	mulq	%r14
    689 	addq	%rax,%r10
    690 	movq	%rbx,%rax
    691 	adcq	%rdx,%r11
    692 	movq	%r10,-8(%rdi,%rcx,1)
    693 	jmp	.Lsqr4x_1st
    694 
    695 .align	16
    696 .Lsqr4x_1st:
    697 	movq	(%rsi,%rcx,1),%rbx
    698 	xorq	%r12,%r12
    699 	mulq	%r15
    700 	addq	%rax,%r13
    701 	movq	%rbx,%rax
    702 	adcq	%rdx,%r12
    703 
    704 	xorq	%r10,%r10
    705 	addq	%r13,%r11
    706 	adcq	$0,%r10
    707 	mulq	%r14
    708 	addq	%rax,%r11
    709 	movq	%rbx,%rax
    710 	adcq	%rdx,%r10
    711 	movq	%r11,(%rdi,%rcx,1)
    712 
    713 
    714 	movq	8(%rsi,%rcx,1),%rbx
    715 	xorq	%r13,%r13
    716 	mulq	%r15
    717 	addq	%rax,%r12
    718 	movq	%rbx,%rax
    719 	adcq	%rdx,%r13
    720 
    721 	xorq	%r11,%r11
    722 	addq	%r12,%r10
    723 	adcq	$0,%r11
    724 	mulq	%r14
    725 	addq	%rax,%r10
    726 	movq	%rbx,%rax
    727 	adcq	%rdx,%r11
    728 	movq	%r10,8(%rdi,%rcx,1)
    729 
    730 	movq	16(%rsi,%rcx,1),%rbx
    731 	xorq	%r12,%r12
    732 	mulq	%r15
    733 	addq	%rax,%r13
    734 	movq	%rbx,%rax
    735 	adcq	%rdx,%r12
    736 
    737 	xorq	%r10,%r10
    738 	addq	%r13,%r11
    739 	adcq	$0,%r10
    740 	mulq	%r14
    741 	addq	%rax,%r11
    742 	movq	%rbx,%rax
    743 	adcq	%rdx,%r10
    744 	movq	%r11,16(%rdi,%rcx,1)
    745 
    746 
    747 	movq	24(%rsi,%rcx,1),%rbx
    748 	xorq	%r13,%r13
    749 	mulq	%r15
    750 	addq	%rax,%r12
    751 	movq	%rbx,%rax
    752 	adcq	%rdx,%r13
    753 
    754 	xorq	%r11,%r11
    755 	addq	%r12,%r10
    756 	leaq	32(%rcx),%rcx
    757 	adcq	$0,%r11
    758 	mulq	%r14
    759 	addq	%rax,%r10
    760 	movq	%rbx,%rax
    761 	adcq	%rdx,%r11
    762 	movq	%r10,-8(%rdi,%rcx,1)
    763 
    764 	cmpq	$0,%rcx
    765 	jne	.Lsqr4x_1st
    766 
    767 	xorq	%r12,%r12
    768 	addq	%r11,%r13
    769 	adcq	$0,%r12
    770 	mulq	%r15
    771 	addq	%rax,%r13
    772 	adcq	%rdx,%r12
    773 
    774 	movq	%r13,(%rdi)
    775 	leaq	16(%rbp),%rbp
    776 	movq	%r12,8(%rdi)
    777 	jmp	.Lsqr4x_outer
    778 
    779 .align	16
    780 .Lsqr4x_outer:
    781 	movq	-32(%rsi,%rbp,1),%r14
    782 	leaq	64(%rsp,%r9,2),%rdi
    783 	movq	-24(%rsi,%rbp,1),%rax
    784 	leaq	-32(%rdi,%rbp,1),%rdi
    785 	movq	-16(%rsi,%rbp,1),%rbx
    786 	movq	%rax,%r15
    787 
    788 	movq	-24(%rdi,%rbp,1),%r10
    789 	xorq	%r11,%r11
    790 	mulq	%r14
    791 	addq	%rax,%r10
    792 	movq	%rbx,%rax
    793 	adcq	%rdx,%r11
    794 	movq	%r10,-24(%rdi,%rbp,1)
    795 
    796 	xorq	%r10,%r10
    797 	addq	-16(%rdi,%rbp,1),%r11
    798 	adcq	$0,%r10
    799 	mulq	%r14
    800 	addq	%rax,%r11
    801 	movq	%rbx,%rax
    802 	adcq	%rdx,%r10
    803 	movq	%r11,-16(%rdi,%rbp,1)
    804 
    805 	leaq	-16(%rbp),%rcx
    806 	xorq	%r12,%r12
    807 
    808 
    809 	movq	8(%rsi,%rcx,1),%rbx
    810 	xorq	%r13,%r13
    811 	addq	8(%rdi,%rcx,1),%r12
    812 	adcq	$0,%r13
    813 	mulq	%r15
    814 	addq	%rax,%r12
    815 	movq	%rbx,%rax
    816 	adcq	%rdx,%r13
    817 
    818 	xorq	%r11,%r11
    819 	addq	%r12,%r10
    820 	adcq	$0,%r11
    821 	mulq	%r14
    822 	addq	%rax,%r10
    823 	movq	%rbx,%rax
    824 	adcq	%rdx,%r11
    825 	movq	%r10,8(%rdi,%rcx,1)
    826 
    827 	leaq	16(%rcx),%rcx
    828 	jmp	.Lsqr4x_inner
    829 
    830 .align	16
    831 .Lsqr4x_inner:
    832 	movq	(%rsi,%rcx,1),%rbx
    833 	xorq	%r12,%r12
    834 	addq	(%rdi,%rcx,1),%r13
    835 	adcq	$0,%r12
    836 	mulq	%r15
    837 	addq	%rax,%r13
    838 	movq	%rbx,%rax
    839 	adcq	%rdx,%r12
    840 
    841 	xorq	%r10,%r10
    842 	addq	%r13,%r11
    843 	adcq	$0,%r10
    844 	mulq	%r14
    845 	addq	%rax,%r11
    846 	movq	%rbx,%rax
    847 	adcq	%rdx,%r10
    848 	movq	%r11,(%rdi,%rcx,1)
    849 
    850 	movq	8(%rsi,%rcx,1),%rbx
    851 	xorq	%r13,%r13
    852 	addq	8(%rdi,%rcx,1),%r12
    853 	adcq	$0,%r13
    854 	mulq	%r15
    855 	addq	%rax,%r12
    856 	movq	%rbx,%rax
    857 	adcq	%rdx,%r13
    858 
    859 	xorq	%r11,%r11
    860 	addq	%r12,%r10
    861 	leaq	16(%rcx),%rcx
    862 	adcq	$0,%r11
    863 	mulq	%r14
    864 	addq	%rax,%r10
    865 	movq	%rbx,%rax
    866 	adcq	%rdx,%r11
    867 	movq	%r10,-8(%rdi,%rcx,1)
    868 
    869 	cmpq	$0,%rcx
    870 	jne	.Lsqr4x_inner
    871 
    872 	xorq	%r12,%r12
    873 	addq	%r11,%r13
    874 	adcq	$0,%r12
    875 	mulq	%r15
    876 	addq	%rax,%r13
    877 	adcq	%rdx,%r12
    878 
    879 	movq	%r13,(%rdi)
    880 	movq	%r12,8(%rdi)
    881 
    882 	addq	$16,%rbp
    883 	jnz	.Lsqr4x_outer
    884 
    885 
    886 	movq	-32(%rsi),%r14
    887 	leaq	64(%rsp,%r9,2),%rdi
    888 	movq	-24(%rsi),%rax
    889 	leaq	-32(%rdi,%rbp,1),%rdi
    890 	movq	-16(%rsi),%rbx
    891 	movq	%rax,%r15
    892 
    893 	xorq	%r11,%r11
    894 	mulq	%r14
    895 	addq	%rax,%r10
    896 	movq	%rbx,%rax
    897 	adcq	%rdx,%r11
    898 	movq	%r10,-24(%rdi)
    899 
    900 	xorq	%r10,%r10
    901 	addq	%r13,%r11
    902 	adcq	$0,%r10
    903 	mulq	%r14
    904 	addq	%rax,%r11
    905 	movq	%rbx,%rax
    906 	adcq	%rdx,%r10
    907 	movq	%r11,-16(%rdi)
    908 
    909 	movq	-8(%rsi),%rbx
    910 	mulq	%r15
    911 	addq	%rax,%r12
    912 	movq	%rbx,%rax
    913 	adcq	$0,%rdx
    914 
    915 	xorq	%r11,%r11
    916 	addq	%r12,%r10
    917 	movq	%rdx,%r13
    918 	adcq	$0,%r11
    919 	mulq	%r14
    920 	addq	%rax,%r10
    921 	movq	%rbx,%rax
    922 	adcq	%rdx,%r11
    923 	movq	%r10,-8(%rdi)
    924 
    925 	xorq	%r12,%r12
    926 	addq	%r11,%r13
    927 	adcq	$0,%r12
    928 	mulq	%r15
    929 	addq	%rax,%r13
    930 	movq	-16(%rsi),%rax
    931 	adcq	%rdx,%r12
    932 
    933 	movq	%r13,(%rdi)
    934 	movq	%r12,8(%rdi)
    935 
    936 	mulq	%rbx
    937 	addq	$16,%rbp
    938 	xorq	%r14,%r14
    939 	subq	%r9,%rbp
    940 	xorq	%r15,%r15
    941 
    942 	addq	%r12,%rax
    943 	adcq	$0,%rdx
    944 	movq	%rax,8(%rdi)
    945 	movq	%rdx,16(%rdi)
    946 	movq	%r15,24(%rdi)
    947 
    948 	movq	-16(%rsi,%rbp,1),%rax
    949 	leaq	64(%rsp,%r9,2),%rdi
    950 	xorq	%r10,%r10
    951 	movq	-24(%rdi,%rbp,2),%r11
    952 
    953 	leaq	(%r14,%r10,2),%r12
    954 	shrq	$63,%r10
    955 	leaq	(%rcx,%r11,2),%r13
    956 	shrq	$63,%r11
    957 	orq	%r10,%r13
    958 	movq	-16(%rdi,%rbp,2),%r10
    959 	movq	%r11,%r14
    960 	mulq	%rax
    961 	negq	%r15
    962 	movq	-8(%rdi,%rbp,2),%r11
    963 	adcq	%rax,%r12
    964 	movq	-8(%rsi,%rbp,1),%rax
    965 	movq	%r12,-32(%rdi,%rbp,2)
    966 	adcq	%rdx,%r13
    967 
    968 	leaq	(%r14,%r10,2),%rbx
    969 	movq	%r13,-24(%rdi,%rbp,2)
    970 	sbbq	%r15,%r15
    971 	shrq	$63,%r10
    972 	leaq	(%rcx,%r11,2),%r8
    973 	shrq	$63,%r11
    974 	orq	%r10,%r8
    975 	movq	0(%rdi,%rbp,2),%r10
    976 	movq	%r11,%r14
    977 	mulq	%rax
    978 	negq	%r15
    979 	movq	8(%rdi,%rbp,2),%r11
    980 	adcq	%rax,%rbx
    981 	movq	0(%rsi,%rbp,1),%rax
    982 	movq	%rbx,-16(%rdi,%rbp,2)
    983 	adcq	%rdx,%r8
    984 	leaq	16(%rbp),%rbp
    985 	movq	%r8,-40(%rdi,%rbp,2)
    986 	sbbq	%r15,%r15
    987 	jmp	.Lsqr4x_shift_n_add
    988 
    989 .align	16
    990 .Lsqr4x_shift_n_add:
    991 	leaq	(%r14,%r10,2),%r12
    992 	shrq	$63,%r10
    993 	leaq	(%rcx,%r11,2),%r13
    994 	shrq	$63,%r11
    995 	orq	%r10,%r13
    996 	movq	-16(%rdi,%rbp,2),%r10
    997 	movq	%r11,%r14
    998 	mulq	%rax
    999 	negq	%r15
   1000 	movq	-8(%rdi,%rbp,2),%r11
   1001 	adcq	%rax,%r12
   1002 	movq	-8(%rsi,%rbp,1),%rax
   1003 	movq	%r12,-32(%rdi,%rbp,2)
   1004 	adcq	%rdx,%r13
   1005 
   1006 	leaq	(%r14,%r10,2),%rbx
   1007 	movq	%r13,-24(%rdi,%rbp,2)
   1008 	sbbq	%r15,%r15
   1009 	shrq	$63,%r10
   1010 	leaq	(%rcx,%r11,2),%r8
   1011 	shrq	$63,%r11
   1012 	orq	%r10,%r8
   1013 	movq	0(%rdi,%rbp,2),%r10
   1014 	movq	%r11,%r14
   1015 	mulq	%rax
   1016 	negq	%r15
   1017 	movq	8(%rdi,%rbp,2),%r11
   1018 	adcq	%rax,%rbx
   1019 	movq	0(%rsi,%rbp,1),%rax
   1020 	movq	%rbx,-16(%rdi,%rbp,2)
   1021 	adcq	%rdx,%r8
   1022 
   1023 	leaq	(%r14,%r10,2),%r12
   1024 	movq	%r8,-8(%rdi,%rbp,2)
   1025 	sbbq	%r15,%r15
   1026 	shrq	$63,%r10
   1027 	leaq	(%rcx,%r11,2),%r13
   1028 	shrq	$63,%r11
   1029 	orq	%r10,%r13
   1030 	movq	16(%rdi,%rbp,2),%r10
   1031 	movq	%r11,%r14
   1032 	mulq	%rax
   1033 	negq	%r15
   1034 	movq	24(%rdi,%rbp,2),%r11
   1035 	adcq	%rax,%r12
   1036 	movq	8(%rsi,%rbp,1),%rax
   1037 	movq	%r12,0(%rdi,%rbp,2)
   1038 	adcq	%rdx,%r13
   1039 
   1040 	leaq	(%r14,%r10,2),%rbx
   1041 	movq	%r13,8(%rdi,%rbp,2)
   1042 	sbbq	%r15,%r15
   1043 	shrq	$63,%r10
   1044 	leaq	(%rcx,%r11,2),%r8
   1045 	shrq	$63,%r11
   1046 	orq	%r10,%r8
   1047 	movq	32(%rdi,%rbp,2),%r10
   1048 	movq	%r11,%r14
   1049 	mulq	%rax
   1050 	negq	%r15
   1051 	movq	40(%rdi,%rbp,2),%r11
   1052 	adcq	%rax,%rbx
   1053 	movq	16(%rsi,%rbp,1),%rax
   1054 	movq	%rbx,16(%rdi,%rbp,2)
   1055 	adcq	%rdx,%r8
   1056 	movq	%r8,24(%rdi,%rbp,2)
   1057 	sbbq	%r15,%r15
   1058 	addq	$32,%rbp
   1059 	jnz	.Lsqr4x_shift_n_add
   1060 
   1061 	leaq	(%r14,%r10,2),%r12
   1062 	shrq	$63,%r10
   1063 	leaq	(%rcx,%r11,2),%r13
   1064 	shrq	$63,%r11
   1065 	orq	%r10,%r13
   1066 	movq	-16(%rdi),%r10
   1067 	movq	%r11,%r14
   1068 	mulq	%rax
   1069 	negq	%r15
   1070 	movq	-8(%rdi),%r11
   1071 	adcq	%rax,%r12
   1072 	movq	-8(%rsi),%rax
   1073 	movq	%r12,-32(%rdi)
   1074 	adcq	%rdx,%r13
   1075 
   1076 	leaq	(%r14,%r10,2),%rbx
   1077 	movq	%r13,-24(%rdi)
   1078 	sbbq	%r15,%r15
   1079 	shrq	$63,%r10
   1080 	leaq	(%rcx,%r11,2),%r8
   1081 	shrq	$63,%r11
   1082 	orq	%r10,%r8
   1083 	mulq	%rax
   1084 	negq	%r15
   1085 	adcq	%rax,%rbx
   1086 	adcq	%rdx,%r8
   1087 	movq	%rbx,-16(%rdi)
   1088 	movq	%r8,-8(%rdi)
   1089 	movq	40(%rsp),%rsi
   1090 	movq	48(%rsp),%r8
   1091 	xorq	%rcx,%rcx
   1092 	movq	%r9,0(%rsp)
   1093 	subq	%r9,%rcx
   1094 	movq	64(%rsp),%r10
   1095 	movq	%r8,%r14
   1096 	leaq	64(%rsp,%r9,2),%rax
   1097 	leaq	64(%rsp,%r9,1),%rdi
   1098 	movq	%rax,8(%rsp)
   1099 	leaq	(%rsi,%r9,1),%rsi
   1100 	xorq	%rbp,%rbp
   1101 
   1102 	movq	0(%rsi,%rcx,1),%rax
   1103 	movq	8(%rsi,%rcx,1),%r9
   1104 	imulq	%r10,%r14
   1105 	movq	%rax,%rbx
   1106 	jmp	.Lsqr4x_mont_outer
   1107 
   1108 .align	16
   1109 .Lsqr4x_mont_outer:
   1110 	xorq	%r11,%r11
   1111 	mulq	%r14
   1112 	addq	%rax,%r10
   1113 	movq	%r9,%rax
   1114 	adcq	%rdx,%r11
   1115 	movq	%r8,%r15
   1116 
   1117 	xorq	%r10,%r10
   1118 	addq	8(%rdi,%rcx,1),%r11
   1119 	adcq	$0,%r10
   1120 	mulq	%r14
   1121 	addq	%rax,%r11
   1122 	movq	%rbx,%rax
   1123 	adcq	%rdx,%r10
   1124 
   1125 	imulq	%r11,%r15
   1126 
   1127 	movq	16(%rsi,%rcx,1),%rbx
   1128 	xorq	%r13,%r13
   1129 	addq	%r11,%r12
   1130 	adcq	$0,%r13
   1131 	mulq	%r15
   1132 	addq	%rax,%r12
   1133 	movq	%rbx,%rax
   1134 	adcq	%rdx,%r13
   1135 	movq	%r12,8(%rdi,%rcx,1)
   1136 
   1137 	xorq	%r11,%r11
   1138 	addq	16(%rdi,%rcx,1),%r10
   1139 	adcq	$0,%r11
   1140 	mulq	%r14
   1141 	addq	%rax,%r10
   1142 	movq	%r9,%rax
   1143 	adcq	%rdx,%r11
   1144 
   1145 	movq	24(%rsi,%rcx,1),%r9
   1146 	xorq	%r12,%r12
   1147 	addq	%r10,%r13
   1148 	adcq	$0,%r12
   1149 	mulq	%r15
   1150 	addq	%rax,%r13
   1151 	movq	%r9,%rax
   1152 	adcq	%rdx,%r12
   1153 	movq	%r13,16(%rdi,%rcx,1)
   1154 
   1155 	xorq	%r10,%r10
   1156 	addq	24(%rdi,%rcx,1),%r11
   1157 	leaq	32(%rcx),%rcx
   1158 	adcq	$0,%r10
   1159 	mulq	%r14
   1160 	addq	%rax,%r11
   1161 	movq	%rbx,%rax
   1162 	adcq	%rdx,%r10
   1163 	jmp	.Lsqr4x_mont_inner
   1164 
   1165 .align	16
   1166 .Lsqr4x_mont_inner:
   1167 	movq	(%rsi,%rcx,1),%rbx
   1168 	xorq	%r13,%r13
   1169 	addq	%r11,%r12
   1170 	adcq	$0,%r13
   1171 	mulq	%r15
   1172 	addq	%rax,%r12
   1173 	movq	%rbx,%rax
   1174 	adcq	%rdx,%r13
   1175 	movq	%r12,-8(%rdi,%rcx,1)
   1176 
   1177 	xorq	%r11,%r11
   1178 	addq	(%rdi,%rcx,1),%r10
   1179 	adcq	$0,%r11
   1180 	mulq	%r14
   1181 	addq	%rax,%r10
   1182 	movq	%r9,%rax
   1183 	adcq	%rdx,%r11
   1184 
   1185 	movq	8(%rsi,%rcx,1),%r9
   1186 	xorq	%r12,%r12
   1187 	addq	%r10,%r13
   1188 	adcq	$0,%r12
   1189 	mulq	%r15
   1190 	addq	%rax,%r13
   1191 	movq	%r9,%rax
   1192 	adcq	%rdx,%r12
   1193 	movq	%r13,(%rdi,%rcx,1)
   1194 
   1195 	xorq	%r10,%r10
   1196 	addq	8(%rdi,%rcx,1),%r11
   1197 	adcq	$0,%r10
   1198 	mulq	%r14
   1199 	addq	%rax,%r11
   1200 	movq	%rbx,%rax
   1201 	adcq	%rdx,%r10
   1202 
   1203 
   1204 	movq	16(%rsi,%rcx,1),%rbx
   1205 	xorq	%r13,%r13
   1206 	addq	%r11,%r12
   1207 	adcq	$0,%r13
   1208 	mulq	%r15
   1209 	addq	%rax,%r12
   1210 	movq	%rbx,%rax
   1211 	adcq	%rdx,%r13
   1212 	movq	%r12,8(%rdi,%rcx,1)
   1213 
   1214 	xorq	%r11,%r11
   1215 	addq	16(%rdi,%rcx,1),%r10
   1216 	adcq	$0,%r11
   1217 	mulq	%r14
   1218 	addq	%rax,%r10
   1219 	movq	%r9,%rax
   1220 	adcq	%rdx,%r11
   1221 
   1222 	movq	24(%rsi,%rcx,1),%r9
   1223 	xorq	%r12,%r12
   1224 	addq	%r10,%r13
   1225 	adcq	$0,%r12
   1226 	mulq	%r15
   1227 	addq	%rax,%r13
   1228 	movq	%r9,%rax
   1229 	adcq	%rdx,%r12
   1230 	movq	%r13,16(%rdi,%rcx,1)
   1231 
   1232 	xorq	%r10,%r10
   1233 	addq	24(%rdi,%rcx,1),%r11
   1234 	leaq	32(%rcx),%rcx
   1235 	adcq	$0,%r10
   1236 	mulq	%r14
   1237 	addq	%rax,%r11
   1238 	movq	%rbx,%rax
   1239 	adcq	%rdx,%r10
   1240 	cmpq	$0,%rcx
   1241 	jne	.Lsqr4x_mont_inner
   1242 
   1243 	subq	0(%rsp),%rcx
   1244 	movq	%r8,%r14
   1245 
   1246 	xorq	%r13,%r13
   1247 	addq	%r11,%r12
   1248 	adcq	$0,%r13
   1249 	mulq	%r15
   1250 	addq	%rax,%r12
   1251 	movq	%r9,%rax
   1252 	adcq	%rdx,%r13
   1253 	movq	%r12,-8(%rdi)
   1254 
   1255 	xorq	%r11,%r11
   1256 	addq	(%rdi),%r10
   1257 	adcq	$0,%r11
   1258 	movq	0(%rsi,%rcx,1),%rbx
   1259 	addq	%rbp,%r10
   1260 	adcq	$0,%r11
   1261 
   1262 	imulq	16(%rdi,%rcx,1),%r14
   1263 	xorq	%r12,%r12
   1264 	movq	8(%rsi,%rcx,1),%r9
   1265 	addq	%r10,%r13
   1266 	movq	16(%rdi,%rcx,1),%r10
   1267 	adcq	$0,%r12
   1268 	mulq	%r15
   1269 	addq	%rax,%r13
   1270 	movq	%rbx,%rax
   1271 	adcq	%rdx,%r12
   1272 	movq	%r13,(%rdi)
   1273 
   1274 	xorq	%rbp,%rbp
   1275 	addq	8(%rdi),%r12
   1276 	adcq	%rbp,%rbp
   1277 	addq	%r11,%r12
   1278 	leaq	16(%rdi),%rdi
   1279 	adcq	$0,%rbp
   1280 	movq	%r12,-8(%rdi)
   1281 	cmpq	8(%rsp),%rdi
   1282 	jb	.Lsqr4x_mont_outer
   1283 
   1284 	movq	0(%rsp),%r9
   1285 	movq	%rbp,(%rdi)
   1286 	movq	64(%rsp,%r9,1),%rax
   1287 	leaq	64(%rsp,%r9,1),%rbx
   1288 	movq	40(%rsp),%rsi
   1289 	shrq	$5,%r9
   1290 	movq	8(%rbx),%rdx
   1291 	xorq	%rbp,%rbp
   1292 
   1293 	movq	32(%rsp),%rdi
   1294 	subq	0(%rsi),%rax
   1295 	movq	16(%rbx),%r10
   1296 	movq	24(%rbx),%r11
   1297 	sbbq	8(%rsi),%rdx
   1298 	leaq	-1(%r9),%rcx
   1299 	jmp	.Lsqr4x_sub
   1300 .align	16
   1301 .Lsqr4x_sub:
   1302 	movq	%rax,0(%rdi,%rbp,8)
   1303 	movq	%rdx,8(%rdi,%rbp,8)
   1304 	sbbq	16(%rsi,%rbp,8),%r10
   1305 	movq	32(%rbx,%rbp,8),%rax
   1306 	movq	40(%rbx,%rbp,8),%rdx
   1307 	sbbq	24(%rsi,%rbp,8),%r11
   1308 	movq	%r10,16(%rdi,%rbp,8)
   1309 	movq	%r11,24(%rdi,%rbp,8)
   1310 	sbbq	32(%rsi,%rbp,8),%rax
   1311 	movq	48(%rbx,%rbp,8),%r10
   1312 	movq	56(%rbx,%rbp,8),%r11
   1313 	sbbq	40(%rsi,%rbp,8),%rdx
   1314 	leaq	4(%rbp),%rbp
   1315 	decq	%rcx
   1316 	jnz	.Lsqr4x_sub
   1317 
   1318 	movq	%rax,0(%rdi,%rbp,8)
   1319 	movq	32(%rbx,%rbp,8),%rax
   1320 	sbbq	16(%rsi,%rbp,8),%r10
   1321 	movq	%rdx,8(%rdi,%rbp,8)
   1322 	sbbq	24(%rsi,%rbp,8),%r11
   1323 	movq	%r10,16(%rdi,%rbp,8)
   1324 
   1325 	sbbq	$0,%rax
   1326 	movq	%r11,24(%rdi,%rbp,8)
   1327 	xorq	%rbp,%rbp
   1328 	andq	%rax,%rbx
   1329 	notq	%rax
   1330 	movq	%rdi,%rsi
   1331 	andq	%rax,%rsi
   1332 	leaq	-1(%r9),%rcx
   1333 	orq	%rsi,%rbx
   1334 
   1335 	pxor	%xmm0,%xmm0
   1336 	leaq	64(%rsp,%r9,8),%rsi
   1337 	movdqu	(%rbx),%xmm1
   1338 	leaq	(%rsi,%r9,8),%rsi
   1339 	movdqa	%xmm0,64(%rsp)
   1340 	movdqa	%xmm0,(%rsi)
   1341 	movdqu	%xmm1,(%rdi)
   1342 	jmp	.Lsqr4x_copy
   1343 .align	16
   1344 .Lsqr4x_copy:
   1345 	movdqu	16(%rbx,%rbp,1),%xmm2
   1346 	movdqu	32(%rbx,%rbp,1),%xmm1
   1347 	movdqa	%xmm0,80(%rsp,%rbp,1)
   1348 	movdqa	%xmm0,96(%rsp,%rbp,1)
   1349 	movdqa	%xmm0,16(%rsi,%rbp,1)
   1350 	movdqa	%xmm0,32(%rsi,%rbp,1)
   1351 	movdqu	%xmm2,16(%rdi,%rbp,1)
   1352 	movdqu	%xmm1,32(%rdi,%rbp,1)
   1353 	leaq	32(%rbp),%rbp
   1354 	decq	%rcx
   1355 	jnz	.Lsqr4x_copy
   1356 
   1357 	movdqu	16(%rbx,%rbp,1),%xmm2
   1358 	movdqa	%xmm0,80(%rsp,%rbp,1)
   1359 	movdqa	%xmm0,16(%rsi,%rbp,1)
   1360 	movdqu	%xmm2,16(%rdi,%rbp,1)
   1361 	movq	56(%rsp),%rsi
   1362 	movq	$1,%rax
   1363 	movq	0(%rsi),%r15
   1364 	movq	8(%rsi),%r14
   1365 	movq	16(%rsi),%r13
   1366 	movq	24(%rsi),%r12
   1367 	movq	32(%rsi),%rbp
   1368 	movq	40(%rsi),%rbx
   1369 	leaq	48(%rsi),%rsp
   1370 .Lsqr4x_epilogue:
   1371 	.byte	0xf3,0xc3
   1372 .size	bn_sqr4x_mont,.-bn_sqr4x_mont
   1373 .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,0
   1374 .align	16
   1375