123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458 |
- .ident "sparcv8.s, Version 1.4"
- .ident "SPARC v8 ISA artwork by Andy Polyakov <appro@openssl.org>"
- /*
- * ====================================================================
- * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved.
- *
- * Licensed under the Apache License 2.0 (the "License"). You may not use
- * this file except in compliance with the License. You can obtain a copy
- * in the file LICENSE in the source distribution or at
- * https://www.openssl.org/source/license.html
- * ====================================================================
- */
- /*
- * This is my modest contribution to OpenSSL project (see
- * http://www.openssl.org/ for more information about it) and is
- * a drop-in SuperSPARC ISA replacement for crypto/bn/bn_asm.c
- * module. For updates see http://fy.chalmers.se/~appro/hpe/.
- *
- * See bn_asm.sparc.v8plus.S for more details.
- */
- /*
- * Revision history.
- *
- * 1.1 - new loop unrolling model(*);
- * 1.2 - made gas friendly;
- * 1.3 - fixed problem with /usr/ccs/lib/cpp;
- * 1.4 - some retunes;
- *
- * (*) see bn_asm.sparc.v8plus.S for details
- */
- .section ".text",#alloc,#execinstr
- .file "bn_asm.sparc.v8.S"
- .align 32
- .global bn_mul_add_words
- /*
- * BN_ULONG bn_mul_add_words(rp,ap,num,w)
- * BN_ULONG *rp,*ap;
- * int num;
- * BN_ULONG w;
- */
- bn_mul_add_words:
- cmp %o2,0
- bg,a .L_bn_mul_add_words_proceed
- ld [%o1],%g2
- retl
- clr %o0
- .L_bn_mul_add_words_proceed:
- andcc %o2,-4,%g0
- bz .L_bn_mul_add_words_tail
- clr %o5
- .L_bn_mul_add_words_loop:
- ld [%o0],%o4
- ld [%o1+4],%g3
- umul %o3,%g2,%g2
- rd %y,%g1
- addcc %o4,%o5,%o4
- addx %g1,0,%g1
- addcc %o4,%g2,%o4
- st %o4,[%o0]
- addx %g1,0,%o5
- ld [%o0+4],%o4
- ld [%o1+8],%g2
- umul %o3,%g3,%g3
- dec 4,%o2
- rd %y,%g1
- addcc %o4,%o5,%o4
- addx %g1,0,%g1
- addcc %o4,%g3,%o4
- st %o4,[%o0+4]
- addx %g1,0,%o5
- ld [%o0+8],%o4
- ld [%o1+12],%g3
- umul %o3,%g2,%g2
- inc 16,%o1
- rd %y,%g1
- addcc %o4,%o5,%o4
- addx %g1,0,%g1
- addcc %o4,%g2,%o4
- st %o4,[%o0+8]
- addx %g1,0,%o5
- ld [%o0+12],%o4
- umul %o3,%g3,%g3
- inc 16,%o0
- rd %y,%g1
- addcc %o4,%o5,%o4
- addx %g1,0,%g1
- addcc %o4,%g3,%o4
- st %o4,[%o0-4]
- addx %g1,0,%o5
- andcc %o2,-4,%g0
- bnz,a .L_bn_mul_add_words_loop
- ld [%o1],%g2
- tst %o2
- bnz,a .L_bn_mul_add_words_tail
- ld [%o1],%g2
- .L_bn_mul_add_words_return:
- retl
- mov %o5,%o0
- nop
- .L_bn_mul_add_words_tail:
- ld [%o0],%o4
- umul %o3,%g2,%g2
- addcc %o4,%o5,%o4
- rd %y,%g1
- addx %g1,0,%g1
- addcc %o4,%g2,%o4
- addx %g1,0,%o5
- deccc %o2
- bz .L_bn_mul_add_words_return
- st %o4,[%o0]
- ld [%o1+4],%g2
- ld [%o0+4],%o4
- umul %o3,%g2,%g2
- rd %y,%g1
- addcc %o4,%o5,%o4
- addx %g1,0,%g1
- addcc %o4,%g2,%o4
- addx %g1,0,%o5
- deccc %o2
- bz .L_bn_mul_add_words_return
- st %o4,[%o0+4]
- ld [%o1+8],%g2
- ld [%o0+8],%o4
- umul %o3,%g2,%g2
- rd %y,%g1
- addcc %o4,%o5,%o4
- addx %g1,0,%g1
- addcc %o4,%g2,%o4
- st %o4,[%o0+8]
- retl
- addx %g1,0,%o0
- .type bn_mul_add_words,#function
- .size bn_mul_add_words,(.-bn_mul_add_words)
- .align 32
- .global bn_mul_words
- /*
- * BN_ULONG bn_mul_words(rp,ap,num,w)
- * BN_ULONG *rp,*ap;
- * int num;
- * BN_ULONG w;
- */
- bn_mul_words:
- cmp %o2,0
- bg,a .L_bn_mul_words_proceed
- ld [%o1],%g2
- retl
- clr %o0
- .L_bn_mul_words_proceed:
- andcc %o2,-4,%g0
- bz .L_bn_mul_words_tail
- clr %o5
- .L_bn_mul_words_loop:
- ld [%o1+4],%g3
- umul %o3,%g2,%g2
- addcc %g2,%o5,%g2
- rd %y,%g1
- addx %g1,0,%o5
- st %g2,[%o0]
- ld [%o1+8],%g2
- umul %o3,%g3,%g3
- addcc %g3,%o5,%g3
- rd %y,%g1
- dec 4,%o2
- addx %g1,0,%o5
- st %g3,[%o0+4]
- ld [%o1+12],%g3
- umul %o3,%g2,%g2
- addcc %g2,%o5,%g2
- rd %y,%g1
- inc 16,%o1
- st %g2,[%o0+8]
- addx %g1,0,%o5
- umul %o3,%g3,%g3
- addcc %g3,%o5,%g3
- rd %y,%g1
- inc 16,%o0
- addx %g1,0,%o5
- st %g3,[%o0-4]
- andcc %o2,-4,%g0
- nop
- bnz,a .L_bn_mul_words_loop
- ld [%o1],%g2
- tst %o2
- bnz,a .L_bn_mul_words_tail
- ld [%o1],%g2
- .L_bn_mul_words_return:
- retl
- mov %o5,%o0
- nop
- .L_bn_mul_words_tail:
- umul %o3,%g2,%g2
- addcc %g2,%o5,%g2
- rd %y,%g1
- addx %g1,0,%o5
- deccc %o2
- bz .L_bn_mul_words_return
- st %g2,[%o0]
- nop
- ld [%o1+4],%g2
- umul %o3,%g2,%g2
- addcc %g2,%o5,%g2
- rd %y,%g1
- addx %g1,0,%o5
- deccc %o2
- bz .L_bn_mul_words_return
- st %g2,[%o0+4]
- ld [%o1+8],%g2
- umul %o3,%g2,%g2
- addcc %g2,%o5,%g2
- rd %y,%g1
- st %g2,[%o0+8]
- retl
- addx %g1,0,%o0
- .type bn_mul_words,#function
- .size bn_mul_words,(.-bn_mul_words)
- .align 32
- .global bn_sqr_words
- /*
- * void bn_sqr_words(r,a,n)
- * BN_ULONG *r,*a;
- * int n;
- */
- bn_sqr_words:
- cmp %o2,0
- bg,a .L_bn_sqr_words_proceed
- ld [%o1],%g2
- retl
- clr %o0
- .L_bn_sqr_words_proceed:
- andcc %o2,-4,%g0
- bz .L_bn_sqr_words_tail
- clr %o5
- .L_bn_sqr_words_loop:
- ld [%o1+4],%g3
- umul %g2,%g2,%o4
- st %o4,[%o0]
- rd %y,%o5
- st %o5,[%o0+4]
- ld [%o1+8],%g2
- umul %g3,%g3,%o4
- dec 4,%o2
- st %o4,[%o0+8]
- rd %y,%o5
- st %o5,[%o0+12]
- nop
- ld [%o1+12],%g3
- umul %g2,%g2,%o4
- st %o4,[%o0+16]
- rd %y,%o5
- inc 16,%o1
- st %o5,[%o0+20]
- umul %g3,%g3,%o4
- inc 32,%o0
- st %o4,[%o0-8]
- rd %y,%o5
- st %o5,[%o0-4]
- andcc %o2,-4,%g2
- bnz,a .L_bn_sqr_words_loop
- ld [%o1],%g2
- tst %o2
- nop
- bnz,a .L_bn_sqr_words_tail
- ld [%o1],%g2
- .L_bn_sqr_words_return:
- retl
- clr %o0
- .L_bn_sqr_words_tail:
- umul %g2,%g2,%o4
- st %o4,[%o0]
- deccc %o2
- rd %y,%o5
- bz .L_bn_sqr_words_return
- st %o5,[%o0+4]
- ld [%o1+4],%g2
- umul %g2,%g2,%o4
- st %o4,[%o0+8]
- deccc %o2
- rd %y,%o5
- nop
- bz .L_bn_sqr_words_return
- st %o5,[%o0+12]
- ld [%o1+8],%g2
- umul %g2,%g2,%o4
- st %o4,[%o0+16]
- rd %y,%o5
- st %o5,[%o0+20]
- retl
- clr %o0
- .type bn_sqr_words,#function
- .size bn_sqr_words,(.-bn_sqr_words)
- .align 32
- .global bn_div_words
- /*
- * BN_ULONG bn_div_words(h,l,d)
- * BN_ULONG h,l,d;
- */
- bn_div_words:
- wr %o0,%y
- udiv %o1,%o2,%o0
- retl
- nop
- .type bn_div_words,#function
- .size bn_div_words,(.-bn_div_words)
- .align 32
- .global bn_add_words
- /*
- * BN_ULONG bn_add_words(rp,ap,bp,n)
- * BN_ULONG *rp,*ap,*bp;
- * int n;
- */
- bn_add_words:
- cmp %o3,0
- bg,a .L_bn_add_words_proceed
- ld [%o1],%o4
- retl
- clr %o0
- .L_bn_add_words_proceed:
- andcc %o3,-4,%g0
- bz .L_bn_add_words_tail
- clr %g1
- ba .L_bn_add_words_warn_loop
- addcc %g0,0,%g0 ! clear carry flag
- .L_bn_add_words_loop:
- ld [%o1],%o4
- .L_bn_add_words_warn_loop:
- ld [%o2],%o5
- ld [%o1+4],%g3
- ld [%o2+4],%g4
- dec 4,%o3
- addxcc %o5,%o4,%o5
- st %o5,[%o0]
- ld [%o1+8],%o4
- ld [%o2+8],%o5
- inc 16,%o1
- addxcc %g3,%g4,%g3
- st %g3,[%o0+4]
- ld [%o1-4],%g3
- ld [%o2+12],%g4
- inc 16,%o2
- addxcc %o5,%o4,%o5
- st %o5,[%o0+8]
- inc 16,%o0
- addxcc %g3,%g4,%g3
- st %g3,[%o0-4]
- addx %g0,0,%g1
- andcc %o3,-4,%g0
- bnz,a .L_bn_add_words_loop
- addcc %g1,-1,%g0
- tst %o3
- bnz,a .L_bn_add_words_tail
- ld [%o1],%o4
- .L_bn_add_words_return:
- retl
- mov %g1,%o0
- .L_bn_add_words_tail:
- addcc %g1,-1,%g0
- ld [%o2],%o5
- addxcc %o5,%o4,%o5
- addx %g0,0,%g1
- deccc %o3
- bz .L_bn_add_words_return
- st %o5,[%o0]
- ld [%o1+4],%o4
- addcc %g1,-1,%g0
- ld [%o2+4],%o5
- addxcc %o5,%o4,%o5
- addx %g0,0,%g1
- deccc %o3
- bz .L_bn_add_words_return
- st %o5,[%o0+4]
- ld [%o1+8],%o4
- addcc %g1,-1,%g0
- ld [%o2+8],%o5
- addxcc %o5,%o4,%o5
- st %o5,[%o0+8]
- retl
- addx %g0,0,%o0
- .type bn_add_words,#function
- .size bn_add_words,(.-bn_add_words)
- .align 32
- .global bn_sub_words
- /*
- * BN_ULONG bn_sub_words(rp,ap,bp,n)
- * BN_ULONG *rp,*ap,*bp;
- * int n;
- */
- bn_sub_words:
- cmp %o3,0
- bg,a .L_bn_sub_words_proceed
- ld [%o1],%o4
- retl
- clr %o0
- .L_bn_sub_words_proceed:
- andcc %o3,-4,%g0
- bz .L_bn_sub_words_tail
- clr %g1
- ba .L_bn_sub_words_warm_loop
- addcc %g0,0,%g0 ! clear carry flag
- .L_bn_sub_words_loop:
- ld [%o1],%o4
- .L_bn_sub_words_warm_loop:
- ld [%o2],%o5
- ld [%o1+4],%g3
- ld [%o2+4],%g4
- dec 4,%o3
- subxcc %o4,%o5,%o5
- st %o5,[%o0]
- ld [%o1+8],%o4
- ld [%o2+8],%o5
- inc 16,%o1
- subxcc %g3,%g4,%g4
- st %g4,[%o0+4]
- ld [%o1-4],%g3
- ld [%o2+12],%g4
- inc 16,%o2
- subxcc %o4,%o5,%o5
- st %o5,[%o0+8]
- inc 16,%o0
- subxcc %g3,%g4,%g4
- st %g4,[%o0-4]
- addx %g0,0,%g1
- andcc %o3,-4,%g0
- bnz,a .L_bn_sub_words_loop
- addcc %g1,-1,%g0
- tst %o3
- nop
- bnz,a .L_bn_sub_words_tail
- ld [%o1],%o4
- .L_bn_sub_words_return:
- retl
- mov %g1,%o0
- .L_bn_sub_words_tail:
- addcc %g1,-1,%g0
- ld [%o2],%o5
- subxcc %o4,%o5,%o5
- addx %g0,0,%g1
- deccc %o3
- bz .L_bn_sub_words_return
- st %o5,[%o0]
- nop
- ld [%o1+4],%o4
- addcc %g1,-1,%g0
- ld [%o2+4],%o5
- subxcc %o4,%o5,%o5
- addx %g0,0,%g1
- deccc %o3
- bz .L_bn_sub_words_return
- st %o5,[%o0+4]
- ld [%o1+8],%o4
- addcc %g1,-1,%g0
- ld [%o2+8],%o5
- subxcc %o4,%o5,%o5
- st %o5,[%o0+8]
- retl
- addx %g0,0,%o0
- .type bn_sub_words,#function
- .size bn_sub_words,(.-bn_sub_words)
- #define FRAME_SIZE -96
- /*
- * Here is register usage map for *all* routines below.
- */
- #define t_1 %o0
- #define t_2 %o1
- #define c_1 %o2
- #define c_2 %o3
- #define c_3 %o4
- #define ap(I) [%i1+4*I]
- #define bp(I) [%i2+4*I]
- #define rp(I) [%i0+4*I]
- #define a_0 %l0
- #define a_1 %l1
- #define a_2 %l2
- #define a_3 %l3
- #define a_4 %l4
- #define a_5 %l5
- #define a_6 %l6
- #define a_7 %l7
- #define b_0 %i3
- #define b_1 %i4
- #define b_2 %i5
- #define b_3 %o5
- #define b_4 %g1
- #define b_5 %g2
- #define b_6 %g3
- #define b_7 %g4
- .align 32
- .global bn_mul_comba8
- /*
- * void bn_mul_comba8(r,a,b)
- * BN_ULONG *r,*a,*b;
- */
- bn_mul_comba8:
- save %sp,FRAME_SIZE,%sp
- ld ap(0),a_0
- ld bp(0),b_0
- umul a_0,b_0,c_1 !=!mul_add_c(a[0],b[0],c1,c2,c3);
- ld bp(1),b_1
- rd %y,c_2
- st c_1,rp(0) !r[0]=c1;
- umul a_0,b_1,t_1 !=!mul_add_c(a[0],b[1],c2,c3,c1);
- ld ap(1),a_1
- addcc c_2,t_1,c_2
- rd %y,t_2
- addxcc %g0,t_2,c_3 !=
- addx %g0,%g0,c_1
- ld ap(2),a_2
- umul a_1,b_0,t_1 !mul_add_c(a[1],b[0],c2,c3,c1);
- addcc c_2,t_1,c_2 !=
- rd %y,t_2
- addxcc c_3,t_2,c_3
- st c_2,rp(1) !r[1]=c2;
- addx c_1,%g0,c_1 !=
- umul a_2,b_0,t_1 !mul_add_c(a[2],b[0],c3,c1,c2);
- addcc c_3,t_1,c_3
- rd %y,t_2
- addxcc c_1,t_2,c_1 !=
- addx %g0,%g0,c_2
- ld bp(2),b_2
- umul a_1,b_1,t_1 !mul_add_c(a[1],b[1],c3,c1,c2);
- addcc c_3,t_1,c_3 !=
- rd %y,t_2
- addxcc c_1,t_2,c_1
- ld bp(3),b_3
- addx c_2,%g0,c_2 !=
- umul a_0,b_2,t_1 !mul_add_c(a[0],b[2],c3,c1,c2);
- addcc c_3,t_1,c_3
- rd %y,t_2
- addxcc c_1,t_2,c_1 !=
- addx c_2,%g0,c_2
- st c_3,rp(2) !r[2]=c3;
- umul a_0,b_3,t_1 !mul_add_c(a[0],b[3],c1,c2,c3);
- addcc c_1,t_1,c_1 !=
- rd %y,t_2
- addxcc c_2,t_2,c_2
- addx %g0,%g0,c_3
- umul a_1,b_2,t_1 !=!mul_add_c(a[1],b[2],c1,c2,c3);
- addcc c_1,t_1,c_1
- rd %y,t_2
- addxcc c_2,t_2,c_2
- addx c_3,%g0,c_3 !=
- ld ap(3),a_3
- umul a_2,b_1,t_1 !mul_add_c(a[2],b[1],c1,c2,c3);
- addcc c_1,t_1,c_1
- rd %y,t_2 !=
- addxcc c_2,t_2,c_2
- addx c_3,%g0,c_3
- ld ap(4),a_4
- umul a_3,b_0,t_1 !mul_add_c(a[3],b[0],c1,c2,c3);!=
- addcc c_1,t_1,c_1
- rd %y,t_2
- addxcc c_2,t_2,c_2
- addx c_3,%g0,c_3 !=
- st c_1,rp(3) !r[3]=c1;
- umul a_4,b_0,t_1 !mul_add_c(a[4],b[0],c2,c3,c1);
- addcc c_2,t_1,c_2
- rd %y,t_2 !=
- addxcc c_3,t_2,c_3
- addx %g0,%g0,c_1
- umul a_3,b_1,t_1 !mul_add_c(a[3],b[1],c2,c3,c1);
- addcc c_2,t_1,c_2 !=
- rd %y,t_2
- addxcc c_3,t_2,c_3
- addx c_1,%g0,c_1
- umul a_2,b_2,t_1 !=!mul_add_c(a[2],b[2],c2,c3,c1);
- addcc c_2,t_1,c_2
- rd %y,t_2
- addxcc c_3,t_2,c_3
- addx c_1,%g0,c_1 !=
- ld bp(4),b_4
- umul a_1,b_3,t_1 !mul_add_c(a[1],b[3],c2,c3,c1);
- addcc c_2,t_1,c_2
- rd %y,t_2 !=
- addxcc c_3,t_2,c_3
- addx c_1,%g0,c_1
- ld bp(5),b_5
- umul a_0,b_4,t_1 !=!mul_add_c(a[0],b[4],c2,c3,c1);
- addcc c_2,t_1,c_2
- rd %y,t_2
- addxcc c_3,t_2,c_3
- addx c_1,%g0,c_1 !=
- st c_2,rp(4) !r[4]=c2;
- umul a_0,b_5,t_1 !mul_add_c(a[0],b[5],c3,c1,c2);
- addcc c_3,t_1,c_3
- rd %y,t_2 !=
- addxcc c_1,t_2,c_1
- addx %g0,%g0,c_2
- umul a_1,b_4,t_1 !mul_add_c(a[1],b[4],c3,c1,c2);
- addcc c_3,t_1,c_3 !=
- rd %y,t_2
- addxcc c_1,t_2,c_1
- addx c_2,%g0,c_2
- umul a_2,b_3,t_1 !=!mul_add_c(a[2],b[3],c3,c1,c2);
- addcc c_3,t_1,c_3
- rd %y,t_2
- addxcc c_1,t_2,c_1
- addx c_2,%g0,c_2 !=
- umul a_3,b_2,t_1 !mul_add_c(a[3],b[2],c3,c1,c2);
- addcc c_3,t_1,c_3
- rd %y,t_2
- addxcc c_1,t_2,c_1 !=
- addx c_2,%g0,c_2
- ld ap(5),a_5
- umul a_4,b_1,t_1 !mul_add_c(a[4],b[1],c3,c1,c2);
- addcc c_3,t_1,c_3 !=
- rd %y,t_2
- addxcc c_1,t_2,c_1
- ld ap(6),a_6
- addx c_2,%g0,c_2 !=
- umul a_5,b_0,t_1 !mul_add_c(a[5],b[0],c3,c1,c2);
- addcc c_3,t_1,c_3
- rd %y,t_2
- addxcc c_1,t_2,c_1 !=
- addx c_2,%g0,c_2
- st c_3,rp(5) !r[5]=c3;
- umul a_6,b_0,t_1 !mul_add_c(a[6],b[0],c1,c2,c3);
- addcc c_1,t_1,c_1 !=
- rd %y,t_2
- addxcc c_2,t_2,c_2
- addx %g0,%g0,c_3
- umul a_5,b_1,t_1 !=!mul_add_c(a[5],b[1],c1,c2,c3);
- addcc c_1,t_1,c_1
- rd %y,t_2
- addxcc c_2,t_2,c_2
- addx c_3,%g0,c_3 !=
- umul a_4,b_2,t_1 !mul_add_c(a[4],b[2],c1,c2,c3);
- addcc c_1,t_1,c_1
- rd %y,t_2
- addxcc c_2,t_2,c_2 !=
- addx c_3,%g0,c_3
- umul a_3,b_3,t_1 !mul_add_c(a[3],b[3],c1,c2,c3);
- addcc c_1,t_1,c_1
- rd %y,t_2 !=
- addxcc c_2,t_2,c_2
- addx c_3,%g0,c_3
- umul a_2,b_4,t_1 !mul_add_c(a[2],b[4],c1,c2,c3);
- addcc c_1,t_1,c_1 !=
- rd %y,t_2
- addxcc c_2,t_2,c_2
- ld bp(6),b_6
- addx c_3,%g0,c_3 !=
- umul a_1,b_5,t_1 !mul_add_c(a[1],b[5],c1,c2,c3);
- addcc c_1,t_1,c_1
- rd %y,t_2
- addxcc c_2,t_2,c_2 !=
- addx c_3,%g0,c_3
- ld bp(7),b_7
- umul a_0,b_6,t_1 !mul_add_c(a[0],b[6],c1,c2,c3);
- addcc c_1,t_1,c_1 !=
- rd %y,t_2
- addxcc c_2,t_2,c_2
- st c_1,rp(6) !r[6]=c1;
- addx c_3,%g0,c_3 !=
- umul a_0,b_7,t_1 !mul_add_c(a[0],b[7],c2,c3,c1);
- addcc c_2,t_1,c_2
- rd %y,t_2
- addxcc c_3,t_2,c_3 !=
- addx %g0,%g0,c_1
- umul a_1,b_6,t_1 !mul_add_c(a[1],b[6],c2,c3,c1);
- addcc c_2,t_1,c_2
- rd %y,t_2 !=
- addxcc c_3,t_2,c_3
- addx c_1,%g0,c_1
- umul a_2,b_5,t_1 !mul_add_c(a[2],b[5],c2,c3,c1);
- addcc c_2,t_1,c_2 !=
- rd %y,t_2
- addxcc c_3,t_2,c_3
- addx c_1,%g0,c_1
- umul a_3,b_4,t_1 !=!mul_add_c(a[3],b[4],c2,c3,c1);
- addcc c_2,t_1,c_2
- rd %y,t_2
- addxcc c_3,t_2,c_3
- addx c_1,%g0,c_1 !=
- umul a_4,b_3,t_1 !mul_add_c(a[4],b[3],c2,c3,c1);
- addcc c_2,t_1,c_2
- rd %y,t_2
- addxcc c_3,t_2,c_3 !=
- addx c_1,%g0,c_1
- umul a_5,b_2,t_1 !mul_add_c(a[5],b[2],c2,c3,c1);
- addcc c_2,t_1,c_2
- rd %y,t_2 !=
- addxcc c_3,t_2,c_3
- addx c_1,%g0,c_1
- ld ap(7),a_7
- umul a_6,b_1,t_1 !=!mul_add_c(a[6],b[1],c2,c3,c1);
- addcc c_2,t_1,c_2
- rd %y,t_2
- addxcc c_3,t_2,c_3
- addx c_1,%g0,c_1 !=
- umul a_7,b_0,t_1 !mul_add_c(a[7],b[0],c2,c3,c1);
- addcc c_2,t_1,c_2
- rd %y,t_2
- addxcc c_3,t_2,c_3 !=
- addx c_1,%g0,c_1
- st c_2,rp(7) !r[7]=c2;
- umul a_7,b_1,t_1 !mul_add_c(a[7],b[1],c3,c1,c2);
- addcc c_3,t_1,c_3 !=
- rd %y,t_2
- addxcc c_1,t_2,c_1
- addx %g0,%g0,c_2
- umul a_6,b_2,t_1 !=!mul_add_c(a[6],b[2],c3,c1,c2);
- addcc c_3,t_1,c_3
- rd %y,t_2
- addxcc c_1,t_2,c_1
- addx c_2,%g0,c_2 !=
- umul a_5,b_3,t_1 !mul_add_c(a[5],b[3],c3,c1,c2);
- addcc c_3,t_1,c_3
- rd %y,t_2
- addxcc c_1,t_2,c_1 !=
- addx c_2,%g0,c_2
- umul a_4,b_4,t_1 !mul_add_c(a[4],b[4],c3,c1,c2);
- addcc c_3,t_1,c_3
- rd %y,t_2 !=
- addxcc c_1,t_2,c_1
- addx c_2,%g0,c_2
- umul a_3,b_5,t_1 !mul_add_c(a[3],b[5],c3,c1,c2);
- addcc c_3,t_1,c_3 !=
- rd %y,t_2
- addxcc c_1,t_2,c_1
- addx c_2,%g0,c_2
- umul a_2,b_6,t_1 !=!mul_add_c(a[2],b[6],c3,c1,c2);
- addcc c_3,t_1,c_3
- rd %y,t_2
- addxcc c_1,t_2,c_1
- addx c_2,%g0,c_2 !=
- umul a_1,b_7,t_1 !mul_add_c(a[1],b[7],c3,c1,c2);
- addcc c_3,t_1,c_3
- rd %y,t_2
- addxcc c_1,t_2,c_1 !
- addx c_2,%g0,c_2
- st c_3,rp(8) !r[8]=c3;
- umul a_2,b_7,t_1 !mul_add_c(a[2],b[7],c1,c2,c3);
- addcc c_1,t_1,c_1 !=
- rd %y,t_2
- addxcc c_2,t_2,c_2
- addx %g0,%g0,c_3
- umul a_3,b_6,t_1 !=!mul_add_c(a[3],b[6],c1,c2,c3);
- addcc c_1,t_1,c_1
- rd %y,t_2
- addxcc c_2,t_2,c_2
- addx c_3,%g0,c_3 !=
- umul a_4,b_5,t_1 !mul_add_c(a[4],b[5],c1,c2,c3);
- addcc c_1,t_1,c_1
- rd %y,t_2
- addxcc c_2,t_2,c_2 !=
- addx c_3,%g0,c_3
- umul a_5,b_4,t_1 !mul_add_c(a[5],b[4],c1,c2,c3);
- addcc c_1,t_1,c_1
- rd %y,t_2 !=
- addxcc c_2,t_2,c_2
- addx c_3,%g0,c_3
- umul a_6,b_3,t_1 !mul_add_c(a[6],b[3],c1,c2,c3);
- addcc c_1,t_1,c_1 !=
- rd %y,t_2
- addxcc c_2,t_2,c_2
- addx c_3,%g0,c_3
- umul a_7,b_2,t_1 !=!mul_add_c(a[7],b[2],c1,c2,c3);
- addcc c_1,t_1,c_1
- rd %y,t_2
- addxcc c_2,t_2,c_2
- addx c_3,%g0,c_3 !=
- st c_1,rp(9) !r[9]=c1;
- umul a_7,b_3,t_1 !mul_add_c(a[7],b[3],c2,c3,c1);
- addcc c_2,t_1,c_2
- rd %y,t_2 !=
- addxcc c_3,t_2,c_3
- addx %g0,%g0,c_1
- umul a_6,b_4,t_1 !mul_add_c(a[6],b[4],c2,c3,c1);
- addcc c_2,t_1,c_2 !=
- rd %y,t_2
- addxcc c_3,t_2,c_3
- addx c_1,%g0,c_1
- umul a_5,b_5,t_1 !=!mul_add_c(a[5],b[5],c2,c3,c1);
- addcc c_2,t_1,c_2
- rd %y,t_2
- addxcc c_3,t_2,c_3
- addx c_1,%g0,c_1 !=
- umul a_4,b_6,t_1 !mul_add_c(a[4],b[6],c2,c3,c1);
- addcc c_2,t_1,c_2
- rd %y,t_2
- addxcc c_3,t_2,c_3 !=
- addx c_1,%g0,c_1
- umul a_3,b_7,t_1 !mul_add_c(a[3],b[7],c2,c3,c1);
- addcc c_2,t_1,c_2
- rd %y,t_2 !=
- addxcc c_3,t_2,c_3
- addx c_1,%g0,c_1
- st c_2,rp(10) !r[10]=c2;
- umul a_4,b_7,t_1 !=!mul_add_c(a[4],b[7],c3,c1,c2);
- addcc c_3,t_1,c_3
- rd %y,t_2
- addxcc c_1,t_2,c_1
- addx %g0,%g0,c_2 !=
- umul a_5,b_6,t_1 !mul_add_c(a[5],b[6],c3,c1,c2);
- addcc c_3,t_1,c_3
- rd %y,t_2
- addxcc c_1,t_2,c_1 !=
- addx c_2,%g0,c_2
- umul a_6,b_5,t_1 !mul_add_c(a[6],b[5],c3,c1,c2);
- addcc c_3,t_1,c_3
- rd %y,t_2 !=
- addxcc c_1,t_2,c_1
- addx c_2,%g0,c_2
- umul a_7,b_4,t_1 !mul_add_c(a[7],b[4],c3,c1,c2);
- addcc c_3,t_1,c_3 !=
- rd %y,t_2
- addxcc c_1,t_2,c_1
- st c_3,rp(11) !r[11]=c3;
- addx c_2,%g0,c_2 !=
- umul a_7,b_5,t_1 !mul_add_c(a[7],b[5],c1,c2,c3);
- addcc c_1,t_1,c_1
- rd %y,t_2
- addxcc c_2,t_2,c_2 !=
- addx %g0,%g0,c_3
- umul a_6,b_6,t_1 !mul_add_c(a[6],b[6],c1,c2,c3);
- addcc c_1,t_1,c_1
- rd %y,t_2 !=
- addxcc c_2,t_2,c_2
- addx c_3,%g0,c_3
- umul a_5,b_7,t_1 !mul_add_c(a[5],b[7],c1,c2,c3);
- addcc c_1,t_1,c_1 !=
- rd %y,t_2
- addxcc c_2,t_2,c_2
- st c_1,rp(12) !r[12]=c1;
- addx c_3,%g0,c_3 !=
- umul a_6,b_7,t_1 !mul_add_c(a[6],b[7],c2,c3,c1);
- addcc c_2,t_1,c_2
- rd %y,t_2
- addxcc c_3,t_2,c_3 !=
- addx %g0,%g0,c_1
- umul a_7,b_6,t_1 !mul_add_c(a[7],b[6],c2,c3,c1);
- addcc c_2,t_1,c_2
- rd %y,t_2 !=
- addxcc c_3,t_2,c_3
- addx c_1,%g0,c_1
- st c_2,rp(13) !r[13]=c2;
- umul a_7,b_7,t_1 !=!mul_add_c(a[7],b[7],c3,c1,c2);
- addcc c_3,t_1,c_3
- rd %y,t_2
- addxcc c_1,t_2,c_1
- nop !=
- st c_3,rp(14) !r[14]=c3;
- st c_1,rp(15) !r[15]=c1;
- ret
- restore %g0,%g0,%o0
- .type bn_mul_comba8,#function
- .size bn_mul_comba8,(.-bn_mul_comba8)
- .align 32
- .global bn_mul_comba4
- /*
- * void bn_mul_comba4(r,a,b)
- * BN_ULONG *r,*a,*b;
- */
- bn_mul_comba4:
- save %sp,FRAME_SIZE,%sp
- ld ap(0),a_0
- ld bp(0),b_0
- umul a_0,b_0,c_1 !=!mul_add_c(a[0],b[0],c1,c2,c3);
- ld bp(1),b_1
- rd %y,c_2
- st c_1,rp(0) !r[0]=c1;
- umul a_0,b_1,t_1 !=!mul_add_c(a[0],b[1],c2,c3,c1);
- ld ap(1),a_1
- addcc c_2,t_1,c_2
- rd %y,t_2 !=
- addxcc %g0,t_2,c_3
- addx %g0,%g0,c_1
- ld ap(2),a_2
- umul a_1,b_0,t_1 !=!mul_add_c(a[1],b[0],c2,c3,c1);
- addcc c_2,t_1,c_2
- rd %y,t_2
- addxcc c_3,t_2,c_3
- addx c_1,%g0,c_1 !=
- st c_2,rp(1) !r[1]=c2;
- umul a_2,b_0,t_1 !mul_add_c(a[2],b[0],c3,c1,c2);
- addcc c_3,t_1,c_3
- rd %y,t_2 !=
- addxcc c_1,t_2,c_1
- addx %g0,%g0,c_2
- ld bp(2),b_2
- umul a_1,b_1,t_1 !=!mul_add_c(a[1],b[1],c3,c1,c2);
- addcc c_3,t_1,c_3
- rd %y,t_2
- addxcc c_1,t_2,c_1
- addx c_2,%g0,c_2 !=
- ld bp(3),b_3
- umul a_0,b_2,t_1 !mul_add_c(a[0],b[2],c3,c1,c2);
- addcc c_3,t_1,c_3
- rd %y,t_2 !=
- addxcc c_1,t_2,c_1
- addx c_2,%g0,c_2
- st c_3,rp(2) !r[2]=c3;
- umul a_0,b_3,t_1 !=!mul_add_c(a[0],b[3],c1,c2,c3);
- addcc c_1,t_1,c_1
- rd %y,t_2
- addxcc c_2,t_2,c_2
- addx %g0,%g0,c_3 !=
- umul a_1,b_2,t_1 !mul_add_c(a[1],b[2],c1,c2,c3);
- addcc c_1,t_1,c_1
- rd %y,t_2
- addxcc c_2,t_2,c_2 !=
- addx c_3,%g0,c_3
- ld ap(3),a_3
- umul a_2,b_1,t_1 !mul_add_c(a[2],b[1],c1,c2,c3);
- addcc c_1,t_1,c_1 !=
- rd %y,t_2
- addxcc c_2,t_2,c_2
- addx c_3,%g0,c_3
- umul a_3,b_0,t_1 !=!mul_add_c(a[3],b[0],c1,c2,c3);
- addcc c_1,t_1,c_1
- rd %y,t_2
- addxcc c_2,t_2,c_2
- addx c_3,%g0,c_3 !=
- st c_1,rp(3) !r[3]=c1;
- umul a_3,b_1,t_1 !mul_add_c(a[3],b[1],c2,c3,c1);
- addcc c_2,t_1,c_2
- rd %y,t_2 !=
- addxcc c_3,t_2,c_3
- addx %g0,%g0,c_1
- umul a_2,b_2,t_1 !mul_add_c(a[2],b[2],c2,c3,c1);
- addcc c_2,t_1,c_2 !=
- rd %y,t_2
- addxcc c_3,t_2,c_3
- addx c_1,%g0,c_1
- umul a_1,b_3,t_1 !=!mul_add_c(a[1],b[3],c2,c3,c1);
- addcc c_2,t_1,c_2
- rd %y,t_2
- addxcc c_3,t_2,c_3
- addx c_1,%g0,c_1 !=
- st c_2,rp(4) !r[4]=c2;
- umul a_2,b_3,t_1 !mul_add_c(a[2],b[3],c3,c1,c2);
- addcc c_3,t_1,c_3
- rd %y,t_2 !=
- addxcc c_1,t_2,c_1
- addx %g0,%g0,c_2
- umul a_3,b_2,t_1 !mul_add_c(a[3],b[2],c3,c1,c2);
- addcc c_3,t_1,c_3 !=
- rd %y,t_2
- addxcc c_1,t_2,c_1
- st c_3,rp(5) !r[5]=c3;
- addx c_2,%g0,c_2 !=
- umul a_3,b_3,t_1 !mul_add_c(a[3],b[3],c1,c2,c3);
- addcc c_1,t_1,c_1
- rd %y,t_2
- addxcc c_2,t_2,c_2 !=
- st c_1,rp(6) !r[6]=c1;
- st c_2,rp(7) !r[7]=c2;
- ret
- restore %g0,%g0,%o0
- .type bn_mul_comba4,#function
- .size bn_mul_comba4,(.-bn_mul_comba4)
- .align 32
- .global bn_sqr_comba8
- bn_sqr_comba8:
- save %sp,FRAME_SIZE,%sp
- ld ap(0),a_0
- ld ap(1),a_1
- umul a_0,a_0,c_1 !=!sqr_add_c(a,0,c1,c2,c3);
- rd %y,c_2
- st c_1,rp(0) !r[0]=c1;
- ld ap(2),a_2
- umul a_0,a_1,t_1 !=!sqr_add_c2(a,1,0,c2,c3,c1);
- addcc c_2,t_1,c_2
- rd %y,t_2
- addxcc %g0,t_2,c_3
- addx %g0,%g0,c_1 !=
- addcc c_2,t_1,c_2
- addxcc c_3,t_2,c_3
- st c_2,rp(1) !r[1]=c2;
- addx c_1,%g0,c_1 !=
- umul a_2,a_0,t_1 !sqr_add_c2(a,2,0,c3,c1,c2);
- addcc c_3,t_1,c_3
- rd %y,t_2
- addxcc c_1,t_2,c_1 !=
- addx %g0,%g0,c_2
- addcc c_3,t_1,c_3
- addxcc c_1,t_2,c_1
- addx c_2,%g0,c_2 !=
- ld ap(3),a_3
- umul a_1,a_1,t_1 !sqr_add_c(a,1,c3,c1,c2);
- addcc c_3,t_1,c_3
- rd %y,t_2 !=
- addxcc c_1,t_2,c_1
- addx c_2,%g0,c_2
- st c_3,rp(2) !r[2]=c3;
- umul a_0,a_3,t_1 !=!sqr_add_c2(a,3,0,c1,c2,c3);
- addcc c_1,t_1,c_1
- rd %y,t_2
- addxcc c_2,t_2,c_2
- addx %g0,%g0,c_3 !=
- addcc c_1,t_1,c_1
- addxcc c_2,t_2,c_2
- ld ap(4),a_4
- addx c_3,%g0,c_3 !=
- umul a_1,a_2,t_1 !sqr_add_c2(a,2,1,c1,c2,c3);
- addcc c_1,t_1,c_1
- rd %y,t_2
- addxcc c_2,t_2,c_2 !=
- addx c_3,%g0,c_3
- addcc c_1,t_1,c_1
- addxcc c_2,t_2,c_2
- addx c_3,%g0,c_3 !=
- st c_1,rp(3) !r[3]=c1;
- umul a_4,a_0,t_1 !sqr_add_c2(a,4,0,c2,c3,c1);
- addcc c_2,t_1,c_2
- rd %y,t_2 !=
- addxcc c_3,t_2,c_3
- addx %g0,%g0,c_1
- addcc c_2,t_1,c_2
- addxcc c_3,t_2,c_3 !=
- addx c_1,%g0,c_1
- umul a_3,a_1,t_1 !sqr_add_c2(a,3,1,c2,c3,c1);
- addcc c_2,t_1,c_2
- rd %y,t_2 !=
- addxcc c_3,t_2,c_3
- addx c_1,%g0,c_1
- addcc c_2,t_1,c_2
- addxcc c_3,t_2,c_3 !=
- addx c_1,%g0,c_1
- ld ap(5),a_5
- umul a_2,a_2,t_1 !sqr_add_c(a,2,c2,c3,c1);
- addcc c_2,t_1,c_2 !=
- rd %y,t_2
- addxcc c_3,t_2,c_3
- st c_2,rp(4) !r[4]=c2;
- addx c_1,%g0,c_1 !=
- umul a_0,a_5,t_1 !sqr_add_c2(a,5,0,c3,c1,c2);
- addcc c_3,t_1,c_3
- rd %y,t_2
- addxcc c_1,t_2,c_1 !=
- addx %g0,%g0,c_2
- addcc c_3,t_1,c_3
- addxcc c_1,t_2,c_1
- addx c_2,%g0,c_2 !=
- umul a_1,a_4,t_1 !sqr_add_c2(a,4,1,c3,c1,c2);
- addcc c_3,t_1,c_3
- rd %y,t_2
- addxcc c_1,t_2,c_1 !=
- addx c_2,%g0,c_2
- addcc c_3,t_1,c_3
- addxcc c_1,t_2,c_1
- addx c_2,%g0,c_2 !=
- ld ap(6),a_6
- umul a_2,a_3,t_1 !sqr_add_c2(a,3,2,c3,c1,c2);
- addcc c_3,t_1,c_3
- rd %y,t_2 !=
- addxcc c_1,t_2,c_1
- addx c_2,%g0,c_2
- addcc c_3,t_1,c_3
- addxcc c_1,t_2,c_1 !=
- addx c_2,%g0,c_2
- st c_3,rp(5) !r[5]=c3;
- umul a_6,a_0,t_1 !sqr_add_c2(a,6,0,c1,c2,c3);
- addcc c_1,t_1,c_1 !=
- rd %y,t_2
- addxcc c_2,t_2,c_2
- addx %g0,%g0,c_3
- addcc c_1,t_1,c_1 !=
- addxcc c_2,t_2,c_2
- addx c_3,%g0,c_3
- umul a_5,a_1,t_1 !sqr_add_c2(a,5,1,c1,c2,c3);
- addcc c_1,t_1,c_1 !=
- rd %y,t_2
- addxcc c_2,t_2,c_2
- addx c_3,%g0,c_3
- addcc c_1,t_1,c_1 !=
- addxcc c_2,t_2,c_2
- addx c_3,%g0,c_3
- umul a_4,a_2,t_1 !sqr_add_c2(a,4,2,c1,c2,c3);
- addcc c_1,t_1,c_1 !=
- rd %y,t_2
- addxcc c_2,t_2,c_2
- addx c_3,%g0,c_3
- addcc c_1,t_1,c_1 !=
- addxcc c_2,t_2,c_2
- addx c_3,%g0,c_3
- ld ap(7),a_7
- umul a_3,a_3,t_1 !=!sqr_add_c(a,3,c1,c2,c3);
- addcc c_1,t_1,c_1
- rd %y,t_2
- addxcc c_2,t_2,c_2
- addx c_3,%g0,c_3 !=
- st c_1,rp(6) !r[6]=c1;
- umul a_0,a_7,t_1 !sqr_add_c2(a,7,0,c2,c3,c1);
- addcc c_2,t_1,c_2
- rd %y,t_2 !=
- addxcc c_3,t_2,c_3
- addx %g0,%g0,c_1
- addcc c_2,t_1,c_2
- addxcc c_3,t_2,c_3 !=
- addx c_1,%g0,c_1
- umul a_1,a_6,t_1 !sqr_add_c2(a,6,1,c2,c3,c1);
- addcc c_2,t_1,c_2
- rd %y,t_2 !=
- addxcc c_3,t_2,c_3
- addx c_1,%g0,c_1
- addcc c_2,t_1,c_2
- addxcc c_3,t_2,c_3 !=
- addx c_1,%g0,c_1
- umul a_2,a_5,t_1 !sqr_add_c2(a,5,2,c2,c3,c1);
- addcc c_2,t_1,c_2
- rd %y,t_2 !=
- addxcc c_3,t_2,c_3
- addx c_1,%g0,c_1
- addcc c_2,t_1,c_2
- addxcc c_3,t_2,c_3 !=
- addx c_1,%g0,c_1
- umul a_3,a_4,t_1 !sqr_add_c2(a,4,3,c2,c3,c1);
- addcc c_2,t_1,c_2
- rd %y,t_2 !=
- addxcc c_3,t_2,c_3
- addx c_1,%g0,c_1
- addcc c_2,t_1,c_2
- addxcc c_3,t_2,c_3 !=
- addx c_1,%g0,c_1
- st c_2,rp(7) !r[7]=c2;
- umul a_7,a_1,t_1 !sqr_add_c2(a,7,1,c3,c1,c2);
- addcc c_3,t_1,c_3 !=
- rd %y,t_2
- addxcc c_1,t_2,c_1
- addx %g0,%g0,c_2
- addcc c_3,t_1,c_3 !=
- addxcc c_1,t_2,c_1
- addx c_2,%g0,c_2
- umul a_6,a_2,t_1 !sqr_add_c2(a,6,2,c3,c1,c2);
- addcc c_3,t_1,c_3 !=
- rd %y,t_2
- addxcc c_1,t_2,c_1
- addx c_2,%g0,c_2
- addcc c_3,t_1,c_3 !=
- addxcc c_1,t_2,c_1
- addx c_2,%g0,c_2
- umul a_5,a_3,t_1 !sqr_add_c2(a,5,3,c3,c1,c2);
- addcc c_3,t_1,c_3 !=
- rd %y,t_2
- addxcc c_1,t_2,c_1
- addx c_2,%g0,c_2
- addcc c_3,t_1,c_3 !=
- addxcc c_1,t_2,c_1
- addx c_2,%g0,c_2
- umul a_4,a_4,t_1 !sqr_add_c(a,4,c3,c1,c2);
- addcc c_3,t_1,c_3 !=
- rd %y,t_2
- addxcc c_1,t_2,c_1
- st c_3,rp(8) !r[8]=c3;
- addx c_2,%g0,c_2 !=
- umul a_2,a_7,t_1 !sqr_add_c2(a,7,2,c1,c2,c3);
- addcc c_1,t_1,c_1
- rd %y,t_2
- addxcc c_2,t_2,c_2 !=
- addx %g0,%g0,c_3
- addcc c_1,t_1,c_1
- addxcc c_2,t_2,c_2
- addx c_3,%g0,c_3 !=
- umul a_3,a_6,t_1 !sqr_add_c2(a,6,3,c1,c2,c3);
- addcc c_1,t_1,c_1
- rd %y,t_2
- addxcc c_2,t_2,c_2 !=
- addx c_3,%g0,c_3
- addcc c_1,t_1,c_1
- addxcc c_2,t_2,c_2
- addx c_3,%g0,c_3 !=
- umul a_4,a_5,t_1 !sqr_add_c2(a,5,4,c1,c2,c3);
- addcc c_1,t_1,c_1
- rd %y,t_2
- addxcc c_2,t_2,c_2 !=
- addx c_3,%g0,c_3
- addcc c_1,t_1,c_1
- addxcc c_2,t_2,c_2
- addx c_3,%g0,c_3 !=
- st c_1,rp(9) !r[9]=c1;
- umul a_7,a_3,t_1 !sqr_add_c2(a,7,3,c2,c3,c1);
- addcc c_2,t_1,c_2
- rd %y,t_2 !=
- addxcc c_3,t_2,c_3
- addx %g0,%g0,c_1
- addcc c_2,t_1,c_2
- addxcc c_3,t_2,c_3 !=
- addx c_1,%g0,c_1
- umul a_6,a_4,t_1 !sqr_add_c2(a,6,4,c2,c3,c1);
- addcc c_2,t_1,c_2
- rd %y,t_2 !=
- addxcc c_3,t_2,c_3
- addx c_1,%g0,c_1
- addcc c_2,t_1,c_2
- addxcc c_3,t_2,c_3 !=
- addx c_1,%g0,c_1
- umul a_5,a_5,t_1 !sqr_add_c(a,5,c2,c3,c1);
- addcc c_2,t_1,c_2
- rd %y,t_2 !=
- addxcc c_3,t_2,c_3
- addx c_1,%g0,c_1
- st c_2,rp(10) !r[10]=c2;
- umul a_4,a_7,t_1 !=!sqr_add_c2(a,7,4,c3,c1,c2);
- addcc c_3,t_1,c_3
- rd %y,t_2
- addxcc c_1,t_2,c_1
- addx %g0,%g0,c_2 !=
- addcc c_3,t_1,c_3
- addxcc c_1,t_2,c_1
- addx c_2,%g0,c_2
- umul a_5,a_6,t_1 !=!sqr_add_c2(a,6,5,c3,c1,c2);
- addcc c_3,t_1,c_3
- rd %y,t_2
- addxcc c_1,t_2,c_1
- addx c_2,%g0,c_2 !=
- addcc c_3,t_1,c_3
- addxcc c_1,t_2,c_1
- st c_3,rp(11) !r[11]=c3;
- addx c_2,%g0,c_2 !=
- umul a_7,a_5,t_1 !sqr_add_c2(a,7,5,c1,c2,c3);
- addcc c_1,t_1,c_1
- rd %y,t_2
- addxcc c_2,t_2,c_2 !=
- addx %g0,%g0,c_3
- addcc c_1,t_1,c_1
- addxcc c_2,t_2,c_2
- addx c_3,%g0,c_3 !=
- umul a_6,a_6,t_1 !sqr_add_c(a,6,c1,c2,c3);
- addcc c_1,t_1,c_1
- rd %y,t_2
- addxcc c_2,t_2,c_2 !=
- addx c_3,%g0,c_3
- st c_1,rp(12) !r[12]=c1;
- umul a_6,a_7,t_1 !sqr_add_c2(a,7,6,c2,c3,c1);
- addcc c_2,t_1,c_2 !=
- rd %y,t_2
- addxcc c_3,t_2,c_3
- addx %g0,%g0,c_1
- addcc c_2,t_1,c_2 !=
- addxcc c_3,t_2,c_3
- st c_2,rp(13) !r[13]=c2;
- addx c_1,%g0,c_1 !=
- umul a_7,a_7,t_1 !sqr_add_c(a,7,c3,c1,c2);
- addcc c_3,t_1,c_3
- rd %y,t_2
- addxcc c_1,t_2,c_1 !=
- st c_3,rp(14) !r[14]=c3;
- st c_1,rp(15) !r[15]=c1;
- ret
- restore %g0,%g0,%o0
- .type bn_sqr_comba8,#function
- .size bn_sqr_comba8,(.-bn_sqr_comba8)
- .align 32
- .global bn_sqr_comba4
- /*
- * void bn_sqr_comba4(r,a)
- * BN_ULONG *r,*a;
- */
- bn_sqr_comba4:
- save %sp,FRAME_SIZE,%sp
- ld ap(0),a_0
- umul a_0,a_0,c_1 !sqr_add_c(a,0,c1,c2,c3);
- ld ap(1),a_1 !=
- rd %y,c_2
- st c_1,rp(0) !r[0]=c1;
- ld ap(2),a_2
- umul a_0,a_1,t_1 !=!sqr_add_c2(a,1,0,c2,c3,c1);
- addcc c_2,t_1,c_2
- rd %y,t_2
- addxcc %g0,t_2,c_3
- addx %g0,%g0,c_1 !=
- addcc c_2,t_1,c_2
- addxcc c_3,t_2,c_3
- addx c_1,%g0,c_1 !=
- st c_2,rp(1) !r[1]=c2;
- umul a_2,a_0,t_1 !sqr_add_c2(a,2,0,c3,c1,c2);
- addcc c_3,t_1,c_3
- rd %y,t_2 !=
- addxcc c_1,t_2,c_1
- addx %g0,%g0,c_2
- addcc c_3,t_1,c_3
- addxcc c_1,t_2,c_1 !=
- addx c_2,%g0,c_2
- ld ap(3),a_3
- umul a_1,a_1,t_1 !sqr_add_c(a,1,c3,c1,c2);
- addcc c_3,t_1,c_3 !=
- rd %y,t_2
- addxcc c_1,t_2,c_1
- st c_3,rp(2) !r[2]=c3;
- addx c_2,%g0,c_2 !=
- umul a_0,a_3,t_1 !sqr_add_c2(a,3,0,c1,c2,c3);
- addcc c_1,t_1,c_1
- rd %y,t_2
- addxcc c_2,t_2,c_2 !=
- addx %g0,%g0,c_3
- addcc c_1,t_1,c_1
- addxcc c_2,t_2,c_2
- addx c_3,%g0,c_3 !=
- umul a_1,a_2,t_1 !sqr_add_c2(a,2,1,c1,c2,c3);
- addcc c_1,t_1,c_1
- rd %y,t_2
- addxcc c_2,t_2,c_2 !=
- addx c_3,%g0,c_3
- addcc c_1,t_1,c_1
- addxcc c_2,t_2,c_2
- addx c_3,%g0,c_3 !=
- st c_1,rp(3) !r[3]=c1;
- umul a_3,a_1,t_1 !sqr_add_c2(a,3,1,c2,c3,c1);
- addcc c_2,t_1,c_2
- rd %y,t_2 !=
- addxcc c_3,t_2,c_3
- addx %g0,%g0,c_1
- addcc c_2,t_1,c_2
- addxcc c_3,t_2,c_3 !=
- addx c_1,%g0,c_1
- umul a_2,a_2,t_1 !sqr_add_c(a,2,c2,c3,c1);
- addcc c_2,t_1,c_2
- rd %y,t_2 !=
- addxcc c_3,t_2,c_3
- addx c_1,%g0,c_1
- st c_2,rp(4) !r[4]=c2;
- umul a_2,a_3,t_1 !=!sqr_add_c2(a,3,2,c3,c1,c2);
- addcc c_3,t_1,c_3
- rd %y,t_2
- addxcc c_1,t_2,c_1
- addx %g0,%g0,c_2 !=
- addcc c_3,t_1,c_3
- addxcc c_1,t_2,c_1
- st c_3,rp(5) !r[5]=c3;
- addx c_2,%g0,c_2 !=
- umul a_3,a_3,t_1 !sqr_add_c(a,3,c1,c2,c3);
- addcc c_1,t_1,c_1
- rd %y,t_2
- addxcc c_2,t_2,c_2 !=
- st c_1,rp(6) !r[6]=c1;
- st c_2,rp(7) !r[7]=c2;
- ret
- restore %g0,%g0,%o0
- .type bn_sqr_comba4,#function
- .size bn_sqr_comba4,(.-bn_sqr_comba4)
- .align 32
|