VirtualBox

Ignore:
Timestamp:
Jun 8, 2022 7:43:44 AM (3 years ago)
Author:
vboxsync
Message:

libs/openssl: Switched to v3.0.3, bugref:10128

Location:
trunk/src/libs/openssl-3.0.3
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/libs/openssl-3.0.3

    • Property svn:mergeinfo
      •  

        old new  
        1414/vendor/openssl/3.0.1:150323-150324
        1515/vendor/openssl/3.0.2:150728-150729
        16 /vendor/openssl/current:147554-150727
         16/vendor/openssl/3.0.3:151497-151729
         17/vendor/openssl/current:147554-151496
  • trunk/src/libs/openssl-3.0.3/crypto/genasm-nasm/x86_64-mont5.S

    r94114 r95219  
    3030        test    r9d,7
    3131        jnz     NEAR $L$mul_enter
     32        mov     r11d,DWORD[((OPENSSL_ia32cap_P+8))]
    3233        jmp     NEAR $L$mul4x_enter
    3334
     
    480481
    481482$L$mul4x_enter:
     483        and     r11d,0x80108
     484        cmp     r11d,0x80108
     485        je      NEAR $L$mulx4x_enter
    482486        push    rbx
    483487
     
    11231127        mov     rax,rsp
    11241128
     1129        mov     r11d,DWORD[((OPENSSL_ia32cap_P+8))]
     1130        and     r11d,0x80108
     1131        cmp     r11d,0x80108
     1132        je      NEAR $L$powerx5_enter
    11251133        push    rbx
    11261134
     
    22262234        mov     rbp,rcx
    22272235DB      102,73,15,110,218
     2236        mov     r11d,DWORD[((OPENSSL_ia32cap_P+8))]
     2237        and     r11d,0x80108
     2238        cmp     r11d,0x80108
     2239        jne     NEAR $L$from_mont_nox
     2240
     2241        lea     rdi,[r9*1+rax]
     2242        call    __bn_sqrx8x_reduction
     2243        call    __bn_postx4x_internal
     2244
     2245        pxor    xmm0,xmm0
     2246        lea     rax,[48+rsp]
     2247        jmp     NEAR $L$from_mont_zero
     2248
     2249ALIGN   32
     2250$L$from_mont_nox:
    22282251        call    __bn_sqr8x_reduction
    22292252        call    __bn_post4x_internal
     
    22662289
    22672290$L$SEH_end_bn_from_mont8x:
     2291
     2292ALIGN   32
     2293bn_mulx4x_mont_gather5:
     2294        mov     QWORD[8+rsp],rdi        ;WIN64 prologue
     2295        mov     QWORD[16+rsp],rsi
     2296        mov     rax,rsp
     2297$L$SEH_begin_bn_mulx4x_mont_gather5:
     2298        mov     rdi,rcx
     2299        mov     rsi,rdx
     2300        mov     rdx,r8
     2301        mov     rcx,r9
     2302        mov     r8,QWORD[40+rsp]
     2303        mov     r9,QWORD[48+rsp]
     2304
     2305
     2306
     2307        mov     rax,rsp
     2308
     2309$L$mulx4x_enter:
     2310        push    rbx
     2311
     2312        push    rbp
     2313
     2314        push    r12
     2315
     2316        push    r13
     2317
     2318        push    r14
     2319
     2320        push    r15
     2321
     2322$L$mulx4x_prologue:
     2323
     2324        shl     r9d,3
     2325        lea     r10,[r9*2+r9]
     2326        neg     r9
     2327        mov     r8,QWORD[r8]
     2328
     2329
     2330
     2331
     2332
     2333
     2334
     2335
     2336
     2337
     2338        lea     r11,[((-320))+r9*2+rsp]
     2339        mov     rbp,rsp
     2340        sub     r11,rdi
     2341        and     r11,4095
     2342        cmp     r10,r11
     2343        jb      NEAR $L$mulx4xsp_alt
     2344        sub     rbp,r11
     2345        lea     rbp,[((-320))+r9*2+rbp]
     2346        jmp     NEAR $L$mulx4xsp_done
     2347
     2348$L$mulx4xsp_alt:
     2349        lea     r10,[((4096-320))+r9*2]
     2350        lea     rbp,[((-320))+r9*2+rbp]
     2351        sub     r11,r10
     2352        mov     r10,0
     2353        cmovc   r11,r10
     2354        sub     rbp,r11
     2355$L$mulx4xsp_done:
     2356        and     rbp,-64
     2357        mov     r11,rsp
     2358        sub     r11,rbp
     2359        and     r11,-4096
     2360        lea     rsp,[rbp*1+r11]
     2361        mov     r10,QWORD[rsp]
     2362        cmp     rsp,rbp
     2363        ja      NEAR $L$mulx4x_page_walk
     2364        jmp     NEAR $L$mulx4x_page_walk_done
     2365
     2366$L$mulx4x_page_walk:
     2367        lea     rsp,[((-4096))+rsp]
     2368        mov     r10,QWORD[rsp]
     2369        cmp     rsp,rbp
     2370        ja      NEAR $L$mulx4x_page_walk
     2371$L$mulx4x_page_walk_done:
     2372
     2373
     2374
     2375
     2376
     2377
     2378
     2379
     2380
     2381
     2382
     2383
     2384
     2385        mov     QWORD[32+rsp],r8
     2386        mov     QWORD[40+rsp],rax
     2387
     2388$L$mulx4x_body:
     2389        call    mulx4x_internal
     2390
     2391        mov     rsi,QWORD[40+rsp]
     2392
     2393        mov     rax,1
     2394
     2395        mov     r15,QWORD[((-48))+rsi]
     2396
     2397        mov     r14,QWORD[((-40))+rsi]
     2398
     2399        mov     r13,QWORD[((-32))+rsi]
     2400
     2401        mov     r12,QWORD[((-24))+rsi]
     2402
     2403        mov     rbp,QWORD[((-16))+rsi]
     2404
     2405        mov     rbx,QWORD[((-8))+rsi]
     2406
     2407        lea     rsp,[rsi]
     2408
     2409$L$mulx4x_epilogue:
     2410        mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue
     2411        mov     rsi,QWORD[16+rsp]
     2412        DB      0F3h,0C3h               ;repret
     2413
     2414$L$SEH_end_bn_mulx4x_mont_gather5:
     2415
     2416
     2417ALIGN   32
     2418mulx4x_internal:
     2419
     2420        mov     QWORD[8+rsp],r9
     2421        mov     r10,r9
     2422        neg     r9
     2423        shl     r9,5
     2424        neg     r10
     2425        lea     r13,[128+r9*1+rdx]
     2426        shr     r9,5+5
     2427        movd    xmm5,DWORD[56+rax]
     2428        sub     r9,1
     2429        lea     rax,[$L$inc]
     2430        mov     QWORD[((16+8))+rsp],r13
     2431        mov     QWORD[((24+8))+rsp],r9
     2432        mov     QWORD[((56+8))+rsp],rdi
     2433        movdqa  xmm0,XMMWORD[rax]
     2434        movdqa  xmm1,XMMWORD[16+rax]
     2435        lea     r10,[((88-112))+r10*1+rsp]
     2436        lea     rdi,[128+rdx]
     2437
     2438        pshufd  xmm5,xmm5,0
     2439        movdqa  xmm4,xmm1
     2440DB      0x67
     2441        movdqa  xmm2,xmm1
     2442DB      0x67
     2443        paddd   xmm1,xmm0
     2444        pcmpeqd xmm0,xmm5
     2445        movdqa  xmm3,xmm4
     2446        paddd   xmm2,xmm1
     2447        pcmpeqd xmm1,xmm5
     2448        movdqa  XMMWORD[112+r10],xmm0
     2449        movdqa  xmm0,xmm4
     2450
     2451        paddd   xmm3,xmm2
     2452        pcmpeqd xmm2,xmm5
     2453        movdqa  XMMWORD[128+r10],xmm1
     2454        movdqa  xmm1,xmm4
     2455
     2456        paddd   xmm0,xmm3
     2457        pcmpeqd xmm3,xmm5
     2458        movdqa  XMMWORD[144+r10],xmm2
     2459        movdqa  xmm2,xmm4
     2460
     2461        paddd   xmm1,xmm0
     2462        pcmpeqd xmm0,xmm5
     2463        movdqa  XMMWORD[160+r10],xmm3
     2464        movdqa  xmm3,xmm4
     2465        paddd   xmm2,xmm1
     2466        pcmpeqd xmm1,xmm5
     2467        movdqa  XMMWORD[176+r10],xmm0
     2468        movdqa  xmm0,xmm4
     2469
     2470        paddd   xmm3,xmm2
     2471        pcmpeqd xmm2,xmm5
     2472        movdqa  XMMWORD[192+r10],xmm1
     2473        movdqa  xmm1,xmm4
     2474
     2475        paddd   xmm0,xmm3
     2476        pcmpeqd xmm3,xmm5
     2477        movdqa  XMMWORD[208+r10],xmm2
     2478        movdqa  xmm2,xmm4
     2479
     2480        paddd   xmm1,xmm0
     2481        pcmpeqd xmm0,xmm5
     2482        movdqa  XMMWORD[224+r10],xmm3
     2483        movdqa  xmm3,xmm4
     2484        paddd   xmm2,xmm1
     2485        pcmpeqd xmm1,xmm5
     2486        movdqa  XMMWORD[240+r10],xmm0
     2487        movdqa  xmm0,xmm4
     2488
     2489        paddd   xmm3,xmm2
     2490        pcmpeqd xmm2,xmm5
     2491        movdqa  XMMWORD[256+r10],xmm1
     2492        movdqa  xmm1,xmm4
     2493
     2494        paddd   xmm0,xmm3
     2495        pcmpeqd xmm3,xmm5
     2496        movdqa  XMMWORD[272+r10],xmm2
     2497        movdqa  xmm2,xmm4
     2498
     2499        paddd   xmm1,xmm0
     2500        pcmpeqd xmm0,xmm5
     2501        movdqa  XMMWORD[288+r10],xmm3
     2502        movdqa  xmm3,xmm4
     2503DB      0x67
     2504        paddd   xmm2,xmm1
     2505        pcmpeqd xmm1,xmm5
     2506        movdqa  XMMWORD[304+r10],xmm0
     2507
     2508        paddd   xmm3,xmm2
     2509        pcmpeqd xmm2,xmm5
     2510        movdqa  XMMWORD[320+r10],xmm1
     2511
     2512        pcmpeqd xmm3,xmm5
     2513        movdqa  XMMWORD[336+r10],xmm2
     2514
     2515        pand    xmm0,XMMWORD[64+rdi]
     2516        pand    xmm1,XMMWORD[80+rdi]
     2517        pand    xmm2,XMMWORD[96+rdi]
     2518        movdqa  XMMWORD[352+r10],xmm3
     2519        pand    xmm3,XMMWORD[112+rdi]
     2520        por     xmm0,xmm2
     2521        por     xmm1,xmm3
     2522        movdqa  xmm4,XMMWORD[((-128))+rdi]
     2523        movdqa  xmm5,XMMWORD[((-112))+rdi]
     2524        movdqa  xmm2,XMMWORD[((-96))+rdi]
     2525        pand    xmm4,XMMWORD[112+r10]
     2526        movdqa  xmm3,XMMWORD[((-80))+rdi]
     2527        pand    xmm5,XMMWORD[128+r10]
     2528        por     xmm0,xmm4
     2529        pand    xmm2,XMMWORD[144+r10]
     2530        por     xmm1,xmm5
     2531        pand    xmm3,XMMWORD[160+r10]
     2532        por     xmm0,xmm2
     2533        por     xmm1,xmm3
     2534        movdqa  xmm4,XMMWORD[((-64))+rdi]
     2535        movdqa  xmm5,XMMWORD[((-48))+rdi]
     2536        movdqa  xmm2,XMMWORD[((-32))+rdi]
     2537        pand    xmm4,XMMWORD[176+r10]
     2538        movdqa  xmm3,XMMWORD[((-16))+rdi]
     2539        pand    xmm5,XMMWORD[192+r10]
     2540        por     xmm0,xmm4
     2541        pand    xmm2,XMMWORD[208+r10]
     2542        por     xmm1,xmm5
     2543        pand    xmm3,XMMWORD[224+r10]
     2544        por     xmm0,xmm2
     2545        por     xmm1,xmm3
     2546        movdqa  xmm4,XMMWORD[rdi]
     2547        movdqa  xmm5,XMMWORD[16+rdi]
     2548        movdqa  xmm2,XMMWORD[32+rdi]
     2549        pand    xmm4,XMMWORD[240+r10]
     2550        movdqa  xmm3,XMMWORD[48+rdi]
     2551        pand    xmm5,XMMWORD[256+r10]
     2552        por     xmm0,xmm4
     2553        pand    xmm2,XMMWORD[272+r10]
     2554        por     xmm1,xmm5
     2555        pand    xmm3,XMMWORD[288+r10]
     2556        por     xmm0,xmm2
     2557        por     xmm1,xmm3
     2558        pxor    xmm0,xmm1
     2559        pshufd  xmm1,xmm0,0x4e
     2560        por     xmm0,xmm1
     2561        lea     rdi,[256+rdi]
     2562DB      102,72,15,126,194
     2563        lea     rbx,[((64+32+8))+rsp]
     2564
     2565        mov     r9,rdx
     2566        mulx    rax,r8,QWORD[rsi]
     2567        mulx    r12,r11,QWORD[8+rsi]
     2568        add     r11,rax
     2569        mulx    r13,rax,QWORD[16+rsi]
     2570        adc     r12,rax
     2571        adc     r13,0
     2572        mulx    r14,rax,QWORD[24+rsi]
     2573
     2574        mov     r15,r8
     2575        imul    r8,QWORD[((32+8))+rsp]
     2576        xor     rbp,rbp
     2577        mov     rdx,r8
     2578
     2579        mov     QWORD[((8+8))+rsp],rdi
     2580
     2581        lea     rsi,[32+rsi]
     2582        adcx    r13,rax
     2583        adcx    r14,rbp
     2584
     2585        mulx    r10,rax,QWORD[rcx]
     2586        adcx    r15,rax
     2587        adox    r10,r11
     2588        mulx    r11,rax,QWORD[8+rcx]
     2589        adcx    r10,rax
     2590        adox    r11,r12
     2591        mulx    r12,rax,QWORD[16+rcx]
     2592        mov     rdi,QWORD[((24+8))+rsp]
     2593        mov     QWORD[((-32))+rbx],r10
     2594        adcx    r11,rax
     2595        adox    r12,r13
     2596        mulx    r15,rax,QWORD[24+rcx]
     2597        mov     rdx,r9
     2598        mov     QWORD[((-24))+rbx],r11
     2599        adcx    r12,rax
     2600        adox    r15,rbp
     2601        lea     rcx,[32+rcx]
     2602        mov     QWORD[((-16))+rbx],r12
     2603        jmp     NEAR $L$mulx4x_1st
     2604
     2605ALIGN   32
     2606$L$mulx4x_1st:
     2607        adcx    r15,rbp
     2608        mulx    rax,r10,QWORD[rsi]
     2609        adcx    r10,r14
     2610        mulx    r14,r11,QWORD[8+rsi]
     2611        adcx    r11,rax
     2612        mulx    rax,r12,QWORD[16+rsi]
     2613        adcx    r12,r14
     2614        mulx    r14,r13,QWORD[24+rsi]
     2615DB      0x67,0x67
     2616        mov     rdx,r8
     2617        adcx    r13,rax
     2618        adcx    r14,rbp
     2619        lea     rsi,[32+rsi]
     2620        lea     rbx,[32+rbx]
     2621
     2622        adox    r10,r15
     2623        mulx    r15,rax,QWORD[rcx]
     2624        adcx    r10,rax
     2625        adox    r11,r15
     2626        mulx    r15,rax,QWORD[8+rcx]
     2627        adcx    r11,rax
     2628        adox    r12,r15
     2629        mulx    r15,rax,QWORD[16+rcx]
     2630        mov     QWORD[((-40))+rbx],r10
     2631        adcx    r12,rax
     2632        mov     QWORD[((-32))+rbx],r11
     2633        adox    r13,r15
     2634        mulx    r15,rax,QWORD[24+rcx]
     2635        mov     rdx,r9
     2636        mov     QWORD[((-24))+rbx],r12
     2637        adcx    r13,rax
     2638        adox    r15,rbp
     2639        lea     rcx,[32+rcx]
     2640        mov     QWORD[((-16))+rbx],r13
     2641
     2642        dec     rdi
     2643        jnz     NEAR $L$mulx4x_1st
     2644
     2645        mov     rax,QWORD[8+rsp]
     2646        adc     r15,rbp
     2647        lea     rsi,[rax*1+rsi]
     2648        add     r14,r15
     2649        mov     rdi,QWORD[((8+8))+rsp]
     2650        adc     rbp,rbp
     2651        mov     QWORD[((-8))+rbx],r14
     2652        jmp     NEAR $L$mulx4x_outer
     2653
     2654ALIGN   32
     2655$L$mulx4x_outer:
     2656        lea     r10,[((16-256))+rbx]
     2657        pxor    xmm4,xmm4
     2658DB      0x67,0x67
     2659        pxor    xmm5,xmm5
     2660        movdqa  xmm0,XMMWORD[((-128))+rdi]
     2661        movdqa  xmm1,XMMWORD[((-112))+rdi]
     2662        movdqa  xmm2,XMMWORD[((-96))+rdi]
     2663        pand    xmm0,XMMWORD[256+r10]
     2664        movdqa  xmm3,XMMWORD[((-80))+rdi]
     2665        pand    xmm1,XMMWORD[272+r10]
     2666        por     xmm4,xmm0
     2667        pand    xmm2,XMMWORD[288+r10]
     2668        por     xmm5,xmm1
     2669        pand    xmm3,XMMWORD[304+r10]
     2670        por     xmm4,xmm2
     2671        por     xmm5,xmm3
     2672        movdqa  xmm0,XMMWORD[((-64))+rdi]
     2673        movdqa  xmm1,XMMWORD[((-48))+rdi]
     2674        movdqa  xmm2,XMMWORD[((-32))+rdi]
     2675        pand    xmm0,XMMWORD[320+r10]
     2676        movdqa  xmm3,XMMWORD[((-16))+rdi]
     2677        pand    xmm1,XMMWORD[336+r10]
     2678        por     xmm4,xmm0
     2679        pand    xmm2,XMMWORD[352+r10]
     2680        por     xmm5,xmm1
     2681        pand    xmm3,XMMWORD[368+r10]
     2682        por     xmm4,xmm2
     2683        por     xmm5,xmm3
     2684        movdqa  xmm0,XMMWORD[rdi]
     2685        movdqa  xmm1,XMMWORD[16+rdi]
     2686        movdqa  xmm2,XMMWORD[32+rdi]
     2687        pand    xmm0,XMMWORD[384+r10]
     2688        movdqa  xmm3,XMMWORD[48+rdi]
     2689        pand    xmm1,XMMWORD[400+r10]
     2690        por     xmm4,xmm0
     2691        pand    xmm2,XMMWORD[416+r10]
     2692        por     xmm5,xmm1
     2693        pand    xmm3,XMMWORD[432+r10]
     2694        por     xmm4,xmm2
     2695        por     xmm5,xmm3
     2696        movdqa  xmm0,XMMWORD[64+rdi]
     2697        movdqa  xmm1,XMMWORD[80+rdi]
     2698        movdqa  xmm2,XMMWORD[96+rdi]
     2699        pand    xmm0,XMMWORD[448+r10]
     2700        movdqa  xmm3,XMMWORD[112+rdi]
     2701        pand    xmm1,XMMWORD[464+r10]
     2702        por     xmm4,xmm0
     2703        pand    xmm2,XMMWORD[480+r10]
     2704        por     xmm5,xmm1
     2705        pand    xmm3,XMMWORD[496+r10]
     2706        por     xmm4,xmm2
     2707        por     xmm5,xmm3
     2708        por     xmm4,xmm5
     2709        pshufd  xmm0,xmm4,0x4e
     2710        por     xmm0,xmm4
     2711        lea     rdi,[256+rdi]
     2712DB      102,72,15,126,194
     2713
     2714        mov     QWORD[rbx],rbp
     2715        lea     rbx,[32+rax*1+rbx]
     2716        mulx    r11,r8,QWORD[rsi]
     2717        xor     rbp,rbp
     2718        mov     r9,rdx
     2719        mulx    r12,r14,QWORD[8+rsi]
     2720        adox    r8,QWORD[((-32))+rbx]
     2721        adcx    r11,r14
     2722        mulx    r13,r15,QWORD[16+rsi]
     2723        adox    r11,QWORD[((-24))+rbx]
     2724        adcx    r12,r15
     2725        mulx    r14,rdx,QWORD[24+rsi]
     2726        adox    r12,QWORD[((-16))+rbx]
     2727        adcx    r13,rdx
     2728        lea     rcx,[rax*1+rcx]
     2729        lea     rsi,[32+rsi]
     2730        adox    r13,QWORD[((-8))+rbx]
     2731        adcx    r14,rbp
     2732        adox    r14,rbp
     2733
     2734        mov     r15,r8
     2735        imul    r8,QWORD[((32+8))+rsp]
     2736
     2737        mov     rdx,r8
     2738        xor     rbp,rbp
     2739        mov     QWORD[((8+8))+rsp],rdi
     2740
     2741        mulx    r10,rax,QWORD[rcx]
     2742        adcx    r15,rax
     2743        adox    r10,r11
     2744        mulx    r11,rax,QWORD[8+rcx]
     2745        adcx    r10,rax
     2746        adox    r11,r12
     2747        mulx    r12,rax,QWORD[16+rcx]
     2748        adcx    r11,rax
     2749        adox    r12,r13
     2750        mulx    r15,rax,QWORD[24+rcx]
     2751        mov     rdx,r9
     2752        mov     rdi,QWORD[((24+8))+rsp]
     2753        mov     QWORD[((-32))+rbx],r10
     2754        adcx    r12,rax
     2755        mov     QWORD[((-24))+rbx],r11
     2756        adox    r15,rbp
     2757        mov     QWORD[((-16))+rbx],r12
     2758        lea     rcx,[32+rcx]
     2759        jmp     NEAR $L$mulx4x_inner
     2760
     2761ALIGN   32
     2762$L$mulx4x_inner:
     2763        mulx    rax,r10,QWORD[rsi]
     2764        adcx    r15,rbp
     2765        adox    r10,r14
     2766        mulx    r14,r11,QWORD[8+rsi]
     2767        adcx    r10,QWORD[rbx]
     2768        adox    r11,rax
     2769        mulx    rax,r12,QWORD[16+rsi]
     2770        adcx    r11,QWORD[8+rbx]
     2771        adox    r12,r14
     2772        mulx    r14,r13,QWORD[24+rsi]
     2773        mov     rdx,r8
     2774        adcx    r12,QWORD[16+rbx]
     2775        adox    r13,rax
     2776        adcx    r13,QWORD[24+rbx]
     2777        adox    r14,rbp
     2778        lea     rsi,[32+rsi]
     2779        lea     rbx,[32+rbx]
     2780        adcx    r14,rbp
     2781
     2782        adox    r10,r15
     2783        mulx    r15,rax,QWORD[rcx]
     2784        adcx    r10,rax
     2785        adox    r11,r15
     2786        mulx    r15,rax,QWORD[8+rcx]
     2787        adcx    r11,rax
     2788        adox    r12,r15
     2789        mulx    r15,rax,QWORD[16+rcx]
     2790        mov     QWORD[((-40))+rbx],r10
     2791        adcx    r12,rax
     2792        adox    r13,r15
     2793        mov     QWORD[((-32))+rbx],r11
     2794        mulx    r15,rax,QWORD[24+rcx]
     2795        mov     rdx,r9
     2796        lea     rcx,[32+rcx]
     2797        mov     QWORD[((-24))+rbx],r12
     2798        adcx    r13,rax
     2799        adox    r15,rbp
     2800        mov     QWORD[((-16))+rbx],r13
     2801
     2802        dec     rdi
     2803        jnz     NEAR $L$mulx4x_inner
     2804
     2805        mov     rax,QWORD[((0+8))+rsp]
     2806        adc     r15,rbp
     2807        sub     rdi,QWORD[rbx]
     2808        mov     rdi,QWORD[((8+8))+rsp]
     2809        mov     r10,QWORD[((16+8))+rsp]
     2810        adc     r14,r15
     2811        lea     rsi,[rax*1+rsi]
     2812        adc     rbp,rbp
     2813        mov     QWORD[((-8))+rbx],r14
     2814
     2815        cmp     rdi,r10
     2816        jb      NEAR $L$mulx4x_outer
     2817
     2818        mov     r10,QWORD[((-8))+rcx]
     2819        mov     r8,rbp
     2820        mov     r12,QWORD[rax*1+rcx]
     2821        lea     rbp,[rax*1+rcx]
     2822        mov     rcx,rax
     2823        lea     rdi,[rax*1+rbx]
     2824        xor     eax,eax
     2825        xor     r15,r15
     2826        sub     r10,r14
     2827        adc     r15,r15
     2828        or      r8,r15
     2829        sar     rcx,3+2
     2830        sub     rax,r8
     2831        mov     rdx,QWORD[((56+8))+rsp]
     2832        dec     r12
     2833        mov     r13,QWORD[8+rbp]
     2834        xor     r8,r8
     2835        mov     r14,QWORD[16+rbp]
     2836        mov     r15,QWORD[24+rbp]
     2837        jmp     NEAR $L$sqrx4x_sub_entry
     2838
     2839
     2840
     2841ALIGN   32
     2842bn_powerx5:
     2843        mov     QWORD[8+rsp],rdi        ;WIN64 prologue
     2844        mov     QWORD[16+rsp],rsi
     2845        mov     rax,rsp
     2846$L$SEH_begin_bn_powerx5:
     2847        mov     rdi,rcx
     2848        mov     rsi,rdx
     2849        mov     rdx,r8
     2850        mov     rcx,r9
     2851        mov     r8,QWORD[40+rsp]
     2852        mov     r9,QWORD[48+rsp]
     2853
     2854
     2855
     2856        mov     rax,rsp
     2857
     2858$L$powerx5_enter:
     2859        push    rbx
     2860
     2861        push    rbp
     2862
     2863        push    r12
     2864
     2865        push    r13
     2866
     2867        push    r14
     2868
     2869        push    r15
     2870
     2871$L$powerx5_prologue:
     2872
     2873        shl     r9d,3
     2874        lea     r10,[r9*2+r9]
     2875        neg     r9
     2876        mov     r8,QWORD[r8]
     2877
     2878
     2879
     2880
     2881
     2882
     2883
     2884
     2885        lea     r11,[((-320))+r9*2+rsp]
     2886        mov     rbp,rsp
     2887        sub     r11,rdi
     2888        and     r11,4095
     2889        cmp     r10,r11
     2890        jb      NEAR $L$pwrx_sp_alt
     2891        sub     rbp,r11
     2892        lea     rbp,[((-320))+r9*2+rbp]
     2893        jmp     NEAR $L$pwrx_sp_done
     2894
     2895ALIGN   32
     2896$L$pwrx_sp_alt:
     2897        lea     r10,[((4096-320))+r9*2]
     2898        lea     rbp,[((-320))+r9*2+rbp]
     2899        sub     r11,r10
     2900        mov     r10,0
     2901        cmovc   r11,r10
     2902        sub     rbp,r11
     2903$L$pwrx_sp_done:
     2904        and     rbp,-64
     2905        mov     r11,rsp
     2906        sub     r11,rbp
     2907        and     r11,-4096
     2908        lea     rsp,[rbp*1+r11]
     2909        mov     r10,QWORD[rsp]
     2910        cmp     rsp,rbp
     2911        ja      NEAR $L$pwrx_page_walk
     2912        jmp     NEAR $L$pwrx_page_walk_done
     2913
     2914$L$pwrx_page_walk:
     2915        lea     rsp,[((-4096))+rsp]
     2916        mov     r10,QWORD[rsp]
     2917        cmp     rsp,rbp
     2918        ja      NEAR $L$pwrx_page_walk
     2919$L$pwrx_page_walk_done:
     2920
     2921        mov     r10,r9
     2922        neg     r9
     2923
     2924
     2925
     2926
     2927
     2928
     2929
     2930
     2931
     2932
     2933
     2934
     2935        pxor    xmm0,xmm0
     2936DB      102,72,15,110,207
     2937DB      102,72,15,110,209
     2938DB      102,73,15,110,218
     2939DB      102,72,15,110,226
     2940        mov     QWORD[32+rsp],r8
     2941        mov     QWORD[40+rsp],rax
     2942
     2943$L$powerx5_body:
     2944
     2945        call    __bn_sqrx8x_internal
     2946        call    __bn_postx4x_internal
     2947        call    __bn_sqrx8x_internal
     2948        call    __bn_postx4x_internal
     2949        call    __bn_sqrx8x_internal
     2950        call    __bn_postx4x_internal
     2951        call    __bn_sqrx8x_internal
     2952        call    __bn_postx4x_internal
     2953        call    __bn_sqrx8x_internal
     2954        call    __bn_postx4x_internal
     2955
     2956        mov     r9,r10
     2957        mov     rdi,rsi
     2958DB      102,72,15,126,209
     2959DB      102,72,15,126,226
     2960        mov     rax,QWORD[40+rsp]
     2961
     2962        call    mulx4x_internal
     2963
     2964        mov     rsi,QWORD[40+rsp]
     2965
     2966        mov     rax,1
     2967
     2968        mov     r15,QWORD[((-48))+rsi]
     2969
     2970        mov     r14,QWORD[((-40))+rsi]
     2971
     2972        mov     r13,QWORD[((-32))+rsi]
     2973
     2974        mov     r12,QWORD[((-24))+rsi]
     2975
     2976        mov     rbp,QWORD[((-16))+rsi]
     2977
     2978        mov     rbx,QWORD[((-8))+rsi]
     2979
     2980        lea     rsp,[rsi]
     2981
     2982$L$powerx5_epilogue:
     2983        mov     rdi,QWORD[8+rsp]        ;WIN64 epilogue
     2984        mov     rsi,QWORD[16+rsp]
     2985        DB      0F3h,0C3h               ;repret
     2986
     2987$L$SEH_end_bn_powerx5:
     2988
     2989global  bn_sqrx8x_internal
     2990
     2991
     2992ALIGN   32
     2993bn_sqrx8x_internal:
     2994__bn_sqrx8x_internal:
     2995
     2996
     2997
     2998
     2999
     3000
     3001
     3002
     3003
     3004
     3005
     3006
     3007
     3008
     3009
     3010
     3011
     3012
     3013
     3014
     3015
     3016
     3017
     3018
     3019
     3020
     3021
     3022
     3023
     3024
     3025
     3026
     3027
     3028
     3029
     3030
     3031
     3032
     3033
     3034
     3035
     3036        lea     rdi,[((48+8))+rsp]
     3037        lea     rbp,[r9*1+rsi]
     3038        mov     QWORD[((0+8))+rsp],r9
     3039        mov     QWORD[((8+8))+rsp],rbp
     3040        jmp     NEAR $L$sqr8x_zero_start
     3041
     3042ALIGN   32
     3043DB      0x66,0x66,0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00
     3044$L$sqrx8x_zero:
     3045DB      0x3e
     3046        movdqa  XMMWORD[rdi],xmm0
     3047        movdqa  XMMWORD[16+rdi],xmm0
     3048        movdqa  XMMWORD[32+rdi],xmm0
     3049        movdqa  XMMWORD[48+rdi],xmm0
     3050$L$sqr8x_zero_start:
     3051        movdqa  XMMWORD[64+rdi],xmm0
     3052        movdqa  XMMWORD[80+rdi],xmm0
     3053        movdqa  XMMWORD[96+rdi],xmm0
     3054        movdqa  XMMWORD[112+rdi],xmm0
     3055        lea     rdi,[128+rdi]
     3056        sub     r9,64
     3057        jnz     NEAR $L$sqrx8x_zero
     3058
     3059        mov     rdx,QWORD[rsi]
     3060
     3061        xor     r10,r10
     3062        xor     r11,r11
     3063        xor     r12,r12
     3064        xor     r13,r13
     3065        xor     r14,r14
     3066        xor     r15,r15
     3067        lea     rdi,[((48+8))+rsp]
     3068        xor     rbp,rbp
     3069        jmp     NEAR $L$sqrx8x_outer_loop
     3070
     3071ALIGN   32
     3072$L$sqrx8x_outer_loop:
     3073        mulx    rax,r8,QWORD[8+rsi]
     3074        adcx    r8,r9
     3075        adox    r10,rax
     3076        mulx    rax,r9,QWORD[16+rsi]
     3077        adcx    r9,r10
     3078        adox    r11,rax
     3079DB      0xc4,0xe2,0xab,0xf6,0x86,0x18,0x00,0x00,0x00
     3080        adcx    r10,r11
     3081        adox    r12,rax
     3082DB      0xc4,0xe2,0xa3,0xf6,0x86,0x20,0x00,0x00,0x00
     3083        adcx    r11,r12
     3084        adox    r13,rax
     3085        mulx    rax,r12,QWORD[40+rsi]
     3086        adcx    r12,r13
     3087        adox    r14,rax
     3088        mulx    rax,r13,QWORD[48+rsi]
     3089        adcx    r13,r14
     3090        adox    rax,r15
     3091        mulx    r15,r14,QWORD[56+rsi]
     3092        mov     rdx,QWORD[8+rsi]
     3093        adcx    r14,rax
     3094        adox    r15,rbp
     3095        adc     r15,QWORD[64+rdi]
     3096        mov     QWORD[8+rdi],r8
     3097        mov     QWORD[16+rdi],r9
     3098        sbb     rcx,rcx
     3099        xor     rbp,rbp
     3100
     3101
     3102        mulx    rbx,r8,QWORD[16+rsi]
     3103        mulx    rax,r9,QWORD[24+rsi]
     3104        adcx    r8,r10
     3105        adox    r9,rbx
     3106        mulx    rbx,r10,QWORD[32+rsi]
     3107        adcx    r9,r11
     3108        adox    r10,rax
     3109DB      0xc4,0xe2,0xa3,0xf6,0x86,0x28,0x00,0x00,0x00
     3110        adcx    r10,r12
     3111        adox    r11,rbx
     3112DB      0xc4,0xe2,0x9b,0xf6,0x9e,0x30,0x00,0x00,0x00
     3113        adcx    r11,r13
     3114        adox    r12,r14
     3115DB      0xc4,0x62,0x93,0xf6,0xb6,0x38,0x00,0x00,0x00
     3116        mov     rdx,QWORD[16+rsi]
     3117        adcx    r12,rax
     3118        adox    r13,rbx
     3119        adcx    r13,r15
     3120        adox    r14,rbp
     3121        adcx    r14,rbp
     3122
     3123        mov     QWORD[24+rdi],r8
     3124        mov     QWORD[32+rdi],r9
     3125
     3126        mulx    rbx,r8,QWORD[24+rsi]
     3127        mulx    rax,r9,QWORD[32+rsi]
     3128        adcx    r8,r10
     3129        adox    r9,rbx
     3130        mulx    rbx,r10,QWORD[40+rsi]
     3131        adcx    r9,r11
     3132        adox    r10,rax
     3133DB      0xc4,0xe2,0xa3,0xf6,0x86,0x30,0x00,0x00,0x00
     3134        adcx    r10,r12
     3135        adox    r11,r13
     3136DB      0xc4,0x62,0x9b,0xf6,0xae,0x38,0x00,0x00,0x00
     3137DB      0x3e
     3138        mov     rdx,QWORD[24+rsi]
     3139        adcx    r11,rbx
     3140        adox    r12,rax
     3141        adcx    r12,r14
     3142        mov     QWORD[40+rdi],r8
     3143        mov     QWORD[48+rdi],r9
     3144        mulx    rax,r8,QWORD[32+rsi]
     3145        adox    r13,rbp
     3146        adcx    r13,rbp
     3147
     3148        mulx    rbx,r9,QWORD[40+rsi]
     3149        adcx    r8,r10
     3150        adox    r9,rax
     3151        mulx    rax,r10,QWORD[48+rsi]
     3152        adcx    r9,r11
     3153        adox    r10,r12
     3154        mulx    r12,r11,QWORD[56+rsi]
     3155        mov     rdx,QWORD[32+rsi]
     3156        mov     r14,QWORD[40+rsi]
     3157        adcx    r10,rbx
     3158        adox    r11,rax
     3159        mov     r15,QWORD[48+rsi]
     3160        adcx    r11,r13
     3161        adox    r12,rbp
     3162        adcx    r12,rbp
     3163
     3164        mov     QWORD[56+rdi],r8
     3165        mov     QWORD[64+rdi],r9
     3166
     3167        mulx    rax,r9,r14
     3168        mov     r8,QWORD[56+rsi]
     3169        adcx    r9,r10
     3170        mulx    rbx,r10,r15
     3171        adox    r10,rax
     3172        adcx    r10,r11
     3173        mulx    rax,r11,r8
     3174        mov     rdx,r14
     3175        adox    r11,rbx
     3176        adcx    r11,r12
     3177
     3178        adcx    rax,rbp
     3179
     3180        mulx    rbx,r14,r15
     3181        mulx    r13,r12,r8
     3182        mov     rdx,r15
     3183        lea     rsi,[64+rsi]
     3184        adcx    r11,r14
     3185        adox    r12,rbx
     3186        adcx    r12,rax
     3187        adox    r13,rbp
     3188
     3189DB      0x67,0x67
     3190        mulx    r14,r8,r8
     3191        adcx    r13,r8
     3192        adcx    r14,rbp
     3193
     3194        cmp     rsi,QWORD[((8+8))+rsp]
     3195        je      NEAR $L$sqrx8x_outer_break
     3196
     3197        neg     rcx
     3198        mov     rcx,-8
     3199        mov     r15,rbp
     3200        mov     r8,QWORD[64+rdi]
     3201        adcx    r9,QWORD[72+rdi]
     3202        adcx    r10,QWORD[80+rdi]
     3203        adcx    r11,QWORD[88+rdi]
     3204        adc     r12,QWORD[96+rdi]
     3205        adc     r13,QWORD[104+rdi]
     3206        adc     r14,QWORD[112+rdi]
     3207        adc     r15,QWORD[120+rdi]
     3208        lea     rbp,[rsi]
     3209        lea     rdi,[128+rdi]
     3210        sbb     rax,rax
     3211
     3212        mov     rdx,QWORD[((-64))+rsi]
     3213        mov     QWORD[((16+8))+rsp],rax
     3214        mov     QWORD[((24+8))+rsp],rdi
     3215
     3216
     3217        xor     eax,eax
     3218        jmp     NEAR $L$sqrx8x_loop
     3219
     3220ALIGN   32
     3221$L$sqrx8x_loop:
     3222        mov     rbx,r8
     3223        mulx    r8,rax,QWORD[rbp]
     3224        adcx    rbx,rax
     3225        adox    r8,r9
     3226
     3227        mulx    r9,rax,QWORD[8+rbp]
     3228        adcx    r8,rax
     3229        adox    r9,r10
     3230
     3231        mulx    r10,rax,QWORD[16+rbp]
     3232        adcx    r9,rax
     3233        adox    r10,r11
     3234
     3235        mulx    r11,rax,QWORD[24+rbp]
     3236        adcx    r10,rax
     3237        adox    r11,r12
     3238
     3239DB      0xc4,0x62,0xfb,0xf6,0xa5,0x20,0x00,0x00,0x00
     3240        adcx    r11,rax
     3241        adox    r12,r13
     3242
     3243        mulx    r13,rax,QWORD[40+rbp]
     3244        adcx    r12,rax
     3245        adox    r13,r14
     3246
     3247        mulx    r14,rax,QWORD[48+rbp]
     3248        mov     QWORD[rcx*8+rdi],rbx
     3249        mov     ebx,0
     3250        adcx    r13,rax
     3251        adox    r14,r15
     3252
     3253DB      0xc4,0x62,0xfb,0xf6,0xbd,0x38,0x00,0x00,0x00
     3254        mov     rdx,QWORD[8+rcx*8+rsi]
     3255        adcx    r14,rax
     3256        adox    r15,rbx
     3257        adcx    r15,rbx
     3258
     3259DB      0x67
     3260        inc     rcx
     3261        jnz     NEAR $L$sqrx8x_loop
     3262
     3263        lea     rbp,[64+rbp]
     3264        mov     rcx,-8
     3265        cmp     rbp,QWORD[((8+8))+rsp]
     3266        je      NEAR $L$sqrx8x_break
     3267
     3268        sub     rbx,QWORD[((16+8))+rsp]
     3269DB      0x66
     3270        mov     rdx,QWORD[((-64))+rsi]
     3271        adcx    r8,QWORD[rdi]
     3272        adcx    r9,QWORD[8+rdi]
     3273        adc     r10,QWORD[16+rdi]
     3274        adc     r11,QWORD[24+rdi]
     3275        adc     r12,QWORD[32+rdi]
     3276        adc     r13,QWORD[40+rdi]
     3277        adc     r14,QWORD[48+rdi]
     3278        adc     r15,QWORD[56+rdi]
     3279        lea     rdi,[64+rdi]
     3280DB      0x67
     3281        sbb     rax,rax
     3282        xor     ebx,ebx
     3283        mov     QWORD[((16+8))+rsp],rax
     3284        jmp     NEAR $L$sqrx8x_loop
     3285
     3286ALIGN   32
     3287$L$sqrx8x_break:
     3288        xor     rbp,rbp
     3289        sub     rbx,QWORD[((16+8))+rsp]
     3290        adcx    r8,rbp
     3291        mov     rcx,QWORD[((24+8))+rsp]
     3292        adcx    r9,rbp
     3293        mov     rdx,QWORD[rsi]
     3294        adc     r10,0
     3295        mov     QWORD[rdi],r8
     3296        adc     r11,0
     3297        adc     r12,0
     3298        adc     r13,0
     3299        adc     r14,0
     3300        adc     r15,0
     3301        cmp     rdi,rcx
     3302        je      NEAR $L$sqrx8x_outer_loop
     3303
     3304        mov     QWORD[8+rdi],r9
     3305        mov     r9,QWORD[8+rcx]
     3306        mov     QWORD[16+rdi],r10
     3307        mov     r10,QWORD[16+rcx]
     3308        mov     QWORD[24+rdi],r11
     3309        mov     r11,QWORD[24+rcx]
     3310        mov     QWORD[32+rdi],r12
     3311        mov     r12,QWORD[32+rcx]
     3312        mov     QWORD[40+rdi],r13
     3313        mov     r13,QWORD[40+rcx]
     3314        mov     QWORD[48+rdi],r14
     3315        mov     r14,QWORD[48+rcx]
     3316        mov     QWORD[56+rdi],r15
     3317        mov     r15,QWORD[56+rcx]
     3318        mov     rdi,rcx
     3319        jmp     NEAR $L$sqrx8x_outer_loop
     3320
     3321ALIGN   32
     3322$L$sqrx8x_outer_break:
     3323        mov     QWORD[72+rdi],r9
     3324DB      102,72,15,126,217
     3325        mov     QWORD[80+rdi],r10
     3326        mov     QWORD[88+rdi],r11
     3327        mov     QWORD[96+rdi],r12
     3328        mov     QWORD[104+rdi],r13
     3329        mov     QWORD[112+rdi],r14
     3330        lea     rdi,[((48+8))+rsp]
     3331        mov     rdx,QWORD[rcx*1+rsi]
     3332
     3333        mov     r11,QWORD[8+rdi]
     3334        xor     r10,r10
     3335        mov     r9,QWORD[((0+8))+rsp]
     3336        adox    r11,r11
     3337        mov     r12,QWORD[16+rdi]
     3338        mov     r13,QWORD[24+rdi]
     3339
     3340
     3341ALIGN   32
     3342$L$sqrx4x_shift_n_add:
     3343        mulx    rbx,rax,rdx
     3344        adox    r12,r12
     3345        adcx    rax,r10
     3346DB      0x48,0x8b,0x94,0x0e,0x08,0x00,0x00,0x00
     3347DB      0x4c,0x8b,0x97,0x20,0x00,0x00,0x00
     3348        adox    r13,r13
     3349        adcx    rbx,r11
     3350        mov     r11,QWORD[40+rdi]
     3351        mov     QWORD[rdi],rax
     3352        mov     QWORD[8+rdi],rbx
     3353
     3354        mulx    rbx,rax,rdx
     3355        adox    r10,r10
     3356        adcx    rax,r12
     3357        mov     rdx,QWORD[16+rcx*1+rsi]
     3358        mov     r12,QWORD[48+rdi]
     3359        adox    r11,r11
     3360        adcx    rbx,r13
     3361        mov     r13,QWORD[56+rdi]
     3362        mov     QWORD[16+rdi],rax
     3363        mov     QWORD[24+rdi],rbx
     3364
     3365        mulx    rbx,rax,rdx
     3366        adox    r12,r12
     3367        adcx    rax,r10
     3368        mov     rdx,QWORD[24+rcx*1+rsi]
     3369        lea     rcx,[32+rcx]
     3370        mov     r10,QWORD[64+rdi]
     3371        adox    r13,r13
     3372        adcx    rbx,r11
     3373        mov     r11,QWORD[72+rdi]
     3374        mov     QWORD[32+rdi],rax
     3375        mov     QWORD[40+rdi],rbx
     3376
     3377        mulx    rbx,rax,rdx
     3378        adox    r10,r10
     3379        adcx    rax,r12
     3380        jrcxz   $L$sqrx4x_shift_n_add_break
     3381DB      0x48,0x8b,0x94,0x0e,0x00,0x00,0x00,0x00
     3382        adox    r11,r11
     3383        adcx    rbx,r13
     3384        mov     r12,QWORD[80+rdi]
     3385        mov     r13,QWORD[88+rdi]
     3386        mov     QWORD[48+rdi],rax
     3387        mov     QWORD[56+rdi],rbx
     3388        lea     rdi,[64+rdi]
     3389        nop
     3390        jmp     NEAR $L$sqrx4x_shift_n_add
     3391
     3392ALIGN   32
     3393$L$sqrx4x_shift_n_add_break:
     3394        adcx    rbx,r13
     3395        mov     QWORD[48+rdi],rax
     3396        mov     QWORD[56+rdi],rbx
     3397        lea     rdi,[64+rdi]
     3398DB      102,72,15,126,213
     3399__bn_sqrx8x_reduction:
     3400        xor     eax,eax
     3401        mov     rbx,QWORD[((32+8))+rsp]
     3402        mov     rdx,QWORD[((48+8))+rsp]
     3403        lea     rcx,[((-64))+r9*1+rbp]
     3404
     3405        mov     QWORD[((0+8))+rsp],rcx
     3406        mov     QWORD[((8+8))+rsp],rdi
     3407
     3408        lea     rdi,[((48+8))+rsp]
     3409        jmp     NEAR $L$sqrx8x_reduction_loop
     3410
     3411ALIGN   32
     3412$L$sqrx8x_reduction_loop:
     3413        mov     r9,QWORD[8+rdi]
     3414        mov     r10,QWORD[16+rdi]
     3415        mov     r11,QWORD[24+rdi]
     3416        mov     r12,QWORD[32+rdi]
     3417        mov     r8,rdx
     3418        imul    rdx,rbx
     3419        mov     r13,QWORD[40+rdi]
     3420        mov     r14,QWORD[48+rdi]
     3421        mov     r15,QWORD[56+rdi]
     3422        mov     QWORD[((24+8))+rsp],rax
     3423
     3424        lea     rdi,[64+rdi]
     3425        xor     rsi,rsi
     3426        mov     rcx,-8
     3427        jmp     NEAR $L$sqrx8x_reduce
     3428
     3429ALIGN   32
     3430$L$sqrx8x_reduce:
     3431        mov     rbx,r8
     3432        mulx    r8,rax,QWORD[rbp]
     3433        adcx    rax,rbx
     3434        adox    r8,r9
     3435
     3436        mulx    r9,rbx,QWORD[8+rbp]
     3437        adcx    r8,rbx
     3438        adox    r9,r10
     3439
     3440        mulx    r10,rbx,QWORD[16+rbp]
     3441        adcx    r9,rbx
     3442        adox    r10,r11
     3443
     3444        mulx    r11,rbx,QWORD[24+rbp]
     3445        adcx    r10,rbx
     3446        adox    r11,r12
     3447
     3448DB      0xc4,0x62,0xe3,0xf6,0xa5,0x20,0x00,0x00,0x00
     3449        mov     rax,rdx
     3450        mov     rdx,r8
     3451        adcx    r11,rbx
     3452        adox    r12,r13
     3453
     3454        mulx    rdx,rbx,QWORD[((32+8))+rsp]
     3455        mov     rdx,rax
     3456        mov     QWORD[((64+48+8))+rcx*8+rsp],rax
     3457
     3458        mulx    r13,rax,QWORD[40+rbp]
     3459        adcx    r12,rax
     3460        adox    r13,r14
     3461
     3462        mulx    r14,rax,QWORD[48+rbp]
     3463        adcx    r13,rax
     3464        adox    r14,r15
     3465
     3466        mulx    r15,rax,QWORD[56+rbp]
     3467        mov     rdx,rbx
     3468        adcx    r14,rax
     3469        adox    r15,rsi
     3470        adcx    r15,rsi
     3471
     3472DB      0x67,0x67,0x67
     3473        inc     rcx
     3474        jnz     NEAR $L$sqrx8x_reduce
     3475
     3476        mov     rax,rsi
     3477        cmp     rbp,QWORD[((0+8))+rsp]
     3478        jae     NEAR $L$sqrx8x_no_tail
     3479
     3480        mov     rdx,QWORD[((48+8))+rsp]
     3481        add     r8,QWORD[rdi]
     3482        lea     rbp,[64+rbp]
     3483        mov     rcx,-8
     3484        adcx    r9,QWORD[8+rdi]
     3485        adcx    r10,QWORD[16+rdi]
     3486        adc     r11,QWORD[24+rdi]
     3487        adc     r12,QWORD[32+rdi]
     3488        adc     r13,QWORD[40+rdi]
     3489        adc     r14,QWORD[48+rdi]
     3490        adc     r15,QWORD[56+rdi]
     3491        lea     rdi,[64+rdi]
     3492        sbb     rax,rax
     3493
     3494        xor     rsi,rsi
     3495        mov     QWORD[((16+8))+rsp],rax
     3496        jmp     NEAR $L$sqrx8x_tail
     3497
     3498ALIGN   32
     3499$L$sqrx8x_tail:
     3500        mov     rbx,r8
     3501        mulx    r8,rax,QWORD[rbp]
     3502        adcx    rbx,rax
     3503        adox    r8,r9
     3504
     3505        mulx    r9,rax,QWORD[8+rbp]
     3506        adcx    r8,rax
     3507        adox    r9,r10
     3508
     3509        mulx    r10,rax,QWORD[16+rbp]
     3510        adcx    r9,rax
     3511        adox    r10,r11
     3512
     3513        mulx    r11,rax,QWORD[24+rbp]
     3514        adcx    r10,rax
     3515        adox    r11,r12
     3516
     3517DB      0xc4,0x62,0xfb,0xf6,0xa5,0x20,0x00,0x00,0x00
     3518        adcx    r11,rax
     3519        adox    r12,r13
     3520
     3521        mulx    r13,rax,QWORD[40+rbp]
     3522        adcx    r12,rax
     3523        adox    r13,r14
     3524
     3525        mulx    r14,rax,QWORD[48+rbp]
     3526        adcx    r13,rax
     3527        adox    r14,r15
     3528
     3529        mulx    r15,rax,QWORD[56+rbp]
     3530        mov     rdx,QWORD[((72+48+8))+rcx*8+rsp]
     3531        adcx    r14,rax
     3532        adox    r15,rsi
     3533        mov     QWORD[rcx*8+rdi],rbx
     3534        mov     rbx,r8
     3535        adcx    r15,rsi
     3536
     3537        inc     rcx
     3538        jnz     NEAR $L$sqrx8x_tail
     3539
     3540        cmp     rbp,QWORD[((0+8))+rsp]
     3541        jae     NEAR $L$sqrx8x_tail_done
     3542
     3543        sub     rsi,QWORD[((16+8))+rsp]
     3544        mov     rdx,QWORD[((48+8))+rsp]
     3545        lea     rbp,[64+rbp]
     3546        adc     r8,QWORD[rdi]
     3547        adc     r9,QWORD[8+rdi]
     3548        adc     r10,QWORD[16+rdi]
     3549        adc     r11,QWORD[24+rdi]
     3550        adc     r12,QWORD[32+rdi]
     3551        adc     r13,QWORD[40+rdi]
     3552        adc     r14,QWORD[48+rdi]
     3553        adc     r15,QWORD[56+rdi]
     3554        lea     rdi,[64+rdi]
     3555        sbb     rax,rax
     3556        sub     rcx,8
     3557
     3558        xor     rsi,rsi
     3559        mov     QWORD[((16+8))+rsp],rax
     3560        jmp     NEAR $L$sqrx8x_tail
     3561
     3562ALIGN   32
     3563$L$sqrx8x_tail_done:
     3564        xor     rax,rax
     3565        add     r8,QWORD[((24+8))+rsp]
     3566        adc     r9,0
     3567        adc     r10,0
     3568        adc     r11,0
     3569        adc     r12,0
     3570        adc     r13,0
     3571        adc     r14,0
     3572        adc     r15,0
     3573        adc     rax,0
     3574
     3575        sub     rsi,QWORD[((16+8))+rsp]
     3576$L$sqrx8x_no_tail:
     3577        adc     r8,QWORD[rdi]
     3578DB      102,72,15,126,217
     3579        adc     r9,QWORD[8+rdi]
     3580        mov     rsi,QWORD[56+rbp]
     3581DB      102,72,15,126,213
     3582        adc     r10,QWORD[16+rdi]
     3583        adc     r11,QWORD[24+rdi]
     3584        adc     r12,QWORD[32+rdi]
     3585        adc     r13,QWORD[40+rdi]
     3586        adc     r14,QWORD[48+rdi]
     3587        adc     r15,QWORD[56+rdi]
     3588        adc     rax,0
     3589
     3590        mov     rbx,QWORD[((32+8))+rsp]
     3591        mov     rdx,QWORD[64+rcx*1+rdi]
     3592
     3593        mov     QWORD[rdi],r8
     3594        lea     r8,[64+rdi]
     3595        mov     QWORD[8+rdi],r9
     3596        mov     QWORD[16+rdi],r10
     3597        mov     QWORD[24+rdi],r11
     3598        mov     QWORD[32+rdi],r12
     3599        mov     QWORD[40+rdi],r13
     3600        mov     QWORD[48+rdi],r14
     3601        mov     QWORD[56+rdi],r15
     3602
     3603        lea     rdi,[64+rcx*1+rdi]
     3604        cmp     r8,QWORD[((8+8))+rsp]
     3605        jb      NEAR $L$sqrx8x_reduction_loop
     3606        DB      0F3h,0C3h               ;repret
     3607
     3608
     3609ALIGN   32
     3610__bn_postx4x_internal:
     3611
     3612        mov     r12,QWORD[rbp]
     3613        mov     r10,rcx
     3614        mov     r9,rcx
     3615        neg     rax
     3616        sar     rcx,3+2
     3617
     3618DB      102,72,15,126,202
     3619DB      102,72,15,126,206
     3620        dec     r12
     3621        mov     r13,QWORD[8+rbp]
     3622        xor     r8,r8
     3623        mov     r14,QWORD[16+rbp]
     3624        mov     r15,QWORD[24+rbp]
     3625        jmp     NEAR $L$sqrx4x_sub_entry
     3626
     3627ALIGN   16
     3628$L$sqrx4x_sub:
     3629        mov     r12,QWORD[rbp]
     3630        mov     r13,QWORD[8+rbp]
     3631        mov     r14,QWORD[16+rbp]
     3632        mov     r15,QWORD[24+rbp]
     3633$L$sqrx4x_sub_entry:
     3634        andn    r12,r12,rax
     3635        lea     rbp,[32+rbp]
     3636        andn    r13,r13,rax
     3637        andn    r14,r14,rax
     3638        andn    r15,r15,rax
     3639
     3640        neg     r8
     3641        adc     r12,QWORD[rdi]
     3642        adc     r13,QWORD[8+rdi]
     3643        adc     r14,QWORD[16+rdi]
     3644        adc     r15,QWORD[24+rdi]
     3645        mov     QWORD[rdx],r12
     3646        lea     rdi,[32+rdi]
     3647        mov     QWORD[8+rdx],r13
     3648        sbb     r8,r8
     3649        mov     QWORD[16+rdx],r14
     3650        mov     QWORD[24+rdx],r15
     3651        lea     rdx,[32+rdx]
     3652
     3653        inc     rcx
     3654        jnz     NEAR $L$sqrx4x_sub
     3655
     3656        neg     r9
     3657
     3658        DB      0F3h,0C3h               ;repret
     3659
     3660
    22683661global  bn_get_bits5
    22693662
     
    26023995        DD      $L$SEH_end_bn_from_mont8x wrt ..imagebase
    26033996        DD      $L$SEH_info_bn_from_mont8x wrt ..imagebase
     3997        DD      $L$SEH_begin_bn_mulx4x_mont_gather5 wrt ..imagebase
     3998        DD      $L$SEH_end_bn_mulx4x_mont_gather5 wrt ..imagebase
     3999        DD      $L$SEH_info_bn_mulx4x_mont_gather5 wrt ..imagebase
     4000
     4001        DD      $L$SEH_begin_bn_powerx5 wrt ..imagebase
     4002        DD      $L$SEH_end_bn_powerx5 wrt ..imagebase
     4003        DD      $L$SEH_info_bn_powerx5 wrt ..imagebase
    26044004        DD      $L$SEH_begin_bn_gather5 wrt ..imagebase
    26054005        DD      $L$SEH_end_bn_gather5 wrt ..imagebase
     
    26284028        DD      $L$from_prologue wrt ..imagebase,$L$from_body wrt ..imagebase,$L$from_epilogue wrt ..imagebase
    26294029ALIGN   8
     4030$L$SEH_info_bn_mulx4x_mont_gather5:
     4031DB      9,0,0,0
     4032        DD      mul_handler wrt ..imagebase
     4033        DD      $L$mulx4x_prologue wrt ..imagebase,$L$mulx4x_body wrt ..imagebase,$L$mulx4x_epilogue wrt ..imagebase
     4034ALIGN   8
     4035$L$SEH_info_bn_powerx5:
     4036DB      9,0,0,0
     4037        DD      mul_handler wrt ..imagebase
     4038        DD      $L$powerx5_prologue wrt ..imagebase,$L$powerx5_body wrt ..imagebase,$L$powerx5_epilogue wrt ..imagebase
     4039ALIGN   8
    26304040$L$SEH_info_bn_gather5:
    26314041DB      0x01,0x0b,0x03,0x0a
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette