1; This file is generated from a similarly-named Perl script in the BoringSSL 2; source tree. Do not edit by hand. 3 4%include "ring_core_generated/prefix_symbols_nasm.inc" 5%ifidn __OUTPUT_FORMAT__,obj 6section code use32 class=code align=64 7%elifidn __OUTPUT_FORMAT__,win32 8$@feat.00 equ 1 9section .text code align=64 10%else 11section .text code 12%endif 13;extern _OPENSSL_ia32cap_P 14global _bn_mul_mont 15align 16 16_bn_mul_mont: 17L$_bn_mul_mont_begin: 18 push ebp 19 push ebx 20 push esi 21 push edi 22 xor eax,eax 23 mov edi,DWORD [40+esp] 24 lea esi,[20+esp] 25 lea edx,[24+esp] 26 add edi,2 27 neg edi 28 lea ebp,[edi*4+esp-32] 29 neg edi 30 mov eax,ebp 31 sub eax,edx 32 and eax,2047 33 sub ebp,eax 34 xor edx,ebp 35 and edx,2048 36 xor edx,2048 37 sub ebp,edx 38 and ebp,-64 39 mov eax,esp 40 sub eax,ebp 41 and eax,-4096 42 mov edx,esp 43 lea esp,[eax*1+ebp] 44 mov eax,DWORD [esp] 45 cmp esp,ebp 46 ja NEAR L$000page_walk 47 jmp NEAR L$001page_walk_done 48align 16 49L$000page_walk: 50 lea esp,[esp-4096] 51 mov eax,DWORD [esp] 52 cmp esp,ebp 53 ja NEAR L$000page_walk 54L$001page_walk_done: 55 mov eax,DWORD [esi] 56 mov ebx,DWORD [4+esi] 57 mov ecx,DWORD [8+esi] 58 mov ebp,DWORD [12+esi] 59 mov esi,DWORD [16+esi] 60 mov esi,DWORD [esi] 61 mov DWORD [4+esp],eax 62 mov DWORD [8+esp],ebx 63 mov DWORD [12+esp],ecx 64 mov DWORD [16+esp],ebp 65 mov DWORD [20+esp],esi 66 lea ebx,[edi-3] 67 mov DWORD [24+esp],edx 68 lea eax,[_OPENSSL_ia32cap_P] 69 bt DWORD [eax],26 70 mov eax,-1 71 movd mm7,eax 72 mov esi,DWORD [8+esp] 73 mov edi,DWORD [12+esp] 74 mov ebp,DWORD [16+esp] 75 xor edx,edx 76 xor ecx,ecx 77 movd mm4,DWORD [edi] 78 movd mm5,DWORD [esi] 79 movd mm3,DWORD [ebp] 80 pmuludq mm5,mm4 81 movq mm2,mm5 82 movq mm0,mm5 83 pand mm0,mm7 84 pmuludq mm5,[20+esp] 85 pmuludq mm3,mm5 86 paddq mm3,mm0 87 movd mm1,DWORD [4+ebp] 88 movd mm0,DWORD [4+esi] 89 psrlq mm2,32 90 psrlq mm3,32 91 inc ecx 92align 16 93L$0021st: 94 pmuludq mm0,mm4 95 pmuludq mm1,mm5 96 paddq mm2,mm0 97 paddq mm3,mm1 98 movq mm0,mm2 99 pand mm0,mm7 100 movd mm1,DWORD [4+ecx*4+ebp] 101 paddq mm3,mm0 102 movd mm0,DWORD [4+ecx*4+esi] 103 psrlq mm2,32 104 movd DWORD [28+ecx*4+esp],mm3 105 psrlq mm3,32 106 lea ecx,[1+ecx] 107 cmp ecx,ebx 108 jl NEAR L$0021st 109 pmuludq mm0,mm4 110 pmuludq mm1,mm5 111 paddq mm2,mm0 112 paddq mm3,mm1 113 movq mm0,mm2 114 pand mm0,mm7 115 paddq mm3,mm0 116 movd DWORD [28+ecx*4+esp],mm3 117 psrlq mm2,32 118 psrlq mm3,32 119 paddq mm3,mm2 120 movq [32+ebx*4+esp],mm3 121 inc edx 122L$003outer: 123 xor ecx,ecx 124 movd mm4,DWORD [edx*4+edi] 125 movd mm5,DWORD [esi] 126 movd mm6,DWORD [32+esp] 127 movd mm3,DWORD [ebp] 128 pmuludq mm5,mm4 129 paddq mm5,mm6 130 movq mm0,mm5 131 movq mm2,mm5 132 pand mm0,mm7 133 pmuludq mm5,[20+esp] 134 pmuludq mm3,mm5 135 paddq mm3,mm0 136 movd mm6,DWORD [36+esp] 137 movd mm1,DWORD [4+ebp] 138 movd mm0,DWORD [4+esi] 139 psrlq mm2,32 140 psrlq mm3,32 141 paddq mm2,mm6 142 inc ecx 143 dec ebx 144L$004inner: 145 pmuludq mm0,mm4 146 pmuludq mm1,mm5 147 paddq mm2,mm0 148 paddq mm3,mm1 149 movq mm0,mm2 150 movd mm6,DWORD [36+ecx*4+esp] 151 pand mm0,mm7 152 movd mm1,DWORD [4+ecx*4+ebp] 153 paddq mm3,mm0 154 movd mm0,DWORD [4+ecx*4+esi] 155 psrlq mm2,32 156 movd DWORD [28+ecx*4+esp],mm3 157 psrlq mm3,32 158 paddq mm2,mm6 159 dec ebx 160 lea ecx,[1+ecx] 161 jnz NEAR L$004inner 162 mov ebx,ecx 163 pmuludq mm0,mm4 164 pmuludq mm1,mm5 165 paddq mm2,mm0 166 paddq mm3,mm1 167 movq mm0,mm2 168 pand mm0,mm7 169 paddq mm3,mm0 170 movd DWORD [28+ecx*4+esp],mm3 171 psrlq mm2,32 172 psrlq mm3,32 173 movd mm6,DWORD [36+ebx*4+esp] 174 paddq mm3,mm2 175 paddq mm3,mm6 176 movq [32+ebx*4+esp],mm3 177 lea edx,[1+edx] 178 cmp edx,ebx 179 jle NEAR L$003outer 180 emms 181align 16 182L$005common_tail: 183 mov ebp,DWORD [16+esp] 184 mov edi,DWORD [4+esp] 185 lea esi,[32+esp] 186 mov eax,DWORD [esi] 187 mov ecx,ebx 188 xor edx,edx 189align 16 190L$006sub: 191 sbb eax,DWORD [edx*4+ebp] 192 mov DWORD [edx*4+edi],eax 193 dec ecx 194 mov eax,DWORD [4+edx*4+esi] 195 lea edx,[1+edx] 196 jge NEAR L$006sub 197 sbb eax,0 198 mov edx,-1 199 xor edx,eax 200 jmp NEAR L$007copy 201align 16 202L$007copy: 203 mov esi,DWORD [32+ebx*4+esp] 204 mov ebp,DWORD [ebx*4+edi] 205 mov DWORD [32+ebx*4+esp],ecx 206 and esi,eax 207 and ebp,edx 208 or ebp,esi 209 mov DWORD [ebx*4+edi],ebp 210 dec ebx 211 jge NEAR L$007copy 212 mov esp,DWORD [24+esp] 213 mov eax,1 214 pop edi 215 pop esi 216 pop ebx 217 pop ebp 218 ret 219db 77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105 220db 112,108,105,99,97,116,105,111,110,32,102,111,114,32,120,56 221db 54,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121 222db 32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46 223db 111,114,103,62,0 224segment .bss 225common _OPENSSL_ia32cap_P 16 226