Home | History | Annotate | Download | only in test
      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