PCPU
testq $PCB_ISOMMU,PCPU(trampoline)+TR_PCB_FLAGS ; \
movq PCPU(trampoline)+TR_PCB_CR3,%rcx ; \
40: movl PCPU(trampoline)+TR_PCB_SPEC_CTRL,%edx ; \
movq %rax, PCPU(trampoline)+TR_RAX ; \
movl PCPU(trampoline)+TR_PCB_SPEC_CTRL,%edx ; \
42: movq PCPU(trampoline)+TR_RAX, %rax ; \
movq PCPU(trampoline)+TR_PCB_RSP,%rsp ; /* kstack rsp */ \
movq PCPU(trampoline)+TR_PCB_RSP,%rsp ; /* kstack rsp */ \
movq %rcx, PCPU(trampoline)+TR_CR2 ; \
movq PCPU(trampoline)+TR_PCB_RSP,%rsp ; /* kstack rsp */ \
movq %rcx, PCPU(trampoline)+TR_RCX ; \
movq %rdx, PCPU(trampoline)+TR_RDX ; \
movq PCPU(trampoline)+TR_RDX, %rdx ; \
movq PCPU(trampoline)+TR_RCX, %rcx \
testl $SPEC_CTRL_DUMMY_ENABLE|SPEC_CTRL_MDS_ENABLE, PCPU(trampoline)+TR_PCB_SPEC_CTRL+4 ; \
movq %rax, PCPU(trampoline)+TR_RAX ; \
movl PCPU(trampoline)+TR_PCB_SPEC_CTRL+4, %eax ; \
movq $GSEL(GDATA_SEL, SEL_KPL), PCPU(trampoline)+TR_RCX ; \
verw PCPU(trampoline)+TR_RCX ; \
movq %rcx, PCPU(trampoline)+TR_RCX ; \
movq %rdx, PCPU(trampoline)+TR_RDX ; \
movq PCPU(trampoline)+TR_RDX, %rdx ; \
movq PCPU(trampoline)+TR_RCX, %rcx ; \
42: movq PCPU(trampoline)+TR_RAX, %rax ; \
testq $PCB_ISOMMU,PCPU(trampoline)+TR_PCB_FLAGS ; \
movq %rcx, PCPU(trampoline)+TR_ERR ; /* save in TR_ERR */ \
movq %rcx, PCPU(trampoline)+TR_RIP ; \
movq %rcx, PCPU(trampoline)+TR_CS ; \
movq %rcx, PCPU(trampoline)+TR_RFLAGS ; \
movq %rcx, PCPU(trampoline)+TR_RSP ; \
movq %rcx, PCPU(trampoline)+TR_SS ; \
movq PCPU(trampoline)+TR_PCB_CR3_ISO,%rcx ; \
testq $PCB_ISOMMU,PCPU(trampoline)+TR_PCB_FLAGS ; \
movq %rcx, PCPU(trampoline)+TR_RCX ; \
movq PCPU(trampoline)+TR_PCB_CR3_ISO,%rcx ; \
movq PCPU(trampoline)+TR_RCX, %rcx ; \
movq PCPU(trampoline)+TR_CR2, %r10 ; \