// This file is generated from a similarly-named Perl script in the BoringSSL
// source tree. Do not edit by hand.

#include <openssl/asm_base.h>

#if !defined(OPENSSL_NO_ASM) && defined(OPENSSL_X86_64) && defined(__APPLE__)
.text	








.globl	_abi_test_trampoline
.private_extern _abi_test_trampoline

.p2align	4
_abi_test_trampoline:


_CET_ENDBR









	subq	$120,%rsp


	movq	%r8,48(%rsp)
	movq	%rbx,64(%rsp)


	movq	%rbp,72(%rsp)


	movq	%r12,80(%rsp)


	movq	%r13,88(%rsp)


	movq	%r14,96(%rsp)


	movq	%r15,104(%rsp)



	movq	0(%rsi),%rbx
	movq	8(%rsi),%rbp
	movq	16(%rsi),%r12
	movq	24(%rsi),%r13
	movq	32(%rsi),%r14
	movq	40(%rsi),%r15

	movq	%rdi,32(%rsp)
	movq	%rsi,40(%rsp)




	movq	%rdx,%r10
	movq	%rcx,%r11
	decq	%r11
	js	L$args_done
	movq	(%r10),%rdi
	addq	$8,%r10
	decq	%r11
	js	L$args_done
	movq	(%r10),%rsi
	addq	$8,%r10
	decq	%r11
	js	L$args_done
	movq	(%r10),%rdx
	addq	$8,%r10
	decq	%r11
	js	L$args_done
	movq	(%r10),%rcx
	addq	$8,%r10
	decq	%r11
	js	L$args_done
	movq	(%r10),%r8
	addq	$8,%r10
	decq	%r11
	js	L$args_done
	movq	(%r10),%r9
	addq	$8,%r10
	leaq	0(%rsp),%rax
L$args_loop:
	decq	%r11
	js	L$args_done






	movq	%r11,56(%rsp)
	movq	(%r10),%r11
	movq	%r11,(%rax)
	movq	56(%rsp),%r11

	addq	$8,%r10
	addq	$8,%rax
	jmp	L$args_loop

L$args_done:
	movq	32(%rsp),%rax
	movq	48(%rsp),%r10
	testq	%r10,%r10
	jz	L$no_unwind


	pushfq
	orq	$0x100,0(%rsp)
	popfq



	nop
.globl	_abi_test_unwind_start
.private_extern _abi_test_unwind_start
_abi_test_unwind_start:

	call	*%rax
.globl	_abi_test_unwind_return
.private_extern _abi_test_unwind_return
_abi_test_unwind_return:




	pushfq
	andq	$-0x101,0(%rsp)
	popfq
.globl	_abi_test_unwind_stop
.private_extern _abi_test_unwind_stop
_abi_test_unwind_stop:

	jmp	L$call_done

L$no_unwind:
	call	*%rax

L$call_done:

	movq	40(%rsp),%rsi
	movq	%rbx,0(%rsi)
	movq	%rbp,8(%rsi)
	movq	%r12,16(%rsi)
	movq	%r13,24(%rsi)
	movq	%r14,32(%rsi)
	movq	%r15,40(%rsi)
	movq	64(%rsp),%rbx

	movq	72(%rsp),%rbp

	movq	80(%rsp),%r12

	movq	88(%rsp),%r13

	movq	96(%rsp),%r14

	movq	104(%rsp),%r15

	addq	$120,%rsp



	ret



.globl	_abi_test_clobber_rax
.private_extern _abi_test_clobber_rax

.p2align	4
_abi_test_clobber_rax:
_CET_ENDBR
	xorq	%rax,%rax
	ret

.globl	_abi_test_clobber_rbx
.private_extern _abi_test_clobber_rbx

.p2align	4
_abi_test_clobber_rbx:
_CET_ENDBR
	xorq	%rbx,%rbx
	ret

.globl	_abi_test_clobber_rcx
.private_extern _abi_test_clobber_rcx

.p2align	4
_abi_test_clobber_rcx:
_CET_ENDBR
	xorq	%rcx,%rcx
	ret

.globl	_abi_test_clobber_rdx
.private_extern _abi_test_clobber_rdx

.p2align	4
_abi_test_clobber_rdx:
_CET_ENDBR
	xorq	%rdx,%rdx
	ret

.globl	_abi_test_clobber_rdi
.private_extern _abi_test_clobber_rdi

.p2align	4
_abi_test_clobber_rdi:
_CET_ENDBR
	xorq	%rdi,%rdi
	ret

.globl	_abi_test_clobber_rsi
.private_extern _abi_test_clobber_rsi

.p2align	4
_abi_test_clobber_rsi:
_CET_ENDBR
	xorq	%rsi,%rsi
	ret

.globl	_abi_test_clobber_rbp
.private_extern _abi_test_clobber_rbp

.p2align	4
_abi_test_clobber_rbp:
_CET_ENDBR
	xorq	%rbp,%rbp
	ret

.globl	_abi_test_clobber_r8
.private_extern _abi_test_clobber_r8

.p2align	4
_abi_test_clobber_r8:
_CET_ENDBR
	xorq	%r8,%r8
	ret

.globl	_abi_test_clobber_r9
.private_extern _abi_test_clobber_r9

.p2align	4
_abi_test_clobber_r9:
_CET_ENDBR
	xorq	%r9,%r9
	ret

.globl	_abi_test_clobber_r10
.private_extern _abi_test_clobber_r10

.p2align	4
_abi_test_clobber_r10:
_CET_ENDBR
	xorq	%r10,%r10
	ret

.globl	_abi_test_clobber_r11
.private_extern _abi_test_clobber_r11

.p2align	4
_abi_test_clobber_r11:
_CET_ENDBR
	xorq	%r11,%r11
	ret

