1; This file is generated from a similarly-named Perl script in the BoringSSL 2; source tree. Do not edit by hand. 3 4%ifidn __OUTPUT_FORMAT__, win64 5default rel 6%define XMMWORD 7%define YMMWORD 8%define ZMMWORD 9%define _CET_ENDBR 10 11%ifdef BORINGSSL_PREFIX 12%include "boringssl_prefix_symbols_nasm.inc" 13%endif 14section .text code align=64 15 16 17 18 19 20 21 22 23 24 25global abi_test_trampoline 26ALIGN 16 27abi_test_trampoline: 28 29$L$SEH_begin_abi_test_trampoline_1: 30_CET_ENDBR 31 32 33 34 35 36 37 38 39 40 sub rsp,344 41 42$L$SEH_prolog_abi_test_trampoline_2: 43 mov QWORD[112+rsp],rbx 44 45$L$SEH_prolog_abi_test_trampoline_3: 46 mov QWORD[120+rsp],rbp 47 48$L$SEH_prolog_abi_test_trampoline_4: 49 mov QWORD[128+rsp],rdi 50 51$L$SEH_prolog_abi_test_trampoline_5: 52 mov QWORD[136+rsp],rsi 53 54$L$SEH_prolog_abi_test_trampoline_6: 55 mov QWORD[144+rsp],r12 56 57$L$SEH_prolog_abi_test_trampoline_7: 58 mov QWORD[152+rsp],r13 59 60$L$SEH_prolog_abi_test_trampoline_8: 61 mov QWORD[160+rsp],r14 62 63$L$SEH_prolog_abi_test_trampoline_9: 64 mov QWORD[168+rsp],r15 65 66$L$SEH_prolog_abi_test_trampoline_10: 67 movdqa XMMWORD[176+rsp],xmm6 68 69$L$SEH_prolog_abi_test_trampoline_11: 70 movdqa XMMWORD[192+rsp],xmm7 71 72$L$SEH_prolog_abi_test_trampoline_12: 73 movdqa XMMWORD[208+rsp],xmm8 74 75$L$SEH_prolog_abi_test_trampoline_13: 76 movdqa XMMWORD[224+rsp],xmm9 77 78$L$SEH_prolog_abi_test_trampoline_14: 79 movdqa XMMWORD[240+rsp],xmm10 80 81$L$SEH_prolog_abi_test_trampoline_15: 82 movdqa XMMWORD[256+rsp],xmm11 83 84$L$SEH_prolog_abi_test_trampoline_16: 85 movdqa XMMWORD[272+rsp],xmm12 86 87$L$SEH_prolog_abi_test_trampoline_17: 88 movdqa XMMWORD[288+rsp],xmm13 89 90$L$SEH_prolog_abi_test_trampoline_18: 91 movdqa XMMWORD[304+rsp],xmm14 92 93$L$SEH_prolog_abi_test_trampoline_19: 94 movdqa XMMWORD[320+rsp],xmm15 95 96$L$SEH_prolog_abi_test_trampoline_20: 97 mov rbx,QWORD[rdx] 98 mov rbp,QWORD[8+rdx] 99 mov rdi,QWORD[16+rdx] 100 mov rsi,QWORD[24+rdx] 101 mov r12,QWORD[32+rdx] 102 mov r13,QWORD[40+rdx] 103 mov r14,QWORD[48+rdx] 104 mov r15,QWORD[56+rdx] 105 movdqa xmm6,XMMWORD[64+rdx] 106 movdqa xmm7,XMMWORD[80+rdx] 107 movdqa xmm8,XMMWORD[96+rdx] 108 movdqa xmm9,XMMWORD[112+rdx] 109 movdqa xmm10,XMMWORD[128+rdx] 110 movdqa xmm11,XMMWORD[144+rdx] 111 movdqa xmm12,XMMWORD[160+rdx] 112 movdqa xmm13,XMMWORD[176+rdx] 113 movdqa xmm14,XMMWORD[192+rdx] 114 movdqa xmm15,XMMWORD[208+rdx] 115 116 mov QWORD[88+rsp],rcx 117 mov QWORD[96+rsp],rdx 118 119 120 121 122 mov r10,r8 123 mov r11,r9 124 dec r11 125 js NEAR $L$args_done 126 mov rcx,QWORD[r10] 127 add r10,8 128 dec r11 129 js NEAR $L$args_done 130 mov rdx,QWORD[r10] 131 add r10,8 132 dec r11 133 js NEAR $L$args_done 134 mov r8,QWORD[r10] 135 add r10,8 136 dec r11 137 js NEAR $L$args_done 138 mov r9,QWORD[r10] 139 add r10,8 140 lea rax,[32+rsp] 141$L$args_loop: 142 dec r11 143 js NEAR $L$args_done 144 145 146 147 148 149 150 mov QWORD[104+rsp],r11 151 mov r11,QWORD[r10] 152 mov QWORD[rax],r11 153 mov r11,QWORD[104+rsp] 154 155 add r10,8 156 add rax,8 157 jmp NEAR $L$args_loop 158 159$L$args_done: 160 mov rax,QWORD[88+rsp] 161 mov r10,QWORD[384+rsp] 162 test r10,r10 163 jz NEAR $L$no_unwind 164 165 166 pushfq 167 or QWORD[rsp],0x100 168 popfq 169 170 171 172 nop 173global abi_test_unwind_start 174abi_test_unwind_start: 175 176 call rax 177global abi_test_unwind_return 178abi_test_unwind_return: 179 180 181 182 183 pushfq 184 and QWORD[rsp],-0x101 185 popfq 186global abi_test_unwind_stop 187abi_test_unwind_stop: 188 189 jmp NEAR $L$call_done 190 191$L$no_unwind: 192 call rax 193 194$L$call_done: 195 196 mov rdx,QWORD[96+rsp] 197 mov QWORD[rdx],rbx 198 mov QWORD[8+rdx],rbp 199 mov QWORD[16+rdx],rdi 200 mov QWORD[24+rdx],rsi 201 mov QWORD[32+rdx],r12 202 mov QWORD[40+rdx],r13 203 mov QWORD[48+rdx],r14 204 mov QWORD[56+rdx],r15 205 movdqa XMMWORD[64+rdx],xmm6 206 movdqa XMMWORD[80+rdx],xmm7 207 movdqa XMMWORD[96+rdx],xmm8 208 movdqa XMMWORD[112+rdx],xmm9 209 movdqa XMMWORD[128+rdx],xmm10 210 movdqa XMMWORD[144+rdx],xmm11 211 movdqa XMMWORD[160+rdx],xmm12 212 movdqa XMMWORD[176+rdx],xmm13 213 movdqa XMMWORD[192+rdx],xmm14 214 movdqa XMMWORD[208+rdx],xmm15 215 mov rbx,QWORD[112+rsp] 216 217 mov rbp,QWORD[120+rsp] 218 219 mov rdi,QWORD[128+rsp] 220 221 mov rsi,QWORD[136+rsp] 222 223 mov r12,QWORD[144+rsp] 224 225 mov r13,QWORD[152+rsp] 226 227 mov r14,QWORD[160+rsp] 228 229 mov r15,QWORD[168+rsp] 230 231 movdqa xmm6,XMMWORD[176+rsp] 232 233 movdqa xmm7,XMMWORD[192+rsp] 234 235 movdqa xmm8,XMMWORD[208+rsp] 236 237 movdqa xmm9,XMMWORD[224+rsp] 238 239 movdqa xmm10,XMMWORD[240+rsp] 240 241 movdqa xmm11,XMMWORD[256+rsp] 242 243 movdqa xmm12,XMMWORD[272+rsp] 244 245 movdqa xmm13,XMMWORD[288+rsp] 246 247 movdqa xmm14,XMMWORD[304+rsp] 248 249 movdqa xmm15,XMMWORD[320+rsp] 250 251 add rsp,344 252 253 254 255 ret 256 257$L$SEH_end_abi_test_trampoline_21: 258 259 260global abi_test_clobber_rax 261ALIGN 16 262abi_test_clobber_rax: 263_CET_ENDBR 264 xor rax,rax 265 ret 266 267 268global abi_test_clobber_rbx 269ALIGN 16 270abi_test_clobber_rbx: 271_CET_ENDBR 272 xor rbx,rbx 273 ret 274 275 276global abi_test_clobber_rcx 277ALIGN 16 278abi_test_clobber_rcx: 279_CET_ENDBR 280 xor rcx,rcx 281 ret 282 283 284global abi_test_clobber_rdx 285ALIGN 16 286abi_test_clobber_rdx: 287_CET_ENDBR 288 xor rdx,rdx 289 ret 290 291 292global abi_test_clobber_rdi 293ALIGN 16 294abi_test_clobber_rdi: 295_CET_ENDBR 296 xor rdi,rdi 297 ret 298 299 300global abi_test_clobber_rsi 301ALIGN 16 302abi_test_clobber_rsi: 303_CET_ENDBR 304 xor rsi,rsi 305 ret 306 307 308global abi_test_clobber_rbp 309ALIGN 16 310abi_test_clobber_rbp: 311_CET_ENDBR 312 xor rbp,rbp 313 ret 314 315 316global abi_test_clobber_r8 317ALIGN 16 318abi_test_clobber_r8: 319_CET_ENDBR 320 xor r8,r8 321 ret 322 323 324global abi_test_clobber_r9 325ALIGN 16 326abi_test_clobber_r9: 327_CET_ENDBR 328 xor r9,r9 329 ret 330 331 332global abi_test_clobber_r10 333ALIGN 16 334abi_test_clobber_r10: 335_CET_ENDBR 336 xor r10,r10 337 ret 338 339 340global abi_test_clobber_r11 341ALIGN 16 342abi_test_clobber_r11: 343_CET_ENDBR 344 xor r11,r11 345 ret 346 347 348global abi_test_clobber_r12 349ALIGN 16 350abi_test_clobber_r12: 351_CET_ENDBR 352 xor r12,r12 353 ret 354 355 356global abi_test_clobber_r13 357ALIGN 16 358abi_test_clobber_r13: 359_CET_ENDBR 360 xor r13,r13 361 ret 362 363 364global abi_test_clobber_r14 365ALIGN 16 366abi_test_clobber_r14: 367_CET_ENDBR 368 xor r14,r14 369 ret 370 371 372global abi_test_clobber_r15 373ALIGN 16 374abi_test_clobber_r15: 375_CET_ENDBR 376 xor r15,r15 377 ret 378 379 380global abi_test_clobber_xmm0 381ALIGN 16 382abi_test_clobber_xmm0: 383_CET_ENDBR 384 pxor xmm0,xmm0 385 ret 386 387 388global abi_test_clobber_xmm1 389ALIGN 16 390abi_test_clobber_xmm1: 391_CET_ENDBR 392 pxor xmm1,xmm1 393 ret 394 395 396global abi_test_clobber_xmm2 397ALIGN 16 398abi_test_clobber_xmm2: 399_CET_ENDBR 400 pxor xmm2,xmm2 401 ret 402 403 404global abi_test_clobber_xmm3 405ALIGN 16 406abi_test_clobber_xmm3: 407_CET_ENDBR 408 pxor xmm3,xmm3 409 ret 410 411 412global abi_test_clobber_xmm4 413ALIGN 16 414abi_test_clobber_xmm4: 415_CET_ENDBR 416 pxor xmm4,xmm4 417 ret 418 419 420global abi_test_clobber_xmm5 421ALIGN 16 422abi_test_clobber_xmm5: 423_CET_ENDBR 424 pxor xmm5,xmm5 425 ret 426 427 428global abi_test_clobber_xmm6 429ALIGN 16 430abi_test_clobber_xmm6: 431_CET_ENDBR 432 pxor xmm6,xmm6 433 ret 434 435 436global abi_test_clobber_xmm7 437ALIGN 16 438abi_test_clobber_xmm7: 439_CET_ENDBR 440 pxor xmm7,xmm7 441 ret 442 443 444global abi_test_clobber_xmm8 445ALIGN 16 446abi_test_clobber_xmm8: 447_CET_ENDBR 448 pxor xmm8,xmm8 449 ret 450 451 452global abi_test_clobber_xmm9 453ALIGN 16 454abi_test_clobber_xmm9: 455_CET_ENDBR 456 pxor xmm9,xmm9 457 ret 458 459 460global abi_test_clobber_xmm10 461ALIGN 16 462abi_test_clobber_xmm10: 463_CET_ENDBR 464 pxor xmm10,xmm10 465 ret 466 467 468global abi_test_clobber_xmm11 469ALIGN 16 470abi_test_clobber_xmm11: 471_CET_ENDBR 472 pxor xmm11,xmm11 473 ret 474 475 476global abi_test_clobber_xmm12 477ALIGN 16 478abi_test_clobber_xmm12: 479_CET_ENDBR 480 pxor xmm12,xmm12 481 ret 482 483 484global abi_test_clobber_xmm13 485ALIGN 16 486abi_test_clobber_xmm13: 487_CET_ENDBR 488 pxor xmm13,xmm13 489 ret 490 491 492global abi_test_clobber_xmm14 493ALIGN 16 494abi_test_clobber_xmm14: 495_CET_ENDBR 496 pxor xmm14,xmm14 497 ret 498 499 500global abi_test_clobber_xmm15 501ALIGN 16 502abi_test_clobber_xmm15: 503_CET_ENDBR 504 pxor xmm15,xmm15 505 ret 506 507 508 509 510 511global abi_test_bad_unwind_wrong_register 512ALIGN 16 513abi_test_bad_unwind_wrong_register: 514 515$L$SEH_begin_abi_test_bad_unwind_wrong_register_1: 516_CET_ENDBR 517 push r12 518 519$L$SEH_prolog_abi_test_bad_unwind_wrong_register_2: 520 521 522 523 nop 524 pop r12 525 526 ret 527$L$SEH_end_abi_test_bad_unwind_wrong_register_3: 528 529 530 531 532 533 534 535global abi_test_bad_unwind_temporary 536ALIGN 16 537abi_test_bad_unwind_temporary: 538 539$L$SEH_begin_abi_test_bad_unwind_temporary_1: 540_CET_ENDBR 541 push r12 542 543$L$SEH_prolog_abi_test_bad_unwind_temporary_2: 544 545 mov rax,r12 546 inc rax 547 mov QWORD[rsp],rax 548 549 550 551 mov QWORD[rsp],r12 552 553 554 pop r12 555 556 ret 557 558$L$SEH_end_abi_test_bad_unwind_temporary_3: 559 560 561 562 563 564 565global abi_test_get_and_clear_direction_flag 566abi_test_get_and_clear_direction_flag: 567_CET_ENDBR 568 pushfq 569 pop rax 570 and rax,0x400 571 shr rax,10 572 cld 573 ret 574 575 576 577 578 579global abi_test_set_direction_flag 580abi_test_set_direction_flag: 581_CET_ENDBR 582 std 583 ret 584 585 586 587 588 589 590global abi_test_bad_unwind_epilog 591ALIGN 16 592abi_test_bad_unwind_epilog: 593$L$SEH_begin_abi_test_bad_unwind_epilog_1: 594 push r12 595$L$SEH_prolog_abi_test_bad_unwind_epilog_2: 596 597 nop 598 599 600 pop r12 601 nop 602 ret 603$L$SEH_end_abi_test_bad_unwind_epilog_3: 604 605section .pdata rdata align=4 606ALIGN 4 607 DD $L$SEH_begin_abi_test_trampoline_1 wrt ..imagebase 608 DD $L$SEH_end_abi_test_trampoline_21 wrt ..imagebase 609 DD $L$SEH_info_abi_test_trampoline_0 wrt ..imagebase 610 611 DD $L$SEH_begin_abi_test_bad_unwind_wrong_register_1 wrt ..imagebase 612 DD $L$SEH_end_abi_test_bad_unwind_wrong_register_3 wrt ..imagebase 613 DD $L$SEH_info_abi_test_bad_unwind_wrong_register_0 wrt ..imagebase 614 615 DD $L$SEH_begin_abi_test_bad_unwind_temporary_1 wrt ..imagebase 616 DD $L$SEH_end_abi_test_bad_unwind_temporary_3 wrt ..imagebase 617 DD $L$SEH_info_abi_test_bad_unwind_temporary_0 wrt ..imagebase 618 619 DD $L$SEH_begin_abi_test_bad_unwind_epilog_1 wrt ..imagebase 620 DD $L$SEH_end_abi_test_bad_unwind_epilog_3 wrt ..imagebase 621 DD $L$SEH_info_abi_test_bad_unwind_epilog_0 wrt ..imagebase 622 623 624section .xdata rdata align=8 625ALIGN 4 626$L$SEH_info_abi_test_trampoline_0: 627 DB 1 628 DB $L$SEH_prolog_abi_test_trampoline_20-$L$SEH_begin_abi_test_trampoline_1 629 DB 38 630 DB 0 631 DB $L$SEH_prolog_abi_test_trampoline_20-$L$SEH_begin_abi_test_trampoline_1 632 DB 248 633 DW 20 634 DB $L$SEH_prolog_abi_test_trampoline_19-$L$SEH_begin_abi_test_trampoline_1 635 DB 232 636 DW 19 637 DB $L$SEH_prolog_abi_test_trampoline_18-$L$SEH_begin_abi_test_trampoline_1 638 DB 216 639 DW 18 640 DB $L$SEH_prolog_abi_test_trampoline_17-$L$SEH_begin_abi_test_trampoline_1 641 DB 200 642 DW 17 643 DB $L$SEH_prolog_abi_test_trampoline_16-$L$SEH_begin_abi_test_trampoline_1 644 DB 184 645 DW 16 646 DB $L$SEH_prolog_abi_test_trampoline_15-$L$SEH_begin_abi_test_trampoline_1 647 DB 168 648 DW 15 649 DB $L$SEH_prolog_abi_test_trampoline_14-$L$SEH_begin_abi_test_trampoline_1 650 DB 152 651 DW 14 652 DB $L$SEH_prolog_abi_test_trampoline_13-$L$SEH_begin_abi_test_trampoline_1 653 DB 136 654 DW 13 655 DB $L$SEH_prolog_abi_test_trampoline_12-$L$SEH_begin_abi_test_trampoline_1 656 DB 120 657 DW 12 658 DB $L$SEH_prolog_abi_test_trampoline_11-$L$SEH_begin_abi_test_trampoline_1 659 DB 104 660 DW 11 661 DB $L$SEH_prolog_abi_test_trampoline_10-$L$SEH_begin_abi_test_trampoline_1 662 DB 244 663 DW 21 664 DB $L$SEH_prolog_abi_test_trampoline_9-$L$SEH_begin_abi_test_trampoline_1 665 DB 228 666 DW 20 667 DB $L$SEH_prolog_abi_test_trampoline_8-$L$SEH_begin_abi_test_trampoline_1 668 DB 212 669 DW 19 670 DB $L$SEH_prolog_abi_test_trampoline_7-$L$SEH_begin_abi_test_trampoline_1 671 DB 196 672 DW 18 673 DB $L$SEH_prolog_abi_test_trampoline_6-$L$SEH_begin_abi_test_trampoline_1 674 DB 100 675 DW 17 676 DB $L$SEH_prolog_abi_test_trampoline_5-$L$SEH_begin_abi_test_trampoline_1 677 DB 116 678 DW 16 679 DB $L$SEH_prolog_abi_test_trampoline_4-$L$SEH_begin_abi_test_trampoline_1 680 DB 84 681 DW 15 682 DB $L$SEH_prolog_abi_test_trampoline_3-$L$SEH_begin_abi_test_trampoline_1 683 DB 52 684 DW 14 685 DB $L$SEH_prolog_abi_test_trampoline_2-$L$SEH_begin_abi_test_trampoline_1 686 DB 1 687 DW 43 688 689$L$SEH_info_abi_test_bad_unwind_wrong_register_0: 690 DB 1 691 DB $L$SEH_prolog_abi_test_bad_unwind_wrong_register_2-$L$SEH_begin_abi_test_bad_unwind_wrong_register_1 692 DB 1 693 DB 0 694 DB $L$SEH_prolog_abi_test_bad_unwind_wrong_register_2-$L$SEH_begin_abi_test_bad_unwind_wrong_register_1 695 DB 208 696 697$L$SEH_info_abi_test_bad_unwind_temporary_0: 698 DB 1 699 DB $L$SEH_prolog_abi_test_bad_unwind_temporary_2-$L$SEH_begin_abi_test_bad_unwind_temporary_1 700 DB 1 701 DB 0 702 DB $L$SEH_prolog_abi_test_bad_unwind_temporary_2-$L$SEH_begin_abi_test_bad_unwind_temporary_1 703 DB 192 704 705$L$SEH_info_abi_test_bad_unwind_epilog_0: 706 DB 1 707 DB $L$SEH_prolog_abi_test_bad_unwind_epilog_2-$L$SEH_begin_abi_test_bad_unwind_epilog_1 708 DB 1 709 DB 0 710 DB $L$SEH_prolog_abi_test_bad_unwind_epilog_2-$L$SEH_begin_abi_test_bad_unwind_epilog_1 711 DB 192 712%else 713; Work around https://bugzilla.nasm.us/show_bug.cgi?id=3392738 714ret 715%endif 716