Home | History | Annotate | Line # | Download | only in sparc
      1  1.1.1.2  christos #include "sparc_arch.h"
      2  1.1.1.2  christos 
      3      1.1  christos .section	".text",#alloc,#execinstr
      4      1.1  christos 
      5      1.1  christos .global	bn_mul_mont_int
      6      1.1  christos .align	32
      7      1.1  christos bn_mul_mont_int:
      8      1.1  christos 	cmp	%o5,4			! 128 bits minimum
      9      1.1  christos 	bge,pt	%icc,.Lenter
     10      1.1  christos 	sethi	%hi(0xffffffff),%g1
     11      1.1  christos 	retl
     12      1.1  christos 	clr	%o0
     13      1.1  christos .align	32
     14      1.1  christos .Lenter:
     15  1.1.1.2  christos 	save	%sp,-STACK_FRAME,%sp
     16      1.1  christos 	sll	%i5,2,%i5		! num*=4
     17      1.1  christos 	or	%g1,%lo(0xffffffff),%g1
     18      1.1  christos 	ld	[%i4],%i4
     19      1.1  christos 	cmp	%i1,%i2
     20      1.1  christos 	and	%i5,%g1,%i5
     21      1.1  christos 	ld	[%i2],%l2		! bp[0]
     22      1.1  christos 	nop
     23      1.1  christos 
     24  1.1.1.2  christos 	add	%sp,STACK_BIAS,%o7		! real top of stack
     25      1.1  christos 	ld	[%i1],%o0		! ap[0] ! redundant in squaring context
     26      1.1  christos 	sub	%o7,%i5,%o7
     27      1.1  christos 	ld	[%i1+4],%l5		! ap[1]
     28      1.1  christos 	and	%o7,-1024,%o7
     29      1.1  christos 	ld	[%i3],%o1		! np[0]
     30  1.1.1.2  christos 	sub	%o7,STACK_BIAS,%sp		! alloca
     31      1.1  christos 	ld	[%i3+4],%l6		! np[1]
     32  1.1.1.2  christos 	be,pt	SIZE_T_CC,.Lbn_sqr_mont
     33      1.1  christos 	mov	12,%l1
     34      1.1  christos 
     35      1.1  christos 	mulx	%o0,%l2,%o0	! ap[0]*bp[0]
     36      1.1  christos 	mulx	%l5,%l2,%g4	!prologue! ap[1]*bp[0]
     37      1.1  christos 	and	%o0,%g1,%o3
     38  1.1.1.2  christos 	add	%sp,STACK_BIAS+STACK_FRAME,%l4
     39      1.1  christos 	ld	[%i1+8],%l5		!prologue!
     40      1.1  christos 
     41      1.1  christos 	mulx	%i4,%o3,%l3		! "t[0]"*n0
     42      1.1  christos 	and	%l3,%g1,%l3
     43      1.1  christos 
     44      1.1  christos 	mulx	%o1,%l3,%o1	! np[0]*"t[0]"*n0
     45      1.1  christos 	mulx	%l6,%l3,%o4	!prologue! np[1]*"t[0]"*n0
     46      1.1  christos 	srlx	%o0,32,%o0
     47      1.1  christos 	add	%o3,%o1,%o1
     48      1.1  christos 	ld	[%i3+8],%l6		!prologue!
     49      1.1  christos 	srlx	%o1,32,%o1
     50      1.1  christos 	mov	%g4,%o3		!prologue!
     51      1.1  christos 
     52      1.1  christos .L1st:
     53      1.1  christos 	mulx	%l5,%l2,%g4
     54      1.1  christos 	mulx	%l6,%l3,%g5
     55      1.1  christos 	add	%o3,%o0,%o0
     56      1.1  christos 	ld	[%i1+%l1],%l5		! ap[j]
     57      1.1  christos 	and	%o0,%g1,%o3
     58      1.1  christos 	add	%o4,%o1,%o1
     59      1.1  christos 	ld	[%i3+%l1],%l6		! np[j]
     60      1.1  christos 	srlx	%o0,32,%o0
     61      1.1  christos 	add	%o3,%o1,%o1
     62      1.1  christos 	add	%l1,4,%l1			! j++
     63      1.1  christos 	mov	%g4,%o3
     64      1.1  christos 	st	%o1,[%l4]
     65      1.1  christos 	cmp	%l1,%i5
     66      1.1  christos 	mov	%g5,%o4
     67      1.1  christos 	srlx	%o1,32,%o1
     68      1.1  christos 	bl	%icc,.L1st
     69      1.1  christos 	add	%l4,4,%l4		! tp++
     70      1.1  christos !.L1st
     71      1.1  christos 
     72      1.1  christos 	mulx	%l5,%l2,%g4	!epilogue!
     73      1.1  christos 	mulx	%l6,%l3,%g5
     74      1.1  christos 	add	%o3,%o0,%o0
     75      1.1  christos 	and	%o0,%g1,%o3
     76      1.1  christos 	add	%o4,%o1,%o1
     77      1.1  christos 	srlx	%o0,32,%o0
     78      1.1  christos 	add	%o3,%o1,%o1
     79      1.1  christos 	st	%o1,[%l4]
     80      1.1  christos 	srlx	%o1,32,%o1
     81      1.1  christos 
     82      1.1  christos 	add	%g4,%o0,%o0
     83      1.1  christos 	and	%o0,%g1,%o3
     84      1.1  christos 	add	%g5,%o1,%o1
     85      1.1  christos 	srlx	%o0,32,%o0
     86      1.1  christos 	add	%o3,%o1,%o1
     87      1.1  christos 	st	%o1,[%l4+4]
     88      1.1  christos 	srlx	%o1,32,%o1
     89      1.1  christos 
     90      1.1  christos 	add	%o0,%o1,%o1
     91      1.1  christos 	st	%o1,[%l4+8]
     92      1.1  christos 	srlx	%o1,32,%o2
     93      1.1  christos 
     94      1.1  christos 	mov	4,%l0			! i++
     96      1.1  christos 	ld	[%i2+4],%l2		! bp[1]
     97  1.1.1.2  christos .Louter:
     98      1.1  christos 	add	%sp,STACK_BIAS+STACK_FRAME,%l4
     99      1.1  christos 	ld	[%i1],%o0		! ap[0]
    100      1.1  christos 	ld	[%i1+4],%l5		! ap[1]
    101      1.1  christos 	ld	[%i3],%o1		! np[0]
    102      1.1  christos 	ld	[%i3+4],%l6		! np[1]
    103      1.1  christos 	ld	[%l4],%g5		! tp[0]
    104      1.1  christos 	ld	[%l4+4],%l7		! tp[1]
    105      1.1  christos 	mov	12,%l1
    106      1.1  christos 
    107      1.1  christos 	mulx	%o0,%l2,%o0
    108      1.1  christos 	mulx	%l5,%l2,%g4	!prologue!
    109      1.1  christos 	add	%g5,%o0,%o0
    110      1.1  christos 	ld	[%i1+8],%l5		!prologue!
    111      1.1  christos 	and	%o0,%g1,%o3
    112      1.1  christos 
    113      1.1  christos 	mulx	%i4,%o3,%l3
    114      1.1  christos 	and	%l3,%g1,%l3
    115      1.1  christos 
    116      1.1  christos 	mulx	%o1,%l3,%o1
    117      1.1  christos 	mulx	%l6,%l3,%o4	!prologue!
    118      1.1  christos 	srlx	%o0,32,%o0
    119      1.1  christos 	add	%o3,%o1,%o1
    120      1.1  christos 	ld	[%i3+8],%l6		!prologue!
    121      1.1  christos 	srlx	%o1,32,%o1
    122      1.1  christos 	mov	%g4,%o3		!prologue!
    123      1.1  christos 
    124      1.1  christos .Linner:
    125      1.1  christos 	mulx	%l5,%l2,%g4
    126      1.1  christos 	mulx	%l6,%l3,%g5
    127      1.1  christos 	add	%l7,%o0,%o0
    128      1.1  christos 	ld	[%i1+%l1],%l5		! ap[j]
    129      1.1  christos 	add	%o3,%o0,%o0
    130      1.1  christos 	add	%o4,%o1,%o1
    131      1.1  christos 	ld	[%i3+%l1],%l6		! np[j]
    132      1.1  christos 	and	%o0,%g1,%o3
    133      1.1  christos 	ld	[%l4+8],%l7		! tp[j]
    134      1.1  christos 	srlx	%o0,32,%o0
    135      1.1  christos 	add	%o3,%o1,%o1
    136      1.1  christos 	add	%l1,4,%l1			! j++
    137      1.1  christos 	mov	%g4,%o3
    138      1.1  christos 	st	%o1,[%l4]		! tp[j-1]
    139      1.1  christos 	srlx	%o1,32,%o1
    140      1.1  christos 	mov	%g5,%o4
    141      1.1  christos 	cmp	%l1,%i5
    142      1.1  christos 	bl	%icc,.Linner
    143      1.1  christos 	add	%l4,4,%l4		! tp++
    144      1.1  christos !.Linner
    145      1.1  christos 
    146      1.1  christos 	mulx	%l5,%l2,%g4	!epilogue!
    147      1.1  christos 	mulx	%l6,%l3,%g5
    148      1.1  christos 	add	%l7,%o0,%o0
    149      1.1  christos 	add	%o3,%o0,%o0
    150      1.1  christos 	ld	[%l4+8],%l7		! tp[j]
    151      1.1  christos 	and	%o0,%g1,%o3
    152      1.1  christos 	add	%o4,%o1,%o1
    153      1.1  christos 	srlx	%o0,32,%o0
    154      1.1  christos 	add	%o3,%o1,%o1
    155      1.1  christos 	st	%o1,[%l4]		! tp[j-1]
    156      1.1  christos 	srlx	%o1,32,%o1
    157      1.1  christos 
    158      1.1  christos 	add	%l7,%o0,%o0
    159      1.1  christos 	add	%g4,%o0,%o0
    160      1.1  christos 	and	%o0,%g1,%o3
    161      1.1  christos 	add	%g5,%o1,%o1
    162      1.1  christos 	add	%o3,%o1,%o1
    163      1.1  christos 	st	%o1,[%l4+4]		! tp[j-1]
    164      1.1  christos 	srlx	%o0,32,%o0
    165      1.1  christos 	add	%l0,4,%l0			! i++
    166      1.1  christos 	srlx	%o1,32,%o1
    167      1.1  christos 
    168      1.1  christos 	add	%o0,%o1,%o1
    169      1.1  christos 	cmp	%l0,%i5
    170      1.1  christos 	add	%o2,%o1,%o1
    171      1.1  christos 	st	%o1,[%l4+8]
    172      1.1  christos 
    173      1.1  christos 	srlx	%o1,32,%o2
    174      1.1  christos 	bl,a	%icc,.Louter
    175      1.1  christos 	ld	[%i2+%l0],%l2		! bp[i]
    176      1.1  christos !.Louter
    177      1.1  christos 
    178      1.1  christos 	add	%l4,12,%l4
    179      1.1  christos 
    180      1.1  christos .Ltail:
    182      1.1  christos 	add	%i3,%i5,%i3
    183      1.1  christos 	add	%i0,%i5,%i0
    184      1.1  christos 	sub	%g0,%i5,%o7		! k=-num
    185      1.1  christos 	ba	.Lsub
    186      1.1  christos 	subcc	%g0,%g0,%g0		! clear %icc.c
    187      1.1  christos .align	16
    188      1.1  christos .Lsub:
    189      1.1  christos 	ld	[%l4+%o7],%o0
    190      1.1  christos 	ld	[%i3+%o7],%o1
    191      1.1  christos 	subccc	%o0,%o1,%o1		! tp[j]-np[j]
    192      1.1  christos 	add	%i0,%o7,%l0
    193      1.1  christos 	add	%o7,4,%o7
    194  1.1.1.2  christos 	brnz	%o7,.Lsub
    195      1.1  christos 	st	%o1,[%l0]
    196      1.1  christos 	subccc	%o2,0,%o2		! handle upmost overflow bit
    197      1.1  christos 	sub	%g0,%i5,%o7
    198  1.1.1.2  christos 
    199  1.1.1.2  christos .Lcopy:
    200      1.1  christos 	ld	[%l4+%o7],%o1		! conditional copy
    201  1.1.1.2  christos 	ld	[%i0+%o7],%o0
    202      1.1  christos 	st	%g0,[%l4+%o7]		! zap tp
    203      1.1  christos 	movcs	%icc,%o1,%o0
    204      1.1  christos 	st	%o0,[%i0+%o7]
    205      1.1  christos 	add	%o7,4,%o7
    206      1.1  christos 	brnz	%o7,.Lcopy
    207      1.1  christos 	nop
    208      1.1  christos 	mov	1,%i0
    209      1.1  christos 	ret
    210      1.1  christos 	restore
    211      1.1  christos .align	32
    212      1.1  christos .Lbn_sqr_mont:
    213      1.1  christos 	mulx	%l2,%l2,%o0		! ap[0]*ap[0]
    214  1.1.1.2  christos 	mulx	%l5,%l2,%g4		!prologue!
    215      1.1  christos 	and	%o0,%g1,%o3
    216      1.1  christos 	add	%sp,STACK_BIAS+STACK_FRAME,%l4
    217      1.1  christos 	ld	[%i1+8],%l5			!prologue!
    218      1.1  christos 
    219      1.1  christos 	mulx	%i4,%o3,%l3			! "t[0]"*n0
    220      1.1  christos 	srlx	%o0,32,%o0
    221      1.1  christos 	and	%l3,%g1,%l3
    222      1.1  christos 
    223  1.1.1.2  christos 	mulx	%o1,%l3,%o1		! np[0]*"t[0]"*n0
    224      1.1  christos 	mulx	%l6,%l3,%o4		!prologue!
    225      1.1  christos 	and	%o0,1,%o5
    226      1.1  christos 	ld	[%i3+8],%l6			!prologue!
    227      1.1  christos 	srlx	%o0,1,%o0
    228      1.1  christos 	add	%o3,%o1,%o1
    229      1.1  christos 	srlx	%o1,32,%o1
    230      1.1  christos 	mov	%g4,%o3			!prologue!
    231      1.1  christos 
    232      1.1  christos .Lsqr_1st:
    233      1.1  christos 	mulx	%l5,%l2,%g4
    234      1.1  christos 	mulx	%l6,%l3,%g5
    235      1.1  christos 	add	%o3,%o0,%o0		! ap[j]*a0+c0
    236      1.1  christos 	add	%o4,%o1,%o1
    237      1.1  christos 	ld	[%i1+%l1],%l5			! ap[j]
    238      1.1  christos 	and	%o0,%g1,%o3
    239      1.1  christos 	ld	[%i3+%l1],%l6			! np[j]
    240  1.1.1.2  christos 	srlx	%o0,32,%o0
    241      1.1  christos 	add	%o3,%o3,%o3
    242  1.1.1.2  christos 	or	%o5,%o3,%o3
    243      1.1  christos 	mov	%g5,%o4
    244      1.1  christos 	srlx	%o3,32,%o5
    245      1.1  christos 	add	%l1,4,%l1				! j++
    246      1.1  christos 	and	%o3,%g1,%o3
    247      1.1  christos 	cmp	%l1,%i5
    248      1.1  christos 	add	%o3,%o1,%o1
    249      1.1  christos 	st	%o1,[%l4]
    250      1.1  christos 	mov	%g4,%o3
    251      1.1  christos 	srlx	%o1,32,%o1
    252      1.1  christos 	bl	%icc,.Lsqr_1st
    253      1.1  christos 	add	%l4,4,%l4			! tp++
    254      1.1  christos !.Lsqr_1st
    255      1.1  christos 
    256      1.1  christos 	mulx	%l5,%l2,%g4		! epilogue
    257      1.1  christos 	mulx	%l6,%l3,%g5
    258      1.1  christos 	add	%o3,%o0,%o0		! ap[j]*a0+c0
    259      1.1  christos 	add	%o4,%o1,%o1
    260      1.1  christos 	and	%o0,%g1,%o3
    261  1.1.1.2  christos 	srlx	%o0,32,%o0
    262  1.1.1.2  christos 	add	%o3,%o3,%o3
    263      1.1  christos 	or	%o5,%o3,%o3
    264      1.1  christos 	srlx	%o3,32,%o5
    265      1.1  christos 	and	%o3,%g1,%o3
    266      1.1  christos 	add	%o3,%o1,%o1
    267      1.1  christos 	st	%o1,[%l4]
    268      1.1  christos 	srlx	%o1,32,%o1
    269      1.1  christos 
    270      1.1  christos 	add	%g4,%o0,%o0		! ap[j]*a0+c0
    271      1.1  christos 	add	%g5,%o1,%o1
    272      1.1  christos 	and	%o0,%g1,%o3
    273  1.1.1.2  christos 	srlx	%o0,32,%o0
    274  1.1.1.2  christos 	add	%o3,%o3,%o3
    275      1.1  christos 	or	%o5,%o3,%o3
    276      1.1  christos 	srlx	%o3,32,%o5
    277      1.1  christos 	and	%o3,%g1,%o3
    278      1.1  christos 	add	%o3,%o1,%o1
    279      1.1  christos 	st	%o1,[%l4+4]
    280      1.1  christos 	srlx	%o1,32,%o1
    281  1.1.1.2  christos 
    282      1.1  christos 	add	%o0,%o0,%o0
    283      1.1  christos 	or	%o5,%o0,%o0
    284      1.1  christos 	add	%o0,%o1,%o1
    285      1.1  christos 	st	%o1,[%l4+8]
    286  1.1.1.2  christos 	srlx	%o1,32,%o2
    287  1.1.1.2  christos 
    288  1.1.1.2  christos 	ld	[%sp+STACK_BIAS+STACK_FRAME],%g4	! tp[0]
    290      1.1  christos 	ld	[%sp+STACK_BIAS+STACK_FRAME+4],%g5	! tp[1]
    291      1.1  christos 	ld	[%sp+STACK_BIAS+STACK_FRAME+8],%l7	! tp[2]
    292      1.1  christos 	ld	[%i1+4],%l2			! ap[1]
    293      1.1  christos 	ld	[%i1+8],%l5			! ap[2]
    294      1.1  christos 	ld	[%i3],%o1			! np[0]
    295      1.1  christos 	ld	[%i3+4],%l6			! np[1]
    296      1.1  christos 	mulx	%i4,%g4,%l3
    297      1.1  christos 
    298      1.1  christos 	mulx	%l2,%l2,%o0
    299      1.1  christos 	and	%l3,%g1,%l3
    300      1.1  christos 
    301      1.1  christos 	mulx	%o1,%l3,%o1
    302      1.1  christos 	mulx	%l6,%l3,%o4
    303      1.1  christos 	add	%g4,%o1,%o1
    304      1.1  christos 	and	%o0,%g1,%o3
    305      1.1  christos 	ld	[%i3+8],%l6			! np[2]
    306      1.1  christos 	srlx	%o1,32,%o1
    307  1.1.1.2  christos 	add	%g5,%o1,%o1
    308      1.1  christos 	srlx	%o0,32,%o0
    309      1.1  christos 	add	%o3,%o1,%o1
    310      1.1  christos 	and	%o0,1,%o5
    311  1.1.1.2  christos 	add	%o4,%o1,%o1
    312      1.1  christos 	srlx	%o0,1,%o0
    313  1.1.1.2  christos 	mov	12,%l1
    314      1.1  christos 	st	%o1,[%sp+STACK_BIAS+STACK_FRAME]	! tp[0]=
    315      1.1  christos 	srlx	%o1,32,%o1
    316      1.1  christos 	add	%sp,STACK_BIAS+STACK_FRAME+4,%l4
    317      1.1  christos 
    318      1.1  christos .Lsqr_2nd:
    319  1.1.1.2  christos 	mulx	%l5,%l2,%o3
    320      1.1  christos 	mulx	%l6,%l3,%o4
    321      1.1  christos 	add	%o3,%o0,%o0
    322      1.1  christos 	add	%l7,%o5,%o5
    323      1.1  christos 	ld	[%i1+%l1],%l5			! ap[j]
    324      1.1  christos 	and	%o0,%g1,%o3
    325      1.1  christos 	ld	[%i3+%l1],%l6			! np[j]
    326      1.1  christos 	srlx	%o0,32,%o0
    327      1.1  christos 	add	%o4,%o1,%o1
    328  1.1.1.2  christos 	ld	[%l4+8],%l7			! tp[j]
    329  1.1.1.2  christos 	add	%o3,%o3,%o3
    330      1.1  christos 	add	%l1,4,%l1				! j++
    331      1.1  christos 	add	%o5,%o3,%o3
    332      1.1  christos 	srlx	%o3,32,%o5
    333      1.1  christos 	and	%o3,%g1,%o3
    334      1.1  christos 	cmp	%l1,%i5
    335      1.1  christos 	add	%o3,%o1,%o1
    336      1.1  christos 	st	%o1,[%l4]			! tp[j-1]
    337      1.1  christos 	srlx	%o1,32,%o1
    338      1.1  christos 	bl	%icc,.Lsqr_2nd
    339      1.1  christos 	add	%l4,4,%l4			! tp++
    340      1.1  christos !.Lsqr_2nd
    341      1.1  christos 
    342  1.1.1.2  christos 	mulx	%l5,%l2,%o3
    343      1.1  christos 	mulx	%l6,%l3,%o4
    344      1.1  christos 	add	%o3,%o0,%o0
    345      1.1  christos 	add	%l7,%o5,%o5
    346      1.1  christos 	and	%o0,%g1,%o3
    347  1.1.1.2  christos 	srlx	%o0,32,%o0
    348  1.1.1.2  christos 	add	%o4,%o1,%o1
    349      1.1  christos 	add	%o3,%o3,%o3
    350      1.1  christos 	add	%o5,%o3,%o3
    351      1.1  christos 	srlx	%o3,32,%o5
    352      1.1  christos 	and	%o3,%g1,%o3
    353      1.1  christos 	add	%o3,%o1,%o1
    354      1.1  christos 	st	%o1,[%l4]			! tp[j-1]
    355  1.1.1.2  christos 	srlx	%o1,32,%o1
    356      1.1  christos 
    357      1.1  christos 	add	%o0,%o0,%o0
    358      1.1  christos 	add	%o5,%o0,%o0
    359      1.1  christos 	add	%o0,%o1,%o1
    360      1.1  christos 	add	%o2,%o1,%o1
    361  1.1.1.2  christos 	st	%o1,[%l4+4]
    362  1.1.1.2  christos 	srlx	%o1,32,%o2
    363      1.1  christos 
    364      1.1  christos 	ld	[%sp+STACK_BIAS+STACK_FRAME],%g5	! tp[0]
    366      1.1  christos 	ld	[%sp+STACK_BIAS+STACK_FRAME+4],%l7	! tp[1]
    367      1.1  christos 	ld	[%i1+8],%l2			! ap[2]
    368      1.1  christos 	ld	[%i3],%o1			! np[0]
    369      1.1  christos 	ld	[%i3+4],%l6			! np[1]
    370      1.1  christos 	mulx	%i4,%g5,%l3
    371      1.1  christos 	and	%l3,%g1,%l3
    372      1.1  christos 	mov	8,%l0
    373      1.1  christos 
    374      1.1  christos 	mulx	%l2,%l2,%o0
    375  1.1.1.2  christos 	mulx	%o1,%l3,%o1
    376      1.1  christos 	and	%o0,%g1,%o3
    377  1.1.1.2  christos 	add	%g5,%o1,%o1
    378      1.1  christos 	srlx	%o0,32,%o0
    379      1.1  christos 	add	%sp,STACK_BIAS+STACK_FRAME,%l4
    380      1.1  christos 	srlx	%o1,32,%o1
    381      1.1  christos 	and	%o0,1,%o5
    382      1.1  christos 	srlx	%o0,1,%o0
    383      1.1  christos 	mov	4,%l1
    384      1.1  christos 
    385      1.1  christos .Lsqr_outer:
    386      1.1  christos .Lsqr_inner1:
    387      1.1  christos 	mulx	%l6,%l3,%o4
    388      1.1  christos 	add	%l7,%o1,%o1
    389      1.1  christos 	add	%l1,4,%l1
    390      1.1  christos 	ld	[%l4+8],%l7
    391      1.1  christos 	cmp	%l1,%l0
    392      1.1  christos 	add	%o4,%o1,%o1
    393      1.1  christos 	ld	[%i3+%l1],%l6
    394      1.1  christos 	st	%o1,[%l4]
    395      1.1  christos 	srlx	%o1,32,%o1
    396      1.1  christos 	bl	%icc,.Lsqr_inner1
    397      1.1  christos 	add	%l4,4,%l4
    398      1.1  christos !.Lsqr_inner1
    399      1.1  christos 
    400      1.1  christos 	add	%l1,4,%l1
    401  1.1.1.2  christos 	ld	[%i1+%l1],%l5			! ap[j]
    402  1.1.1.2  christos 	mulx	%l6,%l3,%o4
    403  1.1.1.2  christos 	add	%l7,%o1,%o1
    404      1.1  christos 	ld	[%i3+%l1],%l6			! np[j]
    405      1.1  christos 	srlx	%o1,32,%g4
    406      1.1  christos 	and	%o1,%g1,%o1
    407      1.1  christos 	add	%g4,%o5,%o5
    408      1.1  christos 	add	%o3,%o1,%o1
    409      1.1  christos 	ld	[%l4+8],%l7			! tp[j]
    410      1.1  christos 	add	%o4,%o1,%o1
    411      1.1  christos 	st	%o1,[%l4]
    412      1.1  christos 	srlx	%o1,32,%o1
    413      1.1  christos 
    414      1.1  christos 	add	%l1,4,%l1
    415      1.1  christos 	cmp	%l1,%i5
    416      1.1  christos 	be,pn	%icc,.Lsqr_no_inner2
    417      1.1  christos 	add	%l4,4,%l4
    418  1.1.1.2  christos 
    419      1.1  christos .Lsqr_inner2:
    420      1.1  christos 	mulx	%l5,%l2,%o3
    421      1.1  christos 	mulx	%l6,%l3,%o4
    422      1.1  christos 	add	%l7,%o5,%o5
    423      1.1  christos 	add	%o3,%o0,%o0
    424      1.1  christos 	ld	[%i1+%l1],%l5			! ap[j]
    425      1.1  christos 	and	%o0,%g1,%o3
    426  1.1.1.2  christos 	ld	[%i3+%l1],%l6			! np[j]
    427      1.1  christos 	srlx	%o0,32,%o0
    428  1.1.1.2  christos 	add	%o3,%o3,%o3
    429      1.1  christos 	ld	[%l4+8],%l7			! tp[j]
    430      1.1  christos 	add	%o5,%o3,%o3
    431      1.1  christos 	add	%l1,4,%l1				! j++
    432      1.1  christos 	srlx	%o3,32,%o5
    433      1.1  christos 	and	%o3,%g1,%o3
    434      1.1  christos 	cmp	%l1,%i5
    435      1.1  christos 	add	%o3,%o1,%o1
    436      1.1  christos 	add	%o4,%o1,%o1
    437      1.1  christos 	st	%o1,[%l4]			! tp[j-1]
    438      1.1  christos 	srlx	%o1,32,%o1
    439      1.1  christos 	bl	%icc,.Lsqr_inner2
    440      1.1  christos 	add	%l4,4,%l4			! tp++
    441  1.1.1.2  christos 
    442      1.1  christos .Lsqr_no_inner2:
    443      1.1  christos 	mulx	%l5,%l2,%o3
    444      1.1  christos 	mulx	%l6,%l3,%o4
    445      1.1  christos 	add	%l7,%o5,%o5
    446  1.1.1.2  christos 	add	%o3,%o0,%o0
    447  1.1.1.2  christos 	and	%o0,%g1,%o3
    448      1.1  christos 	srlx	%o0,32,%o0
    449      1.1  christos 	add	%o3,%o3,%o3
    450      1.1  christos 	add	%o5,%o3,%o3
    451      1.1  christos 	srlx	%o3,32,%o5
    452      1.1  christos 	and	%o3,%g1,%o3
    453      1.1  christos 	add	%o3,%o1,%o1
    454      1.1  christos 	add	%o4,%o1,%o1
    455  1.1.1.2  christos 	st	%o1,[%l4]			! tp[j-1]
    456      1.1  christos 	srlx	%o1,32,%o1
    457      1.1  christos 
    458      1.1  christos 	add	%o0,%o0,%o0
    459      1.1  christos 	add	%o5,%o0,%o0
    460      1.1  christos 	add	%o0,%o1,%o1
    461      1.1  christos 	add	%o2,%o1,%o1
    462  1.1.1.2  christos 	st	%o1,[%l4+4]
    463  1.1.1.2  christos 	srlx	%o1,32,%o2
    464      1.1  christos 
    465      1.1  christos 	add	%l0,4,%l0				! i++
    467      1.1  christos 	ld	[%sp+STACK_BIAS+STACK_FRAME],%g5	! tp[0]
    468      1.1  christos 	ld	[%sp+STACK_BIAS+STACK_FRAME+4],%l7	! tp[1]
    469      1.1  christos 	ld	[%i1+%l0],%l2			! ap[j]
    470      1.1  christos 	ld	[%i3],%o1			! np[0]
    471      1.1  christos 	ld	[%i3+4],%l6			! np[1]
    472      1.1  christos 	mulx	%i4,%g5,%l3
    473      1.1  christos 	and	%l3,%g1,%l3
    474      1.1  christos 	add	%l0,4,%g4
    475      1.1  christos 
    476  1.1.1.2  christos 	mulx	%l2,%l2,%o0
    477      1.1  christos 	mulx	%o1,%l3,%o1
    478  1.1.1.2  christos 	and	%o0,%g1,%o3
    479      1.1  christos 	add	%g5,%o1,%o1
    480      1.1  christos 	srlx	%o0,32,%o0
    481      1.1  christos 	add	%sp,STACK_BIAS+STACK_FRAME,%l4
    482      1.1  christos 	srlx	%o1,32,%o1
    483      1.1  christos 	and	%o0,1,%o5
    484      1.1  christos 	srlx	%o0,1,%o0
    485      1.1  christos 
    486      1.1  christos 	cmp	%g4,%i5			! i<num-1
    487      1.1  christos 	bl	%icc,.Lsqr_outer
    488      1.1  christos 	mov	4,%l1
    489      1.1  christos 
    490      1.1  christos .Lsqr_last:
    492      1.1  christos 	mulx	%l6,%l3,%o4
    493      1.1  christos 	add	%l7,%o1,%o1
    494      1.1  christos 	add	%l1,4,%l1
    495      1.1  christos 	ld	[%l4+8],%l7
    496      1.1  christos 	cmp	%l1,%l0
    497      1.1  christos 	add	%o4,%o1,%o1
    498      1.1  christos 	ld	[%i3+%l1],%l6
    499      1.1  christos 	st	%o1,[%l4]
    500  1.1.1.2  christos 	srlx	%o1,32,%o1
    501  1.1.1.2  christos 	bl	%icc,.Lsqr_last
    502  1.1.1.2  christos 	add	%l4,4,%l4
    503  1.1.1.2  christos !.Lsqr_last
    504      1.1  christos 
    505      1.1  christos 	mulx	%l6,%l3,%o4
    506      1.1  christos 	add	%l7,%o3,%o3
    507      1.1  christos 	srlx	%o3,32,%g4
    508      1.1  christos 	and	%o3,%g1,%o3
    509      1.1  christos 	add	%g4,%o5,%o5
    510  1.1.1.2  christos 	add	%o3,%o1,%o1
    511      1.1  christos 	add	%o4,%o1,%o1
    512      1.1  christos 	st	%o1,[%l4]
    513      1.1  christos 	srlx	%o1,32,%o1
    514      1.1  christos 
    515      1.1  christos 	add	%o0,%o0,%o0		! recover %o0
    516      1.1  christos 	add	%o5,%o0,%o0
    517      1.1  christos 	add	%o0,%o1,%o1
    518      1.1  christos 	add	%o2,%o1,%o1
    519      1.1  christos 	st	%o1,[%l4+4]
    520  1.1.1.2  christos 	srlx	%o1,32,%o2
    521      1.1  christos 
    522                    	ba	.Ltail
    523                    	add	%l4,8,%l4
    524                    .type	bn_mul_mont_int,#function
    525                    .size	bn_mul_mont_int,(.-bn_mul_mont_int)
    526                    .asciz	"Montgomery Multiplication for SPARCv9, CRYPTOGAMS by <appro (at) openssl.org>"
    527                    .align	32
    528