155714Skris.ident "sparcv8.s, Version 1.4" 255714Skris.ident "SPARC v8 ISA artwork by Andy Polyakov <appro@fy.chalmers.se>" 355714Skris 455714Skris/* 555714Skris * ==================================================================== 655714Skris * Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL 755714Skris * project. 855714Skris * 955714Skris * Rights for redistribution and usage in source and binary forms are 1055714Skris * granted according to the OpenSSL license. Warranty of any kind is 1155714Skris * disclaimed. 1255714Skris * ==================================================================== 1355714Skris */ 1455714Skris 1555714Skris/* 1655714Skris * This is my modest contributon to OpenSSL project (see 1755714Skris * http://www.openssl.org/ for more information about it) and is 1855714Skris * a drop-in SuperSPARC ISA replacement for crypto/bn/bn_asm.c 1955714Skris * module. For updates see http://fy.chalmers.se/~appro/hpe/. 2055714Skris * 2155714Skris * See bn_asm.sparc.v8plus.S for more details. 2255714Skris */ 2355714Skris 2455714Skris/* 2555714Skris * Revision history. 2655714Skris * 2755714Skris * 1.1 - new loop unrolling model(*); 2855714Skris * 1.2 - made gas friendly; 2955714Skris * 1.3 - fixed problem with /usr/ccs/lib/cpp; 3055714Skris * 1.4 - some retunes; 3155714Skris * 3255714Skris * (*) see bn_asm.sparc.v8plus.S for details 3355714Skris */ 3455714Skris 3555714Skris.section ".text",#alloc,#execinstr 3655714Skris.file "bn_asm.sparc.v8.S" 3755714Skris 3855714Skris.align 32 3955714Skris 4055714Skris.global bn_mul_add_words 4155714Skris/* 4255714Skris * BN_ULONG bn_mul_add_words(rp,ap,num,w) 4355714Skris * BN_ULONG *rp,*ap; 4455714Skris * int num; 4555714Skris * BN_ULONG w; 4655714Skris */ 4755714Skrisbn_mul_add_words: 4855714Skris cmp %o2,0 4955714Skris bg,a .L_bn_mul_add_words_proceed 5055714Skris ld [%o1],%g2 5155714Skris retl 5255714Skris clr %o0 5355714Skris 5455714Skris.L_bn_mul_add_words_proceed: 5555714Skris andcc %o2,-4,%g0 5655714Skris bz .L_bn_mul_add_words_tail 5755714Skris clr %o5 5855714Skris 5955714Skris.L_bn_mul_add_words_loop: 6055714Skris ld [%o0],%o4 6155714Skris ld [%o1+4],%g3 6255714Skris umul %o3,%g2,%g2 6355714Skris rd %y,%g1 6455714Skris addcc %o4,%o5,%o4 6555714Skris addx %g1,0,%g1 6655714Skris addcc %o4,%g2,%o4 6755714Skris st %o4,[%o0] 6855714Skris addx %g1,0,%o5 6955714Skris 7055714Skris ld [%o0+4],%o4 7155714Skris ld [%o1+8],%g2 7255714Skris umul %o3,%g3,%g3 7355714Skris dec 4,%o2 7455714Skris rd %y,%g1 7555714Skris addcc %o4,%o5,%o4 7655714Skris addx %g1,0,%g1 7755714Skris addcc %o4,%g3,%o4 7855714Skris st %o4,[%o0+4] 7955714Skris addx %g1,0,%o5 8055714Skris 8155714Skris ld [%o0+8],%o4 8255714Skris ld [%o1+12],%g3 8355714Skris umul %o3,%g2,%g2 8455714Skris inc 16,%o1 8555714Skris rd %y,%g1 8655714Skris addcc %o4,%o5,%o4 8755714Skris addx %g1,0,%g1 8855714Skris addcc %o4,%g2,%o4 8955714Skris st %o4,[%o0+8] 9055714Skris addx %g1,0,%o5 9155714Skris 9255714Skris ld [%o0+12],%o4 9355714Skris umul %o3,%g3,%g3 9455714Skris inc 16,%o0 9555714Skris rd %y,%g1 9655714Skris addcc %o4,%o5,%o4 9755714Skris addx %g1,0,%g1 9855714Skris addcc %o4,%g3,%o4 9955714Skris st %o4,[%o0-4] 10055714Skris addx %g1,0,%o5 10155714Skris andcc %o2,-4,%g0 10255714Skris bnz,a .L_bn_mul_add_words_loop 10355714Skris ld [%o1],%g2 10455714Skris 10555714Skris tst %o2 10655714Skris bnz,a .L_bn_mul_add_words_tail 10755714Skris ld [%o1],%g2 10855714Skris.L_bn_mul_add_words_return: 10955714Skris retl 11055714Skris mov %o5,%o0 11155714Skris nop 11255714Skris 11355714Skris.L_bn_mul_add_words_tail: 11455714Skris ld [%o0],%o4 11555714Skris umul %o3,%g2,%g2 11655714Skris addcc %o4,%o5,%o4 11755714Skris rd %y,%g1 11855714Skris addx %g1,0,%g1 11955714Skris addcc %o4,%g2,%o4 12055714Skris addx %g1,0,%o5 12155714Skris deccc %o2 12255714Skris bz .L_bn_mul_add_words_return 12355714Skris st %o4,[%o0] 12455714Skris 12555714Skris ld [%o1+4],%g2 12655714Skris ld [%o0+4],%o4 12755714Skris umul %o3,%g2,%g2 12855714Skris rd %y,%g1 12955714Skris addcc %o4,%o5,%o4 13055714Skris addx %g1,0,%g1 13155714Skris addcc %o4,%g2,%o4 13255714Skris addx %g1,0,%o5 13355714Skris deccc %o2 13455714Skris bz .L_bn_mul_add_words_return 13555714Skris st %o4,[%o0+4] 13655714Skris 13755714Skris ld [%o1+8],%g2 13855714Skris ld [%o0+8],%o4 13955714Skris umul %o3,%g2,%g2 14055714Skris rd %y,%g1 14155714Skris addcc %o4,%o5,%o4 14255714Skris addx %g1,0,%g1 14355714Skris addcc %o4,%g2,%o4 14455714Skris st %o4,[%o0+8] 14555714Skris retl 14655714Skris addx %g1,0,%o0 14755714Skris 14855714Skris.type bn_mul_add_words,#function 14955714Skris.size bn_mul_add_words,(.-bn_mul_add_words) 15055714Skris 15155714Skris.align 32 15255714Skris 15355714Skris.global bn_mul_words 15455714Skris/* 15555714Skris * BN_ULONG bn_mul_words(rp,ap,num,w) 15655714Skris * BN_ULONG *rp,*ap; 15755714Skris * int num; 15855714Skris * BN_ULONG w; 15955714Skris */ 16055714Skrisbn_mul_words: 16155714Skris cmp %o2,0 16255714Skris bg,a .L_bn_mul_words_proceeed 16355714Skris ld [%o1],%g2 16455714Skris retl 16555714Skris clr %o0 16655714Skris 16755714Skris.L_bn_mul_words_proceeed: 16855714Skris andcc %o2,-4,%g0 16955714Skris bz .L_bn_mul_words_tail 17055714Skris clr %o5 17155714Skris 17255714Skris.L_bn_mul_words_loop: 17355714Skris ld [%o1+4],%g3 17455714Skris umul %o3,%g2,%g2 17555714Skris addcc %g2,%o5,%g2 17655714Skris rd %y,%g1 17755714Skris addx %g1,0,%o5 17855714Skris st %g2,[%o0] 17955714Skris 18055714Skris ld [%o1+8],%g2 18155714Skris umul %o3,%g3,%g3 18255714Skris addcc %g3,%o5,%g3 18355714Skris rd %y,%g1 18455714Skris dec 4,%o2 18555714Skris addx %g1,0,%o5 18655714Skris st %g3,[%o0+4] 18755714Skris 18855714Skris ld [%o1+12],%g3 18955714Skris umul %o3,%g2,%g2 19055714Skris addcc %g2,%o5,%g2 19155714Skris rd %y,%g1 19255714Skris inc 16,%o1 19355714Skris st %g2,[%o0+8] 19455714Skris addx %g1,0,%o5 19555714Skris 19655714Skris umul %o3,%g3,%g3 19755714Skris addcc %g3,%o5,%g3 19855714Skris rd %y,%g1 19955714Skris inc 16,%o0 20055714Skris addx %g1,0,%o5 20155714Skris st %g3,[%o0-4] 20255714Skris andcc %o2,-4,%g0 20355714Skris nop 20455714Skris bnz,a .L_bn_mul_words_loop 20555714Skris ld [%o1],%g2 20655714Skris 20755714Skris tst %o2 20855714Skris bnz,a .L_bn_mul_words_tail 20955714Skris ld [%o1],%g2 21055714Skris.L_bn_mul_words_return: 21155714Skris retl 21255714Skris mov %o5,%o0 21355714Skris nop 21455714Skris 21555714Skris.L_bn_mul_words_tail: 21655714Skris umul %o3,%g2,%g2 21755714Skris addcc %g2,%o5,%g2 21855714Skris rd %y,%g1 21955714Skris addx %g1,0,%o5 22055714Skris deccc %o2 22155714Skris bz .L_bn_mul_words_return 22255714Skris st %g2,[%o0] 22355714Skris nop 22455714Skris 22555714Skris ld [%o1+4],%g2 22655714Skris umul %o3,%g2,%g2 22755714Skris addcc %g2,%o5,%g2 22855714Skris rd %y,%g1 22955714Skris addx %g1,0,%o5 23055714Skris deccc %o2 23155714Skris bz .L_bn_mul_words_return 23255714Skris st %g2,[%o0+4] 23355714Skris 23455714Skris ld [%o1+8],%g2 23555714Skris umul %o3,%g2,%g2 23655714Skris addcc %g2,%o5,%g2 23755714Skris rd %y,%g1 23855714Skris st %g2,[%o0+8] 23955714Skris retl 24055714Skris addx %g1,0,%o0 24155714Skris 24255714Skris.type bn_mul_words,#function 24355714Skris.size bn_mul_words,(.-bn_mul_words) 24455714Skris 24555714Skris.align 32 24655714Skris.global bn_sqr_words 24755714Skris/* 24855714Skris * void bn_sqr_words(r,a,n) 24955714Skris * BN_ULONG *r,*a; 25055714Skris * int n; 25155714Skris */ 25255714Skrisbn_sqr_words: 25355714Skris cmp %o2,0 25455714Skris bg,a .L_bn_sqr_words_proceeed 25555714Skris ld [%o1],%g2 25655714Skris retl 25755714Skris clr %o0 25855714Skris 25955714Skris.L_bn_sqr_words_proceeed: 26055714Skris andcc %o2,-4,%g0 26155714Skris bz .L_bn_sqr_words_tail 26255714Skris clr %o5 26355714Skris 26455714Skris.L_bn_sqr_words_loop: 26555714Skris ld [%o1+4],%g3 26655714Skris umul %g2,%g2,%o4 26755714Skris st %o4,[%o0] 26855714Skris rd %y,%o5 26955714Skris st %o5,[%o0+4] 27055714Skris 27155714Skris ld [%o1+8],%g2 27255714Skris umul %g3,%g3,%o4 27355714Skris dec 4,%o2 27455714Skris st %o4,[%o0+8] 27555714Skris rd %y,%o5 27655714Skris st %o5,[%o0+12] 27755714Skris nop 27855714Skris 27955714Skris ld [%o1+12],%g3 28055714Skris umul %g2,%g2,%o4 28155714Skris st %o4,[%o0+16] 28255714Skris rd %y,%o5 28355714Skris inc 16,%o1 28455714Skris st %o5,[%o0+20] 28555714Skris 28655714Skris umul %g3,%g3,%o4 28755714Skris inc 32,%o0 28855714Skris st %o4,[%o0-8] 28955714Skris rd %y,%o5 29055714Skris st %o5,[%o0-4] 29155714Skris andcc %o2,-4,%g2 29255714Skris bnz,a .L_bn_sqr_words_loop 29355714Skris ld [%o1],%g2 29455714Skris 29555714Skris tst %o2 29655714Skris nop 29755714Skris bnz,a .L_bn_sqr_words_tail 29855714Skris ld [%o1],%g2 29955714Skris.L_bn_sqr_words_return: 30055714Skris retl 30155714Skris clr %o0 30255714Skris 30355714Skris.L_bn_sqr_words_tail: 30455714Skris umul %g2,%g2,%o4 30555714Skris st %o4,[%o0] 30655714Skris deccc %o2 30755714Skris rd %y,%o5 30855714Skris bz .L_bn_sqr_words_return 30955714Skris st %o5,[%o0+4] 31055714Skris 31155714Skris ld [%o1+4],%g2 31255714Skris umul %g2,%g2,%o4 31355714Skris st %o4,[%o0+8] 31455714Skris deccc %o2 31555714Skris rd %y,%o5 31655714Skris nop 31755714Skris bz .L_bn_sqr_words_return 31855714Skris st %o5,[%o0+12] 31955714Skris 32055714Skris ld [%o1+8],%g2 32155714Skris umul %g2,%g2,%o4 32255714Skris st %o4,[%o0+16] 32355714Skris rd %y,%o5 32455714Skris st %o5,[%o0+20] 32555714Skris retl 32655714Skris clr %o0 32755714Skris 32855714Skris.type bn_sqr_words,#function 32955714Skris.size bn_sqr_words,(.-bn_sqr_words) 33055714Skris 33155714Skris.align 32 33255714Skris 33355714Skris.global bn_div_words 33455714Skris/* 33555714Skris * BN_ULONG bn_div_words(h,l,d) 33655714Skris * BN_ULONG h,l,d; 33755714Skris */ 33855714Skrisbn_div_words: 33955714Skris wr %o0,%y 34055714Skris udiv %o1,%o2,%o0 34155714Skris retl 34255714Skris nop 34355714Skris 34455714Skris.type bn_div_words,#function 34555714Skris.size bn_div_words,(.-bn_div_words) 34655714Skris 34755714Skris.align 32 34855714Skris 34955714Skris.global bn_add_words 35055714Skris/* 35155714Skris * BN_ULONG bn_add_words(rp,ap,bp,n) 35255714Skris * BN_ULONG *rp,*ap,*bp; 35355714Skris * int n; 35455714Skris */ 35555714Skrisbn_add_words: 35655714Skris cmp %o3,0 35755714Skris bg,a .L_bn_add_words_proceed 35855714Skris ld [%o1],%o4 35955714Skris retl 36055714Skris clr %o0 36155714Skris 36255714Skris.L_bn_add_words_proceed: 36355714Skris andcc %o3,-4,%g0 36455714Skris bz .L_bn_add_words_tail 36555714Skris clr %g1 36655714Skris ba .L_bn_add_words_warn_loop 36755714Skris addcc %g0,0,%g0 ! clear carry flag 36855714Skris 36955714Skris.L_bn_add_words_loop: 37055714Skris ld [%o1],%o4 37155714Skris.L_bn_add_words_warn_loop: 37255714Skris ld [%o2],%o5 37355714Skris ld [%o1+4],%g3 37455714Skris ld [%o2+4],%g4 37555714Skris dec 4,%o3 37655714Skris addxcc %o5,%o4,%o5 37755714Skris st %o5,[%o0] 37855714Skris 37955714Skris ld [%o1+8],%o4 38055714Skris ld [%o2+8],%o5 38155714Skris inc 16,%o1 38255714Skris addxcc %g3,%g4,%g3 38355714Skris st %g3,[%o0+4] 38455714Skris 38555714Skris ld [%o1-4],%g3 38655714Skris ld [%o2+12],%g4 38755714Skris inc 16,%o2 38855714Skris addxcc %o5,%o4,%o5 38955714Skris st %o5,[%o0+8] 39055714Skris 39155714Skris inc 16,%o0 39255714Skris addxcc %g3,%g4,%g3 39355714Skris st %g3,[%o0-4] 39455714Skris addx %g0,0,%g1 39555714Skris andcc %o3,-4,%g0 39655714Skris bnz,a .L_bn_add_words_loop 39755714Skris addcc %g1,-1,%g0 39855714Skris 39955714Skris tst %o3 40055714Skris bnz,a .L_bn_add_words_tail 40155714Skris ld [%o1],%o4 40255714Skris.L_bn_add_words_return: 40355714Skris retl 40455714Skris mov %g1,%o0 40555714Skris 40655714Skris.L_bn_add_words_tail: 40755714Skris addcc %g1,-1,%g0 40855714Skris ld [%o2],%o5 40955714Skris addxcc %o5,%o4,%o5 41055714Skris addx %g0,0,%g1 41155714Skris deccc %o3 41255714Skris bz .L_bn_add_words_return 41355714Skris st %o5,[%o0] 41455714Skris 41555714Skris ld [%o1+4],%o4 41655714Skris addcc %g1,-1,%g0 41755714Skris ld [%o2+4],%o5 41855714Skris addxcc %o5,%o4,%o5 41955714Skris addx %g0,0,%g1 42055714Skris deccc %o3 42155714Skris bz .L_bn_add_words_return 42255714Skris st %o5,[%o0+4] 42355714Skris 42455714Skris ld [%o1+8],%o4 42555714Skris addcc %g1,-1,%g0 42655714Skris ld [%o2+8],%o5 42755714Skris addxcc %o5,%o4,%o5 42855714Skris st %o5,[%o0+8] 42955714Skris retl 43055714Skris addx %g0,0,%o0 43155714Skris 43255714Skris.type bn_add_words,#function 43355714Skris.size bn_add_words,(.-bn_add_words) 43455714Skris 43555714Skris.align 32 43655714Skris 43755714Skris.global bn_sub_words 43855714Skris/* 43955714Skris * BN_ULONG bn_sub_words(rp,ap,bp,n) 44055714Skris * BN_ULONG *rp,*ap,*bp; 44155714Skris * int n; 44255714Skris */ 44355714Skrisbn_sub_words: 44455714Skris cmp %o3,0 44555714Skris bg,a .L_bn_sub_words_proceed 44655714Skris ld [%o1],%o4 44755714Skris retl 44855714Skris clr %o0 44955714Skris 45055714Skris.L_bn_sub_words_proceed: 45155714Skris andcc %o3,-4,%g0 45255714Skris bz .L_bn_sub_words_tail 45355714Skris clr %g1 45455714Skris ba .L_bn_sub_words_warm_loop 45555714Skris addcc %g0,0,%g0 ! clear carry flag 45655714Skris 45755714Skris.L_bn_sub_words_loop: 45855714Skris ld [%o1],%o4 45955714Skris.L_bn_sub_words_warm_loop: 46055714Skris ld [%o2],%o5 46155714Skris ld [%o1+4],%g3 46255714Skris ld [%o2+4],%g4 46355714Skris dec 4,%o3 46455714Skris subxcc %o4,%o5,%o5 46555714Skris st %o5,[%o0] 46655714Skris 46755714Skris ld [%o1+8],%o4 46855714Skris ld [%o2+8],%o5 46955714Skris inc 16,%o1 47055714Skris subxcc %g3,%g4,%g4 47155714Skris st %g4,[%o0+4] 47255714Skris 47355714Skris ld [%o1-4],%g3 47455714Skris ld [%o2+12],%g4 47555714Skris inc 16,%o2 47655714Skris subxcc %o4,%o5,%o5 47755714Skris st %o5,[%o0+8] 47855714Skris 47955714Skris inc 16,%o0 48055714Skris subxcc %g3,%g4,%g4 48155714Skris st %g4,[%o0-4] 48255714Skris addx %g0,0,%g1 48355714Skris andcc %o3,-4,%g0 48455714Skris bnz,a .L_bn_sub_words_loop 48555714Skris addcc %g1,-1,%g0 48655714Skris 48755714Skris tst %o3 48855714Skris nop 48955714Skris bnz,a .L_bn_sub_words_tail 49055714Skris ld [%o1],%o4 49155714Skris.L_bn_sub_words_return: 49255714Skris retl 49355714Skris mov %g1,%o0 49455714Skris 49555714Skris.L_bn_sub_words_tail: 49655714Skris addcc %g1,-1,%g0 49755714Skris ld [%o2],%o5 49855714Skris subxcc %o4,%o5,%o5 49955714Skris addx %g0,0,%g1 50055714Skris deccc %o3 50155714Skris bz .L_bn_sub_words_return 50255714Skris st %o5,[%o0] 50355714Skris nop 50455714Skris 50555714Skris ld [%o1+4],%o4 50655714Skris addcc %g1,-1,%g0 50755714Skris ld [%o2+4],%o5 50855714Skris subxcc %o4,%o5,%o5 50955714Skris addx %g0,0,%g1 51055714Skris deccc %o3 51155714Skris bz .L_bn_sub_words_return 51255714Skris st %o5,[%o0+4] 51355714Skris 51455714Skris ld [%o1+8],%o4 51555714Skris addcc %g1,-1,%g0 51655714Skris ld [%o2+8],%o5 51755714Skris subxcc %o4,%o5,%o5 51855714Skris st %o5,[%o0+8] 51955714Skris retl 52055714Skris addx %g0,0,%o0 52155714Skris 52255714Skris.type bn_sub_words,#function 52355714Skris.size bn_sub_words,(.-bn_sub_words) 52455714Skris 52555714Skris#define FRAME_SIZE -96 52655714Skris 52755714Skris/* 52855714Skris * Here is register usage map for *all* routines below. 52955714Skris */ 53055714Skris#define t_1 %o0 53155714Skris#define t_2 %o1 53255714Skris#define c_1 %o2 53355714Skris#define c_2 %o3 53455714Skris#define c_3 %o4 53555714Skris 53655714Skris#define ap(I) [%i1+4*I] 53755714Skris#define bp(I) [%i2+4*I] 53855714Skris#define rp(I) [%i0+4*I] 53955714Skris 54055714Skris#define a_0 %l0 54155714Skris#define a_1 %l1 54255714Skris#define a_2 %l2 54355714Skris#define a_3 %l3 54455714Skris#define a_4 %l4 54555714Skris#define a_5 %l5 54655714Skris#define a_6 %l6 54755714Skris#define a_7 %l7 54855714Skris 54955714Skris#define b_0 %i3 55055714Skris#define b_1 %i4 55155714Skris#define b_2 %i5 55255714Skris#define b_3 %o5 55355714Skris#define b_4 %g1 55455714Skris#define b_5 %g2 55555714Skris#define b_6 %g3 55655714Skris#define b_7 %g4 55755714Skris 55855714Skris.align 32 55955714Skris.global bn_mul_comba8 56055714Skris/* 56155714Skris * void bn_mul_comba8(r,a,b) 56255714Skris * BN_ULONG *r,*a,*b; 56355714Skris */ 56455714Skrisbn_mul_comba8: 56555714Skris save %sp,FRAME_SIZE,%sp 56655714Skris ld ap(0),a_0 56755714Skris ld bp(0),b_0 56855714Skris umul a_0,b_0,c_1 !=!mul_add_c(a[0],b[0],c1,c2,c3); 56955714Skris ld bp(1),b_1 57055714Skris rd %y,c_2 57155714Skris st c_1,rp(0) !r[0]=c1; 57255714Skris 57355714Skris umul a_0,b_1,t_1 !=!mul_add_c(a[0],b[1],c2,c3,c1); 57455714Skris ld ap(1),a_1 57555714Skris addcc c_2,t_1,c_2 57655714Skris rd %y,t_2 57755714Skris addxcc %g0,t_2,c_3 != 57855714Skris addx %g0,%g0,c_1 57955714Skris ld ap(2),a_2 58055714Skris umul a_1,b_0,t_1 !mul_add_c(a[1],b[0],c2,c3,c1); 58155714Skris addcc c_2,t_1,c_2 != 58255714Skris rd %y,t_2 58355714Skris addxcc c_3,t_2,c_3 58455714Skris st c_2,rp(1) !r[1]=c2; 58555714Skris addx c_1,%g0,c_1 != 58655714Skris 58755714Skris umul a_2,b_0,t_1 !mul_add_c(a[2],b[0],c3,c1,c2); 58855714Skris addcc c_3,t_1,c_3 58955714Skris rd %y,t_2 59055714Skris addxcc c_1,t_2,c_1 != 59155714Skris addx %g0,%g0,c_2 59255714Skris ld bp(2),b_2 59355714Skris umul a_1,b_1,t_1 !mul_add_c(a[1],b[1],c3,c1,c2); 59455714Skris addcc c_3,t_1,c_3 != 59555714Skris rd %y,t_2 59655714Skris addxcc c_1,t_2,c_1 59755714Skris ld bp(3),b_3 59855714Skris addx c_2,%g0,c_2 != 59955714Skris umul a_0,b_2,t_1 !mul_add_c(a[0],b[2],c3,c1,c2); 60055714Skris addcc c_3,t_1,c_3 60155714Skris rd %y,t_2 60255714Skris addxcc c_1,t_2,c_1 != 60355714Skris addx c_2,%g0,c_2 60455714Skris st c_3,rp(2) !r[2]=c3; 60555714Skris 60655714Skris umul a_0,b_3,t_1 !mul_add_c(a[0],b[3],c1,c2,c3); 60755714Skris addcc c_1,t_1,c_1 != 60855714Skris rd %y,t_2 60955714Skris addxcc c_2,t_2,c_2 61055714Skris addx %g0,%g0,c_3 61155714Skris umul a_1,b_2,t_1 !=!mul_add_c(a[1],b[2],c1,c2,c3); 61255714Skris addcc c_1,t_1,c_1 61355714Skris rd %y,t_2 61455714Skris addxcc c_2,t_2,c_2 61555714Skris addx c_3,%g0,c_3 != 61655714Skris ld ap(3),a_3 61755714Skris umul a_2,b_1,t_1 !mul_add_c(a[2],b[1],c1,c2,c3); 61855714Skris addcc c_1,t_1,c_1 61955714Skris rd %y,t_2 != 62055714Skris addxcc c_2,t_2,c_2 62155714Skris addx c_3,%g0,c_3 62255714Skris ld ap(4),a_4 62355714Skris umul a_3,b_0,t_1 !mul_add_c(a[3],b[0],c1,c2,c3);!= 62455714Skris addcc c_1,t_1,c_1 62555714Skris rd %y,t_2 62655714Skris addxcc c_2,t_2,c_2 62755714Skris addx c_3,%g0,c_3 != 62855714Skris st c_1,rp(3) !r[3]=c1; 62955714Skris 63055714Skris umul a_4,b_0,t_1 !mul_add_c(a[4],b[0],c2,c3,c1); 63155714Skris addcc c_2,t_1,c_2 63255714Skris rd %y,t_2 != 63355714Skris addxcc c_3,t_2,c_3 63455714Skris addx %g0,%g0,c_1 63555714Skris umul a_3,b_1,t_1 !mul_add_c(a[3],b[1],c2,c3,c1); 63655714Skris addcc c_2,t_1,c_2 != 63755714Skris rd %y,t_2 63855714Skris addxcc c_3,t_2,c_3 63955714Skris addx c_1,%g0,c_1 64055714Skris umul a_2,b_2,t_1 !=!mul_add_c(a[2],b[2],c2,c3,c1); 64155714Skris addcc c_2,t_1,c_2 64255714Skris rd %y,t_2 64355714Skris addxcc c_3,t_2,c_3 64455714Skris addx c_1,%g0,c_1 != 64555714Skris ld bp(4),b_4 64655714Skris umul a_1,b_3,t_1 !mul_add_c(a[1],b[3],c2,c3,c1); 64755714Skris addcc c_2,t_1,c_2 64855714Skris rd %y,t_2 != 64955714Skris addxcc c_3,t_2,c_3 65055714Skris addx c_1,%g0,c_1 65155714Skris ld bp(5),b_5 65255714Skris umul a_0,b_4,t_1 !=!mul_add_c(a[0],b[4],c2,c3,c1); 65355714Skris addcc c_2,t_1,c_2 65455714Skris rd %y,t_2 65555714Skris addxcc c_3,t_2,c_3 65655714Skris addx c_1,%g0,c_1 != 65755714Skris st c_2,rp(4) !r[4]=c2; 65855714Skris 65955714Skris umul a_0,b_5,t_1 !mul_add_c(a[0],b[5],c3,c1,c2); 66055714Skris addcc c_3,t_1,c_3 66155714Skris rd %y,t_2 != 66255714Skris addxcc c_1,t_2,c_1 66355714Skris addx %g0,%g0,c_2 66455714Skris umul a_1,b_4,t_1 !mul_add_c(a[1],b[4],c3,c1,c2); 66555714Skris addcc c_3,t_1,c_3 != 66655714Skris rd %y,t_2 66755714Skris addxcc c_1,t_2,c_1 66855714Skris addx c_2,%g0,c_2 66955714Skris umul a_2,b_3,t_1 !=!mul_add_c(a[2],b[3],c3,c1,c2); 67055714Skris addcc c_3,t_1,c_3 67155714Skris rd %y,t_2 67255714Skris addxcc c_1,t_2,c_1 67355714Skris addx c_2,%g0,c_2 != 67455714Skris umul a_3,b_2,t_1 !mul_add_c(a[3],b[2],c3,c1,c2); 67555714Skris addcc c_3,t_1,c_3 67655714Skris rd %y,t_2 67755714Skris addxcc c_1,t_2,c_1 != 67855714Skris addx c_2,%g0,c_2 67955714Skris ld ap(5),a_5 68055714Skris umul a_4,b_1,t_1 !mul_add_c(a[4],b[1],c3,c1,c2); 68155714Skris addcc c_3,t_1,c_3 != 68255714Skris rd %y,t_2 68355714Skris addxcc c_1,t_2,c_1 68455714Skris ld ap(6),a_6 68555714Skris addx c_2,%g0,c_2 != 68655714Skris umul a_5,b_0,t_1 !mul_add_c(a[5],b[0],c3,c1,c2); 68755714Skris addcc c_3,t_1,c_3 68855714Skris rd %y,t_2 68955714Skris addxcc c_1,t_2,c_1 != 69055714Skris addx c_2,%g0,c_2 69155714Skris st c_3,rp(5) !r[5]=c3; 69255714Skris 69355714Skris umul a_6,b_0,t_1 !mul_add_c(a[6],b[0],c1,c2,c3); 69455714Skris addcc c_1,t_1,c_1 != 69555714Skris rd %y,t_2 69655714Skris addxcc c_2,t_2,c_2 69755714Skris addx %g0,%g0,c_3 69855714Skris umul a_5,b_1,t_1 !=!mul_add_c(a[5],b[1],c1,c2,c3); 69955714Skris addcc c_1,t_1,c_1 70055714Skris rd %y,t_2 70155714Skris addxcc c_2,t_2,c_2 70255714Skris addx c_3,%g0,c_3 != 70355714Skris umul a_4,b_2,t_1 !mul_add_c(a[4],b[2],c1,c2,c3); 70455714Skris addcc c_1,t_1,c_1 70555714Skris rd %y,t_2 70655714Skris addxcc c_2,t_2,c_2 != 70755714Skris addx c_3,%g0,c_3 70855714Skris umul a_3,b_3,t_1 !mul_add_c(a[3],b[3],c1,c2,c3); 70955714Skris addcc c_1,t_1,c_1 71055714Skris rd %y,t_2 != 71155714Skris addxcc c_2,t_2,c_2 71255714Skris addx c_3,%g0,c_3 71355714Skris umul a_2,b_4,t_1 !mul_add_c(a[2],b[4],c1,c2,c3); 71455714Skris addcc c_1,t_1,c_1 != 71555714Skris rd %y,t_2 71655714Skris addxcc c_2,t_2,c_2 71755714Skris ld bp(6),b_6 71855714Skris addx c_3,%g0,c_3 != 71955714Skris umul a_1,b_5,t_1 !mul_add_c(a[1],b[5],c1,c2,c3); 72055714Skris addcc c_1,t_1,c_1 72155714Skris rd %y,t_2 72255714Skris addxcc c_2,t_2,c_2 != 72355714Skris addx c_3,%g0,c_3 72455714Skris ld bp(7),b_7 72555714Skris umul a_0,b_6,t_1 !mul_add_c(a[0],b[6],c1,c2,c3); 72655714Skris addcc c_1,t_1,c_1 != 72755714Skris rd %y,t_2 72855714Skris addxcc c_2,t_2,c_2 72955714Skris st c_1,rp(6) !r[6]=c1; 73055714Skris addx c_3,%g0,c_3 != 73155714Skris 73255714Skris umul a_0,b_7,t_1 !mul_add_c(a[0],b[7],c2,c3,c1); 73355714Skris addcc c_2,t_1,c_2 73455714Skris rd %y,t_2 73555714Skris addxcc c_3,t_2,c_3 != 73655714Skris addx %g0,%g0,c_1 73755714Skris umul a_1,b_6,t_1 !mul_add_c(a[1],b[6],c2,c3,c1); 73855714Skris addcc c_2,t_1,c_2 73955714Skris rd %y,t_2 != 74055714Skris addxcc c_3,t_2,c_3 74155714Skris addx c_1,%g0,c_1 74255714Skris umul a_2,b_5,t_1 !mul_add_c(a[2],b[5],c2,c3,c1); 74355714Skris addcc c_2,t_1,c_2 != 74455714Skris rd %y,t_2 74555714Skris addxcc c_3,t_2,c_3 74655714Skris addx c_1,%g0,c_1 74755714Skris umul a_3,b_4,t_1 !=!mul_add_c(a[3],b[4],c2,c3,c1); 74855714Skris addcc c_2,t_1,c_2 74955714Skris rd %y,t_2 75055714Skris addxcc c_3,t_2,c_3 75155714Skris addx c_1,%g0,c_1 != 75255714Skris umul a_4,b_3,t_1 !mul_add_c(a[4],b[3],c2,c3,c1); 75355714Skris addcc c_2,t_1,c_2 75455714Skris rd %y,t_2 75555714Skris addxcc c_3,t_2,c_3 != 75655714Skris addx c_1,%g0,c_1 75755714Skris umul a_5,b_2,t_1 !mul_add_c(a[5],b[2],c2,c3,c1); 75855714Skris addcc c_2,t_1,c_2 75955714Skris rd %y,t_2 != 76055714Skris addxcc c_3,t_2,c_3 76155714Skris addx c_1,%g0,c_1 76255714Skris ld ap(7),a_7 76355714Skris umul a_6,b_1,t_1 !=!mul_add_c(a[6],b[1],c2,c3,c1); 76455714Skris addcc c_2,t_1,c_2 76555714Skris rd %y,t_2 76655714Skris addxcc c_3,t_2,c_3 76755714Skris addx c_1,%g0,c_1 != 76855714Skris umul a_7,b_0,t_1 !mul_add_c(a[7],b[0],c2,c3,c1); 76955714Skris addcc c_2,t_1,c_2 77055714Skris rd %y,t_2 77155714Skris addxcc c_3,t_2,c_3 != 77255714Skris addx c_1,%g0,c_1 77355714Skris st c_2,rp(7) !r[7]=c2; 77455714Skris 77555714Skris umul a_7,b_1,t_1 !mul_add_c(a[7],b[1],c3,c1,c2); 77655714Skris addcc c_3,t_1,c_3 != 77755714Skris rd %y,t_2 77855714Skris addxcc c_1,t_2,c_1 77955714Skris addx %g0,%g0,c_2 78055714Skris umul a_6,b_2,t_1 !=!mul_add_c(a[6],b[2],c3,c1,c2); 78155714Skris addcc c_3,t_1,c_3 78255714Skris rd %y,t_2 78355714Skris addxcc c_1,t_2,c_1 78455714Skris addx c_2,%g0,c_2 != 78555714Skris umul a_5,b_3,t_1 !mul_add_c(a[5],b[3],c3,c1,c2); 78655714Skris addcc c_3,t_1,c_3 78755714Skris rd %y,t_2 78855714Skris addxcc c_1,t_2,c_1 != 78955714Skris addx c_2,%g0,c_2 79055714Skris umul a_4,b_4,t_1 !mul_add_c(a[4],b[4],c3,c1,c2); 79155714Skris addcc c_3,t_1,c_3 79255714Skris rd %y,t_2 != 79355714Skris addxcc c_1,t_2,c_1 79455714Skris addx c_2,%g0,c_2 79555714Skris umul a_3,b_5,t_1 !mul_add_c(a[3],b[5],c3,c1,c2); 79655714Skris addcc c_3,t_1,c_3 != 79755714Skris rd %y,t_2 79855714Skris addxcc c_1,t_2,c_1 79955714Skris addx c_2,%g0,c_2 80055714Skris umul a_2,b_6,t_1 !=!mul_add_c(a[2],b[6],c3,c1,c2); 80155714Skris addcc c_3,t_1,c_3 80255714Skris rd %y,t_2 80355714Skris addxcc c_1,t_2,c_1 80455714Skris addx c_2,%g0,c_2 != 80555714Skris umul a_1,b_7,t_1 !mul_add_c(a[1],b[7],c3,c1,c2); 80655714Skris addcc c_3,t_1,c_3 80755714Skris rd %y,t_2 80855714Skris addxcc c_1,t_2,c_1 ! 80955714Skris addx c_2,%g0,c_2 81055714Skris st c_3,rp(8) !r[8]=c3; 81155714Skris 81255714Skris umul a_2,b_7,t_1 !mul_add_c(a[2],b[7],c1,c2,c3); 81355714Skris addcc c_1,t_1,c_1 != 81455714Skris rd %y,t_2 81555714Skris addxcc c_2,t_2,c_2 81655714Skris addx %g0,%g0,c_3 81755714Skris umul a_3,b_6,t_1 !=!mul_add_c(a[3],b[6],c1,c2,c3); 81855714Skris addcc c_1,t_1,c_1 81955714Skris rd %y,t_2 82055714Skris addxcc c_2,t_2,c_2 82155714Skris addx c_3,%g0,c_3 != 82255714Skris umul a_4,b_5,t_1 !mul_add_c(a[4],b[5],c1,c2,c3); 82355714Skris addcc c_1,t_1,c_1 82455714Skris rd %y,t_2 82555714Skris addxcc c_2,t_2,c_2 != 82655714Skris addx c_3,%g0,c_3 82755714Skris umul a_5,b_4,t_1 !mul_add_c(a[5],b[4],c1,c2,c3); 82855714Skris addcc c_1,t_1,c_1 82955714Skris rd %y,t_2 != 83055714Skris addxcc c_2,t_2,c_2 83155714Skris addx c_3,%g0,c_3 83255714Skris umul a_6,b_3,t_1 !mul_add_c(a[6],b[3],c1,c2,c3); 83355714Skris addcc c_1,t_1,c_1 != 83455714Skris rd %y,t_2 83555714Skris addxcc c_2,t_2,c_2 83655714Skris addx c_3,%g0,c_3 83755714Skris umul a_7,b_2,t_1 !=!mul_add_c(a[7],b[2],c1,c2,c3); 83855714Skris addcc c_1,t_1,c_1 83955714Skris rd %y,t_2 84055714Skris addxcc c_2,t_2,c_2 84155714Skris addx c_3,%g0,c_3 != 84255714Skris st c_1,rp(9) !r[9]=c1; 84355714Skris 84455714Skris umul a_7,b_3,t_1 !mul_add_c(a[7],b[3],c2,c3,c1); 84555714Skris addcc c_2,t_1,c_2 84655714Skris rd %y,t_2 != 84755714Skris addxcc c_3,t_2,c_3 84855714Skris addx %g0,%g0,c_1 84955714Skris umul a_6,b_4,t_1 !mul_add_c(a[6],b[4],c2,c3,c1); 85055714Skris addcc c_2,t_1,c_2 != 85155714Skris rd %y,t_2 85255714Skris addxcc c_3,t_2,c_3 85355714Skris addx c_1,%g0,c_1 85455714Skris umul a_5,b_5,t_1 !=!mul_add_c(a[5],b[5],c2,c3,c1); 85555714Skris addcc c_2,t_1,c_2 85655714Skris rd %y,t_2 85755714Skris addxcc c_3,t_2,c_3 85855714Skris addx c_1,%g0,c_1 != 85955714Skris umul a_4,b_6,t_1 !mul_add_c(a[4],b[6],c2,c3,c1); 86055714Skris addcc c_2,t_1,c_2 86155714Skris rd %y,t_2 86255714Skris addxcc c_3,t_2,c_3 != 86355714Skris addx c_1,%g0,c_1 86455714Skris umul a_3,b_7,t_1 !mul_add_c(a[3],b[7],c2,c3,c1); 86555714Skris addcc c_2,t_1,c_2 86655714Skris rd %y,t_2 != 86755714Skris addxcc c_3,t_2,c_3 86855714Skris addx c_1,%g0,c_1 86955714Skris st c_2,rp(10) !r[10]=c2; 87055714Skris 87155714Skris umul a_4,b_7,t_1 !=!mul_add_c(a[4],b[7],c3,c1,c2); 87255714Skris addcc c_3,t_1,c_3 87355714Skris rd %y,t_2 87455714Skris addxcc c_1,t_2,c_1 87555714Skris addx %g0,%g0,c_2 != 87655714Skris umul a_5,b_6,t_1 !mul_add_c(a[5],b[6],c3,c1,c2); 87755714Skris addcc c_3,t_1,c_3 87855714Skris rd %y,t_2 87955714Skris addxcc c_1,t_2,c_1 != 88055714Skris addx c_2,%g0,c_2 88155714Skris umul a_6,b_5,t_1 !mul_add_c(a[6],b[5],c3,c1,c2); 88255714Skris addcc c_3,t_1,c_3 88355714Skris rd %y,t_2 != 88455714Skris addxcc c_1,t_2,c_1 88555714Skris addx c_2,%g0,c_2 88655714Skris umul a_7,b_4,t_1 !mul_add_c(a[7],b[4],c3,c1,c2); 88755714Skris addcc c_3,t_1,c_3 != 88855714Skris rd %y,t_2 88955714Skris addxcc c_1,t_2,c_1 89055714Skris st c_3,rp(11) !r[11]=c3; 89155714Skris addx c_2,%g0,c_2 != 89255714Skris 89355714Skris umul a_7,b_5,t_1 !mul_add_c(a[7],b[5],c1,c2,c3); 89455714Skris addcc c_1,t_1,c_1 89555714Skris rd %y,t_2 89655714Skris addxcc c_2,t_2,c_2 != 89755714Skris addx %g0,%g0,c_3 89855714Skris umul a_6,b_6,t_1 !mul_add_c(a[6],b[6],c1,c2,c3); 89955714Skris addcc c_1,t_1,c_1 90055714Skris rd %y,t_2 != 90155714Skris addxcc c_2,t_2,c_2 90255714Skris addx c_3,%g0,c_3 90355714Skris umul a_5,b_7,t_1 !mul_add_c(a[5],b[7],c1,c2,c3); 90455714Skris addcc c_1,t_1,c_1 != 90555714Skris rd %y,t_2 90655714Skris addxcc c_2,t_2,c_2 90755714Skris st c_1,rp(12) !r[12]=c1; 90855714Skris addx c_3,%g0,c_3 != 90955714Skris 91055714Skris umul a_6,b_7,t_1 !mul_add_c(a[6],b[7],c2,c3,c1); 91155714Skris addcc c_2,t_1,c_2 91255714Skris rd %y,t_2 91355714Skris addxcc c_3,t_2,c_3 != 91455714Skris addx %g0,%g0,c_1 91555714Skris umul a_7,b_6,t_1 !mul_add_c(a[7],b[6],c2,c3,c1); 91655714Skris addcc c_2,t_1,c_2 91755714Skris rd %y,t_2 != 91855714Skris addxcc c_3,t_2,c_3 91955714Skris addx c_1,%g0,c_1 92055714Skris st c_2,rp(13) !r[13]=c2; 92155714Skris 92255714Skris umul a_7,b_7,t_1 !=!mul_add_c(a[7],b[7],c3,c1,c2); 92355714Skris addcc c_3,t_1,c_3 92455714Skris rd %y,t_2 92555714Skris addxcc c_1,t_2,c_1 92655714Skris nop != 92755714Skris st c_3,rp(14) !r[14]=c3; 92855714Skris st c_1,rp(15) !r[15]=c1; 92955714Skris 93055714Skris ret 93155714Skris restore %g0,%g0,%o0 93255714Skris 93355714Skris.type bn_mul_comba8,#function 93455714Skris.size bn_mul_comba8,(.-bn_mul_comba8) 93555714Skris 93655714Skris.align 32 93755714Skris 93855714Skris.global bn_mul_comba4 93955714Skris/* 94055714Skris * void bn_mul_comba4(r,a,b) 94155714Skris * BN_ULONG *r,*a,*b; 94255714Skris */ 94355714Skrisbn_mul_comba4: 94455714Skris save %sp,FRAME_SIZE,%sp 94555714Skris ld ap(0),a_0 94655714Skris ld bp(0),b_0 94755714Skris umul a_0,b_0,c_1 !=!mul_add_c(a[0],b[0],c1,c2,c3); 94855714Skris ld bp(1),b_1 94955714Skris rd %y,c_2 95055714Skris st c_1,rp(0) !r[0]=c1; 95155714Skris 95255714Skris umul a_0,b_1,t_1 !=!mul_add_c(a[0],b[1],c2,c3,c1); 95355714Skris ld ap(1),a_1 95455714Skris addcc c_2,t_1,c_2 95555714Skris rd %y,t_2 != 95655714Skris addxcc %g0,t_2,c_3 95755714Skris addx %g0,%g0,c_1 95855714Skris ld ap(2),a_2 95955714Skris umul a_1,b_0,t_1 !=!mul_add_c(a[1],b[0],c2,c3,c1); 96055714Skris addcc c_2,t_1,c_2 96155714Skris rd %y,t_2 96255714Skris addxcc c_3,t_2,c_3 96355714Skris addx c_1,%g0,c_1 != 96455714Skris st c_2,rp(1) !r[1]=c2; 96555714Skris 96655714Skris umul a_2,b_0,t_1 !mul_add_c(a[2],b[0],c3,c1,c2); 96755714Skris addcc c_3,t_1,c_3 96855714Skris rd %y,t_2 != 96955714Skris addxcc c_1,t_2,c_1 97055714Skris addx %g0,%g0,c_2 97155714Skris ld bp(2),b_2 97255714Skris umul a_1,b_1,t_1 !=!mul_add_c(a[1],b[1],c3,c1,c2); 97355714Skris addcc c_3,t_1,c_3 97455714Skris rd %y,t_2 97555714Skris addxcc c_1,t_2,c_1 97655714Skris addx c_2,%g0,c_2 != 97755714Skris ld bp(3),b_3 97855714Skris umul a_0,b_2,t_1 !mul_add_c(a[0],b[2],c3,c1,c2); 97955714Skris addcc c_3,t_1,c_3 98055714Skris rd %y,t_2 != 98155714Skris addxcc c_1,t_2,c_1 98255714Skris addx c_2,%g0,c_2 98355714Skris st c_3,rp(2) !r[2]=c3; 98455714Skris 98555714Skris umul a_0,b_3,t_1 !=!mul_add_c(a[0],b[3],c1,c2,c3); 98655714Skris addcc c_1,t_1,c_1 98755714Skris rd %y,t_2 98855714Skris addxcc c_2,t_2,c_2 98955714Skris addx %g0,%g0,c_3 != 99055714Skris umul a_1,b_2,t_1 !mul_add_c(a[1],b[2],c1,c2,c3); 99155714Skris addcc c_1,t_1,c_1 99255714Skris rd %y,t_2 99355714Skris addxcc c_2,t_2,c_2 != 99455714Skris addx c_3,%g0,c_3 99555714Skris ld ap(3),a_3 99655714Skris umul a_2,b_1,t_1 !mul_add_c(a[2],b[1],c1,c2,c3); 99755714Skris addcc c_1,t_1,c_1 != 99855714Skris rd %y,t_2 99955714Skris addxcc c_2,t_2,c_2 100055714Skris addx c_3,%g0,c_3 100155714Skris umul a_3,b_0,t_1 !=!mul_add_c(a[3],b[0],c1,c2,c3); 100255714Skris addcc c_1,t_1,c_1 100355714Skris rd %y,t_2 100455714Skris addxcc c_2,t_2,c_2 100555714Skris addx c_3,%g0,c_3 != 100655714Skris st c_1,rp(3) !r[3]=c1; 100755714Skris 100855714Skris umul a_3,b_1,t_1 !mul_add_c(a[3],b[1],c2,c3,c1); 100955714Skris addcc c_2,t_1,c_2 101055714Skris rd %y,t_2 != 101155714Skris addxcc c_3,t_2,c_3 101255714Skris addx %g0,%g0,c_1 101355714Skris umul a_2,b_2,t_1 !mul_add_c(a[2],b[2],c2,c3,c1); 101455714Skris addcc c_2,t_1,c_2 != 101555714Skris rd %y,t_2 101655714Skris addxcc c_3,t_2,c_3 101755714Skris addx c_1,%g0,c_1 101855714Skris umul a_1,b_3,t_1 !=!mul_add_c(a[1],b[3],c2,c3,c1); 101955714Skris addcc c_2,t_1,c_2 102055714Skris rd %y,t_2 102155714Skris addxcc c_3,t_2,c_3 102255714Skris addx c_1,%g0,c_1 != 102355714Skris st c_2,rp(4) !r[4]=c2; 102455714Skris 102555714Skris umul a_2,b_3,t_1 !mul_add_c(a[2],b[3],c3,c1,c2); 102655714Skris addcc c_3,t_1,c_3 102755714Skris rd %y,t_2 != 102855714Skris addxcc c_1,t_2,c_1 102955714Skris addx %g0,%g0,c_2 103055714Skris umul a_3,b_2,t_1 !mul_add_c(a[3],b[2],c3,c1,c2); 103155714Skris addcc c_3,t_1,c_3 != 103255714Skris rd %y,t_2 103355714Skris addxcc c_1,t_2,c_1 103455714Skris st c_3,rp(5) !r[5]=c3; 103555714Skris addx c_2,%g0,c_2 != 103655714Skris 103755714Skris umul a_3,b_3,t_1 !mul_add_c(a[3],b[3],c1,c2,c3); 103855714Skris addcc c_1,t_1,c_1 103955714Skris rd %y,t_2 104055714Skris addxcc c_2,t_2,c_2 != 104155714Skris st c_1,rp(6) !r[6]=c1; 104255714Skris st c_2,rp(7) !r[7]=c2; 104355714Skris 104455714Skris ret 104555714Skris restore %g0,%g0,%o0 104655714Skris 104755714Skris.type bn_mul_comba4,#function 104855714Skris.size bn_mul_comba4,(.-bn_mul_comba4) 104955714Skris 105055714Skris.align 32 105155714Skris 105255714Skris.global bn_sqr_comba8 105355714Skrisbn_sqr_comba8: 105455714Skris save %sp,FRAME_SIZE,%sp 105555714Skris ld ap(0),a_0 105655714Skris ld ap(1),a_1 105755714Skris umul a_0,a_0,c_1 !=!sqr_add_c(a,0,c1,c2,c3); 105855714Skris rd %y,c_2 105955714Skris st c_1,rp(0) !r[0]=c1; 106055714Skris 106155714Skris ld ap(2),a_2 106255714Skris umul a_0,a_1,t_1 !=!sqr_add_c2(a,1,0,c2,c3,c1); 106355714Skris addcc c_2,t_1,c_2 106455714Skris rd %y,t_2 106555714Skris addxcc %g0,t_2,c_3 106655714Skris addx %g0,%g0,c_1 != 106755714Skris addcc c_2,t_1,c_2 106855714Skris addxcc c_3,t_2,c_3 106955714Skris st c_2,rp(1) !r[1]=c2; 107055714Skris addx c_1,%g0,c_1 != 107155714Skris 107255714Skris umul a_2,a_0,t_1 !sqr_add_c2(a,2,0,c3,c1,c2); 107355714Skris addcc c_3,t_1,c_3 107455714Skris rd %y,t_2 107555714Skris addxcc c_1,t_2,c_1 != 107655714Skris addx %g0,%g0,c_2 107755714Skris addcc c_3,t_1,c_3 107855714Skris addxcc c_1,t_2,c_1 107955714Skris addx c_2,%g0,c_2 != 108055714Skris ld ap(3),a_3 108155714Skris umul a_1,a_1,t_1 !sqr_add_c(a,1,c3,c1,c2); 108255714Skris addcc c_3,t_1,c_3 108355714Skris rd %y,t_2 != 108455714Skris addxcc c_1,t_2,c_1 108555714Skris addx c_2,%g0,c_2 108655714Skris st c_3,rp(2) !r[2]=c3; 108755714Skris 108855714Skris umul a_0,a_3,t_1 !=!sqr_add_c2(a,3,0,c1,c2,c3); 108955714Skris addcc c_1,t_1,c_1 109055714Skris rd %y,t_2 109155714Skris addxcc c_2,t_2,c_2 109255714Skris addx %g0,%g0,c_3 != 109355714Skris addcc c_1,t_1,c_1 109455714Skris addxcc c_2,t_2,c_2 109555714Skris ld ap(4),a_4 109655714Skris addx c_3,%g0,c_3 != 109755714Skris umul a_1,a_2,t_1 !sqr_add_c2(a,2,1,c1,c2,c3); 109855714Skris addcc c_1,t_1,c_1 109955714Skris rd %y,t_2 110055714Skris addxcc c_2,t_2,c_2 != 110155714Skris addx c_3,%g0,c_3 110255714Skris addcc c_1,t_1,c_1 110355714Skris addxcc c_2,t_2,c_2 110455714Skris addx c_3,%g0,c_3 != 110555714Skris st c_1,rp(3) !r[3]=c1; 110655714Skris 110755714Skris umul a_4,a_0,t_1 !sqr_add_c2(a,4,0,c2,c3,c1); 110855714Skris addcc c_2,t_1,c_2 110955714Skris rd %y,t_2 != 111055714Skris addxcc c_3,t_2,c_3 111155714Skris addx %g0,%g0,c_1 111255714Skris addcc c_2,t_1,c_2 111355714Skris addxcc c_3,t_2,c_3 != 111455714Skris addx c_1,%g0,c_1 111555714Skris umul a_3,a_1,t_1 !sqr_add_c2(a,3,1,c2,c3,c1); 111655714Skris addcc c_2,t_1,c_2 111755714Skris rd %y,t_2 != 111855714Skris addxcc c_3,t_2,c_3 111955714Skris addx c_1,%g0,c_1 112055714Skris addcc c_2,t_1,c_2 112155714Skris addxcc c_3,t_2,c_3 != 112255714Skris addx c_1,%g0,c_1 112355714Skris ld ap(5),a_5 112455714Skris umul a_2,a_2,t_1 !sqr_add_c(a,2,c2,c3,c1); 112555714Skris addcc c_2,t_1,c_2 != 112655714Skris rd %y,t_2 112755714Skris addxcc c_3,t_2,c_3 112855714Skris st c_2,rp(4) !r[4]=c2; 112955714Skris addx c_1,%g0,c_1 != 113055714Skris 113155714Skris umul a_0,a_5,t_1 !sqr_add_c2(a,5,0,c3,c1,c2); 113255714Skris addcc c_3,t_1,c_3 113355714Skris rd %y,t_2 113455714Skris addxcc c_1,t_2,c_1 != 113555714Skris addx %g0,%g0,c_2 113655714Skris addcc c_3,t_1,c_3 113755714Skris addxcc c_1,t_2,c_1 113855714Skris addx c_2,%g0,c_2 != 113955714Skris umul a_1,a_4,t_1 !sqr_add_c2(a,4,1,c3,c1,c2); 114055714Skris addcc c_3,t_1,c_3 114155714Skris rd %y,t_2 114255714Skris addxcc c_1,t_2,c_1 != 114355714Skris addx c_2,%g0,c_2 114455714Skris addcc c_3,t_1,c_3 114555714Skris addxcc c_1,t_2,c_1 114655714Skris addx c_2,%g0,c_2 != 114755714Skris ld ap(6),a_6 114855714Skris umul a_2,a_3,t_1 !sqr_add_c2(a,3,2,c3,c1,c2); 114955714Skris addcc c_3,t_1,c_3 115055714Skris rd %y,t_2 != 115155714Skris addxcc c_1,t_2,c_1 115255714Skris addx c_2,%g0,c_2 115355714Skris addcc c_3,t_1,c_3 115455714Skris addxcc c_1,t_2,c_1 != 115555714Skris addx c_2,%g0,c_2 115655714Skris st c_3,rp(5) !r[5]=c3; 115755714Skris 115855714Skris umul a_6,a_0,t_1 !sqr_add_c2(a,6,0,c1,c2,c3); 115955714Skris addcc c_1,t_1,c_1 != 116055714Skris rd %y,t_2 116155714Skris addxcc c_2,t_2,c_2 116255714Skris addx %g0,%g0,c_3 116355714Skris addcc c_1,t_1,c_1 != 116455714Skris addxcc c_2,t_2,c_2 116555714Skris addx c_3,%g0,c_3 116655714Skris umul a_5,a_1,t_1 !sqr_add_c2(a,5,1,c1,c2,c3); 116755714Skris addcc c_1,t_1,c_1 != 116855714Skris rd %y,t_2 116955714Skris addxcc c_2,t_2,c_2 117055714Skris addx c_3,%g0,c_3 117155714Skris addcc c_1,t_1,c_1 != 117255714Skris addxcc c_2,t_2,c_2 117355714Skris addx c_3,%g0,c_3 117455714Skris umul a_4,a_2,t_1 !sqr_add_c2(a,4,2,c1,c2,c3); 117555714Skris addcc c_1,t_1,c_1 != 117655714Skris rd %y,t_2 117755714Skris addxcc c_2,t_2,c_2 117855714Skris addx c_3,%g0,c_3 117955714Skris addcc c_1,t_1,c_1 != 118055714Skris addxcc c_2,t_2,c_2 118155714Skris addx c_3,%g0,c_3 118255714Skris ld ap(7),a_7 118355714Skris umul a_3,a_3,t_1 !=!sqr_add_c(a,3,c1,c2,c3); 118455714Skris addcc c_1,t_1,c_1 118555714Skris rd %y,t_2 118655714Skris addxcc c_2,t_2,c_2 118755714Skris addx c_3,%g0,c_3 != 118855714Skris st c_1,rp(6) !r[6]=c1; 118955714Skris 119055714Skris umul a_0,a_7,t_1 !sqr_add_c2(a,7,0,c2,c3,c1); 119155714Skris addcc c_2,t_1,c_2 119255714Skris rd %y,t_2 != 119355714Skris addxcc c_3,t_2,c_3 119455714Skris addx %g0,%g0,c_1 119555714Skris addcc c_2,t_1,c_2 119655714Skris addxcc c_3,t_2,c_3 != 119755714Skris addx c_1,%g0,c_1 119855714Skris umul a_1,a_6,t_1 !sqr_add_c2(a,6,1,c2,c3,c1); 119955714Skris addcc c_2,t_1,c_2 120055714Skris rd %y,t_2 != 120155714Skris addxcc c_3,t_2,c_3 120255714Skris addx c_1,%g0,c_1 120355714Skris addcc c_2,t_1,c_2 120455714Skris addxcc c_3,t_2,c_3 != 120555714Skris addx c_1,%g0,c_1 120655714Skris umul a_2,a_5,t_1 !sqr_add_c2(a,5,2,c2,c3,c1); 120755714Skris addcc c_2,t_1,c_2 120855714Skris rd %y,t_2 != 120955714Skris addxcc c_3,t_2,c_3 121055714Skris addx c_1,%g0,c_1 121155714Skris addcc c_2,t_1,c_2 121255714Skris addxcc c_3,t_2,c_3 != 121355714Skris addx c_1,%g0,c_1 121455714Skris umul a_3,a_4,t_1 !sqr_add_c2(a,4,3,c2,c3,c1); 121555714Skris addcc c_2,t_1,c_2 121655714Skris rd %y,t_2 != 121755714Skris addxcc c_3,t_2,c_3 121855714Skris addx c_1,%g0,c_1 121955714Skris addcc c_2,t_1,c_2 122055714Skris addxcc c_3,t_2,c_3 != 122155714Skris addx c_1,%g0,c_1 122255714Skris st c_2,rp(7) !r[7]=c2; 122355714Skris 122455714Skris umul a_7,a_1,t_1 !sqr_add_c2(a,7,1,c3,c1,c2); 122555714Skris addcc c_3,t_1,c_3 != 122655714Skris rd %y,t_2 122755714Skris addxcc c_1,t_2,c_1 122855714Skris addx %g0,%g0,c_2 122955714Skris addcc c_3,t_1,c_3 != 123055714Skris addxcc c_1,t_2,c_1 123155714Skris addx c_2,%g0,c_2 123255714Skris umul a_6,a_2,t_1 !sqr_add_c2(a,6,2,c3,c1,c2); 123355714Skris addcc c_3,t_1,c_3 != 123455714Skris rd %y,t_2 123555714Skris addxcc c_1,t_2,c_1 123655714Skris addx c_2,%g0,c_2 123755714Skris addcc c_3,t_1,c_3 != 123855714Skris addxcc c_1,t_2,c_1 123955714Skris addx c_2,%g0,c_2 124055714Skris umul a_5,a_3,t_1 !sqr_add_c2(a,5,3,c3,c1,c2); 124155714Skris addcc c_3,t_1,c_3 != 124255714Skris rd %y,t_2 124355714Skris addxcc c_1,t_2,c_1 124455714Skris addx c_2,%g0,c_2 124555714Skris addcc c_3,t_1,c_3 != 124655714Skris addxcc c_1,t_2,c_1 124755714Skris addx c_2,%g0,c_2 124855714Skris umul a_4,a_4,t_1 !sqr_add_c(a,4,c3,c1,c2); 124955714Skris addcc c_3,t_1,c_3 != 125055714Skris rd %y,t_2 125155714Skris addxcc c_1,t_2,c_1 125255714Skris st c_3,rp(8) !r[8]=c3; 125355714Skris addx c_2,%g0,c_2 != 125455714Skris 125555714Skris umul a_2,a_7,t_1 !sqr_add_c2(a,7,2,c1,c2,c3); 125655714Skris addcc c_1,t_1,c_1 125755714Skris rd %y,t_2 125855714Skris addxcc c_2,t_2,c_2 != 125955714Skris addx %g0,%g0,c_3 126055714Skris addcc c_1,t_1,c_1 126155714Skris addxcc c_2,t_2,c_2 126255714Skris addx c_3,%g0,c_3 != 126355714Skris umul a_3,a_6,t_1 !sqr_add_c2(a,6,3,c1,c2,c3); 126455714Skris addcc c_1,t_1,c_1 126555714Skris rd %y,t_2 126655714Skris addxcc c_2,t_2,c_2 != 126755714Skris addx c_3,%g0,c_3 126855714Skris addcc c_1,t_1,c_1 126955714Skris addxcc c_2,t_2,c_2 127055714Skris addx c_3,%g0,c_3 != 127155714Skris umul a_4,a_5,t_1 !sqr_add_c2(a,5,4,c1,c2,c3); 127255714Skris addcc c_1,t_1,c_1 127355714Skris rd %y,t_2 127455714Skris addxcc c_2,t_2,c_2 != 127555714Skris addx c_3,%g0,c_3 127655714Skris addcc c_1,t_1,c_1 127755714Skris addxcc c_2,t_2,c_2 127855714Skris addx c_3,%g0,c_3 != 127955714Skris st c_1,rp(9) !r[9]=c1; 128055714Skris 128155714Skris umul a_7,a_3,t_1 !sqr_add_c2(a,7,3,c2,c3,c1); 128255714Skris addcc c_2,t_1,c_2 128355714Skris rd %y,t_2 != 128455714Skris addxcc c_3,t_2,c_3 128555714Skris addx %g0,%g0,c_1 128655714Skris addcc c_2,t_1,c_2 128755714Skris addxcc c_3,t_2,c_3 != 128855714Skris addx c_1,%g0,c_1 128955714Skris umul a_6,a_4,t_1 !sqr_add_c2(a,6,4,c2,c3,c1); 129055714Skris addcc c_2,t_1,c_2 129155714Skris rd %y,t_2 != 129255714Skris addxcc c_3,t_2,c_3 129355714Skris addx c_1,%g0,c_1 129455714Skris addcc c_2,t_1,c_2 129555714Skris addxcc c_3,t_2,c_3 != 129655714Skris addx c_1,%g0,c_1 129755714Skris umul a_5,a_5,t_1 !sqr_add_c(a,5,c2,c3,c1); 129855714Skris addcc c_2,t_1,c_2 129955714Skris rd %y,t_2 != 130055714Skris addxcc c_3,t_2,c_3 130155714Skris addx c_1,%g0,c_1 130255714Skris st c_2,rp(10) !r[10]=c2; 130355714Skris 130455714Skris umul a_4,a_7,t_1 !=!sqr_add_c2(a,7,4,c3,c1,c2); 130555714Skris addcc c_3,t_1,c_3 130655714Skris rd %y,t_2 130755714Skris addxcc c_1,t_2,c_1 130855714Skris addx %g0,%g0,c_2 != 130955714Skris addcc c_3,t_1,c_3 131055714Skris addxcc c_1,t_2,c_1 131155714Skris addx c_2,%g0,c_2 131255714Skris umul a_5,a_6,t_1 !=!sqr_add_c2(a,6,5,c3,c1,c2); 131355714Skris addcc c_3,t_1,c_3 131455714Skris rd %y,t_2 131555714Skris addxcc c_1,t_2,c_1 131655714Skris addx c_2,%g0,c_2 != 131755714Skris addcc c_3,t_1,c_3 131855714Skris addxcc c_1,t_2,c_1 131955714Skris st c_3,rp(11) !r[11]=c3; 132055714Skris addx c_2,%g0,c_2 != 132155714Skris 132255714Skris umul a_7,a_5,t_1 !sqr_add_c2(a,7,5,c1,c2,c3); 132355714Skris addcc c_1,t_1,c_1 132455714Skris rd %y,t_2 132555714Skris addxcc c_2,t_2,c_2 != 132655714Skris addx %g0,%g0,c_3 132755714Skris addcc c_1,t_1,c_1 132855714Skris addxcc c_2,t_2,c_2 132955714Skris addx c_3,%g0,c_3 != 133055714Skris umul a_6,a_6,t_1 !sqr_add_c(a,6,c1,c2,c3); 133155714Skris addcc c_1,t_1,c_1 133255714Skris rd %y,t_2 133355714Skris addxcc c_2,t_2,c_2 != 133455714Skris addx c_3,%g0,c_3 133555714Skris st c_1,rp(12) !r[12]=c1; 133655714Skris 133755714Skris umul a_6,a_7,t_1 !sqr_add_c2(a,7,6,c2,c3,c1); 133855714Skris addcc c_2,t_1,c_2 != 133955714Skris rd %y,t_2 134055714Skris addxcc c_3,t_2,c_3 134155714Skris addx %g0,%g0,c_1 134255714Skris addcc c_2,t_1,c_2 != 134355714Skris addxcc c_3,t_2,c_3 134455714Skris st c_2,rp(13) !r[13]=c2; 134555714Skris addx c_1,%g0,c_1 != 134655714Skris 134755714Skris umul a_7,a_7,t_1 !sqr_add_c(a,7,c3,c1,c2); 134855714Skris addcc c_3,t_1,c_3 134955714Skris rd %y,t_2 135055714Skris addxcc c_1,t_2,c_1 != 135155714Skris st c_3,rp(14) !r[14]=c3; 135255714Skris st c_1,rp(15) !r[15]=c1; 135355714Skris 135455714Skris ret 135555714Skris restore %g0,%g0,%o0 135655714Skris 135755714Skris.type bn_sqr_comba8,#function 135855714Skris.size bn_sqr_comba8,(.-bn_sqr_comba8) 135955714Skris 136055714Skris.align 32 136155714Skris 136255714Skris.global bn_sqr_comba4 136355714Skris/* 136455714Skris * void bn_sqr_comba4(r,a) 136555714Skris * BN_ULONG *r,*a; 136655714Skris */ 136755714Skrisbn_sqr_comba4: 136855714Skris save %sp,FRAME_SIZE,%sp 136955714Skris ld ap(0),a_0 137055714Skris umul a_0,a_0,c_1 !sqr_add_c(a,0,c1,c2,c3); 137155714Skris ld ap(1),a_1 != 137255714Skris rd %y,c_2 137355714Skris st c_1,rp(0) !r[0]=c1; 137455714Skris 137555714Skris ld ap(2),a_2 137655714Skris umul a_0,a_1,t_1 !=!sqr_add_c2(a,1,0,c2,c3,c1); 137755714Skris addcc c_2,t_1,c_2 137855714Skris rd %y,t_2 137955714Skris addxcc %g0,t_2,c_3 138055714Skris addx %g0,%g0,c_1 != 138155714Skris addcc c_2,t_1,c_2 138255714Skris addxcc c_3,t_2,c_3 138355714Skris addx c_1,%g0,c_1 != 138455714Skris st c_2,rp(1) !r[1]=c2; 138555714Skris 138655714Skris umul a_2,a_0,t_1 !sqr_add_c2(a,2,0,c3,c1,c2); 138755714Skris addcc c_3,t_1,c_3 138855714Skris rd %y,t_2 != 138955714Skris addxcc c_1,t_2,c_1 139055714Skris addx %g0,%g0,c_2 139155714Skris addcc c_3,t_1,c_3 139255714Skris addxcc c_1,t_2,c_1 != 139355714Skris addx c_2,%g0,c_2 139455714Skris ld ap(3),a_3 139555714Skris umul a_1,a_1,t_1 !sqr_add_c(a,1,c3,c1,c2); 139655714Skris addcc c_3,t_1,c_3 != 139755714Skris rd %y,t_2 139855714Skris addxcc c_1,t_2,c_1 139955714Skris st c_3,rp(2) !r[2]=c3; 140055714Skris addx c_2,%g0,c_2 != 140155714Skris 140255714Skris umul a_0,a_3,t_1 !sqr_add_c2(a,3,0,c1,c2,c3); 140355714Skris addcc c_1,t_1,c_1 140455714Skris rd %y,t_2 140555714Skris addxcc c_2,t_2,c_2 != 140655714Skris addx %g0,%g0,c_3 140755714Skris addcc c_1,t_1,c_1 140855714Skris addxcc c_2,t_2,c_2 140955714Skris addx c_3,%g0,c_3 != 141055714Skris umul a_1,a_2,t_1 !sqr_add_c2(a,2,1,c1,c2,c3); 141155714Skris addcc c_1,t_1,c_1 141255714Skris rd %y,t_2 141355714Skris addxcc c_2,t_2,c_2 != 141455714Skris addx c_3,%g0,c_3 141555714Skris addcc c_1,t_1,c_1 141655714Skris addxcc c_2,t_2,c_2 141755714Skris addx c_3,%g0,c_3 != 141855714Skris st c_1,rp(3) !r[3]=c1; 141955714Skris 142055714Skris umul a_3,a_1,t_1 !sqr_add_c2(a,3,1,c2,c3,c1); 142155714Skris addcc c_2,t_1,c_2 142255714Skris rd %y,t_2 != 142355714Skris addxcc c_3,t_2,c_3 142455714Skris addx %g0,%g0,c_1 142555714Skris addcc c_2,t_1,c_2 142655714Skris addxcc c_3,t_2,c_3 != 142755714Skris addx c_1,%g0,c_1 142855714Skris umul a_2,a_2,t_1 !sqr_add_c(a,2,c2,c3,c1); 142955714Skris addcc c_2,t_1,c_2 143055714Skris rd %y,t_2 != 143155714Skris addxcc c_3,t_2,c_3 143255714Skris addx c_1,%g0,c_1 143355714Skris st c_2,rp(4) !r[4]=c2; 143455714Skris 143555714Skris umul a_2,a_3,t_1 !=!sqr_add_c2(a,3,2,c3,c1,c2); 143655714Skris addcc c_3,t_1,c_3 143755714Skris rd %y,t_2 143855714Skris addxcc c_1,t_2,c_1 143955714Skris addx %g0,%g0,c_2 != 144055714Skris addcc c_3,t_1,c_3 144155714Skris addxcc c_1,t_2,c_1 144255714Skris st c_3,rp(5) !r[5]=c3; 144355714Skris addx c_2,%g0,c_2 != 144455714Skris 144555714Skris umul a_3,a_3,t_1 !sqr_add_c(a,3,c1,c2,c3); 144655714Skris addcc c_1,t_1,c_1 144755714Skris rd %y,t_2 144855714Skris addxcc c_2,t_2,c_2 != 144955714Skris st c_1,rp(6) !r[6]=c1; 145055714Skris st c_2,rp(7) !r[7]=c2; 145155714Skris 145255714Skris ret 145355714Skris restore %g0,%g0,%o0 145455714Skris 145555714Skris.type bn_sqr_comba4,#function 145655714Skris.size bn_sqr_comba4,(.-bn_sqr_comba4) 145755714Skris 145855714Skris.align 32 1459