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

%ifidn __OUTPUT_FORMAT__, win64
default	rel
%define XMMWORD
%define YMMWORD
%define ZMMWORD
%define _CET_ENDBR

%ifdef BORINGSSL_PREFIX
%include "boringssl_prefix_symbols_internal_x86_64_win_asm.inc"
%endif
section	.text code align=64









global	abi_test_trampoline

ALIGN	16
abi_test_trampoline:

$L$SEH_begin_abi_test_trampoline_1:
_CET_ENDBR









	sub	rsp,344

$L$SEH_prologue_abi_test_trampoline_2:
	mov	QWORD[112+rsp],rbx

$L$SEH_prologue_abi_test_trampoline_3:
	mov	QWORD[120+rsp],rbp

$L$SEH_prologue_abi_test_trampoline_4:
	mov	QWORD[128+rsp],rdi

$L$SEH_prologue_abi_test_trampoline_5:
	mov	QWORD[136+rsp],rsi

$L$SEH_prologue_abi_test_trampoline_6:
	mov	QWORD[144+rsp],r12

$L$SEH_prologue_abi_test_trampoline_7:
	mov	QWORD[152+rsp],r13

$L$SEH_prologue_abi_test_trampoline_8:
	mov	QWORD[160+rsp],r14

$L$SEH_prologue_abi_test_trampoline_9:
	mov	QWORD[168+rsp],r15

$L$SEH_prologue_abi_test_trampoline_10:
	movdqa	XMMWORD[176+rsp],xmm6

$L$SEH_prologue_abi_test_trampoline_11:
	movdqa	XMMWORD[192+rsp],xmm7

$L$SEH_prologue_abi_test_trampoline_12:
	movdqa	XMMWORD[208+rsp],xmm8

$L$SEH_prologue_abi_test_trampoline_13:
	movdqa	XMMWORD[224+rsp],xmm9

$L$SEH_prologue_abi_test_trampoline_14:
	movdqa	XMMWORD[240+rsp],xmm10

$L$SEH_prologue_abi_test_trampoline_15:
	movdqa	XMMWORD[256+rsp],xmm11

$L$SEH_prologue_abi_test_trampoline_16:
	movdqa	XMMWORD[272+rsp],xmm12

$L$SEH_prologue_abi_test_trampoline_17:
	movdqa	XMMWORD[288+rsp],xmm13

$L$SEH_prologue_abi_test_trampoline_18:
	movdqa	XMMWORD[304+rsp],xmm14

$L$SEH_prologue_abi_test_trampoline_19:
	movdqa	XMMWORD[320+rsp],xmm15

$L$SEH_prologue_abi_test_trampoline_20:
$L$SEH_endprologue_abi_test_trampoline_21:
	mov	rbx,QWORD[rdx]
	mov	rbp,QWORD[8+rdx]
	mov	rdi,QWORD[16+rdx]
	mov	rsi,QWORD[24+rdx]
	mov	r12,QWORD[32+rdx]
	mov	r13,QWORD[40+rdx]
	mov	r14,QWORD[48+rdx]
	mov	r15,QWORD[56+rdx]
	movdqa	xmm6,XMMWORD[64+rdx]
	movdqa	xmm7,XMMWORD[80+rdx]
	movdqa	xmm8,XMMWORD[96+rdx]
	movdqa	xmm9,XMMWORD[112+rdx]
	movdqa	xmm10,XMMWORD[128+rdx]
	movdqa	xmm11,XMMWORD[144+rdx]
	movdqa	xmm12,XMMWORD[160+rdx]
	movdqa	xmm13,XMMWORD[176+rdx]
	movdqa	xmm14,XMMWORD[192+rdx]
	movdqa	xmm15,XMMWORD[208+rdx]

	mov	QWORD[88+rsp],rcx
	mov	QWORD[96+rsp],rdx




	mov	r10,r8
	mov	r11,r9
	dec	r11
	js	NEAR $L$args_done
	mov	rcx,QWORD[r10]
	add	r10,8
	dec	r11
	js	NEAR $L$args_done
	mov	rdx,QWORD[r10]
	add	r10,8
	dec	r11
	js	NEAR $L$args_done
	mov	r8,QWORD[r10]
	add	r10,8
	dec	r11
	js	NEAR $L$args_done
	mov	r9,QWORD[r10]
	add	r10,8
	lea	rax,[32+rsp]
