Deleted Added
full compact
cpu_switch.S (262752) cpu_switch.S (271192)
1/*-
2 * Copyright (c) 2003 Peter Wemm.
3 * Copyright (c) 1990 The Regents of the University of California.
4 * All rights reserved.
5 *
6 * This code is derived from software contributed to Berkeley by
7 * William Jolitz.
8 *

--- 16 unchanged lines hidden (view full) ---

25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
32 *
1/*-
2 * Copyright (c) 2003 Peter Wemm.
3 * Copyright (c) 1990 The Regents of the University of California.
4 * All rights reserved.
5 *
6 * This code is derived from software contributed to Berkeley by
7 * William Jolitz.
8 *

--- 16 unchanged lines hidden (view full) ---

25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
32 *
33 * $FreeBSD: head/sys/amd64/amd64/cpu_switch.S 262752 2014-03-04 21:35:57Z jkim $
33 * $FreeBSD: head/sys/amd64/amd64/cpu_switch.S 271192 2014-09-06 15:23:28Z jhb $
34 */
35
36#include <machine/asmacros.h>
37#include <machine/specialreg.h>
38
39#include "assym.s"
40#include "opt_sched.h"
41

--- 352 unchanged lines hidden (view full) ---

394 movl $MSR_CSTAR,%ecx
395 rdmsr
396 movl %eax,PCB_CSTAR(%rdi)
397 movl %edx,PCB_CSTAR+4(%rdi)
398 movl $MSR_SF_MASK,%ecx
399 rdmsr
400 movl %eax,PCB_SFMASK(%rdi)
401 movl %edx,PCB_SFMASK+4(%rdi)
34 */
35
36#include <machine/asmacros.h>
37#include <machine/specialreg.h>
38
39#include "assym.s"
40#include "opt_sched.h"
41

--- 352 unchanged lines hidden (view full) ---

394 movl $MSR_CSTAR,%ecx
395 rdmsr
396 movl %eax,PCB_CSTAR(%rdi)
397 movl %edx,PCB_CSTAR+4(%rdi)
398 movl $MSR_SF_MASK,%ecx
399 rdmsr
400 movl %eax,PCB_SFMASK(%rdi)
401 movl %edx,PCB_SFMASK+4(%rdi)
402 movl xsave_mask,%eax
403 movl %eax,PCB_XSMASK(%rdi)
404 movl xsave_mask+4,%eax
405 movl %eax,PCB_XSMASK+4(%rdi)
406
407 sgdt PCB_GDT(%rdi)
408 sidt PCB_IDT(%rdi)
409 sldt PCB_LDT(%rdi)
410 str PCB_TR(%rdi)
411
412 movl $1,%eax
413 ret

--- 48 unchanged lines hidden (view full) ---

462 movl $MSR_CSTAR,%ecx
463 movl PCB_CSTAR(%rdi),%eax
464 movl 4 + PCB_CSTAR(%rdi),%edx
465 wrmsr
466 movl $MSR_SF_MASK,%ecx
467 movl PCB_SFMASK(%rdi),%eax
468 wrmsr
469
402
403 sgdt PCB_GDT(%rdi)
404 sidt PCB_IDT(%rdi)
405 sldt PCB_LDT(%rdi)
406 str PCB_TR(%rdi)
407
408 movl $1,%eax
409 ret

--- 48 unchanged lines hidden (view full) ---

458 movl $MSR_CSTAR,%ecx
459 movl PCB_CSTAR(%rdi),%eax
460 movl 4 + PCB_CSTAR(%rdi),%edx
461 wrmsr
462 movl $MSR_SF_MASK,%ecx
463 movl PCB_SFMASK(%rdi),%eax
464 wrmsr
465
470 /* Restore CR0 except for FPU mode. */
466 /* Restore CR0, CR2, CR4 and CR3. */
471 movq PCB_CR0(%rdi),%rax
467 movq PCB_CR0(%rdi),%rax
472 andq $~(CR0_EM | CR0_TS),%rax
473 movq %rax,%cr0
468 movq %rax,%cr0
474
475 /* Restore CR2, CR4 and CR3. */
476 movq PCB_CR2(%rdi),%rax
477 movq %rax,%cr2
478 movq PCB_CR4(%rdi),%rax
479 movq %rax,%cr4
480 movq PCB_CR3(%rdi),%rax
481 movq %rax,%cr3
482
483 /* Restore descriptor tables. */

--- 21 unchanged lines hidden (view full) ---

505 movq %rax,%dr2
506 movq PCB_DR3(%rdi),%rax
507 movq %rax,%dr3
508 movq PCB_DR6(%rdi),%rax
509 movq %rax,%dr6
510 movq PCB_DR7(%rdi),%rax
511 movq %rax,%dr7
512
469 movq PCB_CR2(%rdi),%rax
470 movq %rax,%cr2
471 movq PCB_CR4(%rdi),%rax
472 movq %rax,%cr4
473 movq PCB_CR3(%rdi),%rax
474 movq %rax,%cr3
475
476 /* Restore descriptor tables. */

--- 21 unchanged lines hidden (view full) ---

498 movq %rax,%dr2
499 movq PCB_DR3(%rdi),%rax
500 movq %rax,%dr3
501 movq PCB_DR6(%rdi),%rax
502 movq %rax,%dr6
503 movq PCB_DR7(%rdi),%rax
504 movq %rax,%dr7
505
513 /* Restore FPU state. */
514 fninit
515 movq PCB_FPUSUSPEND(%rdi),%rbx
516 movq PCB_XSMASK(%rdi),%rax
517 testq %rax,%rax
518 jz 1f
519 movq %rax,%rdx
520 shrq $32,%rdx
521 movl $XCR0,%ecx
522 xsetbv
523 xrstor (%rbx)
524 jmp 2f
5251:
526 fxrstor (%rbx)
5272:
528
529 /* Reload CR0. */
530 movq PCB_CR0(%rdi),%rax
531 movq %rax,%cr0
532
533 /* Restore other callee saved registers. */
534 movq PCB_R15(%rdi),%r15
535 movq PCB_R14(%rdi),%r14
536 movq PCB_R13(%rdi),%r13
537 movq PCB_R12(%rdi),%r12
538 movq PCB_RBP(%rdi),%rbp
539 movq PCB_RSP(%rdi),%rsp
540 movq PCB_RBX(%rdi),%rbx
541
542 /* Restore return address. */
543 movq PCB_RIP(%rdi),%rax
544 movq %rax,(%rsp)
545
546 xorl %eax,%eax
547 ret
548END(resumectx)
506 /* Restore other callee saved registers. */
507 movq PCB_R15(%rdi),%r15
508 movq PCB_R14(%rdi),%r14
509 movq PCB_R13(%rdi),%r13
510 movq PCB_R12(%rdi),%r12
511 movq PCB_RBP(%rdi),%rbp
512 movq PCB_RSP(%rdi),%rsp
513 movq PCB_RBX(%rdi),%rbx
514
515 /* Restore return address. */
516 movq PCB_RIP(%rdi),%rax
517 movq %rax,(%rsp)
518
519 xorl %eax,%eax
520 ret
521END(resumectx)