1*8fb009dcSAndroid Build Coastguard Worker// This file is generated from a similarly-named Perl script in the BoringSSL 2*8fb009dcSAndroid Build Coastguard Worker// source tree. Do not edit by hand. 3*8fb009dcSAndroid Build Coastguard Worker 4*8fb009dcSAndroid Build Coastguard Worker#include <openssl/asm_base.h> 5*8fb009dcSAndroid Build Coastguard Worker 6*8fb009dcSAndroid Build Coastguard Worker#if !defined(OPENSSL_NO_ASM) && defined(OPENSSL_X86) && defined(__ELF__) 7*8fb009dcSAndroid Build Coastguard Worker.text 8*8fb009dcSAndroid Build Coastguard Worker.globl bn_mul_mont 9*8fb009dcSAndroid Build Coastguard Worker.hidden bn_mul_mont 10*8fb009dcSAndroid Build Coastguard Worker.type bn_mul_mont,@function 11*8fb009dcSAndroid Build Coastguard Worker.align 16 12*8fb009dcSAndroid Build Coastguard Workerbn_mul_mont: 13*8fb009dcSAndroid Build Coastguard Worker.L_bn_mul_mont_begin: 14*8fb009dcSAndroid Build Coastguard Worker pushl %ebp 15*8fb009dcSAndroid Build Coastguard Worker pushl %ebx 16*8fb009dcSAndroid Build Coastguard Worker pushl %esi 17*8fb009dcSAndroid Build Coastguard Worker pushl %edi 18*8fb009dcSAndroid Build Coastguard Worker xorl %eax,%eax 19*8fb009dcSAndroid Build Coastguard Worker movl 40(%esp),%edi 20*8fb009dcSAndroid Build Coastguard Worker cmpl $4,%edi 21*8fb009dcSAndroid Build Coastguard Worker jl .L000just_leave 22*8fb009dcSAndroid Build Coastguard Worker leal 20(%esp),%esi 23*8fb009dcSAndroid Build Coastguard Worker leal 24(%esp),%edx 24*8fb009dcSAndroid Build Coastguard Worker addl $2,%edi 25*8fb009dcSAndroid Build Coastguard Worker negl %edi 26*8fb009dcSAndroid Build Coastguard Worker leal -32(%esp,%edi,4),%ebp 27*8fb009dcSAndroid Build Coastguard Worker negl %edi 28*8fb009dcSAndroid Build Coastguard Worker movl %ebp,%eax 29*8fb009dcSAndroid Build Coastguard Worker subl %edx,%eax 30*8fb009dcSAndroid Build Coastguard Worker andl $2047,%eax 31*8fb009dcSAndroid Build Coastguard Worker subl %eax,%ebp 32*8fb009dcSAndroid Build Coastguard Worker xorl %ebp,%edx 33*8fb009dcSAndroid Build Coastguard Worker andl $2048,%edx 34*8fb009dcSAndroid Build Coastguard Worker xorl $2048,%edx 35*8fb009dcSAndroid Build Coastguard Worker subl %edx,%ebp 36*8fb009dcSAndroid Build Coastguard Worker andl $-64,%ebp 37*8fb009dcSAndroid Build Coastguard Worker movl %esp,%eax 38*8fb009dcSAndroid Build Coastguard Worker subl %ebp,%eax 39*8fb009dcSAndroid Build Coastguard Worker andl $-4096,%eax 40*8fb009dcSAndroid Build Coastguard Worker movl %esp,%edx 41*8fb009dcSAndroid Build Coastguard Worker leal (%ebp,%eax,1),%esp 42*8fb009dcSAndroid Build Coastguard Worker movl (%esp),%eax 43*8fb009dcSAndroid Build Coastguard Worker cmpl %ebp,%esp 44*8fb009dcSAndroid Build Coastguard Worker ja .L001page_walk 45*8fb009dcSAndroid Build Coastguard Worker jmp .L002page_walk_done 46*8fb009dcSAndroid Build Coastguard Worker.align 16 47*8fb009dcSAndroid Build Coastguard Worker.L001page_walk: 48*8fb009dcSAndroid Build Coastguard Worker leal -4096(%esp),%esp 49*8fb009dcSAndroid Build Coastguard Worker movl (%esp),%eax 50*8fb009dcSAndroid Build Coastguard Worker cmpl %ebp,%esp 51*8fb009dcSAndroid Build Coastguard Worker ja .L001page_walk 52*8fb009dcSAndroid Build Coastguard Worker.L002page_walk_done: 53*8fb009dcSAndroid Build Coastguard Worker movl (%esi),%eax 54*8fb009dcSAndroid Build Coastguard Worker movl 4(%esi),%ebx 55*8fb009dcSAndroid Build Coastguard Worker movl 8(%esi),%ecx 56*8fb009dcSAndroid Build Coastguard Worker movl 12(%esi),%ebp 57*8fb009dcSAndroid Build Coastguard Worker movl 16(%esi),%esi 58*8fb009dcSAndroid Build Coastguard Worker movl (%esi),%esi 59*8fb009dcSAndroid Build Coastguard Worker movl %eax,4(%esp) 60*8fb009dcSAndroid Build Coastguard Worker movl %ebx,8(%esp) 61*8fb009dcSAndroid Build Coastguard Worker movl %ecx,12(%esp) 62*8fb009dcSAndroid Build Coastguard Worker movl %ebp,16(%esp) 63*8fb009dcSAndroid Build Coastguard Worker movl %esi,20(%esp) 64*8fb009dcSAndroid Build Coastguard Worker leal -3(%edi),%ebx 65*8fb009dcSAndroid Build Coastguard Worker movl %edx,24(%esp) 66*8fb009dcSAndroid Build Coastguard Worker movl $-1,%eax 67*8fb009dcSAndroid Build Coastguard Worker movd %eax,%mm7 68*8fb009dcSAndroid Build Coastguard Worker movl 8(%esp),%esi 69*8fb009dcSAndroid Build Coastguard Worker movl 12(%esp),%edi 70*8fb009dcSAndroid Build Coastguard Worker movl 16(%esp),%ebp 71*8fb009dcSAndroid Build Coastguard Worker xorl %edx,%edx 72*8fb009dcSAndroid Build Coastguard Worker xorl %ecx,%ecx 73*8fb009dcSAndroid Build Coastguard Worker movd (%edi),%mm4 74*8fb009dcSAndroid Build Coastguard Worker movd (%esi),%mm5 75*8fb009dcSAndroid Build Coastguard Worker movd (%ebp),%mm3 76*8fb009dcSAndroid Build Coastguard Worker pmuludq %mm4,%mm5 77*8fb009dcSAndroid Build Coastguard Worker movq %mm5,%mm2 78*8fb009dcSAndroid Build Coastguard Worker movq %mm5,%mm0 79*8fb009dcSAndroid Build Coastguard Worker pand %mm7,%mm0 80*8fb009dcSAndroid Build Coastguard Worker pmuludq 20(%esp),%mm5 81*8fb009dcSAndroid Build Coastguard Worker pmuludq %mm5,%mm3 82*8fb009dcSAndroid Build Coastguard Worker paddq %mm0,%mm3 83*8fb009dcSAndroid Build Coastguard Worker movd 4(%ebp),%mm1 84*8fb009dcSAndroid Build Coastguard Worker movd 4(%esi),%mm0 85*8fb009dcSAndroid Build Coastguard Worker psrlq $32,%mm2 86*8fb009dcSAndroid Build Coastguard Worker psrlq $32,%mm3 87*8fb009dcSAndroid Build Coastguard Worker incl %ecx 88*8fb009dcSAndroid Build Coastguard Worker.align 16 89*8fb009dcSAndroid Build Coastguard Worker.L0031st: 90*8fb009dcSAndroid Build Coastguard Worker pmuludq %mm4,%mm0 91*8fb009dcSAndroid Build Coastguard Worker pmuludq %mm5,%mm1 92*8fb009dcSAndroid Build Coastguard Worker paddq %mm0,%mm2 93*8fb009dcSAndroid Build Coastguard Worker paddq %mm1,%mm3 94*8fb009dcSAndroid Build Coastguard Worker movq %mm2,%mm0 95*8fb009dcSAndroid Build Coastguard Worker pand %mm7,%mm0 96*8fb009dcSAndroid Build Coastguard Worker movd 4(%ebp,%ecx,4),%mm1 97*8fb009dcSAndroid Build Coastguard Worker paddq %mm0,%mm3 98*8fb009dcSAndroid Build Coastguard Worker movd 4(%esi,%ecx,4),%mm0 99*8fb009dcSAndroid Build Coastguard Worker psrlq $32,%mm2 100*8fb009dcSAndroid Build Coastguard Worker movd %mm3,28(%esp,%ecx,4) 101*8fb009dcSAndroid Build Coastguard Worker psrlq $32,%mm3 102*8fb009dcSAndroid Build Coastguard Worker leal 1(%ecx),%ecx 103*8fb009dcSAndroid Build Coastguard Worker cmpl %ebx,%ecx 104*8fb009dcSAndroid Build Coastguard Worker jl .L0031st 105*8fb009dcSAndroid Build Coastguard Worker pmuludq %mm4,%mm0 106*8fb009dcSAndroid Build Coastguard Worker pmuludq %mm5,%mm1 107*8fb009dcSAndroid Build Coastguard Worker paddq %mm0,%mm2 108*8fb009dcSAndroid Build Coastguard Worker paddq %mm1,%mm3 109*8fb009dcSAndroid Build Coastguard Worker movq %mm2,%mm0 110*8fb009dcSAndroid Build Coastguard Worker pand %mm7,%mm0 111*8fb009dcSAndroid Build Coastguard Worker paddq %mm0,%mm3 112*8fb009dcSAndroid Build Coastguard Worker movd %mm3,28(%esp,%ecx,4) 113*8fb009dcSAndroid Build Coastguard Worker psrlq $32,%mm2 114*8fb009dcSAndroid Build Coastguard Worker psrlq $32,%mm3 115*8fb009dcSAndroid Build Coastguard Worker paddq %mm2,%mm3 116*8fb009dcSAndroid Build Coastguard Worker movq %mm3,32(%esp,%ebx,4) 117*8fb009dcSAndroid Build Coastguard Worker incl %edx 118*8fb009dcSAndroid Build Coastguard Worker.L004outer: 119*8fb009dcSAndroid Build Coastguard Worker xorl %ecx,%ecx 120*8fb009dcSAndroid Build Coastguard Worker movd (%edi,%edx,4),%mm4 121*8fb009dcSAndroid Build Coastguard Worker movd (%esi),%mm5 122*8fb009dcSAndroid Build Coastguard Worker movd 32(%esp),%mm6 123*8fb009dcSAndroid Build Coastguard Worker movd (%ebp),%mm3 124*8fb009dcSAndroid Build Coastguard Worker pmuludq %mm4,%mm5 125*8fb009dcSAndroid Build Coastguard Worker paddq %mm6,%mm5 126*8fb009dcSAndroid Build Coastguard Worker movq %mm5,%mm0 127*8fb009dcSAndroid Build Coastguard Worker movq %mm5,%mm2 128*8fb009dcSAndroid Build Coastguard Worker pand %mm7,%mm0 129*8fb009dcSAndroid Build Coastguard Worker pmuludq 20(%esp),%mm5 130*8fb009dcSAndroid Build Coastguard Worker pmuludq %mm5,%mm3 131*8fb009dcSAndroid Build Coastguard Worker paddq %mm0,%mm3 132*8fb009dcSAndroid Build Coastguard Worker movd 36(%esp),%mm6 133*8fb009dcSAndroid Build Coastguard Worker movd 4(%ebp),%mm1 134*8fb009dcSAndroid Build Coastguard Worker movd 4(%esi),%mm0 135*8fb009dcSAndroid Build Coastguard Worker psrlq $32,%mm2 136*8fb009dcSAndroid Build Coastguard Worker psrlq $32,%mm3 137*8fb009dcSAndroid Build Coastguard Worker paddq %mm6,%mm2 138*8fb009dcSAndroid Build Coastguard Worker incl %ecx 139*8fb009dcSAndroid Build Coastguard Worker decl %ebx 140*8fb009dcSAndroid Build Coastguard Worker.L005inner: 141*8fb009dcSAndroid Build Coastguard Worker pmuludq %mm4,%mm0 142*8fb009dcSAndroid Build Coastguard Worker pmuludq %mm5,%mm1 143*8fb009dcSAndroid Build Coastguard Worker paddq %mm0,%mm2 144*8fb009dcSAndroid Build Coastguard Worker paddq %mm1,%mm3 145*8fb009dcSAndroid Build Coastguard Worker movq %mm2,%mm0 146*8fb009dcSAndroid Build Coastguard Worker movd 36(%esp,%ecx,4),%mm6 147*8fb009dcSAndroid Build Coastguard Worker pand %mm7,%mm0 148*8fb009dcSAndroid Build Coastguard Worker movd 4(%ebp,%ecx,4),%mm1 149*8fb009dcSAndroid Build Coastguard Worker paddq %mm0,%mm3 150*8fb009dcSAndroid Build Coastguard Worker movd 4(%esi,%ecx,4),%mm0 151*8fb009dcSAndroid Build Coastguard Worker psrlq $32,%mm2 152*8fb009dcSAndroid Build Coastguard Worker movd %mm3,28(%esp,%ecx,4) 153*8fb009dcSAndroid Build Coastguard Worker psrlq $32,%mm3 154*8fb009dcSAndroid Build Coastguard Worker paddq %mm6,%mm2 155*8fb009dcSAndroid Build Coastguard Worker decl %ebx 156*8fb009dcSAndroid Build Coastguard Worker leal 1(%ecx),%ecx 157*8fb009dcSAndroid Build Coastguard Worker jnz .L005inner 158*8fb009dcSAndroid Build Coastguard Worker movl %ecx,%ebx 159*8fb009dcSAndroid Build Coastguard Worker pmuludq %mm4,%mm0 160*8fb009dcSAndroid Build Coastguard Worker pmuludq %mm5,%mm1 161*8fb009dcSAndroid Build Coastguard Worker paddq %mm0,%mm2 162*8fb009dcSAndroid Build Coastguard Worker paddq %mm1,%mm3 163*8fb009dcSAndroid Build Coastguard Worker movq %mm2,%mm0 164*8fb009dcSAndroid Build Coastguard Worker pand %mm7,%mm0 165*8fb009dcSAndroid Build Coastguard Worker paddq %mm0,%mm3 166*8fb009dcSAndroid Build Coastguard Worker movd %mm3,28(%esp,%ecx,4) 167*8fb009dcSAndroid Build Coastguard Worker psrlq $32,%mm2 168*8fb009dcSAndroid Build Coastguard Worker psrlq $32,%mm3 169*8fb009dcSAndroid Build Coastguard Worker movd 36(%esp,%ebx,4),%mm6 170*8fb009dcSAndroid Build Coastguard Worker paddq %mm2,%mm3 171*8fb009dcSAndroid Build Coastguard Worker paddq %mm6,%mm3 172*8fb009dcSAndroid Build Coastguard Worker movq %mm3,32(%esp,%ebx,4) 173*8fb009dcSAndroid Build Coastguard Worker leal 1(%edx),%edx 174*8fb009dcSAndroid Build Coastguard Worker cmpl %ebx,%edx 175*8fb009dcSAndroid Build Coastguard Worker jle .L004outer 176*8fb009dcSAndroid Build Coastguard Worker emms 177*8fb009dcSAndroid Build Coastguard Worker jmp .L006common_tail 178*8fb009dcSAndroid Build Coastguard Worker.align 16 179*8fb009dcSAndroid Build Coastguard Worker.L006common_tail: 180*8fb009dcSAndroid Build Coastguard Worker movl 16(%esp),%ebp 181*8fb009dcSAndroid Build Coastguard Worker movl 4(%esp),%edi 182*8fb009dcSAndroid Build Coastguard Worker leal 32(%esp),%esi 183*8fb009dcSAndroid Build Coastguard Worker movl (%esi),%eax 184*8fb009dcSAndroid Build Coastguard Worker movl %ebx,%ecx 185*8fb009dcSAndroid Build Coastguard Worker xorl %edx,%edx 186*8fb009dcSAndroid Build Coastguard Worker.align 16 187*8fb009dcSAndroid Build Coastguard Worker.L007sub: 188*8fb009dcSAndroid Build Coastguard Worker sbbl (%ebp,%edx,4),%eax 189*8fb009dcSAndroid Build Coastguard Worker movl %eax,(%edi,%edx,4) 190*8fb009dcSAndroid Build Coastguard Worker decl %ecx 191*8fb009dcSAndroid Build Coastguard Worker movl 4(%esi,%edx,4),%eax 192*8fb009dcSAndroid Build Coastguard Worker leal 1(%edx),%edx 193*8fb009dcSAndroid Build Coastguard Worker jge .L007sub 194*8fb009dcSAndroid Build Coastguard Worker sbbl $0,%eax 195*8fb009dcSAndroid Build Coastguard Worker movl $-1,%edx 196*8fb009dcSAndroid Build Coastguard Worker xorl %eax,%edx 197*8fb009dcSAndroid Build Coastguard Worker jmp .L008copy 198*8fb009dcSAndroid Build Coastguard Worker.align 16 199*8fb009dcSAndroid Build Coastguard Worker.L008copy: 200*8fb009dcSAndroid Build Coastguard Worker movl 32(%esp,%ebx,4),%esi 201*8fb009dcSAndroid Build Coastguard Worker movl (%edi,%ebx,4),%ebp 202*8fb009dcSAndroid Build Coastguard Worker movl %ecx,32(%esp,%ebx,4) 203*8fb009dcSAndroid Build Coastguard Worker andl %eax,%esi 204*8fb009dcSAndroid Build Coastguard Worker andl %edx,%ebp 205*8fb009dcSAndroid Build Coastguard Worker orl %esi,%ebp 206*8fb009dcSAndroid Build Coastguard Worker movl %ebp,(%edi,%ebx,4) 207*8fb009dcSAndroid Build Coastguard Worker decl %ebx 208*8fb009dcSAndroid Build Coastguard Worker jge .L008copy 209*8fb009dcSAndroid Build Coastguard Worker movl 24(%esp),%esp 210*8fb009dcSAndroid Build Coastguard Worker movl $1,%eax 211*8fb009dcSAndroid Build Coastguard Worker.L000just_leave: 212*8fb009dcSAndroid Build Coastguard Worker popl %edi 213*8fb009dcSAndroid Build Coastguard Worker popl %esi 214*8fb009dcSAndroid Build Coastguard Worker popl %ebx 215*8fb009dcSAndroid Build Coastguard Worker popl %ebp 216*8fb009dcSAndroid Build Coastguard Worker ret 217*8fb009dcSAndroid Build Coastguard Worker.size bn_mul_mont,.-.L_bn_mul_mont_begin 218*8fb009dcSAndroid Build Coastguard Worker.byte 77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105 219*8fb009dcSAndroid Build Coastguard Worker.byte 112,108,105,99,97,116,105,111,110,32,102,111,114,32,120,56 220*8fb009dcSAndroid Build Coastguard Worker.byte 54,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121 221*8fb009dcSAndroid Build Coastguard Worker.byte 32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46 222*8fb009dcSAndroid Build Coastguard Worker.byte 111,114,103,62,0 223*8fb009dcSAndroid Build Coastguard Worker#endif // !defined(OPENSSL_NO_ASM) && defined(OPENSSL_X86) && defined(__ELF__) 224