$L$args_loop:
	dec	r11
	js	NEAR $L$args_done






	mov	QWORD[104+rsp],r11
	mov	r11,QWORD[r10]
	mov	QWORD[rax],r11
	mov	r11,QWORD[104+rsp]

	add	r10,8
	add	rax,8
	jmp	NEAR $L$args_loop

$L$args_done:
	mov	rax,QWORD[88+rsp]
	mov	r10,QWORD[384+rsp]
	test	r10,r10
	jz	NEAR $L$no_unwind


	pushfq
	or	QWORD[rsp],0x100
	popfq



	nop
global	abi_test_unwind_start
abi_test_unwind_start:

	call	rax
global	abi_test_unwind_return
abi_test_unwind_return:




	pushfq
	and	QWORD[rsp],-0x101
	popfq
global	abi_test_unwind_stop
abi_test_unwind_stop:

	jmp	NEAR $L$call_done

$L$no_unwind:
	call	rax

$L$call_done:

	mov	rdx,QWORD[96+rsp]
	mov	QWORD[rdx],rbx
	mov	QWORD[8+rdx],rbp
	mov	QWORD[16+rdx],rdi
	mov	QWORD[24+rdx],rsi
	mov	QWORD[32+rdx],r12
	mov	QWORD[40+rdx],r13
	mov	QWORD[48+rdx],r14
	mov	QWORD[56+rdx],r15
	movdqa	XMMWORD[64+rdx],xmm6
	movdqa	XMMWORD[80+rdx],xmm7
	movdqa	XMMWORD[96+rdx],xmm8
	movdqa	XMMWORD[112+rdx],xmm9
	movdqa	XMMWORD[128+rdx],xmm10
	movdqa	XMMWORD[144+rdx],xmm11
	movdqa	XMMWORD[160+rdx],xmm12
	movdqa	XMMWORD[176+rdx],xmm13
	movdqa	XMMWORD[192+rdx],xmm14
	movdqa	XMMWORD[208+rdx],xmm15
	mov	rbx,QWORD[112+rsp]

	mov	rbp,QWORD[120+rsp]

	mov	rdi,QWORD[128+rsp]

	mov	rsi,QWORD[136+rsp]

	mov	r12,QWORD[144+rsp]

	mov	r13,QWORD[152+rsp]

	mov	r14,QWORD[160+rsp]

	mov	r15,QWORD[168+rsp]

	movdqa	xmm6,XMMWORD[176+rsp]

	movdqa	xmm7,XMMWORD[192+rsp]

	movdqa	xmm8,XMMWORD[208+rsp]

	movdqa	xmm9,XMMWORD[224+rsp]

	movdqa	xmm10,XMMWORD[240+rsp]

	movdqa	xmm11,XMMWORD[256+rsp]

	movdqa	xmm12,XMMWORD[272+rsp]

	movdqa	xmm13,XMMWORD[288+rsp]

	movdqa	xmm14,XMMWORD[304+rsp]

	movdqa	xmm15,XMMWORD[320+rsp]

	add	rsp,344



	ret

$L$SEH_end_abi_test_trampoline_22:

global	abi_test_clobber_rax

ALIGN	16
abi_test_clobber_rax:
_CET_ENDBR
	xor	rax,rax
	ret

global	abi_test_clobber_rbx

ALIGN	16
abi_test_clobber_rbx:
_CET_ENDBR
	xor	rbx,rbx
	ret

global	abi_test_clobber_rcx

ALIGN	16
abi_test_clobber_rcx:
_CET_ENDBR
	xor	rcx,rcx
	ret

global	abi_test_clobber_rdx

ALIGN	16
abi_test_clobber_rdx:
_CET_ENDBR
	xor	rdx,rdx
	ret

global	abi_test_clobber_rdi

