Author: jkim
Date: Fri Feb  3 21:24:28 2012
New Revision: 230958
URL: http://svn.freebsd.org/changeset/base/230958

Log:
  Restore callee saved registers later and micro-optimize.

Modified:
  head/sys/amd64/acpica/acpi_switch.S

Modified: head/sys/amd64/acpica/acpi_switch.S
==============================================================================
--- head/sys/amd64/acpica/acpi_switch.S Fri Feb  3 21:21:00 2012        
(r230957)
+++ head/sys/amd64/acpica/acpi_switch.S Fri Feb  3 21:24:28 2012        
(r230958)
@@ -120,15 +120,6 @@ ENTRY(acpi_restorecpu)
 #undef SDT_SYSTSS
 #undef SDT_SYSBSY
 
-       /* Restore other callee saved registers. */
-       movq    PCB_R15(%rdi), %r15
-       movq    PCB_R14(%rdi), %r14
-       movq    PCB_R13(%rdi), %r13
-       movq    PCB_R12(%rdi), %r12
-       movq    PCB_RBP(%rdi), %rbp
-       movq    PCB_RSP(%rdi), %rsp
-       movq    PCB_RBX(%rdi), %rbx
-
        /* Restore debug registers. */
        movq    PCB_DR0(%rdi), %rax
        movq    %rax, %dr0
@@ -145,6 +136,7 @@ ENTRY(acpi_restorecpu)
 
        /* Restore FPU state. */
        fninit
+       movq    WAKEUP_CTX(fpusave), %rbx
        movq    WAKEUP_CTX(xsmask), %rax
        testq   %rax, %rax
        jz      1f
@@ -153,19 +145,26 @@ ENTRY(acpi_restorecpu)
        movl    $XCR0, %ecx
 /*     xsetbv  */
        .byte   0x0f, 0x01, 0xd1
-       movq    WAKEUP_CTX(fpusave), %rcx
-/*     xrstor  (%rcx) */
-       .byte   0x0f, 0xae, 0x29
+/*     xrstor  (%rbx) */
+       .byte   0x0f, 0xae, 0x2b
        jmp     2f
 1:
-       movq    WAKEUP_CTX(fpusave), %rcx
-       fxrstor (%rcx)
+       fxrstor (%rbx)
 2:
 
        /* Reload CR0. */
        movq    PCB_CR0(%rdi), %rax
        movq    %rax, %cr0
 
+       /* Restore other callee saved registers. */
+       movq    PCB_R15(%rdi), %r15
+       movq    PCB_R14(%rdi), %r14
+       movq    PCB_R13(%rdi), %r13
+       movq    PCB_R12(%rdi), %r12
+       movq    PCB_RBP(%rdi), %rbp
+       movq    PCB_RSP(%rdi), %rsp
+       movq    PCB_RBX(%rdi), %rbx
+
        /* Restore return address. */
        movq    PCB_RIP(%rdi), %rax
        movq    %rax, (%rsp)
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to