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__, win32 6%ifidn __OUTPUT_FORMAT__,obj 7section code use32 class=code align=64 8%elifidn __OUTPUT_FORMAT__,win32 9$@feat.00 equ 1 10section .text code align=64 11%else 12section .text code 13%endif 14%ifdef BORINGSSL_DISPATCH_TEST 15extern _BORINGSSL_function_hit 16%endif 17align 64 18L$_vpaes_consts: 19dd 218628480,235210255,168496130,67568393 20dd 252381056,17041926,33884169,51187212 21dd 252645135,252645135,252645135,252645135 22dd 1512730624,3266504856,1377990664,3401244816 23dd 830229760,1275146365,2969422977,3447763452 24dd 3411033600,2979783055,338359620,2782886510 25dd 4209124096,907596821,221174255,1006095553 26dd 191964160,3799684038,3164090317,1589111125 27dd 182528256,1777043520,2877432650,3265356744 28dd 1874708224,3503451415,3305285752,363511674 29dd 1606117888,3487855781,1093350906,2384367825 30dd 197121,67569157,134941193,202313229 31dd 67569157,134941193,202313229,197121 32dd 134941193,202313229,197121,67569157 33dd 202313229,197121,67569157,134941193 34dd 33619971,100992007,168364043,235736079 35dd 235736079,33619971,100992007,168364043 36dd 168364043,235736079,33619971,100992007 37dd 100992007,168364043,235736079,33619971 38dd 50462976,117835012,185207048,252579084 39dd 252314880,51251460,117574920,184942860 40dd 184682752,252054788,50987272,118359308 41dd 118099200,185467140,251790600,50727180 42dd 2946363062,528716217,1300004225,1881839624 43dd 1532713819,1532713819,1532713819,1532713819 44dd 3602276352,4288629033,3737020424,4153884961 45dd 1354558464,32357713,2958822624,3775749553 46dd 1201988352,132424512,1572796698,503232858 47dd 2213177600,1597421020,4103937655,675398315 48db 86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105 49db 111,110,32,65,69,83,32,102,111,114,32,120,56,54,47,83 50db 83,83,69,51,44,32,77,105,107,101,32,72,97,109,98,117 51db 114,103,32,40,83,116,97,110,102,111,114,100,32,85,110,105 52db 118,101,114,115,105,116,121,41,0 53align 64 54align 16 55__vpaes_preheat: 56 add ebp,DWORD [esp] 57 movdqa xmm7,[ebp-48] 58 movdqa xmm6,[ebp-16] 59 ret 60align 16 61__vpaes_encrypt_core: 62 mov ecx,16 63 mov eax,DWORD [240+edx] 64 movdqa xmm1,xmm6 65 movdqa xmm2,[ebp] 66 pandn xmm1,xmm0 67 pand xmm0,xmm6 68 movdqu xmm5,[edx] 69db 102,15,56,0,208 70 movdqa xmm0,[16+ebp] 71 pxor xmm2,xmm5 72 psrld xmm1,4 73 add edx,16 74db 102,15,56,0,193 75 lea ebx,[192+ebp] 76 pxor xmm0,xmm2 77 jmp NEAR L$000enc_entry 78align 16 79L$001enc_loop: 80 movdqa xmm4,[32+ebp] 81 movdqa xmm0,[48+ebp] 82db 102,15,56,0,226 83db 102,15,56,0,195 84 pxor xmm4,xmm5 85 movdqa xmm5,[64+ebp] 86 pxor xmm0,xmm4 87 movdqa xmm1,[ecx*1+ebx-64] 88db 102,15,56,0,234 89 movdqa xmm2,[80+ebp] 90 movdqa xmm4,[ecx*1+ebx] 91db 102,15,56,0,211 92 movdqa xmm3,xmm0 93 pxor xmm2,xmm5 94db 102,15,56,0,193 95 add edx,16 96 pxor xmm0,xmm2 97db 102,15,56,0,220 98 add ecx,16 99 pxor xmm3,xmm0 100db 102,15,56,0,193 101 and ecx,48 102 sub eax,1 103 pxor xmm0,xmm3 104L$000enc_entry: 105 movdqa xmm1,xmm6 106 movdqa xmm5,[ebp-32] 107 pandn xmm1,xmm0 108 psrld xmm1,4 109 pand xmm0,xmm6 110db 102,15,56,0,232 111 movdqa xmm3,xmm7 112 pxor xmm0,xmm1 113db 102,15,56,0,217 114 movdqa xmm4,xmm7 115 pxor xmm3,xmm5 116db 102,15,56,0,224 117 movdqa xmm2,xmm7 118 pxor xmm4,xmm5 119db 102,15,56,0,211 120 movdqa xmm3,xmm7 121 pxor xmm2,xmm0 122db 102,15,56,0,220 123 movdqu xmm5,[edx] 124 pxor xmm3,xmm1 125 jnz NEAR L$001enc_loop 126 movdqa xmm4,[96+ebp] 127 movdqa xmm0,[112+ebp] 128db 102,15,56,0,226 129 pxor xmm4,xmm5 130db 102,15,56,0,195 131 movdqa xmm1,[64+ecx*1+ebx] 132 pxor xmm0,xmm4 133db 102,15,56,0,193 134 ret 135align 16 136__vpaes_schedule_core: 137 add ebp,DWORD [esp] 138 movdqu xmm0,[esi] 139 movdqa xmm2,[320+ebp] 140 movdqa xmm3,xmm0 141 lea ebx,[ebp] 142 movdqa [4+esp],xmm2 143 call __vpaes_schedule_transform 144 movdqa xmm7,xmm0 145 test edi,edi 146 jnz NEAR L$002schedule_am_decrypting 147 movdqu [edx],xmm0 148 jmp NEAR L$003schedule_go 149L$002schedule_am_decrypting: 150 movdqa xmm1,[256+ecx*1+ebp] 151db 102,15,56,0,217 152 movdqu [edx],xmm3 153 xor ecx,48 154L$003schedule_go: 155 cmp eax,192 156 ja NEAR L$004schedule_256 157L$005schedule_128: 158 mov eax,10 159L$006loop_schedule_128: 160 call __vpaes_schedule_round 161 dec eax 162 jz NEAR L$007schedule_mangle_last 163 call __vpaes_schedule_mangle 164 jmp NEAR L$006loop_schedule_128 165align 16 166L$004schedule_256: 167 movdqu xmm0,[16+esi] 168 call __vpaes_schedule_transform 169 mov eax,7 170L$008loop_schedule_256: 171 call __vpaes_schedule_mangle 172 movdqa xmm6,xmm0 173 call __vpaes_schedule_round 174 dec eax 175 jz NEAR L$007schedule_mangle_last 176 call __vpaes_schedule_mangle 177 pshufd xmm0,xmm0,255 178 movdqa [20+esp],xmm7 179 movdqa xmm7,xmm6 180 call L$_vpaes_schedule_low_round 181 movdqa xmm7,[20+esp] 182 jmp NEAR L$008loop_schedule_256 183align 16 184L$007schedule_mangle_last: 185 lea ebx,[384+ebp] 186 test edi,edi 187 jnz NEAR L$009schedule_mangle_last_dec 188 movdqa xmm1,[256+ecx*1+ebp] 189db 102,15,56,0,193 190 lea ebx,[352+ebp] 191 add edx,32 192L$009schedule_mangle_last_dec: 193 add edx,-16 194 pxor xmm0,[336+ebp] 195 call __vpaes_schedule_transform 196 movdqu [edx],xmm0 197 pxor xmm0,xmm0 198 pxor xmm1,xmm1 199 pxor xmm2,xmm2 200 pxor xmm3,xmm3 201 pxor xmm4,xmm4 202 pxor xmm5,xmm5 203 pxor xmm6,xmm6 204 pxor xmm7,xmm7 205 ret 206align 16 207__vpaes_schedule_round: 208 movdqa xmm2,[8+esp] 209 pxor xmm1,xmm1 210db 102,15,58,15,202,15 211db 102,15,58,15,210,15 212 pxor xmm7,xmm1 213 pshufd xmm0,xmm0,255 214db 102,15,58,15,192,1 215 movdqa [8+esp],xmm2 216L$_vpaes_schedule_low_round: 217 movdqa xmm1,xmm7 218 pslldq xmm7,4 219 pxor xmm7,xmm1 220 movdqa xmm1,xmm7 221 pslldq xmm7,8 222 pxor xmm7,xmm1 223 pxor xmm7,[336+ebp] 224 movdqa xmm4,[ebp-16] 225 movdqa xmm5,[ebp-48] 226 movdqa xmm1,xmm4 227 pandn xmm1,xmm0 228 psrld xmm1,4 229 pand xmm0,xmm4 230 movdqa xmm2,[ebp-32] 231db 102,15,56,0,208 232 pxor xmm0,xmm1 233 movdqa xmm3,xmm5 234db 102,15,56,0,217 235 pxor xmm3,xmm2 236 movdqa xmm4,xmm5 237db 102,15,56,0,224 238 pxor xmm4,xmm2 239 movdqa xmm2,xmm5 240db 102,15,56,0,211 241 pxor xmm2,xmm0 242 movdqa xmm3,xmm5 243db 102,15,56,0,220 244 pxor xmm3,xmm1 245 movdqa xmm4,[32+ebp] 246db 102,15,56,0,226 247 movdqa xmm0,[48+ebp] 248db 102,15,56,0,195 249 pxor xmm0,xmm4 250 pxor xmm0,xmm7 251 movdqa xmm7,xmm0 252 ret 253align 16 254__vpaes_schedule_transform: 255 movdqa xmm2,[ebp-16] 256 movdqa xmm1,xmm2 257 pandn xmm1,xmm0 258 psrld xmm1,4 259 pand xmm0,xmm2 260 movdqa xmm2,[ebx] 261db 102,15,56,0,208 262 movdqa xmm0,[16+ebx] 263db 102,15,56,0,193 264 pxor xmm0,xmm2 265 ret 266align 16 267__vpaes_schedule_mangle: 268 movdqa xmm4,xmm0 269 movdqa xmm5,[128+ebp] 270 test edi,edi 271 jnz NEAR L$010schedule_mangle_dec 272 add edx,16 273 pxor xmm4,[336+ebp] 274db 102,15,56,0,229 275 movdqa xmm3,xmm4 276db 102,15,56,0,229 277 pxor xmm3,xmm4 278db 102,15,56,0,229 279 pxor xmm3,xmm4 280 jmp NEAR L$011schedule_mangle_both 281align 16 282L$010schedule_mangle_dec: 283 movdqa xmm2,[ebp-16] 284 lea esi,[ebp] 285 movdqa xmm1,xmm2 286 pandn xmm1,xmm4 287 psrld xmm1,4 288 pand xmm4,xmm2 289 movdqa xmm2,[esi] 290db 102,15,56,0,212 291 movdqa xmm3,[16+esi] 292db 102,15,56,0,217 293 pxor xmm3,xmm2 294db 102,15,56,0,221 295 movdqa xmm2,[32+esi] 296db 102,15,56,0,212 297 pxor xmm2,xmm3 298 movdqa xmm3,[48+esi] 299db 102,15,56,0,217 300 pxor xmm3,xmm2 301db 102,15,56,0,221 302 movdqa xmm2,[64+esi] 303db 102,15,56,0,212 304 pxor xmm2,xmm3 305 movdqa xmm3,[80+esi] 306db 102,15,56,0,217 307 pxor xmm3,xmm2 308db 102,15,56,0,221 309 movdqa xmm2,[96+esi] 310db 102,15,56,0,212 311 pxor xmm2,xmm3 312 movdqa xmm3,[112+esi] 313db 102,15,56,0,217 314 pxor xmm3,xmm2 315 add edx,-16 316L$011schedule_mangle_both: 317 movdqa xmm1,[256+ecx*1+ebp] 318db 102,15,56,0,217 319 add ecx,-16 320 and ecx,48 321 movdqu [edx],xmm3 322 ret 323global _vpaes_set_encrypt_key 324align 16 325_vpaes_set_encrypt_key: 326L$_vpaes_set_encrypt_key_begin: 327 push ebp 328 push ebx 329 push esi 330 push edi 331%ifdef BORINGSSL_DISPATCH_TEST 332 push ebx 333 push edx 334 call L$012pic 335L$012pic: 336 pop ebx 337 lea ebx,[(_BORINGSSL_function_hit+5-L$012pic)+ebx] 338 mov edx,1 339 mov BYTE [ebx],dl 340 pop edx 341 pop ebx 342%endif 343 mov esi,DWORD [20+esp] 344 lea ebx,[esp-56] 345 mov eax,DWORD [24+esp] 346 and ebx,-16 347 mov edx,DWORD [28+esp] 348 xchg ebx,esp 349 mov DWORD [48+esp],ebx 350 mov ebx,eax 351 shr ebx,5 352 add ebx,5 353 mov DWORD [240+edx],ebx 354 mov ecx,48 355 mov edi,0 356 lea ebp,[(L$_vpaes_consts+0x30-L$013pic_point)] 357 call __vpaes_schedule_core 358L$013pic_point: 359 mov esp,DWORD [48+esp] 360 xor eax,eax 361 pop edi 362 pop esi 363 pop ebx 364 pop ebp 365 ret 366global _vpaes_encrypt 367align 16 368_vpaes_encrypt: 369L$_vpaes_encrypt_begin: 370 push ebp 371 push ebx 372 push esi 373 push edi 374%ifdef BORINGSSL_DISPATCH_TEST 375 push ebx 376 push edx 377 call L$014pic 378L$014pic: 379 pop ebx 380 lea ebx,[(_BORINGSSL_function_hit+4-L$014pic)+ebx] 381 mov edx,1 382 mov BYTE [ebx],dl 383 pop edx 384 pop ebx 385%endif 386 lea ebp,[(L$_vpaes_consts+0x30-L$015pic_point)] 387 call __vpaes_preheat 388L$015pic_point: 389 mov esi,DWORD [20+esp] 390 lea ebx,[esp-56] 391 mov edi,DWORD [24+esp] 392 and ebx,-16 393 mov edx,DWORD [28+esp] 394 xchg ebx,esp 395 mov DWORD [48+esp],ebx 396 movdqu xmm0,[esi] 397 call __vpaes_encrypt_core 398 movdqu [edi],xmm0 399 mov esp,DWORD [48+esp] 400 pop edi 401 pop esi 402 pop ebx 403 pop ebp 404 ret 405%else 406; Work around https://bugzilla.nasm.us/show_bug.cgi?id=3392738 407ret 408%endif 409