1299481Sjkim# $FreeBSD: releng/11.0/secure/lib/libcrypto/amd64/x86_64-mont.S 314125 2017-02-23 07:11:48Z delphij $ 2299481Sjkim# Do not modify. This file is auto-generated from x86_64-mont.pl. 3238405Sjkim.text 4238405Sjkim 5290207Sjkim 6290207Sjkim 7238405Sjkim.globl bn_mul_mont 8238405Sjkim.type bn_mul_mont,@function 9238405Sjkim.align 16 10238405Sjkimbn_mul_mont: 11306198Sjkim movl %r9d,%r9d 12306198Sjkim movq %rsp,%rax 13238405Sjkim testl $3,%r9d 14238405Sjkim jnz .Lmul_enter 15238405Sjkim cmpl $8,%r9d 16238405Sjkim jb .Lmul_enter 17299481Sjkim movl OPENSSL_ia32cap_P+8(%rip),%r11d 18238405Sjkim cmpq %rsi,%rdx 19238405Sjkim jne .Lmul4x_enter 20290207Sjkim testl $7,%r9d 21290207Sjkim jz .Lsqr8x_enter 22290207Sjkim jmp .Lmul4x_enter 23238405Sjkim 24238405Sjkim.align 16 25238405Sjkim.Lmul_enter: 26238405Sjkim pushq %rbx 27238405Sjkim pushq %rbp 28238405Sjkim pushq %r12 29238405Sjkim pushq %r13 30238405Sjkim pushq %r14 31238405Sjkim pushq %r15 32238405Sjkim 33306198Sjkim negq %r9 34238405Sjkim movq %rsp,%r11 35306198Sjkim leaq -16(%rsp,%r9,8),%r10 36306198Sjkim negq %r9 37306198Sjkim andq $-1024,%r10 38238405Sjkim 39298998Sjkim 40298998Sjkim 41298998Sjkim 42298998Sjkim 43298998Sjkim 44298998Sjkim 45306198Sjkim subq %r10,%r11 46298998Sjkim andq $-4096,%r11 47306198Sjkim leaq (%r10,%r11,1),%rsp 48306198Sjkim movq (%rsp),%r11 49306198Sjkim cmpq %r10,%rsp 50306198Sjkim ja .Lmul_page_walk 51306198Sjkim jmp .Lmul_page_walk_done 52306198Sjkim 53306198Sjkim.align 16 54298998Sjkim.Lmul_page_walk: 55306198Sjkim leaq -4096(%rsp),%rsp 56306198Sjkim movq (%rsp),%r11 57306198Sjkim cmpq %r10,%rsp 58306198Sjkim ja .Lmul_page_walk 59306198Sjkim.Lmul_page_walk_done: 60298998Sjkim 61306198Sjkim movq %rax,8(%rsp,%r9,8) 62306198Sjkim.Lmul_body: 63238405Sjkim movq %rdx,%r12 64238405Sjkim movq (%r8),%r8 65238405Sjkim movq (%r12),%rbx 66238405Sjkim movq (%rsi),%rax 67238405Sjkim 68238405Sjkim xorq %r14,%r14 69238405Sjkim xorq %r15,%r15 70238405Sjkim 71238405Sjkim movq %r8,%rbp 72238405Sjkim mulq %rbx 73238405Sjkim movq %rax,%r10 74238405Sjkim movq (%rcx),%rax 75238405Sjkim 76238405Sjkim imulq %r10,%rbp 77238405Sjkim movq %rdx,%r11 78238405Sjkim 79238405Sjkim mulq %rbp 80238405Sjkim addq %rax,%r10 81238405Sjkim movq 8(%rsi),%rax 82238405Sjkim adcq $0,%rdx 83238405Sjkim movq %rdx,%r13 84238405Sjkim 85238405Sjkim leaq 1(%r15),%r15 86238405Sjkim jmp .L1st_enter 87238405Sjkim 88238405Sjkim.align 16 89238405Sjkim.L1st: 90238405Sjkim addq %rax,%r13 91238405Sjkim movq (%rsi,%r15,8),%rax 92238405Sjkim adcq $0,%rdx 93238405Sjkim addq %r11,%r13 94238405Sjkim movq %r10,%r11 95238405Sjkim adcq $0,%rdx 96238405Sjkim movq %r13,-16(%rsp,%r15,8) 97238405Sjkim movq %rdx,%r13 98238405Sjkim 99238405Sjkim.L1st_enter: 100238405Sjkim mulq %rbx 101238405Sjkim addq %rax,%r11 102238405Sjkim movq (%rcx,%r15,8),%rax 103238405Sjkim adcq $0,%rdx 104238405Sjkim leaq 1(%r15),%r15 105238405Sjkim movq %rdx,%r10 106238405Sjkim 107238405Sjkim mulq %rbp 108238405Sjkim cmpq %r9,%r15 109238405Sjkim jne .L1st 110238405Sjkim 111238405Sjkim addq %rax,%r13 112238405Sjkim movq (%rsi),%rax 113238405Sjkim adcq $0,%rdx 114238405Sjkim addq %r11,%r13 115238405Sjkim adcq $0,%rdx 116238405Sjkim movq %r13,-16(%rsp,%r15,8) 117238405Sjkim movq %rdx,%r13 118238405Sjkim movq %r10,%r11 119238405Sjkim 120238405Sjkim xorq %rdx,%rdx 121238405Sjkim addq %r11,%r13 122238405Sjkim adcq $0,%rdx 123238405Sjkim movq %r13,-8(%rsp,%r9,8) 124238405Sjkim movq %rdx,(%rsp,%r9,8) 125238405Sjkim 126238405Sjkim leaq 1(%r14),%r14 127238405Sjkim jmp .Louter 128238405Sjkim.align 16 129238405Sjkim.Louter: 130238405Sjkim movq (%r12,%r14,8),%rbx 131238405Sjkim xorq %r15,%r15 132238405Sjkim movq %r8,%rbp 133238405Sjkim movq (%rsp),%r10 134238405Sjkim mulq %rbx 135238405Sjkim addq %rax,%r10 136238405Sjkim movq (%rcx),%rax 137238405Sjkim adcq $0,%rdx 138238405Sjkim 139238405Sjkim imulq %r10,%rbp 140238405Sjkim movq %rdx,%r11 141238405Sjkim 142238405Sjkim mulq %rbp 143238405Sjkim addq %rax,%r10 144238405Sjkim movq 8(%rsi),%rax 145238405Sjkim adcq $0,%rdx 146238405Sjkim movq 8(%rsp),%r10 147238405Sjkim movq %rdx,%r13 148238405Sjkim 149238405Sjkim leaq 1(%r15),%r15 150238405Sjkim jmp .Linner_enter 151238405Sjkim 152238405Sjkim.align 16 153238405Sjkim.Linner: 154238405Sjkim addq %rax,%r13 155238405Sjkim movq (%rsi,%r15,8),%rax 156238405Sjkim adcq $0,%rdx 157238405Sjkim addq %r10,%r13 158238405Sjkim movq (%rsp,%r15,8),%r10 159238405Sjkim adcq $0,%rdx 160238405Sjkim movq %r13,-16(%rsp,%r15,8) 161238405Sjkim movq %rdx,%r13 162238405Sjkim 163238405Sjkim.Linner_enter: 164238405Sjkim mulq %rbx 165238405Sjkim addq %rax,%r11 166238405Sjkim movq (%rcx,%r15,8),%rax 167238405Sjkim adcq $0,%rdx 168238405Sjkim addq %r11,%r10 169238405Sjkim movq %rdx,%r11 170238405Sjkim adcq $0,%r11 171238405Sjkim leaq 1(%r15),%r15 172238405Sjkim 173238405Sjkim mulq %rbp 174238405Sjkim cmpq %r9,%r15 175238405Sjkim jne .Linner 176238405Sjkim 177238405Sjkim addq %rax,%r13 178238405Sjkim movq (%rsi),%rax 179238405Sjkim adcq $0,%rdx 180238405Sjkim addq %r10,%r13 181238405Sjkim movq (%rsp,%r15,8),%r10 182238405Sjkim adcq $0,%rdx 183238405Sjkim movq %r13,-16(%rsp,%r15,8) 184238405Sjkim movq %rdx,%r13 185238405Sjkim 186238405Sjkim xorq %rdx,%rdx 187238405Sjkim addq %r11,%r13 188238405Sjkim adcq $0,%rdx 189238405Sjkim addq %r10,%r13 190238405Sjkim adcq $0,%rdx 191238405Sjkim movq %r13,-8(%rsp,%r9,8) 192238405Sjkim movq %rdx,(%rsp,%r9,8) 193238405Sjkim 194238405Sjkim leaq 1(%r14),%r14 195238405Sjkim cmpq %r9,%r14 196290207Sjkim jb .Louter 197238405Sjkim 198238405Sjkim xorq %r14,%r14 199238405Sjkim movq (%rsp),%rax 200238405Sjkim leaq (%rsp),%rsi 201238405Sjkim movq %r9,%r15 202238405Sjkim jmp .Lsub 203238405Sjkim.align 16 204238405Sjkim.Lsub: sbbq (%rcx,%r14,8),%rax 205238405Sjkim movq %rax,(%rdi,%r14,8) 206238405Sjkim movq 8(%rsi,%r14,8),%rax 207238405Sjkim leaq 1(%r14),%r14 208238405Sjkim decq %r15 209238405Sjkim jnz .Lsub 210238405Sjkim 211238405Sjkim sbbq $0,%rax 212238405Sjkim xorq %r14,%r14 213238405Sjkim andq %rax,%rsi 214238405Sjkim notq %rax 215238405Sjkim movq %rdi,%rcx 216238405Sjkim andq %rax,%rcx 217238405Sjkim movq %r9,%r15 218238405Sjkim orq %rcx,%rsi 219238405Sjkim.align 16 220238405Sjkim.Lcopy: 221238405Sjkim movq (%rsi,%r14,8),%rax 222238405Sjkim movq %r14,(%rsp,%r14,8) 223238405Sjkim movq %rax,(%rdi,%r14,8) 224238405Sjkim leaq 1(%r14),%r14 225238405Sjkim subq $1,%r15 226238405Sjkim jnz .Lcopy 227238405Sjkim 228238405Sjkim movq 8(%rsp,%r9,8),%rsi 229238405Sjkim movq $1,%rax 230306198Sjkim movq -48(%rsi),%r15 231306198Sjkim movq -40(%rsi),%r14 232306198Sjkim movq -32(%rsi),%r13 233306198Sjkim movq -24(%rsi),%r12 234306198Sjkim movq -16(%rsi),%rbp 235306198Sjkim movq -8(%rsi),%rbx 236306198Sjkim leaq (%rsi),%rsp 237238405Sjkim.Lmul_epilogue: 238238405Sjkim .byte 0xf3,0xc3 239238405Sjkim.size bn_mul_mont,.-bn_mul_mont 240238405Sjkim.type bn_mul4x_mont,@function 241238405Sjkim.align 16 242238405Sjkimbn_mul4x_mont: 243306198Sjkim movl %r9d,%r9d 244306198Sjkim movq %rsp,%rax 245238405Sjkim.Lmul4x_enter: 246299481Sjkim andl $0x80100,%r11d 247299481Sjkim cmpl $0x80100,%r11d 248299481Sjkim je .Lmulx4x_enter 249238405Sjkim pushq %rbx 250238405Sjkim pushq %rbp 251238405Sjkim pushq %r12 252238405Sjkim pushq %r13 253238405Sjkim pushq %r14 254238405Sjkim pushq %r15 255238405Sjkim 256306198Sjkim negq %r9 257238405Sjkim movq %rsp,%r11 258306198Sjkim leaq -32(%rsp,%r9,8),%r10 259306198Sjkim negq %r9 260306198Sjkim andq $-1024,%r10 261238405Sjkim 262306198Sjkim subq %r10,%r11 263298998Sjkim andq $-4096,%r11 264306198Sjkim leaq (%r10,%r11,1),%rsp 265306198Sjkim movq (%rsp),%r11 266306198Sjkim cmpq %r10,%rsp 267306198Sjkim ja .Lmul4x_page_walk 268306198Sjkim jmp .Lmul4x_page_walk_done 269306198Sjkim 270298998Sjkim.Lmul4x_page_walk: 271306198Sjkim leaq -4096(%rsp),%rsp 272306198Sjkim movq (%rsp),%r11 273306198Sjkim cmpq %r10,%rsp 274306198Sjkim ja .Lmul4x_page_walk 275306198Sjkim.Lmul4x_page_walk_done: 276298998Sjkim 277306198Sjkim movq %rax,8(%rsp,%r9,8) 278306198Sjkim.Lmul4x_body: 279238405Sjkim movq %rdi,16(%rsp,%r9,8) 280238405Sjkim movq %rdx,%r12 281238405Sjkim movq (%r8),%r8 282238405Sjkim movq (%r12),%rbx 283238405Sjkim movq (%rsi),%rax 284238405Sjkim 285238405Sjkim xorq %r14,%r14 286238405Sjkim xorq %r15,%r15 287238405Sjkim 288238405Sjkim movq %r8,%rbp 289238405Sjkim mulq %rbx 290238405Sjkim movq %rax,%r10 291238405Sjkim movq (%rcx),%rax 292238405Sjkim 293238405Sjkim imulq %r10,%rbp 294238405Sjkim movq %rdx,%r11 295238405Sjkim 296238405Sjkim mulq %rbp 297238405Sjkim addq %rax,%r10 298238405Sjkim movq 8(%rsi),%rax 299238405Sjkim adcq $0,%rdx 300238405Sjkim movq %rdx,%rdi 301238405Sjkim 302238405Sjkim mulq %rbx 303238405Sjkim addq %rax,%r11 304238405Sjkim movq 8(%rcx),%rax 305238405Sjkim adcq $0,%rdx 306238405Sjkim movq %rdx,%r10 307238405Sjkim 308238405Sjkim mulq %rbp 309238405Sjkim addq %rax,%rdi 310238405Sjkim movq 16(%rsi),%rax 311238405Sjkim adcq $0,%rdx 312238405Sjkim addq %r11,%rdi 313238405Sjkim leaq 4(%r15),%r15 314238405Sjkim adcq $0,%rdx 315238405Sjkim movq %rdi,(%rsp) 316238405Sjkim movq %rdx,%r13 317238405Sjkim jmp .L1st4x 318238405Sjkim.align 16 319238405Sjkim.L1st4x: 320238405Sjkim mulq %rbx 321238405Sjkim addq %rax,%r10 322238405Sjkim movq -16(%rcx,%r15,8),%rax 323238405Sjkim adcq $0,%rdx 324238405Sjkim movq %rdx,%r11 325238405Sjkim 326238405Sjkim mulq %rbp 327238405Sjkim addq %rax,%r13 328238405Sjkim movq -8(%rsi,%r15,8),%rax 329238405Sjkim adcq $0,%rdx 330238405Sjkim addq %r10,%r13 331238405Sjkim adcq $0,%rdx 332238405Sjkim movq %r13,-24(%rsp,%r15,8) 333238405Sjkim movq %rdx,%rdi 334238405Sjkim 335238405Sjkim mulq %rbx 336238405Sjkim addq %rax,%r11 337238405Sjkim movq -8(%rcx,%r15,8),%rax 338238405Sjkim adcq $0,%rdx 339238405Sjkim movq %rdx,%r10 340238405Sjkim 341238405Sjkim mulq %rbp 342238405Sjkim addq %rax,%rdi 343238405Sjkim movq (%rsi,%r15,8),%rax 344238405Sjkim adcq $0,%rdx 345238405Sjkim addq %r11,%rdi 346238405Sjkim adcq $0,%rdx 347238405Sjkim movq %rdi,-16(%rsp,%r15,8) 348238405Sjkim movq %rdx,%r13 349238405Sjkim 350238405Sjkim mulq %rbx 351238405Sjkim addq %rax,%r10 352238405Sjkim movq (%rcx,%r15,8),%rax 353238405Sjkim adcq $0,%rdx 354238405Sjkim movq %rdx,%r11 355238405Sjkim 356238405Sjkim mulq %rbp 357238405Sjkim addq %rax,%r13 358238405Sjkim movq 8(%rsi,%r15,8),%rax 359238405Sjkim adcq $0,%rdx 360238405Sjkim addq %r10,%r13 361238405Sjkim adcq $0,%rdx 362238405Sjkim movq %r13,-8(%rsp,%r15,8) 363238405Sjkim movq %rdx,%rdi 364238405Sjkim 365238405Sjkim mulq %rbx 366238405Sjkim addq %rax,%r11 367238405Sjkim movq 8(%rcx,%r15,8),%rax 368238405Sjkim adcq $0,%rdx 369238405Sjkim leaq 4(%r15),%r15 370238405Sjkim movq %rdx,%r10 371238405Sjkim 372238405Sjkim mulq %rbp 373238405Sjkim addq %rax,%rdi 374238405Sjkim movq -16(%rsi,%r15,8),%rax 375238405Sjkim adcq $0,%rdx 376238405Sjkim addq %r11,%rdi 377238405Sjkim adcq $0,%rdx 378238405Sjkim movq %rdi,-32(%rsp,%r15,8) 379238405Sjkim movq %rdx,%r13 380238405Sjkim cmpq %r9,%r15 381290207Sjkim jb .L1st4x 382238405Sjkim 383238405Sjkim mulq %rbx 384238405Sjkim addq %rax,%r10 385238405Sjkim movq -16(%rcx,%r15,8),%rax 386238405Sjkim adcq $0,%rdx 387238405Sjkim movq %rdx,%r11 388238405Sjkim 389238405Sjkim mulq %rbp 390238405Sjkim addq %rax,%r13 391238405Sjkim movq -8(%rsi,%r15,8),%rax 392238405Sjkim adcq $0,%rdx 393238405Sjkim addq %r10,%r13 394238405Sjkim adcq $0,%rdx 395238405Sjkim movq %r13,-24(%rsp,%r15,8) 396238405Sjkim movq %rdx,%rdi 397238405Sjkim 398238405Sjkim mulq %rbx 399238405Sjkim addq %rax,%r11 400238405Sjkim movq -8(%rcx,%r15,8),%rax 401238405Sjkim adcq $0,%rdx 402238405Sjkim movq %rdx,%r10 403238405Sjkim 404238405Sjkim mulq %rbp 405238405Sjkim addq %rax,%rdi 406238405Sjkim movq (%rsi),%rax 407238405Sjkim adcq $0,%rdx 408238405Sjkim addq %r11,%rdi 409238405Sjkim adcq $0,%rdx 410238405Sjkim movq %rdi,-16(%rsp,%r15,8) 411238405Sjkim movq %rdx,%r13 412238405Sjkim 413238405Sjkim xorq %rdi,%rdi 414238405Sjkim addq %r10,%r13 415238405Sjkim adcq $0,%rdi 416238405Sjkim movq %r13,-8(%rsp,%r15,8) 417238405Sjkim movq %rdi,(%rsp,%r15,8) 418238405Sjkim 419238405Sjkim leaq 1(%r14),%r14 420238405Sjkim.align 4 421238405Sjkim.Louter4x: 422238405Sjkim movq (%r12,%r14,8),%rbx 423238405Sjkim xorq %r15,%r15 424238405Sjkim movq (%rsp),%r10 425238405Sjkim movq %r8,%rbp 426238405Sjkim mulq %rbx 427238405Sjkim addq %rax,%r10 428238405Sjkim movq (%rcx),%rax 429238405Sjkim adcq $0,%rdx 430238405Sjkim 431238405Sjkim imulq %r10,%rbp 432238405Sjkim movq %rdx,%r11 433238405Sjkim 434238405Sjkim mulq %rbp 435238405Sjkim addq %rax,%r10 436238405Sjkim movq 8(%rsi),%rax 437238405Sjkim adcq $0,%rdx 438238405Sjkim movq %rdx,%rdi 439238405Sjkim 440238405Sjkim mulq %rbx 441238405Sjkim addq %rax,%r11 442238405Sjkim movq 8(%rcx),%rax 443238405Sjkim adcq $0,%rdx 444238405Sjkim addq 8(%rsp),%r11 445238405Sjkim adcq $0,%rdx 446238405Sjkim movq %rdx,%r10 447238405Sjkim 448238405Sjkim mulq %rbp 449238405Sjkim addq %rax,%rdi 450238405Sjkim movq 16(%rsi),%rax 451238405Sjkim adcq $0,%rdx 452238405Sjkim addq %r11,%rdi 453238405Sjkim leaq 4(%r15),%r15 454238405Sjkim adcq $0,%rdx 455238405Sjkim movq %rdi,(%rsp) 456238405Sjkim movq %rdx,%r13 457238405Sjkim jmp .Linner4x 458238405Sjkim.align 16 459238405Sjkim.Linner4x: 460238405Sjkim mulq %rbx 461238405Sjkim addq %rax,%r10 462238405Sjkim movq -16(%rcx,%r15,8),%rax 463238405Sjkim adcq $0,%rdx 464238405Sjkim addq -16(%rsp,%r15,8),%r10 465238405Sjkim adcq $0,%rdx 466238405Sjkim movq %rdx,%r11 467238405Sjkim 468238405Sjkim mulq %rbp 469238405Sjkim addq %rax,%r13 470238405Sjkim movq -8(%rsi,%r15,8),%rax 471238405Sjkim adcq $0,%rdx 472238405Sjkim addq %r10,%r13 473238405Sjkim adcq $0,%rdx 474238405Sjkim movq %r13,-24(%rsp,%r15,8) 475238405Sjkim movq %rdx,%rdi 476238405Sjkim 477238405Sjkim mulq %rbx 478238405Sjkim addq %rax,%r11 479238405Sjkim movq -8(%rcx,%r15,8),%rax 480238405Sjkim adcq $0,%rdx 481238405Sjkim addq -8(%rsp,%r15,8),%r11 482238405Sjkim adcq $0,%rdx 483238405Sjkim movq %rdx,%r10 484238405Sjkim 485238405Sjkim mulq %rbp 486238405Sjkim addq %rax,%rdi 487238405Sjkim movq (%rsi,%r15,8),%rax 488238405Sjkim adcq $0,%rdx 489238405Sjkim addq %r11,%rdi 490238405Sjkim adcq $0,%rdx 491238405Sjkim movq %rdi,-16(%rsp,%r15,8) 492238405Sjkim movq %rdx,%r13 493238405Sjkim 494238405Sjkim mulq %rbx 495238405Sjkim addq %rax,%r10 496238405Sjkim movq (%rcx,%r15,8),%rax 497238405Sjkim adcq $0,%rdx 498238405Sjkim addq (%rsp,%r15,8),%r10 499238405Sjkim adcq $0,%rdx 500238405Sjkim movq %rdx,%r11 501238405Sjkim 502238405Sjkim mulq %rbp 503238405Sjkim addq %rax,%r13 504238405Sjkim movq 8(%rsi,%r15,8),%rax 505238405Sjkim adcq $0,%rdx 506238405Sjkim addq %r10,%r13 507238405Sjkim adcq $0,%rdx 508238405Sjkim movq %r13,-8(%rsp,%r15,8) 509238405Sjkim movq %rdx,%rdi 510238405Sjkim 511238405Sjkim mulq %rbx 512238405Sjkim addq %rax,%r11 513238405Sjkim movq 8(%rcx,%r15,8),%rax 514238405Sjkim adcq $0,%rdx 515238405Sjkim addq 8(%rsp,%r15,8),%r11 516238405Sjkim adcq $0,%rdx 517238405Sjkim leaq 4(%r15),%r15 518238405Sjkim movq %rdx,%r10 519238405Sjkim 520238405Sjkim mulq %rbp 521238405Sjkim addq %rax,%rdi 522238405Sjkim movq -16(%rsi,%r15,8),%rax 523238405Sjkim adcq $0,%rdx 524238405Sjkim addq %r11,%rdi 525238405Sjkim adcq $0,%rdx 526238405Sjkim movq %rdi,-32(%rsp,%r15,8) 527238405Sjkim movq %rdx,%r13 528238405Sjkim cmpq %r9,%r15 529290207Sjkim jb .Linner4x 530238405Sjkim 531238405Sjkim mulq %rbx 532238405Sjkim addq %rax,%r10 533238405Sjkim movq -16(%rcx,%r15,8),%rax 534238405Sjkim adcq $0,%rdx 535238405Sjkim addq -16(%rsp,%r15,8),%r10 536238405Sjkim adcq $0,%rdx 537238405Sjkim movq %rdx,%r11 538238405Sjkim 539238405Sjkim mulq %rbp 540238405Sjkim addq %rax,%r13 541238405Sjkim movq -8(%rsi,%r15,8),%rax 542238405Sjkim adcq $0,%rdx 543238405Sjkim addq %r10,%r13 544238405Sjkim adcq $0,%rdx 545238405Sjkim movq %r13,-24(%rsp,%r15,8) 546238405Sjkim movq %rdx,%rdi 547238405Sjkim 548238405Sjkim mulq %rbx 549238405Sjkim addq %rax,%r11 550238405Sjkim movq -8(%rcx,%r15,8),%rax 551238405Sjkim adcq $0,%rdx 552238405Sjkim addq -8(%rsp,%r15,8),%r11 553238405Sjkim adcq $0,%rdx 554238405Sjkim leaq 1(%r14),%r14 555238405Sjkim movq %rdx,%r10 556238405Sjkim 557238405Sjkim mulq %rbp 558238405Sjkim addq %rax,%rdi 559238405Sjkim movq (%rsi),%rax 560238405Sjkim adcq $0,%rdx 561238405Sjkim addq %r11,%rdi 562238405Sjkim adcq $0,%rdx 563238405Sjkim movq %rdi,-16(%rsp,%r15,8) 564238405Sjkim movq %rdx,%r13 565238405Sjkim 566238405Sjkim xorq %rdi,%rdi 567238405Sjkim addq %r10,%r13 568238405Sjkim adcq $0,%rdi 569238405Sjkim addq (%rsp,%r9,8),%r13 570238405Sjkim adcq $0,%rdi 571238405Sjkim movq %r13,-8(%rsp,%r15,8) 572238405Sjkim movq %rdi,(%rsp,%r15,8) 573238405Sjkim 574238405Sjkim cmpq %r9,%r14 575290207Sjkim jb .Louter4x 576238405Sjkim movq 16(%rsp,%r9,8),%rdi 577238405Sjkim movq 0(%rsp),%rax 578238405Sjkim pxor %xmm0,%xmm0 579238405Sjkim movq 8(%rsp),%rdx 580238405Sjkim shrq $2,%r9 581238405Sjkim leaq (%rsp),%rsi 582238405Sjkim xorq %r14,%r14 583238405Sjkim 584238405Sjkim subq 0(%rcx),%rax 585238405Sjkim movq 16(%rsi),%rbx 586238405Sjkim movq 24(%rsi),%rbp 587238405Sjkim sbbq 8(%rcx),%rdx 588238405Sjkim leaq -1(%r9),%r15 589238405Sjkim jmp .Lsub4x 590238405Sjkim.align 16 591238405Sjkim.Lsub4x: 592238405Sjkim movq %rax,0(%rdi,%r14,8) 593238405Sjkim movq %rdx,8(%rdi,%r14,8) 594238405Sjkim sbbq 16(%rcx,%r14,8),%rbx 595238405Sjkim movq 32(%rsi,%r14,8),%rax 596238405Sjkim movq 40(%rsi,%r14,8),%rdx 597238405Sjkim sbbq 24(%rcx,%r14,8),%rbp 598238405Sjkim movq %rbx,16(%rdi,%r14,8) 599238405Sjkim movq %rbp,24(%rdi,%r14,8) 600238405Sjkim sbbq 32(%rcx,%r14,8),%rax 601238405Sjkim movq 48(%rsi,%r14,8),%rbx 602238405Sjkim movq 56(%rsi,%r14,8),%rbp 603238405Sjkim sbbq 40(%rcx,%r14,8),%rdx 604238405Sjkim leaq 4(%r14),%r14 605238405Sjkim decq %r15 606238405Sjkim jnz .Lsub4x 607238405Sjkim 608238405Sjkim movq %rax,0(%rdi,%r14,8) 609238405Sjkim movq 32(%rsi,%r14,8),%rax 610238405Sjkim sbbq 16(%rcx,%r14,8),%rbx 611238405Sjkim movq %rdx,8(%rdi,%r14,8) 612238405Sjkim sbbq 24(%rcx,%r14,8),%rbp 613238405Sjkim movq %rbx,16(%rdi,%r14,8) 614238405Sjkim 615238405Sjkim sbbq $0,%rax 616238405Sjkim movq %rbp,24(%rdi,%r14,8) 617238405Sjkim xorq %r14,%r14 618238405Sjkim andq %rax,%rsi 619238405Sjkim notq %rax 620238405Sjkim movq %rdi,%rcx 621238405Sjkim andq %rax,%rcx 622238405Sjkim leaq -1(%r9),%r15 623238405Sjkim orq %rcx,%rsi 624238405Sjkim 625238405Sjkim movdqu (%rsi),%xmm1 626238405Sjkim movdqa %xmm0,(%rsp) 627238405Sjkim movdqu %xmm1,(%rdi) 628238405Sjkim jmp .Lcopy4x 629238405Sjkim.align 16 630238405Sjkim.Lcopy4x: 631238405Sjkim movdqu 16(%rsi,%r14,1),%xmm2 632238405Sjkim movdqu 32(%rsi,%r14,1),%xmm1 633238405Sjkim movdqa %xmm0,16(%rsp,%r14,1) 634238405Sjkim movdqu %xmm2,16(%rdi,%r14,1) 635238405Sjkim movdqa %xmm0,32(%rsp,%r14,1) 636238405Sjkim movdqu %xmm1,32(%rdi,%r14,1) 637238405Sjkim leaq 32(%r14),%r14 638238405Sjkim decq %r15 639238405Sjkim jnz .Lcopy4x 640238405Sjkim 641238405Sjkim shlq $2,%r9 642238405Sjkim movdqu 16(%rsi,%r14,1),%xmm2 643238405Sjkim movdqa %xmm0,16(%rsp,%r14,1) 644238405Sjkim movdqu %xmm2,16(%rdi,%r14,1) 645238405Sjkim movq 8(%rsp,%r9,8),%rsi 646238405Sjkim movq $1,%rax 647306198Sjkim movq -48(%rsi),%r15 648306198Sjkim movq -40(%rsi),%r14 649306198Sjkim movq -32(%rsi),%r13 650306198Sjkim movq -24(%rsi),%r12 651306198Sjkim movq -16(%rsi),%rbp 652306198Sjkim movq -8(%rsi),%rbx 653306198Sjkim leaq (%rsi),%rsp 654238405Sjkim.Lmul4x_epilogue: 655238405Sjkim .byte 0xf3,0xc3 656238405Sjkim.size bn_mul4x_mont,.-bn_mul4x_mont 657290207Sjkim 658290207Sjkim 659299481Sjkim 660290207Sjkim.type bn_sqr8x_mont,@function 661290207Sjkim.align 32 662290207Sjkimbn_sqr8x_mont: 663306198Sjkim movq %rsp,%rax 664290207Sjkim.Lsqr8x_enter: 665238405Sjkim pushq %rbx 666238405Sjkim pushq %rbp 667238405Sjkim pushq %r12 668238405Sjkim pushq %r13 669238405Sjkim pushq %r14 670238405Sjkim pushq %r15 671306198Sjkim.Lsqr8x_prologue: 672238405Sjkim 673290207Sjkim movl %r9d,%r10d 674238405Sjkim shll $3,%r9d 675290207Sjkim shlq $3+2,%r10 676290207Sjkim negq %r9 677238405Sjkim 678238405Sjkim 679238405Sjkim 680238405Sjkim 681238405Sjkim 682238405Sjkim 683296279Sjkim leaq -64(%rsp,%r9,2),%r11 684306198Sjkim movq %rsp,%rbp 685290207Sjkim movq (%r8),%r8 686290207Sjkim subq %rsi,%r11 687290207Sjkim andq $4095,%r11 688290207Sjkim cmpq %r11,%r10 689290207Sjkim jb .Lsqr8x_sp_alt 690306198Sjkim subq %r11,%rbp 691306198Sjkim leaq -64(%rbp,%r9,2),%rbp 692290207Sjkim jmp .Lsqr8x_sp_done 693238405Sjkim 694290207Sjkim.align 32 695290207Sjkim.Lsqr8x_sp_alt: 696296279Sjkim leaq 4096-64(,%r9,2),%r10 697306198Sjkim leaq -64(%rbp,%r9,2),%rbp 698290207Sjkim subq %r10,%r11 699290207Sjkim movq $0,%r10 700290207Sjkim cmovcq %r10,%r11 701306198Sjkim subq %r11,%rbp 702290207Sjkim.Lsqr8x_sp_done: 703306198Sjkim andq $-64,%rbp 704306198Sjkim movq %rsp,%r11 705306198Sjkim subq %rbp,%r11 706298998Sjkim andq $-4096,%r11 707306198Sjkim leaq (%r11,%rbp,1),%rsp 708306198Sjkim movq (%rsp),%r10 709306198Sjkim cmpq %rbp,%rsp 710306198Sjkim ja .Lsqr8x_page_walk 711306198Sjkim jmp .Lsqr8x_page_walk_done 712306198Sjkim 713306198Sjkim.align 16 714298998Sjkim.Lsqr8x_page_walk: 715306198Sjkim leaq -4096(%rsp),%rsp 716306198Sjkim movq (%rsp),%r10 717306198Sjkim cmpq %rbp,%rsp 718306198Sjkim ja .Lsqr8x_page_walk 719306198Sjkim.Lsqr8x_page_walk_done: 720298998Sjkim 721290207Sjkim movq %r9,%r10 722290207Sjkim negq %r9 723238405Sjkim 724290207Sjkim movq %r8,32(%rsp) 725290207Sjkim movq %rax,40(%rsp) 726290207Sjkim.Lsqr8x_body: 727238405Sjkim 728296279Sjkim.byte 102,72,15,110,209 729290207Sjkim pxor %xmm0,%xmm0 730290207Sjkim.byte 102,72,15,110,207 731290207Sjkim.byte 102,73,15,110,218 732299481Sjkim movl OPENSSL_ia32cap_P+8(%rip),%eax 733299481Sjkim andl $0x80100,%eax 734299481Sjkim cmpl $0x80100,%eax 735299481Sjkim jne .Lsqr8x_nox 736299481Sjkim 737299481Sjkim call bn_sqrx8x_internal 738299481Sjkim 739299481Sjkim 740299481Sjkim 741299481Sjkim 742299481Sjkim leaq (%r8,%rcx,1),%rbx 743299481Sjkim movq %rcx,%r9 744299481Sjkim movq %rcx,%rdx 745299481Sjkim.byte 102,72,15,126,207 746299481Sjkim sarq $3+2,%rcx 747299481Sjkim jmp .Lsqr8x_sub 748299481Sjkim 749299481Sjkim.align 32 750299481Sjkim.Lsqr8x_nox: 751290207Sjkim call bn_sqr8x_internal 752238405Sjkim 753296279Sjkim 754296279Sjkim 755296279Sjkim 756296279Sjkim leaq (%rdi,%r9,1),%rbx 757296279Sjkim movq %r9,%rcx 758296279Sjkim movq %r9,%rdx 759296279Sjkim.byte 102,72,15,126,207 760296279Sjkim sarq $3+2,%rcx 761296279Sjkim jmp .Lsqr8x_sub 762296279Sjkim 763296279Sjkim.align 32 764296279Sjkim.Lsqr8x_sub: 765296279Sjkim movq 0(%rbx),%r12 766296279Sjkim movq 8(%rbx),%r13 767296279Sjkim movq 16(%rbx),%r14 768296279Sjkim movq 24(%rbx),%r15 769296279Sjkim leaq 32(%rbx),%rbx 770296279Sjkim sbbq 0(%rbp),%r12 771296279Sjkim sbbq 8(%rbp),%r13 772296279Sjkim sbbq 16(%rbp),%r14 773296279Sjkim sbbq 24(%rbp),%r15 774296279Sjkim leaq 32(%rbp),%rbp 775296279Sjkim movq %r12,0(%rdi) 776296279Sjkim movq %r13,8(%rdi) 777296279Sjkim movq %r14,16(%rdi) 778296279Sjkim movq %r15,24(%rdi) 779296279Sjkim leaq 32(%rdi),%rdi 780296279Sjkim incq %rcx 781296279Sjkim jnz .Lsqr8x_sub 782296279Sjkim 783296279Sjkim sbbq $0,%rax 784296279Sjkim leaq (%rbx,%r9,1),%rbx 785296279Sjkim leaq (%rdi,%r9,1),%rdi 786296279Sjkim 787296279Sjkim.byte 102,72,15,110,200 788290207Sjkim pxor %xmm0,%xmm0 789296279Sjkim pshufd $0,%xmm1,%xmm1 790238405Sjkim movq 40(%rsp),%rsi 791296279Sjkim jmp .Lsqr8x_cond_copy 792238405Sjkim 793290207Sjkim.align 32 794296279Sjkim.Lsqr8x_cond_copy: 795296279Sjkim movdqa 0(%rbx),%xmm2 796296279Sjkim movdqa 16(%rbx),%xmm3 797296279Sjkim leaq 32(%rbx),%rbx 798296279Sjkim movdqu 0(%rdi),%xmm4 799296279Sjkim movdqu 16(%rdi),%xmm5 800296279Sjkim leaq 32(%rdi),%rdi 801296279Sjkim movdqa %xmm0,-32(%rbx) 802296279Sjkim movdqa %xmm0,-16(%rbx) 803296279Sjkim movdqa %xmm0,-32(%rbx,%rdx,1) 804296279Sjkim movdqa %xmm0,-16(%rbx,%rdx,1) 805296279Sjkim pcmpeqd %xmm1,%xmm0 806296279Sjkim pand %xmm1,%xmm2 807296279Sjkim pand %xmm1,%xmm3 808296279Sjkim pand %xmm0,%xmm4 809296279Sjkim pand %xmm0,%xmm5 810296279Sjkim pxor %xmm0,%xmm0 811296279Sjkim por %xmm2,%xmm4 812296279Sjkim por %xmm3,%xmm5 813296279Sjkim movdqu %xmm4,-32(%rdi) 814296279Sjkim movdqu %xmm5,-16(%rdi) 815296279Sjkim addq $32,%r9 816296279Sjkim jnz .Lsqr8x_cond_copy 817238405Sjkim 818238405Sjkim movq $1,%rax 819290207Sjkim movq -48(%rsi),%r15 820290207Sjkim movq -40(%rsi),%r14 821290207Sjkim movq -32(%rsi),%r13 822290207Sjkim movq -24(%rsi),%r12 823290207Sjkim movq -16(%rsi),%rbp 824290207Sjkim movq -8(%rsi),%rbx 825290207Sjkim leaq (%rsi),%rsp 826290207Sjkim.Lsqr8x_epilogue: 827238405Sjkim .byte 0xf3,0xc3 828290207Sjkim.size bn_sqr8x_mont,.-bn_sqr8x_mont 829299481Sjkim.type bn_mulx4x_mont,@function 830299481Sjkim.align 32 831299481Sjkimbn_mulx4x_mont: 832306198Sjkim movq %rsp,%rax 833299481Sjkim.Lmulx4x_enter: 834299481Sjkim pushq %rbx 835299481Sjkim pushq %rbp 836299481Sjkim pushq %r12 837299481Sjkim pushq %r13 838299481Sjkim pushq %r14 839299481Sjkim pushq %r15 840306198Sjkim.Lmulx4x_prologue: 841299481Sjkim 842299481Sjkim shll $3,%r9d 843299481Sjkim xorq %r10,%r10 844299481Sjkim subq %r9,%r10 845299481Sjkim movq (%r8),%r8 846306198Sjkim leaq -72(%rsp,%r10,1),%rbp 847306198Sjkim andq $-128,%rbp 848306198Sjkim movq %rsp,%r11 849306198Sjkim subq %rbp,%r11 850299481Sjkim andq $-4096,%r11 851306198Sjkim leaq (%r11,%rbp,1),%rsp 852306198Sjkim movq (%rsp),%r10 853306198Sjkim cmpq %rbp,%rsp 854306198Sjkim ja .Lmulx4x_page_walk 855306198Sjkim jmp .Lmulx4x_page_walk_done 856306198Sjkim 857306198Sjkim.align 16 858299481Sjkim.Lmulx4x_page_walk: 859306198Sjkim leaq -4096(%rsp),%rsp 860306198Sjkim movq (%rsp),%r10 861306198Sjkim cmpq %rbp,%rsp 862306198Sjkim ja .Lmulx4x_page_walk 863306198Sjkim.Lmulx4x_page_walk_done: 864299481Sjkim 865299481Sjkim leaq (%rdx,%r9,1),%r10 866299481Sjkim 867299481Sjkim 868299481Sjkim 869299481Sjkim 870299481Sjkim 871299481Sjkim 872299481Sjkim 873299481Sjkim 874299481Sjkim 875299481Sjkim 876299481Sjkim 877299481Sjkim 878299481Sjkim movq %r9,0(%rsp) 879299481Sjkim shrq $5,%r9 880299481Sjkim movq %r10,16(%rsp) 881299481Sjkim subq $1,%r9 882299481Sjkim movq %r8,24(%rsp) 883299481Sjkim movq %rdi,32(%rsp) 884299481Sjkim movq %rax,40(%rsp) 885299481Sjkim movq %r9,48(%rsp) 886299481Sjkim jmp .Lmulx4x_body 887299481Sjkim 888299481Sjkim.align 32 889299481Sjkim.Lmulx4x_body: 890299481Sjkim leaq 8(%rdx),%rdi 891299481Sjkim movq (%rdx),%rdx 892299481Sjkim leaq 64+32(%rsp),%rbx 893299481Sjkim movq %rdx,%r9 894299481Sjkim 895299481Sjkim mulxq 0(%rsi),%r8,%rax 896299481Sjkim mulxq 8(%rsi),%r11,%r14 897299481Sjkim addq %rax,%r11 898299481Sjkim movq %rdi,8(%rsp) 899299481Sjkim mulxq 16(%rsi),%r12,%r13 900299481Sjkim adcq %r14,%r12 901299481Sjkim adcq $0,%r13 902299481Sjkim 903299481Sjkim movq %r8,%rdi 904299481Sjkim imulq 24(%rsp),%r8 905299481Sjkim xorq %rbp,%rbp 906299481Sjkim 907299481Sjkim mulxq 24(%rsi),%rax,%r14 908299481Sjkim movq %r8,%rdx 909299481Sjkim leaq 32(%rsi),%rsi 910299481Sjkim adcxq %rax,%r13 911299481Sjkim adcxq %rbp,%r14 912299481Sjkim 913299481Sjkim mulxq 0(%rcx),%rax,%r10 914299481Sjkim adcxq %rax,%rdi 915299481Sjkim adoxq %r11,%r10 916299481Sjkim mulxq 8(%rcx),%rax,%r11 917299481Sjkim adcxq %rax,%r10 918299481Sjkim adoxq %r12,%r11 919299481Sjkim.byte 0xc4,0x62,0xfb,0xf6,0xa1,0x10,0x00,0x00,0x00 920299481Sjkim movq 48(%rsp),%rdi 921299481Sjkim movq %r10,-32(%rbx) 922299481Sjkim adcxq %rax,%r11 923299481Sjkim adoxq %r13,%r12 924299481Sjkim mulxq 24(%rcx),%rax,%r15 925299481Sjkim movq %r9,%rdx 926299481Sjkim movq %r11,-24(%rbx) 927299481Sjkim adcxq %rax,%r12 928299481Sjkim adoxq %rbp,%r15 929299481Sjkim leaq 32(%rcx),%rcx 930299481Sjkim movq %r12,-16(%rbx) 931299481Sjkim 932299481Sjkim jmp .Lmulx4x_1st 933299481Sjkim 934299481Sjkim.align 32 935299481Sjkim.Lmulx4x_1st: 936299481Sjkim adcxq %rbp,%r15 937299481Sjkim mulxq 0(%rsi),%r10,%rax 938299481Sjkim adcxq %r14,%r10 939299481Sjkim mulxq 8(%rsi),%r11,%r14 940299481Sjkim adcxq %rax,%r11 941299481Sjkim mulxq 16(%rsi),%r12,%rax 942299481Sjkim adcxq %r14,%r12 943299481Sjkim mulxq 24(%rsi),%r13,%r14 944299481Sjkim.byte 0x67,0x67 945299481Sjkim movq %r8,%rdx 946299481Sjkim adcxq %rax,%r13 947299481Sjkim adcxq %rbp,%r14 948299481Sjkim leaq 32(%rsi),%rsi 949299481Sjkim leaq 32(%rbx),%rbx 950299481Sjkim 951299481Sjkim adoxq %r15,%r10 952299481Sjkim mulxq 0(%rcx),%rax,%r15 953299481Sjkim adcxq %rax,%r10 954299481Sjkim adoxq %r15,%r11 955299481Sjkim mulxq 8(%rcx),%rax,%r15 956299481Sjkim adcxq %rax,%r11 957299481Sjkim adoxq %r15,%r12 958299481Sjkim mulxq 16(%rcx),%rax,%r15 959299481Sjkim movq %r10,-40(%rbx) 960299481Sjkim adcxq %rax,%r12 961299481Sjkim movq %r11,-32(%rbx) 962299481Sjkim adoxq %r15,%r13 963299481Sjkim mulxq 24(%rcx),%rax,%r15 964299481Sjkim movq %r9,%rdx 965299481Sjkim movq %r12,-24(%rbx) 966299481Sjkim adcxq %rax,%r13 967299481Sjkim adoxq %rbp,%r15 968299481Sjkim leaq 32(%rcx),%rcx 969299481Sjkim movq %r13,-16(%rbx) 970299481Sjkim 971299481Sjkim decq %rdi 972299481Sjkim jnz .Lmulx4x_1st 973299481Sjkim 974299481Sjkim movq 0(%rsp),%rax 975299481Sjkim movq 8(%rsp),%rdi 976299481Sjkim adcq %rbp,%r15 977299481Sjkim addq %r15,%r14 978299481Sjkim sbbq %r15,%r15 979299481Sjkim movq %r14,-8(%rbx) 980299481Sjkim jmp .Lmulx4x_outer 981299481Sjkim 982299481Sjkim.align 32 983299481Sjkim.Lmulx4x_outer: 984299481Sjkim movq (%rdi),%rdx 985299481Sjkim leaq 8(%rdi),%rdi 986299481Sjkim subq %rax,%rsi 987299481Sjkim movq %r15,(%rbx) 988299481Sjkim leaq 64+32(%rsp),%rbx 989299481Sjkim subq %rax,%rcx 990299481Sjkim 991299481Sjkim mulxq 0(%rsi),%r8,%r11 992299481Sjkim xorl %ebp,%ebp 993299481Sjkim movq %rdx,%r9 994299481Sjkim mulxq 8(%rsi),%r14,%r12 995299481Sjkim adoxq -32(%rbx),%r8 996299481Sjkim adcxq %r14,%r11 997299481Sjkim mulxq 16(%rsi),%r15,%r13 998299481Sjkim adoxq -24(%rbx),%r11 999299481Sjkim adcxq %r15,%r12 1000314125Sdelphij adoxq -16(%rbx),%r12 1001299481Sjkim adcxq %rbp,%r13 1002314125Sdelphij adoxq %rbp,%r13 1003299481Sjkim 1004299481Sjkim movq %rdi,8(%rsp) 1005299481Sjkim movq %r8,%r15 1006299481Sjkim imulq 24(%rsp),%r8 1007299481Sjkim xorl %ebp,%ebp 1008299481Sjkim 1009299481Sjkim mulxq 24(%rsi),%rax,%r14 1010299481Sjkim movq %r8,%rdx 1011299481Sjkim adcxq %rax,%r13 1012299481Sjkim adoxq -8(%rbx),%r13 1013299481Sjkim adcxq %rbp,%r14 1014299481Sjkim leaq 32(%rsi),%rsi 1015299481Sjkim adoxq %rbp,%r14 1016299481Sjkim 1017299481Sjkim mulxq 0(%rcx),%rax,%r10 1018299481Sjkim adcxq %rax,%r15 1019299481Sjkim adoxq %r11,%r10 1020299481Sjkim mulxq 8(%rcx),%rax,%r11 1021299481Sjkim adcxq %rax,%r10 1022299481Sjkim adoxq %r12,%r11 1023299481Sjkim mulxq 16(%rcx),%rax,%r12 1024299481Sjkim movq %r10,-32(%rbx) 1025299481Sjkim adcxq %rax,%r11 1026299481Sjkim adoxq %r13,%r12 1027299481Sjkim mulxq 24(%rcx),%rax,%r15 1028299481Sjkim movq %r9,%rdx 1029299481Sjkim movq %r11,-24(%rbx) 1030299481Sjkim leaq 32(%rcx),%rcx 1031299481Sjkim adcxq %rax,%r12 1032299481Sjkim adoxq %rbp,%r15 1033299481Sjkim movq 48(%rsp),%rdi 1034299481Sjkim movq %r12,-16(%rbx) 1035299481Sjkim 1036299481Sjkim jmp .Lmulx4x_inner 1037299481Sjkim 1038299481Sjkim.align 32 1039299481Sjkim.Lmulx4x_inner: 1040299481Sjkim mulxq 0(%rsi),%r10,%rax 1041299481Sjkim adcxq %rbp,%r15 1042299481Sjkim adoxq %r14,%r10 1043299481Sjkim mulxq 8(%rsi),%r11,%r14 1044299481Sjkim adcxq 0(%rbx),%r10 1045299481Sjkim adoxq %rax,%r11 1046299481Sjkim mulxq 16(%rsi),%r12,%rax 1047299481Sjkim adcxq 8(%rbx),%r11 1048299481Sjkim adoxq %r14,%r12 1049299481Sjkim mulxq 24(%rsi),%r13,%r14 1050299481Sjkim movq %r8,%rdx 1051299481Sjkim adcxq 16(%rbx),%r12 1052299481Sjkim adoxq %rax,%r13 1053299481Sjkim adcxq 24(%rbx),%r13 1054299481Sjkim adoxq %rbp,%r14 1055299481Sjkim leaq 32(%rsi),%rsi 1056299481Sjkim leaq 32(%rbx),%rbx 1057299481Sjkim adcxq %rbp,%r14 1058299481Sjkim 1059299481Sjkim adoxq %r15,%r10 1060299481Sjkim mulxq 0(%rcx),%rax,%r15 1061299481Sjkim adcxq %rax,%r10 1062299481Sjkim adoxq %r15,%r11 1063299481Sjkim mulxq 8(%rcx),%rax,%r15 1064299481Sjkim adcxq %rax,%r11 1065299481Sjkim adoxq %r15,%r12 1066299481Sjkim mulxq 16(%rcx),%rax,%r15 1067299481Sjkim movq %r10,-40(%rbx) 1068299481Sjkim adcxq %rax,%r12 1069299481Sjkim adoxq %r15,%r13 1070299481Sjkim mulxq 24(%rcx),%rax,%r15 1071299481Sjkim movq %r9,%rdx 1072299481Sjkim movq %r11,-32(%rbx) 1073299481Sjkim movq %r12,-24(%rbx) 1074299481Sjkim adcxq %rax,%r13 1075299481Sjkim adoxq %rbp,%r15 1076299481Sjkim leaq 32(%rcx),%rcx 1077299481Sjkim movq %r13,-16(%rbx) 1078299481Sjkim 1079299481Sjkim decq %rdi 1080299481Sjkim jnz .Lmulx4x_inner 1081299481Sjkim 1082299481Sjkim movq 0(%rsp),%rax 1083299481Sjkim movq 8(%rsp),%rdi 1084299481Sjkim adcq %rbp,%r15 1085299481Sjkim subq 0(%rbx),%rbp 1086299481Sjkim adcq %r15,%r14 1087299481Sjkim sbbq %r15,%r15 1088299481Sjkim movq %r14,-8(%rbx) 1089299481Sjkim 1090299481Sjkim cmpq 16(%rsp),%rdi 1091299481Sjkim jne .Lmulx4x_outer 1092299481Sjkim 1093299481Sjkim leaq 64(%rsp),%rbx 1094299481Sjkim subq %rax,%rcx 1095299481Sjkim negq %r15 1096299481Sjkim movq %rax,%rdx 1097299481Sjkim shrq $3+2,%rax 1098299481Sjkim movq 32(%rsp),%rdi 1099299481Sjkim jmp .Lmulx4x_sub 1100299481Sjkim 1101299481Sjkim.align 32 1102299481Sjkim.Lmulx4x_sub: 1103299481Sjkim movq 0(%rbx),%r11 1104299481Sjkim movq 8(%rbx),%r12 1105299481Sjkim movq 16(%rbx),%r13 1106299481Sjkim movq 24(%rbx),%r14 1107299481Sjkim leaq 32(%rbx),%rbx 1108299481Sjkim sbbq 0(%rcx),%r11 1109299481Sjkim sbbq 8(%rcx),%r12 1110299481Sjkim sbbq 16(%rcx),%r13 1111299481Sjkim sbbq 24(%rcx),%r14 1112299481Sjkim leaq 32(%rcx),%rcx 1113299481Sjkim movq %r11,0(%rdi) 1114299481Sjkim movq %r12,8(%rdi) 1115299481Sjkim movq %r13,16(%rdi) 1116299481Sjkim movq %r14,24(%rdi) 1117299481Sjkim leaq 32(%rdi),%rdi 1118299481Sjkim decq %rax 1119299481Sjkim jnz .Lmulx4x_sub 1120299481Sjkim 1121299481Sjkim sbbq $0,%r15 1122299481Sjkim leaq 64(%rsp),%rbx 1123299481Sjkim subq %rdx,%rdi 1124299481Sjkim 1125299481Sjkim.byte 102,73,15,110,207 1126299481Sjkim pxor %xmm0,%xmm0 1127299481Sjkim pshufd $0,%xmm1,%xmm1 1128299481Sjkim movq 40(%rsp),%rsi 1129299481Sjkim jmp .Lmulx4x_cond_copy 1130299481Sjkim 1131299481Sjkim.align 32 1132299481Sjkim.Lmulx4x_cond_copy: 1133299481Sjkim movdqa 0(%rbx),%xmm2 1134299481Sjkim movdqa 16(%rbx),%xmm3 1135299481Sjkim leaq 32(%rbx),%rbx 1136299481Sjkim movdqu 0(%rdi),%xmm4 1137299481Sjkim movdqu 16(%rdi),%xmm5 1138299481Sjkim leaq 32(%rdi),%rdi 1139299481Sjkim movdqa %xmm0,-32(%rbx) 1140299481Sjkim movdqa %xmm0,-16(%rbx) 1141299481Sjkim pcmpeqd %xmm1,%xmm0 1142299481Sjkim pand %xmm1,%xmm2 1143299481Sjkim pand %xmm1,%xmm3 1144299481Sjkim pand %xmm0,%xmm4 1145299481Sjkim pand %xmm0,%xmm5 1146299481Sjkim pxor %xmm0,%xmm0 1147299481Sjkim por %xmm2,%xmm4 1148299481Sjkim por %xmm3,%xmm5 1149299481Sjkim movdqu %xmm4,-32(%rdi) 1150299481Sjkim movdqu %xmm5,-16(%rdi) 1151299481Sjkim subq $32,%rdx 1152299481Sjkim jnz .Lmulx4x_cond_copy 1153299481Sjkim 1154299481Sjkim movq %rdx,(%rbx) 1155299481Sjkim 1156299481Sjkim movq $1,%rax 1157299481Sjkim movq -48(%rsi),%r15 1158299481Sjkim movq -40(%rsi),%r14 1159299481Sjkim movq -32(%rsi),%r13 1160299481Sjkim movq -24(%rsi),%r12 1161299481Sjkim movq -16(%rsi),%rbp 1162299481Sjkim movq -8(%rsi),%rbx 1163299481Sjkim leaq (%rsi),%rsp 1164299481Sjkim.Lmulx4x_epilogue: 1165299481Sjkim .byte 0xf3,0xc3 1166299481Sjkim.size bn_mulx4x_mont,.-bn_mulx4x_mont 1167238405Sjkim.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 1168238405Sjkim.align 16 1169