Lines Matching full:pcb

90 #include <machine/pcb.h>
377 * Construct a PCB from a trapframe. This is called from kdb_trap() where
380 * on the PCB. The PCB doesn't have to be perfect, as long as it contains
384 makectx(struct trapframe *tf, struct pcb *pcb) in makectx() argument
387 pcb->pcb_lr = tf->srr0; in makectx()
388 pcb->pcb_sp = tf->fixreg[1]; in makectx()
398 struct pcb *pcb; in grab_mcontext() local
401 pcb = td->td_pcb; in grab_mcontext()
419 if (pcb->pcb_flags & PCB_FPREGS) { in grab_mcontext()
420 if (pcb->pcb_flags & PCB_FPU) { in grab_mcontext()
428 memcpy(&mcp->mc_fpscr, &pcb->pcb_fpu.fpscr, sizeof(double)); in grab_mcontext()
430 memcpy(&mcp->mc_fpreg[i], &pcb->pcb_fpu.fpr[i].fpr, in grab_mcontext()
434 if (pcb->pcb_flags & PCB_VSX) { in grab_mcontext()
437 &pcb->pcb_fpu.fpr[i].vsr[2], sizeof(double)); in grab_mcontext()
444 if (pcb->pcb_flags & PCB_VECREGS) { in grab_mcontext()
445 if (pcb->pcb_flags & PCB_VEC) { in grab_mcontext()
453 mcp->mc_vscr = pcb->pcb_vec.vscr; in grab_mcontext()
454 mcp->mc_vrsave = pcb->pcb_vec.vrsave; in grab_mcontext()
455 memcpy(mcp->mc_avec, pcb->pcb_vec.vr, sizeof(mcp->mc_avec)); in grab_mcontext()
481 struct pcb *pcb; in set_mcontext() local
486 pcb = td->td_pcb; in set_mcontext()
532 pcb->pcb_flags &= ~(PCB_FPU | PCB_VSX | PCB_VEC); in set_mcontext()
536 pcb->pcb_flags |= PCB_FPREGS; in set_mcontext()
537 memcpy(&pcb->pcb_fpu.fpscr, &mcp->mc_fpscr, sizeof(double)); in set_mcontext()
538 bzero(pcb->pcb_fpu.fpr, sizeof(pcb->pcb_fpu.fpr)); in set_mcontext()
540 memcpy(&pcb->pcb_fpu.fpr[i].fpr, &mcp->mc_fpreg[i], in set_mcontext()
542 memcpy(&pcb->pcb_fpu.fpr[i].vsr[2], in set_mcontext()
549 pcb->pcb_flags |= PCB_VECREGS; in set_mcontext()
550 pcb->pcb_vec.vscr = mcp->mc_vscr; in set_mcontext()
551 pcb->pcb_vec.vrsave = mcp->mc_vrsave; in set_mcontext()
552 memcpy(pcb->pcb_vec.vr, mcp->mc_avec, sizeof(mcp->mc_avec)); in set_mcontext()
586 * Ensure the PCB has been updated in preparation for copying a thread.
599 struct pcb *pcb; in cpu_update_pcb() local
604 pcb = td->td_pcb; in cpu_update_pcb()
606 pcb_flags = pcb->pcb_flags; in cpu_update_pcb()
611 pcb->pcb_fscr = mfspr(SPR_FSCR); in cpu_update_pcb()
613 if (pcb->pcb_fscr & FSCR_EBB) { in cpu_update_pcb()
614 pcb->pcb_ebb.ebbhr = mfspr(SPR_EBBHR); in cpu_update_pcb()
615 pcb->pcb_ebb.ebbrr = mfspr(SPR_EBBRR); in cpu_update_pcb()
616 pcb->pcb_ebb.bescr = mfspr(SPR_BESCR); in cpu_update_pcb()
618 if (pcb->pcb_fscr & FSCR_LM) { in cpu_update_pcb()
619 pcb->pcb_lm.lmrr = mfspr(SPR_LMRR); in cpu_update_pcb()
620 pcb->pcb_lm.lmser = mfspr(SPR_LMSER); in cpu_update_pcb()
622 if (pcb->pcb_fscr & FSCR_TAR) in cpu_update_pcb()
623 pcb->pcb_tar = mfspr(SPR_TAR); in cpu_update_pcb()
631 pcb->pcb_dscr = mfspr(SPR_DSCRP); in cpu_update_pcb()
643 pcb->pcb_vec.vscr = mfspr(SPR_SPEFSCR); in cpu_update_pcb()
749 struct pcb *pcb; in fill_fpregs() local
752 pcb = td->td_pcb; in fill_fpregs()
754 if ((pcb->pcb_flags & PCB_FPREGS) == 0) in fill_fpregs()
757 memcpy(&fpregs->fpscr, &pcb->pcb_fpu.fpscr, sizeof(double)); in fill_fpregs()
759 memcpy(&fpregs->fpreg[i], &pcb->pcb_fpu.fpr[i].fpr, in fill_fpregs()
787 struct pcb *pcb; in set_fpregs() local
790 pcb = td->td_pcb; in set_fpregs()
791 pcb->pcb_flags |= PCB_FPREGS; in set_fpregs()
792 memcpy(&pcb->pcb_fpu.fpscr, &fpregs->fpscr, sizeof(double)); in set_fpregs()
794 memcpy(&pcb->pcb_fpu.fpr[i].fpr, &fpregs->fpreg[i], in set_fpregs()
1080 struct pcb *pcb; in cpu_thread_alloc() local
1082 pcb = (struct pcb *)((td->td_kstack + td->td_kstack_pages * PAGE_SIZE - in cpu_thread_alloc()
1083 sizeof(struct pcb)) & ~0x2fUL); in cpu_thread_alloc()
1084 td->td_pcb = pcb; in cpu_thread_alloc()
1085 td->td_frame = (struct trapframe *)pcb - 1; in cpu_thread_alloc()
1107 struct pcb *pcb2; in cpu_copy_thread()
1111 /* Ensure td0 pcb is up to date. */ in cpu_copy_thread()
1117 /* Copy the upcall pcb */ in cpu_copy_thread()
1254 struct pcb *pcb; in ppc_instr_emulate() local
1281 pcb = td->td_pcb; in ppc_instr_emulate()
1283 if (!(pcb->pcb_flags & PCB_FPREGS)) { in ppc_instr_emulate()
1284 bzero(&pcb->pcb_fpu, sizeof(pcb->pcb_fpu)); in ppc_instr_emulate()
1285 pcb->pcb_flags |= PCB_FPREGS; in ppc_instr_emulate()
1286 } else if (pcb->pcb_flags & PCB_FPU) in ppc_instr_emulate()
1288 sig = fpu_emulate(frame, &pcb->pcb_fpu); in ppc_instr_emulate()
1289 if ((sig == 0 || sig == SIGFPE) && pcb->pcb_flags & PCB_FPU) in ppc_instr_emulate()
1293 if (pcb->pcb_lastill != frame->srr0) { in ppc_instr_emulate()
1297 pcb->pcb_lastill = frame->srr0; in ppc_instr_emulate()