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