1// This file is generated from a similarly-named Perl script in the BoringSSL 2// source tree. Do not edit by hand. 3 4#if !defined(__has_feature) 5#define __has_feature(x) 0 6#endif 7#if __has_feature(memory_sanitizer) && !defined(OPENSSL_NO_ASM) 8#define OPENSSL_NO_ASM 9#endif 10 11#if !defined(OPENSSL_NO_ASM) 12#if defined(BORINGSSL_PREFIX) 13#include <boringssl_prefix_symbols_asm.h> 14#endif 15.text 16 17// abi_test_trampoline loads callee-saved registers from |state|, calls |func| 18// with |argv|, then saves the callee-saved registers into |state|. It returns 19// the result of |func|. The |unwind| argument is unused. 20// uint64_t abi_test_trampoline(void (*func)(...), CallerState *state, 21// const uint64_t *argv, size_t argc, 22// uint64_t unwind); 23 24.globl _abi_test_trampoline 25.private_extern _abi_test_trampoline 26.align 4 27_abi_test_trampoline: 28Labi_test_trampoline_begin: 29 // Stack layout (low to high addresses) 30 // x29,x30 (16 bytes) 31 // d8-d15 (64 bytes) 32 // x19-x28 (80 bytes) 33 // x1 (8 bytes) 34 // padding (8 bytes) 35 stp x29, x30, [sp, #-176]! 36 mov x29, sp 37 38 // Saved callee-saved registers and |state|. 39 stp d8, d9, [sp, #16] 40 stp d10, d11, [sp, #32] 41 stp d12, d13, [sp, #48] 42 stp d14, d15, [sp, #64] 43 stp x19, x20, [sp, #80] 44 stp x21, x22, [sp, #96] 45 stp x23, x24, [sp, #112] 46 stp x25, x26, [sp, #128] 47 stp x27, x28, [sp, #144] 48 str x1, [sp, #160] 49 50 // Load registers from |state|, with the exception of x29. x29 is the 51 // frame pointer and also callee-saved, but AAPCS64 allows platforms to 52 // mandate that x29 always point to a frame. iOS64 does so, which means 53 // we cannot fill x29 with entropy without violating ABI rules 54 // ourselves. x29 is tested separately below. 55 ldp d8, d9, [x1], #16 56 ldp d10, d11, [x1], #16 57 ldp d12, d13, [x1], #16 58 ldp d14, d15, [x1], #16 59 ldp x19, x20, [x1], #16 60 ldp x21, x22, [x1], #16 61 ldp x23, x24, [x1], #16 62 ldp x25, x26, [x1], #16 63 ldp x27, x28, [x1], #16 64 65 // Move parameters into temporary registers. 66 mov x9, x0 67 mov x10, x2 68 mov x11, x3 69 70 // Load parameters into registers. 71 cbz x11, Largs_done 72 ldr x0, [x10], #8 73 subs x11, x11, #1 74 b.eq Largs_done 75 ldr x1, [x10], #8 76 subs x11, x11, #1 77 b.eq Largs_done 78 ldr x2, [x10], #8 79 subs x11, x11, #1 80 b.eq Largs_done 81 ldr x3, [x10], #8 82 subs x11, x11, #1 83 b.eq Largs_done 84 ldr x4, [x10], #8 85 subs x11, x11, #1 86 b.eq Largs_done 87 ldr x5, [x10], #8 88 subs x11, x11, #1 89 b.eq Largs_done 90 ldr x6, [x10], #8 91 subs x11, x11, #1 92 b.eq Largs_done 93 ldr x7, [x10], #8 94 95Largs_done: 96 blr x9 97 98 // Reload |state| and store registers. 99 ldr x1, [sp, #160] 100 stp d8, d9, [x1], #16 101 stp d10, d11, [x1], #16 102 stp d12, d13, [x1], #16 103 stp d14, d15, [x1], #16 104 stp x19, x20, [x1], #16 105 stp x21, x22, [x1], #16 106 stp x23, x24, [x1], #16 107 stp x25, x26, [x1], #16 108 stp x27, x28, [x1], #16 109 110 // |func| is required to preserve x29, the frame pointer. We cannot load 111 // random values into x29 (see comment above), so compare it against the 112 // expected value and zero the field of |state| if corrupted. 113 mov x9, sp 114 cmp x29, x9 115 b.eq Lx29_ok 116 str xzr, [x1] 117 118Lx29_ok: 119 // Restore callee-saved registers. 120 ldp d8, d9, [sp, #16] 121 ldp d10, d11, [sp, #32] 122 ldp d12, d13, [sp, #48] 123 ldp d14, d15, [sp, #64] 124 ldp x19, x20, [sp, #80] 125 ldp x21, x22, [sp, #96] 126 ldp x23, x24, [sp, #112] 127 ldp x25, x26, [sp, #128] 128 ldp x27, x28, [sp, #144] 129 130 ldp x29, x30, [sp], #176 131 ret 132 133 134.globl _abi_test_clobber_x0 135.private_extern _abi_test_clobber_x0 136.align 4 137_abi_test_clobber_x0: 138 mov x0, xzr 139 ret 140 141 142.globl _abi_test_clobber_x1 143.private_extern _abi_test_clobber_x1 144.align 4 145_abi_test_clobber_x1: 146 mov x1, xzr 147 ret 148 149 150.globl _abi_test_clobber_x2 151.private_extern _abi_test_clobber_x2 152.align 4 153_abi_test_clobber_x2: 154 mov x2, xzr 155 ret 156 157 158.globl _abi_test_clobber_x3 159.private_extern _abi_test_clobber_x3 160.align 4 161_abi_test_clobber_x3: 162 mov x3, xzr 163 ret 164 165 166.globl _abi_test_clobber_x4 167.private_extern _abi_test_clobber_x4 168.align 4 169_abi_test_clobber_x4: 170 mov x4, xzr 171 ret 172 173 174.globl _abi_test_clobber_x5 175.private_extern _abi_test_clobber_x5 176.align 4 177_abi_test_clobber_x5: 178 mov x5, xzr 179 ret 180 181 182.globl _abi_test_clobber_x6 183.private_extern _abi_test_clobber_x6 184.align 4 185_abi_test_clobber_x6: 186 mov x6, xzr 187 ret 188 189 190.globl _abi_test_clobber_x7 191.private_extern _abi_test_clobber_x7 192.align 4 193_abi_test_clobber_x7: 194 mov x7, xzr 195 ret 196 197 198.globl _abi_test_clobber_x8 199.private_extern _abi_test_clobber_x8 200.align 4 201_abi_test_clobber_x8: 202 mov x8, xzr 203 ret 204 205 206.globl _abi_test_clobber_x9 207.private_extern _abi_test_clobber_x9 208.align 4 209_abi_test_clobber_x9: 210 mov x9, xzr 211 ret 212 213 214.globl _abi_test_clobber_x10 215.private_extern _abi_test_clobber_x10 216.align 4 217_abi_test_clobber_x10: 218 mov x10, xzr 219 ret 220 221 222.globl _abi_test_clobber_x11 223.private_extern _abi_test_clobber_x11 224.align 4 225_abi_test_clobber_x11: 226 mov x11, xzr 227 ret 228 229 230.globl _abi_test_clobber_x12 231.private_extern _abi_test_clobber_x12 232.align 4 233_abi_test_clobber_x12: 234 mov x12, xzr 235 ret 236 237 238.globl _abi_test_clobber_x13 239.private_extern _abi_test_clobber_x13 240.align 4 241_abi_test_clobber_x13: 242 mov x13, xzr 243 ret 244 245 246.globl _abi_test_clobber_x14 247.private_extern _abi_test_clobber_x14 248.align 4 249_abi_test_clobber_x14: 250 mov x14, xzr 251 ret 252 253 254.globl _abi_test_clobber_x15 255.private_extern _abi_test_clobber_x15 256.align 4 257_abi_test_clobber_x15: 258 mov x15, xzr 259 ret 260 261 262.globl _abi_test_clobber_x16 263.private_extern _abi_test_clobber_x16 264.align 4 265_abi_test_clobber_x16: 266 mov x16, xzr 267 ret 268 269 270.globl _abi_test_clobber_x17 271.private_extern _abi_test_clobber_x17 272.align 4 273_abi_test_clobber_x17: 274 mov x17, xzr 275 ret 276 277 278.globl _abi_test_clobber_x19 279.private_extern _abi_test_clobber_x19 280.align 4 281_abi_test_clobber_x19: 282 mov x19, xzr 283 ret 284 285 286.globl _abi_test_clobber_x20 287.private_extern _abi_test_clobber_x20 288.align 4 289_abi_test_clobber_x20: 290 mov x20, xzr 291 ret 292 293 294.globl _abi_test_clobber_x21 295.private_extern _abi_test_clobber_x21 296.align 4 297_abi_test_clobber_x21: 298 mov x21, xzr 299 ret 300 301 302.globl _abi_test_clobber_x22 303.private_extern _abi_test_clobber_x22 304.align 4 305_abi_test_clobber_x22: 306 mov x22, xzr 307 ret 308 309 310.globl _abi_test_clobber_x23 311.private_extern _abi_test_clobber_x23 312.align 4 313_abi_test_clobber_x23: 314 mov x23, xzr 315 ret 316 317 318.globl _abi_test_clobber_x24 319.private_extern _abi_test_clobber_x24 320.align 4 321_abi_test_clobber_x24: 322 mov x24, xzr 323 ret 324 325 326.globl _abi_test_clobber_x25 327.private_extern _abi_test_clobber_x25 328.align 4 329_abi_test_clobber_x25: 330 mov x25, xzr 331 ret 332 333 334.globl _abi_test_clobber_x26 335.private_extern _abi_test_clobber_x26 336.align 4 337_abi_test_clobber_x26: 338 mov x26, xzr 339 ret 340 341 342.globl _abi_test_clobber_x27 343.private_extern _abi_test_clobber_x27 344.align 4 345_abi_test_clobber_x27: 346 mov x27, xzr 347 ret 348 349 350.globl _abi_test_clobber_x28 351.private_extern _abi_test_clobber_x28 352.align 4 353_abi_test_clobber_x28: 354 mov x28, xzr 355 ret 356 357 358.globl _abi_test_clobber_x29 359.private_extern _abi_test_clobber_x29 360.align 4 361_abi_test_clobber_x29: 362 mov x29, xzr 363 ret 364 365 366.globl _abi_test_clobber_d0 367.private_extern _abi_test_clobber_d0 368.align 4 369_abi_test_clobber_d0: 370 fmov d0, xzr 371 ret 372 373 374.globl _abi_test_clobber_d1 375.private_extern _abi_test_clobber_d1 376.align 4 377_abi_test_clobber_d1: 378 fmov d1, xzr 379 ret 380 381 382.globl _abi_test_clobber_d2 383.private_extern _abi_test_clobber_d2 384.align 4 385_abi_test_clobber_d2: 386 fmov d2, xzr 387 ret 388 389 390.globl _abi_test_clobber_d3 391.private_extern _abi_test_clobber_d3 392.align 4 393_abi_test_clobber_d3: 394 fmov d3, xzr 395 ret 396 397 398.globl _abi_test_clobber_d4 399.private_extern _abi_test_clobber_d4 400.align 4 401_abi_test_clobber_d4: 402 fmov d4, xzr 403 ret 404 405 406.globl _abi_test_clobber_d5 407.private_extern _abi_test_clobber_d5 408.align 4 409_abi_test_clobber_d5: 410 fmov d5, xzr 411 ret 412 413 414.globl _abi_test_clobber_d6 415.private_extern _abi_test_clobber_d6 416.align 4 417_abi_test_clobber_d6: 418 fmov d6, xzr 419 ret 420 421 422.globl _abi_test_clobber_d7 423.private_extern _abi_test_clobber_d7 424.align 4 425_abi_test_clobber_d7: 426 fmov d7, xzr 427 ret 428 429 430.globl _abi_test_clobber_d8 431.private_extern _abi_test_clobber_d8 432.align 4 433_abi_test_clobber_d8: 434 fmov d8, xzr 435 ret 436 437 438.globl _abi_test_clobber_d9 439.private_extern _abi_test_clobber_d9 440.align 4 441_abi_test_clobber_d9: 442 fmov d9, xzr 443 ret 444 445 446.globl _abi_test_clobber_d10 447.private_extern _abi_test_clobber_d10 448.align 4 449_abi_test_clobber_d10: 450 fmov d10, xzr 451 ret 452 453 454.globl _abi_test_clobber_d11 455.private_extern _abi_test_clobber_d11 456.align 4 457_abi_test_clobber_d11: 458 fmov d11, xzr 459 ret 460 461 462.globl _abi_test_clobber_d12 463.private_extern _abi_test_clobber_d12 464.align 4 465_abi_test_clobber_d12: 466 fmov d12, xzr 467 ret 468 469 470.globl _abi_test_clobber_d13 471.private_extern _abi_test_clobber_d13 472.align 4 473_abi_test_clobber_d13: 474 fmov d13, xzr 475 ret 476 477 478.globl _abi_test_clobber_d14 479.private_extern _abi_test_clobber_d14 480.align 4 481_abi_test_clobber_d14: 482 fmov d14, xzr 483 ret 484 485 486.globl _abi_test_clobber_d15 487.private_extern _abi_test_clobber_d15 488.align 4 489_abi_test_clobber_d15: 490 fmov d15, xzr 491 ret 492 493 494.globl _abi_test_clobber_d16 495.private_extern _abi_test_clobber_d16 496.align 4 497_abi_test_clobber_d16: 498 fmov d16, xzr 499 ret 500 501 502.globl _abi_test_clobber_d17 503.private_extern _abi_test_clobber_d17 504.align 4 505_abi_test_clobber_d17: 506 fmov d17, xzr 507 ret 508 509 510.globl _abi_test_clobber_d18 511.private_extern _abi_test_clobber_d18 512.align 4 513_abi_test_clobber_d18: 514 fmov d18, xzr 515 ret 516 517 518.globl _abi_test_clobber_d19 519.private_extern _abi_test_clobber_d19 520.align 4 521_abi_test_clobber_d19: 522 fmov d19, xzr 523 ret 524 525 526.globl _abi_test_clobber_d20 527.private_extern _abi_test_clobber_d20 528.align 4 529_abi_test_clobber_d20: 530 fmov d20, xzr 531 ret 532 533 534.globl _abi_test_clobber_d21 535.private_extern _abi_test_clobber_d21 536.align 4 537_abi_test_clobber_d21: 538 fmov d21, xzr 539 ret 540 541 542.globl _abi_test_clobber_d22 543.private_extern _abi_test_clobber_d22 544.align 4 545_abi_test_clobber_d22: 546 fmov d22, xzr 547 ret 548 549 550.globl _abi_test_clobber_d23 551.private_extern _abi_test_clobber_d23 552.align 4 553_abi_test_clobber_d23: 554 fmov d23, xzr 555 ret 556 557 558.globl _abi_test_clobber_d24 559.private_extern _abi_test_clobber_d24 560.align 4 561_abi_test_clobber_d24: 562 fmov d24, xzr 563 ret 564 565 566.globl _abi_test_clobber_d25 567.private_extern _abi_test_clobber_d25 568.align 4 569_abi_test_clobber_d25: 570 fmov d25, xzr 571 ret 572 573 574.globl _abi_test_clobber_d26 575.private_extern _abi_test_clobber_d26 576.align 4 577_abi_test_clobber_d26: 578 fmov d26, xzr 579 ret 580 581 582.globl _abi_test_clobber_d27 583.private_extern _abi_test_clobber_d27 584.align 4 585_abi_test_clobber_d27: 586 fmov d27, xzr 587 ret 588 589 590.globl _abi_test_clobber_d28 591.private_extern _abi_test_clobber_d28 592.align 4 593_abi_test_clobber_d28: 594 fmov d28, xzr 595 ret 596 597 598.globl _abi_test_clobber_d29 599.private_extern _abi_test_clobber_d29 600.align 4 601_abi_test_clobber_d29: 602 fmov d29, xzr 603 ret 604 605 606.globl _abi_test_clobber_d30 607.private_extern _abi_test_clobber_d30 608.align 4 609_abi_test_clobber_d30: 610 fmov d30, xzr 611 ret 612 613 614.globl _abi_test_clobber_d31 615.private_extern _abi_test_clobber_d31 616.align 4 617_abi_test_clobber_d31: 618 fmov d31, xzr 619 ret 620 621 622.globl _abi_test_clobber_v8_upper 623.private_extern _abi_test_clobber_v8_upper 624.align 4 625_abi_test_clobber_v8_upper: 626 fmov v8.d[1], xzr 627 ret 628 629 630.globl _abi_test_clobber_v9_upper 631.private_extern _abi_test_clobber_v9_upper 632.align 4 633_abi_test_clobber_v9_upper: 634 fmov v9.d[1], xzr 635 ret 636 637 638.globl _abi_test_clobber_v10_upper 639.private_extern _abi_test_clobber_v10_upper 640.align 4 641_abi_test_clobber_v10_upper: 642 fmov v10.d[1], xzr 643 ret 644 645 646.globl _abi_test_clobber_v11_upper 647.private_extern _abi_test_clobber_v11_upper 648.align 4 649_abi_test_clobber_v11_upper: 650 fmov v11.d[1], xzr 651 ret 652 653 654.globl _abi_test_clobber_v12_upper 655.private_extern _abi_test_clobber_v12_upper 656.align 4 657_abi_test_clobber_v12_upper: 658 fmov v12.d[1], xzr 659 ret 660 661 662.globl _abi_test_clobber_v13_upper 663.private_extern _abi_test_clobber_v13_upper 664.align 4 665_abi_test_clobber_v13_upper: 666 fmov v13.d[1], xzr 667 ret 668 669 670.globl _abi_test_clobber_v14_upper 671.private_extern _abi_test_clobber_v14_upper 672.align 4 673_abi_test_clobber_v14_upper: 674 fmov v14.d[1], xzr 675 ret 676 677 678.globl _abi_test_clobber_v15_upper 679.private_extern _abi_test_clobber_v15_upper 680.align 4 681_abi_test_clobber_v15_upper: 682 fmov v15.d[1], xzr 683 ret 684 685#endif // !OPENSSL_NO_ASM 686