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