ALIGN	16
abi_test_clobber_rdi:
_CET_ENDBR
	xor	rdi,rdi
	ret

global	abi_test_clobber_rsi

ALIGN	16
abi_test_clobber_rsi:
_CET_ENDBR
	xor	rsi,rsi
	ret

global	abi_test_clobber_rbp

ALIGN	16
abi_test_clobber_rbp:
_CET_ENDBR
	xor	rbp,rbp
	ret

global	abi_test_clobber_r8

ALIGN	16
abi_test_clobber_r8:
_CET_ENDBR
	xor	r8,r8
	ret

global	abi_test_clobber_r9

ALIGN	16
abi_test_clobber_r9:
_CET_ENDBR
	xor	r9,r9
	ret

global	abi_test_clobber_r10

ALIGN	16
abi_test_clobber_r10:
_CET_ENDBR
	xor	r10,r10
	ret

global	abi_test_clobber_r11

ALIGN	16
abi_test_clobber_r11:
_CET_ENDBR
	xor	r11,r11
	ret

global	abi_test_clobber_r12

ALIGN	16
abi_test_clobber_r12:
_CET_ENDBR
	xor	r12,r12
	ret

global	abi_test_clobber_r13

ALIGN	16
abi_test_clobber_r13:
_CET_ENDBR
	xor	r13,r13
	ret

global	abi_test_clobber_r14

ALIGN	16
abi_test_clobber_r14:
_CET_ENDBR
	xor	r14,r14
	ret

global	abi_test_clobber_r15

ALIGN	16
abi_test_clobber_r15:
_CET_ENDBR
	xor	r15,r15
	ret

global	abi_test_clobber_xmm0

ALIGN	16
abi_test_clobber_xmm0:
_CET_ENDBR
	pxor	xmm0,xmm0
	ret

global	abi_test_clobber_xmm1

ALIGN	16
abi_test_clobber_xmm1:
_CET_ENDBR
	pxor	xmm1,xmm1
	ret

global	abi_test_clobber_xmm2

ALIGN	16
abi_test_clobber_xmm2:
_CET_ENDBR
	pxor	xmm2,xmm2
	ret

global	abi_test_clobber_xmm3

ALIGN	16
abi_test_clobber_xmm3:
_CET_ENDBR
	pxor	xmm3,xmm3
	ret

global	abi_test_clobber_xmm4

ALIGN	16
abi_test_clobber_xmm4:
_CET_ENDBR
	pxor	xmm4,xmm4
	ret

global	abi_test_clobber_xmm5

ALIGN	16
abi_test_clobber_xmm5:
_CET_ENDBR
	pxor	xmm5,xmm5
	ret

global	abi_test_clobber_xmm6

ALIGN	16
abi_test_clobber_xmm6:
_CET_ENDBR
	pxor	xmm6,xmm6
	ret

global	abi_test_clobber_xmm7

ALIGN	16
abi_test_clobber_xmm7:
_CET_ENDBR
	pxor	xmm7,xmm7
	ret

global	abi_test_clobber_xmm8

ALIGN	16
abi_test_clobber_xmm8:
_CET_ENDBR
	pxor	xmm8,xmm8
	ret

global	abi_test_clobber_xmm9

ALIGN	16
abi_test_clobber_xmm9:
_CET_ENDBR
	pxor	xmm9,xmm9
	ret

global	abi_test_clobber_xmm10

ALIGN	16
abi_test_clobber_xmm10:
_CET_ENDBR
	pxor	xmm10,xmm10
	ret

global	abi_test_clobber_xmm11

ALIGN	16
abi_test_clobber_xmm11:
_CET_ENDBR
	pxor	xmm11,xmm11
	ret

global	abi_test_clobber_xmm12

ALIGN	16
abi_test_clobber_xmm12:
_CET_ENDBR
	pxor	xmm12,xmm12
	ret

global	abi_test_clobber_xmm13

ALIGN	16
abi_test_clobber_xmm13:
_CET_ENDBR
	pxor	xmm13,xmm13
	ret

global	abi_test_clobber_xmm14

