blob: 99006695ad46d8a7a89bb4111f58fea040c8a3bd [file] [log] [blame]
; This file is generated from a similarly-named Perl script in the BoringSSL
; source tree. Do not edit by hand.
default rel
%define XMMWORD
%define YMMWORD
%define ZMMWORD
%ifdef BORINGSSL_PREFIX
%include "boringssl_prefix_symbols_nasm.inc"
%endif
section .text code align=64
global abi_test_trampoline
ALIGN 16
abi_test_trampoline:
$L$abi_test_trampoline_seh_begin:
sub rsp,344
$L$abi_test_trampoline_seh_prolog_alloc:
mov QWORD[112+rsp],rbx
$L$abi_test_trampoline_seh_prolog_rbx:
mov QWORD[120+rsp],rbp
$L$abi_test_trampoline_seh_prolog_rbp:
mov QWORD[128+rsp],rdi
$L$abi_test_trampoline_seh_prolog_rdi:
mov QWORD[136+rsp],rsi
$L$abi_test_trampoline_seh_prolog_rsi:
mov QWORD[144+rsp],r12
$L$abi_test_trampoline_seh_prolog_r12:
mov QWORD[152+rsp],r13
$L$abi_test_trampoline_seh_prolog_r13:
mov QWORD[160+rsp],r14
$L$abi_test_trampoline_seh_prolog_r14:
mov QWORD[168+rsp],r15
$L$abi_test_trampoline_seh_prolog_r15:
movdqa XMMWORD[176+rsp],xmm6
$L$abi_test_trampoline_seh_prolog_xmm6:
movdqa XMMWORD[192+rsp],xmm7
$L$abi_test_trampoline_seh_prolog_xmm7:
movdqa XMMWORD[208+rsp],xmm8
$L$abi_test_trampoline_seh_prolog_xmm8:
movdqa XMMWORD[224+rsp],xmm9
$L$abi_test_trampoline_seh_prolog_xmm9:
movdqa XMMWORD[240+rsp],xmm10
$L$abi_test_trampoline_seh_prolog_xmm10:
movdqa XMMWORD[256+rsp],xmm11
$L$abi_test_trampoline_seh_prolog_xmm11:
movdqa XMMWORD[272+rsp],xmm12
$L$abi_test_trampoline_seh_prolog_xmm12:
movdqa XMMWORD[288+rsp],xmm13
$L$abi_test_trampoline_seh_prolog_xmm13:
movdqa XMMWORD[304+rsp],xmm14
$L$abi_test_trampoline_seh_prolog_xmm14:
movdqa XMMWORD[320+rsp],xmm15
$L$abi_test_trampoline_seh_prolog_xmm15:
$L$abi_test_trampoline_seh_prolog_end:
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
DB 0F3h,0C3h ;repret
$L$abi_test_trampoline_seh_end:
global abi_test_clobber_rax
ALIGN 16
abi_test_clobber_rax:
xor rax,rax
DB 0F3h,0C3h ;repret
global abi_test_clobber_rbx
ALIGN 16
abi_test_clobber_rbx:
xor rbx,rbx
DB 0F3h,0C3h ;repret
global abi_test_clobber_rcx
ALIGN 16
abi_test_clobber_rcx:
xor rcx,rcx
DB 0F3h,0C3h ;repret
global abi_test_clobber_rdx
ALIGN 16
abi_test_clobber_rdx:
xor rdx,rdx
DB 0F3h,0C3h ;repret
global abi_test_clobber_rdi
ALIGN 16
abi_test_clobber_rdi:
xor rdi,rdi
DB 0F3h,0C3h ;repret
global abi_test_clobber_rsi
ALIGN 16
abi_test_clobber_rsi:
xor rsi,rsi
DB 0F3h,0C3h ;repret
global abi_test_clobber_rbp
ALIGN 16
abi_test_clobber_rbp:
xor rbp,rbp
DB 0F3h,0C3h ;repret
global abi_test_clobber_r8
ALIGN 16
abi_test_clobber_r8:
xor r8,r8
DB 0F3h,0C3h ;repret
global abi_test_clobber_r9
ALIGN 16
abi_test_clobber_r9:
xor r9,r9
DB 0F3h,0C3h ;repret
global abi_test_clobber_r10
ALIGN 16
abi_test_clobber_r10:
xor r10,r10
DB 0F3h,0C3h ;repret
global abi_test_clobber_r11
ALIGN 16
abi_test_clobber_r11:
xor r11,r11
DB 0F3h,0C3h ;repret
global abi_test_clobber_r12
ALIGN 16
abi_test_clobber_r12:
xor r12,r12
DB 0F3h,0C3h ;repret
global abi_test_clobber_r13
ALIGN 16
abi_test_clobber_r13:
xor r13,r13
DB 0F3h,0C3h ;repret
global abi_test_clobber_r14
ALIGN 16
abi_test_clobber_r14:
xor r14,r14
DB 0F3h,0C3h ;repret
global abi_test_clobber_r15
ALIGN 16
abi_test_clobber_r15:
xor r15,r15
DB 0F3h,0C3h ;repret
global abi_test_clobber_xmm0
ALIGN 16
abi_test_clobber_xmm0:
pxor xmm0,xmm0
DB 0F3h,0C3h ;repret
global abi_test_clobber_xmm1
ALIGN 16
abi_test_clobber_xmm1:
pxor xmm1,xmm1
DB 0F3h,0C3h ;repret
global abi_test_clobber_xmm2
ALIGN 16
abi_test_clobber_xmm2:
pxor xmm2,xmm2
DB 0F3h,0C3h ;repret
global abi_test_clobber_xmm3
ALIGN 16
abi_test_clobber_xmm3:
pxor xmm3,xmm3
DB 0F3h,0C3h ;repret
global abi_test_clobber_xmm4
ALIGN 16
abi_test_clobber_xmm4:
pxor xmm4,xmm4
DB 0F3h,0C3h ;repret
global abi_test_clobber_xmm5
ALIGN 16
abi_test_clobber_xmm5:
pxor xmm5,xmm5
DB 0F3h,0C3h ;repret
global abi_test_clobber_xmm6
ALIGN 16
abi_test_clobber_xmm6:
pxor xmm6,xmm6
DB 0F3h,0C3h ;repret
global abi_test_clobber_xmm7
ALIGN 16
abi_test_clobber_xmm7:
pxor xmm7,xmm7
DB 0F3h,0C3h ;repret
global abi_test_clobber_xmm8
ALIGN 16
abi_test_clobber_xmm8:
pxor xmm8,xmm8
DB 0F3h,0C3h ;repret
global abi_test_clobber_xmm9
ALIGN 16
abi_test_clobber_xmm9:
pxor xmm9,xmm9
DB 0F3h,0C3h ;repret
global abi_test_clobber_xmm10
ALIGN 16
abi_test_clobber_xmm10:
pxor xmm10,xmm10
DB 0F3h,0C3h ;repret
global abi_test_clobber_xmm11
ALIGN 16
abi_test_clobber_xmm11:
pxor xmm11,xmm11
DB 0F3h,0C3h ;repret
global abi_test_clobber_xmm12
ALIGN 16
abi_test_clobber_xmm12:
pxor xmm12,xmm12
DB 0F3h,0C3h ;repret
global abi_test_clobber_xmm13
ALIGN 16
abi_test_clobber_xmm13:
pxor xmm13,xmm13
DB 0F3h,0C3h ;repret
global abi_test_clobber_xmm14
ALIGN 16
abi_test_clobber_xmm14:
pxor xmm14,xmm14
DB 0F3h,0C3h ;repret
global abi_test_clobber_xmm15
ALIGN 16
abi_test_clobber_xmm15:
pxor xmm15,xmm15
DB 0F3h,0C3h ;repret
global abi_test_bad_unwind_wrong_register
ALIGN 16
abi_test_bad_unwind_wrong_register:
$L$abi_test_bad_unwind_wrong_register_seh_begin:
push r12
$L$abi_test_bad_unwind_wrong_register_seh_push_r13:
nop
pop r12
DB 0F3h,0C3h ;repret
$L$abi_test_bad_unwind_wrong_register_seh_end:
global abi_test_bad_unwind_temporary
ALIGN 16
abi_test_bad_unwind_temporary:
$L$abi_test_bad_unwind_temporary_seh_begin:
push r12
$L$abi_test_bad_unwind_temporary_seh_push_r12:
mov rax,r12
inc rax
mov QWORD[rsp],rax
mov QWORD[rsp],r12
pop r12
DB 0F3h,0C3h ;repret
$L$abi_test_bad_unwind_temporary_seh_end:
global abi_test_get_and_clear_direction_flag
abi_test_get_and_clear_direction_flag:
pushfq
pop rax
and rax,0x400
shr rax,10
cld
DB 0F3h,0C3h ;repret
global abi_test_set_direction_flag
abi_test_set_direction_flag:
std
DB 0F3h,0C3h ;repret
global abi_test_bad_unwind_epilog
ALIGN 16
abi_test_bad_unwind_epilog:
$L$abi_test_bad_unwind_epilog_seh_begin:
push r12
$L$abi_test_bad_unwind_epilog_seh_push_r12:
nop
pop r12
nop
DB 0F3h,0C3h ;repret
$L$abi_test_bad_unwind_epilog_seh_end:
section .pdata rdata align=4
ALIGN 4
DD $L$abi_test_trampoline_seh_begin wrt ..imagebase
DD $L$abi_test_trampoline_seh_end wrt ..imagebase
DD $L$abi_test_trampoline_seh_info wrt ..imagebase
DD $L$abi_test_bad_unwind_wrong_register_seh_begin wrt ..imagebase
DD $L$abi_test_bad_unwind_wrong_register_seh_end wrt ..imagebase
DD $L$abi_test_bad_unwind_wrong_register_seh_info wrt ..imagebase
DD $L$abi_test_bad_unwind_temporary_seh_begin wrt ..imagebase
DD $L$abi_test_bad_unwind_temporary_seh_end wrt ..imagebase
DD $L$abi_test_bad_unwind_temporary_seh_info wrt ..imagebase
DD $L$abi_test_bad_unwind_epilog_seh_begin wrt ..imagebase
DD $L$abi_test_bad_unwind_epilog_seh_end wrt ..imagebase
DD $L$abi_test_bad_unwind_epilog_seh_info wrt ..imagebase
section .xdata rdata align=8
ALIGN 8
$L$abi_test_trampoline_seh_info:
DB 1
DB $L$abi_test_trampoline_seh_prolog_end-$L$abi_test_trampoline_seh_begin
DB 38
DB 0
DB $L$abi_test_trampoline_seh_prolog_xmm15-$L$abi_test_trampoline_seh_begin
DB 248
DW 20
DB $L$abi_test_trampoline_seh_prolog_xmm14-$L$abi_test_trampoline_seh_begin
DB 232
DW 19
DB $L$abi_test_trampoline_seh_prolog_xmm13-$L$abi_test_trampoline_seh_begin
DB 216
DW 18
DB $L$abi_test_trampoline_seh_prolog_xmm12-$L$abi_test_trampoline_seh_begin
DB 200
DW 17
DB $L$abi_test_trampoline_seh_prolog_xmm11-$L$abi_test_trampoline_seh_begin
DB 184
DW 16
DB $L$abi_test_trampoline_seh_prolog_xmm10-$L$abi_test_trampoline_seh_begin
DB 168
DW 15
DB $L$abi_test_trampoline_seh_prolog_xmm9-$L$abi_test_trampoline_seh_begin
DB 152
DW 14
DB $L$abi_test_trampoline_seh_prolog_xmm8-$L$abi_test_trampoline_seh_begin
DB 136
DW 13
DB $L$abi_test_trampoline_seh_prolog_xmm7-$L$abi_test_trampoline_seh_begin
DB 120
DW 12
DB $L$abi_test_trampoline_seh_prolog_xmm6-$L$abi_test_trampoline_seh_begin
DB 104
DW 11
DB $L$abi_test_trampoline_seh_prolog_r15-$L$abi_test_trampoline_seh_begin
DB 244
DW 21
DB $L$abi_test_trampoline_seh_prolog_r14-$L$abi_test_trampoline_seh_begin
DB 228
DW 20
DB $L$abi_test_trampoline_seh_prolog_r13-$L$abi_test_trampoline_seh_begin
DB 212
DW 19
DB $L$abi_test_trampoline_seh_prolog_r12-$L$abi_test_trampoline_seh_begin
DB 196
DW 18
DB $L$abi_test_trampoline_seh_prolog_rsi-$L$abi_test_trampoline_seh_begin
DB 100
DW 17
DB $L$abi_test_trampoline_seh_prolog_rdi-$L$abi_test_trampoline_seh_begin
DB 116
DW 16
DB $L$abi_test_trampoline_seh_prolog_rbp-$L$abi_test_trampoline_seh_begin
DB 84
DW 15
DB $L$abi_test_trampoline_seh_prolog_rbx-$L$abi_test_trampoline_seh_begin
DB 52
DW 14
DB $L$abi_test_trampoline_seh_prolog_alloc-$L$abi_test_trampoline_seh_begin
DB 1
DW 43
ALIGN 8
$L$abi_test_bad_unwind_wrong_register_seh_info:
DB 1
DB $L$abi_test_bad_unwind_wrong_register_seh_push_r13-$L$abi_test_bad_unwind_wrong_register_seh_begin
DB 1
DB 0
DB $L$abi_test_bad_unwind_wrong_register_seh_push_r13-$L$abi_test_bad_unwind_wrong_register_seh_begin
DB 208
ALIGN 8
$L$abi_test_bad_unwind_temporary_seh_info:
DB 1
DB $L$abi_test_bad_unwind_temporary_seh_push_r12-$L$abi_test_bad_unwind_temporary_seh_begin
DB 1
DB 0
DB $L$abi_test_bad_unwind_temporary_seh_push_r12-$L$abi_test_bad_unwind_temporary_seh_begin
DB 192
ALIGN 8
$L$abi_test_bad_unwind_epilog_seh_info:
DB 1
DB $L$abi_test_bad_unwind_epilog_seh_push_r12-$L$abi_test_bad_unwind_epilog_seh_begin
DB 1
DB 0
DB $L$abi_test_bad_unwind_epilog_seh_push_r12-$L$abi_test_bad_unwind_epilog_seh_begin
DB 192