VirtualBox

Ignore:
Timestamp:
Jun 8, 2022 8:35:57 AM (3 years ago)
Author:
vboxsync
Message:

libs/openssl-3.0.3: Recreated openssl assembler files, bugref:10128

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/libs/openssl-3.0.3/crypto/genasm-nasm/x86_64-mont5.S

    r95219 r95221  
    3030        test    r9d,7
    3131        jnz     NEAR $L$mul_enter
    32         mov     r11d,DWORD[((OPENSSL_ia32cap_P+8))]
    3332        jmp     NEAR $L$mul4x_enter
    3433
     
    481480
    482481$L$mul4x_enter:
    483         and     r11d,0x80108
    484         cmp     r11d,0x80108
    485         je      NEAR $L$mulx4x_enter
    486482        push    rbx
    487483
     
    11271123        mov     rax,rsp
    11281124
    1129         mov     r11d,DWORD[((OPENSSL_ia32cap_P+8))]
    1130         and     r11d,0x80108
    1131         cmp     r11d,0x80108
    1132         je      NEAR $L$powerx5_enter
    11331125        push    rbx
    11341126
     
    22342226        mov     rbp,rcx
    22352227DB      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 
    2249 ALIGN   32
    2250 $L$from_mont_nox:
    22512228        call    __bn_sqr8x_reduction
    22522229        call    __bn_post4x_internal
     
    22892266
    22902267$L$SEH_end_bn_from_mont8x:
    2291 
    2292 ALIGN   32
    2293 bn_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 
    2417 ALIGN   32
    2418 mulx4x_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
    2440 DB      0x67
    2441         movdqa  xmm2,xmm1
    2442 DB      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
    2503 DB      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]
    2562 DB      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 
    2605 ALIGN   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]
    2615 DB      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 
    2654 ALIGN   32
    2655 $L$mulx4x_outer:
    2656         lea     r10,[((16-256))+rbx]
    2657         pxor    xmm4,xmm4
    2658 DB      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]
    2712 DB      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 
    2761 ALIGN   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 
    2841 ALIGN   32
    2842 bn_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 
    2895 ALIGN   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
    2936 DB      102,72,15,110,207
    2937 DB      102,72,15,110,209
    2938 DB      102,73,15,110,218
    2939 DB      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
    2958 DB      102,72,15,126,209
    2959 DB      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 
    2989 global  bn_sqrx8x_internal
    2990 
    2991 
    2992 ALIGN   32
    2993 bn_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 
    3042 ALIGN   32
    3043 DB      0x66,0x66,0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00
    3044 $L$sqrx8x_zero:
    3045 DB      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 
    3071 ALIGN   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
    3079 DB      0xc4,0xe2,0xab,0xf6,0x86,0x18,0x00,0x00,0x00
    3080         adcx    r10,r11
    3081         adox    r12,rax
    3082 DB      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
    3109 DB      0xc4,0xe2,0xa3,0xf6,0x86,0x28,0x00,0x00,0x00
    3110         adcx    r10,r12
    3111         adox    r11,rbx
    3112 DB      0xc4,0xe2,0x9b,0xf6,0x9e,0x30,0x00,0x00,0x00
    3113         adcx    r11,r13
    3114         adox    r12,r14
    3115 DB      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
    3133 DB      0xc4,0xe2,0xa3,0xf6,0x86,0x30,0x00,0x00,0x00
    3134         adcx    r10,r12
    3135         adox    r11,r13
    3136 DB      0xc4,0x62,0x9b,0xf6,0xae,0x38,0x00,0x00,0x00
    3137 DB      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 
    3189 DB      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 
    3220 ALIGN   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 
    3239 DB      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 
    3253 DB      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 
    3259 DB      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]
    3269 DB      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]
    3280 DB      0x67
    3281         sbb     rax,rax
    3282         xor     ebx,ebx
    3283         mov     QWORD[((16+8))+rsp],rax
    3284         jmp     NEAR $L$sqrx8x_loop
    3285 
    3286 ALIGN   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 
    3321 ALIGN   32
    3322 $L$sqrx8x_outer_break:
    3323         mov     QWORD[72+rdi],r9
    3324 DB      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 
    3341 ALIGN   32
    3342 $L$sqrx4x_shift_n_add:
    3343         mulx    rbx,rax,rdx
    3344         adox    r12,r12
    3345         adcx    rax,r10
    3346 DB      0x48,0x8b,0x94,0x0e,0x08,0x00,0x00,0x00
    3347 DB      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
    3381 DB      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 
    3392 ALIGN   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]
    3398 DB      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 
    3411 ALIGN   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 
    3429 ALIGN   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 
    3448 DB      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 
    3472 DB      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 
    3498 ALIGN   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 
    3517 DB      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 
    3562 ALIGN   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]
    3578 DB      102,72,15,126,217
    3579         adc     r9,QWORD[8+rdi]
    3580         mov     rsi,QWORD[56+rbp]
    3581 DB      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 
    3609 ALIGN   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 
    3618 DB      102,72,15,126,202
    3619 DB      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 
    3627 ALIGN   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 
    36612268global  bn_get_bits5
    36622269
     
    39952602        DD      $L$SEH_end_bn_from_mont8x wrt ..imagebase
    39962603        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
    40042604        DD      $L$SEH_begin_bn_gather5 wrt ..imagebase
    40052605        DD      $L$SEH_end_bn_gather5 wrt ..imagebase
     
    40282628        DD      $L$from_prologue wrt ..imagebase,$L$from_body wrt ..imagebase,$L$from_epilogue wrt ..imagebase
    40292629ALIGN   8
    4030 $L$SEH_info_bn_mulx4x_mont_gather5:
    4031 DB      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
    4034 ALIGN   8
    4035 $L$SEH_info_bn_powerx5:
    4036 DB      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
    4039 ALIGN   8
    40402630$L$SEH_info_bn_gather5:
    40412631DB      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