ALIGN	16
abi_test_clobber_xmm14:
_CET_ENDBR
	pxor	xmm14,xmm14
	ret

global	abi_test_clobber_xmm15

ALIGN	16
abi_test_clobber_xmm15:
_CET_ENDBR
	pxor	xmm15,xmm15
	ret




global	abi_test_bad_unwind_wrong_register

ALIGN	16
abi_test_bad_unwind_wrong_register:

$L$SEH_begin_abi_test_bad_unwind_wrong_register_1:
_CET_ENDBR
	push	r12

$L$SEH_prologue_abi_test_bad_unwind_wrong_register_2:
$L$SEH_endprologue_abi_test_bad_unwind_wrong_register_3:



	nop
	pop	r12

	ret
$L$SEH_end_abi_test_bad_unwind_wrong_register_4:






global	abi_test_bad_unwind_temporary

ALIGN	16
abi_test_bad_unwind_temporary:

$L$SEH_begin_abi_test_bad_unwind_temporary_1:
_CET_ENDBR
	push	r12

$L$SEH_prologue_abi_test_bad_unwind_temporary_2:
$L$SEH_endprologue_abi_test_bad_unwind_temporary_3:

	mov	rax,r12
	inc	rax
	mov	QWORD[rsp],rax



	mov	QWORD[rsp],r12


	pop	r12

	ret

$L$SEH_end_abi_test_bad_unwind_temporary_4:





global	abi_test_get_and_clear_direction_flag

abi_test_get_and_clear_direction_flag:
_CET_ENDBR
	pushfq
	pop	rax
	and	rax,0x400
	shr	rax,10
	cld
	ret




global	abi_test_set_direction_flag

abi_test_set_direction_flag:
_CET_ENDBR
	std
	ret





global	abi_test_bad_unwind_epilog

ALIGN	16
abi_test_bad_unwind_epilog:
$L$SEH_begin_abi_test_bad_unwind_epilog_1:
	push	r12
$L$SEH_prologue_abi_test_bad_unwind_epilog_2:
$L$SEH_endprologue_abi_test_bad_unwind_epilog_3:

	nop


	pop	r12
	nop
	ret
$L$SEH_end_abi_test_bad_unwind_epilog_4:

section	.pdata rdata align=4
ALIGN	4
	DD	$L$SEH_begin_abi_test_trampoline_1 wrt ..imagebase
	DD	$L$SEH_end_abi_test_trampoline_22 wrt ..imagebase
	DD	$L$SEH_info_abi_test_trampoline_0 wrt ..imagebase

	DD	$L$SEH_begin_abi_test_bad_unwind_wrong_register_1 wrt ..imagebase
	DD	$L$SEH_end_abi_test_bad_unwind_wrong_register_4 wrt ..imagebase
	DD	$L$SEH_info_abi_test_bad_unwind_wrong_register_0 wrt ..imagebase

	DD	$L$SEH_begin_abi_test_bad_unwind_temporary_1 wrt ..imagebase
	DD	$L$SEH_end_abi_test_bad_unwind_temporary_4 wrt ..imagebase
	DD	$L$SEH_info_abi_test_bad_unwind_temporary_0 wrt ..imagebase

	DD	$L$SEH_begin_abi_test_bad_unwind_epilog_1 wrt ..imagebase
	DD	$L$SEH_end_abi_test_bad_unwind_epilog_4 wrt ..imagebase
	DD	$L$SEH_info_abi_test_bad_unwind_epilog_0 wrt ..imagebase


