Author: jkim
Date: Thu Feb 23 21:50:13 2012
New Revision: 232078
URL: http://svn.freebsd.org/changeset/base/232078

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

Modified:
  stable/9/sys/amd64/acpica/acpi_switch.S
Directory Properties:
  stable/9/sys/   (props changed)

Modified: stable/9/sys/amd64/acpica/acpi_switch.S
==============================================================================
--- stable/9/sys/amd64/acpica/acpi_switch.S     Thu Feb 23 21:48:39 2012        
(r232077)
+++ stable/9/sys/amd64/acpica/acpi_switch.S     Thu Feb 23 21:50:13 2012        
(r232078)
@@ -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)
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to