mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-07-08 04:08:32 +00:00
Perform more low-level code cleanup
This commit is contained in:
parent
c32e2d4486
commit
2d17ab016c
42 changed files with 977 additions and 265 deletions
|
@ -20,10 +20,26 @@
|
|||
|
||||
// Gets machine state.
|
||||
//
|
||||
// @note please use longerjmp() and setlongerjmp() for fibers
|
||||
// @note currently only gets general registers
|
||||
// @see setcontext()
|
||||
getcontext:
|
||||
pushf
|
||||
pop 176(%rdi)
|
||||
movaps %xmm0,480(%rdi)
|
||||
movaps %xmm1,496(%rdi)
|
||||
movaps %xmm2,512(%rdi)
|
||||
movaps %xmm3,528(%rdi)
|
||||
movaps %xmm4,544(%rdi)
|
||||
movaps %xmm5,560(%rdi)
|
||||
movaps %xmm6,576(%rdi)
|
||||
movaps %xmm7,592(%rdi)
|
||||
movaps %xmm8,608(%rdi)
|
||||
movaps %xmm9,624(%rdi)
|
||||
movaps %xmm10,640(%rdi)
|
||||
movaps %xmm11,656(%rdi)
|
||||
movaps %xmm12,672(%rdi)
|
||||
movaps %xmm13,688(%rdi)
|
||||
movaps %xmm14,704(%rdi)
|
||||
movaps %xmm15,720(%rdi)
|
||||
mov %r8,40(%rdi)
|
||||
mov %r9,48(%rdi)
|
||||
mov %r10,56(%rdi)
|
||||
|
@ -39,6 +55,8 @@ getcontext:
|
|||
mov %rdx,136(%rdi)
|
||||
mov %rax,144(%rdi)
|
||||
mov %rcx,152(%rdi)
|
||||
lea 320(%rdi),%rax
|
||||
mov %rax,224(%rdi)
|
||||
lea 8(%rsp),%rax
|
||||
mov %rax,160(%rdi)
|
||||
mov (%rsp),%rax
|
||||
|
@ -50,6 +68,22 @@ getcontext:
|
|||
.end
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
noasan noubsan noinstrument int getcontext(ucontext_t *uc) {
|
||||
asm volatile("movaps\t%%xmm0,%0" : /* no outputs */ : "m"(uc->__fpustate.xmm[0]));
|
||||
asm volatile("movaps\t%%xmm1,%0" : /* no outputs */ : "m"(uc->__fpustate.xmm[1]));
|
||||
asm volatile("movaps\t%%xmm2,%0" : /* no outputs */ : "m"(uc->__fpustate.xmm[2]));
|
||||
asm volatile("movaps\t%%xmm3,%0" : /* no outputs */ : "m"(uc->__fpustate.xmm[3]));
|
||||
asm volatile("movaps\t%%xmm4,%0" : /* no outputs */ : "m"(uc->__fpustate.xmm[4]));
|
||||
asm volatile("movaps\t%%xmm5,%0" : /* no outputs */ : "m"(uc->__fpustate.xmm[5]));
|
||||
asm volatile("movaps\t%%xmm6,%0" : /* no outputs */ : "m"(uc->__fpustate.xmm[6]));
|
||||
asm volatile("movaps\t%%xmm7,%0" : /* no outputs */ : "m"(uc->__fpustate.xmm[7]));
|
||||
asm volatile("movaps\t%%xmm8,%0" : /* no outputs */ : "m"(uc->__fpustate.xmm[8]));
|
||||
asm volatile("movaps\t%%xmm9,%0" : /* no outputs */ : "m"(uc->__fpustate.xmm[9]));
|
||||
asm volatile("movaps\t%%xmm10,%0" : /* no outputs */ : "m"(uc->__fpustate.xmm[10]));
|
||||
asm volatile("movaps\t%%xmm11,%0" : /* no outputs */ : "m"(uc->__fpustate.xmm[11]));
|
||||
asm volatile("movaps\t%%xmm12,%0" : /* no outputs */ : "m"(uc->__fpustate.xmm[12]));
|
||||
asm volatile("movaps\t%%xmm13,%0" : /* no outputs */ : "m"(uc->__fpustate.xmm[13]));
|
||||
asm volatile("movaps\t%%xmm14,%0" : /* no outputs */ : "m"(uc->__fpustate.xmm[14]));
|
||||
asm volatile("movaps\t%%xmm15,%0" : /* no outputs */ : "m"(uc->__fpustate.xmm[15]));
|
||||
asm volatile("mov\t%%r8,%0" : "=m"(uc->uc_mcontext.r8));
|
||||
asm volatile("mov\t%%r9,%0" : "=m"(uc->uc_mcontext.r9));
|
||||
asm volatile("mov\t%%r10,%0" : "=m"(uc->uc_mcontext.r10));
|
||||
|
@ -65,6 +99,7 @@ noasan noubsan noinstrument int getcontext(ucontext_t *uc) {
|
|||
asm volatile("mov\t%%rdx,%0" : "=m"(uc->uc_mcontext.rdx));
|
||||
asm volatile("mov\t%%rax,%0" : "=m"(uc->uc_mcontext.rax));
|
||||
asm volatile("mov\t%%rcx,%0" : "=m"(uc->uc_mcontext.rcx));
|
||||
uc->uc_mcontext.fpregs = &uc->__fpustate;
|
||||
asm volatile("lea\t8(%%rsp),%%rax\n\t"
|
||||
"mov\t%%rax,%0"
|
||||
: "=m"(uc->uc_mcontext.rsp)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue