diff options
Diffstat (limited to 'sys/powerpc/aim/machdep.c')
-rw-r--r-- | sys/powerpc/aim/machdep.c | 91 |
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)); -} |