1*0a6a1f1dSLionel Sambuc.ident "sparcv8.s, Version 1.4" 2*0a6a1f1dSLionel Sambuc.ident "SPARC v8 ISA artwork by Andy Polyakov <appro@fy.chalmers.se>" 3*0a6a1f1dSLionel Sambuc 4*0a6a1f1dSLionel Sambuc/* 5*0a6a1f1dSLionel Sambuc * ==================================================================== 6*0a6a1f1dSLionel Sambuc * Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL 7*0a6a1f1dSLionel Sambuc * project. 8*0a6a1f1dSLionel Sambuc * 9*0a6a1f1dSLionel Sambuc * Rights for redistribution and usage in source and binary forms are 10*0a6a1f1dSLionel Sambuc * granted according to the OpenSSL license. Warranty of any kind is 11*0a6a1f1dSLionel Sambuc * disclaimed. 12*0a6a1f1dSLionel Sambuc * ==================================================================== 13*0a6a1f1dSLionel Sambuc */ 14*0a6a1f1dSLionel Sambuc 15*0a6a1f1dSLionel Sambuc/* 16*0a6a1f1dSLionel Sambuc * This is my modest contributon to OpenSSL project (see 17*0a6a1f1dSLionel Sambuc * http://www.openssl.org/ for more information about it) and is 18*0a6a1f1dSLionel Sambuc * a drop-in SuperSPARC ISA replacement for crypto/bn/bn_asm.c 19*0a6a1f1dSLionel Sambuc * module. For updates see http://fy.chalmers.se/~appro/hpe/. 20*0a6a1f1dSLionel Sambuc * 21*0a6a1f1dSLionel Sambuc * See bn_asm.sparc.v8plus.S for more details. 22*0a6a1f1dSLionel Sambuc */ 23*0a6a1f1dSLionel Sambuc 24*0a6a1f1dSLionel Sambuc/* 25*0a6a1f1dSLionel Sambuc * Revision history. 26*0a6a1f1dSLionel Sambuc * 27*0a6a1f1dSLionel Sambuc * 1.1 - new loop unrolling model(*); 28*0a6a1f1dSLionel Sambuc * 1.2 - made gas friendly; 29*0a6a1f1dSLionel Sambuc * 1.3 - fixed problem with /usr/ccs/lib/cpp; 30*0a6a1f1dSLionel Sambuc * 1.4 - some retunes; 31*0a6a1f1dSLionel Sambuc * 32*0a6a1f1dSLionel Sambuc * (*) see bn_asm.sparc.v8plus.S for details 33*0a6a1f1dSLionel Sambuc */ 34*0a6a1f1dSLionel Sambuc 35*0a6a1f1dSLionel Sambuc.section ".text",#alloc,#execinstr 36*0a6a1f1dSLionel Sambuc.file "bn_asm.sparc.v8.S" 37*0a6a1f1dSLionel Sambuc 38*0a6a1f1dSLionel Sambuc.align 32 39*0a6a1f1dSLionel Sambuc 40*0a6a1f1dSLionel Sambuc.global bn_mul_add_words 41*0a6a1f1dSLionel Sambuc/* 42*0a6a1f1dSLionel Sambuc * BN_ULONG bn_mul_add_words(rp,ap,num,w) 43*0a6a1f1dSLionel Sambuc * BN_ULONG *rp,*ap; 44*0a6a1f1dSLionel Sambuc * int num; 45*0a6a1f1dSLionel Sambuc * BN_ULONG w; 46*0a6a1f1dSLionel Sambuc */ 47*0a6a1f1dSLionel Sambucbn_mul_add_words: 48*0a6a1f1dSLionel Sambuc cmp %o2,0 49*0a6a1f1dSLionel Sambuc bg,a .L_bn_mul_add_words_proceed 50*0a6a1f1dSLionel Sambuc ld [%o1],%g2 51*0a6a1f1dSLionel Sambuc retl 52*0a6a1f1dSLionel Sambuc clr %o0 53*0a6a1f1dSLionel Sambuc 54*0a6a1f1dSLionel Sambuc.L_bn_mul_add_words_proceed: 55*0a6a1f1dSLionel Sambuc andcc %o2,-4,%g0 56*0a6a1f1dSLionel Sambuc bz .L_bn_mul_add_words_tail 57*0a6a1f1dSLionel Sambuc clr %o5 58*0a6a1f1dSLionel Sambuc 59*0a6a1f1dSLionel Sambuc.L_bn_mul_add_words_loop: 60*0a6a1f1dSLionel Sambuc ld [%o0],%o4 61*0a6a1f1dSLionel Sambuc ld [%o1+4],%g3 62*0a6a1f1dSLionel Sambuc umul %o3,%g2,%g2 63*0a6a1f1dSLionel Sambuc rd %y,%g1 64*0a6a1f1dSLionel Sambuc addcc %o4,%o5,%o4 65*0a6a1f1dSLionel Sambuc addx %g1,0,%g1 66*0a6a1f1dSLionel Sambuc addcc %o4,%g2,%o4 67*0a6a1f1dSLionel Sambuc st %o4,[%o0] 68*0a6a1f1dSLionel Sambuc addx %g1,0,%o5 69*0a6a1f1dSLionel Sambuc 70*0a6a1f1dSLionel Sambuc ld [%o0+4],%o4 71*0a6a1f1dSLionel Sambuc ld [%o1+8],%g2 72*0a6a1f1dSLionel Sambuc umul %o3,%g3,%g3 73*0a6a1f1dSLionel Sambuc dec 4,%o2 74*0a6a1f1dSLionel Sambuc rd %y,%g1 75*0a6a1f1dSLionel Sambuc addcc %o4,%o5,%o4 76*0a6a1f1dSLionel Sambuc addx %g1,0,%g1 77*0a6a1f1dSLionel Sambuc addcc %o4,%g3,%o4 78*0a6a1f1dSLionel Sambuc st %o4,[%o0+4] 79*0a6a1f1dSLionel Sambuc addx %g1,0,%o5 80*0a6a1f1dSLionel Sambuc 81*0a6a1f1dSLionel Sambuc ld [%o0+8],%o4 82*0a6a1f1dSLionel Sambuc ld [%o1+12],%g3 83*0a6a1f1dSLionel Sambuc umul %o3,%g2,%g2 84*0a6a1f1dSLionel Sambuc inc 16,%o1 85*0a6a1f1dSLionel Sambuc rd %y,%g1 86*0a6a1f1dSLionel Sambuc addcc %o4,%o5,%o4 87*0a6a1f1dSLionel Sambuc addx %g1,0,%g1 88*0a6a1f1dSLionel Sambuc addcc %o4,%g2,%o4 89*0a6a1f1dSLionel Sambuc st %o4,[%o0+8] 90*0a6a1f1dSLionel Sambuc addx %g1,0,%o5 91*0a6a1f1dSLionel Sambuc 92*0a6a1f1dSLionel Sambuc ld [%o0+12],%o4 93*0a6a1f1dSLionel Sambuc umul %o3,%g3,%g3 94*0a6a1f1dSLionel Sambuc inc 16,%o0 95*0a6a1f1dSLionel Sambuc rd %y,%g1 96*0a6a1f1dSLionel Sambuc addcc %o4,%o5,%o4 97*0a6a1f1dSLionel Sambuc addx %g1,0,%g1 98*0a6a1f1dSLionel Sambuc addcc %o4,%g3,%o4 99*0a6a1f1dSLionel Sambuc st %o4,[%o0-4] 100*0a6a1f1dSLionel Sambuc addx %g1,0,%o5 101*0a6a1f1dSLionel Sambuc andcc %o2,-4,%g0 102*0a6a1f1dSLionel Sambuc bnz,a .L_bn_mul_add_words_loop 103*0a6a1f1dSLionel Sambuc ld [%o1],%g2 104*0a6a1f1dSLionel Sambuc 105*0a6a1f1dSLionel Sambuc tst %o2 106*0a6a1f1dSLionel Sambuc bnz,a .L_bn_mul_add_words_tail 107*0a6a1f1dSLionel Sambuc ld [%o1],%g2 108*0a6a1f1dSLionel Sambuc.L_bn_mul_add_words_return: 109*0a6a1f1dSLionel Sambuc retl 110*0a6a1f1dSLionel Sambuc mov %o5,%o0 111*0a6a1f1dSLionel Sambuc nop 112*0a6a1f1dSLionel Sambuc 113*0a6a1f1dSLionel Sambuc.L_bn_mul_add_words_tail: 114*0a6a1f1dSLionel Sambuc ld [%o0],%o4 115*0a6a1f1dSLionel Sambuc umul %o3,%g2,%g2 116*0a6a1f1dSLionel Sambuc addcc %o4,%o5,%o4 117*0a6a1f1dSLionel Sambuc rd %y,%g1 118*0a6a1f1dSLionel Sambuc addx %g1,0,%g1 119*0a6a1f1dSLionel Sambuc addcc %o4,%g2,%o4 120*0a6a1f1dSLionel Sambuc addx %g1,0,%o5 121*0a6a1f1dSLionel Sambuc deccc %o2 122*0a6a1f1dSLionel Sambuc bz .L_bn_mul_add_words_return 123*0a6a1f1dSLionel Sambuc st %o4,[%o0] 124*0a6a1f1dSLionel Sambuc 125*0a6a1f1dSLionel Sambuc ld [%o1+4],%g2 126*0a6a1f1dSLionel Sambuc ld [%o0+4],%o4 127*0a6a1f1dSLionel Sambuc umul %o3,%g2,%g2 128*0a6a1f1dSLionel Sambuc rd %y,%g1 129*0a6a1f1dSLionel Sambuc addcc %o4,%o5,%o4 130*0a6a1f1dSLionel Sambuc addx %g1,0,%g1 131*0a6a1f1dSLionel Sambuc addcc %o4,%g2,%o4 132*0a6a1f1dSLionel Sambuc addx %g1,0,%o5 133*0a6a1f1dSLionel Sambuc deccc %o2 134*0a6a1f1dSLionel Sambuc bz .L_bn_mul_add_words_return 135*0a6a1f1dSLionel Sambuc st %o4,[%o0+4] 136*0a6a1f1dSLionel Sambuc 137*0a6a1f1dSLionel Sambuc ld [%o1+8],%g2 138*0a6a1f1dSLionel Sambuc ld [%o0+8],%o4 139*0a6a1f1dSLionel Sambuc umul %o3,%g2,%g2 140*0a6a1f1dSLionel Sambuc rd %y,%g1 141*0a6a1f1dSLionel Sambuc addcc %o4,%o5,%o4 142*0a6a1f1dSLionel Sambuc addx %g1,0,%g1 143*0a6a1f1dSLionel Sambuc addcc %o4,%g2,%o4 144*0a6a1f1dSLionel Sambuc st %o4,[%o0+8] 145*0a6a1f1dSLionel Sambuc retl 146*0a6a1f1dSLionel Sambuc addx %g1,0,%o0 147*0a6a1f1dSLionel Sambuc 148*0a6a1f1dSLionel Sambuc.type bn_mul_add_words,#function 149*0a6a1f1dSLionel Sambuc.size bn_mul_add_words,(.-bn_mul_add_words) 150*0a6a1f1dSLionel Sambuc 151*0a6a1f1dSLionel Sambuc.align 32 152*0a6a1f1dSLionel Sambuc 153*0a6a1f1dSLionel Sambuc.global bn_mul_words 154*0a6a1f1dSLionel Sambuc/* 155*0a6a1f1dSLionel Sambuc * BN_ULONG bn_mul_words(rp,ap,num,w) 156*0a6a1f1dSLionel Sambuc * BN_ULONG *rp,*ap; 157*0a6a1f1dSLionel Sambuc * int num; 158*0a6a1f1dSLionel Sambuc * BN_ULONG w; 159*0a6a1f1dSLionel Sambuc */ 160*0a6a1f1dSLionel Sambucbn_mul_words: 161*0a6a1f1dSLionel Sambuc cmp %o2,0 162*0a6a1f1dSLionel Sambuc bg,a .L_bn_mul_words_proceeed 163*0a6a1f1dSLionel Sambuc ld [%o1],%g2 164*0a6a1f1dSLionel Sambuc retl 165*0a6a1f1dSLionel Sambuc clr %o0 166*0a6a1f1dSLionel Sambuc 167*0a6a1f1dSLionel Sambuc.L_bn_mul_words_proceeed: 168*0a6a1f1dSLionel Sambuc andcc %o2,-4,%g0 169*0a6a1f1dSLionel Sambuc bz .L_bn_mul_words_tail 170*0a6a1f1dSLionel Sambuc clr %o5 171*0a6a1f1dSLionel Sambuc 172*0a6a1f1dSLionel Sambuc.L_bn_mul_words_loop: 173*0a6a1f1dSLionel Sambuc ld [%o1+4],%g3 174*0a6a1f1dSLionel Sambuc umul %o3,%g2,%g2 175*0a6a1f1dSLionel Sambuc addcc %g2,%o5,%g2 176*0a6a1f1dSLionel Sambuc rd %y,%g1 177*0a6a1f1dSLionel Sambuc addx %g1,0,%o5 178*0a6a1f1dSLionel Sambuc st %g2,[%o0] 179*0a6a1f1dSLionel Sambuc 180*0a6a1f1dSLionel Sambuc ld [%o1+8],%g2 181*0a6a1f1dSLionel Sambuc umul %o3,%g3,%g3 182*0a6a1f1dSLionel Sambuc addcc %g3,%o5,%g3 183*0a6a1f1dSLionel Sambuc rd %y,%g1 184*0a6a1f1dSLionel Sambuc dec 4,%o2 185*0a6a1f1dSLionel Sambuc addx %g1,0,%o5 186*0a6a1f1dSLionel Sambuc st %g3,[%o0+4] 187*0a6a1f1dSLionel Sambuc 188*0a6a1f1dSLionel Sambuc ld [%o1+12],%g3 189*0a6a1f1dSLionel Sambuc umul %o3,%g2,%g2 190*0a6a1f1dSLionel Sambuc addcc %g2,%o5,%g2 191*0a6a1f1dSLionel Sambuc rd %y,%g1 192*0a6a1f1dSLionel Sambuc inc 16,%o1 193*0a6a1f1dSLionel Sambuc st %g2,[%o0+8] 194*0a6a1f1dSLionel Sambuc addx %g1,0,%o5 195*0a6a1f1dSLionel Sambuc 196*0a6a1f1dSLionel Sambuc umul %o3,%g3,%g3 197*0a6a1f1dSLionel Sambuc addcc %g3,%o5,%g3 198*0a6a1f1dSLionel Sambuc rd %y,%g1 199*0a6a1f1dSLionel Sambuc inc 16,%o0 200*0a6a1f1dSLionel Sambuc addx %g1,0,%o5 201*0a6a1f1dSLionel Sambuc st %g3,[%o0-4] 202*0a6a1f1dSLionel Sambuc andcc %o2,-4,%g0 203*0a6a1f1dSLionel Sambuc nop 204*0a6a1f1dSLionel Sambuc bnz,a .L_bn_mul_words_loop 205*0a6a1f1dSLionel Sambuc ld [%o1],%g2 206*0a6a1f1dSLionel Sambuc 207*0a6a1f1dSLionel Sambuc tst %o2 208*0a6a1f1dSLionel Sambuc bnz,a .L_bn_mul_words_tail 209*0a6a1f1dSLionel Sambuc ld [%o1],%g2 210*0a6a1f1dSLionel Sambuc.L_bn_mul_words_return: 211*0a6a1f1dSLionel Sambuc retl 212*0a6a1f1dSLionel Sambuc mov %o5,%o0 213*0a6a1f1dSLionel Sambuc nop 214*0a6a1f1dSLionel Sambuc 215*0a6a1f1dSLionel Sambuc.L_bn_mul_words_tail: 216*0a6a1f1dSLionel Sambuc umul %o3,%g2,%g2 217*0a6a1f1dSLionel Sambuc addcc %g2,%o5,%g2 218*0a6a1f1dSLionel Sambuc rd %y,%g1 219*0a6a1f1dSLionel Sambuc addx %g1,0,%o5 220*0a6a1f1dSLionel Sambuc deccc %o2 221*0a6a1f1dSLionel Sambuc bz .L_bn_mul_words_return 222*0a6a1f1dSLionel Sambuc st %g2,[%o0] 223*0a6a1f1dSLionel Sambuc nop 224*0a6a1f1dSLionel Sambuc 225*0a6a1f1dSLionel Sambuc ld [%o1+4],%g2 226*0a6a1f1dSLionel Sambuc umul %o3,%g2,%g2 227*0a6a1f1dSLionel Sambuc addcc %g2,%o5,%g2 228*0a6a1f1dSLionel Sambuc rd %y,%g1 229*0a6a1f1dSLionel Sambuc addx %g1,0,%o5 230*0a6a1f1dSLionel Sambuc deccc %o2 231*0a6a1f1dSLionel Sambuc bz .L_bn_mul_words_return 232*0a6a1f1dSLionel Sambuc st %g2,[%o0+4] 233*0a6a1f1dSLionel Sambuc 234*0a6a1f1dSLionel Sambuc ld [%o1+8],%g2 235*0a6a1f1dSLionel Sambuc umul %o3,%g2,%g2 236*0a6a1f1dSLionel Sambuc addcc %g2,%o5,%g2 237*0a6a1f1dSLionel Sambuc rd %y,%g1 238*0a6a1f1dSLionel Sambuc st %g2,[%o0+8] 239*0a6a1f1dSLionel Sambuc retl 240*0a6a1f1dSLionel Sambuc addx %g1,0,%o0 241*0a6a1f1dSLionel Sambuc 242*0a6a1f1dSLionel Sambuc.type bn_mul_words,#function 243*0a6a1f1dSLionel Sambuc.size bn_mul_words,(.-bn_mul_words) 244*0a6a1f1dSLionel Sambuc 245*0a6a1f1dSLionel Sambuc.align 32 246*0a6a1f1dSLionel Sambuc.global bn_sqr_words 247*0a6a1f1dSLionel Sambuc/* 248*0a6a1f1dSLionel Sambuc * void bn_sqr_words(r,a,n) 249*0a6a1f1dSLionel Sambuc * BN_ULONG *r,*a; 250*0a6a1f1dSLionel Sambuc * int n; 251*0a6a1f1dSLionel Sambuc */ 252*0a6a1f1dSLionel Sambucbn_sqr_words: 253*0a6a1f1dSLionel Sambuc cmp %o2,0 254*0a6a1f1dSLionel Sambuc bg,a .L_bn_sqr_words_proceeed 255*0a6a1f1dSLionel Sambuc ld [%o1],%g2 256*0a6a1f1dSLionel Sambuc retl 257*0a6a1f1dSLionel Sambuc clr %o0 258*0a6a1f1dSLionel Sambuc 259*0a6a1f1dSLionel Sambuc.L_bn_sqr_words_proceeed: 260*0a6a1f1dSLionel Sambuc andcc %o2,-4,%g0 261*0a6a1f1dSLionel Sambuc bz .L_bn_sqr_words_tail 262*0a6a1f1dSLionel Sambuc clr %o5 263*0a6a1f1dSLionel Sambuc 264*0a6a1f1dSLionel Sambuc.L_bn_sqr_words_loop: 265*0a6a1f1dSLionel Sambuc ld [%o1+4],%g3 266*0a6a1f1dSLionel Sambuc umul %g2,%g2,%o4 267*0a6a1f1dSLionel Sambuc st %o4,[%o0] 268*0a6a1f1dSLionel Sambuc rd %y,%o5 269*0a6a1f1dSLionel Sambuc st %o5,[%o0+4] 270*0a6a1f1dSLionel Sambuc 271*0a6a1f1dSLionel Sambuc ld [%o1+8],%g2 272*0a6a1f1dSLionel Sambuc umul %g3,%g3,%o4 273*0a6a1f1dSLionel Sambuc dec 4,%o2 274*0a6a1f1dSLionel Sambuc st %o4,[%o0+8] 275*0a6a1f1dSLionel Sambuc rd %y,%o5 276*0a6a1f1dSLionel Sambuc st %o5,[%o0+12] 277*0a6a1f1dSLionel Sambuc nop 278*0a6a1f1dSLionel Sambuc 279*0a6a1f1dSLionel Sambuc ld [%o1+12],%g3 280*0a6a1f1dSLionel Sambuc umul %g2,%g2,%o4 281*0a6a1f1dSLionel Sambuc st %o4,[%o0+16] 282*0a6a1f1dSLionel Sambuc rd %y,%o5 283*0a6a1f1dSLionel Sambuc inc 16,%o1 284*0a6a1f1dSLionel Sambuc st %o5,[%o0+20] 285*0a6a1f1dSLionel Sambuc 286*0a6a1f1dSLionel Sambuc umul %g3,%g3,%o4 287*0a6a1f1dSLionel Sambuc inc 32,%o0 288*0a6a1f1dSLionel Sambuc st %o4,[%o0-8] 289*0a6a1f1dSLionel Sambuc rd %y,%o5 290*0a6a1f1dSLionel Sambuc st %o5,[%o0-4] 291*0a6a1f1dSLionel Sambuc andcc %o2,-4,%g2 292*0a6a1f1dSLionel Sambuc bnz,a .L_bn_sqr_words_loop 293*0a6a1f1dSLionel Sambuc ld [%o1],%g2 294*0a6a1f1dSLionel Sambuc 295*0a6a1f1dSLionel Sambuc tst %o2 296*0a6a1f1dSLionel Sambuc nop 297*0a6a1f1dSLionel Sambuc bnz,a .L_bn_sqr_words_tail 298*0a6a1f1dSLionel Sambuc ld [%o1],%g2 299*0a6a1f1dSLionel Sambuc.L_bn_sqr_words_return: 300*0a6a1f1dSLionel Sambuc retl 301*0a6a1f1dSLionel Sambuc clr %o0 302*0a6a1f1dSLionel Sambuc 303*0a6a1f1dSLionel Sambuc.L_bn_sqr_words_tail: 304*0a6a1f1dSLionel Sambuc umul %g2,%g2,%o4 305*0a6a1f1dSLionel Sambuc st %o4,[%o0] 306*0a6a1f1dSLionel Sambuc deccc %o2 307*0a6a1f1dSLionel Sambuc rd %y,%o5 308*0a6a1f1dSLionel Sambuc bz .L_bn_sqr_words_return 309*0a6a1f1dSLionel Sambuc st %o5,[%o0+4] 310*0a6a1f1dSLionel Sambuc 311*0a6a1f1dSLionel Sambuc ld [%o1+4],%g2 312*0a6a1f1dSLionel Sambuc umul %g2,%g2,%o4 313*0a6a1f1dSLionel Sambuc st %o4,[%o0+8] 314*0a6a1f1dSLionel Sambuc deccc %o2 315*0a6a1f1dSLionel Sambuc rd %y,%o5 316*0a6a1f1dSLionel Sambuc nop 317*0a6a1f1dSLionel Sambuc bz .L_bn_sqr_words_return 318*0a6a1f1dSLionel Sambuc st %o5,[%o0+12] 319*0a6a1f1dSLionel Sambuc 320*0a6a1f1dSLionel Sambuc ld [%o1+8],%g2 321*0a6a1f1dSLionel Sambuc umul %g2,%g2,%o4 322*0a6a1f1dSLionel Sambuc st %o4,[%o0+16] 323*0a6a1f1dSLionel Sambuc rd %y,%o5 324*0a6a1f1dSLionel Sambuc st %o5,[%o0+20] 325*0a6a1f1dSLionel Sambuc retl 326*0a6a1f1dSLionel Sambuc clr %o0 327*0a6a1f1dSLionel Sambuc 328*0a6a1f1dSLionel Sambuc.type bn_sqr_words,#function 329*0a6a1f1dSLionel Sambuc.size bn_sqr_words,(.-bn_sqr_words) 330*0a6a1f1dSLionel Sambuc 331*0a6a1f1dSLionel Sambuc.align 32 332*0a6a1f1dSLionel Sambuc 333*0a6a1f1dSLionel Sambuc.global bn_div_words 334*0a6a1f1dSLionel Sambuc/* 335*0a6a1f1dSLionel Sambuc * BN_ULONG bn_div_words(h,l,d) 336*0a6a1f1dSLionel Sambuc * BN_ULONG h,l,d; 337*0a6a1f1dSLionel Sambuc */ 338*0a6a1f1dSLionel Sambucbn_div_words: 339*0a6a1f1dSLionel Sambuc wr %o0,%y 340*0a6a1f1dSLionel Sambuc udiv %o1,%o2,%o0 341*0a6a1f1dSLionel Sambuc retl 342*0a6a1f1dSLionel Sambuc nop 343*0a6a1f1dSLionel Sambuc 344*0a6a1f1dSLionel Sambuc.type bn_div_words,#function 345*0a6a1f1dSLionel Sambuc.size bn_div_words,(.-bn_div_words) 346*0a6a1f1dSLionel Sambuc 347*0a6a1f1dSLionel Sambuc.align 32 348*0a6a1f1dSLionel Sambuc 349*0a6a1f1dSLionel Sambuc.global bn_add_words 350*0a6a1f1dSLionel Sambuc/* 351*0a6a1f1dSLionel Sambuc * BN_ULONG bn_add_words(rp,ap,bp,n) 352*0a6a1f1dSLionel Sambuc * BN_ULONG *rp,*ap,*bp; 353*0a6a1f1dSLionel Sambuc * int n; 354*0a6a1f1dSLionel Sambuc */ 355*0a6a1f1dSLionel Sambucbn_add_words: 356*0a6a1f1dSLionel Sambuc cmp %o3,0 357*0a6a1f1dSLionel Sambuc bg,a .L_bn_add_words_proceed 358*0a6a1f1dSLionel Sambuc ld [%o1],%o4 359*0a6a1f1dSLionel Sambuc retl 360*0a6a1f1dSLionel Sambuc clr %o0 361*0a6a1f1dSLionel Sambuc 362*0a6a1f1dSLionel Sambuc.L_bn_add_words_proceed: 363*0a6a1f1dSLionel Sambuc andcc %o3,-4,%g0 364*0a6a1f1dSLionel Sambuc bz .L_bn_add_words_tail 365*0a6a1f1dSLionel Sambuc clr %g1 366*0a6a1f1dSLionel Sambuc ba .L_bn_add_words_warn_loop 367*0a6a1f1dSLionel Sambuc addcc %g0,0,%g0 ! clear carry flag 368*0a6a1f1dSLionel Sambuc 369*0a6a1f1dSLionel Sambuc.L_bn_add_words_loop: 370*0a6a1f1dSLionel Sambuc ld [%o1],%o4 371*0a6a1f1dSLionel Sambuc.L_bn_add_words_warn_loop: 372*0a6a1f1dSLionel Sambuc ld [%o2],%o5 373*0a6a1f1dSLionel Sambuc ld [%o1+4],%g3 374*0a6a1f1dSLionel Sambuc ld [%o2+4],%g4 375*0a6a1f1dSLionel Sambuc dec 4,%o3 376*0a6a1f1dSLionel Sambuc addxcc %o5,%o4,%o5 377*0a6a1f1dSLionel Sambuc st %o5,[%o0] 378*0a6a1f1dSLionel Sambuc 379*0a6a1f1dSLionel Sambuc ld [%o1+8],%o4 380*0a6a1f1dSLionel Sambuc ld [%o2+8],%o5 381*0a6a1f1dSLionel Sambuc inc 16,%o1 382*0a6a1f1dSLionel Sambuc addxcc %g3,%g4,%g3 383*0a6a1f1dSLionel Sambuc st %g3,[%o0+4] 384*0a6a1f1dSLionel Sambuc 385*0a6a1f1dSLionel Sambuc ld [%o1-4],%g3 386*0a6a1f1dSLionel Sambuc ld [%o2+12],%g4 387*0a6a1f1dSLionel Sambuc inc 16,%o2 388*0a6a1f1dSLionel Sambuc addxcc %o5,%o4,%o5 389*0a6a1f1dSLionel Sambuc st %o5,[%o0+8] 390*0a6a1f1dSLionel Sambuc 391*0a6a1f1dSLionel Sambuc inc 16,%o0 392*0a6a1f1dSLionel Sambuc addxcc %g3,%g4,%g3 393*0a6a1f1dSLionel Sambuc st %g3,[%o0-4] 394*0a6a1f1dSLionel Sambuc addx %g0,0,%g1 395*0a6a1f1dSLionel Sambuc andcc %o3,-4,%g0 396*0a6a1f1dSLionel Sambuc bnz,a .L_bn_add_words_loop 397*0a6a1f1dSLionel Sambuc addcc %g1,-1,%g0 398*0a6a1f1dSLionel Sambuc 399*0a6a1f1dSLionel Sambuc tst %o3 400*0a6a1f1dSLionel Sambuc bnz,a .L_bn_add_words_tail 401*0a6a1f1dSLionel Sambuc ld [%o1],%o4 402*0a6a1f1dSLionel Sambuc.L_bn_add_words_return: 403*0a6a1f1dSLionel Sambuc retl 404*0a6a1f1dSLionel Sambuc mov %g1,%o0 405*0a6a1f1dSLionel Sambuc 406*0a6a1f1dSLionel Sambuc.L_bn_add_words_tail: 407*0a6a1f1dSLionel Sambuc addcc %g1,-1,%g0 408*0a6a1f1dSLionel Sambuc ld [%o2],%o5 409*0a6a1f1dSLionel Sambuc addxcc %o5,%o4,%o5 410*0a6a1f1dSLionel Sambuc addx %g0,0,%g1 411*0a6a1f1dSLionel Sambuc deccc %o3 412*0a6a1f1dSLionel Sambuc bz .L_bn_add_words_return 413*0a6a1f1dSLionel Sambuc st %o5,[%o0] 414*0a6a1f1dSLionel Sambuc 415*0a6a1f1dSLionel Sambuc ld [%o1+4],%o4 416*0a6a1f1dSLionel Sambuc addcc %g1,-1,%g0 417*0a6a1f1dSLionel Sambuc ld [%o2+4],%o5 418*0a6a1f1dSLionel Sambuc addxcc %o5,%o4,%o5 419*0a6a1f1dSLionel Sambuc addx %g0,0,%g1 420*0a6a1f1dSLionel Sambuc deccc %o3 421*0a6a1f1dSLionel Sambuc bz .L_bn_add_words_return 422*0a6a1f1dSLionel Sambuc st %o5,[%o0+4] 423*0a6a1f1dSLionel Sambuc 424*0a6a1f1dSLionel Sambuc ld [%o1+8],%o4 425*0a6a1f1dSLionel Sambuc addcc %g1,-1,%g0 426*0a6a1f1dSLionel Sambuc ld [%o2+8],%o5 427*0a6a1f1dSLionel Sambuc addxcc %o5,%o4,%o5 428*0a6a1f1dSLionel Sambuc st %o5,[%o0+8] 429*0a6a1f1dSLionel Sambuc retl 430*0a6a1f1dSLionel Sambuc addx %g0,0,%o0 431*0a6a1f1dSLionel Sambuc 432*0a6a1f1dSLionel Sambuc.type bn_add_words,#function 433*0a6a1f1dSLionel Sambuc.size bn_add_words,(.-bn_add_words) 434*0a6a1f1dSLionel Sambuc 435*0a6a1f1dSLionel Sambuc.align 32 436*0a6a1f1dSLionel Sambuc 437*0a6a1f1dSLionel Sambuc.global bn_sub_words 438*0a6a1f1dSLionel Sambuc/* 439*0a6a1f1dSLionel Sambuc * BN_ULONG bn_sub_words(rp,ap,bp,n) 440*0a6a1f1dSLionel Sambuc * BN_ULONG *rp,*ap,*bp; 441*0a6a1f1dSLionel Sambuc * int n; 442*0a6a1f1dSLionel Sambuc */ 443*0a6a1f1dSLionel Sambucbn_sub_words: 444*0a6a1f1dSLionel Sambuc cmp %o3,0 445*0a6a1f1dSLionel Sambuc bg,a .L_bn_sub_words_proceed 446*0a6a1f1dSLionel Sambuc ld [%o1],%o4 447*0a6a1f1dSLionel Sambuc retl 448*0a6a1f1dSLionel Sambuc clr %o0 449*0a6a1f1dSLionel Sambuc 450*0a6a1f1dSLionel Sambuc.L_bn_sub_words_proceed: 451*0a6a1f1dSLionel Sambuc andcc %o3,-4,%g0 452*0a6a1f1dSLionel Sambuc bz .L_bn_sub_words_tail 453*0a6a1f1dSLionel Sambuc clr %g1 454*0a6a1f1dSLionel Sambuc ba .L_bn_sub_words_warm_loop 455*0a6a1f1dSLionel Sambuc addcc %g0,0,%g0 ! clear carry flag 456*0a6a1f1dSLionel Sambuc 457*0a6a1f1dSLionel Sambuc.L_bn_sub_words_loop: 458*0a6a1f1dSLionel Sambuc ld [%o1],%o4 459*0a6a1f1dSLionel Sambuc.L_bn_sub_words_warm_loop: 460*0a6a1f1dSLionel Sambuc ld [%o2],%o5 461*0a6a1f1dSLionel Sambuc ld [%o1+4],%g3 462*0a6a1f1dSLionel Sambuc ld [%o2+4],%g4 463*0a6a1f1dSLionel Sambuc dec 4,%o3 464*0a6a1f1dSLionel Sambuc subxcc %o4,%o5,%o5 465*0a6a1f1dSLionel Sambuc st %o5,[%o0] 466*0a6a1f1dSLionel Sambuc 467*0a6a1f1dSLionel Sambuc ld [%o1+8],%o4 468*0a6a1f1dSLionel Sambuc ld [%o2+8],%o5 469*0a6a1f1dSLionel Sambuc inc 16,%o1 470*0a6a1f1dSLionel Sambuc subxcc %g3,%g4,%g4 471*0a6a1f1dSLionel Sambuc st %g4,[%o0+4] 472*0a6a1f1dSLionel Sambuc 473*0a6a1f1dSLionel Sambuc ld [%o1-4],%g3 474*0a6a1f1dSLionel Sambuc ld [%o2+12],%g4 475*0a6a1f1dSLionel Sambuc inc 16,%o2 476*0a6a1f1dSLionel Sambuc subxcc %o4,%o5,%o5 477*0a6a1f1dSLionel Sambuc st %o5,[%o0+8] 478*0a6a1f1dSLionel Sambuc 479*0a6a1f1dSLionel Sambuc inc 16,%o0 480*0a6a1f1dSLionel Sambuc subxcc %g3,%g4,%g4 481*0a6a1f1dSLionel Sambuc st %g4,[%o0-4] 482*0a6a1f1dSLionel Sambuc addx %g0,0,%g1 483*0a6a1f1dSLionel Sambuc andcc %o3,-4,%g0 484*0a6a1f1dSLionel Sambuc bnz,a .L_bn_sub_words_loop 485*0a6a1f1dSLionel Sambuc addcc %g1,-1,%g0 486*0a6a1f1dSLionel Sambuc 487*0a6a1f1dSLionel Sambuc tst %o3 488*0a6a1f1dSLionel Sambuc nop 489*0a6a1f1dSLionel Sambuc bnz,a .L_bn_sub_words_tail 490*0a6a1f1dSLionel Sambuc ld [%o1],%o4 491*0a6a1f1dSLionel Sambuc.L_bn_sub_words_return: 492*0a6a1f1dSLionel Sambuc retl 493*0a6a1f1dSLionel Sambuc mov %g1,%o0 494*0a6a1f1dSLionel Sambuc 495*0a6a1f1dSLionel Sambuc.L_bn_sub_words_tail: 496*0a6a1f1dSLionel Sambuc addcc %g1,-1,%g0 497*0a6a1f1dSLionel Sambuc ld [%o2],%o5 498*0a6a1f1dSLionel Sambuc subxcc %o4,%o5,%o5 499*0a6a1f1dSLionel Sambuc addx %g0,0,%g1 500*0a6a1f1dSLionel Sambuc deccc %o3 501*0a6a1f1dSLionel Sambuc bz .L_bn_sub_words_return 502*0a6a1f1dSLionel Sambuc st %o5,[%o0] 503*0a6a1f1dSLionel Sambuc nop 504*0a6a1f1dSLionel Sambuc 505*0a6a1f1dSLionel Sambuc ld [%o1+4],%o4 506*0a6a1f1dSLionel Sambuc addcc %g1,-1,%g0 507*0a6a1f1dSLionel Sambuc ld [%o2+4],%o5 508*0a6a1f1dSLionel Sambuc subxcc %o4,%o5,%o5 509*0a6a1f1dSLionel Sambuc addx %g0,0,%g1 510*0a6a1f1dSLionel Sambuc deccc %o3 511*0a6a1f1dSLionel Sambuc bz .L_bn_sub_words_return 512*0a6a1f1dSLionel Sambuc st %o5,[%o0+4] 513*0a6a1f1dSLionel Sambuc 514*0a6a1f1dSLionel Sambuc ld [%o1+8],%o4 515*0a6a1f1dSLionel Sambuc addcc %g1,-1,%g0 516*0a6a1f1dSLionel Sambuc ld [%o2+8],%o5 517*0a6a1f1dSLionel Sambuc subxcc %o4,%o5,%o5 518*0a6a1f1dSLionel Sambuc st %o5,[%o0+8] 519*0a6a1f1dSLionel Sambuc retl 520*0a6a1f1dSLionel Sambuc addx %g0,0,%o0 521*0a6a1f1dSLionel Sambuc 522*0a6a1f1dSLionel Sambuc.type bn_sub_words,#function 523*0a6a1f1dSLionel Sambuc.size bn_sub_words,(.-bn_sub_words) 524*0a6a1f1dSLionel Sambuc 525*0a6a1f1dSLionel Sambuc#define FRAME_SIZE -96 526*0a6a1f1dSLionel Sambuc 527*0a6a1f1dSLionel Sambuc/* 528*0a6a1f1dSLionel Sambuc * Here is register usage map for *all* routines below. 529*0a6a1f1dSLionel Sambuc */ 530*0a6a1f1dSLionel Sambuc#define t_1 %o0 531*0a6a1f1dSLionel Sambuc#define t_2 %o1 532*0a6a1f1dSLionel Sambuc#define c_1 %o2 533*0a6a1f1dSLionel Sambuc#define c_2 %o3 534*0a6a1f1dSLionel Sambuc#define c_3 %o4 535*0a6a1f1dSLionel Sambuc 536*0a6a1f1dSLionel Sambuc#define ap(I) [%i1+4*I] 537*0a6a1f1dSLionel Sambuc#define bp(I) [%i2+4*I] 538*0a6a1f1dSLionel Sambuc#define rp(I) [%i0+4*I] 539*0a6a1f1dSLionel Sambuc 540*0a6a1f1dSLionel Sambuc#define a_0 %l0 541*0a6a1f1dSLionel Sambuc#define a_1 %l1 542*0a6a1f1dSLionel Sambuc#define a_2 %l2 543*0a6a1f1dSLionel Sambuc#define a_3 %l3 544*0a6a1f1dSLionel Sambuc#define a_4 %l4 545*0a6a1f1dSLionel Sambuc#define a_5 %l5 546*0a6a1f1dSLionel Sambuc#define a_6 %l6 547*0a6a1f1dSLionel Sambuc#define a_7 %l7 548*0a6a1f1dSLionel Sambuc 549*0a6a1f1dSLionel Sambuc#define b_0 %i3 550*0a6a1f1dSLionel Sambuc#define b_1 %i4 551*0a6a1f1dSLionel Sambuc#define b_2 %i5 552*0a6a1f1dSLionel Sambuc#define b_3 %o5 553*0a6a1f1dSLionel Sambuc#define b_4 %g1 554*0a6a1f1dSLionel Sambuc#define b_5 %g2 555*0a6a1f1dSLionel Sambuc#define b_6 %g3 556*0a6a1f1dSLionel Sambuc#define b_7 %g4 557*0a6a1f1dSLionel Sambuc 558*0a6a1f1dSLionel Sambuc.align 32 559*0a6a1f1dSLionel Sambuc.global bn_mul_comba8 560*0a6a1f1dSLionel Sambuc/* 561*0a6a1f1dSLionel Sambuc * void bn_mul_comba8(r,a,b) 562*0a6a1f1dSLionel Sambuc * BN_ULONG *r,*a,*b; 563*0a6a1f1dSLionel Sambuc */ 564*0a6a1f1dSLionel Sambucbn_mul_comba8: 565*0a6a1f1dSLionel Sambuc save %sp,FRAME_SIZE,%sp 566*0a6a1f1dSLionel Sambuc ld ap(0),a_0 567*0a6a1f1dSLionel Sambuc ld bp(0),b_0 568*0a6a1f1dSLionel Sambuc umul a_0,b_0,c_1 !=!mul_add_c(a[0],b[0],c1,c2,c3); 569*0a6a1f1dSLionel Sambuc ld bp(1),b_1 570*0a6a1f1dSLionel Sambuc rd %y,c_2 571*0a6a1f1dSLionel Sambuc st c_1,rp(0) !r[0]=c1; 572*0a6a1f1dSLionel Sambuc 573*0a6a1f1dSLionel Sambuc umul a_0,b_1,t_1 !=!mul_add_c(a[0],b[1],c2,c3,c1); 574*0a6a1f1dSLionel Sambuc ld ap(1),a_1 575*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 576*0a6a1f1dSLionel Sambuc rd %y,t_2 577*0a6a1f1dSLionel Sambuc addxcc %g0,t_2,c_3 != 578*0a6a1f1dSLionel Sambuc addx %g0,%g0,c_1 579*0a6a1f1dSLionel Sambuc ld ap(2),a_2 580*0a6a1f1dSLionel Sambuc umul a_1,b_0,t_1 !mul_add_c(a[1],b[0],c2,c3,c1); 581*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 != 582*0a6a1f1dSLionel Sambuc rd %y,t_2 583*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 584*0a6a1f1dSLionel Sambuc st c_2,rp(1) !r[1]=c2; 585*0a6a1f1dSLionel Sambuc addx c_1,%g0,c_1 != 586*0a6a1f1dSLionel Sambuc 587*0a6a1f1dSLionel Sambuc umul a_2,b_0,t_1 !mul_add_c(a[2],b[0],c3,c1,c2); 588*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 589*0a6a1f1dSLionel Sambuc rd %y,t_2 590*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 != 591*0a6a1f1dSLionel Sambuc addx %g0,%g0,c_2 592*0a6a1f1dSLionel Sambuc ld bp(2),b_2 593*0a6a1f1dSLionel Sambuc umul a_1,b_1,t_1 !mul_add_c(a[1],b[1],c3,c1,c2); 594*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 != 595*0a6a1f1dSLionel Sambuc rd %y,t_2 596*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 597*0a6a1f1dSLionel Sambuc ld bp(3),b_3 598*0a6a1f1dSLionel Sambuc addx c_2,%g0,c_2 != 599*0a6a1f1dSLionel Sambuc umul a_0,b_2,t_1 !mul_add_c(a[0],b[2],c3,c1,c2); 600*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 601*0a6a1f1dSLionel Sambuc rd %y,t_2 602*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 != 603*0a6a1f1dSLionel Sambuc addx c_2,%g0,c_2 604*0a6a1f1dSLionel Sambuc st c_3,rp(2) !r[2]=c3; 605*0a6a1f1dSLionel Sambuc 606*0a6a1f1dSLionel Sambuc umul a_0,b_3,t_1 !mul_add_c(a[0],b[3],c1,c2,c3); 607*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 != 608*0a6a1f1dSLionel Sambuc rd %y,t_2 609*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 610*0a6a1f1dSLionel Sambuc addx %g0,%g0,c_3 611*0a6a1f1dSLionel Sambuc umul a_1,b_2,t_1 !=!mul_add_c(a[1],b[2],c1,c2,c3); 612*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 613*0a6a1f1dSLionel Sambuc rd %y,t_2 614*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 615*0a6a1f1dSLionel Sambuc addx c_3,%g0,c_3 != 616*0a6a1f1dSLionel Sambuc ld ap(3),a_3 617*0a6a1f1dSLionel Sambuc umul a_2,b_1,t_1 !mul_add_c(a[2],b[1],c1,c2,c3); 618*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 619*0a6a1f1dSLionel Sambuc rd %y,t_2 != 620*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 621*0a6a1f1dSLionel Sambuc addx c_3,%g0,c_3 622*0a6a1f1dSLionel Sambuc ld ap(4),a_4 623*0a6a1f1dSLionel Sambuc umul a_3,b_0,t_1 !mul_add_c(a[3],b[0],c1,c2,c3);!= 624*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 625*0a6a1f1dSLionel Sambuc rd %y,t_2 626*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 627*0a6a1f1dSLionel Sambuc addx c_3,%g0,c_3 != 628*0a6a1f1dSLionel Sambuc st c_1,rp(3) !r[3]=c1; 629*0a6a1f1dSLionel Sambuc 630*0a6a1f1dSLionel Sambuc umul a_4,b_0,t_1 !mul_add_c(a[4],b[0],c2,c3,c1); 631*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 632*0a6a1f1dSLionel Sambuc rd %y,t_2 != 633*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 634*0a6a1f1dSLionel Sambuc addx %g0,%g0,c_1 635*0a6a1f1dSLionel Sambuc umul a_3,b_1,t_1 !mul_add_c(a[3],b[1],c2,c3,c1); 636*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 != 637*0a6a1f1dSLionel Sambuc rd %y,t_2 638*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 639*0a6a1f1dSLionel Sambuc addx c_1,%g0,c_1 640*0a6a1f1dSLionel Sambuc umul a_2,b_2,t_1 !=!mul_add_c(a[2],b[2],c2,c3,c1); 641*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 642*0a6a1f1dSLionel Sambuc rd %y,t_2 643*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 644*0a6a1f1dSLionel Sambuc addx c_1,%g0,c_1 != 645*0a6a1f1dSLionel Sambuc ld bp(4),b_4 646*0a6a1f1dSLionel Sambuc umul a_1,b_3,t_1 !mul_add_c(a[1],b[3],c2,c3,c1); 647*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 648*0a6a1f1dSLionel Sambuc rd %y,t_2 != 649*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 650*0a6a1f1dSLionel Sambuc addx c_1,%g0,c_1 651*0a6a1f1dSLionel Sambuc ld bp(5),b_5 652*0a6a1f1dSLionel Sambuc umul a_0,b_4,t_1 !=!mul_add_c(a[0],b[4],c2,c3,c1); 653*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 654*0a6a1f1dSLionel Sambuc rd %y,t_2 655*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 656*0a6a1f1dSLionel Sambuc addx c_1,%g0,c_1 != 657*0a6a1f1dSLionel Sambuc st c_2,rp(4) !r[4]=c2; 658*0a6a1f1dSLionel Sambuc 659*0a6a1f1dSLionel Sambuc umul a_0,b_5,t_1 !mul_add_c(a[0],b[5],c3,c1,c2); 660*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 661*0a6a1f1dSLionel Sambuc rd %y,t_2 != 662*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 663*0a6a1f1dSLionel Sambuc addx %g0,%g0,c_2 664*0a6a1f1dSLionel Sambuc umul a_1,b_4,t_1 !mul_add_c(a[1],b[4],c3,c1,c2); 665*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 != 666*0a6a1f1dSLionel Sambuc rd %y,t_2 667*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 668*0a6a1f1dSLionel Sambuc addx c_2,%g0,c_2 669*0a6a1f1dSLionel Sambuc umul a_2,b_3,t_1 !=!mul_add_c(a[2],b[3],c3,c1,c2); 670*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 671*0a6a1f1dSLionel Sambuc rd %y,t_2 672*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 673*0a6a1f1dSLionel Sambuc addx c_2,%g0,c_2 != 674*0a6a1f1dSLionel Sambuc umul a_3,b_2,t_1 !mul_add_c(a[3],b[2],c3,c1,c2); 675*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 676*0a6a1f1dSLionel Sambuc rd %y,t_2 677*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 != 678*0a6a1f1dSLionel Sambuc addx c_2,%g0,c_2 679*0a6a1f1dSLionel Sambuc ld ap(5),a_5 680*0a6a1f1dSLionel Sambuc umul a_4,b_1,t_1 !mul_add_c(a[4],b[1],c3,c1,c2); 681*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 != 682*0a6a1f1dSLionel Sambuc rd %y,t_2 683*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 684*0a6a1f1dSLionel Sambuc ld ap(6),a_6 685*0a6a1f1dSLionel Sambuc addx c_2,%g0,c_2 != 686*0a6a1f1dSLionel Sambuc umul a_5,b_0,t_1 !mul_add_c(a[5],b[0],c3,c1,c2); 687*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 688*0a6a1f1dSLionel Sambuc rd %y,t_2 689*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 != 690*0a6a1f1dSLionel Sambuc addx c_2,%g0,c_2 691*0a6a1f1dSLionel Sambuc st c_3,rp(5) !r[5]=c3; 692*0a6a1f1dSLionel Sambuc 693*0a6a1f1dSLionel Sambuc umul a_6,b_0,t_1 !mul_add_c(a[6],b[0],c1,c2,c3); 694*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 != 695*0a6a1f1dSLionel Sambuc rd %y,t_2 696*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 697*0a6a1f1dSLionel Sambuc addx %g0,%g0,c_3 698*0a6a1f1dSLionel Sambuc umul a_5,b_1,t_1 !=!mul_add_c(a[5],b[1],c1,c2,c3); 699*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 700*0a6a1f1dSLionel Sambuc rd %y,t_2 701*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 702*0a6a1f1dSLionel Sambuc addx c_3,%g0,c_3 != 703*0a6a1f1dSLionel Sambuc umul a_4,b_2,t_1 !mul_add_c(a[4],b[2],c1,c2,c3); 704*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 705*0a6a1f1dSLionel Sambuc rd %y,t_2 706*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 != 707*0a6a1f1dSLionel Sambuc addx c_3,%g0,c_3 708*0a6a1f1dSLionel Sambuc umul a_3,b_3,t_1 !mul_add_c(a[3],b[3],c1,c2,c3); 709*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 710*0a6a1f1dSLionel Sambuc rd %y,t_2 != 711*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 712*0a6a1f1dSLionel Sambuc addx c_3,%g0,c_3 713*0a6a1f1dSLionel Sambuc umul a_2,b_4,t_1 !mul_add_c(a[2],b[4],c1,c2,c3); 714*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 != 715*0a6a1f1dSLionel Sambuc rd %y,t_2 716*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 717*0a6a1f1dSLionel Sambuc ld bp(6),b_6 718*0a6a1f1dSLionel Sambuc addx c_3,%g0,c_3 != 719*0a6a1f1dSLionel Sambuc umul a_1,b_5,t_1 !mul_add_c(a[1],b[5],c1,c2,c3); 720*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 721*0a6a1f1dSLionel Sambuc rd %y,t_2 722*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 != 723*0a6a1f1dSLionel Sambuc addx c_3,%g0,c_3 724*0a6a1f1dSLionel Sambuc ld bp(7),b_7 725*0a6a1f1dSLionel Sambuc umul a_0,b_6,t_1 !mul_add_c(a[0],b[6],c1,c2,c3); 726*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 != 727*0a6a1f1dSLionel Sambuc rd %y,t_2 728*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 729*0a6a1f1dSLionel Sambuc st c_1,rp(6) !r[6]=c1; 730*0a6a1f1dSLionel Sambuc addx c_3,%g0,c_3 != 731*0a6a1f1dSLionel Sambuc 732*0a6a1f1dSLionel Sambuc umul a_0,b_7,t_1 !mul_add_c(a[0],b[7],c2,c3,c1); 733*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 734*0a6a1f1dSLionel Sambuc rd %y,t_2 735*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 != 736*0a6a1f1dSLionel Sambuc addx %g0,%g0,c_1 737*0a6a1f1dSLionel Sambuc umul a_1,b_6,t_1 !mul_add_c(a[1],b[6],c2,c3,c1); 738*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 739*0a6a1f1dSLionel Sambuc rd %y,t_2 != 740*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 741*0a6a1f1dSLionel Sambuc addx c_1,%g0,c_1 742*0a6a1f1dSLionel Sambuc umul a_2,b_5,t_1 !mul_add_c(a[2],b[5],c2,c3,c1); 743*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 != 744*0a6a1f1dSLionel Sambuc rd %y,t_2 745*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 746*0a6a1f1dSLionel Sambuc addx c_1,%g0,c_1 747*0a6a1f1dSLionel Sambuc umul a_3,b_4,t_1 !=!mul_add_c(a[3],b[4],c2,c3,c1); 748*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 749*0a6a1f1dSLionel Sambuc rd %y,t_2 750*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 751*0a6a1f1dSLionel Sambuc addx c_1,%g0,c_1 != 752*0a6a1f1dSLionel Sambuc umul a_4,b_3,t_1 !mul_add_c(a[4],b[3],c2,c3,c1); 753*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 754*0a6a1f1dSLionel Sambuc rd %y,t_2 755*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 != 756*0a6a1f1dSLionel Sambuc addx c_1,%g0,c_1 757*0a6a1f1dSLionel Sambuc umul a_5,b_2,t_1 !mul_add_c(a[5],b[2],c2,c3,c1); 758*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 759*0a6a1f1dSLionel Sambuc rd %y,t_2 != 760*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 761*0a6a1f1dSLionel Sambuc addx c_1,%g0,c_1 762*0a6a1f1dSLionel Sambuc ld ap(7),a_7 763*0a6a1f1dSLionel Sambuc umul a_6,b_1,t_1 !=!mul_add_c(a[6],b[1],c2,c3,c1); 764*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 765*0a6a1f1dSLionel Sambuc rd %y,t_2 766*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 767*0a6a1f1dSLionel Sambuc addx c_1,%g0,c_1 != 768*0a6a1f1dSLionel Sambuc umul a_7,b_0,t_1 !mul_add_c(a[7],b[0],c2,c3,c1); 769*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 770*0a6a1f1dSLionel Sambuc rd %y,t_2 771*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 != 772*0a6a1f1dSLionel Sambuc addx c_1,%g0,c_1 773*0a6a1f1dSLionel Sambuc st c_2,rp(7) !r[7]=c2; 774*0a6a1f1dSLionel Sambuc 775*0a6a1f1dSLionel Sambuc umul a_7,b_1,t_1 !mul_add_c(a[7],b[1],c3,c1,c2); 776*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 != 777*0a6a1f1dSLionel Sambuc rd %y,t_2 778*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 779*0a6a1f1dSLionel Sambuc addx %g0,%g0,c_2 780*0a6a1f1dSLionel Sambuc umul a_6,b_2,t_1 !=!mul_add_c(a[6],b[2],c3,c1,c2); 781*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 782*0a6a1f1dSLionel Sambuc rd %y,t_2 783*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 784*0a6a1f1dSLionel Sambuc addx c_2,%g0,c_2 != 785*0a6a1f1dSLionel Sambuc umul a_5,b_3,t_1 !mul_add_c(a[5],b[3],c3,c1,c2); 786*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 787*0a6a1f1dSLionel Sambuc rd %y,t_2 788*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 != 789*0a6a1f1dSLionel Sambuc addx c_2,%g0,c_2 790*0a6a1f1dSLionel Sambuc umul a_4,b_4,t_1 !mul_add_c(a[4],b[4],c3,c1,c2); 791*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 792*0a6a1f1dSLionel Sambuc rd %y,t_2 != 793*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 794*0a6a1f1dSLionel Sambuc addx c_2,%g0,c_2 795*0a6a1f1dSLionel Sambuc umul a_3,b_5,t_1 !mul_add_c(a[3],b[5],c3,c1,c2); 796*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 != 797*0a6a1f1dSLionel Sambuc rd %y,t_2 798*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 799*0a6a1f1dSLionel Sambuc addx c_2,%g0,c_2 800*0a6a1f1dSLionel Sambuc umul a_2,b_6,t_1 !=!mul_add_c(a[2],b[6],c3,c1,c2); 801*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 802*0a6a1f1dSLionel Sambuc rd %y,t_2 803*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 804*0a6a1f1dSLionel Sambuc addx c_2,%g0,c_2 != 805*0a6a1f1dSLionel Sambuc umul a_1,b_7,t_1 !mul_add_c(a[1],b[7],c3,c1,c2); 806*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 807*0a6a1f1dSLionel Sambuc rd %y,t_2 808*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 ! 809*0a6a1f1dSLionel Sambuc addx c_2,%g0,c_2 810*0a6a1f1dSLionel Sambuc st c_3,rp(8) !r[8]=c3; 811*0a6a1f1dSLionel Sambuc 812*0a6a1f1dSLionel Sambuc umul a_2,b_7,t_1 !mul_add_c(a[2],b[7],c1,c2,c3); 813*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 != 814*0a6a1f1dSLionel Sambuc rd %y,t_2 815*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 816*0a6a1f1dSLionel Sambuc addx %g0,%g0,c_3 817*0a6a1f1dSLionel Sambuc umul a_3,b_6,t_1 !=!mul_add_c(a[3],b[6],c1,c2,c3); 818*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 819*0a6a1f1dSLionel Sambuc rd %y,t_2 820*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 821*0a6a1f1dSLionel Sambuc addx c_3,%g0,c_3 != 822*0a6a1f1dSLionel Sambuc umul a_4,b_5,t_1 !mul_add_c(a[4],b[5],c1,c2,c3); 823*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 824*0a6a1f1dSLionel Sambuc rd %y,t_2 825*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 != 826*0a6a1f1dSLionel Sambuc addx c_3,%g0,c_3 827*0a6a1f1dSLionel Sambuc umul a_5,b_4,t_1 !mul_add_c(a[5],b[4],c1,c2,c3); 828*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 829*0a6a1f1dSLionel Sambuc rd %y,t_2 != 830*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 831*0a6a1f1dSLionel Sambuc addx c_3,%g0,c_3 832*0a6a1f1dSLionel Sambuc umul a_6,b_3,t_1 !mul_add_c(a[6],b[3],c1,c2,c3); 833*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 != 834*0a6a1f1dSLionel Sambuc rd %y,t_2 835*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 836*0a6a1f1dSLionel Sambuc addx c_3,%g0,c_3 837*0a6a1f1dSLionel Sambuc umul a_7,b_2,t_1 !=!mul_add_c(a[7],b[2],c1,c2,c3); 838*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 839*0a6a1f1dSLionel Sambuc rd %y,t_2 840*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 841*0a6a1f1dSLionel Sambuc addx c_3,%g0,c_3 != 842*0a6a1f1dSLionel Sambuc st c_1,rp(9) !r[9]=c1; 843*0a6a1f1dSLionel Sambuc 844*0a6a1f1dSLionel Sambuc umul a_7,b_3,t_1 !mul_add_c(a[7],b[3],c2,c3,c1); 845*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 846*0a6a1f1dSLionel Sambuc rd %y,t_2 != 847*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 848*0a6a1f1dSLionel Sambuc addx %g0,%g0,c_1 849*0a6a1f1dSLionel Sambuc umul a_6,b_4,t_1 !mul_add_c(a[6],b[4],c2,c3,c1); 850*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 != 851*0a6a1f1dSLionel Sambuc rd %y,t_2 852*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 853*0a6a1f1dSLionel Sambuc addx c_1,%g0,c_1 854*0a6a1f1dSLionel Sambuc umul a_5,b_5,t_1 !=!mul_add_c(a[5],b[5],c2,c3,c1); 855*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 856*0a6a1f1dSLionel Sambuc rd %y,t_2 857*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 858*0a6a1f1dSLionel Sambuc addx c_1,%g0,c_1 != 859*0a6a1f1dSLionel Sambuc umul a_4,b_6,t_1 !mul_add_c(a[4],b[6],c2,c3,c1); 860*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 861*0a6a1f1dSLionel Sambuc rd %y,t_2 862*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 != 863*0a6a1f1dSLionel Sambuc addx c_1,%g0,c_1 864*0a6a1f1dSLionel Sambuc umul a_3,b_7,t_1 !mul_add_c(a[3],b[7],c2,c3,c1); 865*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 866*0a6a1f1dSLionel Sambuc rd %y,t_2 != 867*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 868*0a6a1f1dSLionel Sambuc addx c_1,%g0,c_1 869*0a6a1f1dSLionel Sambuc st c_2,rp(10) !r[10]=c2; 870*0a6a1f1dSLionel Sambuc 871*0a6a1f1dSLionel Sambuc umul a_4,b_7,t_1 !=!mul_add_c(a[4],b[7],c3,c1,c2); 872*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 873*0a6a1f1dSLionel Sambuc rd %y,t_2 874*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 875*0a6a1f1dSLionel Sambuc addx %g0,%g0,c_2 != 876*0a6a1f1dSLionel Sambuc umul a_5,b_6,t_1 !mul_add_c(a[5],b[6],c3,c1,c2); 877*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 878*0a6a1f1dSLionel Sambuc rd %y,t_2 879*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 != 880*0a6a1f1dSLionel Sambuc addx c_2,%g0,c_2 881*0a6a1f1dSLionel Sambuc umul a_6,b_5,t_1 !mul_add_c(a[6],b[5],c3,c1,c2); 882*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 883*0a6a1f1dSLionel Sambuc rd %y,t_2 != 884*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 885*0a6a1f1dSLionel Sambuc addx c_2,%g0,c_2 886*0a6a1f1dSLionel Sambuc umul a_7,b_4,t_1 !mul_add_c(a[7],b[4],c3,c1,c2); 887*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 != 888*0a6a1f1dSLionel Sambuc rd %y,t_2 889*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 890*0a6a1f1dSLionel Sambuc st c_3,rp(11) !r[11]=c3; 891*0a6a1f1dSLionel Sambuc addx c_2,%g0,c_2 != 892*0a6a1f1dSLionel Sambuc 893*0a6a1f1dSLionel Sambuc umul a_7,b_5,t_1 !mul_add_c(a[7],b[5],c1,c2,c3); 894*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 895*0a6a1f1dSLionel Sambuc rd %y,t_2 896*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 != 897*0a6a1f1dSLionel Sambuc addx %g0,%g0,c_3 898*0a6a1f1dSLionel Sambuc umul a_6,b_6,t_1 !mul_add_c(a[6],b[6],c1,c2,c3); 899*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 900*0a6a1f1dSLionel Sambuc rd %y,t_2 != 901*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 902*0a6a1f1dSLionel Sambuc addx c_3,%g0,c_3 903*0a6a1f1dSLionel Sambuc umul a_5,b_7,t_1 !mul_add_c(a[5],b[7],c1,c2,c3); 904*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 != 905*0a6a1f1dSLionel Sambuc rd %y,t_2 906*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 907*0a6a1f1dSLionel Sambuc st c_1,rp(12) !r[12]=c1; 908*0a6a1f1dSLionel Sambuc addx c_3,%g0,c_3 != 909*0a6a1f1dSLionel Sambuc 910*0a6a1f1dSLionel Sambuc umul a_6,b_7,t_1 !mul_add_c(a[6],b[7],c2,c3,c1); 911*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 912*0a6a1f1dSLionel Sambuc rd %y,t_2 913*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 != 914*0a6a1f1dSLionel Sambuc addx %g0,%g0,c_1 915*0a6a1f1dSLionel Sambuc umul a_7,b_6,t_1 !mul_add_c(a[7],b[6],c2,c3,c1); 916*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 917*0a6a1f1dSLionel Sambuc rd %y,t_2 != 918*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 919*0a6a1f1dSLionel Sambuc addx c_1,%g0,c_1 920*0a6a1f1dSLionel Sambuc st c_2,rp(13) !r[13]=c2; 921*0a6a1f1dSLionel Sambuc 922*0a6a1f1dSLionel Sambuc umul a_7,b_7,t_1 !=!mul_add_c(a[7],b[7],c3,c1,c2); 923*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 924*0a6a1f1dSLionel Sambuc rd %y,t_2 925*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 926*0a6a1f1dSLionel Sambuc nop != 927*0a6a1f1dSLionel Sambuc st c_3,rp(14) !r[14]=c3; 928*0a6a1f1dSLionel Sambuc st c_1,rp(15) !r[15]=c1; 929*0a6a1f1dSLionel Sambuc 930*0a6a1f1dSLionel Sambuc ret 931*0a6a1f1dSLionel Sambuc restore %g0,%g0,%o0 932*0a6a1f1dSLionel Sambuc 933*0a6a1f1dSLionel Sambuc.type bn_mul_comba8,#function 934*0a6a1f1dSLionel Sambuc.size bn_mul_comba8,(.-bn_mul_comba8) 935*0a6a1f1dSLionel Sambuc 936*0a6a1f1dSLionel Sambuc.align 32 937*0a6a1f1dSLionel Sambuc 938*0a6a1f1dSLionel Sambuc.global bn_mul_comba4 939*0a6a1f1dSLionel Sambuc/* 940*0a6a1f1dSLionel Sambuc * void bn_mul_comba4(r,a,b) 941*0a6a1f1dSLionel Sambuc * BN_ULONG *r,*a,*b; 942*0a6a1f1dSLionel Sambuc */ 943*0a6a1f1dSLionel Sambucbn_mul_comba4: 944*0a6a1f1dSLionel Sambuc save %sp,FRAME_SIZE,%sp 945*0a6a1f1dSLionel Sambuc ld ap(0),a_0 946*0a6a1f1dSLionel Sambuc ld bp(0),b_0 947*0a6a1f1dSLionel Sambuc umul a_0,b_0,c_1 !=!mul_add_c(a[0],b[0],c1,c2,c3); 948*0a6a1f1dSLionel Sambuc ld bp(1),b_1 949*0a6a1f1dSLionel Sambuc rd %y,c_2 950*0a6a1f1dSLionel Sambuc st c_1,rp(0) !r[0]=c1; 951*0a6a1f1dSLionel Sambuc 952*0a6a1f1dSLionel Sambuc umul a_0,b_1,t_1 !=!mul_add_c(a[0],b[1],c2,c3,c1); 953*0a6a1f1dSLionel Sambuc ld ap(1),a_1 954*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 955*0a6a1f1dSLionel Sambuc rd %y,t_2 != 956*0a6a1f1dSLionel Sambuc addxcc %g0,t_2,c_3 957*0a6a1f1dSLionel Sambuc addx %g0,%g0,c_1 958*0a6a1f1dSLionel Sambuc ld ap(2),a_2 959*0a6a1f1dSLionel Sambuc umul a_1,b_0,t_1 !=!mul_add_c(a[1],b[0],c2,c3,c1); 960*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 961*0a6a1f1dSLionel Sambuc rd %y,t_2 962*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 963*0a6a1f1dSLionel Sambuc addx c_1,%g0,c_1 != 964*0a6a1f1dSLionel Sambuc st c_2,rp(1) !r[1]=c2; 965*0a6a1f1dSLionel Sambuc 966*0a6a1f1dSLionel Sambuc umul a_2,b_0,t_1 !mul_add_c(a[2],b[0],c3,c1,c2); 967*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 968*0a6a1f1dSLionel Sambuc rd %y,t_2 != 969*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 970*0a6a1f1dSLionel Sambuc addx %g0,%g0,c_2 971*0a6a1f1dSLionel Sambuc ld bp(2),b_2 972*0a6a1f1dSLionel Sambuc umul a_1,b_1,t_1 !=!mul_add_c(a[1],b[1],c3,c1,c2); 973*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 974*0a6a1f1dSLionel Sambuc rd %y,t_2 975*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 976*0a6a1f1dSLionel Sambuc addx c_2,%g0,c_2 != 977*0a6a1f1dSLionel Sambuc ld bp(3),b_3 978*0a6a1f1dSLionel Sambuc umul a_0,b_2,t_1 !mul_add_c(a[0],b[2],c3,c1,c2); 979*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 980*0a6a1f1dSLionel Sambuc rd %y,t_2 != 981*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 982*0a6a1f1dSLionel Sambuc addx c_2,%g0,c_2 983*0a6a1f1dSLionel Sambuc st c_3,rp(2) !r[2]=c3; 984*0a6a1f1dSLionel Sambuc 985*0a6a1f1dSLionel Sambuc umul a_0,b_3,t_1 !=!mul_add_c(a[0],b[3],c1,c2,c3); 986*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 987*0a6a1f1dSLionel Sambuc rd %y,t_2 988*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 989*0a6a1f1dSLionel Sambuc addx %g0,%g0,c_3 != 990*0a6a1f1dSLionel Sambuc umul a_1,b_2,t_1 !mul_add_c(a[1],b[2],c1,c2,c3); 991*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 992*0a6a1f1dSLionel Sambuc rd %y,t_2 993*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 != 994*0a6a1f1dSLionel Sambuc addx c_3,%g0,c_3 995*0a6a1f1dSLionel Sambuc ld ap(3),a_3 996*0a6a1f1dSLionel Sambuc umul a_2,b_1,t_1 !mul_add_c(a[2],b[1],c1,c2,c3); 997*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 != 998*0a6a1f1dSLionel Sambuc rd %y,t_2 999*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 1000*0a6a1f1dSLionel Sambuc addx c_3,%g0,c_3 1001*0a6a1f1dSLionel Sambuc umul a_3,b_0,t_1 !=!mul_add_c(a[3],b[0],c1,c2,c3); 1002*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 1003*0a6a1f1dSLionel Sambuc rd %y,t_2 1004*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 1005*0a6a1f1dSLionel Sambuc addx c_3,%g0,c_3 != 1006*0a6a1f1dSLionel Sambuc st c_1,rp(3) !r[3]=c1; 1007*0a6a1f1dSLionel Sambuc 1008*0a6a1f1dSLionel Sambuc umul a_3,b_1,t_1 !mul_add_c(a[3],b[1],c2,c3,c1); 1009*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 1010*0a6a1f1dSLionel Sambuc rd %y,t_2 != 1011*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 1012*0a6a1f1dSLionel Sambuc addx %g0,%g0,c_1 1013*0a6a1f1dSLionel Sambuc umul a_2,b_2,t_1 !mul_add_c(a[2],b[2],c2,c3,c1); 1014*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 != 1015*0a6a1f1dSLionel Sambuc rd %y,t_2 1016*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 1017*0a6a1f1dSLionel Sambuc addx c_1,%g0,c_1 1018*0a6a1f1dSLionel Sambuc umul a_1,b_3,t_1 !=!mul_add_c(a[1],b[3],c2,c3,c1); 1019*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 1020*0a6a1f1dSLionel Sambuc rd %y,t_2 1021*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 1022*0a6a1f1dSLionel Sambuc addx c_1,%g0,c_1 != 1023*0a6a1f1dSLionel Sambuc st c_2,rp(4) !r[4]=c2; 1024*0a6a1f1dSLionel Sambuc 1025*0a6a1f1dSLionel Sambuc umul a_2,b_3,t_1 !mul_add_c(a[2],b[3],c3,c1,c2); 1026*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 1027*0a6a1f1dSLionel Sambuc rd %y,t_2 != 1028*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 1029*0a6a1f1dSLionel Sambuc addx %g0,%g0,c_2 1030*0a6a1f1dSLionel Sambuc umul a_3,b_2,t_1 !mul_add_c(a[3],b[2],c3,c1,c2); 1031*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 != 1032*0a6a1f1dSLionel Sambuc rd %y,t_2 1033*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 1034*0a6a1f1dSLionel Sambuc st c_3,rp(5) !r[5]=c3; 1035*0a6a1f1dSLionel Sambuc addx c_2,%g0,c_2 != 1036*0a6a1f1dSLionel Sambuc 1037*0a6a1f1dSLionel Sambuc umul a_3,b_3,t_1 !mul_add_c(a[3],b[3],c1,c2,c3); 1038*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 1039*0a6a1f1dSLionel Sambuc rd %y,t_2 1040*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 != 1041*0a6a1f1dSLionel Sambuc st c_1,rp(6) !r[6]=c1; 1042*0a6a1f1dSLionel Sambuc st c_2,rp(7) !r[7]=c2; 1043*0a6a1f1dSLionel Sambuc 1044*0a6a1f1dSLionel Sambuc ret 1045*0a6a1f1dSLionel Sambuc restore %g0,%g0,%o0 1046*0a6a1f1dSLionel Sambuc 1047*0a6a1f1dSLionel Sambuc.type bn_mul_comba4,#function 1048*0a6a1f1dSLionel Sambuc.size bn_mul_comba4,(.-bn_mul_comba4) 1049*0a6a1f1dSLionel Sambuc 1050*0a6a1f1dSLionel Sambuc.align 32 1051*0a6a1f1dSLionel Sambuc 1052*0a6a1f1dSLionel Sambuc.global bn_sqr_comba8 1053*0a6a1f1dSLionel Sambucbn_sqr_comba8: 1054*0a6a1f1dSLionel Sambuc save %sp,FRAME_SIZE,%sp 1055*0a6a1f1dSLionel Sambuc ld ap(0),a_0 1056*0a6a1f1dSLionel Sambuc ld ap(1),a_1 1057*0a6a1f1dSLionel Sambuc umul a_0,a_0,c_1 !=!sqr_add_c(a,0,c1,c2,c3); 1058*0a6a1f1dSLionel Sambuc rd %y,c_2 1059*0a6a1f1dSLionel Sambuc st c_1,rp(0) !r[0]=c1; 1060*0a6a1f1dSLionel Sambuc 1061*0a6a1f1dSLionel Sambuc ld ap(2),a_2 1062*0a6a1f1dSLionel Sambuc umul a_0,a_1,t_1 !=!sqr_add_c2(a,1,0,c2,c3,c1); 1063*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 1064*0a6a1f1dSLionel Sambuc rd %y,t_2 1065*0a6a1f1dSLionel Sambuc addxcc %g0,t_2,c_3 1066*0a6a1f1dSLionel Sambuc addx %g0,%g0,c_1 != 1067*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 1068*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 1069*0a6a1f1dSLionel Sambuc st c_2,rp(1) !r[1]=c2; 1070*0a6a1f1dSLionel Sambuc addx c_1,%g0,c_1 != 1071*0a6a1f1dSLionel Sambuc 1072*0a6a1f1dSLionel Sambuc umul a_2,a_0,t_1 !sqr_add_c2(a,2,0,c3,c1,c2); 1073*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 1074*0a6a1f1dSLionel Sambuc rd %y,t_2 1075*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 != 1076*0a6a1f1dSLionel Sambuc addx %g0,%g0,c_2 1077*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 1078*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 1079*0a6a1f1dSLionel Sambuc addx c_2,%g0,c_2 != 1080*0a6a1f1dSLionel Sambuc ld ap(3),a_3 1081*0a6a1f1dSLionel Sambuc umul a_1,a_1,t_1 !sqr_add_c(a,1,c3,c1,c2); 1082*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 1083*0a6a1f1dSLionel Sambuc rd %y,t_2 != 1084*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 1085*0a6a1f1dSLionel Sambuc addx c_2,%g0,c_2 1086*0a6a1f1dSLionel Sambuc st c_3,rp(2) !r[2]=c3; 1087*0a6a1f1dSLionel Sambuc 1088*0a6a1f1dSLionel Sambuc umul a_0,a_3,t_1 !=!sqr_add_c2(a,3,0,c1,c2,c3); 1089*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 1090*0a6a1f1dSLionel Sambuc rd %y,t_2 1091*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 1092*0a6a1f1dSLionel Sambuc addx %g0,%g0,c_3 != 1093*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 1094*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 1095*0a6a1f1dSLionel Sambuc ld ap(4),a_4 1096*0a6a1f1dSLionel Sambuc addx c_3,%g0,c_3 != 1097*0a6a1f1dSLionel Sambuc umul a_1,a_2,t_1 !sqr_add_c2(a,2,1,c1,c2,c3); 1098*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 1099*0a6a1f1dSLionel Sambuc rd %y,t_2 1100*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 != 1101*0a6a1f1dSLionel Sambuc addx c_3,%g0,c_3 1102*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 1103*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 1104*0a6a1f1dSLionel Sambuc addx c_3,%g0,c_3 != 1105*0a6a1f1dSLionel Sambuc st c_1,rp(3) !r[3]=c1; 1106*0a6a1f1dSLionel Sambuc 1107*0a6a1f1dSLionel Sambuc umul a_4,a_0,t_1 !sqr_add_c2(a,4,0,c2,c3,c1); 1108*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 1109*0a6a1f1dSLionel Sambuc rd %y,t_2 != 1110*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 1111*0a6a1f1dSLionel Sambuc addx %g0,%g0,c_1 1112*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 1113*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 != 1114*0a6a1f1dSLionel Sambuc addx c_1,%g0,c_1 1115*0a6a1f1dSLionel Sambuc umul a_3,a_1,t_1 !sqr_add_c2(a,3,1,c2,c3,c1); 1116*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 1117*0a6a1f1dSLionel Sambuc rd %y,t_2 != 1118*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 1119*0a6a1f1dSLionel Sambuc addx c_1,%g0,c_1 1120*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 1121*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 != 1122*0a6a1f1dSLionel Sambuc addx c_1,%g0,c_1 1123*0a6a1f1dSLionel Sambuc ld ap(5),a_5 1124*0a6a1f1dSLionel Sambuc umul a_2,a_2,t_1 !sqr_add_c(a,2,c2,c3,c1); 1125*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 != 1126*0a6a1f1dSLionel Sambuc rd %y,t_2 1127*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 1128*0a6a1f1dSLionel Sambuc st c_2,rp(4) !r[4]=c2; 1129*0a6a1f1dSLionel Sambuc addx c_1,%g0,c_1 != 1130*0a6a1f1dSLionel Sambuc 1131*0a6a1f1dSLionel Sambuc umul a_0,a_5,t_1 !sqr_add_c2(a,5,0,c3,c1,c2); 1132*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 1133*0a6a1f1dSLionel Sambuc rd %y,t_2 1134*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 != 1135*0a6a1f1dSLionel Sambuc addx %g0,%g0,c_2 1136*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 1137*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 1138*0a6a1f1dSLionel Sambuc addx c_2,%g0,c_2 != 1139*0a6a1f1dSLionel Sambuc umul a_1,a_4,t_1 !sqr_add_c2(a,4,1,c3,c1,c2); 1140*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 1141*0a6a1f1dSLionel Sambuc rd %y,t_2 1142*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 != 1143*0a6a1f1dSLionel Sambuc addx c_2,%g0,c_2 1144*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 1145*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 1146*0a6a1f1dSLionel Sambuc addx c_2,%g0,c_2 != 1147*0a6a1f1dSLionel Sambuc ld ap(6),a_6 1148*0a6a1f1dSLionel Sambuc umul a_2,a_3,t_1 !sqr_add_c2(a,3,2,c3,c1,c2); 1149*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 1150*0a6a1f1dSLionel Sambuc rd %y,t_2 != 1151*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 1152*0a6a1f1dSLionel Sambuc addx c_2,%g0,c_2 1153*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 1154*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 != 1155*0a6a1f1dSLionel Sambuc addx c_2,%g0,c_2 1156*0a6a1f1dSLionel Sambuc st c_3,rp(5) !r[5]=c3; 1157*0a6a1f1dSLionel Sambuc 1158*0a6a1f1dSLionel Sambuc umul a_6,a_0,t_1 !sqr_add_c2(a,6,0,c1,c2,c3); 1159*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 != 1160*0a6a1f1dSLionel Sambuc rd %y,t_2 1161*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 1162*0a6a1f1dSLionel Sambuc addx %g0,%g0,c_3 1163*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 != 1164*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 1165*0a6a1f1dSLionel Sambuc addx c_3,%g0,c_3 1166*0a6a1f1dSLionel Sambuc umul a_5,a_1,t_1 !sqr_add_c2(a,5,1,c1,c2,c3); 1167*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 != 1168*0a6a1f1dSLionel Sambuc rd %y,t_2 1169*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 1170*0a6a1f1dSLionel Sambuc addx c_3,%g0,c_3 1171*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 != 1172*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 1173*0a6a1f1dSLionel Sambuc addx c_3,%g0,c_3 1174*0a6a1f1dSLionel Sambuc umul a_4,a_2,t_1 !sqr_add_c2(a,4,2,c1,c2,c3); 1175*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 != 1176*0a6a1f1dSLionel Sambuc rd %y,t_2 1177*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 1178*0a6a1f1dSLionel Sambuc addx c_3,%g0,c_3 1179*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 != 1180*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 1181*0a6a1f1dSLionel Sambuc addx c_3,%g0,c_3 1182*0a6a1f1dSLionel Sambuc ld ap(7),a_7 1183*0a6a1f1dSLionel Sambuc umul a_3,a_3,t_1 !=!sqr_add_c(a,3,c1,c2,c3); 1184*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 1185*0a6a1f1dSLionel Sambuc rd %y,t_2 1186*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 1187*0a6a1f1dSLionel Sambuc addx c_3,%g0,c_3 != 1188*0a6a1f1dSLionel Sambuc st c_1,rp(6) !r[6]=c1; 1189*0a6a1f1dSLionel Sambuc 1190*0a6a1f1dSLionel Sambuc umul a_0,a_7,t_1 !sqr_add_c2(a,7,0,c2,c3,c1); 1191*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 1192*0a6a1f1dSLionel Sambuc rd %y,t_2 != 1193*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 1194*0a6a1f1dSLionel Sambuc addx %g0,%g0,c_1 1195*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 1196*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 != 1197*0a6a1f1dSLionel Sambuc addx c_1,%g0,c_1 1198*0a6a1f1dSLionel Sambuc umul a_1,a_6,t_1 !sqr_add_c2(a,6,1,c2,c3,c1); 1199*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 1200*0a6a1f1dSLionel Sambuc rd %y,t_2 != 1201*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 1202*0a6a1f1dSLionel Sambuc addx c_1,%g0,c_1 1203*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 1204*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 != 1205*0a6a1f1dSLionel Sambuc addx c_1,%g0,c_1 1206*0a6a1f1dSLionel Sambuc umul a_2,a_5,t_1 !sqr_add_c2(a,5,2,c2,c3,c1); 1207*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 1208*0a6a1f1dSLionel Sambuc rd %y,t_2 != 1209*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 1210*0a6a1f1dSLionel Sambuc addx c_1,%g0,c_1 1211*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 1212*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 != 1213*0a6a1f1dSLionel Sambuc addx c_1,%g0,c_1 1214*0a6a1f1dSLionel Sambuc umul a_3,a_4,t_1 !sqr_add_c2(a,4,3,c2,c3,c1); 1215*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 1216*0a6a1f1dSLionel Sambuc rd %y,t_2 != 1217*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 1218*0a6a1f1dSLionel Sambuc addx c_1,%g0,c_1 1219*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 1220*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 != 1221*0a6a1f1dSLionel Sambuc addx c_1,%g0,c_1 1222*0a6a1f1dSLionel Sambuc st c_2,rp(7) !r[7]=c2; 1223*0a6a1f1dSLionel Sambuc 1224*0a6a1f1dSLionel Sambuc umul a_7,a_1,t_1 !sqr_add_c2(a,7,1,c3,c1,c2); 1225*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 != 1226*0a6a1f1dSLionel Sambuc rd %y,t_2 1227*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 1228*0a6a1f1dSLionel Sambuc addx %g0,%g0,c_2 1229*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 != 1230*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 1231*0a6a1f1dSLionel Sambuc addx c_2,%g0,c_2 1232*0a6a1f1dSLionel Sambuc umul a_6,a_2,t_1 !sqr_add_c2(a,6,2,c3,c1,c2); 1233*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 != 1234*0a6a1f1dSLionel Sambuc rd %y,t_2 1235*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 1236*0a6a1f1dSLionel Sambuc addx c_2,%g0,c_2 1237*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 != 1238*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 1239*0a6a1f1dSLionel Sambuc addx c_2,%g0,c_2 1240*0a6a1f1dSLionel Sambuc umul a_5,a_3,t_1 !sqr_add_c2(a,5,3,c3,c1,c2); 1241*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 != 1242*0a6a1f1dSLionel Sambuc rd %y,t_2 1243*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 1244*0a6a1f1dSLionel Sambuc addx c_2,%g0,c_2 1245*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 != 1246*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 1247*0a6a1f1dSLionel Sambuc addx c_2,%g0,c_2 1248*0a6a1f1dSLionel Sambuc umul a_4,a_4,t_1 !sqr_add_c(a,4,c3,c1,c2); 1249*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 != 1250*0a6a1f1dSLionel Sambuc rd %y,t_2 1251*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 1252*0a6a1f1dSLionel Sambuc st c_3,rp(8) !r[8]=c3; 1253*0a6a1f1dSLionel Sambuc addx c_2,%g0,c_2 != 1254*0a6a1f1dSLionel Sambuc 1255*0a6a1f1dSLionel Sambuc umul a_2,a_7,t_1 !sqr_add_c2(a,7,2,c1,c2,c3); 1256*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 1257*0a6a1f1dSLionel Sambuc rd %y,t_2 1258*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 != 1259*0a6a1f1dSLionel Sambuc addx %g0,%g0,c_3 1260*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 1261*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 1262*0a6a1f1dSLionel Sambuc addx c_3,%g0,c_3 != 1263*0a6a1f1dSLionel Sambuc umul a_3,a_6,t_1 !sqr_add_c2(a,6,3,c1,c2,c3); 1264*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 1265*0a6a1f1dSLionel Sambuc rd %y,t_2 1266*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 != 1267*0a6a1f1dSLionel Sambuc addx c_3,%g0,c_3 1268*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 1269*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 1270*0a6a1f1dSLionel Sambuc addx c_3,%g0,c_3 != 1271*0a6a1f1dSLionel Sambuc umul a_4,a_5,t_1 !sqr_add_c2(a,5,4,c1,c2,c3); 1272*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 1273*0a6a1f1dSLionel Sambuc rd %y,t_2 1274*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 != 1275*0a6a1f1dSLionel Sambuc addx c_3,%g0,c_3 1276*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 1277*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 1278*0a6a1f1dSLionel Sambuc addx c_3,%g0,c_3 != 1279*0a6a1f1dSLionel Sambuc st c_1,rp(9) !r[9]=c1; 1280*0a6a1f1dSLionel Sambuc 1281*0a6a1f1dSLionel Sambuc umul a_7,a_3,t_1 !sqr_add_c2(a,7,3,c2,c3,c1); 1282*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 1283*0a6a1f1dSLionel Sambuc rd %y,t_2 != 1284*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 1285*0a6a1f1dSLionel Sambuc addx %g0,%g0,c_1 1286*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 1287*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 != 1288*0a6a1f1dSLionel Sambuc addx c_1,%g0,c_1 1289*0a6a1f1dSLionel Sambuc umul a_6,a_4,t_1 !sqr_add_c2(a,6,4,c2,c3,c1); 1290*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 1291*0a6a1f1dSLionel Sambuc rd %y,t_2 != 1292*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 1293*0a6a1f1dSLionel Sambuc addx c_1,%g0,c_1 1294*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 1295*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 != 1296*0a6a1f1dSLionel Sambuc addx c_1,%g0,c_1 1297*0a6a1f1dSLionel Sambuc umul a_5,a_5,t_1 !sqr_add_c(a,5,c2,c3,c1); 1298*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 1299*0a6a1f1dSLionel Sambuc rd %y,t_2 != 1300*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 1301*0a6a1f1dSLionel Sambuc addx c_1,%g0,c_1 1302*0a6a1f1dSLionel Sambuc st c_2,rp(10) !r[10]=c2; 1303*0a6a1f1dSLionel Sambuc 1304*0a6a1f1dSLionel Sambuc umul a_4,a_7,t_1 !=!sqr_add_c2(a,7,4,c3,c1,c2); 1305*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 1306*0a6a1f1dSLionel Sambuc rd %y,t_2 1307*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 1308*0a6a1f1dSLionel Sambuc addx %g0,%g0,c_2 != 1309*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 1310*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 1311*0a6a1f1dSLionel Sambuc addx c_2,%g0,c_2 1312*0a6a1f1dSLionel Sambuc umul a_5,a_6,t_1 !=!sqr_add_c2(a,6,5,c3,c1,c2); 1313*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 1314*0a6a1f1dSLionel Sambuc rd %y,t_2 1315*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 1316*0a6a1f1dSLionel Sambuc addx c_2,%g0,c_2 != 1317*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 1318*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 1319*0a6a1f1dSLionel Sambuc st c_3,rp(11) !r[11]=c3; 1320*0a6a1f1dSLionel Sambuc addx c_2,%g0,c_2 != 1321*0a6a1f1dSLionel Sambuc 1322*0a6a1f1dSLionel Sambuc umul a_7,a_5,t_1 !sqr_add_c2(a,7,5,c1,c2,c3); 1323*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 1324*0a6a1f1dSLionel Sambuc rd %y,t_2 1325*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 != 1326*0a6a1f1dSLionel Sambuc addx %g0,%g0,c_3 1327*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 1328*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 1329*0a6a1f1dSLionel Sambuc addx c_3,%g0,c_3 != 1330*0a6a1f1dSLionel Sambuc umul a_6,a_6,t_1 !sqr_add_c(a,6,c1,c2,c3); 1331*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 1332*0a6a1f1dSLionel Sambuc rd %y,t_2 1333*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 != 1334*0a6a1f1dSLionel Sambuc addx c_3,%g0,c_3 1335*0a6a1f1dSLionel Sambuc st c_1,rp(12) !r[12]=c1; 1336*0a6a1f1dSLionel Sambuc 1337*0a6a1f1dSLionel Sambuc umul a_6,a_7,t_1 !sqr_add_c2(a,7,6,c2,c3,c1); 1338*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 != 1339*0a6a1f1dSLionel Sambuc rd %y,t_2 1340*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 1341*0a6a1f1dSLionel Sambuc addx %g0,%g0,c_1 1342*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 != 1343*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 1344*0a6a1f1dSLionel Sambuc st c_2,rp(13) !r[13]=c2; 1345*0a6a1f1dSLionel Sambuc addx c_1,%g0,c_1 != 1346*0a6a1f1dSLionel Sambuc 1347*0a6a1f1dSLionel Sambuc umul a_7,a_7,t_1 !sqr_add_c(a,7,c3,c1,c2); 1348*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 1349*0a6a1f1dSLionel Sambuc rd %y,t_2 1350*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 != 1351*0a6a1f1dSLionel Sambuc st c_3,rp(14) !r[14]=c3; 1352*0a6a1f1dSLionel Sambuc st c_1,rp(15) !r[15]=c1; 1353*0a6a1f1dSLionel Sambuc 1354*0a6a1f1dSLionel Sambuc ret 1355*0a6a1f1dSLionel Sambuc restore %g0,%g0,%o0 1356*0a6a1f1dSLionel Sambuc 1357*0a6a1f1dSLionel Sambuc.type bn_sqr_comba8,#function 1358*0a6a1f1dSLionel Sambuc.size bn_sqr_comba8,(.-bn_sqr_comba8) 1359*0a6a1f1dSLionel Sambuc 1360*0a6a1f1dSLionel Sambuc.align 32 1361*0a6a1f1dSLionel Sambuc 1362*0a6a1f1dSLionel Sambuc.global bn_sqr_comba4 1363*0a6a1f1dSLionel Sambuc/* 1364*0a6a1f1dSLionel Sambuc * void bn_sqr_comba4(r,a) 1365*0a6a1f1dSLionel Sambuc * BN_ULONG *r,*a; 1366*0a6a1f1dSLionel Sambuc */ 1367*0a6a1f1dSLionel Sambucbn_sqr_comba4: 1368*0a6a1f1dSLionel Sambuc save %sp,FRAME_SIZE,%sp 1369*0a6a1f1dSLionel Sambuc ld ap(0),a_0 1370*0a6a1f1dSLionel Sambuc umul a_0,a_0,c_1 !sqr_add_c(a,0,c1,c2,c3); 1371*0a6a1f1dSLionel Sambuc ld ap(1),a_1 != 1372*0a6a1f1dSLionel Sambuc rd %y,c_2 1373*0a6a1f1dSLionel Sambuc st c_1,rp(0) !r[0]=c1; 1374*0a6a1f1dSLionel Sambuc 1375*0a6a1f1dSLionel Sambuc ld ap(2),a_2 1376*0a6a1f1dSLionel Sambuc umul a_0,a_1,t_1 !=!sqr_add_c2(a,1,0,c2,c3,c1); 1377*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 1378*0a6a1f1dSLionel Sambuc rd %y,t_2 1379*0a6a1f1dSLionel Sambuc addxcc %g0,t_2,c_3 1380*0a6a1f1dSLionel Sambuc addx %g0,%g0,c_1 != 1381*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 1382*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 1383*0a6a1f1dSLionel Sambuc addx c_1,%g0,c_1 != 1384*0a6a1f1dSLionel Sambuc st c_2,rp(1) !r[1]=c2; 1385*0a6a1f1dSLionel Sambuc 1386*0a6a1f1dSLionel Sambuc umul a_2,a_0,t_1 !sqr_add_c2(a,2,0,c3,c1,c2); 1387*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 1388*0a6a1f1dSLionel Sambuc rd %y,t_2 != 1389*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 1390*0a6a1f1dSLionel Sambuc addx %g0,%g0,c_2 1391*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 1392*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 != 1393*0a6a1f1dSLionel Sambuc addx c_2,%g0,c_2 1394*0a6a1f1dSLionel Sambuc ld ap(3),a_3 1395*0a6a1f1dSLionel Sambuc umul a_1,a_1,t_1 !sqr_add_c(a,1,c3,c1,c2); 1396*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 != 1397*0a6a1f1dSLionel Sambuc rd %y,t_2 1398*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 1399*0a6a1f1dSLionel Sambuc st c_3,rp(2) !r[2]=c3; 1400*0a6a1f1dSLionel Sambuc addx c_2,%g0,c_2 != 1401*0a6a1f1dSLionel Sambuc 1402*0a6a1f1dSLionel Sambuc umul a_0,a_3,t_1 !sqr_add_c2(a,3,0,c1,c2,c3); 1403*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 1404*0a6a1f1dSLionel Sambuc rd %y,t_2 1405*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 != 1406*0a6a1f1dSLionel Sambuc addx %g0,%g0,c_3 1407*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 1408*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 1409*0a6a1f1dSLionel Sambuc addx c_3,%g0,c_3 != 1410*0a6a1f1dSLionel Sambuc umul a_1,a_2,t_1 !sqr_add_c2(a,2,1,c1,c2,c3); 1411*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 1412*0a6a1f1dSLionel Sambuc rd %y,t_2 1413*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 != 1414*0a6a1f1dSLionel Sambuc addx c_3,%g0,c_3 1415*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 1416*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 1417*0a6a1f1dSLionel Sambuc addx c_3,%g0,c_3 != 1418*0a6a1f1dSLionel Sambuc st c_1,rp(3) !r[3]=c1; 1419*0a6a1f1dSLionel Sambuc 1420*0a6a1f1dSLionel Sambuc umul a_3,a_1,t_1 !sqr_add_c2(a,3,1,c2,c3,c1); 1421*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 1422*0a6a1f1dSLionel Sambuc rd %y,t_2 != 1423*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 1424*0a6a1f1dSLionel Sambuc addx %g0,%g0,c_1 1425*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 1426*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 != 1427*0a6a1f1dSLionel Sambuc addx c_1,%g0,c_1 1428*0a6a1f1dSLionel Sambuc umul a_2,a_2,t_1 !sqr_add_c(a,2,c2,c3,c1); 1429*0a6a1f1dSLionel Sambuc addcc c_2,t_1,c_2 1430*0a6a1f1dSLionel Sambuc rd %y,t_2 != 1431*0a6a1f1dSLionel Sambuc addxcc c_3,t_2,c_3 1432*0a6a1f1dSLionel Sambuc addx c_1,%g0,c_1 1433*0a6a1f1dSLionel Sambuc st c_2,rp(4) !r[4]=c2; 1434*0a6a1f1dSLionel Sambuc 1435*0a6a1f1dSLionel Sambuc umul a_2,a_3,t_1 !=!sqr_add_c2(a,3,2,c3,c1,c2); 1436*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 1437*0a6a1f1dSLionel Sambuc rd %y,t_2 1438*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 1439*0a6a1f1dSLionel Sambuc addx %g0,%g0,c_2 != 1440*0a6a1f1dSLionel Sambuc addcc c_3,t_1,c_3 1441*0a6a1f1dSLionel Sambuc addxcc c_1,t_2,c_1 1442*0a6a1f1dSLionel Sambuc st c_3,rp(5) !r[5]=c3; 1443*0a6a1f1dSLionel Sambuc addx c_2,%g0,c_2 != 1444*0a6a1f1dSLionel Sambuc 1445*0a6a1f1dSLionel Sambuc umul a_3,a_3,t_1 !sqr_add_c(a,3,c1,c2,c3); 1446*0a6a1f1dSLionel Sambuc addcc c_1,t_1,c_1 1447*0a6a1f1dSLionel Sambuc rd %y,t_2 1448*0a6a1f1dSLionel Sambuc addxcc c_2,t_2,c_2 != 1449*0a6a1f1dSLionel Sambuc st c_1,rp(6) !r[6]=c1; 1450*0a6a1f1dSLionel Sambuc st c_2,rp(7) !r[7]=c2; 1451*0a6a1f1dSLionel Sambuc 1452*0a6a1f1dSLionel Sambuc ret 1453*0a6a1f1dSLionel Sambuc restore %g0,%g0,%o0 1454*0a6a1f1dSLionel Sambuc 1455*0a6a1f1dSLionel Sambuc.type bn_sqr_comba4,#function 1456*0a6a1f1dSLionel Sambuc.size bn_sqr_comba4,(.-bn_sqr_comba4) 1457*0a6a1f1dSLionel Sambuc 1458*0a6a1f1dSLionel Sambuc.align 32 1459