Changeset 9291


Ignore:
Timestamp:
Apr 26, 2008, 7:42:56 PM (11 years ago)
Author:
gb
Message:

restore_win64_context(), windows_switch_to_foreign_stack().

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/win64/lisp-kernel/x86-asmutils64.s

    r8575 r9291  
    170170        __(jmp *%rax)
    171171_endfn
     172       
    172173
    173174_exportfn(C(freebsd_sigreturn))
     
    207208        __(ret)
    208209_endfn
    209         __endif         
     210        __endif
     211
     212        __ifdef([WIN64])
     213/* %rcx = CONTEXT, %rdx = tcr, %r8 = old_valence.  This pretty
     214   much has to be uninterruptible */       
     215_exportfn(C(restore_win64_context))
     216        __(subq $0x38,%rsp)
     217        __(movq %r8,tcr.valence(%rdx))
     218        __(fxrstor win64_context.fpstate(%rcx))
     219        __(movapd win64_context.Xmm0(%rcx),%xmm0)
     220        __(movapd win64_context.Xmm1(%rcx),%xmm1)
     221        __(movapd win64_context.Xmm2(%rcx),%xmm2)
     222        __(movapd win64_context.Xmm3(%rcx),%xmm3)
     223        __(movapd win64_context.Xmm4(%rcx),%xmm4)
     224        __(movapd win64_context.Xmm5(%rcx),%xmm5)
     225        __(movapd win64_context.Xmm6(%rcx),%xmm6)
     226        __(movapd win64_context.Xmm7(%rcx),%xmm7)
     227        __(movapd win64_context.Xmm8(%rcx),%xmm8)
     228        __(movapd win64_context.Xmm9(%rcx),%xmm9)
     229        __(movapd win64_context.Xmm10(%rcx),%xmm10)
     230        __(movapd win64_context.Xmm11(%rcx),%xmm11)
     231        __(movapd win64_context.Xmm12(%rcx),%xmm12)
     232        __(movapd win64_context.Xmm13(%rcx),%xmm13)
     233        __(movapd win64_context.Xmm14(%rcx),%xmm14)
     234        __(movapd win64_context.Xmm15(%rcx),%xmm15)
     235        __(ldmxcsr win64_context.MxCsr(%rcx))
     236        __(movw win64_context.SegSs(%rcx),%ax)
     237        __(movw %ax,0x20(%rsp))
     238        __(movq win64_context.Rsp(%rcx),%rax)
     239        __(movq %rax,0x18(%rsp))
     240        __(movl win64_context.EFlags(%rcx),%eax)
     241        __(movl %eax,0x10(%rsp))
     242        __(movw win64_context.SegCs(%rcx),%ax)
     243        __(movw %ax,8(%rsp))
     244        __(movq win64_context.Rip(%rcx),%rax)
     245        __(movq %rax,(%rsp))
     246        __(movq win64_context.Rax(%rcx),%rax)
     247        __(movq win64_context.Rbx(%rcx),%rbx)
     248        __(movq win64_context.Rdx(%rcx),%rdx)
     249        __(movq win64_context.Rdi(%rcx),%rdi)
     250        __(movq win64_context.Rsi(%rcx),%rsi)
     251        __(movq win64_context.Rbp(%rcx),%rbp)
     252        __(movq win64_context.R8(%rcx),%r8)
     253        __(movq win64_context.R9(%rcx),%r9)
     254        __(movq win64_context.R10(%rcx),%r10)
     255        __(movq win64_context.R11(%rcx),%r11)
     256        __(movq win64_context.R12(%rcx),%r12)
     257        __(movq win64_context.R13(%rcx),%r13)
     258        __(movq win64_context.R14(%rcx),%r14)
     259        __(movq win64_context.R15(%rcx),%r15)
     260        __(movq win64_context.Rcx(%rcx),%rcx)
     261        __(iretq)
     262        .globl C(restore_win64_context_end)
     263C(restore_win64_context_end):
     264        __(nop)
     265_endfn
     266       
     267_exportfn(C(windows_switch_to_foreign_stack))
     268        __(lea -0x20(%rcx),%rsp)
     269        __(movq %r8,%rcx)
     270        __(jmp *%rdx)
     271_endfn       
     272       
     273        __endif
     274               
    210275        _endfile
Note: See TracChangeset for help on using the changeset viewer.