section	.xdata rdata align=8
ALIGN	4
$L$SEH_info_abi_test_trampoline_0:
	DB	1
	DB	$L$SEH_endprologue_abi_test_trampoline_21-$L$SEH_begin_abi_test_trampoline_1
	DB	38
	DB	0
	DB	$L$SEH_prologue_abi_test_trampoline_20-$L$SEH_begin_abi_test_trampoline_1
	DB	248
	DW	20
	DB	$L$SEH_prologue_abi_test_trampoline_19-$L$SEH_begin_abi_test_trampoline_1
	DB	232
	DW	19
	DB	$L$SEH_prologue_abi_test_trampoline_18-$L$SEH_begin_abi_test_trampoline_1
	DB	216
	DW	18
	DB	$L$SEH_prologue_abi_test_trampoline_17-$L$SEH_begin_abi_test_trampoline_1
	DB	200
	DW	17
	DB	$L$SEH_prologue_abi_test_trampoline_16-$L$SEH_begin_abi_test_trampoline_1
	DB	184
	DW	16
	DB	$L$SEH_prologue_abi_test_trampoline_15-$L$SEH_begin_abi_test_trampoline_1
	DB	168
	DW	15
	DB	$L$SEH_prologue_abi_test_trampoline_14-$L$SEH_begin_abi_test_trampoline_1
	DB	152
	DW	14
	DB	$L$SEH_prologue_abi_test_trampoline_13-$L$SEH_begin_abi_test_trampoline_1
	DB	136
	DW	13
	DB	$L$SEH_prologue_abi_test_trampoline_12-$L$SEH_begin_abi_test_trampoline_1
	DB	120
	DW	12
	DB	$L$SEH_prologue_abi_test_trampoline_11-$L$SEH_begin_abi_test_trampoline_1
	DB	104
	DW	11
	DB	$L$SEH_prologue_abi_test_trampoline_10-$L$SEH_begin_abi_test_trampoline_1
	DB	244
	DW	21
	DB	$L$SEH_prologue_abi_test_trampoline_9-$L$SEH_begin_abi_test_trampoline_1
	DB	228
	DW	20
	DB	$L$SEH_prologue_abi_test_trampoline_8-$L$SEH_begin_abi_test_trampoline_1
	DB	212
	DW	19
	DB	$L$SEH_prologue_abi_test_trampoline_7-$L$SEH_begin_abi_test_trampoline_1
	DB	196
	DW	18
	DB	$L$SEH_prologue_abi_test_trampoline_6-$L$SEH_begin_abi_test_trampoline_1
	DB	100
	DW	17
	DB	$L$SEH_prologue_abi_test_trampoline_5-$L$SEH_begin_abi_test_trampoline_1
	DB	116
	DW	16
	DB	$L$SEH_prologue_abi_test_trampoline_4-$L$SEH_begin_abi_test_trampoline_1
	DB	84
	DW	15
	DB	$L$SEH_prologue_abi_test_trampoline_3-$L$SEH_begin_abi_test_trampoline_1
	DB	52
	DW	14
	DB	$L$SEH_prologue_abi_test_trampoline_2-$L$SEH_begin_abi_test_trampoline_1
	DB	1
	DW	43

$L$SEH_info_abi_test_bad_unwind_wrong_register_0:
	DB	1
	DB	$L$SEH_endprologue_abi_test_bad_unwind_wrong_register_3-$L$SEH_begin_abi_test_bad_unwind_wrong_register_1
	DB	1
	DB	0
	DB	$L$SEH_prologue_abi_test_bad_unwind_wrong_register_2-$L$SEH_begin_abi_test_bad_unwind_wrong_register_1
	DB	208

	DW	0
$L$SEH_info_abi_test_bad_unwind_temporary_0:
	DB	1
	DB	$L$SEH_endprologue_abi_test_bad_unwind_temporary_3-$L$SEH_begin_abi_test_bad_unwind_temporary_1
	DB	1
	DB	0
	DB	$L$SEH_prologue_abi_test_bad_unwind_temporary_2-$L$SEH_begin_abi_test_bad_unwind_temporary_1
	DB	192

	DW	0
$L$SEH_info_abi_test_bad_unwind_epilog_0:
	DB	1
	DB	$L$SEH_endprologue_abi_test_bad_unwind_epilog_3-$L$SEH_begin_abi_test_bad_unwind_epilog_1
	DB	1
	DB	0
	DB	$L$SEH_prologue_abi_test_bad_unwind_epilog_2-$L$SEH_begin_abi_test_bad_unwind_epilog_1
	DB	192

	DW	0
%else
; Work around https://bugzilla.nasm.us/show_bug.cgi?id=3392738
ret
%endif
