Lines Matching defs:rp

75 do_unaligned(struct regs *rp, caddr_t *badaddr)
93 ASSERT(USERMODE(rp->r_tstate));
94 inst = fetch_user_instr((caddr_t)rp->r_pc);
175 asi = (uint_t)(rp->r_tstate >> TSTATE_ASI_SHIFT) &
211 (void *)rp->r_pc, inst);
222 if (getreg(rp, rs1, &val, badaddr))
236 if (getreg(rp, rs2, &val, badaddr))
314 if (getreg(rp, rd, &data.l[0], badaddr))
316 if (getreg(rp, rd+1, &data.l[1], badaddr))
332 if (getreg(rp, rd, &data.l[0], badaddr))
544 if (putreg(&data.l[0], rp, rd, badaddr) == -1)
546 if (putreg(&data.l[1], rp, rd+1, badaddr) == -1)
549 if (putreg(&data.l[0], rp, rd, badaddr) == -1)
561 simulate_lddstd(struct regs *rp, caddr_t *badaddr)
573 usermode = USERMODE(rp->r_tstate);
576 inst = fetch_user_instr((caddr_t)rp->r_pc);
578 inst = *(uint_t *)rp->r_pc;
586 if (USERMODE(rp->r_tstate))
593 asi = (uint_t)(rp->r_tstate >> TSTATE_ASI_SHIFT) &
629 if (getreg(rp, rs1, &val, badaddr))
641 if (getreg(rp, rs2, &val, badaddr))
654 return (do_unaligned(rp, badaddr));
672 if (getreg(rp, rd, &reven, badaddr))
674 if (getreg(rp, rd+1, &rodd, badaddr))
705 if (putreg(&reven, rp, rd, badaddr) == -1)
707 if (putreg(&rodd, rp, rd+1, badaddr) == -1)
718 simulate_popc(struct regs *rp, caddr_t *badaddr, uint_t inst)
745 if (getreg(rp, rs2, &val, badaddr))
753 if (putreg(&cnt, rp, rd, badaddr) == -1)
763 simulate_mulscc(struct regs *rp, caddr_t *badaddr, uint_t inst)
786 if (getreg(rp, rs2, &drs2, badaddr)) {
793 if (getreg(rp, rs1, &drs1, badaddr)) {
797 s1 = ((rp->r_tstate & TSTATE_IN) >> (TSTATE_CCR_SHIFT + 3)) ^
798 ((rp->r_tstate & TSTATE_IV) >> (TSTATE_CCR_SHIFT + 1));
801 if (rp->r_y & 1) {
813 rp->r_tstate &= ~TSTATE_ICC;
814 rp->r_tstate |= (uint64_t)((c >> 31) & 1) << (TSTATE_CCR_SHIFT + 0);
815 rp->r_tstate |= (uint64_t)((v >> 31) & 1) << (TSTATE_CCR_SHIFT + 1);
816 rp->r_tstate |= (uint64_t)(d ? 0 : 1) << (TSTATE_CCR_SHIFT + 2);
817 rp->r_tstate |= (uint64_t)((d >> 31) & 1) << (TSTATE_CCR_SHIFT + 3);
819 if (rp->r_tstate & TSTATE_IC) {
824 rp->r_tstate &= ~TSTATE_XCC;
826 rp->r_tstate |= TSTATE_XZ;
830 if (putreg(&ud64, rp, rd, badaddr)) {
834 d64 = (drs1 << 32) | (uint32_t)rp->r_y;
836 rp->r_y = (uint32_t)d64;
845 simulate_unimp(struct regs *rp, caddr_t *badaddr)
852 caddr_t addr = (caddr_t)rp->r_pc;
861 ASSERT(USERMODE(rp->r_tstate));
892 asi = (uint32_t)((rp->r_tstate >> TSTATE_ASI_SHIFT) &
911 fp_precise(rp);
916 return (simulate_popc(rp, badaddr, inst));
920 return (simulate_mulscc(rp, badaddr, inst));
926 return (do_unaligned(rp, badaddr));
1091 mapseg = as_findseg(as, (caddr_t)rp->r_pc, 0);
1113 if (as_fault(as->a_hat, as, (caddr_t)(rp->r_pc & PAGEMASK), PAGESIZE,
1118 pfnum = hat_getpfnum(as->a_hat, (caddr_t)rp->r_pc);
1124 (void) as_fault(as->a_hat, as, (caddr_t)(rp->r_pc & PAGEMASK),
1130 ka = ppmapin(pp, PROT_READ|PROT_WRITE, (caddr_t)rp->r_pc);
1131 *(uint_t *)(ka + (uintptr_t)(rp->r_pc % PAGESIZE)) = inst;
1132 doflush(ka + (uintptr_t)(rp->r_pc % PAGESIZE));
1136 (void) as_fault(as->a_hat, as, (caddr_t)(rp->r_pc & PAGEMASK),
1145 simulate_rdtick(struct regs *rp)
1150 inst = fetch_user_instr((caddr_t)rp->r_pc);
1167 if (putreg(&tick, rp, rd, &badaddr) == 0)
1173 if (putreg(&stick, rp, rd, &badaddr) == 0)
1190 getreg(struct regs *rp, uint_t reg, uint64_t *val, caddr_t *badaddr)
1195 rgs = (uint64_t *)&rp->r_ps; /* globals and outs */
1196 sp = (uint64_t *)rp->r_sp; /* ins and locals */
1206 if (USERMODE(rp->r_tstate)) {
1221 if (USERMODE(rp->r_tstate)) {
1243 putreg(uint64_t *data, struct regs *rp, uint_t reg, caddr_t *badaddr)
1248 rgs = (uint64_t *)&rp->r_ps; /* globals and outs */
1249 sp = (uint64_t *)rp->r_sp; /* ins and locals */
1259 if (USERMODE(rp->r_tstate)) {
1283 if (USERMODE(rp->r_tstate)) {
1313 calc_memaddr(struct regs *rp, caddr_t *badaddr)
1323 if (USERMODE(rp->r_tstate))
1324 inst = fetch_user_instr((caddr_t)rp->r_pc);
1326 inst = *(uint_t *)rp->r_pc;
1374 if (USERMODE(rp->r_tstate))
1379 if (getreg(rp, rs1, &val, badaddr))
1391 if (getreg(rp, rs2, &val, badaddr))
1403 if (curproc->p_model == DATAMODEL_ILP32 && USERMODE(rp->r_tstate)) {
1419 instr_size(struct regs *rp, caddr_t *addrp, enum seg_rw rdwr)
1431 *addrp = (caddr_t)rp->r_pc;
1438 * ASSERT(USERMODE(rp->r_tstate));
1444 inst = fetch_user_instr((caddr_t)rp->r_pc);
1458 asi = (uint_t)((rp->r_tstate >> TSTATE_ASI_SHIFT) &
1517 if (getreg(rp, rs1, &val, &badaddr))
1537 if (getreg(rp, rs2, &val, &badaddr))