Home | History | Annotate | Download | only in asm
      1 .file	"crypto/bn/asm/x86-mont.s"
      2 .text
      3 .globl	bn_mul_mont
      4 .type	bn_mul_mont,@function
      5 .align	16
      6 bn_mul_mont:
      7 .L_bn_mul_mont_begin:
      8 	pushl	%ebp
      9 	pushl	%ebx
     10 	pushl	%esi
     11 	pushl	%edi
     12 	xorl	%eax,%eax
     13 	movl	40(%esp),%edi
     14 	cmpl	$4,%edi
     15 	jl	.L000just_leave
     16 	leal	20(%esp),%esi
     17 	leal	24(%esp),%edx
     18 	movl	%esp,%ebp
     19 	addl	$2,%edi
     20 	negl	%edi
     21 	leal	-32(%esp,%edi,4),%esp
     22 	negl	%edi
     23 	movl	%esp,%eax
     24 	subl	%edx,%eax
     25 	andl	$2047,%eax
     26 	subl	%eax,%esp
     27 	xorl	%esp,%edx
     28 	andl	$2048,%edx
     29 	xorl	$2048,%edx
     30 	subl	%edx,%esp
     31 	andl	$-64,%esp
     32 	movl	(%esi),%eax
     33 	movl	4(%esi),%ebx
     34 	movl	8(%esi),%ecx
     35 	movl	12(%esi),%edx
     36 	movl	16(%esi),%esi
     37 	movl	(%esi),%esi
     38 	movl	%eax,4(%esp)
     39 	movl	%ebx,8(%esp)
     40 	movl	%ecx,12(%esp)
     41 	movl	%edx,16(%esp)
     42 	movl	%esi,20(%esp)
     43 	leal	-3(%edi),%ebx
     44 	movl	%ebp,24(%esp)
     45 	movl	8(%esp),%esi
     46 	leal	1(%ebx),%ebp
     47 	movl	12(%esp),%edi
     48 	xorl	%ecx,%ecx
     49 	movl	%esi,%edx
     50 	andl	$1,%ebp
     51 	subl	%edi,%edx
     52 	leal	4(%edi,%ebx,4),%eax
     53 	orl	%edx,%ebp
     54 	movl	(%edi),%edi
     55 	jz	.L001bn_sqr_mont
     56 	movl	%eax,28(%esp)
     57 	movl	(%esi),%eax
     58 	xorl	%edx,%edx
     59 .align	16
     60 .L002mull:
     61 	movl	%edx,%ebp
     62 	mull	%edi
     63 	addl	%eax,%ebp
     64 	leal	1(%ecx),%ecx
     65 	adcl	$0,%edx
     66 	movl	(%esi,%ecx,4),%eax
     67 	cmpl	%ebx,%ecx
     68 	movl	%ebp,28(%esp,%ecx,4)
     69 	jl	.L002mull
     70 	movl	%edx,%ebp
     71 	mull	%edi
     72 	movl	20(%esp),%edi
     73 	addl	%ebp,%eax
     74 	movl	16(%esp),%esi
     75 	adcl	$0,%edx
     76 	imull	32(%esp),%edi
     77 	movl	%eax,32(%esp,%ebx,4)
     78 	xorl	%ecx,%ecx
     79 	movl	%edx,36(%esp,%ebx,4)
     80 	movl	%ecx,40(%esp,%ebx,4)
     81 	movl	(%esi),%eax
     82 	mull	%edi
     83 	addl	32(%esp),%eax
     84 	movl	4(%esi),%eax
     85 	adcl	$0,%edx
     86 	incl	%ecx
     87 	jmp	.L0032ndmadd
     88 .align	16
     89 .L0041stmadd:
     90 	movl	%edx,%ebp
     91 	mull	%edi
     92 	addl	32(%esp,%ecx,4),%ebp
     93 	leal	1(%ecx),%ecx
     94 	adcl	$0,%edx
     95 	addl	%eax,%ebp
     96 	movl	(%esi,%ecx,4),%eax
     97 	adcl	$0,%edx
     98 	cmpl	%ebx,%ecx
     99 	movl	%ebp,28(%esp,%ecx,4)
    100 	jl	.L0041stmadd
    101 	movl	%edx,%ebp
    102 	mull	%edi
    103 	addl	32(%esp,%ebx,4),%eax
    104 	movl	20(%esp),%edi
    105 	adcl	$0,%edx
    106 	movl	16(%esp),%esi
    107 	addl	%eax,%ebp
    108 	adcl	$0,%edx
    109 	imull	32(%esp),%edi
    110 	xorl	%ecx,%ecx
    111 	addl	36(%esp,%ebx,4),%edx
    112 	movl	%ebp,32(%esp,%ebx,4)
    113 	adcl	$0,%ecx
    114 	movl	(%esi),%eax
    115 	movl	%edx,36(%esp,%ebx,4)
    116 	movl	%ecx,40(%esp,%ebx,4)
    117 	mull	%edi
    118 	addl	32(%esp),%eax
    119 	movl	4(%esi),%eax
    120 	adcl	$0,%edx
    121 	movl	$1,%ecx
    122 .align	16
    123 .L0032ndmadd:
    124 	movl	%edx,%ebp
    125 	mull	%edi
    126 	addl	32(%esp,%ecx,4),%ebp
    127 	leal	1(%ecx),%ecx
    128 	adcl	$0,%edx
    129 	addl	%eax,%ebp
    130 	movl	(%esi,%ecx,4),%eax
    131 	adcl	$0,%edx
    132 	cmpl	%ebx,%ecx
    133 	movl	%ebp,24(%esp,%ecx,4)
    134 	jl	.L0032ndmadd
    135 	movl	%edx,%ebp
    136 	mull	%edi
    137 	addl	32(%esp,%ebx,4),%ebp
    138 	adcl	$0,%edx
    139 	addl	%eax,%ebp
    140 	adcl	$0,%edx
    141 	movl	%ebp,28(%esp,%ebx,4)
    142 	xorl	%eax,%eax
    143 	movl	12(%esp),%ecx
    144 	addl	36(%esp,%ebx,4),%edx
    145 	adcl	40(%esp,%ebx,4),%eax
    146 	leal	4(%ecx),%ecx
    147 	movl	%edx,32(%esp,%ebx,4)
    148 	cmpl	28(%esp),%ecx
    149 	movl	%eax,36(%esp,%ebx,4)
    150 	je	.L005common_tail
    151 	movl	(%ecx),%edi
    152 	movl	8(%esp),%esi
    153 	movl	%ecx,12(%esp)
    154 	xorl	%ecx,%ecx
    155 	xorl	%edx,%edx
    156 	movl	(%esi),%eax
    157 	jmp	.L0041stmadd
    158 .align	16
    159 .L001bn_sqr_mont:
    160 	movl	%ebx,(%esp)
    161 	movl	%ecx,12(%esp)
    162 	movl	%edi,%eax
    163 	mull	%edi
    164 	movl	%eax,32(%esp)
    165 	movl	%edx,%ebx
    166 	shrl	$1,%edx
    167 	andl	$1,%ebx
    168 	incl	%ecx
    169 .align	16
    170 .L006sqr:
    171 	movl	(%esi,%ecx,4),%eax
    172 	movl	%edx,%ebp
    173 	mull	%edi
    174 	addl	%ebp,%eax
    175 	leal	1(%ecx),%ecx
    176 	adcl	$0,%edx
    177 	leal	(%ebx,%eax,2),%ebp
    178 	shrl	$31,%eax
    179 	cmpl	(%esp),%ecx
    180 	movl	%eax,%ebx
    181 	movl	%ebp,28(%esp,%ecx,4)
    182 	jl	.L006sqr
    183 	movl	(%esi,%ecx,4),%eax
    184 	movl	%edx,%ebp
    185 	mull	%edi
    186 	addl	%ebp,%eax
    187 	movl	20(%esp),%edi
    188 	adcl	$0,%edx
    189 	movl	16(%esp),%esi
    190 	leal	(%ebx,%eax,2),%ebp
    191 	imull	32(%esp),%edi
    192 	shrl	$31,%eax
    193 	movl	%ebp,32(%esp,%ecx,4)
    194 	leal	(%eax,%edx,2),%ebp
    195 	movl	(%esi),%eax
    196 	shrl	$31,%edx
    197 	movl	%ebp,36(%esp,%ecx,4)
    198 	movl	%edx,40(%esp,%ecx,4)
    199 	mull	%edi
    200 	addl	32(%esp),%eax
    201 	movl	%ecx,%ebx
    202 	adcl	$0,%edx
    203 	movl	4(%esi),%eax
    204 	movl	$1,%ecx
    205 .align	16
    206 .L0073rdmadd:
    207 	movl	%edx,%ebp
    208 	mull	%edi
    209 	addl	32(%esp,%ecx,4),%ebp
    210 	adcl	$0,%edx
    211 	addl	%eax,%ebp
    212 	movl	4(%esi,%ecx,4),%eax
    213 	adcl	$0,%edx
    214 	movl	%ebp,28(%esp,%ecx,4)
    215 	movl	%edx,%ebp
    216 	mull	%edi
    217 	addl	36(%esp,%ecx,4),%ebp
    218 	leal	2(%ecx),%ecx
    219 	adcl	$0,%edx
    220 	addl	%eax,%ebp
    221 	movl	(%esi,%ecx,4),%eax
    222 	adcl	$0,%edx
    223 	cmpl	%ebx,%ecx
    224 	movl	%ebp,24(%esp,%ecx,4)
    225 	jl	.L0073rdmadd
    226 	movl	%edx,%ebp
    227 	mull	%edi
    228 	addl	32(%esp,%ebx,4),%ebp
    229 	adcl	$0,%edx
    230 	addl	%eax,%ebp
    231 	adcl	$0,%edx
    232 	movl	%ebp,28(%esp,%ebx,4)
    233 	movl	12(%esp),%ecx
    234 	xorl	%eax,%eax
    235 	movl	8(%esp),%esi
    236 	addl	36(%esp,%ebx,4),%edx
    237 	adcl	40(%esp,%ebx,4),%eax
    238 	movl	%edx,32(%esp,%ebx,4)
    239 	cmpl	%ebx,%ecx
    240 	movl	%eax,36(%esp,%ebx,4)
    241 	je	.L005common_tail
    242 	movl	4(%esi,%ecx,4),%edi
    243 	leal	1(%ecx),%ecx
    244 	movl	%edi,%eax
    245 	movl	%ecx,12(%esp)
    246 	mull	%edi
    247 	addl	32(%esp,%ecx,4),%eax
    248 	adcl	$0,%edx
    249 	movl	%eax,32(%esp,%ecx,4)
    250 	xorl	%ebp,%ebp
    251 	cmpl	%ebx,%ecx
    252 	leal	1(%ecx),%ecx
    253 	je	.L008sqrlast
    254 	movl	%edx,%ebx
    255 	shrl	$1,%edx
    256 	andl	$1,%ebx
    257 .align	16
    258 .L009sqradd:
    259 	movl	(%esi,%ecx,4),%eax
    260 	movl	%edx,%ebp
    261 	mull	%edi
    262 	addl	%ebp,%eax
    263 	leal	(%eax,%eax,1),%ebp
    264 	adcl	$0,%edx
    265 	shrl	$31,%eax
    266 	addl	32(%esp,%ecx,4),%ebp
    267 	leal	1(%ecx),%ecx
    268 	adcl	$0,%eax
    269 	addl	%ebx,%ebp
    270 	adcl	$0,%eax
    271 	cmpl	(%esp),%ecx
    272 	movl	%ebp,28(%esp,%ecx,4)
    273 	movl	%eax,%ebx
    274 	jle	.L009sqradd
    275 	movl	%edx,%ebp
    276 	addl	%edx,%edx
    277 	shrl	$31,%ebp
    278 	addl	%ebx,%edx
    279 	adcl	$0,%ebp
    280 .L008sqrlast:
    281 	movl	20(%esp),%edi
    282 	movl	16(%esp),%esi
    283 	imull	32(%esp),%edi
    284 	addl	32(%esp,%ecx,4),%edx
    285 	movl	(%esi),%eax
    286 	adcl	$0,%ebp
    287 	movl	%edx,32(%esp,%ecx,4)
    288 	movl	%ebp,36(%esp,%ecx,4)
    289 	mull	%edi
    290 	addl	32(%esp),%eax
    291 	leal	-1(%ecx),%ebx
    292 	adcl	$0,%edx
    293 	movl	$1,%ecx
    294 	movl	4(%esi),%eax
    295 	jmp	.L0073rdmadd
    296 .align	16
    297 .L005common_tail:
    298 	movl	16(%esp),%ebp
    299 	movl	4(%esp),%edi
    300 	leal	32(%esp),%esi
    301 	movl	(%esi),%eax
    302 	movl	%ebx,%ecx
    303 	xorl	%edx,%edx
    304 .align	16
    305 .L010sub:
    306 	sbbl	(%ebp,%edx,4),%eax
    307 	movl	%eax,(%edi,%edx,4)
    308 	decl	%ecx
    309 	movl	4(%esi,%edx,4),%eax
    310 	leal	1(%edx),%edx
    311 	jge	.L010sub
    312 	sbbl	$0,%eax
    313 	andl	%eax,%esi
    314 	notl	%eax
    315 	movl	%edi,%ebp
    316 	andl	%eax,%ebp
    317 	orl	%ebp,%esi
    318 .align	16
    319 .L011copy:
    320 	movl	(%esi,%ebx,4),%eax
    321 	movl	%eax,(%edi,%ebx,4)
    322 	movl	%ecx,32(%esp,%ebx,4)
    323 	decl	%ebx
    324 	jge	.L011copy
    325 	movl	24(%esp),%esp
    326 	movl	$1,%eax
    327 .L000just_leave:
    328 	popl	%edi
    329 	popl	%esi
    330 	popl	%ebx
    331 	popl	%ebp
    332 	ret
    333 .size	bn_mul_mont,.-.L_bn_mul_mont_begin
    334 .byte	77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105
    335 .byte	112,108,105,99,97,116,105,111,110,32,102,111,114,32,120,56
    336 .byte	54,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121
    337 .byte	32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46
    338 .byte	111,114,103,62,0
    339