1656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 2656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; PA-RISC 2.0 implementation of bn_asm code, based on the 3656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 64-bit version of the code. This code is effectively the 4656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; same as the 64-bit version except the register model is 5656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; slightly different given all values must be 32-bit between 6656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; function calls. Thus the 64-bit return values are returned 7656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; in %ret0 and %ret1 vs just %ret0 as is done in 64-bit 8656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 9656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 10656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; This code is approximately 2x faster than the C version 11656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; for RSA/DSA. 12656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 13656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; See http://devresource.hp.com/ for more details on the PA-RISC 14656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; architecture. Also see the book "PA-RISC 2.0 Architecture" 15656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; by Gerry Kane for information on the instruction set architecture. 16656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 17656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; Code written by Chris Ruemmler (with some help from the HP C 18656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; compiler). 19656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 20656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; The code compiles with HP's assembler 21656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 22656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 23656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .level 2.0N 24656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .space $TEXT$ 25656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .subspa $CODE$,QUAD=0,ALIGN=8,ACCESS=0x2c,CODE_ONLY 26656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 27656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 28656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; Global Register definitions used for the routines. 29656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 30656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; Some information about HP's runtime architecture for 32-bits. 31656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 32656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; "Caller save" means the calling function must save the register 33656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; if it wants the register to be preserved. 34656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; "Callee save" means if a function uses the register, it must save 35656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; the value before using it. 36656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 37656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; For the floating point registers 38656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 39656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; "caller save" registers: fr4-fr11, fr22-fr31 40656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; "callee save" registers: fr12-fr21 41656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; "special" registers: fr0-fr3 (status and exception registers) 42656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 43656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; For the integer registers 44656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; value zero : r0 45656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; "caller save" registers: r1,r19-r26 46656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; "callee save" registers: r3-r18 47656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; return register : r2 (rp) 48656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; return values ; r28,r29 (ret0,ret1) 49656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; Stack pointer ; r30 (sp) 50656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; millicode return ptr ; r31 (also a caller save register) 51656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 52656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 53656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 54656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; Arguments to the routines 55656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 56656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectr_ptr .reg %r26 57656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecta_ptr .reg %r25 58656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectb_ptr .reg %r24 59656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectnum .reg %r24 60656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectn .reg %r23 61656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 62656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 63656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; Note that the "w" argument for bn_mul_add_words and bn_mul_words 64656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; is passed on the stack at a delta of -56 from the top of stack 65656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; as the routine is entered. 66656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 67656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 68656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 69656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; Globals used in some routines 70656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 71656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 72656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttop_overflow .reg %r23 73656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecthigh_mask .reg %r22 ; value 0xffffffff80000000L 74656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 75656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 76656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project;------------------------------------------------------------------------------ 77656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 78656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; bn_mul_add_words 79656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 80656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project;BN_ULONG bn_mul_add_words(BN_ULONG *r_ptr, BN_ULONG *a_ptr, 81656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; int num, BN_ULONG w) 82656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 83656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; arg0 = r_ptr 84656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; arg1 = a_ptr 85656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; arg3 = num 86656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; -56(sp) = w 87656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 88656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; Local register definitions 89656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 90656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 91656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectfm1 .reg %fr22 92656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectfm .reg %fr23 93656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectht_temp .reg %fr24 94656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectht_temp_1 .reg %fr25 95656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectlt_temp .reg %fr26 96656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectlt_temp_1 .reg %fr27 97656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectfm1_1 .reg %fr28 98656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectfm_1 .reg %fr29 99656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 100656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectfw_h .reg %fr7L 101656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectfw_l .reg %fr7R 102656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectfw .reg %fr7 103656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 104656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectfht_0 .reg %fr8L 105656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectflt_0 .reg %fr8R 106656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectt_float_0 .reg %fr8 107656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 108656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectfht_1 .reg %fr9L 109656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectflt_1 .reg %fr9R 110656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectt_float_1 .reg %fr9 111656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 112656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttmp_0 .reg %r31 113656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttmp_1 .reg %r21 114656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectm_0 .reg %r20 115656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectm_1 .reg %r19 116656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectht_0 .reg %r1 117656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectht_1 .reg %r3 118656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectlt_0 .reg %r4 119656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectlt_1 .reg %r5 120656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectm1_0 .reg %r6 121656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectm1_1 .reg %r7 122656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectrp_val .reg %r8 123656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectrp_val_1 .reg %r9 124656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 125656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectbn_mul_add_words 126656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .export bn_mul_add_words,entry,NO_RELOCATION,LONG_RETURN 127656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .proc 128656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .callinfo frame=128 129656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .entry 130656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .align 64 131656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 132656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD %r3,0(%sp) ; save r3 133656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD %r4,8(%sp) ; save r4 134656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project NOP ; Needed to make the loop 16-byte aligned 135656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project NOP ; needed to make the loop 16-byte aligned 136656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 137656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD %r5,16(%sp) ; save r5 138656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project NOP 139656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD %r6,24(%sp) ; save r6 140656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD %r7,32(%sp) ; save r7 141656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 142656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD %r8,40(%sp) ; save r8 143656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD %r9,48(%sp) ; save r9 144656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,%ret1 ; return 0 by default 145656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DEPDI,Z 1,31,1,top_overflow ; top_overflow = 1 << 32 146656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 147656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CMPIB,>= 0,num,bn_mul_add_words_exit ; if (num <= 0) then exit 148656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDO 128(%sp),%sp ; bump stack 149656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 150656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; 151656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; The loop is unrolled twice, so if there is only 1 number 152656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; then go straight to the cleanup code. 153656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; 154656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CMPIB,= 1,num,bn_mul_add_words_single_top 155656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD -184(%sp),fw ; (-56-128) load up w into fw (fw_h/fw_l) 156656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 157656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; 158656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; This loop is unrolled 2 times (64-byte aligned as well) 159656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; 160656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; PA-RISC 2.0 chips have two fully pipelined multipliers, thus 161656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; two 32-bit mutiplies can be issued per cycle. 162656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; 163656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectbn_mul_add_words_unroll2 164656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 165656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 0(a_ptr),t_float_0 ; load up 64-bit value (fr8L) ht(L)/lt(R) 166656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 8(a_ptr),t_float_1 ; load up 64-bit value (fr8L) ht(L)/lt(R) 167656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD 0(r_ptr),rp_val ; rp[0] 168656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD 8(r_ptr),rp_val_1 ; rp[1] 169656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 170656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project XMPYU fht_0,fw_l,fm1 ; m1[0] = fht_0*fw_l 171656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project XMPYU fht_1,fw_l,fm1_1 ; m1[1] = fht_1*fw_l 172656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD fm1,-16(%sp) ; -16(sp) = m1[0] 173656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD fm1_1,-48(%sp) ; -48(sp) = m1[1] 174656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 175656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project XMPYU flt_0,fw_h,fm ; m[0] = flt_0*fw_h 176656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project XMPYU flt_1,fw_h,fm_1 ; m[1] = flt_1*fw_h 177656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD fm,-8(%sp) ; -8(sp) = m[0] 178656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD fm_1,-40(%sp) ; -40(sp) = m[1] 179656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 180656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project XMPYU fht_0,fw_h,ht_temp ; ht_temp = fht_0*fw_h 181656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project XMPYU fht_1,fw_h,ht_temp_1 ; ht_temp_1 = fht_1*fw_h 182656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD ht_temp,-24(%sp) ; -24(sp) = ht_temp 183656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD ht_temp_1,-56(%sp) ; -56(sp) = ht_temp_1 184656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 185656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project XMPYU flt_0,fw_l,lt_temp ; lt_temp = lt*fw_l 186656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project XMPYU flt_1,fw_l,lt_temp_1 ; lt_temp = lt*fw_l 187656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD lt_temp,-32(%sp) ; -32(sp) = lt_temp 188656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD lt_temp_1,-64(%sp) ; -64(sp) = lt_temp_1 189656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 190656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -8(%sp),m_0 ; m[0] 191656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -40(%sp),m_1 ; m[1] 192656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -16(%sp),m1_0 ; m1[0] 193656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -48(%sp),m1_1 ; m1[1] 194656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 195656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -24(%sp),ht_0 ; ht[0] 196656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -56(%sp),ht_1 ; ht[1] 197656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,L m1_0,m_0,tmp_0 ; tmp_0 = m[0] + m1[0]; 198656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,L m1_1,m_1,tmp_1 ; tmp_1 = m[1] + m1[1]; 199656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 200656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -32(%sp),lt_0 201656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -64(%sp),lt_1 202656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CMPCLR,*>>= tmp_0,m1_0, %r0 ; if (m[0] < m1[0]) 203656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,L ht_0,top_overflow,ht_0 ; ht[0] += (1<<32) 204656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 205656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CMPCLR,*>>= tmp_1,m1_1,%r0 ; if (m[1] < m1[1]) 206656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,L ht_1,top_overflow,ht_1 ; ht[1] += (1<<32) 207656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXTRD,U tmp_0,31,32,m_0 ; m[0]>>32 208656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DEPD,Z tmp_0,31,32,m1_0 ; m1[0] = m[0]<<32 209656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 210656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXTRD,U tmp_1,31,32,m_1 ; m[1]>>32 211656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DEPD,Z tmp_1,31,32,m1_1 ; m1[1] = m[1]<<32 212656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,L ht_0,m_0,ht_0 ; ht[0]+= (m[0]>>32) 213656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,L ht_1,m_1,ht_1 ; ht[1]+= (m[1]>>32) 214656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 215656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD lt_0,m1_0,lt_0 ; lt[0] = lt[0]+m1[0]; 216656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,DC ht_0,%r0,ht_0 ; ht[0]++ 217656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD lt_1,m1_1,lt_1 ; lt[1] = lt[1]+m1[1]; 218656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,DC ht_1,%r0,ht_1 ; ht[1]++ 219656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 220656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD %ret1,lt_0,lt_0 ; lt[0] = lt[0] + c; 221656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,DC ht_0,%r0,ht_0 ; ht[0]++ 222656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD lt_0,rp_val,lt_0 ; lt[0] = lt[0]+rp[0] 223656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,DC ht_0,%r0,ht_0 ; ht[0]++ 224656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 225656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDO -2(num),num ; num = num - 2; 226656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD ht_0,lt_1,lt_1 ; lt[1] = lt[1] + ht_0 (c); 227656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,DC ht_1,%r0,ht_1 ; ht[1]++ 228656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD lt_0,0(r_ptr) ; rp[0] = lt[0] 229656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 230656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD lt_1,rp_val_1,lt_1 ; lt[1] = lt[1]+rp[1] 231656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,DC ht_1,%r0,%ret1 ; ht[1]++ 232656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDO 16(a_ptr),a_ptr ; a_ptr += 2 233656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 234656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD lt_1,8(r_ptr) ; rp[1] = lt[1] 235656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CMPIB,<= 2,num,bn_mul_add_words_unroll2 ; go again if more to do 236656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDO 16(r_ptr),r_ptr ; r_ptr += 2 237656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 238656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CMPIB,=,N 0,num,bn_mul_add_words_exit ; are we done, or cleanup last one 239656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 240656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; 241656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; Top of loop aligned on 64-byte boundary 242656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; 243656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectbn_mul_add_words_single_top 244656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 0(a_ptr),t_float_0 ; load up 64-bit value (fr8L) ht(L)/lt(R) 245656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD 0(r_ptr),rp_val ; rp[0] 246656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDO 8(a_ptr),a_ptr ; a_ptr++ 247656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project XMPYU fht_0,fw_l,fm1 ; m1 = ht*fw_l 248656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD fm1,-16(%sp) ; -16(sp) = m1 249656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project XMPYU flt_0,fw_h,fm ; m = lt*fw_h 250656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD fm,-8(%sp) ; -8(sp) = m 251656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project XMPYU fht_0,fw_h,ht_temp ; ht_temp = ht*fw_h 252656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD ht_temp,-24(%sp) ; -24(sp) = ht 253656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project XMPYU flt_0,fw_l,lt_temp ; lt_temp = lt*fw_l 254656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD lt_temp,-32(%sp) ; -32(sp) = lt 255656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 256656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -8(%sp),m_0 257656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -16(%sp),m1_0 ; m1 = temp1 258656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,L m_0,m1_0,tmp_0 ; tmp_0 = m + m1; 259656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -24(%sp),ht_0 260656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -32(%sp),lt_0 261656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 262656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CMPCLR,*>>= tmp_0,m1_0,%r0 ; if (m < m1) 263656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,L ht_0,top_overflow,ht_0 ; ht += (1<<32) 264656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 265656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXTRD,U tmp_0,31,32,m_0 ; m>>32 266656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DEPD,Z tmp_0,31,32,m1_0 ; m1 = m<<32 267656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 268656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,L ht_0,m_0,ht_0 ; ht+= (m>>32) 269656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD lt_0,m1_0,tmp_0 ; tmp_0 = lt+m1; 270656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,DC ht_0,%r0,ht_0 ; ht++ 271656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD %ret1,tmp_0,lt_0 ; lt = lt + c; 272656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,DC ht_0,%r0,ht_0 ; ht++ 273656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD lt_0,rp_val,lt_0 ; lt = lt+rp[0] 274656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,DC ht_0,%r0,%ret1 ; ht++ 275656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD lt_0,0(r_ptr) ; rp[0] = lt 276656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 277656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectbn_mul_add_words_exit 278656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .EXIT 279656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 280656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXTRD,U %ret1,31,32,%ret0 ; for 32-bit, return in ret0/ret1 281656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -80(%sp),%r9 ; restore r9 282656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -88(%sp),%r8 ; restore r8 283656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -96(%sp),%r7 ; restore r7 284656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -104(%sp),%r6 ; restore r6 285656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -112(%sp),%r5 ; restore r5 286656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -120(%sp),%r4 ; restore r4 287656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project BVE (%rp) 288656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD,MB -128(%sp),%r3 ; restore r3 289656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .PROCEND ;in=23,24,25,26,29;out=28; 290656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 291656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project;---------------------------------------------------------------------------- 292656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 293656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project;BN_ULONG bn_mul_words(BN_ULONG *rp, BN_ULONG *ap, int num, BN_ULONG w) 294656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 295656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; arg0 = rp 296656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; arg1 = ap 297656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; arg3 = num 298656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; w on stack at -56(sp) 299656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 300656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectbn_mul_words 301656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .proc 302656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .callinfo frame=128 303656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .entry 304656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .EXPORT bn_mul_words,ENTRY,PRIV_LEV=3,NO_RELOCATION,LONG_RETURN 305656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .align 64 306656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 307656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD %r3,0(%sp) ; save r3 308656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD %r4,8(%sp) ; save r4 309656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project NOP 310656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD %r5,16(%sp) ; save r5 311656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 312656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD %r6,24(%sp) ; save r6 313656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD %r7,32(%sp) ; save r7 314656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,%ret1 ; return 0 by default 315656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DEPDI,Z 1,31,1,top_overflow ; top_overflow = 1 << 32 316656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 317656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CMPIB,>= 0,num,bn_mul_words_exit 318656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDO 128(%sp),%sp ; bump stack 319656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 320656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; 321656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; See if only 1 word to do, thus just do cleanup 322656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; 323656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CMPIB,= 1,num,bn_mul_words_single_top 324656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD -184(%sp),fw ; (-56-128) load up w into fw (fw_h/fw_l) 325656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 326656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; 327656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; This loop is unrolled 2 times (64-byte aligned as well) 328656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; 329656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; PA-RISC 2.0 chips have two fully pipelined multipliers, thus 330656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; two 32-bit mutiplies can be issued per cycle. 331656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; 332656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectbn_mul_words_unroll2 333656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 334656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 0(a_ptr),t_float_0 ; load up 64-bit value (fr8L) ht(L)/lt(R) 335656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 8(a_ptr),t_float_1 ; load up 64-bit value (fr8L) ht(L)/lt(R) 336656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project XMPYU fht_0,fw_l,fm1 ; m1[0] = fht_0*fw_l 337656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project XMPYU fht_1,fw_l,fm1_1 ; m1[1] = ht*fw_l 338656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 339656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD fm1,-16(%sp) ; -16(sp) = m1 340656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD fm1_1,-48(%sp) ; -48(sp) = m1 341656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project XMPYU flt_0,fw_h,fm ; m = lt*fw_h 342656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project XMPYU flt_1,fw_h,fm_1 ; m = lt*fw_h 343656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 344656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD fm,-8(%sp) ; -8(sp) = m 345656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD fm_1,-40(%sp) ; -40(sp) = m 346656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project XMPYU fht_0,fw_h,ht_temp ; ht_temp = fht_0*fw_h 347656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project XMPYU fht_1,fw_h,ht_temp_1 ; ht_temp = ht*fw_h 348656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 349656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD ht_temp,-24(%sp) ; -24(sp) = ht 350656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD ht_temp_1,-56(%sp) ; -56(sp) = ht 351656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project XMPYU flt_0,fw_l,lt_temp ; lt_temp = lt*fw_l 352656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project XMPYU flt_1,fw_l,lt_temp_1 ; lt_temp = lt*fw_l 353656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 354656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD lt_temp,-32(%sp) ; -32(sp) = lt 355656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD lt_temp_1,-64(%sp) ; -64(sp) = lt 356656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -8(%sp),m_0 357656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -40(%sp),m_1 358656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 359656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -16(%sp),m1_0 360656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -48(%sp),m1_1 361656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -24(%sp),ht_0 362656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -56(%sp),ht_1 363656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 364656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,L m1_0,m_0,tmp_0 ; tmp_0 = m + m1; 365656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,L m1_1,m_1,tmp_1 ; tmp_1 = m + m1; 366656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -32(%sp),lt_0 367656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -64(%sp),lt_1 368656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 369656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CMPCLR,*>>= tmp_0,m1_0, %r0 ; if (m < m1) 370656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,L ht_0,top_overflow,ht_0 ; ht += (1<<32) 371656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CMPCLR,*>>= tmp_1,m1_1,%r0 ; if (m < m1) 372656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,L ht_1,top_overflow,ht_1 ; ht += (1<<32) 373656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 374656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXTRD,U tmp_0,31,32,m_0 ; m>>32 375656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DEPD,Z tmp_0,31,32,m1_0 ; m1 = m<<32 376656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXTRD,U tmp_1,31,32,m_1 ; m>>32 377656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DEPD,Z tmp_1,31,32,m1_1 ; m1 = m<<32 378656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 379656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,L ht_0,m_0,ht_0 ; ht+= (m>>32) 380656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,L ht_1,m_1,ht_1 ; ht+= (m>>32) 381656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD lt_0,m1_0,lt_0 ; lt = lt+m1; 382656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,DC ht_0,%r0,ht_0 ; ht++ 383656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 384656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD lt_1,m1_1,lt_1 ; lt = lt+m1; 385656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,DC ht_1,%r0,ht_1 ; ht++ 386656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD %ret1,lt_0,lt_0 ; lt = lt + c (ret1); 387656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,DC ht_0,%r0,ht_0 ; ht++ 388656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 389656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD ht_0,lt_1,lt_1 ; lt = lt + c (ht_0) 390656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,DC ht_1,%r0,ht_1 ; ht++ 391656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD lt_0,0(r_ptr) ; rp[0] = lt 392656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD lt_1,8(r_ptr) ; rp[1] = lt 393656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 394656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY ht_1,%ret1 ; carry = ht 395656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDO -2(num),num ; num = num - 2; 396656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDO 16(a_ptr),a_ptr ; ap += 2 397656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CMPIB,<= 2,num,bn_mul_words_unroll2 398656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDO 16(r_ptr),r_ptr ; rp++ 399656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 400656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CMPIB,=,N 0,num,bn_mul_words_exit ; are we done? 401656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 402656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; 403656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; Top of loop aligned on 64-byte boundary 404656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; 405656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectbn_mul_words_single_top 406656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 0(a_ptr),t_float_0 ; load up 64-bit value (fr8L) ht(L)/lt(R) 407656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 408656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project XMPYU fht_0,fw_l,fm1 ; m1 = ht*fw_l 409656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD fm1,-16(%sp) ; -16(sp) = m1 410656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project XMPYU flt_0,fw_h,fm ; m = lt*fw_h 411656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD fm,-8(%sp) ; -8(sp) = m 412656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project XMPYU fht_0,fw_h,ht_temp ; ht_temp = ht*fw_h 413656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD ht_temp,-24(%sp) ; -24(sp) = ht 414656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project XMPYU flt_0,fw_l,lt_temp ; lt_temp = lt*fw_l 415656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD lt_temp,-32(%sp) ; -32(sp) = lt 416656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 417656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -8(%sp),m_0 418656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -16(%sp),m1_0 419656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,L m_0,m1_0,tmp_0 ; tmp_0 = m + m1; 420656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -24(%sp),ht_0 421656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -32(%sp),lt_0 422656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 423656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CMPCLR,*>>= tmp_0,m1_0,%r0 ; if (m < m1) 424656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,L ht_0,top_overflow,ht_0 ; ht += (1<<32) 425656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 426656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXTRD,U tmp_0,31,32,m_0 ; m>>32 427656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DEPD,Z tmp_0,31,32,m1_0 ; m1 = m<<32 428656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 429656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,L ht_0,m_0,ht_0 ; ht+= (m>>32) 430656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD lt_0,m1_0,lt_0 ; lt= lt+m1; 431656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,DC ht_0,%r0,ht_0 ; ht++ 432656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 433656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD %ret1,lt_0,lt_0 ; lt = lt + c; 434656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,DC ht_0,%r0,ht_0 ; ht++ 435656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 436656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY ht_0,%ret1 ; copy carry 437656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD lt_0,0(r_ptr) ; rp[0] = lt 438656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 439656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectbn_mul_words_exit 440656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .EXIT 441656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXTRD,U %ret1,31,32,%ret0 ; for 32-bit, return in ret0/ret1 442656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -96(%sp),%r7 ; restore r7 443656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -104(%sp),%r6 ; restore r6 444656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -112(%sp),%r5 ; restore r5 445656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -120(%sp),%r4 ; restore r4 446656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project BVE (%rp) 447656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD,MB -128(%sp),%r3 ; restore r3 448656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .PROCEND 449656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 450656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project;---------------------------------------------------------------------------- 451656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 452656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project;void bn_sqr_words(BN_ULONG *rp, BN_ULONG *ap, int num) 453656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 454656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; arg0 = rp 455656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; arg1 = ap 456656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; arg2 = num 457656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 458656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 459656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectbn_sqr_words 460656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .proc 461656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .callinfo FRAME=128,ENTRY_GR=%r3,ARGS_SAVED,ORDERING_AWARE 462656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .EXPORT bn_sqr_words,ENTRY,PRIV_LEV=3,NO_RELOCATION,LONG_RETURN 463656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .entry 464656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .align 64 465656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 466656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD %r3,0(%sp) ; save r3 467656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD %r4,8(%sp) ; save r4 468656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project NOP 469656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD %r5,16(%sp) ; save r5 470656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 471656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CMPIB,>= 0,num,bn_sqr_words_exit 472656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDO 128(%sp),%sp ; bump stack 473656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 474656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; 475656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; If only 1, the goto straight to cleanup 476656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; 477656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CMPIB,= 1,num,bn_sqr_words_single_top 478656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DEPDI,Z -1,32,33,high_mask ; Create Mask 0xffffffff80000000L 479656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 480656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; 481656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; This loop is unrolled 2 times (64-byte aligned as well) 482656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; 483656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 484656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectbn_sqr_words_unroll2 485656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 0(a_ptr),t_float_0 ; a[0] 486656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 8(a_ptr),t_float_1 ; a[1] 487656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project XMPYU fht_0,flt_0,fm ; m[0] 488656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project XMPYU fht_1,flt_1,fm_1 ; m[1] 489656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 490656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD fm,-24(%sp) ; store m[0] 491656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD fm_1,-56(%sp) ; store m[1] 492656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project XMPYU flt_0,flt_0,lt_temp ; lt[0] 493656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project XMPYU flt_1,flt_1,lt_temp_1 ; lt[1] 494656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 495656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD lt_temp,-16(%sp) ; store lt[0] 496656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD lt_temp_1,-48(%sp) ; store lt[1] 497656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project XMPYU fht_0,fht_0,ht_temp ; ht[0] 498656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project XMPYU fht_1,fht_1,ht_temp_1 ; ht[1] 499656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 500656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD ht_temp,-8(%sp) ; store ht[0] 501656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD ht_temp_1,-40(%sp) ; store ht[1] 502656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -24(%sp),m_0 503656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -56(%sp),m_1 504656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 505656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project AND m_0,high_mask,tmp_0 ; m[0] & Mask 506656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project AND m_1,high_mask,tmp_1 ; m[1] & Mask 507656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DEPD,Z m_0,30,31,m_0 ; m[0] << 32+1 508656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DEPD,Z m_1,30,31,m_1 ; m[1] << 32+1 509656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 510656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -16(%sp),lt_0 511656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -48(%sp),lt_1 512656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXTRD,U tmp_0,32,33,tmp_0 ; tmp_0 = m[0]&Mask >> 32-1 513656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXTRD,U tmp_1,32,33,tmp_1 ; tmp_1 = m[1]&Mask >> 32-1 514656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 515656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -8(%sp),ht_0 516656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -40(%sp),ht_1 517656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,L ht_0,tmp_0,ht_0 ; ht[0] += tmp_0 518656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,L ht_1,tmp_1,ht_1 ; ht[1] += tmp_1 519656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 520656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD lt_0,m_0,lt_0 ; lt = lt+m 521656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,DC ht_0,%r0,ht_0 ; ht[0]++ 522656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD lt_0,0(r_ptr) ; rp[0] = lt[0] 523656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD ht_0,8(r_ptr) ; rp[1] = ht[1] 524656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 525656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD lt_1,m_1,lt_1 ; lt = lt+m 526656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,DC ht_1,%r0,ht_1 ; ht[1]++ 527656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD lt_1,16(r_ptr) ; rp[2] = lt[1] 528656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD ht_1,24(r_ptr) ; rp[3] = ht[1] 529656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 530656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDO -2(num),num ; num = num - 2; 531656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDO 16(a_ptr),a_ptr ; ap += 2 532656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CMPIB,<= 2,num,bn_sqr_words_unroll2 533656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDO 32(r_ptr),r_ptr ; rp += 4 534656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 535656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CMPIB,=,N 0,num,bn_sqr_words_exit ; are we done? 536656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 537656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; 538656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; Top of loop aligned on 64-byte boundary 539656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; 540656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectbn_sqr_words_single_top 541656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 0(a_ptr),t_float_0 ; load up 64-bit value (fr8L) ht(L)/lt(R) 542656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 543656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project XMPYU fht_0,flt_0,fm ; m 544656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD fm,-24(%sp) ; store m 545656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 546656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project XMPYU flt_0,flt_0,lt_temp ; lt 547656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD lt_temp,-16(%sp) ; store lt 548656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 549656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project XMPYU fht_0,fht_0,ht_temp ; ht 550656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD ht_temp,-8(%sp) ; store ht 551656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 552656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -24(%sp),m_0 ; load m 553656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project AND m_0,high_mask,tmp_0 ; m & Mask 554656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DEPD,Z m_0,30,31,m_0 ; m << 32+1 555656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -16(%sp),lt_0 ; lt 556656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 557656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -8(%sp),ht_0 ; ht 558656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXTRD,U tmp_0,32,33,tmp_0 ; tmp_0 = m&Mask >> 32-1 559656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD m_0,lt_0,lt_0 ; lt = lt+m 560656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,L ht_0,tmp_0,ht_0 ; ht += tmp_0 561656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,DC ht_0,%r0,ht_0 ; ht++ 562656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 563656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD lt_0,0(r_ptr) ; rp[0] = lt 564656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD ht_0,8(r_ptr) ; rp[1] = ht 565656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 566656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectbn_sqr_words_exit 567656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .EXIT 568656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -112(%sp),%r5 ; restore r5 569656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -120(%sp),%r4 ; restore r4 570656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project BVE (%rp) 571656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD,MB -128(%sp),%r3 572656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .PROCEND ;in=23,24,25,26,29;out=28; 573656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 574656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 575656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project;---------------------------------------------------------------------------- 576656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 577656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project;BN_ULONG bn_add_words(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int n) 578656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 579656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; arg0 = rp 580656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; arg1 = ap 581656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; arg2 = bp 582656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; arg3 = n 583656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 584656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectt .reg %r22 585656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectb .reg %r21 586656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectl .reg %r20 587656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 588656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectbn_add_words 589656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .proc 590656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .entry 591656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .callinfo 592656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .EXPORT bn_add_words,ENTRY,PRIV_LEV=3,NO_RELOCATION,LONG_RETURN 593656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .align 64 594656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 595656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CMPIB,>= 0,n,bn_add_words_exit 596656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,%ret1 ; return 0 by default 597656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 598656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; 599656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; If 2 or more numbers do the loop 600656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; 601656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CMPIB,= 1,n,bn_add_words_single_top 602656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project NOP 603656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 604656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; 605656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; This loop is unrolled 2 times (64-byte aligned as well) 606656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; 607656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectbn_add_words_unroll2 608656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD 0(a_ptr),t 609656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD 0(b_ptr),b 610656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD t,%ret1,t ; t = t+c; 611656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,DC %r0,%r0,%ret1 ; set c to carry 612656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD t,b,l ; l = t + b[0] 613656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,DC %ret1,%r0,%ret1 ; c+= carry 614656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD l,0(r_ptr) 615656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 616656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD 8(a_ptr),t 617656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD 8(b_ptr),b 618656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD t,%ret1,t ; t = t+c; 619656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,DC %r0,%r0,%ret1 ; set c to carry 620656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD t,b,l ; l = t + b[0] 621656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,DC %ret1,%r0,%ret1 ; c+= carry 622656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD l,8(r_ptr) 623656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 624656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDO -2(n),n 625656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDO 16(a_ptr),a_ptr 626656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDO 16(b_ptr),b_ptr 627656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 628656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CMPIB,<= 2,n,bn_add_words_unroll2 629656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDO 16(r_ptr),r_ptr 630656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 631656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CMPIB,=,N 0,n,bn_add_words_exit ; are we done? 632656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 633656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectbn_add_words_single_top 634656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD 0(a_ptr),t 635656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD 0(b_ptr),b 636656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 637656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD t,%ret1,t ; t = t+c; 638656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,DC %r0,%r0,%ret1 ; set c to carry (could use CMPCLR??) 639656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD t,b,l ; l = t + b[0] 640656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,DC %ret1,%r0,%ret1 ; c+= carry 641656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD l,0(r_ptr) 642656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 643656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectbn_add_words_exit 644656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .EXIT 645656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project BVE (%rp) 646656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXTRD,U %ret1,31,32,%ret0 ; for 32-bit, return in ret0/ret1 647656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .PROCEND ;in=23,24,25,26,29;out=28; 648656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 649656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project;---------------------------------------------------------------------------- 650656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 651656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project;BN_ULONG bn_sub_words(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int n) 652656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 653656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; arg0 = rp 654656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; arg1 = ap 655656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; arg2 = bp 656656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; arg3 = n 657656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 658656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectt1 .reg %r22 659656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectt2 .reg %r21 660656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectsub_tmp1 .reg %r20 661656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectsub_tmp2 .reg %r19 662656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 663656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 664656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectbn_sub_words 665656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .proc 666656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .callinfo 667656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .EXPORT bn_sub_words,ENTRY,PRIV_LEV=3,NO_RELOCATION,LONG_RETURN 668656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .entry 669656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .align 64 670656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 671656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CMPIB,>= 0,n,bn_sub_words_exit 672656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,%ret1 ; return 0 by default 673656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 674656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; 675656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; If 2 or more numbers do the loop 676656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; 677656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CMPIB,= 1,n,bn_sub_words_single_top 678656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project NOP 679656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 680656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; 681656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; This loop is unrolled 2 times (64-byte aligned as well) 682656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; 683656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectbn_sub_words_unroll2 684656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD 0(a_ptr),t1 685656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD 0(b_ptr),t2 686656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SUB t1,t2,sub_tmp1 ; t3 = t1-t2; 687656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SUB sub_tmp1,%ret1,sub_tmp1 ; t3 = t3- c; 688656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 689656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CMPCLR,*>> t1,t2,sub_tmp2 ; clear if t1 > t2 690656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDO 1(%r0),sub_tmp2 691656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 692656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CMPCLR,*= t1,t2,%r0 693656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY sub_tmp2,%ret1 694656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD sub_tmp1,0(r_ptr) 695656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 696656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD 8(a_ptr),t1 697656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD 8(b_ptr),t2 698656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SUB t1,t2,sub_tmp1 ; t3 = t1-t2; 699656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SUB sub_tmp1,%ret1,sub_tmp1 ; t3 = t3- c; 700656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CMPCLR,*>> t1,t2,sub_tmp2 ; clear if t1 > t2 701656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDO 1(%r0),sub_tmp2 702656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 703656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CMPCLR,*= t1,t2,%r0 704656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY sub_tmp2,%ret1 705656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD sub_tmp1,8(r_ptr) 706656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 707656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDO -2(n),n 708656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDO 16(a_ptr),a_ptr 709656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDO 16(b_ptr),b_ptr 710656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 711656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CMPIB,<= 2,n,bn_sub_words_unroll2 712656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDO 16(r_ptr),r_ptr 713656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 714656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CMPIB,=,N 0,n,bn_sub_words_exit ; are we done? 715656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 716656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectbn_sub_words_single_top 717656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD 0(a_ptr),t1 718656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD 0(b_ptr),t2 719656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SUB t1,t2,sub_tmp1 ; t3 = t1-t2; 720656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SUB sub_tmp1,%ret1,sub_tmp1 ; t3 = t3- c; 721656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CMPCLR,*>> t1,t2,sub_tmp2 ; clear if t1 > t2 722656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDO 1(%r0),sub_tmp2 723656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 724656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CMPCLR,*= t1,t2,%r0 725656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY sub_tmp2,%ret1 726656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 727656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD sub_tmp1,0(r_ptr) 728656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 729656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectbn_sub_words_exit 730656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .EXIT 731656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project BVE (%rp) 732656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXTRD,U %ret1,31,32,%ret0 ; for 32-bit, return in ret0/ret1 733656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .PROCEND ;in=23,24,25,26,29;out=28; 734656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 735656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project;------------------------------------------------------------------------------ 736656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 737656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; unsigned long bn_div_words(unsigned long h, unsigned long l, unsigned long d) 738656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 739656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; arg0 = h 740656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; arg1 = l 741656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; arg2 = d 742656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 743656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; This is mainly just output from the HP C compiler. 744656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 745656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project;------------------------------------------------------------------------------ 746656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectbn_div_words 747656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .PROC 748656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .EXPORT bn_div_words,ENTRY,PRIV_LEV=3,ARGW0=GR,ARGW1=GR,ARGW2=GR,ARGW3=GR,RTNVAL=GR,LONG_RETURN 749656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .IMPORT BN_num_bits_word,CODE 750656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ;--- not PIC .IMPORT __iob,DATA 751656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ;--- not PIC .IMPORT fprintf,CODE 752656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .IMPORT abort,CODE 753656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .IMPORT $$div2U,MILLICODE 754656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .CALLINFO CALLER,FRAME=144,ENTRY_GR=%r9,SAVE_RP,ARGS_SAVED,ORDERING_AWARE 755656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .ENTRY 756656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STW %r2,-20(%r30) ;offset 0x8ec 757656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STW,MA %r3,192(%r30) ;offset 0x8f0 758656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STW %r4,-188(%r30) ;offset 0x8f4 759656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DEPD %r5,31,32,%r6 ;offset 0x8f8 760656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD %r6,-184(%r30) ;offset 0x8fc 761656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DEPD %r7,31,32,%r8 ;offset 0x900 762656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD %r8,-176(%r30) ;offset 0x904 763656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STW %r9,-168(%r30) ;offset 0x908 764656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -248(%r30),%r3 ;offset 0x90c 765656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r26,%r4 ;offset 0x910 766656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r24,%r5 ;offset 0x914 767656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DEPD %r25,31,32,%r4 ;offset 0x918 768656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CMPB,*<> %r3,%r0,$0006000C ;offset 0x91c 769656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DEPD %r23,31,32,%r5 ;offset 0x920 770656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MOVIB,TR -1,%r29,$00060002 ;offset 0x924 771656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXTRD,U %r29,31,32,%r28 ;offset 0x928 772656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$0006002A 773656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDO -1(%r29),%r29 ;offset 0x92c 774656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SUB %r23,%r7,%r23 ;offset 0x930 775656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$00060024 776656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SUB %r4,%r31,%r25 ;offset 0x934 777656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project AND %r25,%r19,%r26 ;offset 0x938 778656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CMPB,*<>,N %r0,%r26,$00060046 ;offset 0x93c 779656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DEPD,Z %r25,31,32,%r20 ;offset 0x940 780656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project OR %r20,%r24,%r21 ;offset 0x944 781656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CMPB,*<<,N %r21,%r23,$0006002A ;offset 0x948 782656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SUB %r31,%r2,%r31 ;offset 0x94c 783656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$00060046 784656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$0006002E 785656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DEPD,Z %r23,31,32,%r25 ;offset 0x950 786656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXTRD,U %r23,31,32,%r26 ;offset 0x954 787656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project AND %r25,%r19,%r24 ;offset 0x958 788656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,L %r31,%r26,%r31 ;offset 0x95c 789656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CMPCLR,*>>= %r5,%r24,%r0 ;offset 0x960 790656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDO 1(%r31),%r31 ;offset 0x964 791656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$00060032 792656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CMPB,*<<=,N %r31,%r4,$00060036 ;offset 0x968 793656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDO -1(%r29),%r29 ;offset 0x96c 794656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,L %r4,%r3,%r4 ;offset 0x970 795656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$00060036 796656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADDIB,=,N -1,%r8,$D0 ;offset 0x974 797656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SUB %r5,%r24,%r28 ;offset 0x978 798656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$0006003A 799656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SUB %r4,%r31,%r24 ;offset 0x97c 800656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SHRPD %r24,%r28,32,%r4 ;offset 0x980 801656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DEPD,Z %r29,31,32,%r9 ;offset 0x984 802656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DEPD,Z %r28,31,32,%r5 ;offset 0x988 803656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$0006001C 804656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXTRD,U %r4,31,32,%r31 ;offset 0x98c 805656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CMPB,*<>,N %r31,%r2,$00060020 ;offset 0x990 806656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MOVB,TR %r6,%r29,$D1 ;offset 0x994 807656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD %r29,-152(%r30) ;offset 0x998 808656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$0006000C 809656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXTRD,U %r3,31,32,%r25 ;offset 0x99c 810656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r3,%r26 ;offset 0x9a0 811656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXTRD,U %r3,31,32,%r9 ;offset 0x9a4 812656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXTRD,U %r4,31,32,%r8 ;offset 0x9a8 813656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .CALL ARGW0=GR,ARGW1=GR,RTNVAL=GR ;in=25,26;out=28; 814656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project B,L BN_num_bits_word,%r2 ;offset 0x9ac 815656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXTRD,U %r5,31,32,%r7 ;offset 0x9b0 816656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDI 64,%r20 ;offset 0x9b4 817656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DEPD %r7,31,32,%r5 ;offset 0x9b8 818656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DEPD %r8,31,32,%r4 ;offset 0x9bc 819656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DEPD %r9,31,32,%r3 ;offset 0x9c0 820656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CMPB,= %r28,%r20,$00060012 ;offset 0x9c4 821656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r28,%r24 ;offset 0x9c8 822656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MTSARCM %r24 ;offset 0x9cc 823656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DEPDI,Z -1,%sar,1,%r19 ;offset 0x9d0 824656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CMPB,*>>,N %r4,%r19,$D2 ;offset 0x9d4 825656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$00060012 826656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SUBI 64,%r24,%r31 ;offset 0x9d8 827656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CMPCLR,*<< %r4,%r3,%r0 ;offset 0x9dc 828656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SUB %r4,%r3,%r4 ;offset 0x9e0 829656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$00060016 830656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CMPB,= %r31,%r0,$0006001A ;offset 0x9e4 831656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,%r9 ;offset 0x9e8 832656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MTSARCM %r31 ;offset 0x9ec 833656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DEPD,Z %r3,%sar,64,%r3 ;offset 0x9f0 834656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SUBI 64,%r31,%r26 ;offset 0x9f4 835656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MTSAR %r26 ;offset 0x9f8 836656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SHRPD %r4,%r5,%sar,%r4 ;offset 0x9fc 837656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MTSARCM %r31 ;offset 0xa00 838656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DEPD,Z %r5,%sar,64,%r5 ;offset 0xa04 839656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$0006001A 840656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DEPDI,Z -1,31,32,%r19 ;offset 0xa08 841656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project AND %r3,%r19,%r29 ;offset 0xa0c 842656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXTRD,U %r29,31,32,%r2 ;offset 0xa10 843656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DEPDI,Z -1,63,32,%r6 ;offset 0xa14 844656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MOVIB,TR 2,%r8,$0006001C ;offset 0xa18 845656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXTRD,U %r3,63,32,%r7 ;offset 0xa1c 846656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$D2 847656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ;--- not PIC ADDIL LR'__iob-$global$,%r27,%r1 ;offset 0xa20 848656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ;--- not PIC LDIL LR'C$7,%r21 ;offset 0xa24 849656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ;--- not PIC LDO RR'__iob-$global$+32(%r1),%r26 ;offset 0xa28 850656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ;--- not PIC .CALL ARGW0=GR,ARGW1=GR,ARGW2=GR,RTNVAL=GR ;in=24,25,26;out=28; 851656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ;--- not PIC B,L fprintf,%r2 ;offset 0xa2c 852656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ;--- not PIC LDO RR'C$7(%r21),%r25 ;offset 0xa30 853656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .CALL ; 854656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project B,L abort,%r2 ;offset 0xa34 855656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project NOP ;offset 0xa38 856656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project B $D3 ;offset 0xa3c 857656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDW -212(%r30),%r2 ;offset 0xa40 858656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$00060020 859656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r4,%r26 ;offset 0xa44 860656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXTRD,U %r4,31,32,%r25 ;offset 0xa48 861656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r2,%r24 ;offset 0xa4c 862656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .CALL ;in=23,24,25,26;out=20,21,22,28,29; (MILLICALL) 863656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project B,L $$div2U,%r31 ;offset 0xa50 864656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXTRD,U %r2,31,32,%r23 ;offset 0xa54 865656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DEPD %r28,31,32,%r29 ;offset 0xa58 866656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$00060022 867656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD %r29,-152(%r30) ;offset 0xa5c 868656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$D1 869656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project AND %r5,%r19,%r24 ;offset 0xa60 870656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXTRD,U %r24,31,32,%r24 ;offset 0xa64 871656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STW %r2,-160(%r30) ;offset 0xa68 872656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STW %r7,-128(%r30) ;offset 0xa6c 873656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD -152(%r30),%fr4 ;offset 0xa70 874656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD -152(%r30),%fr7 ;offset 0xa74 875656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDW -160(%r30),%fr8L ;offset 0xa78 876656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDW -128(%r30),%fr5L ;offset 0xa7c 877656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project XMPYU %fr8L,%fr7L,%fr10 ;offset 0xa80 878656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD %fr10,-136(%r30) ;offset 0xa84 879656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project XMPYU %fr8L,%fr7R,%fr22 ;offset 0xa88 880656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD %fr22,-144(%r30) ;offset 0xa8c 881656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project XMPYU %fr5L,%fr4L,%fr11 ;offset 0xa90 882656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project XMPYU %fr5L,%fr4R,%fr23 ;offset 0xa94 883656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD %fr11,-112(%r30) ;offset 0xa98 884656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD %fr23,-120(%r30) ;offset 0xa9c 885656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -136(%r30),%r28 ;offset 0xaa0 886656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DEPD,Z %r28,31,32,%r31 ;offset 0xaa4 887656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -144(%r30),%r20 ;offset 0xaa8 888656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,L %r20,%r31,%r31 ;offset 0xaac 889656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -112(%r30),%r22 ;offset 0xab0 890656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DEPD,Z %r22,31,32,%r22 ;offset 0xab4 891656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -120(%r30),%r21 ;offset 0xab8 892656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project B $00060024 ;offset 0xabc 893656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,L %r21,%r22,%r23 ;offset 0xac0 894656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$D0 895656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project OR %r9,%r29,%r29 ;offset 0xac4 896656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$00060040 897656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXTRD,U %r29,31,32,%r28 ;offset 0xac8 898656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$00060002 899656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$L2 900656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDW -212(%r30),%r2 ;offset 0xacc 901656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$D3 902656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDW -168(%r30),%r9 ;offset 0xad0 903656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -176(%r30),%r8 ;offset 0xad4 904656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXTRD,U %r8,31,32,%r7 ;offset 0xad8 905656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -184(%r30),%r6 ;offset 0xadc 906656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXTRD,U %r6,31,32,%r5 ;offset 0xae0 907656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDW -188(%r30),%r4 ;offset 0xae4 908656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project BVE (%r2) ;offset 0xae8 909656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .EXIT 910656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDW,MB -192(%r30),%r3 ;offset 0xaec 911656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .PROCEND ;in=23,25;out=28,29;fpin=105,107; 912656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 913656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 914656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 915656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 916656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project;---------------------------------------------------------------------------- 917656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 918656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; Registers to hold 64-bit values to manipulate. The "L" part 919656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; of the register corresponds to the upper 32-bits, while the "R" 920656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; part corresponds to the lower 32-bits 921656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 922656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; Note, that when using b6 and b7, the code must save these before 923656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; using them because they are callee save registers 924656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 925656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 926656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; Floating point registers to use to save values that 927656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; are manipulated. These don't collide with ftemp1-6 and 928656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; are all caller save registers 929656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 930656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecta0 .reg %fr22 931656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecta0L .reg %fr22L 932656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecta0R .reg %fr22R 933656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 934656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecta1 .reg %fr23 935656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecta1L .reg %fr23L 936656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecta1R .reg %fr23R 937656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 938656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecta2 .reg %fr24 939656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecta2L .reg %fr24L 940656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecta2R .reg %fr24R 941656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 942656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecta3 .reg %fr25 943656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecta3L .reg %fr25L 944656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecta3R .reg %fr25R 945656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 946656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecta4 .reg %fr26 947656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecta4L .reg %fr26L 948656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecta4R .reg %fr26R 949656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 950656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecta5 .reg %fr27 951656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecta5L .reg %fr27L 952656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecta5R .reg %fr27R 953656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 954656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecta6 .reg %fr28 955656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecta6L .reg %fr28L 956656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecta6R .reg %fr28R 957656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 958656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecta7 .reg %fr29 959656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecta7L .reg %fr29L 960656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecta7R .reg %fr29R 961656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 962656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectb0 .reg %fr30 963656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectb0L .reg %fr30L 964656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectb0R .reg %fr30R 965656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 966656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectb1 .reg %fr31 967656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectb1L .reg %fr31L 968656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectb1R .reg %fr31R 969656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 970656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 971656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; Temporary floating point variables, these are all caller save 972656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; registers 973656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 974656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectftemp1 .reg %fr4 975656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectftemp2 .reg %fr5 976656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectftemp3 .reg %fr6 977656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectftemp4 .reg %fr7 978656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 979656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 980656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; The B set of registers when used. 981656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 982656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 983656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectb2 .reg %fr8 984656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectb2L .reg %fr8L 985656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectb2R .reg %fr8R 986656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 987656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectb3 .reg %fr9 988656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectb3L .reg %fr9L 989656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectb3R .reg %fr9R 990656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 991656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectb4 .reg %fr10 992656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectb4L .reg %fr10L 993656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectb4R .reg %fr10R 994656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 995656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectb5 .reg %fr11 996656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectb5L .reg %fr11L 997656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectb5R .reg %fr11R 998656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 999656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectb6 .reg %fr12 1000656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectb6L .reg %fr12L 1001656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectb6R .reg %fr12R 1002656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1003656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectb7 .reg %fr13 1004656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectb7L .reg %fr13L 1005656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectb7R .reg %fr13R 1006656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1007656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectc1 .reg %r21 ; only reg 1008656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttemp1 .reg %r20 ; only reg 1009656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttemp2 .reg %r19 ; only reg 1010656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecttemp3 .reg %r31 ; only reg 1011656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1012656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectm1 .reg %r28 1013656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectc2 .reg %r23 1014656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projecthigh_one .reg %r1 1015656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectht .reg %r6 1016656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectlt .reg %r5 1017656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectm .reg %r4 1018656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectc3 .reg %r3 1019656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1020656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectSQR_ADD_C .macro A0L,A0R,C1,C2,C3 1021656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project XMPYU A0L,A0R,ftemp1 ; m 1022656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD ftemp1,-24(%sp) ; store m 1023656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1024656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project XMPYU A0R,A0R,ftemp2 ; lt 1025656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD ftemp2,-16(%sp) ; store lt 1026656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1027656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project XMPYU A0L,A0L,ftemp3 ; ht 1028656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD ftemp3,-8(%sp) ; store ht 1029656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1030656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -24(%sp),m ; load m 1031656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project AND m,high_mask,temp2 ; m & Mask 1032656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DEPD,Z m,30,31,temp3 ; m << 32+1 1033656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -16(%sp),lt ; lt 1034656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1035656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -8(%sp),ht ; ht 1036656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXTRD,U temp2,32,33,temp1 ; temp1 = m&Mask >> 32-1 1037656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD temp3,lt,lt ; lt = lt+m 1038656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,L ht,temp1,ht ; ht += temp1 1039656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,DC ht,%r0,ht ; ht++ 1040656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1041656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD C1,lt,C1 ; c1=c1+lt 1042656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,DC ht,%r0,ht ; ht++ 1043656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1044656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD C2,ht,C2 ; c2=c2+ht 1045656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,DC C3,%r0,C3 ; c3++ 1046656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.endm 1047656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1048656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectSQR_ADD_C2 .macro A0L,A0R,A1L,A1R,C1,C2,C3 1049656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project XMPYU A0L,A1R,ftemp1 ; m1 = bl*ht 1050656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD ftemp1,-16(%sp) ; 1051656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project XMPYU A0R,A1L,ftemp2 ; m = bh*lt 1052656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD ftemp2,-8(%sp) ; 1053656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project XMPYU A0R,A1R,ftemp3 ; lt = bl*lt 1054656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD ftemp3,-32(%sp) 1055656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project XMPYU A0L,A1L,ftemp4 ; ht = bh*ht 1056656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD ftemp4,-24(%sp) ; 1057656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1058656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -8(%sp),m ; r21 = m 1059656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -16(%sp),m1 ; r19 = m1 1060656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,L m,m1,m ; m+m1 1061656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1062656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DEPD,Z m,31,32,temp3 ; (m+m1<<32) 1063656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -24(%sp),ht ; r24 = ht 1064656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1065656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CMPCLR,*>>= m,m1,%r0 ; if (m < m1) 1066656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,L ht,high_one,ht ; ht+=high_one 1067656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1068656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXTRD,U m,31,32,temp1 ; m >> 32 1069656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -32(%sp),lt ; lt 1070656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,L ht,temp1,ht ; ht+= m>>32 1071656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD lt,temp3,lt ; lt = lt+m1 1072656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,DC ht,%r0,ht ; ht++ 1073656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1074656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD ht,ht,ht ; ht=ht+ht; 1075656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,DC C3,%r0,C3 ; add in carry (c3++) 1076656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1077656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD lt,lt,lt ; lt=lt+lt; 1078656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,DC ht,%r0,ht ; add in carry (ht++) 1079656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1080656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD C1,lt,C1 ; c1=c1+lt 1081656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,DC,*NUV ht,%r0,ht ; add in carry (ht++) 1082656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDO 1(C3),C3 ; bump c3 if overflow,nullify otherwise 1083656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1084656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD C2,ht,C2 ; c2 = c2 + ht 1085656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,DC C3,%r0,C3 ; add in carry (c3++) 1086656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.endm 1087656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1088656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 1089656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project;void bn_sqr_comba8(BN_ULONG *r, BN_ULONG *a) 1090656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; arg0 = r_ptr 1091656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; arg1 = a_ptr 1092656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 1093656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1094656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectbn_sqr_comba8 1095656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .PROC 1096656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .CALLINFO FRAME=128,ENTRY_GR=%r3,ARGS_SAVED,ORDERING_AWARE 1097656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .EXPORT bn_sqr_comba8,ENTRY,PRIV_LEV=3,NO_RELOCATION,LONG_RETURN 1098656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .ENTRY 1099656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .align 64 1100656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1101656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD %r3,0(%sp) ; save r3 1102656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD %r4,8(%sp) ; save r4 1103656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD %r5,16(%sp) ; save r5 1104656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD %r6,24(%sp) ; save r6 1105656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1106656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; 1107656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; Zero out carries 1108656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; 1109656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c1 1110656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c2 1111656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c3 1112656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1113656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDO 128(%sp),%sp ; bump stack 1114656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DEPDI,Z -1,32,33,high_mask ; Create Mask 0xffffffff80000000L 1115656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DEPDI,Z 1,31,1,high_one ; Create Value 1 << 32 1116656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1117656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; 1118656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; Load up all of the values we are going to use 1119656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; 1120656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 0(a_ptr),a0 1121656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 8(a_ptr),a1 1122656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 16(a_ptr),a2 1123656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 24(a_ptr),a3 1124656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 32(a_ptr),a4 1125656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 40(a_ptr),a5 1126656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 48(a_ptr),a6 1127656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 56(a_ptr),a7 1128656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1129656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SQR_ADD_C a0L,a0R,c1,c2,c3 1130656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD c1,0(r_ptr) ; r[0] = c1; 1131656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c1 1132656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1133656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SQR_ADD_C2 a1L,a1R,a0L,a0R,c2,c3,c1 1134656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD c2,8(r_ptr) ; r[1] = c2; 1135656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c2 1136656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1137656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SQR_ADD_C a1L,a1R,c3,c1,c2 1138656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SQR_ADD_C2 a2L,a2R,a0L,a0R,c3,c1,c2 1139656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD c3,16(r_ptr) ; r[2] = c3; 1140656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c3 1141656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1142656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SQR_ADD_C2 a3L,a3R,a0L,a0R,c1,c2,c3 1143656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SQR_ADD_C2 a2L,a2R,a1L,a1R,c1,c2,c3 1144656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD c1,24(r_ptr) ; r[3] = c1; 1145656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c1 1146656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1147656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SQR_ADD_C a2L,a2R,c2,c3,c1 1148656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SQR_ADD_C2 a3L,a3R,a1L,a1R,c2,c3,c1 1149656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SQR_ADD_C2 a4L,a4R,a0L,a0R,c2,c3,c1 1150656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD c2,32(r_ptr) ; r[4] = c2; 1151656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c2 1152656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1153656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SQR_ADD_C2 a5L,a5R,a0L,a0R,c3,c1,c2 1154656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SQR_ADD_C2 a4L,a4R,a1L,a1R,c3,c1,c2 1155656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SQR_ADD_C2 a3L,a3R,a2L,a2R,c3,c1,c2 1156656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD c3,40(r_ptr) ; r[5] = c3; 1157656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c3 1158656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1159656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SQR_ADD_C a3L,a3R,c1,c2,c3 1160656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SQR_ADD_C2 a4L,a4R,a2L,a2R,c1,c2,c3 1161656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SQR_ADD_C2 a5L,a5R,a1L,a1R,c1,c2,c3 1162656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SQR_ADD_C2 a6L,a6R,a0L,a0R,c1,c2,c3 1163656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD c1,48(r_ptr) ; r[6] = c1; 1164656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c1 1165656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1166656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SQR_ADD_C2 a7L,a7R,a0L,a0R,c2,c3,c1 1167656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SQR_ADD_C2 a6L,a6R,a1L,a1R,c2,c3,c1 1168656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SQR_ADD_C2 a5L,a5R,a2L,a2R,c2,c3,c1 1169656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SQR_ADD_C2 a4L,a4R,a3L,a3R,c2,c3,c1 1170656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD c2,56(r_ptr) ; r[7] = c2; 1171656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c2 1172656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1173656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SQR_ADD_C a4L,a4R,c3,c1,c2 1174656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SQR_ADD_C2 a5L,a5R,a3L,a3R,c3,c1,c2 1175656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SQR_ADD_C2 a6L,a6R,a2L,a2R,c3,c1,c2 1176656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SQR_ADD_C2 a7L,a7R,a1L,a1R,c3,c1,c2 1177656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD c3,64(r_ptr) ; r[8] = c3; 1178656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c3 1179656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1180656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SQR_ADD_C2 a7L,a7R,a2L,a2R,c1,c2,c3 1181656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SQR_ADD_C2 a6L,a6R,a3L,a3R,c1,c2,c3 1182656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SQR_ADD_C2 a5L,a5R,a4L,a4R,c1,c2,c3 1183656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD c1,72(r_ptr) ; r[9] = c1; 1184656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c1 1185656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1186656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SQR_ADD_C a5L,a5R,c2,c3,c1 1187656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SQR_ADD_C2 a6L,a6R,a4L,a4R,c2,c3,c1 1188656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SQR_ADD_C2 a7L,a7R,a3L,a3R,c2,c3,c1 1189656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD c2,80(r_ptr) ; r[10] = c2; 1190656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c2 1191656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1192656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SQR_ADD_C2 a7L,a7R,a4L,a4R,c3,c1,c2 1193656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SQR_ADD_C2 a6L,a6R,a5L,a5R,c3,c1,c2 1194656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD c3,88(r_ptr) ; r[11] = c3; 1195656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c3 1196656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1197656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SQR_ADD_C a6L,a6R,c1,c2,c3 1198656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SQR_ADD_C2 a7L,a7R,a5L,a5R,c1,c2,c3 1199656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD c1,96(r_ptr) ; r[12] = c1; 1200656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c1 1201656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1202656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SQR_ADD_C2 a7L,a7R,a6L,a6R,c2,c3,c1 1203656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD c2,104(r_ptr) ; r[13] = c2; 1204656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c2 1205656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1206656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SQR_ADD_C a7L,a7R,c3,c1,c2 1207656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD c3, 112(r_ptr) ; r[14] = c3 1208656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD c1, 120(r_ptr) ; r[15] = c1 1209656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1210656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .EXIT 1211656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -104(%sp),%r6 ; restore r6 1212656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -112(%sp),%r5 ; restore r5 1213656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -120(%sp),%r4 ; restore r4 1214656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project BVE (%rp) 1215656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD,MB -128(%sp),%r3 1216656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1217656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .PROCEND 1218656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1219656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project;----------------------------------------------------------------------------- 1220656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 1221656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project;void bn_sqr_comba4(BN_ULONG *r, BN_ULONG *a) 1222656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; arg0 = r_ptr 1223656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; arg1 = a_ptr 1224656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 1225656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1226656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectbn_sqr_comba4 1227656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .proc 1228656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .callinfo FRAME=128,ENTRY_GR=%r3,ARGS_SAVED,ORDERING_AWARE 1229656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .EXPORT bn_sqr_comba4,ENTRY,PRIV_LEV=3,NO_RELOCATION,LONG_RETURN 1230656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .entry 1231656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .align 64 1232656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD %r3,0(%sp) ; save r3 1233656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD %r4,8(%sp) ; save r4 1234656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD %r5,16(%sp) ; save r5 1235656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD %r6,24(%sp) ; save r6 1236656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1237656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; 1238656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; Zero out carries 1239656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; 1240656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c1 1241656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c2 1242656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c3 1243656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1244656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDO 128(%sp),%sp ; bump stack 1245656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DEPDI,Z -1,32,33,high_mask ; Create Mask 0xffffffff80000000L 1246656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DEPDI,Z 1,31,1,high_one ; Create Value 1 << 32 1247656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1248656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; 1249656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; Load up all of the values we are going to use 1250656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; 1251656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 0(a_ptr),a0 1252656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 8(a_ptr),a1 1253656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 16(a_ptr),a2 1254656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 24(a_ptr),a3 1255656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 32(a_ptr),a4 1256656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 40(a_ptr),a5 1257656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 48(a_ptr),a6 1258656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 56(a_ptr),a7 1259656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1260656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SQR_ADD_C a0L,a0R,c1,c2,c3 1261656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1262656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD c1,0(r_ptr) ; r[0] = c1; 1263656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c1 1264656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1265656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SQR_ADD_C2 a1L,a1R,a0L,a0R,c2,c3,c1 1266656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1267656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD c2,8(r_ptr) ; r[1] = c2; 1268656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c2 1269656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1270656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SQR_ADD_C a1L,a1R,c3,c1,c2 1271656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SQR_ADD_C2 a2L,a2R,a0L,a0R,c3,c1,c2 1272656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1273656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD c3,16(r_ptr) ; r[2] = c3; 1274656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c3 1275656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1276656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SQR_ADD_C2 a3L,a3R,a0L,a0R,c1,c2,c3 1277656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SQR_ADD_C2 a2L,a2R,a1L,a1R,c1,c2,c3 1278656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1279656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD c1,24(r_ptr) ; r[3] = c1; 1280656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c1 1281656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1282656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SQR_ADD_C a2L,a2R,c2,c3,c1 1283656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SQR_ADD_C2 a3L,a3R,a1L,a1R,c2,c3,c1 1284656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1285656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD c2,32(r_ptr) ; r[4] = c2; 1286656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c2 1287656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1288656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SQR_ADD_C2 a3L,a3R,a2L,a2R,c3,c1,c2 1289656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD c3,40(r_ptr) ; r[5] = c3; 1290656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c3 1291656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1292656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project SQR_ADD_C a3L,a3R,c1,c2,c3 1293656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD c1,48(r_ptr) ; r[6] = c1; 1294656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD c2,56(r_ptr) ; r[7] = c2; 1295656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1296656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .EXIT 1297656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -104(%sp),%r6 ; restore r6 1298656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -112(%sp),%r5 ; restore r5 1299656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -120(%sp),%r4 ; restore r4 1300656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project BVE (%rp) 1301656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD,MB -128(%sp),%r3 1302656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1303656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .PROCEND 1304656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1305656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1306656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project;--------------------------------------------------------------------------- 1307656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1308656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectMUL_ADD_C .macro A0L,A0R,B0L,B0R,C1,C2,C3 1309656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project XMPYU A0L,B0R,ftemp1 ; m1 = bl*ht 1310656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD ftemp1,-16(%sp) ; 1311656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project XMPYU A0R,B0L,ftemp2 ; m = bh*lt 1312656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD ftemp2,-8(%sp) ; 1313656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project XMPYU A0R,B0R,ftemp3 ; lt = bl*lt 1314656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD ftemp3,-32(%sp) 1315656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project XMPYU A0L,B0L,ftemp4 ; ht = bh*ht 1316656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD ftemp4,-24(%sp) ; 1317656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1318656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -8(%sp),m ; r21 = m 1319656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -16(%sp),m1 ; r19 = m1 1320656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,L m,m1,m ; m+m1 1321656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1322656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DEPD,Z m,31,32,temp3 ; (m+m1<<32) 1323656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -24(%sp),ht ; r24 = ht 1324656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1325656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CMPCLR,*>>= m,m1,%r0 ; if (m < m1) 1326656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,L ht,high_one,ht ; ht+=high_one 1327656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1328656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXTRD,U m,31,32,temp1 ; m >> 32 1329656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -32(%sp),lt ; lt 1330656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,L ht,temp1,ht ; ht+= m>>32 1331656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD lt,temp3,lt ; lt = lt+m1 1332656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,DC ht,%r0,ht ; ht++ 1333656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1334656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD C1,lt,C1 ; c1=c1+lt 1335656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,DC ht,%r0,ht ; bump c3 if overflow,nullify otherwise 1336656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1337656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD C2,ht,C2 ; c2 = c2 + ht 1338656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ADD,DC C3,%r0,C3 ; add in carry (c3++) 1339656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.endm 1340656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1341656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1342656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 1343656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project;void bn_mul_comba8(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b) 1344656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; arg0 = r_ptr 1345656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; arg1 = a_ptr 1346656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; arg2 = b_ptr 1347656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 1348656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1349656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectbn_mul_comba8 1350656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .proc 1351656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .callinfo FRAME=128,ENTRY_GR=%r3,ARGS_SAVED,ORDERING_AWARE 1352656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .EXPORT bn_mul_comba8,ENTRY,PRIV_LEV=3,NO_RELOCATION,LONG_RETURN 1353656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .entry 1354656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .align 64 1355656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1356656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD %r3,0(%sp) ; save r3 1357656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD %r4,8(%sp) ; save r4 1358656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD %r5,16(%sp) ; save r5 1359656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD %r6,24(%sp) ; save r6 1360656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD %fr12,32(%sp) ; save r6 1361656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD %fr13,40(%sp) ; save r7 1362656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1363656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; 1364656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; Zero out carries 1365656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; 1366656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c1 1367656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c2 1368656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c3 1369656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1370656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDO 128(%sp),%sp ; bump stack 1371656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DEPDI,Z 1,31,1,high_one ; Create Value 1 << 32 1372656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1373656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; 1374656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; Load up all of the values we are going to use 1375656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; 1376656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 0(a_ptr),a0 1377656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 8(a_ptr),a1 1378656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 16(a_ptr),a2 1379656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 24(a_ptr),a3 1380656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 32(a_ptr),a4 1381656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 40(a_ptr),a5 1382656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 48(a_ptr),a6 1383656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 56(a_ptr),a7 1384656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1385656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 0(b_ptr),b0 1386656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 8(b_ptr),b1 1387656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 16(b_ptr),b2 1388656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 24(b_ptr),b3 1389656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 32(b_ptr),b4 1390656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 40(b_ptr),b5 1391656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 48(b_ptr),b6 1392656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 56(b_ptr),b7 1393656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1394656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a0L,a0R,b0L,b0R,c1,c2,c3 1395656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD c1,0(r_ptr) 1396656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c1 1397656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1398656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a0L,a0R,b1L,b1R,c2,c3,c1 1399656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a1L,a1R,b0L,b0R,c2,c3,c1 1400656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD c2,8(r_ptr) 1401656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c2 1402656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1403656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a2L,a2R,b0L,b0R,c3,c1,c2 1404656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a1L,a1R,b1L,b1R,c3,c1,c2 1405656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a0L,a0R,b2L,b2R,c3,c1,c2 1406656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD c3,16(r_ptr) 1407656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c3 1408656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1409656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a0L,a0R,b3L,b3R,c1,c2,c3 1410656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a1L,a1R,b2L,b2R,c1,c2,c3 1411656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a2L,a2R,b1L,b1R,c1,c2,c3 1412656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a3L,a3R,b0L,b0R,c1,c2,c3 1413656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD c1,24(r_ptr) 1414656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c1 1415656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1416656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a4L,a4R,b0L,b0R,c2,c3,c1 1417656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a3L,a3R,b1L,b1R,c2,c3,c1 1418656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a2L,a2R,b2L,b2R,c2,c3,c1 1419656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a1L,a1R,b3L,b3R,c2,c3,c1 1420656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a0L,a0R,b4L,b4R,c2,c3,c1 1421656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD c2,32(r_ptr) 1422656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c2 1423656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1424656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a0L,a0R,b5L,b5R,c3,c1,c2 1425656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a1L,a1R,b4L,b4R,c3,c1,c2 1426656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a2L,a2R,b3L,b3R,c3,c1,c2 1427656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a3L,a3R,b2L,b2R,c3,c1,c2 1428656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a4L,a4R,b1L,b1R,c3,c1,c2 1429656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a5L,a5R,b0L,b0R,c3,c1,c2 1430656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD c3,40(r_ptr) 1431656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c3 1432656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1433656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a6L,a6R,b0L,b0R,c1,c2,c3 1434656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a5L,a5R,b1L,b1R,c1,c2,c3 1435656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a4L,a4R,b2L,b2R,c1,c2,c3 1436656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a3L,a3R,b3L,b3R,c1,c2,c3 1437656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a2L,a2R,b4L,b4R,c1,c2,c3 1438656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a1L,a1R,b5L,b5R,c1,c2,c3 1439656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a0L,a0R,b6L,b6R,c1,c2,c3 1440656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD c1,48(r_ptr) 1441656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c1 1442656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1443656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a0L,a0R,b7L,b7R,c2,c3,c1 1444656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a1L,a1R,b6L,b6R,c2,c3,c1 1445656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a2L,a2R,b5L,b5R,c2,c3,c1 1446656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a3L,a3R,b4L,b4R,c2,c3,c1 1447656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a4L,a4R,b3L,b3R,c2,c3,c1 1448656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a5L,a5R,b2L,b2R,c2,c3,c1 1449656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a6L,a6R,b1L,b1R,c2,c3,c1 1450656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a7L,a7R,b0L,b0R,c2,c3,c1 1451656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD c2,56(r_ptr) 1452656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c2 1453656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1454656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a7L,a7R,b1L,b1R,c3,c1,c2 1455656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a6L,a6R,b2L,b2R,c3,c1,c2 1456656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a5L,a5R,b3L,b3R,c3,c1,c2 1457656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a4L,a4R,b4L,b4R,c3,c1,c2 1458656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a3L,a3R,b5L,b5R,c3,c1,c2 1459656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a2L,a2R,b6L,b6R,c3,c1,c2 1460656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a1L,a1R,b7L,b7R,c3,c1,c2 1461656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD c3,64(r_ptr) 1462656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c3 1463656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1464656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a2L,a2R,b7L,b7R,c1,c2,c3 1465656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a3L,a3R,b6L,b6R,c1,c2,c3 1466656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a4L,a4R,b5L,b5R,c1,c2,c3 1467656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a5L,a5R,b4L,b4R,c1,c2,c3 1468656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a6L,a6R,b3L,b3R,c1,c2,c3 1469656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a7L,a7R,b2L,b2R,c1,c2,c3 1470656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD c1,72(r_ptr) 1471656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c1 1472656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1473656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a7L,a7R,b3L,b3R,c2,c3,c1 1474656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a6L,a6R,b4L,b4R,c2,c3,c1 1475656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a5L,a5R,b5L,b5R,c2,c3,c1 1476656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a4L,a4R,b6L,b6R,c2,c3,c1 1477656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a3L,a3R,b7L,b7R,c2,c3,c1 1478656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD c2,80(r_ptr) 1479656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c2 1480656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1481656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a4L,a4R,b7L,b7R,c3,c1,c2 1482656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a5L,a5R,b6L,b6R,c3,c1,c2 1483656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a6L,a6R,b5L,b5R,c3,c1,c2 1484656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a7L,a7R,b4L,b4R,c3,c1,c2 1485656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD c3,88(r_ptr) 1486656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c3 1487656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1488656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a7L,a7R,b5L,b5R,c1,c2,c3 1489656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a6L,a6R,b6L,b6R,c1,c2,c3 1490656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a5L,a5R,b7L,b7R,c1,c2,c3 1491656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD c1,96(r_ptr) 1492656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c1 1493656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1494656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a6L,a6R,b7L,b7R,c2,c3,c1 1495656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a7L,a7R,b6L,b6R,c2,c3,c1 1496656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD c2,104(r_ptr) 1497656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c2 1498656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1499656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a7L,a7R,b7L,b7R,c3,c1,c2 1500656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD c3,112(r_ptr) 1501656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD c1,120(r_ptr) 1502656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1503656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .EXIT 1504656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD -88(%sp),%fr13 1505656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD -96(%sp),%fr12 1506656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -104(%sp),%r6 ; restore r6 1507656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -112(%sp),%r5 ; restore r5 1508656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -120(%sp),%r4 ; restore r4 1509656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project BVE (%rp) 1510656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD,MB -128(%sp),%r3 1511656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1512656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .PROCEND 1513656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1514656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project;----------------------------------------------------------------------------- 1515656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 1516656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project;void bn_mul_comba4(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b) 1517656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; arg0 = r_ptr 1518656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; arg1 = a_ptr 1519656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; arg2 = b_ptr 1520656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project; 1521656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1522656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectbn_mul_comba4 1523656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .proc 1524656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .callinfo FRAME=128,ENTRY_GR=%r3,ARGS_SAVED,ORDERING_AWARE 1525656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .EXPORT bn_mul_comba4,ENTRY,PRIV_LEV=3,NO_RELOCATION,LONG_RETURN 1526656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .entry 1527656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .align 64 1528656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1529656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD %r3,0(%sp) ; save r3 1530656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD %r4,8(%sp) ; save r4 1531656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD %r5,16(%sp) ; save r5 1532656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD %r6,24(%sp) ; save r6 1533656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD %fr12,32(%sp) ; save r6 1534656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FSTD %fr13,40(%sp) ; save r7 1535656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1536656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; 1537656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; Zero out carries 1538656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; 1539656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c1 1540656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c2 1541656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c3 1542656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1543656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDO 128(%sp),%sp ; bump stack 1544656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DEPDI,Z 1,31,1,high_one ; Create Value 1 << 32 1545656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1546656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; 1547656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; Load up all of the values we are going to use 1548656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ; 1549656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 0(a_ptr),a0 1550656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 8(a_ptr),a1 1551656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 16(a_ptr),a2 1552656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 24(a_ptr),a3 1553656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1554656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 0(b_ptr),b0 1555656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 8(b_ptr),b1 1556656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 16(b_ptr),b2 1557656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD 24(b_ptr),b3 1558656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1559656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a0L,a0R,b0L,b0R,c1,c2,c3 1560656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD c1,0(r_ptr) 1561656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c1 1562656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1563656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a0L,a0R,b1L,b1R,c2,c3,c1 1564656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a1L,a1R,b0L,b0R,c2,c3,c1 1565656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD c2,8(r_ptr) 1566656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c2 1567656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1568656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a2L,a2R,b0L,b0R,c3,c1,c2 1569656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a1L,a1R,b1L,b1R,c3,c1,c2 1570656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a0L,a0R,b2L,b2R,c3,c1,c2 1571656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD c3,16(r_ptr) 1572656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c3 1573656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1574656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a0L,a0R,b3L,b3R,c1,c2,c3 1575656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a1L,a1R,b2L,b2R,c1,c2,c3 1576656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a2L,a2R,b1L,b1R,c1,c2,c3 1577656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a3L,a3R,b0L,b0R,c1,c2,c3 1578656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD c1,24(r_ptr) 1579656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c1 1580656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1581656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a3L,a3R,b1L,b1R,c2,c3,c1 1582656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a2L,a2R,b2L,b2R,c2,c3,c1 1583656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a1L,a1R,b3L,b3R,c2,c3,c1 1584656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD c2,32(r_ptr) 1585656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c2 1586656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1587656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a2L,a2R,b3L,b3R,c3,c1,c2 1588656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a3L,a3R,b2L,b2R,c3,c1,c2 1589656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD c3,40(r_ptr) 1590656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project COPY %r0,c3 1591656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1592656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project MUL_ADD_C a3L,a3R,b3L,b3R,c1,c2,c3 1593656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD c1,48(r_ptr) 1594656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project STD c2,56(r_ptr) 1595656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1596656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .EXIT 1597656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD -88(%sp),%fr13 1598656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FLDD -96(%sp),%fr12 1599656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -104(%sp),%r6 ; restore r6 1600656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -112(%sp),%r5 ; restore r5 1601656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD -120(%sp),%r4 ; restore r4 1602656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project BVE (%rp) 1603656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project LDD,MB -128(%sp),%r3 1604656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1605656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .PROCEND 1606656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1607656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1608656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project;--- not PIC .SPACE $TEXT$ 1609656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project;--- not PIC .SUBSPA $CODE$ 1610656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project;--- not PIC .SPACE $PRIVATE$,SORT=16 1611656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project;--- not PIC .IMPORT $global$,DATA 1612656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project;--- not PIC .SPACE $TEXT$ 1613656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project;--- not PIC .SUBSPA $CODE$ 1614656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project;--- not PIC .SUBSPA $LIT$,ACCESS=0x2c 1615656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project;--- not PIC C$7 1616656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project;--- not PIC .ALIGN 8 1617656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project;--- not PIC .STRINGZ "Division would overflow (%d)\n" 1618656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .END 1619