Adam Langley | d9e397b | 2015-01-22 14:27:53 -0800 | [diff] [blame] | 1 | #if defined(__i386__) |
Adam Langley | d9e397b | 2015-01-22 14:27:53 -0800 | [diff] [blame] | 2 | .text |
| 3 | .globl _bn_mul_mont |
| 4 | .private_extern _bn_mul_mont |
| 5 | .align 4 |
| 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 |
Adam Langley | d9e397b | 2015-01-22 14:27:53 -0800 | [diff] [blame] | 18 | addl $2,%edi |
| 19 | negl %edi |
Robert Sloan | a94fe05 | 2017-02-21 08:49:28 -0800 | [diff] [blame] | 20 | leal -32(%esp,%edi,4),%ebp |
Adam Langley | d9e397b | 2015-01-22 14:27:53 -0800 | [diff] [blame] | 21 | negl %edi |
Robert Sloan | a94fe05 | 2017-02-21 08:49:28 -0800 | [diff] [blame] | 22 | movl %ebp,%eax |
Adam Langley | d9e397b | 2015-01-22 14:27:53 -0800 | [diff] [blame] | 23 | subl %edx,%eax |
| 24 | andl $2047,%eax |
Robert Sloan | a94fe05 | 2017-02-21 08:49:28 -0800 | [diff] [blame] | 25 | subl %eax,%ebp |
| 26 | xorl %ebp,%edx |
Adam Langley | d9e397b | 2015-01-22 14:27:53 -0800 | [diff] [blame] | 27 | andl $2048,%edx |
| 28 | xorl $2048,%edx |
Robert Sloan | a94fe05 | 2017-02-21 08:49:28 -0800 | [diff] [blame] | 29 | subl %edx,%ebp |
| 30 | andl $-64,%ebp |
| 31 | movl %esp,%eax |
| 32 | subl %ebp,%eax |
| 33 | andl $-4096,%eax |
| 34 | movl %esp,%edx |
| 35 | leal (%ebp,%eax,1),%esp |
| 36 | movl (%esp),%eax |
| 37 | cmpl %ebp,%esp |
| 38 | ja L001page_walk |
| 39 | jmp L002page_walk_done |
| 40 | .align 4,0x90 |
| 41 | L001page_walk: |
| 42 | leal -4096(%esp),%esp |
| 43 | movl (%esp),%eax |
| 44 | cmpl %ebp,%esp |
| 45 | ja L001page_walk |
| 46 | L002page_walk_done: |
Adam Langley | d9e397b | 2015-01-22 14:27:53 -0800 | [diff] [blame] | 47 | movl (%esi),%eax |
| 48 | movl 4(%esi),%ebx |
| 49 | movl 8(%esi),%ecx |
Robert Sloan | a94fe05 | 2017-02-21 08:49:28 -0800 | [diff] [blame] | 50 | movl 12(%esi),%ebp |
Adam Langley | d9e397b | 2015-01-22 14:27:53 -0800 | [diff] [blame] | 51 | movl 16(%esi),%esi |
| 52 | movl (%esi),%esi |
| 53 | movl %eax,4(%esp) |
| 54 | movl %ebx,8(%esp) |
| 55 | movl %ecx,12(%esp) |
Robert Sloan | a94fe05 | 2017-02-21 08:49:28 -0800 | [diff] [blame] | 56 | movl %ebp,16(%esp) |
Adam Langley | d9e397b | 2015-01-22 14:27:53 -0800 | [diff] [blame] | 57 | movl %esi,20(%esp) |
| 58 | leal -3(%edi),%ebx |
Robert Sloan | a94fe05 | 2017-02-21 08:49:28 -0800 | [diff] [blame] | 59 | movl %edx,24(%esp) |
| 60 | call L003PIC_me_up |
| 61 | L003PIC_me_up: |
Adam Langley | e9ada86 | 2015-05-11 17:20:37 -0700 | [diff] [blame] | 62 | popl %eax |
Robert Sloan | a94fe05 | 2017-02-21 08:49:28 -0800 | [diff] [blame] | 63 | movl L_OPENSSL_ia32cap_P$non_lazy_ptr-L003PIC_me_up(%eax),%eax |
Adam Langley | e9ada86 | 2015-05-11 17:20:37 -0700 | [diff] [blame] | 64 | btl $26,(%eax) |
Robert Sloan | a94fe05 | 2017-02-21 08:49:28 -0800 | [diff] [blame] | 65 | jnc L004non_sse2 |
Adam Langley | e9ada86 | 2015-05-11 17:20:37 -0700 | [diff] [blame] | 66 | movl $-1,%eax |
| 67 | movd %eax,%mm7 |
| 68 | movl 8(%esp),%esi |
| 69 | movl 12(%esp),%edi |
| 70 | movl 16(%esp),%ebp |
| 71 | xorl %edx,%edx |
| 72 | xorl %ecx,%ecx |
| 73 | movd (%edi),%mm4 |
| 74 | movd (%esi),%mm5 |
| 75 | movd (%ebp),%mm3 |
| 76 | pmuludq %mm4,%mm5 |
| 77 | movq %mm5,%mm2 |
| 78 | movq %mm5,%mm0 |
| 79 | pand %mm7,%mm0 |
| 80 | pmuludq 20(%esp),%mm5 |
| 81 | pmuludq %mm5,%mm3 |
| 82 | paddq %mm0,%mm3 |
| 83 | movd 4(%ebp),%mm1 |
| 84 | movd 4(%esi),%mm0 |
| 85 | psrlq $32,%mm2 |
| 86 | psrlq $32,%mm3 |
| 87 | incl %ecx |
| 88 | .align 4,0x90 |
Robert Sloan | a94fe05 | 2017-02-21 08:49:28 -0800 | [diff] [blame] | 89 | L0051st: |
Adam Langley | e9ada86 | 2015-05-11 17:20:37 -0700 | [diff] [blame] | 90 | pmuludq %mm4,%mm0 |
| 91 | pmuludq %mm5,%mm1 |
| 92 | paddq %mm0,%mm2 |
| 93 | paddq %mm1,%mm3 |
| 94 | movq %mm2,%mm0 |
| 95 | pand %mm7,%mm0 |
| 96 | movd 4(%ebp,%ecx,4),%mm1 |
| 97 | paddq %mm0,%mm3 |
| 98 | movd 4(%esi,%ecx,4),%mm0 |
| 99 | psrlq $32,%mm2 |
| 100 | movd %mm3,28(%esp,%ecx,4) |
| 101 | psrlq $32,%mm3 |
| 102 | leal 1(%ecx),%ecx |
| 103 | cmpl %ebx,%ecx |
Robert Sloan | a94fe05 | 2017-02-21 08:49:28 -0800 | [diff] [blame] | 104 | jl L0051st |
Adam Langley | e9ada86 | 2015-05-11 17:20:37 -0700 | [diff] [blame] | 105 | pmuludq %mm4,%mm0 |
| 106 | pmuludq %mm5,%mm1 |
| 107 | paddq %mm0,%mm2 |
| 108 | paddq %mm1,%mm3 |
| 109 | movq %mm2,%mm0 |
| 110 | pand %mm7,%mm0 |
| 111 | paddq %mm0,%mm3 |
| 112 | movd %mm3,28(%esp,%ecx,4) |
| 113 | psrlq $32,%mm2 |
| 114 | psrlq $32,%mm3 |
| 115 | paddq %mm2,%mm3 |
| 116 | movq %mm3,32(%esp,%ebx,4) |
| 117 | incl %edx |
Robert Sloan | a94fe05 | 2017-02-21 08:49:28 -0800 | [diff] [blame] | 118 | L006outer: |
Adam Langley | e9ada86 | 2015-05-11 17:20:37 -0700 | [diff] [blame] | 119 | xorl %ecx,%ecx |
| 120 | movd (%edi,%edx,4),%mm4 |
| 121 | movd (%esi),%mm5 |
| 122 | movd 32(%esp),%mm6 |
| 123 | movd (%ebp),%mm3 |
| 124 | pmuludq %mm4,%mm5 |
| 125 | paddq %mm6,%mm5 |
| 126 | movq %mm5,%mm0 |
| 127 | movq %mm5,%mm2 |
| 128 | pand %mm7,%mm0 |
| 129 | pmuludq 20(%esp),%mm5 |
| 130 | pmuludq %mm5,%mm3 |
| 131 | paddq %mm0,%mm3 |
| 132 | movd 36(%esp),%mm6 |
| 133 | movd 4(%ebp),%mm1 |
| 134 | movd 4(%esi),%mm0 |
| 135 | psrlq $32,%mm2 |
| 136 | psrlq $32,%mm3 |
| 137 | paddq %mm6,%mm2 |
| 138 | incl %ecx |
| 139 | decl %ebx |
Robert Sloan | a94fe05 | 2017-02-21 08:49:28 -0800 | [diff] [blame] | 140 | L007inner: |
Adam Langley | e9ada86 | 2015-05-11 17:20:37 -0700 | [diff] [blame] | 141 | pmuludq %mm4,%mm0 |
| 142 | pmuludq %mm5,%mm1 |
| 143 | paddq %mm0,%mm2 |
| 144 | paddq %mm1,%mm3 |
| 145 | movq %mm2,%mm0 |
| 146 | movd 36(%esp,%ecx,4),%mm6 |
| 147 | pand %mm7,%mm0 |
| 148 | movd 4(%ebp,%ecx,4),%mm1 |
| 149 | paddq %mm0,%mm3 |
| 150 | movd 4(%esi,%ecx,4),%mm0 |
| 151 | psrlq $32,%mm2 |
| 152 | movd %mm3,28(%esp,%ecx,4) |
| 153 | psrlq $32,%mm3 |
| 154 | paddq %mm6,%mm2 |
| 155 | decl %ebx |
| 156 | leal 1(%ecx),%ecx |
Robert Sloan | a94fe05 | 2017-02-21 08:49:28 -0800 | [diff] [blame] | 157 | jnz L007inner |
Adam Langley | e9ada86 | 2015-05-11 17:20:37 -0700 | [diff] [blame] | 158 | movl %ecx,%ebx |
| 159 | pmuludq %mm4,%mm0 |
| 160 | pmuludq %mm5,%mm1 |
| 161 | paddq %mm0,%mm2 |
| 162 | paddq %mm1,%mm3 |
| 163 | movq %mm2,%mm0 |
| 164 | pand %mm7,%mm0 |
| 165 | paddq %mm0,%mm3 |
| 166 | movd %mm3,28(%esp,%ecx,4) |
| 167 | psrlq $32,%mm2 |
| 168 | psrlq $32,%mm3 |
| 169 | movd 36(%esp,%ebx,4),%mm6 |
| 170 | paddq %mm2,%mm3 |
| 171 | paddq %mm6,%mm3 |
| 172 | movq %mm3,32(%esp,%ebx,4) |
| 173 | leal 1(%edx),%edx |
| 174 | cmpl %ebx,%edx |
Robert Sloan | a94fe05 | 2017-02-21 08:49:28 -0800 | [diff] [blame] | 175 | jle L006outer |
Adam Langley | e9ada86 | 2015-05-11 17:20:37 -0700 | [diff] [blame] | 176 | emms |
Robert Sloan | a94fe05 | 2017-02-21 08:49:28 -0800 | [diff] [blame] | 177 | jmp L008common_tail |
Adam Langley | e9ada86 | 2015-05-11 17:20:37 -0700 | [diff] [blame] | 178 | .align 4,0x90 |
Robert Sloan | a94fe05 | 2017-02-21 08:49:28 -0800 | [diff] [blame] | 179 | L004non_sse2: |
Adam Langley | d9e397b | 2015-01-22 14:27:53 -0800 | [diff] [blame] | 180 | movl 8(%esp),%esi |
| 181 | leal 1(%ebx),%ebp |
| 182 | movl 12(%esp),%edi |
| 183 | xorl %ecx,%ecx |
| 184 | movl %esi,%edx |
| 185 | andl $1,%ebp |
| 186 | subl %edi,%edx |
| 187 | leal 4(%edi,%ebx,4),%eax |
| 188 | orl %edx,%ebp |
| 189 | movl (%edi),%edi |
Robert Sloan | a94fe05 | 2017-02-21 08:49:28 -0800 | [diff] [blame] | 190 | jz L009bn_sqr_mont |
Adam Langley | d9e397b | 2015-01-22 14:27:53 -0800 | [diff] [blame] | 191 | movl %eax,28(%esp) |
| 192 | movl (%esi),%eax |
| 193 | xorl %edx,%edx |
| 194 | .align 4,0x90 |
Robert Sloan | a94fe05 | 2017-02-21 08:49:28 -0800 | [diff] [blame] | 195 | L010mull: |
Adam Langley | d9e397b | 2015-01-22 14:27:53 -0800 | [diff] [blame] | 196 | movl %edx,%ebp |
| 197 | mull %edi |
| 198 | addl %eax,%ebp |
| 199 | leal 1(%ecx),%ecx |
| 200 | adcl $0,%edx |
| 201 | movl (%esi,%ecx,4),%eax |
| 202 | cmpl %ebx,%ecx |
| 203 | movl %ebp,28(%esp,%ecx,4) |
Robert Sloan | a94fe05 | 2017-02-21 08:49:28 -0800 | [diff] [blame] | 204 | jl L010mull |
Adam Langley | d9e397b | 2015-01-22 14:27:53 -0800 | [diff] [blame] | 205 | movl %edx,%ebp |
| 206 | mull %edi |
| 207 | movl 20(%esp),%edi |
| 208 | addl %ebp,%eax |
| 209 | movl 16(%esp),%esi |
| 210 | adcl $0,%edx |
| 211 | imull 32(%esp),%edi |
| 212 | movl %eax,32(%esp,%ebx,4) |
| 213 | xorl %ecx,%ecx |
| 214 | movl %edx,36(%esp,%ebx,4) |
| 215 | movl %ecx,40(%esp,%ebx,4) |
| 216 | movl (%esi),%eax |
| 217 | mull %edi |
| 218 | addl 32(%esp),%eax |
| 219 | movl 4(%esi),%eax |
| 220 | adcl $0,%edx |
| 221 | incl %ecx |
Robert Sloan | a94fe05 | 2017-02-21 08:49:28 -0800 | [diff] [blame] | 222 | jmp L0112ndmadd |
Adam Langley | d9e397b | 2015-01-22 14:27:53 -0800 | [diff] [blame] | 223 | .align 4,0x90 |
Robert Sloan | a94fe05 | 2017-02-21 08:49:28 -0800 | [diff] [blame] | 224 | L0121stmadd: |
Adam Langley | d9e397b | 2015-01-22 14:27:53 -0800 | [diff] [blame] | 225 | movl %edx,%ebp |
| 226 | mull %edi |
| 227 | addl 32(%esp,%ecx,4),%ebp |
| 228 | leal 1(%ecx),%ecx |
| 229 | adcl $0,%edx |
| 230 | addl %eax,%ebp |
| 231 | movl (%esi,%ecx,4),%eax |
| 232 | adcl $0,%edx |
| 233 | cmpl %ebx,%ecx |
| 234 | movl %ebp,28(%esp,%ecx,4) |
Robert Sloan | a94fe05 | 2017-02-21 08:49:28 -0800 | [diff] [blame] | 235 | jl L0121stmadd |
Adam Langley | d9e397b | 2015-01-22 14:27:53 -0800 | [diff] [blame] | 236 | movl %edx,%ebp |
| 237 | mull %edi |
| 238 | addl 32(%esp,%ebx,4),%eax |
| 239 | movl 20(%esp),%edi |
| 240 | adcl $0,%edx |
| 241 | movl 16(%esp),%esi |
| 242 | addl %eax,%ebp |
| 243 | adcl $0,%edx |
| 244 | imull 32(%esp),%edi |
| 245 | xorl %ecx,%ecx |
| 246 | addl 36(%esp,%ebx,4),%edx |
| 247 | movl %ebp,32(%esp,%ebx,4) |
| 248 | adcl $0,%ecx |
| 249 | movl (%esi),%eax |
| 250 | movl %edx,36(%esp,%ebx,4) |
| 251 | movl %ecx,40(%esp,%ebx,4) |
| 252 | mull %edi |
| 253 | addl 32(%esp),%eax |
| 254 | movl 4(%esi),%eax |
| 255 | adcl $0,%edx |
| 256 | movl $1,%ecx |
| 257 | .align 4,0x90 |
Robert Sloan | a94fe05 | 2017-02-21 08:49:28 -0800 | [diff] [blame] | 258 | L0112ndmadd: |
Adam Langley | d9e397b | 2015-01-22 14:27:53 -0800 | [diff] [blame] | 259 | movl %edx,%ebp |
| 260 | mull %edi |
| 261 | addl 32(%esp,%ecx,4),%ebp |
| 262 | leal 1(%ecx),%ecx |
| 263 | adcl $0,%edx |
| 264 | addl %eax,%ebp |
| 265 | movl (%esi,%ecx,4),%eax |
| 266 | adcl $0,%edx |
| 267 | cmpl %ebx,%ecx |
| 268 | movl %ebp,24(%esp,%ecx,4) |
Robert Sloan | a94fe05 | 2017-02-21 08:49:28 -0800 | [diff] [blame] | 269 | jl L0112ndmadd |
Adam Langley | d9e397b | 2015-01-22 14:27:53 -0800 | [diff] [blame] | 270 | movl %edx,%ebp |
| 271 | mull %edi |
| 272 | addl 32(%esp,%ebx,4),%ebp |
| 273 | adcl $0,%edx |
| 274 | addl %eax,%ebp |
| 275 | adcl $0,%edx |
| 276 | movl %ebp,28(%esp,%ebx,4) |
| 277 | xorl %eax,%eax |
| 278 | movl 12(%esp),%ecx |
| 279 | addl 36(%esp,%ebx,4),%edx |
| 280 | adcl 40(%esp,%ebx,4),%eax |
| 281 | leal 4(%ecx),%ecx |
| 282 | movl %edx,32(%esp,%ebx,4) |
| 283 | cmpl 28(%esp),%ecx |
| 284 | movl %eax,36(%esp,%ebx,4) |
Robert Sloan | a94fe05 | 2017-02-21 08:49:28 -0800 | [diff] [blame] | 285 | je L008common_tail |
Adam Langley | d9e397b | 2015-01-22 14:27:53 -0800 | [diff] [blame] | 286 | movl (%ecx),%edi |
| 287 | movl 8(%esp),%esi |
| 288 | movl %ecx,12(%esp) |
| 289 | xorl %ecx,%ecx |
| 290 | xorl %edx,%edx |
| 291 | movl (%esi),%eax |
Robert Sloan | a94fe05 | 2017-02-21 08:49:28 -0800 | [diff] [blame] | 292 | jmp L0121stmadd |
Adam Langley | d9e397b | 2015-01-22 14:27:53 -0800 | [diff] [blame] | 293 | .align 4,0x90 |
Robert Sloan | a94fe05 | 2017-02-21 08:49:28 -0800 | [diff] [blame] | 294 | L009bn_sqr_mont: |
Adam Langley | d9e397b | 2015-01-22 14:27:53 -0800 | [diff] [blame] | 295 | movl %ebx,(%esp) |
| 296 | movl %ecx,12(%esp) |
| 297 | movl %edi,%eax |
| 298 | mull %edi |
| 299 | movl %eax,32(%esp) |
| 300 | movl %edx,%ebx |
| 301 | shrl $1,%edx |
| 302 | andl $1,%ebx |
| 303 | incl %ecx |
| 304 | .align 4,0x90 |
Robert Sloan | a94fe05 | 2017-02-21 08:49:28 -0800 | [diff] [blame] | 305 | L013sqr: |
Adam Langley | d9e397b | 2015-01-22 14:27:53 -0800 | [diff] [blame] | 306 | movl (%esi,%ecx,4),%eax |
| 307 | movl %edx,%ebp |
| 308 | mull %edi |
| 309 | addl %ebp,%eax |
| 310 | leal 1(%ecx),%ecx |
| 311 | adcl $0,%edx |
| 312 | leal (%ebx,%eax,2),%ebp |
| 313 | shrl $31,%eax |
| 314 | cmpl (%esp),%ecx |
| 315 | movl %eax,%ebx |
| 316 | movl %ebp,28(%esp,%ecx,4) |
Robert Sloan | a94fe05 | 2017-02-21 08:49:28 -0800 | [diff] [blame] | 317 | jl L013sqr |
Adam Langley | d9e397b | 2015-01-22 14:27:53 -0800 | [diff] [blame] | 318 | movl (%esi,%ecx,4),%eax |
| 319 | movl %edx,%ebp |
| 320 | mull %edi |
| 321 | addl %ebp,%eax |
| 322 | movl 20(%esp),%edi |
| 323 | adcl $0,%edx |
| 324 | movl 16(%esp),%esi |
| 325 | leal (%ebx,%eax,2),%ebp |
| 326 | imull 32(%esp),%edi |
| 327 | shrl $31,%eax |
| 328 | movl %ebp,32(%esp,%ecx,4) |
| 329 | leal (%eax,%edx,2),%ebp |
| 330 | movl (%esi),%eax |
| 331 | shrl $31,%edx |
| 332 | movl %ebp,36(%esp,%ecx,4) |
| 333 | movl %edx,40(%esp,%ecx,4) |
| 334 | mull %edi |
| 335 | addl 32(%esp),%eax |
| 336 | movl %ecx,%ebx |
| 337 | adcl $0,%edx |
| 338 | movl 4(%esi),%eax |
| 339 | movl $1,%ecx |
| 340 | .align 4,0x90 |
Robert Sloan | a94fe05 | 2017-02-21 08:49:28 -0800 | [diff] [blame] | 341 | L0143rdmadd: |
Adam Langley | d9e397b | 2015-01-22 14:27:53 -0800 | [diff] [blame] | 342 | movl %edx,%ebp |
| 343 | mull %edi |
| 344 | addl 32(%esp,%ecx,4),%ebp |
| 345 | adcl $0,%edx |
| 346 | addl %eax,%ebp |
| 347 | movl 4(%esi,%ecx,4),%eax |
| 348 | adcl $0,%edx |
| 349 | movl %ebp,28(%esp,%ecx,4) |
| 350 | movl %edx,%ebp |
| 351 | mull %edi |
| 352 | addl 36(%esp,%ecx,4),%ebp |
| 353 | leal 2(%ecx),%ecx |
| 354 | adcl $0,%edx |
| 355 | addl %eax,%ebp |
| 356 | movl (%esi,%ecx,4),%eax |
| 357 | adcl $0,%edx |
| 358 | cmpl %ebx,%ecx |
| 359 | movl %ebp,24(%esp,%ecx,4) |
Robert Sloan | a94fe05 | 2017-02-21 08:49:28 -0800 | [diff] [blame] | 360 | jl L0143rdmadd |
Adam Langley | d9e397b | 2015-01-22 14:27:53 -0800 | [diff] [blame] | 361 | movl %edx,%ebp |
| 362 | mull %edi |
| 363 | addl 32(%esp,%ebx,4),%ebp |
| 364 | adcl $0,%edx |
| 365 | addl %eax,%ebp |
| 366 | adcl $0,%edx |
| 367 | movl %ebp,28(%esp,%ebx,4) |
| 368 | movl 12(%esp),%ecx |
| 369 | xorl %eax,%eax |
| 370 | movl 8(%esp),%esi |
| 371 | addl 36(%esp,%ebx,4),%edx |
| 372 | adcl 40(%esp,%ebx,4),%eax |
| 373 | movl %edx,32(%esp,%ebx,4) |
| 374 | cmpl %ebx,%ecx |
| 375 | movl %eax,36(%esp,%ebx,4) |
Robert Sloan | a94fe05 | 2017-02-21 08:49:28 -0800 | [diff] [blame] | 376 | je L008common_tail |
Adam Langley | d9e397b | 2015-01-22 14:27:53 -0800 | [diff] [blame] | 377 | movl 4(%esi,%ecx,4),%edi |
| 378 | leal 1(%ecx),%ecx |
| 379 | movl %edi,%eax |
| 380 | movl %ecx,12(%esp) |
| 381 | mull %edi |
| 382 | addl 32(%esp,%ecx,4),%eax |
| 383 | adcl $0,%edx |
| 384 | movl %eax,32(%esp,%ecx,4) |
| 385 | xorl %ebp,%ebp |
| 386 | cmpl %ebx,%ecx |
| 387 | leal 1(%ecx),%ecx |
Robert Sloan | a94fe05 | 2017-02-21 08:49:28 -0800 | [diff] [blame] | 388 | je L015sqrlast |
Adam Langley | d9e397b | 2015-01-22 14:27:53 -0800 | [diff] [blame] | 389 | movl %edx,%ebx |
| 390 | shrl $1,%edx |
| 391 | andl $1,%ebx |
| 392 | .align 4,0x90 |
Robert Sloan | a94fe05 | 2017-02-21 08:49:28 -0800 | [diff] [blame] | 393 | L016sqradd: |
Adam Langley | d9e397b | 2015-01-22 14:27:53 -0800 | [diff] [blame] | 394 | movl (%esi,%ecx,4),%eax |
| 395 | movl %edx,%ebp |
| 396 | mull %edi |
| 397 | addl %ebp,%eax |
| 398 | leal (%eax,%eax,1),%ebp |
| 399 | adcl $0,%edx |
| 400 | shrl $31,%eax |
| 401 | addl 32(%esp,%ecx,4),%ebp |
| 402 | leal 1(%ecx),%ecx |
| 403 | adcl $0,%eax |
| 404 | addl %ebx,%ebp |
| 405 | adcl $0,%eax |
| 406 | cmpl (%esp),%ecx |
| 407 | movl %ebp,28(%esp,%ecx,4) |
| 408 | movl %eax,%ebx |
Robert Sloan | a94fe05 | 2017-02-21 08:49:28 -0800 | [diff] [blame] | 409 | jle L016sqradd |
Adam Langley | d9e397b | 2015-01-22 14:27:53 -0800 | [diff] [blame] | 410 | movl %edx,%ebp |
| 411 | addl %edx,%edx |
| 412 | shrl $31,%ebp |
| 413 | addl %ebx,%edx |
| 414 | adcl $0,%ebp |
Robert Sloan | a94fe05 | 2017-02-21 08:49:28 -0800 | [diff] [blame] | 415 | L015sqrlast: |
Adam Langley | d9e397b | 2015-01-22 14:27:53 -0800 | [diff] [blame] | 416 | movl 20(%esp),%edi |
| 417 | movl 16(%esp),%esi |
| 418 | imull 32(%esp),%edi |
| 419 | addl 32(%esp,%ecx,4),%edx |
| 420 | movl (%esi),%eax |
| 421 | adcl $0,%ebp |
| 422 | movl %edx,32(%esp,%ecx,4) |
| 423 | movl %ebp,36(%esp,%ecx,4) |
| 424 | mull %edi |
| 425 | addl 32(%esp),%eax |
| 426 | leal -1(%ecx),%ebx |
| 427 | adcl $0,%edx |
| 428 | movl $1,%ecx |
| 429 | movl 4(%esi),%eax |
Robert Sloan | a94fe05 | 2017-02-21 08:49:28 -0800 | [diff] [blame] | 430 | jmp L0143rdmadd |
Adam Langley | d9e397b | 2015-01-22 14:27:53 -0800 | [diff] [blame] | 431 | .align 4,0x90 |
Robert Sloan | a94fe05 | 2017-02-21 08:49:28 -0800 | [diff] [blame] | 432 | L008common_tail: |
Adam Langley | d9e397b | 2015-01-22 14:27:53 -0800 | [diff] [blame] | 433 | movl 16(%esp),%ebp |
| 434 | movl 4(%esp),%edi |
| 435 | leal 32(%esp),%esi |
| 436 | movl (%esi),%eax |
| 437 | movl %ebx,%ecx |
| 438 | xorl %edx,%edx |
| 439 | .align 4,0x90 |
Robert Sloan | a94fe05 | 2017-02-21 08:49:28 -0800 | [diff] [blame] | 440 | L017sub: |
Adam Langley | d9e397b | 2015-01-22 14:27:53 -0800 | [diff] [blame] | 441 | sbbl (%ebp,%edx,4),%eax |
| 442 | movl %eax,(%edi,%edx,4) |
| 443 | decl %ecx |
| 444 | movl 4(%esi,%edx,4),%eax |
| 445 | leal 1(%edx),%edx |
Robert Sloan | a94fe05 | 2017-02-21 08:49:28 -0800 | [diff] [blame] | 446 | jge L017sub |
Adam Langley | d9e397b | 2015-01-22 14:27:53 -0800 | [diff] [blame] | 447 | sbbl $0,%eax |
Robert Sloan | a94fe05 | 2017-02-21 08:49:28 -0800 | [diff] [blame] | 448 | andl %eax,%esi |
| 449 | notl %eax |
| 450 | movl %edi,%ebp |
| 451 | andl %eax,%ebp |
| 452 | orl %ebp,%esi |
Adam Langley | d9e397b | 2015-01-22 14:27:53 -0800 | [diff] [blame] | 453 | .align 4,0x90 |
Robert Sloan | a94fe05 | 2017-02-21 08:49:28 -0800 | [diff] [blame] | 454 | L018copy: |
| 455 | movl (%esi,%ebx,4),%eax |
| 456 | movl %eax,(%edi,%ebx,4) |
| 457 | movl %ecx,32(%esp,%ebx,4) |
Adam Langley | d9e397b | 2015-01-22 14:27:53 -0800 | [diff] [blame] | 458 | decl %ebx |
Robert Sloan | a94fe05 | 2017-02-21 08:49:28 -0800 | [diff] [blame] | 459 | jge L018copy |
Adam Langley | d9e397b | 2015-01-22 14:27:53 -0800 | [diff] [blame] | 460 | movl 24(%esp),%esp |
| 461 | movl $1,%eax |
| 462 | L000just_leave: |
| 463 | popl %edi |
| 464 | popl %esi |
| 465 | popl %ebx |
| 466 | popl %ebp |
| 467 | ret |
| 468 | .byte 77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105 |
| 469 | .byte 112,108,105,99,97,116,105,111,110,32,102,111,114,32,120,56 |
| 470 | .byte 54,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121 |
| 471 | .byte 32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46 |
| 472 | .byte 111,114,103,62,0 |
Adam Langley | e9ada86 | 2015-05-11 17:20:37 -0700 | [diff] [blame] | 473 | .section __IMPORT,__pointers,non_lazy_symbol_pointers |
| 474 | L_OPENSSL_ia32cap_P$non_lazy_ptr: |
| 475 | .indirect_symbol _OPENSSL_ia32cap_P |
| 476 | .long 0 |
Adam Langley | d9e397b | 2015-01-22 14:27:53 -0800 | [diff] [blame] | 477 | #endif |