Changeset 99371 in vbox for trunk/src/libs/openssl-3.1.0/crypto/genasm-nasm/rsaz-avx2.S
- Timestamp:
- Apr 11, 2023 10:16:56 AM (20 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/libs/openssl-3.1.0/crypto/genasm-nasm/rsaz-avx2.S
r97373 r99371 6 6 7 7 8 global rsaz_1024_sqr_avx2 9 10 ALIGN 64 11 rsaz_1024_sqr_avx2: 12 mov QWORD[8+rsp],rdi ;WIN64 prologue 13 mov QWORD[16+rsp],rsi 14 mov rax,rsp 15 $L$SEH_begin_rsaz_1024_sqr_avx2: 16 mov rdi,rcx 17 mov rsi,rdx 18 mov rdx,r8 19 mov rcx,r9 20 mov r8,QWORD[40+rsp] 21 22 23 24 lea rax,[rsp] 25 26 push rbx 27 28 push rbp 29 30 push r12 31 32 push r13 33 34 push r14 35 36 push r15 37 38 vzeroupper 39 lea rsp,[((-168))+rsp] 40 vmovaps XMMWORD[(-216)+rax],xmm6 41 vmovaps XMMWORD[(-200)+rax],xmm7 42 vmovaps XMMWORD[(-184)+rax],xmm8 43 vmovaps XMMWORD[(-168)+rax],xmm9 44 vmovaps XMMWORD[(-152)+rax],xmm10 45 vmovaps XMMWORD[(-136)+rax],xmm11 46 vmovaps XMMWORD[(-120)+rax],xmm12 47 vmovaps XMMWORD[(-104)+rax],xmm13 48 vmovaps XMMWORD[(-88)+rax],xmm14 49 vmovaps XMMWORD[(-72)+rax],xmm15 50 $L$sqr_1024_body: 51 mov rbp,rax 52 53 mov r13,rdx 54 sub rsp,832 55 mov r15,r13 56 sub rdi,-128 57 sub rsi,-128 58 sub r13,-128 59 60 and r15,4095 61 add r15,32*10 62 shr r15,12 63 vpxor ymm9,ymm9,ymm9 64 jz NEAR $L$sqr_1024_no_n_copy 65 66 67 68 69 70 sub rsp,32*10 71 vmovdqu ymm0,YMMWORD[((0-128))+r13] 72 and rsp,-2048 73 vmovdqu ymm1,YMMWORD[((32-128))+r13] 74 vmovdqu ymm2,YMMWORD[((64-128))+r13] 75 vmovdqu ymm3,YMMWORD[((96-128))+r13] 76 vmovdqu ymm4,YMMWORD[((128-128))+r13] 77 vmovdqu ymm5,YMMWORD[((160-128))+r13] 78 vmovdqu ymm6,YMMWORD[((192-128))+r13] 79 vmovdqu ymm7,YMMWORD[((224-128))+r13] 80 vmovdqu ymm8,YMMWORD[((256-128))+r13] 81 lea r13,[((832+128))+rsp] 82 vmovdqu YMMWORD[(0-128)+r13],ymm0 83 vmovdqu YMMWORD[(32-128)+r13],ymm1 84 vmovdqu YMMWORD[(64-128)+r13],ymm2 85 vmovdqu YMMWORD[(96-128)+r13],ymm3 86 vmovdqu YMMWORD[(128-128)+r13],ymm4 87 vmovdqu YMMWORD[(160-128)+r13],ymm5 88 vmovdqu YMMWORD[(192-128)+r13],ymm6 89 vmovdqu YMMWORD[(224-128)+r13],ymm7 90 vmovdqu YMMWORD[(256-128)+r13],ymm8 91 vmovdqu YMMWORD[(288-128)+r13],ymm9 92 93 $L$sqr_1024_no_n_copy: 94 and rsp,-1024 95 96 vmovdqu ymm1,YMMWORD[((32-128))+rsi] 97 vmovdqu ymm2,YMMWORD[((64-128))+rsi] 98 vmovdqu ymm3,YMMWORD[((96-128))+rsi] 99 vmovdqu ymm4,YMMWORD[((128-128))+rsi] 100 vmovdqu ymm5,YMMWORD[((160-128))+rsi] 101 vmovdqu ymm6,YMMWORD[((192-128))+rsi] 102 vmovdqu ymm7,YMMWORD[((224-128))+rsi] 103 vmovdqu ymm8,YMMWORD[((256-128))+rsi] 104 105 lea rbx,[192+rsp] 106 vmovdqu ymm15,YMMWORD[$L$and_mask] 107 jmp NEAR $L$OOP_GRANDE_SQR_1024 108 109 ALIGN 32 110 $L$OOP_GRANDE_SQR_1024: 111 lea r9,[((576+128))+rsp] 112 lea r12,[448+rsp] 113 114 115 116 117 vpaddq ymm1,ymm1,ymm1 118 vpbroadcastq ymm10,QWORD[((0-128))+rsi] 119 vpaddq ymm2,ymm2,ymm2 120 vmovdqa YMMWORD[(0-128)+r9],ymm1 121 vpaddq ymm3,ymm3,ymm3 122 vmovdqa YMMWORD[(32-128)+r9],ymm2 123 vpaddq ymm4,ymm4,ymm4 124 vmovdqa YMMWORD[(64-128)+r9],ymm3 125 vpaddq ymm5,ymm5,ymm5 126 vmovdqa YMMWORD[(96-128)+r9],ymm4 127 vpaddq ymm6,ymm6,ymm6 128 vmovdqa YMMWORD[(128-128)+r9],ymm5 129 vpaddq ymm7,ymm7,ymm7 130 vmovdqa YMMWORD[(160-128)+r9],ymm6 131 vpaddq ymm8,ymm8,ymm8 132 vmovdqa YMMWORD[(192-128)+r9],ymm7 133 vpxor ymm9,ymm9,ymm9 134 vmovdqa YMMWORD[(224-128)+r9],ymm8 135 136 vpmuludq ymm0,ymm10,YMMWORD[((0-128))+rsi] 137 vpbroadcastq ymm11,QWORD[((32-128))+rsi] 138 vmovdqu YMMWORD[(288-192)+rbx],ymm9 139 vpmuludq ymm1,ymm1,ymm10 140 vmovdqu YMMWORD[(320-448)+r12],ymm9 141 vpmuludq ymm2,ymm2,ymm10 142 vmovdqu YMMWORD[(352-448)+r12],ymm9 143 vpmuludq ymm3,ymm3,ymm10 144 vmovdqu YMMWORD[(384-448)+r12],ymm9 145 vpmuludq ymm4,ymm4,ymm10 146 vmovdqu YMMWORD[(416-448)+r12],ymm9 147 vpmuludq ymm5,ymm5,ymm10 148 vmovdqu YMMWORD[(448-448)+r12],ymm9 149 vpmuludq ymm6,ymm6,ymm10 150 vmovdqu YMMWORD[(480-448)+r12],ymm9 151 vpmuludq ymm7,ymm7,ymm10 152 vmovdqu YMMWORD[(512-448)+r12],ymm9 153 vpmuludq ymm8,ymm8,ymm10 154 vpbroadcastq ymm10,QWORD[((64-128))+rsi] 155 vmovdqu YMMWORD[(544-448)+r12],ymm9 156 157 mov r15,rsi 158 mov r14d,4 159 jmp NEAR $L$sqr_entry_1024 160 ALIGN 32 161 $L$OOP_SQR_1024: 162 vpbroadcastq ymm11,QWORD[((32-128))+r15] 163 vpmuludq ymm0,ymm10,YMMWORD[((0-128))+rsi] 164 vpaddq ymm0,ymm0,YMMWORD[((0-192))+rbx] 165 vpmuludq ymm1,ymm10,YMMWORD[((0-128))+r9] 166 vpaddq ymm1,ymm1,YMMWORD[((32-192))+rbx] 167 vpmuludq ymm2,ymm10,YMMWORD[((32-128))+r9] 168 vpaddq ymm2,ymm2,YMMWORD[((64-192))+rbx] 169 vpmuludq ymm3,ymm10,YMMWORD[((64-128))+r9] 170 vpaddq ymm3,ymm3,YMMWORD[((96-192))+rbx] 171 vpmuludq ymm4,ymm10,YMMWORD[((96-128))+r9] 172 vpaddq ymm4,ymm4,YMMWORD[((128-192))+rbx] 173 vpmuludq ymm5,ymm10,YMMWORD[((128-128))+r9] 174 vpaddq ymm5,ymm5,YMMWORD[((160-192))+rbx] 175 vpmuludq ymm6,ymm10,YMMWORD[((160-128))+r9] 176 vpaddq ymm6,ymm6,YMMWORD[((192-192))+rbx] 177 vpmuludq ymm7,ymm10,YMMWORD[((192-128))+r9] 178 vpaddq ymm7,ymm7,YMMWORD[((224-192))+rbx] 179 vpmuludq ymm8,ymm10,YMMWORD[((224-128))+r9] 180 vpbroadcastq ymm10,QWORD[((64-128))+r15] 181 vpaddq ymm8,ymm8,YMMWORD[((256-192))+rbx] 182 $L$sqr_entry_1024: 183 vmovdqu YMMWORD[(0-192)+rbx],ymm0 184 vmovdqu YMMWORD[(32-192)+rbx],ymm1 185 186 vpmuludq ymm12,ymm11,YMMWORD[((32-128))+rsi] 187 vpaddq ymm2,ymm2,ymm12 188 vpmuludq ymm14,ymm11,YMMWORD[((32-128))+r9] 189 vpaddq ymm3,ymm3,ymm14 190 vpmuludq ymm13,ymm11,YMMWORD[((64-128))+r9] 191 vpaddq ymm4,ymm4,ymm13 192 vpmuludq ymm12,ymm11,YMMWORD[((96-128))+r9] 193 vpaddq ymm5,ymm5,ymm12 194 vpmuludq ymm14,ymm11,YMMWORD[((128-128))+r9] 195 vpaddq ymm6,ymm6,ymm14 196 vpmuludq ymm13,ymm11,YMMWORD[((160-128))+r9] 197 vpaddq ymm7,ymm7,ymm13 198 vpmuludq ymm12,ymm11,YMMWORD[((192-128))+r9] 199 vpaddq ymm8,ymm8,ymm12 200 vpmuludq ymm0,ymm11,YMMWORD[((224-128))+r9] 201 vpbroadcastq ymm11,QWORD[((96-128))+r15] 202 vpaddq ymm0,ymm0,YMMWORD[((288-192))+rbx] 203 204 vmovdqu YMMWORD[(64-192)+rbx],ymm2 205 vmovdqu YMMWORD[(96-192)+rbx],ymm3 206 207 vpmuludq ymm13,ymm10,YMMWORD[((64-128))+rsi] 208 vpaddq ymm4,ymm4,ymm13 209 vpmuludq ymm12,ymm10,YMMWORD[((64-128))+r9] 210 vpaddq ymm5,ymm5,ymm12 211 vpmuludq ymm14,ymm10,YMMWORD[((96-128))+r9] 212 vpaddq ymm6,ymm6,ymm14 213 vpmuludq ymm13,ymm10,YMMWORD[((128-128))+r9] 214 vpaddq ymm7,ymm7,ymm13 215 vpmuludq ymm12,ymm10,YMMWORD[((160-128))+r9] 216 vpaddq ymm8,ymm8,ymm12 217 vpmuludq ymm14,ymm10,YMMWORD[((192-128))+r9] 218 vpaddq ymm0,ymm0,ymm14 219 vpmuludq ymm1,ymm10,YMMWORD[((224-128))+r9] 220 vpbroadcastq ymm10,QWORD[((128-128))+r15] 221 vpaddq ymm1,ymm1,YMMWORD[((320-448))+r12] 222 223 vmovdqu YMMWORD[(128-192)+rbx],ymm4 224 vmovdqu YMMWORD[(160-192)+rbx],ymm5 225 226 vpmuludq ymm12,ymm11,YMMWORD[((96-128))+rsi] 227 vpaddq ymm6,ymm6,ymm12 228 vpmuludq ymm14,ymm11,YMMWORD[((96-128))+r9] 229 vpaddq ymm7,ymm7,ymm14 230 vpmuludq ymm13,ymm11,YMMWORD[((128-128))+r9] 231 vpaddq ymm8,ymm8,ymm13 232 vpmuludq ymm12,ymm11,YMMWORD[((160-128))+r9] 233 vpaddq ymm0,ymm0,ymm12 234 vpmuludq ymm14,ymm11,YMMWORD[((192-128))+r9] 235 vpaddq ymm1,ymm1,ymm14 236 vpmuludq ymm2,ymm11,YMMWORD[((224-128))+r9] 237 vpbroadcastq ymm11,QWORD[((160-128))+r15] 238 vpaddq ymm2,ymm2,YMMWORD[((352-448))+r12] 239 240 vmovdqu YMMWORD[(192-192)+rbx],ymm6 241 vmovdqu YMMWORD[(224-192)+rbx],ymm7 242 243 vpmuludq ymm12,ymm10,YMMWORD[((128-128))+rsi] 244 vpaddq ymm8,ymm8,ymm12 245 vpmuludq ymm14,ymm10,YMMWORD[((128-128))+r9] 246 vpaddq ymm0,ymm0,ymm14 247 vpmuludq ymm13,ymm10,YMMWORD[((160-128))+r9] 248 vpaddq ymm1,ymm1,ymm13 249 vpmuludq ymm12,ymm10,YMMWORD[((192-128))+r9] 250 vpaddq ymm2,ymm2,ymm12 251 vpmuludq ymm3,ymm10,YMMWORD[((224-128))+r9] 252 vpbroadcastq ymm10,QWORD[((192-128))+r15] 253 vpaddq ymm3,ymm3,YMMWORD[((384-448))+r12] 254 255 vmovdqu YMMWORD[(256-192)+rbx],ymm8 256 vmovdqu YMMWORD[(288-192)+rbx],ymm0 257 lea rbx,[8+rbx] 258 259 vpmuludq ymm13,ymm11,YMMWORD[((160-128))+rsi] 260 vpaddq ymm1,ymm1,ymm13 261 vpmuludq ymm12,ymm11,YMMWORD[((160-128))+r9] 262 vpaddq ymm2,ymm2,ymm12 263 vpmuludq ymm14,ymm11,YMMWORD[((192-128))+r9] 264 vpaddq ymm3,ymm3,ymm14 265 vpmuludq ymm4,ymm11,YMMWORD[((224-128))+r9] 266 vpbroadcastq ymm11,QWORD[((224-128))+r15] 267 vpaddq ymm4,ymm4,YMMWORD[((416-448))+r12] 268 269 vmovdqu YMMWORD[(320-448)+r12],ymm1 270 vmovdqu YMMWORD[(352-448)+r12],ymm2 271 272 vpmuludq ymm12,ymm10,YMMWORD[((192-128))+rsi] 273 vpaddq ymm3,ymm3,ymm12 274 vpmuludq ymm14,ymm10,YMMWORD[((192-128))+r9] 275 vpbroadcastq ymm0,QWORD[((256-128))+r15] 276 vpaddq ymm4,ymm4,ymm14 277 vpmuludq ymm5,ymm10,YMMWORD[((224-128))+r9] 278 vpbroadcastq ymm10,QWORD[((0+8-128))+r15] 279 vpaddq ymm5,ymm5,YMMWORD[((448-448))+r12] 280 281 vmovdqu YMMWORD[(384-448)+r12],ymm3 282 vmovdqu YMMWORD[(416-448)+r12],ymm4 283 lea r15,[8+r15] 284 285 vpmuludq ymm12,ymm11,YMMWORD[((224-128))+rsi] 286 vpaddq ymm5,ymm5,ymm12 287 vpmuludq ymm6,ymm11,YMMWORD[((224-128))+r9] 288 vpaddq ymm6,ymm6,YMMWORD[((480-448))+r12] 289 290 vpmuludq ymm7,ymm0,YMMWORD[((256-128))+rsi] 291 vmovdqu YMMWORD[(448-448)+r12],ymm5 292 vpaddq ymm7,ymm7,YMMWORD[((512-448))+r12] 293 vmovdqu YMMWORD[(480-448)+r12],ymm6 294 vmovdqu YMMWORD[(512-448)+r12],ymm7 295 lea r12,[8+r12] 296 297 dec r14d 298 jnz NEAR $L$OOP_SQR_1024 299 300 vmovdqu ymm8,YMMWORD[256+rsp] 301 vmovdqu ymm1,YMMWORD[288+rsp] 302 vmovdqu ymm2,YMMWORD[320+rsp] 303 lea rbx,[192+rsp] 304 305 vpsrlq ymm14,ymm8,29 306 vpand ymm8,ymm8,ymm15 307 vpsrlq ymm11,ymm1,29 308 vpand ymm1,ymm1,ymm15 309 310 vpermq ymm14,ymm14,0x93 311 vpxor ymm9,ymm9,ymm9 312 vpermq ymm11,ymm11,0x93 313 314 vpblendd ymm10,ymm14,ymm9,3 315 vpblendd ymm14,ymm11,ymm14,3 316 vpaddq ymm8,ymm8,ymm10 317 vpblendd ymm11,ymm9,ymm11,3 318 vpaddq ymm1,ymm1,ymm14 319 vpaddq ymm2,ymm2,ymm11 320 vmovdqu YMMWORD[(288-192)+rbx],ymm1 321 vmovdqu YMMWORD[(320-192)+rbx],ymm2 322 323 mov rax,QWORD[rsp] 324 mov r10,QWORD[8+rsp] 325 mov r11,QWORD[16+rsp] 326 mov r12,QWORD[24+rsp] 327 vmovdqu ymm1,YMMWORD[32+rsp] 328 vmovdqu ymm2,YMMWORD[((64-192))+rbx] 329 vmovdqu ymm3,YMMWORD[((96-192))+rbx] 330 vmovdqu ymm4,YMMWORD[((128-192))+rbx] 331 vmovdqu ymm5,YMMWORD[((160-192))+rbx] 332 vmovdqu ymm6,YMMWORD[((192-192))+rbx] 333 vmovdqu ymm7,YMMWORD[((224-192))+rbx] 334 335 mov r9,rax 336 imul eax,ecx 337 and eax,0x1fffffff 338 vmovd xmm12,eax 339 340 mov rdx,rax 341 imul rax,QWORD[((-128))+r13] 342 vpbroadcastq ymm12,xmm12 343 add r9,rax 344 mov rax,rdx 345 imul rax,QWORD[((8-128))+r13] 346 shr r9,29 347 add r10,rax 348 mov rax,rdx 349 imul rax,QWORD[((16-128))+r13] 350 add r10,r9 351 add r11,rax 352 imul rdx,QWORD[((24-128))+r13] 353 add r12,rdx 354 355 mov rax,r10 356 imul eax,ecx 357 and eax,0x1fffffff 358 359 mov r14d,9 360 jmp NEAR $L$OOP_REDUCE_1024 361 362 ALIGN 32 363 $L$OOP_REDUCE_1024: 364 vmovd xmm13,eax 365 vpbroadcastq ymm13,xmm13 366 367 vpmuludq ymm10,ymm12,YMMWORD[((32-128))+r13] 368 mov rdx,rax 369 imul rax,QWORD[((-128))+r13] 370 vpaddq ymm1,ymm1,ymm10 371 add r10,rax 372 vpmuludq ymm14,ymm12,YMMWORD[((64-128))+r13] 373 mov rax,rdx 374 imul rax,QWORD[((8-128))+r13] 375 vpaddq ymm2,ymm2,ymm14 376 vpmuludq ymm11,ymm12,YMMWORD[((96-128))+r13] 377 DB 0x67 378 add r11,rax 379 DB 0x67 380 mov rax,rdx 381 imul rax,QWORD[((16-128))+r13] 382 shr r10,29 383 vpaddq ymm3,ymm3,ymm11 384 vpmuludq ymm10,ymm12,YMMWORD[((128-128))+r13] 385 add r12,rax 386 add r11,r10 387 vpaddq ymm4,ymm4,ymm10 388 vpmuludq ymm14,ymm12,YMMWORD[((160-128))+r13] 389 mov rax,r11 390 imul eax,ecx 391 vpaddq ymm5,ymm5,ymm14 392 vpmuludq ymm11,ymm12,YMMWORD[((192-128))+r13] 393 and eax,0x1fffffff 394 vpaddq ymm6,ymm6,ymm11 395 vpmuludq ymm10,ymm12,YMMWORD[((224-128))+r13] 396 vpaddq ymm7,ymm7,ymm10 397 vpmuludq ymm14,ymm12,YMMWORD[((256-128))+r13] 398 vmovd xmm12,eax 399 400 vpaddq ymm8,ymm8,ymm14 401 402 vpbroadcastq ymm12,xmm12 403 404 vpmuludq ymm11,ymm13,YMMWORD[((32-8-128))+r13] 405 vmovdqu ymm14,YMMWORD[((96-8-128))+r13] 406 mov rdx,rax 407 imul rax,QWORD[((-128))+r13] 408 vpaddq ymm1,ymm1,ymm11 409 vpmuludq ymm10,ymm13,YMMWORD[((64-8-128))+r13] 410 vmovdqu ymm11,YMMWORD[((128-8-128))+r13] 411 add r11,rax 412 mov rax,rdx 413 imul rax,QWORD[((8-128))+r13] 414 vpaddq ymm2,ymm2,ymm10 415 add rax,r12 416 shr r11,29 417 vpmuludq ymm14,ymm14,ymm13 418 vmovdqu ymm10,YMMWORD[((160-8-128))+r13] 419 add rax,r11 420 vpaddq ymm3,ymm3,ymm14 421 vpmuludq ymm11,ymm11,ymm13 422 vmovdqu ymm14,YMMWORD[((192-8-128))+r13] 423 DB 0x67 424 mov r12,rax 425 imul eax,ecx 426 vpaddq ymm4,ymm4,ymm11 427 vpmuludq ymm10,ymm10,ymm13 428 DB 0xc4,0x41,0x7e,0x6f,0x9d,0x58,0x00,0x00,0x00 429 and eax,0x1fffffff 430 vpaddq ymm5,ymm5,ymm10 431 vpmuludq ymm14,ymm14,ymm13 432 vmovdqu ymm10,YMMWORD[((256-8-128))+r13] 433 vpaddq ymm6,ymm6,ymm14 434 vpmuludq ymm11,ymm11,ymm13 435 vmovdqu ymm9,YMMWORD[((288-8-128))+r13] 436 vmovd xmm0,eax 437 imul rax,QWORD[((-128))+r13] 438 vpaddq ymm7,ymm7,ymm11 439 vpmuludq ymm10,ymm10,ymm13 440 vmovdqu ymm14,YMMWORD[((32-16-128))+r13] 441 vpbroadcastq ymm0,xmm0 442 vpaddq ymm8,ymm8,ymm10 443 vpmuludq ymm9,ymm9,ymm13 444 vmovdqu ymm11,YMMWORD[((64-16-128))+r13] 445 add r12,rax 446 447 vmovdqu ymm13,YMMWORD[((32-24-128))+r13] 448 vpmuludq ymm14,ymm14,ymm12 449 vmovdqu ymm10,YMMWORD[((96-16-128))+r13] 450 vpaddq ymm1,ymm1,ymm14 451 vpmuludq ymm13,ymm13,ymm0 452 vpmuludq ymm11,ymm11,ymm12 453 DB 0xc4,0x41,0x7e,0x6f,0xb5,0xf0,0xff,0xff,0xff 454 vpaddq ymm13,ymm13,ymm1 455 vpaddq ymm2,ymm2,ymm11 456 vpmuludq ymm10,ymm10,ymm12 457 vmovdqu ymm11,YMMWORD[((160-16-128))+r13] 458 DB 0x67 459 vmovq rax,xmm13 460 vmovdqu YMMWORD[rsp],ymm13 461 vpaddq ymm3,ymm3,ymm10 462 vpmuludq ymm14,ymm14,ymm12 463 vmovdqu ymm10,YMMWORD[((192-16-128))+r13] 464 vpaddq ymm4,ymm4,ymm14 465 vpmuludq ymm11,ymm11,ymm12 466 vmovdqu ymm14,YMMWORD[((224-16-128))+r13] 467 vpaddq ymm5,ymm5,ymm11 468 vpmuludq ymm10,ymm10,ymm12 469 vmovdqu ymm11,YMMWORD[((256-16-128))+r13] 470 vpaddq ymm6,ymm6,ymm10 471 vpmuludq ymm14,ymm14,ymm12 472 shr r12,29 473 vmovdqu ymm10,YMMWORD[((288-16-128))+r13] 474 add rax,r12 475 vpaddq ymm7,ymm7,ymm14 476 vpmuludq ymm11,ymm11,ymm12 477 478 mov r9,rax 479 imul eax,ecx 480 vpaddq ymm8,ymm8,ymm11 481 vpmuludq ymm10,ymm10,ymm12 482 and eax,0x1fffffff 483 vmovd xmm12,eax 484 vmovdqu ymm11,YMMWORD[((96-24-128))+r13] 485 DB 0x67 486 vpaddq ymm9,ymm9,ymm10 487 vpbroadcastq ymm12,xmm12 488 489 vpmuludq ymm14,ymm0,YMMWORD[((64-24-128))+r13] 490 vmovdqu ymm10,YMMWORD[((128-24-128))+r13] 491 mov rdx,rax 492 imul rax,QWORD[((-128))+r13] 493 mov r10,QWORD[8+rsp] 494 vpaddq ymm1,ymm2,ymm14 495 vpmuludq ymm11,ymm11,ymm0 496 vmovdqu ymm14,YMMWORD[((160-24-128))+r13] 497 add r9,rax 498 mov rax,rdx 499 imul rax,QWORD[((8-128))+r13] 500 DB 0x67 501 shr r9,29 502 mov r11,QWORD[16+rsp] 503 vpaddq ymm2,ymm3,ymm11 504 vpmuludq ymm10,ymm10,ymm0 505 vmovdqu ymm11,YMMWORD[((192-24-128))+r13] 506 add r10,rax 507 mov rax,rdx 508 imul rax,QWORD[((16-128))+r13] 509 vpaddq ymm3,ymm4,ymm10 510 vpmuludq ymm14,ymm14,ymm0 511 vmovdqu ymm10,YMMWORD[((224-24-128))+r13] 512 imul rdx,QWORD[((24-128))+r13] 513 add r11,rax 514 lea rax,[r10*1+r9] 515 vpaddq ymm4,ymm5,ymm14 516 vpmuludq ymm11,ymm11,ymm0 517 vmovdqu ymm14,YMMWORD[((256-24-128))+r13] 518 mov r10,rax 519 imul eax,ecx 520 vpmuludq ymm10,ymm10,ymm0 521 vpaddq ymm5,ymm6,ymm11 522 vmovdqu ymm11,YMMWORD[((288-24-128))+r13] 523 and eax,0x1fffffff 524 vpaddq ymm6,ymm7,ymm10 525 vpmuludq ymm14,ymm14,ymm0 526 add rdx,QWORD[24+rsp] 527 vpaddq ymm7,ymm8,ymm14 528 vpmuludq ymm11,ymm11,ymm0 529 vpaddq ymm8,ymm9,ymm11 530 vmovq xmm9,r12 531 mov r12,rdx 532 533 dec r14d 534 jnz NEAR $L$OOP_REDUCE_1024 535 lea r12,[448+rsp] 536 vpaddq ymm0,ymm13,ymm9 537 vpxor ymm9,ymm9,ymm9 538 539 vpaddq ymm0,ymm0,YMMWORD[((288-192))+rbx] 540 vpaddq ymm1,ymm1,YMMWORD[((320-448))+r12] 541 vpaddq ymm2,ymm2,YMMWORD[((352-448))+r12] 542 vpaddq ymm3,ymm3,YMMWORD[((384-448))+r12] 543 vpaddq ymm4,ymm4,YMMWORD[((416-448))+r12] 544 vpaddq ymm5,ymm5,YMMWORD[((448-448))+r12] 545 vpaddq ymm6,ymm6,YMMWORD[((480-448))+r12] 546 vpaddq ymm7,ymm7,YMMWORD[((512-448))+r12] 547 vpaddq ymm8,ymm8,YMMWORD[((544-448))+r12] 548 549 vpsrlq ymm14,ymm0,29 550 vpand ymm0,ymm0,ymm15 551 vpsrlq ymm11,ymm1,29 552 vpand ymm1,ymm1,ymm15 553 vpsrlq ymm12,ymm2,29 554 vpermq ymm14,ymm14,0x93 555 vpand ymm2,ymm2,ymm15 556 vpsrlq ymm13,ymm3,29 557 vpermq ymm11,ymm11,0x93 558 vpand ymm3,ymm3,ymm15 559 vpermq ymm12,ymm12,0x93 560 561 vpblendd ymm10,ymm14,ymm9,3 562 vpermq ymm13,ymm13,0x93 563 vpblendd ymm14,ymm11,ymm14,3 564 vpaddq ymm0,ymm0,ymm10 565 vpblendd ymm11,ymm12,ymm11,3 566 vpaddq ymm1,ymm1,ymm14 567 vpblendd ymm12,ymm13,ymm12,3 568 vpaddq ymm2,ymm2,ymm11 569 vpblendd ymm13,ymm9,ymm13,3 570 vpaddq ymm3,ymm3,ymm12 571 vpaddq ymm4,ymm4,ymm13 572 573 vpsrlq ymm14,ymm0,29 574 vpand ymm0,ymm0,ymm15 575 vpsrlq ymm11,ymm1,29 576 vpand ymm1,ymm1,ymm15 577 vpsrlq ymm12,ymm2,29 578 vpermq ymm14,ymm14,0x93 579 vpand ymm2,ymm2,ymm15 580 vpsrlq ymm13,ymm3,29 581 vpermq ymm11,ymm11,0x93 582 vpand ymm3,ymm3,ymm15 583 vpermq ymm12,ymm12,0x93 584 585 vpblendd ymm10,ymm14,ymm9,3 586 vpermq ymm13,ymm13,0x93 587 vpblendd ymm14,ymm11,ymm14,3 588 vpaddq ymm0,ymm0,ymm10 589 vpblendd ymm11,ymm12,ymm11,3 590 vpaddq ymm1,ymm1,ymm14 591 vmovdqu YMMWORD[(0-128)+rdi],ymm0 592 vpblendd ymm12,ymm13,ymm12,3 593 vpaddq ymm2,ymm2,ymm11 594 vmovdqu YMMWORD[(32-128)+rdi],ymm1 595 vpblendd ymm13,ymm9,ymm13,3 596 vpaddq ymm3,ymm3,ymm12 597 vmovdqu YMMWORD[(64-128)+rdi],ymm2 598 vpaddq ymm4,ymm4,ymm13 599 vmovdqu YMMWORD[(96-128)+rdi],ymm3 600 vpsrlq ymm14,ymm4,29 601 vpand ymm4,ymm4,ymm15 602 vpsrlq ymm11,ymm5,29 603 vpand ymm5,ymm5,ymm15 604 vpsrlq ymm12,ymm6,29 605 vpermq ymm14,ymm14,0x93 606 vpand ymm6,ymm6,ymm15 607 vpsrlq ymm13,ymm7,29 608 vpermq ymm11,ymm11,0x93 609 vpand ymm7,ymm7,ymm15 610 vpsrlq ymm0,ymm8,29 611 vpermq ymm12,ymm12,0x93 612 vpand ymm8,ymm8,ymm15 613 vpermq ymm13,ymm13,0x93 614 615 vpblendd ymm10,ymm14,ymm9,3 616 vpermq ymm0,ymm0,0x93 617 vpblendd ymm14,ymm11,ymm14,3 618 vpaddq ymm4,ymm4,ymm10 619 vpblendd ymm11,ymm12,ymm11,3 620 vpaddq ymm5,ymm5,ymm14 621 vpblendd ymm12,ymm13,ymm12,3 622 vpaddq ymm6,ymm6,ymm11 623 vpblendd ymm13,ymm0,ymm13,3 624 vpaddq ymm7,ymm7,ymm12 625 vpaddq ymm8,ymm8,ymm13 626 627 vpsrlq ymm14,ymm4,29 628 vpand ymm4,ymm4,ymm15 629 vpsrlq ymm11,ymm5,29 630 vpand ymm5,ymm5,ymm15 631 vpsrlq ymm12,ymm6,29 632 vpermq ymm14,ymm14,0x93 633 vpand ymm6,ymm6,ymm15 634 vpsrlq ymm13,ymm7,29 635 vpermq ymm11,ymm11,0x93 636 vpand ymm7,ymm7,ymm15 637 vpsrlq ymm0,ymm8,29 638 vpermq ymm12,ymm12,0x93 639 vpand ymm8,ymm8,ymm15 640 vpermq ymm13,ymm13,0x93 641 642 vpblendd ymm10,ymm14,ymm9,3 643 vpermq ymm0,ymm0,0x93 644 vpblendd ymm14,ymm11,ymm14,3 645 vpaddq ymm4,ymm4,ymm10 646 vpblendd ymm11,ymm12,ymm11,3 647 vpaddq ymm5,ymm5,ymm14 648 vmovdqu YMMWORD[(128-128)+rdi],ymm4 649 vpblendd ymm12,ymm13,ymm12,3 650 vpaddq ymm6,ymm6,ymm11 651 vmovdqu YMMWORD[(160-128)+rdi],ymm5 652 vpblendd ymm13,ymm0,ymm13,3 653 vpaddq ymm7,ymm7,ymm12 654 vmovdqu YMMWORD[(192-128)+rdi],ymm6 655 vpaddq ymm8,ymm8,ymm13 656 vmovdqu YMMWORD[(224-128)+rdi],ymm7 657 vmovdqu YMMWORD[(256-128)+rdi],ymm8 658 659 mov rsi,rdi 660 dec r8d 661 jne NEAR $L$OOP_GRANDE_SQR_1024 662 663 vzeroall 664 mov rax,rbp 665 666 $L$sqr_1024_in_tail: 667 movaps xmm6,XMMWORD[((-216))+rax] 668 movaps xmm7,XMMWORD[((-200))+rax] 669 movaps xmm8,XMMWORD[((-184))+rax] 670 movaps xmm9,XMMWORD[((-168))+rax] 671 movaps xmm10,XMMWORD[((-152))+rax] 672 movaps xmm11,XMMWORD[((-136))+rax] 673 movaps xmm12,XMMWORD[((-120))+rax] 674 movaps xmm13,XMMWORD[((-104))+rax] 675 movaps xmm14,XMMWORD[((-88))+rax] 676 movaps xmm15,XMMWORD[((-72))+rax] 677 mov r15,QWORD[((-48))+rax] 678 679 mov r14,QWORD[((-40))+rax] 680 681 mov r13,QWORD[((-32))+rax] 682 683 mov r12,QWORD[((-24))+rax] 684 685 mov rbp,QWORD[((-16))+rax] 686 687 mov rbx,QWORD[((-8))+rax] 688 689 lea rsp,[rax] 690 691 $L$sqr_1024_epilogue: 692 mov rdi,QWORD[8+rsp] ;WIN64 epilogue 693 mov rsi,QWORD[16+rsp] 694 DB 0F3h,0C3h ;repret 695 696 $L$SEH_end_rsaz_1024_sqr_avx2: 697 global rsaz_1024_mul_avx2 698 699 ALIGN 64 700 rsaz_1024_mul_avx2: 701 mov QWORD[8+rsp],rdi ;WIN64 prologue 702 mov QWORD[16+rsp],rsi 703 mov rax,rsp 704 $L$SEH_begin_rsaz_1024_mul_avx2: 705 mov rdi,rcx 706 mov rsi,rdx 707 mov rdx,r8 708 mov rcx,r9 709 mov r8,QWORD[40+rsp] 710 711 712 713 lea rax,[rsp] 714 715 push rbx 716 717 push rbp 718 719 push r12 720 721 push r13 722 723 push r14 724 725 push r15 726 727 vzeroupper 728 lea rsp,[((-168))+rsp] 729 vmovaps XMMWORD[(-216)+rax],xmm6 730 vmovaps XMMWORD[(-200)+rax],xmm7 731 vmovaps XMMWORD[(-184)+rax],xmm8 732 vmovaps XMMWORD[(-168)+rax],xmm9 733 vmovaps XMMWORD[(-152)+rax],xmm10 734 vmovaps XMMWORD[(-136)+rax],xmm11 735 vmovaps XMMWORD[(-120)+rax],xmm12 736 vmovaps XMMWORD[(-104)+rax],xmm13 737 vmovaps XMMWORD[(-88)+rax],xmm14 738 vmovaps XMMWORD[(-72)+rax],xmm15 739 $L$mul_1024_body: 740 mov rbp,rax 741 742 vzeroall 743 mov r13,rdx 744 sub rsp,64 745 746 747 748 749 750 751 DB 0x67,0x67 752 mov r15,rsi 753 and r15,4095 754 add r15,32*10 755 shr r15,12 756 mov r15,rsi 757 cmovnz rsi,r13 758 cmovnz r13,r15 759 760 mov r15,rcx 761 sub rsi,-128 762 sub rcx,-128 763 sub rdi,-128 764 765 and r15,4095 766 add r15,32*10 767 DB 0x67,0x67 768 shr r15,12 769 jz NEAR $L$mul_1024_no_n_copy 770 771 772 773 774 775 sub rsp,32*10 776 vmovdqu ymm0,YMMWORD[((0-128))+rcx] 777 and rsp,-512 778 vmovdqu ymm1,YMMWORD[((32-128))+rcx] 779 vmovdqu ymm2,YMMWORD[((64-128))+rcx] 780 vmovdqu ymm3,YMMWORD[((96-128))+rcx] 781 vmovdqu ymm4,YMMWORD[((128-128))+rcx] 782 vmovdqu ymm5,YMMWORD[((160-128))+rcx] 783 vmovdqu ymm6,YMMWORD[((192-128))+rcx] 784 vmovdqu ymm7,YMMWORD[((224-128))+rcx] 785 vmovdqu ymm8,YMMWORD[((256-128))+rcx] 786 lea rcx,[((64+128))+rsp] 787 vmovdqu YMMWORD[(0-128)+rcx],ymm0 788 vpxor ymm0,ymm0,ymm0 789 vmovdqu YMMWORD[(32-128)+rcx],ymm1 790 vpxor ymm1,ymm1,ymm1 791 vmovdqu YMMWORD[(64-128)+rcx],ymm2 792 vpxor ymm2,ymm2,ymm2 793 vmovdqu YMMWORD[(96-128)+rcx],ymm3 794 vpxor ymm3,ymm3,ymm3 795 vmovdqu YMMWORD[(128-128)+rcx],ymm4 796 vpxor ymm4,ymm4,ymm4 797 vmovdqu YMMWORD[(160-128)+rcx],ymm5 798 vpxor ymm5,ymm5,ymm5 799 vmovdqu YMMWORD[(192-128)+rcx],ymm6 800 vpxor ymm6,ymm6,ymm6 801 vmovdqu YMMWORD[(224-128)+rcx],ymm7 802 vpxor ymm7,ymm7,ymm7 803 vmovdqu YMMWORD[(256-128)+rcx],ymm8 804 vmovdqa ymm8,ymm0 805 vmovdqu YMMWORD[(288-128)+rcx],ymm9 806 $L$mul_1024_no_n_copy: 807 and rsp,-64 808 809 mov rbx,QWORD[r13] 810 vpbroadcastq ymm10,QWORD[r13] 811 vmovdqu YMMWORD[rsp],ymm0 812 xor r9,r9 813 DB 0x67 814 xor r10,r10 815 xor r11,r11 816 xor r12,r12 817 818 vmovdqu ymm15,YMMWORD[$L$and_mask] 819 mov r14d,9 820 vmovdqu YMMWORD[(288-128)+rdi],ymm9 821 jmp NEAR $L$oop_mul_1024 822 823 ALIGN 32 824 $L$oop_mul_1024: 825 vpsrlq ymm9,ymm3,29 826 mov rax,rbx 827 imul rax,QWORD[((-128))+rsi] 828 add rax,r9 829 mov r10,rbx 830 imul r10,QWORD[((8-128))+rsi] 831 add r10,QWORD[8+rsp] 832 833 mov r9,rax 834 imul eax,r8d 835 and eax,0x1fffffff 836 837 mov r11,rbx 838 imul r11,QWORD[((16-128))+rsi] 839 add r11,QWORD[16+rsp] 840 841 mov r12,rbx 842 imul r12,QWORD[((24-128))+rsi] 843 add r12,QWORD[24+rsp] 844 vpmuludq ymm0,ymm10,YMMWORD[((32-128))+rsi] 845 vmovd xmm11,eax 846 vpaddq ymm1,ymm1,ymm0 847 vpmuludq ymm12,ymm10,YMMWORD[((64-128))+rsi] 848 vpbroadcastq ymm11,xmm11 849 vpaddq ymm2,ymm2,ymm12 850 vpmuludq ymm13,ymm10,YMMWORD[((96-128))+rsi] 851 vpand ymm3,ymm3,ymm15 852 vpaddq ymm3,ymm3,ymm13 853 vpmuludq ymm0,ymm10,YMMWORD[((128-128))+rsi] 854 vpaddq ymm4,ymm4,ymm0 855 vpmuludq ymm12,ymm10,YMMWORD[((160-128))+rsi] 856 vpaddq ymm5,ymm5,ymm12 857 vpmuludq ymm13,ymm10,YMMWORD[((192-128))+rsi] 858 vpaddq ymm6,ymm6,ymm13 859 vpmuludq ymm0,ymm10,YMMWORD[((224-128))+rsi] 860 vpermq ymm9,ymm9,0x93 861 vpaddq ymm7,ymm7,ymm0 862 vpmuludq ymm12,ymm10,YMMWORD[((256-128))+rsi] 863 vpbroadcastq ymm10,QWORD[8+r13] 864 vpaddq ymm8,ymm8,ymm12 865 866 mov rdx,rax 867 imul rax,QWORD[((-128))+rcx] 868 add r9,rax 869 mov rax,rdx 870 imul rax,QWORD[((8-128))+rcx] 871 add r10,rax 872 mov rax,rdx 873 imul rax,QWORD[((16-128))+rcx] 874 add r11,rax 875 shr r9,29 876 imul rdx,QWORD[((24-128))+rcx] 877 add r12,rdx 878 add r10,r9 879 880 vpmuludq ymm13,ymm11,YMMWORD[((32-128))+rcx] 881 vmovq rbx,xmm10 882 vpaddq ymm1,ymm1,ymm13 883 vpmuludq ymm0,ymm11,YMMWORD[((64-128))+rcx] 884 vpaddq ymm2,ymm2,ymm0 885 vpmuludq ymm12,ymm11,YMMWORD[((96-128))+rcx] 886 vpaddq ymm3,ymm3,ymm12 887 vpmuludq ymm13,ymm11,YMMWORD[((128-128))+rcx] 888 vpaddq ymm4,ymm4,ymm13 889 vpmuludq ymm0,ymm11,YMMWORD[((160-128))+rcx] 890 vpaddq ymm5,ymm5,ymm0 891 vpmuludq ymm12,ymm11,YMMWORD[((192-128))+rcx] 892 vpaddq ymm6,ymm6,ymm12 893 vpmuludq ymm13,ymm11,YMMWORD[((224-128))+rcx] 894 vpblendd ymm12,ymm9,ymm14,3 895 vpaddq ymm7,ymm7,ymm13 896 vpmuludq ymm0,ymm11,YMMWORD[((256-128))+rcx] 897 vpaddq ymm3,ymm3,ymm12 898 vpaddq ymm8,ymm8,ymm0 899 900 mov rax,rbx 901 imul rax,QWORD[((-128))+rsi] 902 add r10,rax 903 vmovdqu ymm12,YMMWORD[((-8+32-128))+rsi] 904 mov rax,rbx 905 imul rax,QWORD[((8-128))+rsi] 906 add r11,rax 907 vmovdqu ymm13,YMMWORD[((-8+64-128))+rsi] 908 909 mov rax,r10 910 vpblendd ymm9,ymm9,ymm14,0xfc 911 imul eax,r8d 912 vpaddq ymm4,ymm4,ymm9 913 and eax,0x1fffffff 914 915 imul rbx,QWORD[((16-128))+rsi] 916 add r12,rbx 917 vpmuludq ymm12,ymm12,ymm10 918 vmovd xmm11,eax 919 vmovdqu ymm0,YMMWORD[((-8+96-128))+rsi] 920 vpaddq ymm1,ymm1,ymm12 921 vpmuludq ymm13,ymm13,ymm10 922 vpbroadcastq ymm11,xmm11 923 vmovdqu ymm12,YMMWORD[((-8+128-128))+rsi] 924 vpaddq ymm2,ymm2,ymm13 925 vpmuludq ymm0,ymm0,ymm10 926 vmovdqu ymm13,YMMWORD[((-8+160-128))+rsi] 927 vpaddq ymm3,ymm3,ymm0 928 vpmuludq ymm12,ymm12,ymm10 929 vmovdqu ymm0,YMMWORD[((-8+192-128))+rsi] 930 vpaddq ymm4,ymm4,ymm12 931 vpmuludq ymm13,ymm13,ymm10 932 vmovdqu ymm12,YMMWORD[((-8+224-128))+rsi] 933 vpaddq ymm5,ymm5,ymm13 934 vpmuludq ymm0,ymm0,ymm10 935 vmovdqu ymm13,YMMWORD[((-8+256-128))+rsi] 936 vpaddq ymm6,ymm6,ymm0 937 vpmuludq ymm12,ymm12,ymm10 938 vmovdqu ymm9,YMMWORD[((-8+288-128))+rsi] 939 vpaddq ymm7,ymm7,ymm12 940 vpmuludq ymm13,ymm13,ymm10 941 vpaddq ymm8,ymm8,ymm13 942 vpmuludq ymm9,ymm9,ymm10 943 vpbroadcastq ymm10,QWORD[16+r13] 944 945 mov rdx,rax 946 imul rax,QWORD[((-128))+rcx] 947 add r10,rax 948 vmovdqu ymm0,YMMWORD[((-8+32-128))+rcx] 949 mov rax,rdx 950 imul rax,QWORD[((8-128))+rcx] 951 add r11,rax 952 vmovdqu ymm12,YMMWORD[((-8+64-128))+rcx] 953 shr r10,29 954 imul rdx,QWORD[((16-128))+rcx] 955 add r12,rdx 956 add r11,r10 957 958 vpmuludq ymm0,ymm0,ymm11 959 vmovq rbx,xmm10 960 vmovdqu ymm13,YMMWORD[((-8+96-128))+rcx] 961 vpaddq ymm1,ymm1,ymm0 962 vpmuludq ymm12,ymm12,ymm11 963 vmovdqu ymm0,YMMWORD[((-8+128-128))+rcx] 964 vpaddq ymm2,ymm2,ymm12 965 vpmuludq ymm13,ymm13,ymm11 966 vmovdqu ymm12,YMMWORD[((-8+160-128))+rcx] 967 vpaddq ymm3,ymm3,ymm13 968 vpmuludq ymm0,ymm0,ymm11 969 vmovdqu ymm13,YMMWORD[((-8+192-128))+rcx] 970 vpaddq ymm4,ymm4,ymm0 971 vpmuludq ymm12,ymm12,ymm11 972 vmovdqu ymm0,YMMWORD[((-8+224-128))+rcx] 973 vpaddq ymm5,ymm5,ymm12 974 vpmuludq ymm13,ymm13,ymm11 975 vmovdqu ymm12,YMMWORD[((-8+256-128))+rcx] 976 vpaddq ymm6,ymm6,ymm13 977 vpmuludq ymm0,ymm0,ymm11 978 vmovdqu ymm13,YMMWORD[((-8+288-128))+rcx] 979 vpaddq ymm7,ymm7,ymm0 980 vpmuludq ymm12,ymm12,ymm11 981 vpaddq ymm8,ymm8,ymm12 982 vpmuludq ymm13,ymm13,ymm11 983 vpaddq ymm9,ymm9,ymm13 984 985 vmovdqu ymm0,YMMWORD[((-16+32-128))+rsi] 986 mov rax,rbx 987 imul rax,QWORD[((-128))+rsi] 988 add rax,r11 989 990 vmovdqu ymm12,YMMWORD[((-16+64-128))+rsi] 991 mov r11,rax 992 imul eax,r8d 993 and eax,0x1fffffff 994 995 imul rbx,QWORD[((8-128))+rsi] 996 add r12,rbx 997 vpmuludq ymm0,ymm0,ymm10 998 vmovd xmm11,eax 999 vmovdqu ymm13,YMMWORD[((-16+96-128))+rsi] 1000 vpaddq ymm1,ymm1,ymm0 1001 vpmuludq ymm12,ymm12,ymm10 1002 vpbroadcastq ymm11,xmm11 1003 vmovdqu ymm0,YMMWORD[((-16+128-128))+rsi] 1004 vpaddq ymm2,ymm2,ymm12 1005 vpmuludq ymm13,ymm13,ymm10 1006 vmovdqu ymm12,YMMWORD[((-16+160-128))+rsi] 1007 vpaddq ymm3,ymm3,ymm13 1008 vpmuludq ymm0,ymm0,ymm10 1009 vmovdqu ymm13,YMMWORD[((-16+192-128))+rsi] 1010 vpaddq ymm4,ymm4,ymm0 1011 vpmuludq ymm12,ymm12,ymm10 1012 vmovdqu ymm0,YMMWORD[((-16+224-128))+rsi] 1013 vpaddq ymm5,ymm5,ymm12 1014 vpmuludq ymm13,ymm13,ymm10 1015 vmovdqu ymm12,YMMWORD[((-16+256-128))+rsi] 1016 vpaddq ymm6,ymm6,ymm13 1017 vpmuludq ymm0,ymm0,ymm10 1018 vmovdqu ymm13,YMMWORD[((-16+288-128))+rsi] 1019 vpaddq ymm7,ymm7,ymm0 1020 vpmuludq ymm12,ymm12,ymm10 1021 vpaddq ymm8,ymm8,ymm12 1022 vpmuludq ymm13,ymm13,ymm10 1023 vpbroadcastq ymm10,QWORD[24+r13] 1024 vpaddq ymm9,ymm9,ymm13 1025 1026 vmovdqu ymm0,YMMWORD[((-16+32-128))+rcx] 1027 mov rdx,rax 1028 imul rax,QWORD[((-128))+rcx] 1029 add r11,rax 1030 vmovdqu ymm12,YMMWORD[((-16+64-128))+rcx] 1031 imul rdx,QWORD[((8-128))+rcx] 1032 add r12,rdx 1033 shr r11,29 1034 1035 vpmuludq ymm0,ymm0,ymm11 1036 vmovq rbx,xmm10 1037 vmovdqu ymm13,YMMWORD[((-16+96-128))+rcx] 1038 vpaddq ymm1,ymm1,ymm0 1039 vpmuludq ymm12,ymm12,ymm11 1040 vmovdqu ymm0,YMMWORD[((-16+128-128))+rcx] 1041 vpaddq ymm2,ymm2,ymm12 1042 vpmuludq ymm13,ymm13,ymm11 1043 vmovdqu ymm12,YMMWORD[((-16+160-128))+rcx] 1044 vpaddq ymm3,ymm3,ymm13 1045 vpmuludq ymm0,ymm0,ymm11 1046 vmovdqu ymm13,YMMWORD[((-16+192-128))+rcx] 1047 vpaddq ymm4,ymm4,ymm0 1048 vpmuludq ymm12,ymm12,ymm11 1049 vmovdqu ymm0,YMMWORD[((-16+224-128))+rcx] 1050 vpaddq ymm5,ymm5,ymm12 1051 vpmuludq ymm13,ymm13,ymm11 1052 vmovdqu ymm12,YMMWORD[((-16+256-128))+rcx] 1053 vpaddq ymm6,ymm6,ymm13 1054 vpmuludq ymm0,ymm0,ymm11 1055 vmovdqu ymm13,YMMWORD[((-16+288-128))+rcx] 1056 vpaddq ymm7,ymm7,ymm0 1057 vpmuludq ymm12,ymm12,ymm11 1058 vmovdqu ymm0,YMMWORD[((-24+32-128))+rsi] 1059 vpaddq ymm8,ymm8,ymm12 1060 vpmuludq ymm13,ymm13,ymm11 1061 vmovdqu ymm12,YMMWORD[((-24+64-128))+rsi] 1062 vpaddq ymm9,ymm9,ymm13 1063 1064 add r12,r11 1065 imul rbx,QWORD[((-128))+rsi] 1066 add r12,rbx 1067 1068 mov rax,r12 1069 imul eax,r8d 1070 and eax,0x1fffffff 1071 1072 vpmuludq ymm0,ymm0,ymm10 1073 vmovd xmm11,eax 1074 vmovdqu ymm13,YMMWORD[((-24+96-128))+rsi] 1075 vpaddq ymm1,ymm1,ymm0 1076 vpmuludq ymm12,ymm12,ymm10 1077 vpbroadcastq ymm11,xmm11 1078 vmovdqu ymm0,YMMWORD[((-24+128-128))+rsi] 1079 vpaddq ymm2,ymm2,ymm12 1080 vpmuludq ymm13,ymm13,ymm10 1081 vmovdqu ymm12,YMMWORD[((-24+160-128))+rsi] 1082 vpaddq ymm3,ymm3,ymm13 1083 vpmuludq ymm0,ymm0,ymm10 1084 vmovdqu ymm13,YMMWORD[((-24+192-128))+rsi] 1085 vpaddq ymm4,ymm4,ymm0 1086 vpmuludq ymm12,ymm12,ymm10 1087 vmovdqu ymm0,YMMWORD[((-24+224-128))+rsi] 1088 vpaddq ymm5,ymm5,ymm12 1089 vpmuludq ymm13,ymm13,ymm10 1090 vmovdqu ymm12,YMMWORD[((-24+256-128))+rsi] 1091 vpaddq ymm6,ymm6,ymm13 1092 vpmuludq ymm0,ymm0,ymm10 1093 vmovdqu ymm13,YMMWORD[((-24+288-128))+rsi] 1094 vpaddq ymm7,ymm7,ymm0 1095 vpmuludq ymm12,ymm12,ymm10 1096 vpaddq ymm8,ymm8,ymm12 1097 vpmuludq ymm13,ymm13,ymm10 1098 vpbroadcastq ymm10,QWORD[32+r13] 1099 vpaddq ymm9,ymm9,ymm13 1100 add r13,32 1101 1102 vmovdqu ymm0,YMMWORD[((-24+32-128))+rcx] 1103 imul rax,QWORD[((-128))+rcx] 1104 add r12,rax 1105 shr r12,29 1106 1107 vmovdqu ymm12,YMMWORD[((-24+64-128))+rcx] 1108 vpmuludq ymm0,ymm0,ymm11 1109 vmovq rbx,xmm10 1110 vmovdqu ymm13,YMMWORD[((-24+96-128))+rcx] 1111 vpaddq ymm0,ymm1,ymm0 1112 vpmuludq ymm12,ymm12,ymm11 1113 vmovdqu YMMWORD[rsp],ymm0 1114 vpaddq ymm1,ymm2,ymm12 1115 vmovdqu ymm0,YMMWORD[((-24+128-128))+rcx] 1116 vpmuludq ymm13,ymm13,ymm11 1117 vmovdqu ymm12,YMMWORD[((-24+160-128))+rcx] 1118 vpaddq ymm2,ymm3,ymm13 1119 vpmuludq ymm0,ymm0,ymm11 1120 vmovdqu ymm13,YMMWORD[((-24+192-128))+rcx] 1121 vpaddq ymm3,ymm4,ymm0 1122 vpmuludq ymm12,ymm12,ymm11 1123 vmovdqu ymm0,YMMWORD[((-24+224-128))+rcx] 1124 vpaddq ymm4,ymm5,ymm12 1125 vpmuludq ymm13,ymm13,ymm11 1126 vmovdqu ymm12,YMMWORD[((-24+256-128))+rcx] 1127 vpaddq ymm5,ymm6,ymm13 1128 vpmuludq ymm0,ymm0,ymm11 1129 vmovdqu ymm13,YMMWORD[((-24+288-128))+rcx] 1130 mov r9,r12 1131 vpaddq ymm6,ymm7,ymm0 1132 vpmuludq ymm12,ymm12,ymm11 1133 add r9,QWORD[rsp] 1134 vpaddq ymm7,ymm8,ymm12 1135 vpmuludq ymm13,ymm13,ymm11 1136 vmovq xmm12,r12 1137 vpaddq ymm8,ymm9,ymm13 1138 1139 dec r14d 1140 jnz NEAR $L$oop_mul_1024 1141 vpaddq ymm0,ymm12,YMMWORD[rsp] 1142 1143 vpsrlq ymm12,ymm0,29 1144 vpand ymm0,ymm0,ymm15 1145 vpsrlq ymm13,ymm1,29 1146 vpand ymm1,ymm1,ymm15 1147 vpsrlq ymm10,ymm2,29 1148 vpermq ymm12,ymm12,0x93 1149 vpand ymm2,ymm2,ymm15 1150 vpsrlq ymm11,ymm3,29 1151 vpermq ymm13,ymm13,0x93 1152 vpand ymm3,ymm3,ymm15 1153 1154 vpblendd ymm9,ymm12,ymm14,3 1155 vpermq ymm10,ymm10,0x93 1156 vpblendd ymm12,ymm13,ymm12,3 1157 vpermq ymm11,ymm11,0x93 1158 vpaddq ymm0,ymm0,ymm9 1159 vpblendd ymm13,ymm10,ymm13,3 1160 vpaddq ymm1,ymm1,ymm12 1161 vpblendd ymm10,ymm11,ymm10,3 1162 vpaddq ymm2,ymm2,ymm13 1163 vpblendd ymm11,ymm14,ymm11,3 1164 vpaddq ymm3,ymm3,ymm10 1165 vpaddq ymm4,ymm4,ymm11 1166 1167 vpsrlq ymm12,ymm0,29 1168 vpand ymm0,ymm0,ymm15 1169 vpsrlq ymm13,ymm1,29 1170 vpand ymm1,ymm1,ymm15 1171 vpsrlq ymm10,ymm2,29 1172 vpermq ymm12,ymm12,0x93 1173 vpand ymm2,ymm2,ymm15 1174 vpsrlq ymm11,ymm3,29 1175 vpermq ymm13,ymm13,0x93 1176 vpand ymm3,ymm3,ymm15 1177 vpermq ymm10,ymm10,0x93 1178 1179 vpblendd ymm9,ymm12,ymm14,3 1180 vpermq ymm11,ymm11,0x93 1181 vpblendd ymm12,ymm13,ymm12,3 1182 vpaddq ymm0,ymm0,ymm9 1183 vpblendd ymm13,ymm10,ymm13,3 1184 vpaddq ymm1,ymm1,ymm12 1185 vpblendd ymm10,ymm11,ymm10,3 1186 vpaddq ymm2,ymm2,ymm13 1187 vpblendd ymm11,ymm14,ymm11,3 1188 vpaddq ymm3,ymm3,ymm10 1189 vpaddq ymm4,ymm4,ymm11 1190 1191 vmovdqu YMMWORD[(0-128)+rdi],ymm0 1192 vmovdqu YMMWORD[(32-128)+rdi],ymm1 1193 vmovdqu YMMWORD[(64-128)+rdi],ymm2 1194 vmovdqu YMMWORD[(96-128)+rdi],ymm3 1195 vpsrlq ymm12,ymm4,29 1196 vpand ymm4,ymm4,ymm15 1197 vpsrlq ymm13,ymm5,29 1198 vpand ymm5,ymm5,ymm15 1199 vpsrlq ymm10,ymm6,29 1200 vpermq ymm12,ymm12,0x93 1201 vpand ymm6,ymm6,ymm15 1202 vpsrlq ymm11,ymm7,29 1203 vpermq ymm13,ymm13,0x93 1204 vpand ymm7,ymm7,ymm15 1205 vpsrlq ymm0,ymm8,29 1206 vpermq ymm10,ymm10,0x93 1207 vpand ymm8,ymm8,ymm15 1208 vpermq ymm11,ymm11,0x93 1209 1210 vpblendd ymm9,ymm12,ymm14,3 1211 vpermq ymm0,ymm0,0x93 1212 vpblendd ymm12,ymm13,ymm12,3 1213 vpaddq ymm4,ymm4,ymm9 1214 vpblendd ymm13,ymm10,ymm13,3 1215 vpaddq ymm5,ymm5,ymm12 1216 vpblendd ymm10,ymm11,ymm10,3 1217 vpaddq ymm6,ymm6,ymm13 1218 vpblendd ymm11,ymm0,ymm11,3 1219 vpaddq ymm7,ymm7,ymm10 1220 vpaddq ymm8,ymm8,ymm11 1221 1222 vpsrlq ymm12,ymm4,29 1223 vpand ymm4,ymm4,ymm15 1224 vpsrlq ymm13,ymm5,29 1225 vpand ymm5,ymm5,ymm15 1226 vpsrlq ymm10,ymm6,29 1227 vpermq ymm12,ymm12,0x93 1228 vpand ymm6,ymm6,ymm15 1229 vpsrlq ymm11,ymm7,29 1230 vpermq ymm13,ymm13,0x93 1231 vpand ymm7,ymm7,ymm15 1232 vpsrlq ymm0,ymm8,29 1233 vpermq ymm10,ymm10,0x93 1234 vpand ymm8,ymm8,ymm15 1235 vpermq ymm11,ymm11,0x93 1236 1237 vpblendd ymm9,ymm12,ymm14,3 1238 vpermq ymm0,ymm0,0x93 1239 vpblendd ymm12,ymm13,ymm12,3 1240 vpaddq ymm4,ymm4,ymm9 1241 vpblendd ymm13,ymm10,ymm13,3 1242 vpaddq ymm5,ymm5,ymm12 1243 vpblendd ymm10,ymm11,ymm10,3 1244 vpaddq ymm6,ymm6,ymm13 1245 vpblendd ymm11,ymm0,ymm11,3 1246 vpaddq ymm7,ymm7,ymm10 1247 vpaddq ymm8,ymm8,ymm11 1248 1249 vmovdqu YMMWORD[(128-128)+rdi],ymm4 1250 vmovdqu YMMWORD[(160-128)+rdi],ymm5 1251 vmovdqu YMMWORD[(192-128)+rdi],ymm6 1252 vmovdqu YMMWORD[(224-128)+rdi],ymm7 1253 vmovdqu YMMWORD[(256-128)+rdi],ymm8 1254 vzeroupper 1255 1256 mov rax,rbp 1257 1258 $L$mul_1024_in_tail: 1259 movaps xmm6,XMMWORD[((-216))+rax] 1260 movaps xmm7,XMMWORD[((-200))+rax] 1261 movaps xmm8,XMMWORD[((-184))+rax] 1262 movaps xmm9,XMMWORD[((-168))+rax] 1263 movaps xmm10,XMMWORD[((-152))+rax] 1264 movaps xmm11,XMMWORD[((-136))+rax] 1265 movaps xmm12,XMMWORD[((-120))+rax] 1266 movaps xmm13,XMMWORD[((-104))+rax] 1267 movaps xmm14,XMMWORD[((-88))+rax] 1268 movaps xmm15,XMMWORD[((-72))+rax] 1269 mov r15,QWORD[((-48))+rax] 1270 1271 mov r14,QWORD[((-40))+rax] 1272 1273 mov r13,QWORD[((-32))+rax] 1274 1275 mov r12,QWORD[((-24))+rax] 1276 1277 mov rbp,QWORD[((-16))+rax] 1278 1279 mov rbx,QWORD[((-8))+rax] 1280 1281 lea rsp,[rax] 1282 1283 $L$mul_1024_epilogue: 1284 mov rdi,QWORD[8+rsp] ;WIN64 epilogue 1285 mov rsi,QWORD[16+rsp] 1286 DB 0F3h,0C3h ;repret 1287 1288 $L$SEH_end_rsaz_1024_mul_avx2: 1289 global rsaz_1024_red2norm_avx2 1290 1291 ALIGN 32 1292 rsaz_1024_red2norm_avx2: 1293 1294 sub rdx,-128 1295 xor rax,rax 1296 mov r8,QWORD[((-128))+rdx] 1297 mov r9,QWORD[((-120))+rdx] 1298 mov r10,QWORD[((-112))+rdx] 1299 shl r8,0 1300 shl r9,29 1301 mov r11,r10 1302 shl r10,58 1303 shr r11,6 1304 add rax,r8 1305 add rax,r9 1306 add rax,r10 1307 adc r11,0 1308 mov QWORD[rcx],rax 1309 mov rax,r11 1310 mov r8,QWORD[((-104))+rdx] 1311 mov r9,QWORD[((-96))+rdx] 1312 shl r8,23 1313 mov r10,r9 1314 shl r9,52 1315 shr r10,12 1316 add rax,r8 1317 add rax,r9 1318 adc r10,0 1319 mov QWORD[8+rcx],rax 1320 mov rax,r10 1321 mov r11,QWORD[((-88))+rdx] 1322 mov r8,QWORD[((-80))+rdx] 1323 shl r11,17 1324 mov r9,r8 1325 shl r8,46 1326 shr r9,18 1327 add rax,r11 1328 add rax,r8 1329 adc r9,0 1330 mov QWORD[16+rcx],rax 1331 mov rax,r9 1332 mov r10,QWORD[((-72))+rdx] 1333 mov r11,QWORD[((-64))+rdx] 1334 shl r10,11 1335 mov r8,r11 1336 shl r11,40 1337 shr r8,24 1338 add rax,r10 1339 add rax,r11 1340 adc r8,0 1341 mov QWORD[24+rcx],rax 1342 mov rax,r8 1343 mov r9,QWORD[((-56))+rdx] 1344 mov r10,QWORD[((-48))+rdx] 1345 mov r11,QWORD[((-40))+rdx] 1346 shl r9,5 1347 shl r10,34 1348 mov r8,r11 1349 shl r11,63 1350 shr r8,1 1351 add rax,r9 1352 add rax,r10 1353 add rax,r11 1354 adc r8,0 1355 mov QWORD[32+rcx],rax 1356 mov rax,r8 1357 mov r9,QWORD[((-32))+rdx] 1358 mov r10,QWORD[((-24))+rdx] 1359 shl r9,28 1360 mov r11,r10 1361 shl r10,57 1362 shr r11,7 1363 add rax,r9 1364 add rax,r10 1365 adc r11,0 1366 mov QWORD[40+rcx],rax 1367 mov rax,r11 1368 mov r8,QWORD[((-16))+rdx] 1369 mov r9,QWORD[((-8))+rdx] 1370 shl r8,22 1371 mov r10,r9 1372 shl r9,51 1373 shr r10,13 1374 add rax,r8 1375 add rax,r9 1376 adc r10,0 1377 mov QWORD[48+rcx],rax 1378 mov rax,r10 1379 mov r11,QWORD[rdx] 1380 mov r8,QWORD[8+rdx] 1381 shl r11,16 1382 mov r9,r8 1383 shl r8,45 1384 shr r9,19 1385 add rax,r11 1386 add rax,r8 1387 adc r9,0 1388 mov QWORD[56+rcx],rax 1389 mov rax,r9 1390 mov r10,QWORD[16+rdx] 1391 mov r11,QWORD[24+rdx] 1392 shl r10,10 1393 mov r8,r11 1394 shl r11,39 1395 shr r8,25 1396 add rax,r10 1397 add rax,r11 1398 adc r8,0 1399 mov QWORD[64+rcx],rax 1400 mov rax,r8 1401 mov r9,QWORD[32+rdx] 1402 mov r10,QWORD[40+rdx] 1403 mov r11,QWORD[48+rdx] 1404 shl r9,4 1405 shl r10,33 1406 mov r8,r11 1407 shl r11,62 1408 shr r8,2 1409 add rax,r9 1410 add rax,r10 1411 add rax,r11 1412 adc r8,0 1413 mov QWORD[72+rcx],rax 1414 mov rax,r8 1415 mov r9,QWORD[56+rdx] 1416 mov r10,QWORD[64+rdx] 1417 shl r9,27 1418 mov r11,r10 1419 shl r10,56 1420 shr r11,8 1421 add rax,r9 1422 add rax,r10 1423 adc r11,0 1424 mov QWORD[80+rcx],rax 1425 mov rax,r11 1426 mov r8,QWORD[72+rdx] 1427 mov r9,QWORD[80+rdx] 1428 shl r8,21 1429 mov r10,r9 1430 shl r9,50 1431 shr r10,14 1432 add rax,r8 1433 add rax,r9 1434 adc r10,0 1435 mov QWORD[88+rcx],rax 1436 mov rax,r10 1437 mov r11,QWORD[88+rdx] 1438 mov r8,QWORD[96+rdx] 1439 shl r11,15 1440 mov r9,r8 1441 shl r8,44 1442 shr r9,20 1443 add rax,r11 1444 add rax,r8 1445 adc r9,0 1446 mov QWORD[96+rcx],rax 1447 mov rax,r9 1448 mov r10,QWORD[104+rdx] 1449 mov r11,QWORD[112+rdx] 1450 shl r10,9 1451 mov r8,r11 1452 shl r11,38 1453 shr r8,26 1454 add rax,r10 1455 add rax,r11 1456 adc r8,0 1457 mov QWORD[104+rcx],rax 1458 mov rax,r8 1459 mov r9,QWORD[120+rdx] 1460 mov r10,QWORD[128+rdx] 1461 mov r11,QWORD[136+rdx] 1462 shl r9,3 1463 shl r10,32 1464 mov r8,r11 1465 shl r11,61 1466 shr r8,3 1467 add rax,r9 1468 add rax,r10 1469 add rax,r11 1470 adc r8,0 1471 mov QWORD[112+rcx],rax 1472 mov rax,r8 1473 mov r9,QWORD[144+rdx] 1474 mov r10,QWORD[152+rdx] 1475 shl r9,26 1476 mov r11,r10 1477 shl r10,55 1478 shr r11,9 1479 add rax,r9 1480 add rax,r10 1481 adc r11,0 1482 mov QWORD[120+rcx],rax 1483 mov rax,r11 1484 DB 0F3h,0C3h ;repret 1485 1486 1487 1488 global rsaz_1024_norm2red_avx2 1489 1490 ALIGN 32 1491 rsaz_1024_norm2red_avx2: 1492 1493 sub rcx,-128 1494 mov r8,QWORD[rdx] 1495 mov eax,0x1fffffff 1496 mov r9,QWORD[8+rdx] 1497 mov r11,r8 1498 shr r11,0 1499 and r11,rax 1500 mov QWORD[((-128))+rcx],r11 1501 mov r10,r8 1502 shr r10,29 1503 and r10,rax 1504 mov QWORD[((-120))+rcx],r10 1505 shrd r8,r9,58 1506 and r8,rax 1507 mov QWORD[((-112))+rcx],r8 1508 mov r10,QWORD[16+rdx] 1509 mov r8,r9 1510 shr r8,23 1511 and r8,rax 1512 mov QWORD[((-104))+rcx],r8 1513 shrd r9,r10,52 1514 and r9,rax 1515 mov QWORD[((-96))+rcx],r9 1516 mov r11,QWORD[24+rdx] 1517 mov r9,r10 1518 shr r9,17 1519 and r9,rax 1520 mov QWORD[((-88))+rcx],r9 1521 shrd r10,r11,46 1522 and r10,rax 1523 mov QWORD[((-80))+rcx],r10 1524 mov r8,QWORD[32+rdx] 1525 mov r10,r11 1526 shr r10,11 1527 and r10,rax 1528 mov QWORD[((-72))+rcx],r10 1529 shrd r11,r8,40 1530 and r11,rax 1531 mov QWORD[((-64))+rcx],r11 1532 mov r9,QWORD[40+rdx] 1533 mov r11,r8 1534 shr r11,5 1535 and r11,rax 1536 mov QWORD[((-56))+rcx],r11 1537 mov r10,r8 1538 shr r10,34 1539 and r10,rax 1540 mov QWORD[((-48))+rcx],r10 1541 shrd r8,r9,63 1542 and r8,rax 1543 mov QWORD[((-40))+rcx],r8 1544 mov r10,QWORD[48+rdx] 1545 mov r8,r9 1546 shr r8,28 1547 and r8,rax 1548 mov QWORD[((-32))+rcx],r8 1549 shrd r9,r10,57 1550 and r9,rax 1551 mov QWORD[((-24))+rcx],r9 1552 mov r11,QWORD[56+rdx] 1553 mov r9,r10 1554 shr r9,22 1555 and r9,rax 1556 mov QWORD[((-16))+rcx],r9 1557 shrd r10,r11,51 1558 and r10,rax 1559 mov QWORD[((-8))+rcx],r10 1560 mov r8,QWORD[64+rdx] 1561 mov r10,r11 1562 shr r10,16 1563 and r10,rax 1564 mov QWORD[rcx],r10 1565 shrd r11,r8,45 1566 and r11,rax 1567 mov QWORD[8+rcx],r11 1568 mov r9,QWORD[72+rdx] 1569 mov r11,r8 1570 shr r11,10 1571 and r11,rax 1572 mov QWORD[16+rcx],r11 1573 shrd r8,r9,39 1574 and r8,rax 1575 mov QWORD[24+rcx],r8 1576 mov r10,QWORD[80+rdx] 1577 mov r8,r9 1578 shr r8,4 1579 and r8,rax 1580 mov QWORD[32+rcx],r8 1581 mov r11,r9 1582 shr r11,33 1583 and r11,rax 1584 mov QWORD[40+rcx],r11 1585 shrd r9,r10,62 1586 and r9,rax 1587 mov QWORD[48+rcx],r9 1588 mov r11,QWORD[88+rdx] 1589 mov r9,r10 1590 shr r9,27 1591 and r9,rax 1592 mov QWORD[56+rcx],r9 1593 shrd r10,r11,56 1594 and r10,rax 1595 mov QWORD[64+rcx],r10 1596 mov r8,QWORD[96+rdx] 1597 mov r10,r11 1598 shr r10,21 1599 and r10,rax 1600 mov QWORD[72+rcx],r10 1601 shrd r11,r8,50 1602 and r11,rax 1603 mov QWORD[80+rcx],r11 1604 mov r9,QWORD[104+rdx] 1605 mov r11,r8 1606 shr r11,15 1607 and r11,rax 1608 mov QWORD[88+rcx],r11 1609 shrd r8,r9,44 1610 and r8,rax 1611 mov QWORD[96+rcx],r8 1612 mov r10,QWORD[112+rdx] 1613 mov r8,r9 1614 shr r8,9 1615 and r8,rax 1616 mov QWORD[104+rcx],r8 1617 shrd r9,r10,38 1618 and r9,rax 1619 mov QWORD[112+rcx],r9 1620 mov r11,QWORD[120+rdx] 1621 mov r9,r10 1622 shr r9,3 1623 and r9,rax 1624 mov QWORD[120+rcx],r9 1625 mov r8,r10 1626 shr r8,32 1627 and r8,rax 1628 mov QWORD[128+rcx],r8 1629 shrd r10,r11,61 1630 and r10,rax 1631 mov QWORD[136+rcx],r10 1632 xor r8,r8 1633 mov r10,r11 1634 shr r10,26 1635 and r10,rax 1636 mov QWORD[144+rcx],r10 1637 shrd r11,r8,55 1638 and r11,rax 1639 mov QWORD[152+rcx],r11 1640 mov QWORD[160+rcx],r8 1641 mov QWORD[168+rcx],r8 1642 mov QWORD[176+rcx],r8 1643 mov QWORD[184+rcx],r8 1644 DB 0F3h,0C3h ;repret 1645 1646 1647 global rsaz_1024_scatter5_avx2 1648 1649 ALIGN 32 1650 rsaz_1024_scatter5_avx2: 1651 1652 vzeroupper 1653 vmovdqu ymm5,YMMWORD[$L$scatter_permd] 1654 shl r8d,4 1655 lea rcx,[r8*1+rcx] 1656 mov eax,9 1657 jmp NEAR $L$oop_scatter_1024 1658 1659 ALIGN 32 1660 $L$oop_scatter_1024: 1661 vmovdqu ymm0,YMMWORD[rdx] 1662 lea rdx,[32+rdx] 1663 vpermd ymm0,ymm5,ymm0 1664 vmovdqu XMMWORD[rcx],xmm0 1665 lea rcx,[512+rcx] 1666 dec eax 1667 jnz NEAR $L$oop_scatter_1024 1668 1669 vzeroupper 1670 DB 0F3h,0C3h ;repret 1671 1672 1673 1674 global rsaz_1024_gather5_avx2 1675 1676 ALIGN 32 1677 rsaz_1024_gather5_avx2: 1678 1679 vzeroupper 1680 mov r11,rsp 1681 1682 lea rax,[((-136))+rsp] 1683 $L$SEH_begin_rsaz_1024_gather5: 1684 1685 DB 0x48,0x8d,0x60,0xe0 1686 DB 0xc5,0xf8,0x29,0x70,0xe0 1687 DB 0xc5,0xf8,0x29,0x78,0xf0 1688 DB 0xc5,0x78,0x29,0x40,0x00 1689 DB 0xc5,0x78,0x29,0x48,0x10 1690 DB 0xc5,0x78,0x29,0x50,0x20 1691 DB 0xc5,0x78,0x29,0x58,0x30 1692 DB 0xc5,0x78,0x29,0x60,0x40 1693 DB 0xc5,0x78,0x29,0x68,0x50 1694 DB 0xc5,0x78,0x29,0x70,0x60 1695 DB 0xc5,0x78,0x29,0x78,0x70 1696 lea rsp,[((-256))+rsp] 1697 and rsp,-32 1698 lea r10,[$L$inc] 1699 lea rax,[((-128))+rsp] 1700 1701 vmovd xmm4,r8d 1702 vmovdqa ymm0,YMMWORD[r10] 1703 vmovdqa ymm1,YMMWORD[32+r10] 1704 vmovdqa ymm5,YMMWORD[64+r10] 1705 vpbroadcastd ymm4,xmm4 1706 1707 vpaddd ymm2,ymm0,ymm5 1708 vpcmpeqd ymm0,ymm0,ymm4 1709 vpaddd ymm3,ymm1,ymm5 1710 vpcmpeqd ymm1,ymm1,ymm4 1711 vmovdqa YMMWORD[(0+128)+rax],ymm0 1712 vpaddd ymm0,ymm2,ymm5 1713 vpcmpeqd ymm2,ymm2,ymm4 1714 vmovdqa YMMWORD[(32+128)+rax],ymm1 1715 vpaddd ymm1,ymm3,ymm5 1716 vpcmpeqd ymm3,ymm3,ymm4 1717 vmovdqa YMMWORD[(64+128)+rax],ymm2 1718 vpaddd ymm2,ymm0,ymm5 1719 vpcmpeqd ymm0,ymm0,ymm4 1720 vmovdqa YMMWORD[(96+128)+rax],ymm3 1721 vpaddd ymm3,ymm1,ymm5 1722 vpcmpeqd ymm1,ymm1,ymm4 1723 vmovdqa YMMWORD[(128+128)+rax],ymm0 1724 vpaddd ymm8,ymm2,ymm5 1725 vpcmpeqd ymm2,ymm2,ymm4 1726 vmovdqa YMMWORD[(160+128)+rax],ymm1 1727 vpaddd ymm9,ymm3,ymm5 1728 vpcmpeqd ymm3,ymm3,ymm4 1729 vmovdqa YMMWORD[(192+128)+rax],ymm2 1730 vpaddd ymm10,ymm8,ymm5 1731 vpcmpeqd ymm8,ymm8,ymm4 1732 vmovdqa YMMWORD[(224+128)+rax],ymm3 1733 vpaddd ymm11,ymm9,ymm5 1734 vpcmpeqd ymm9,ymm9,ymm4 1735 vpaddd ymm12,ymm10,ymm5 1736 vpcmpeqd ymm10,ymm10,ymm4 1737 vpaddd ymm13,ymm11,ymm5 1738 vpcmpeqd ymm11,ymm11,ymm4 1739 vpaddd ymm14,ymm12,ymm5 1740 vpcmpeqd ymm12,ymm12,ymm4 1741 vpaddd ymm15,ymm13,ymm5 1742 vpcmpeqd ymm13,ymm13,ymm4 1743 vpcmpeqd ymm14,ymm14,ymm4 1744 vpcmpeqd ymm15,ymm15,ymm4 1745 1746 vmovdqa ymm7,YMMWORD[((-32))+r10] 1747 lea rdx,[128+rdx] 1748 mov r8d,9 1749 1750 $L$oop_gather_1024: 1751 vmovdqa ymm0,YMMWORD[((0-128))+rdx] 1752 vmovdqa ymm1,YMMWORD[((32-128))+rdx] 1753 vmovdqa ymm2,YMMWORD[((64-128))+rdx] 1754 vmovdqa ymm3,YMMWORD[((96-128))+rdx] 1755 vpand ymm0,ymm0,YMMWORD[((0+128))+rax] 1756 vpand ymm1,ymm1,YMMWORD[((32+128))+rax] 1757 vpand ymm2,ymm2,YMMWORD[((64+128))+rax] 1758 vpor ymm4,ymm1,ymm0 1759 vpand ymm3,ymm3,YMMWORD[((96+128))+rax] 1760 vmovdqa ymm0,YMMWORD[((128-128))+rdx] 1761 vmovdqa ymm1,YMMWORD[((160-128))+rdx] 1762 vpor ymm5,ymm3,ymm2 1763 vmovdqa ymm2,YMMWORD[((192-128))+rdx] 1764 vmovdqa ymm3,YMMWORD[((224-128))+rdx] 1765 vpand ymm0,ymm0,YMMWORD[((128+128))+rax] 1766 vpand ymm1,ymm1,YMMWORD[((160+128))+rax] 1767 vpand ymm2,ymm2,YMMWORD[((192+128))+rax] 1768 vpor ymm4,ymm4,ymm0 1769 vpand ymm3,ymm3,YMMWORD[((224+128))+rax] 1770 vpand ymm0,ymm8,YMMWORD[((256-128))+rdx] 1771 vpor ymm5,ymm5,ymm1 1772 vpand ymm1,ymm9,YMMWORD[((288-128))+rdx] 1773 vpor ymm4,ymm4,ymm2 1774 vpand ymm2,ymm10,YMMWORD[((320-128))+rdx] 1775 vpor ymm5,ymm5,ymm3 1776 vpand ymm3,ymm11,YMMWORD[((352-128))+rdx] 1777 vpor ymm4,ymm4,ymm0 1778 vpand ymm0,ymm12,YMMWORD[((384-128))+rdx] 1779 vpor ymm5,ymm5,ymm1 1780 vpand ymm1,ymm13,YMMWORD[((416-128))+rdx] 1781 vpor ymm4,ymm4,ymm2 1782 vpand ymm2,ymm14,YMMWORD[((448-128))+rdx] 1783 vpor ymm5,ymm5,ymm3 1784 vpand ymm3,ymm15,YMMWORD[((480-128))+rdx] 1785 lea rdx,[512+rdx] 1786 vpor ymm4,ymm4,ymm0 1787 vpor ymm5,ymm5,ymm1 1788 vpor ymm4,ymm4,ymm2 1789 vpor ymm5,ymm5,ymm3 1790 1791 vpor ymm4,ymm4,ymm5 1792 vextracti128 xmm5,ymm4,1 1793 vpor xmm5,xmm5,xmm4 1794 vpermd ymm5,ymm7,ymm5 1795 vmovdqu YMMWORD[rcx],ymm5 1796 lea rcx,[32+rcx] 1797 dec r8d 1798 jnz NEAR $L$oop_gather_1024 1799 1800 vpxor ymm0,ymm0,ymm0 1801 vmovdqu YMMWORD[rcx],ymm0 1802 vzeroupper 1803 movaps xmm6,XMMWORD[((-168))+r11] 1804 movaps xmm7,XMMWORD[((-152))+r11] 1805 movaps xmm8,XMMWORD[((-136))+r11] 1806 movaps xmm9,XMMWORD[((-120))+r11] 1807 movaps xmm10,XMMWORD[((-104))+r11] 1808 movaps xmm11,XMMWORD[((-88))+r11] 1809 movaps xmm12,XMMWORD[((-72))+r11] 1810 movaps xmm13,XMMWORD[((-56))+r11] 1811 movaps xmm14,XMMWORD[((-40))+r11] 1812 movaps xmm15,XMMWORD[((-24))+r11] 1813 lea rsp,[r11] 1814 1815 DB 0F3h,0C3h ;repret 1816 1817 $L$SEH_end_rsaz_1024_gather5: 1818 1819 EXTERN OPENSSL_ia32cap_P 8 1820 global rsaz_avx2_eligible 9 1821 1822 ALIGN 32 10 1823 rsaz_avx2_eligible: 11 xor eax,eax 1824 mov eax,DWORD[((OPENSSL_ia32cap_P+8))] 1825 mov ecx,524544 1826 mov edx,0 1827 and ecx,eax 1828 cmp ecx,524544 1829 cmove eax,edx 1830 and eax,32 1831 shr eax,5 12 1832 DB 0F3h,0C3h ;repret 13 1833 14 1834 15 global rsaz_1024_sqr_avx2 16 global rsaz_1024_mul_avx2 17 global rsaz_1024_norm2red_avx2 18 global rsaz_1024_red2norm_avx2 19 global rsaz_1024_scatter5_avx2 20 global rsaz_1024_gather5_avx2 21 22 rsaz_1024_sqr_avx2: 23 rsaz_1024_mul_avx2: 24 rsaz_1024_norm2red_avx2: 25 rsaz_1024_red2norm_avx2: 26 rsaz_1024_scatter5_avx2: 27 rsaz_1024_gather5_avx2: 28 DB 0x0f,0x0b 1835 ALIGN 64 1836 $L$and_mask: 1837 DQ 0x1fffffff,0x1fffffff,0x1fffffff,0x1fffffff 1838 $L$scatter_permd: 1839 DD 0,2,4,6,7,7,7,7 1840 $L$gather_permd: 1841 DD 0,7,1,7,2,7,3,7 1842 $L$inc: 1843 DD 0,0,0,0,1,1,1,1 1844 DD 2,2,2,2,3,3,3,3 1845 DD 4,4,4,4,4,4,4,4 1846 ALIGN 64 1847 EXTERN __imp_RtlVirtualUnwind 1848 1849 ALIGN 16 1850 rsaz_se_handler: 1851 push rsi 1852 push rdi 1853 push rbx 1854 push rbp 1855 push r12 1856 push r13 1857 push r14 1858 push r15 1859 pushfq 1860 sub rsp,64 1861 1862 mov rax,QWORD[120+r8] 1863 mov rbx,QWORD[248+r8] 1864 1865 mov rsi,QWORD[8+r9] 1866 mov r11,QWORD[56+r9] 1867 1868 mov r10d,DWORD[r11] 1869 lea r10,[r10*1+rsi] 1870 cmp rbx,r10 1871 jb NEAR $L$common_seh_tail 1872 1873 mov r10d,DWORD[4+r11] 1874 lea r10,[r10*1+rsi] 1875 cmp rbx,r10 1876 jae NEAR $L$common_seh_tail 1877 1878 mov rbp,QWORD[160+r8] 1879 1880 mov r10d,DWORD[8+r11] 1881 lea r10,[r10*1+rsi] 1882 cmp rbx,r10 1883 cmovc rax,rbp 1884 1885 mov r15,QWORD[((-48))+rax] 1886 mov r14,QWORD[((-40))+rax] 1887 mov r13,QWORD[((-32))+rax] 1888 mov r12,QWORD[((-24))+rax] 1889 mov rbp,QWORD[((-16))+rax] 1890 mov rbx,QWORD[((-8))+rax] 1891 mov QWORD[240+r8],r15 1892 mov QWORD[232+r8],r14 1893 mov QWORD[224+r8],r13 1894 mov QWORD[216+r8],r12 1895 mov QWORD[160+r8],rbp 1896 mov QWORD[144+r8],rbx 1897 1898 lea rsi,[((-216))+rax] 1899 lea rdi,[512+r8] 1900 mov ecx,20 1901 DD 0xa548f3fc 1902 1903 $L$common_seh_tail: 1904 mov rdi,QWORD[8+rax] 1905 mov rsi,QWORD[16+rax] 1906 mov QWORD[152+r8],rax 1907 mov QWORD[168+r8],rsi 1908 mov QWORD[176+r8],rdi 1909 1910 mov rdi,QWORD[40+r9] 1911 mov rsi,r8 1912 mov ecx,154 1913 DD 0xa548f3fc 1914 1915 mov rsi,r9 1916 xor rcx,rcx 1917 mov rdx,QWORD[8+rsi] 1918 mov r8,QWORD[rsi] 1919 mov r9,QWORD[16+rsi] 1920 mov r10,QWORD[40+rsi] 1921 lea r11,[56+rsi] 1922 lea r12,[24+rsi] 1923 mov QWORD[32+rsp],r10 1924 mov QWORD[40+rsp],r11 1925 mov QWORD[48+rsp],r12 1926 mov QWORD[56+rsp],rcx 1927 call QWORD[__imp_RtlVirtualUnwind] 1928 1929 mov eax,1 1930 add rsp,64 1931 popfq 1932 pop r15 1933 pop r14 1934 pop r13 1935 pop r12 1936 pop rbp 1937 pop rbx 1938 pop rdi 1939 pop rsi 29 1940 DB 0F3h,0C3h ;repret 30 1941 1942 1943 section .pdata rdata align=4 1944 ALIGN 4 1945 DD $L$SEH_begin_rsaz_1024_sqr_avx2 wrt ..imagebase 1946 DD $L$SEH_end_rsaz_1024_sqr_avx2 wrt ..imagebase 1947 DD $L$SEH_info_rsaz_1024_sqr_avx2 wrt ..imagebase 1948 1949 DD $L$SEH_begin_rsaz_1024_mul_avx2 wrt ..imagebase 1950 DD $L$SEH_end_rsaz_1024_mul_avx2 wrt ..imagebase 1951 DD $L$SEH_info_rsaz_1024_mul_avx2 wrt ..imagebase 1952 1953 DD $L$SEH_begin_rsaz_1024_gather5 wrt ..imagebase 1954 DD $L$SEH_end_rsaz_1024_gather5 wrt ..imagebase 1955 DD $L$SEH_info_rsaz_1024_gather5 wrt ..imagebase 1956 section .xdata rdata align=8 1957 ALIGN 8 1958 $L$SEH_info_rsaz_1024_sqr_avx2: 1959 DB 9,0,0,0 1960 DD rsaz_se_handler wrt ..imagebase 1961 DD $L$sqr_1024_body wrt ..imagebase,$L$sqr_1024_epilogue wrt ..imagebase,$L$sqr_1024_in_tail wrt ..imagebase 1962 DD 0 1963 $L$SEH_info_rsaz_1024_mul_avx2: 1964 DB 9,0,0,0 1965 DD rsaz_se_handler wrt ..imagebase 1966 DD $L$mul_1024_body wrt ..imagebase,$L$mul_1024_epilogue wrt ..imagebase,$L$mul_1024_in_tail wrt ..imagebase 1967 DD 0 1968 $L$SEH_info_rsaz_1024_gather5: 1969 DB 0x01,0x36,0x17,0x0b 1970 DB 0x36,0xf8,0x09,0x00 1971 DB 0x31,0xe8,0x08,0x00 1972 DB 0x2c,0xd8,0x07,0x00 1973 DB 0x27,0xc8,0x06,0x00 1974 DB 0x22,0xb8,0x05,0x00 1975 DB 0x1d,0xa8,0x04,0x00 1976 DB 0x18,0x98,0x03,0x00 1977 DB 0x13,0x88,0x02,0x00 1978 DB 0x0e,0x78,0x01,0x00 1979 DB 0x09,0x68,0x00,0x00 1980 DB 0x04,0x01,0x15,0x00 1981 DB 0x00,0xb3,0x00,0x00
Note:
See TracChangeset
for help on using the changeset viewer.