summaryrefslogtreecommitdiffstats
path: root/sys/powerpc/aim/machdep.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/powerpc/aim/machdep.c')
-rw-r--r--sys/powerpc/aim/machdep.c91
1 files changed, 1 insertions, 90 deletions
diff --git a/sys/powerpc/aim/machdep.c b/sys/powerpc/aim/machdep.c
index 1330e0f..ac35d8f 100644
--- a/sys/powerpc/aim/machdep.c
+++ b/sys/powerpc/aim/machdep.c
@@ -350,6 +350,7 @@ powerpc_init(u_int startkernel, u_int endkernel, u_int basekernel, char *args)
bcopy(&dsitrap, (void *)EXC_DSI, (size_t)&dsisize);
bcopy(&isitrap, (void *)EXC_ISI, (size_t)&isisize);
bcopy(&trapcode, (void *)EXC_SC, (size_t)&trapsize);
+ bcopy(&trapcode, (void *)EXC_FPU, (size_t)&trapsize);
/*
* Start initializing proc0 and thread0.
@@ -960,93 +961,3 @@ cpu_pcpu_init(struct pcpu *pcpu, int cpuid, size_t sz)
pcpu->pc_current_asngen = 1;
}
-
-void
-enable_fpu(struct pcb *pcb)
-{
- int msr, scratch;
-
- if (!(pcb->pcb_flags & PCB_FPU)) {
- bzero(&pcb->pcb_fpu, sizeof pcb->pcb_fpu);
- pcb->pcb_flags |= PCB_FPU;
- }
- __asm volatile ("mfmsr %0; ori %1,%0,%2; mtmsr %1; isync"
- : "=r"(msr), "=r"(scratch) : "K"(PSL_FP));
- __asm volatile ("lfd 0,0(%0); mtfsf 0xff,0" :: "b"(&pcb->pcb_fpu.fpscr));
- __asm ("lfd 0,0(%0);"
- "lfd 1,8(%0);"
- "lfd 2,16(%0);"
- "lfd 3,24(%0);"
- "lfd 4,32(%0);"
- "lfd 5,40(%0);"
- "lfd 6,48(%0);"
- "lfd 7,56(%0);"
- "lfd 8,64(%0);"
- "lfd 9,72(%0);"
- "lfd 10,80(%0);"
- "lfd 11,88(%0);"
- "lfd 12,96(%0);"
- "lfd 13,104(%0);"
- "lfd 14,112(%0);"
- "lfd 15,120(%0);"
- "lfd 16,128(%0);"
- "lfd 17,136(%0);"
- "lfd 18,144(%0);"
- "lfd 19,152(%0);"
- "lfd 20,160(%0);"
- "lfd 21,168(%0);"
- "lfd 22,176(%0);"
- "lfd 23,184(%0);"
- "lfd 24,192(%0);"
- "lfd 25,200(%0);"
- "lfd 26,208(%0);"
- "lfd 27,216(%0);"
- "lfd 28,224(%0);"
- "lfd 29,232(%0);"
- "lfd 30,240(%0);"
- "lfd 31,248(%0)" :: "b"(&pcb->pcb_fpu.fpr[0]));
- __asm volatile ("mtmsr %0; isync" :: "r"(msr));
-}
-
-void
-save_fpu(struct pcb *pcb)
-{
- int msr, scratch;
-
- __asm volatile ("mfmsr %0; ori %1,%0,%2; mtmsr %1; isync"
- : "=r"(msr), "=r"(scratch) : "K"(PSL_FP));
- __asm ("stfd 0,0(%0);"
- "stfd 1,8(%0);"
- "stfd 2,16(%0);"
- "stfd 3,24(%0);"
- "stfd 4,32(%0);"
- "stfd 5,40(%0);"
- "stfd 6,48(%0);"
- "stfd 7,56(%0);"
- "stfd 8,64(%0);"
- "stfd 9,72(%0);"
- "stfd 10,80(%0);"
- "stfd 11,88(%0);"
- "stfd 12,96(%0);"
- "stfd 13,104(%0);"
- "stfd 14,112(%0);"
- "stfd 15,120(%0);"
- "stfd 16,128(%0);"
- "stfd 17,136(%0);"
- "stfd 18,144(%0);"
- "stfd 19,152(%0);"
- "stfd 20,160(%0);"
- "stfd 21,168(%0);"
- "stfd 22,176(%0);"
- "stfd 23,184(%0);"
- "stfd 24,192(%0);"
- "stfd 25,200(%0);"
- "stfd 26,208(%0);"
- "stfd 27,216(%0);"
- "stfd 28,224(%0);"
- "stfd 29,232(%0);"
- "stfd 30,240(%0);"
- "stfd 31,248(%0)" :: "b"(&pcb->pcb_fpu.fpr[0]));
- __asm volatile ("mffs 0; stfd 0,0(%0)" :: "b"(&pcb->pcb_fpu.fpscr));
- __asm volatile ("mtmsr %0; isync" :: "r"(msr));
-}
OpenPOWER on IntegriCloud