.file "asm_subr.s"
#include <SYS.h>
#include <sys/regset.h>
#include <../assym.h>
ENTRY(_lwp_start)
movq %rax, %rdi
call _thrp_terminate
RET
SET_SIZE(_lwp_start)
ENTRY(_lwp_terminate)
SYSTRAP_RVAL1(lwp_exit)
RET
SET_SIZE(_lwp_terminate)
ENTRY(set_curthread)
movq %rdi, %fs:0
ret
SET_SIZE(set_curthread)
ENTRY(__lwp_park)
movq %rsi, %rdx
movq %rdi, %rsi
movq $0, %rdi
SYSTRAP_RVAL1(lwp_park)
SYSLWPERR
RET
SET_SIZE(__lwp_park)
ENTRY(__lwp_unpark)
movq %rdi, %rsi
movq $1, %rdi
SYSTRAP_RVAL1(lwp_park)
SYSLWPERR
RET
SET_SIZE(__lwp_unpark)
ENTRY(__lwp_unpark_all)
movq %rsi, %rdx
movq %rdi, %rsi
movq $2, %rdi
SYSTRAP_RVAL1(lwp_park)
SYSLWPERR
RET
SET_SIZE(__lwp_unpark_all)
ENTRY(__sighndlr)
.globl __sighndlrend
pushq %rbp
movq %rsp, %rbp
call *%rcx
leave
ret
__sighndlrend:
SET_SIZE(__sighndlr)
#undef sigsetjmp
#if SIZEOF_SIGJMP_BUF - _LONG_ALIGNMENT < SIZEOF_UCONTEXT_T
#error "sigjmp_buf is too small to contain a ucontext_t"
#else
#define REGOFF(reg) (reg * CLONGSIZE)
ENTRY2(sigsetjmp,_sigsetjmp)
pushq %rbp
movq %rsp, %rbp
subq $REGOFF(_NGREG), %rsp
movq %r15, REGOFF(REG_R15) (%rsp)
movq %r14, REGOFF(REG_R14) (%rsp)
movq %r13, REGOFF(REG_R13) (%rsp)
movq %r12, REGOFF(REG_R12) (%rsp)
movq %r11, REGOFF(REG_R11) (%rsp)
movq %r10, REGOFF(REG_R10) (%rsp)
movq %r9, REGOFF(REG_R9) (%rsp)
movq %r8, REGOFF(REG_R8) (%rsp)
movq %rdi, REGOFF(REG_RDI) (%rsp)
movq %rsi, REGOFF(REG_RSI) (%rsp)
movq %rbx, REGOFF(REG_RBX) (%rsp)
movq %rdx, REGOFF(REG_RDX) (%rsp)
movq %rcx, REGOFF(REG_RCX) (%rsp)
movq $0, REGOFF(REG_RAX) (%rsp)
movq $0, REGOFF(REG_TRAPNO) (%rsp)
movq $0, REGOFF(REG_ERR) (%rsp)
xorq %rax, %rax
movw %cs, %ax
movq %rax, REGOFF(REG_CS) (%rsp)
movq $0, REGOFF(REG_RFL) (%rsp)
movw %ss, %ax
movq %rax, REGOFF(REG_SS) (%rsp)
movw %fs, %ax
movq %rax, REGOFF(REG_FS) (%rsp)
movw %gs, %ax
movq %rax, REGOFF(REG_GS) (%rsp)
movw %es, %ax
movq %rax, REGOFF(REG_ES) (%rsp)
movw %ds, %ax
movq %rax, REGOFF(REG_DS) (%rsp)
movq %fs:0, %rax
movq %rax, REGOFF(REG_FSBASE) (%rsp)
movq $0, REGOFF(REG_GSBASE) (%rsp)
movq (%rbp), %rax
movq %rax, REGOFF(REG_RBP) (%rsp)
movq 8(%rbp), %rax
movq %rax, REGOFF(REG_RIP) (%rsp)
leaq 16(%rbp), %rax
movq %rax, REGOFF(REG_RSP) (%rsp)
movq %rsp, %rdx
call __csigsetjmp
xorq %rax, %rax
leave
ret
SET_SIZE(sigsetjmp)
SET_SIZE(_sigsetjmp)
#endif