2 # The bn_div64 is actually gcc output but the other parts are hand done.
3 # Thanks to tzeruch@ceddec.com for sending me the gcc output for
11 .globl bn_mul_add_words
17 subq $18,2,$25 # num=-2
22 subq $18,2,$18 # num-=2
23 subq $25,2,$25 # num-=2
28 mulq $19,$1,$3 # a[0]*w low part r3
29 umulh $19,$1,$1 # a[0]*w high part r1
30 mulq $19,$2,$4 # a[1]*w low part r4
31 umulh $19,$2,$2 # a[1]*w high part r2
33 ldq $22,0($16) # r[0] r22
34 ldq $23,8($16) # r[1] r23
36 addq $3,$22,$3 # a0 low part + r[0]
37 addq $4,$23,$4 # a1 low part + r[1]
38 cmpult $3,$22,$5 # overflow?
39 cmpult $4,$23,$6 # overflow?
40 addq $5,$1,$1 # high part + overflow
41 addq $6,$2,$2 # high part + overflow
44 cmpult $3,$0,$5 # overflow?
46 addq $5,$1,$0 # c=high part + overflow
49 cmpult $4,$0,$5 # overflow?
51 addq $5,$2,$0 # c=high part + overflow
62 umulh $19,$1,$3 # a[0]*w high part
63 mulq $19,$1,$1 # a[0]*w low part
65 addq $1,$2,$1 # low part + r[0]
66 cmpult $1,$2,$4 # overflow?
67 addq $4,$3,$3 # high part + overflow
69 cmpult $1,$0,$4 # overflow?
70 addq $4,$3,$0 # c=high part + overflow
84 subq $18,2,$25 # num=-2
89 subq $18,2,$18 # num-=2
90 subq $25,2,$25 # num-=2
95 mulq $19,$1,$3 # a[0]*w low part r3
96 umulh $19,$1,$1 # a[0]*w high part r1
97 mulq $19,$2,$4 # a[1]*w low part r4
98 umulh $19,$2,$2 # a[1]*w high part r2
100 addq $3,$0,$3 # add c
101 cmpult $3,$0,$5 # overflow?
103 addq $5,$1,$0 # c=high part + overflow
105 addq $4,$0,$4 # add c
106 cmpult $4,$0,$5 # overflow?
108 addq $5,$2,$0 # c=high part + overflow
119 umulh $19,$1,$3 # a[0]*w high part
120 mulq $19,$1,$1 # a[0]*w low part
121 addq $1,$0,$1 # add c
122 cmpult $1,$0,$4 # overflow?
123 addq $4,$3,$0 # c=high part + overflow
136 subq $18,2,$25 # num=-2
140 subq $18,2,$18 # num-=2
141 subq $25,2,$25 # num-=2
146 mulq $1,$1,$2 # a[0]*w low part r2
147 umulh $1,$1,$3 # a[0]*w high part r3
148 mulq $4,$4,$5 # a[1]*w low part r5
149 umulh $4,$4,$6 # a[1]*w high part r6
153 stq $5,16($16) # r[3]
154 stq $6,24($16) # r[4]
165 mulq $1,$1,$2 # a[0]*w low part r2
166 umulh $1,$1,$3 # a[0]*w high part r3
183 bis $31,$31,$8 # carry = 0
189 addq $0,$1,$3 # c=a+b;
192 cmpult $3,$1,$7 # did we overflow?
195 addq $8,$3,$3 # c+=carry
197 cmpult $3,$8,$8 # did we overflow?
198 stq $3,($16) # r[0]=c
200 addq $7,$8,$8 # add into overflow
201 subq $19,1,$19 # loop--
206 bis $8,$8,$0 # return carry
211 # What follows was taken directly from the C compiler with a few
212 # hacks to redo the lables.
242 jsr $26,BN_num_bits_word
250 # lda $16,_IO_stderr_
342 .ident "GCC: (GNU) 2.7.2.1"