;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;  ntapi: Native API core library                      ;;
;;  Copyright (C) 2013--2021  SysDeer Technologies, LLC ;;
;;  Released under GPLv2 and GPLv3; see COPYING.NTAPI.  ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

TITLE tt_fork_x86_64

.data
__tt_fork_impl_v1 PROTO C

.code
__tt_fork_v1 PROC
	push	rbp
	push	rcx
	push	rdx
	push	rbx
	push	rsi
	push	rdi
	push	r8
	push	r9
	push	r10
	push	r11
	push	r12
	push	r13
	push	r14
	push	r15

	sub rsp, 40h

	mov  rdx, rsp
	and  rdx, 15
	test rdx, rdx
	jne	__tt_fork_impl_adj_call

	mov	rcx, rsp
	call __tt_fork_impl_v1

	add rsp, 40h

	pop	r15
	pop	r14
	pop	r13
	pop	r12
	pop	r11
	pop	r10
	pop	r9
	pop	r8
	pop	rdi
	pop	rsi
	pop	rbx
	pop	rdx
	pop	rcx
	pop	rbp
	ret
__tt_fork_v1 ENDP

__tt_fork_impl_adj_call PROC
	push rdi

	mov	rcx, rsp
	mov	rdx, 1
	call __tt_fork_impl_v1

	pop	rdi

	add rsp, 40h

	pop	r15
	pop	r14
	pop	r13
	pop	r12
	pop	r11
	pop	r10
	pop	r9
	pop	r8
	pop	rdi
	pop	rsi
	pop	rbx
	pop	rdx
	pop	rcx
	pop	rbp
	ret
__tt_fork_impl_adj_call ENDP


__tt_fork_child_entry_point PROC
	xor	rax, rax
	mov	rsp, rcx

	add rsp, 40h

	pop	r15
	pop	r14
	pop	r13
	pop	r12
	pop	r11
	pop	r10
	pop	r9
	pop	r8
	pop	rdi
	pop	rsi
	pop	rbx
	pop	rdx
	pop	rcx
	pop	rbp
	ret
__tt_fork_child_entry_point ENDP


__tt_fork_child_entry_point_adj PROC
	xor	rax, rax
	mov	rsp, rcx

	pop	rdi

	add rsp, 40h

	pop	r15
	pop	r14
	pop	r13
	pop	r12
	pop	r11
	pop	r10
	pop	r9
	pop	r8
	pop	rdi
	pop	rsi
	pop	rbx
	pop	rdx
	pop	rcx
	pop	rbp
	ret
__tt_fork_child_entry_point_adj ENDP

END