.globl	_abi_test_clobber_r12
.private_extern _abi_test_clobber_r12

.p2align	4
_abi_test_clobber_r12:
_CET_ENDBR
	xorq	%r12,%r12
	ret

.globl	_abi_test_clobber_r13
.private_extern _abi_test_clobber_r13

.p2align	4
_abi_test_clobber_r13:
_CET_ENDBR
	xorq	%r13,%r13
	ret

.globl	_abi_test_clobber_r14
.private_extern _abi_test_clobber_r14

.p2align	4
_abi_test_clobber_r14:
_CET_ENDBR
	xorq	%r14,%r14
	ret

.globl	_abi_test_clobber_r15
.private_extern _abi_test_clobber_r15

.p2align	4
_abi_test_clobber_r15:
_CET_ENDBR
	xorq	%r15,%r15
	ret

.globl	_abi_test_clobber_xmm0
.private_extern _abi_test_clobber_xmm0

.p2align	4
_abi_test_clobber_xmm0:
_CET_ENDBR
	pxor	%xmm0,%xmm0
	ret

.globl	_abi_test_clobber_xmm1
.private_extern _abi_test_clobber_xmm1

.p2align	4
_abi_test_clobber_xmm1:
_CET_ENDBR
	pxor	%xmm1,%xmm1
	ret

.globl	_abi_test_clobber_xmm2
.private_extern _abi_test_clobber_xmm2

.p2align	4
_abi_test_clobber_xmm2:
_CET_ENDBR
	pxor	%xmm2,%xmm2
	ret

.globl	_abi_test_clobber_xmm3
.private_extern _abi_test_clobber_xmm3

.p2align	4
_abi_test_clobber_xmm3:
_CET_ENDBR
	pxor	%xmm3,%xmm3
	ret

.globl	_abi_test_clobber_xmm4
.private_extern _abi_test_clobber_xmm4

.p2align	4
_abi_test_clobber_xmm4:
_CET_ENDBR
	pxor	%xmm4,%xmm4
	ret

.globl	_abi_test_clobber_xmm5
.private_extern _abi_test_clobber_xmm5

.p2align	4
_abi_test_clobber_xmm5:
_CET_ENDBR
	pxor	%xmm5,%xmm5
	ret

.globl	_abi_test_clobber_xmm6
.private_extern _abi_test_clobber_xmm6

.p2align	4
_abi_test_clobber_xmm6:
_CET_ENDBR
	pxor	%xmm6,%xmm6
	ret

.globl	_abi_test_clobber_xmm7
.private_extern _abi_test_clobber_xmm7

.p2align	4
_abi_test_clobber_xmm7:
_CET_ENDBR
	pxor	%xmm7,%xmm7
	ret

.globl	_abi_test_clobber_xmm8
.private_extern _abi_test_clobber_xmm8

.p2align	4
_abi_test_clobber_xmm8:
_CET_ENDBR
	pxor	%xmm8,%xmm8
	ret

.globl	_abi_test_clobber_xmm9
.private_extern _abi_test_clobber_xmm9

.p2align	4
_abi_test_clobber_xmm9:
_CET_ENDBR
	pxor	%xmm9,%xmm9
	ret

.globl	_abi_test_clobber_xmm10
.private_extern _abi_test_clobber_xmm10

.p2align	4
_abi_test_clobber_xmm10:
_CET_ENDBR
	pxor	%xmm10,%xmm10
	ret

.globl	_abi_test_clobber_xmm11
.private_extern _abi_test_clobber_xmm11

.p2align	4
_abi_test_clobber_xmm11:
_CET_ENDBR
	pxor	%xmm11,%xmm11
	ret

.globl	_abi_test_clobber_xmm12
.private_extern _abi_test_clobber_xmm12

.p2align	4
_abi_test_clobber_xmm12:
_CET_ENDBR
	pxor	%xmm12,%xmm12
	ret

.globl	_abi_test_clobber_xmm13
.private_extern _abi_test_clobber_xmm13

.p2align	4
_abi_test_clobber_xmm13:
_CET_ENDBR
	pxor	%xmm13,%xmm13
	ret

.globl	_abi_test_clobber_xmm14
.private_extern _abi_test_clobber_xmm14

.p2align	4
_abi_test_clobber_xmm14:
_CET_ENDBR
	pxor	%xmm14,%xmm14
	ret

.globl	_abi_test_clobber_xmm15
.private_extern _abi_test_clobber_xmm15

.p2align	4
_abi_test_clobber_xmm15:
_CET_ENDBR
	pxor	%xmm15,%xmm15
	ret




.globl	_abi_test_bad_unwind_wrong_register
.private_extern _abi_test_bad_unwind_wrong_register

.p2align	4
_abi_test_bad_unwind_wrong_register:


_CET_ENDBR
	pushq	%r12






	nop
	popq	%r12

	ret







.globl	_abi_test_bad_unwind_temporary
.private_extern _abi_test_bad_unwind_temporary

.p2align	4
_abi_test_bad_unwind_temporary:


_CET_ENDBR
	pushq	%r12




	movq	%r12,%rax
	incq	%rax
	movq	%rax,(%rsp)



	movq	%r12,(%rsp)


	popq	%r12

	ret







.globl	_abi_test_get_and_clear_direction_flag
.private_extern _abi_test_get_and_clear_direction_flag

_abi_test_get_and_clear_direction_flag:
_CET_ENDBR
	pushfq
	popq	%rax
	andq	$0x400,%rax
	shrq	$10,%rax
	cld
	ret




.globl	_abi_test_set_direction_flag
.private_extern _abi_test_set_direction_flag

_abi_test_set_direction_flag:
_CET_ENDBR
	std
	ret

#endif
