Lines Matching refs:regs
133 void die_if_kernel (char *str, struct pt_regs *regs, long err);
135 static int emulate_ldh(struct pt_regs *regs, int toreg) in emulate_ldh() argument
137 unsigned long saddr = regs->ior; in emulate_ldh()
142 regs->isr, regs->ior, toreg); in emulate_ldh()
158 : "0" (val), "r" (saddr), "r" (regs->isr) in emulate_ldh()
164 regs->gr[toreg] = val; in emulate_ldh()
169 static int emulate_ldw(struct pt_regs *regs, int toreg, int flop) in emulate_ldw() argument
171 unsigned long saddr = regs->ior; in emulate_ldw()
176 regs->isr, regs->ior, toreg); in emulate_ldw()
196 : "0" (val), "r" (saddr), "r" (regs->isr) in emulate_ldw()
202 ((__u32*)(regs->fr))[toreg] = val; in emulate_ldw()
204 regs->gr[toreg] = val; in emulate_ldw()
208 static int emulate_ldd(struct pt_regs *regs, int toreg, int flop) in emulate_ldd() argument
210 unsigned long saddr = regs->ior; in emulate_ldd()
215 regs->isr, regs->ior, toreg); in emulate_ldd()
240 : "0" (val), "r" (saddr), "r" (regs->isr) in emulate_ldd()
266 : "0" (valh), "1" (vall), "r" (saddr), "r" (regs->isr) in emulate_ldd()
275 regs->fr[toreg] = val; in emulate_ldd()
277 regs->gr[toreg] = val; in emulate_ldd()
282 static int emulate_sth(struct pt_regs *regs, int frreg) in emulate_sth() argument
284 unsigned long val = regs->gr[frreg]; in emulate_sth()
291 val, regs->isr, regs->ior); in emulate_sth()
307 : "r" (val), "r" (regs->ior), "r" (regs->isr) in emulate_sth()
313 static int emulate_stw(struct pt_regs *regs, int frreg, int flop) in emulate_stw() argument
319 val = ((__u32*)(regs->fr))[frreg]; in emulate_stw()
321 val = regs->gr[frreg]; in emulate_stw()
326 val, regs->isr, regs->ior); in emulate_stw()
354 : "r" (val), "r" (regs->ior), "r" (regs->isr) in emulate_stw()
359 static int emulate_std(struct pt_regs *regs, int frreg, int flop) in emulate_std() argument
365 val = regs->fr[frreg]; in emulate_std()
367 val = regs->gr[frreg]; in emulate_std()
372 val, regs->isr, regs->ior); in emulate_std()
406 : "r" (val), "r" (regs->ior), "r" (regs->isr) in emulate_std()
441 : "r" (valh), "r" (vall), "r" (regs->ior), "r" (regs->isr) in emulate_std()
449 void handle_unaligned(struct pt_regs *regs) in handle_unaligned() argument
452 unsigned long newbase = R1(regs->iir)?regs->gr[R1(regs->iir)]:0; in handle_unaligned()
461 if (user_mode(regs)) { in handle_unaligned()
470 current->comm, task_pid_nr(current), regs->ior, regs->iaoq[0]); in handle_unaligned()
473 show_regs(regs); in handle_unaligned()
482 switch (MAJOR_OP(regs->iir)) in handle_unaligned()
487 if (regs->iir&0x20) in handle_unaligned()
490 if (regs->iir&0x1000) /* short loads */ in handle_unaligned()
491 if (regs->iir&0x200) in handle_unaligned()
492 newbase += IM5_3(regs->iir); in handle_unaligned()
494 newbase += IM5_2(regs->iir); in handle_unaligned()
495 else if (regs->iir&0x2000) /* scaled indexed */ in handle_unaligned()
498 switch (regs->iir & OPCODE1_MASK) in handle_unaligned()
508 newbase += (R2(regs->iir)?regs->gr[R2(regs->iir)]:0)<<shift; in handle_unaligned()
510 newbase += (R2(regs->iir)?regs->gr[R2(regs->iir)]:0); in handle_unaligned()
516 newbase += IM14(regs->iir); in handle_unaligned()
520 if (regs->iir&8) in handle_unaligned()
523 newbase += IM14(regs->iir&~0xe); in handle_unaligned()
529 newbase += IM14(regs->iir&6); in handle_unaligned()
533 if (regs->iir&4) in handle_unaligned()
536 newbase += IM14(regs->iir&~4); in handle_unaligned()
542 switch (regs->iir & OPCODE1_MASK) in handle_unaligned()
546 ret = emulate_ldh(regs, R3(regs->iir)); in handle_unaligned()
553 ret = emulate_ldw(regs, R3(regs->iir),0); in handle_unaligned()
557 ret = emulate_sth(regs, R2(regs->iir)); in handle_unaligned()
562 ret = emulate_stw(regs, R2(regs->iir),0); in handle_unaligned()
570 ret = emulate_ldd(regs, R3(regs->iir),0); in handle_unaligned()
575 ret = emulate_std(regs, R2(regs->iir),0); in handle_unaligned()
584 ret = emulate_ldw(regs,FR3(regs->iir),1); in handle_unaligned()
590 ret = emulate_ldd(regs,R3(regs->iir),1); in handle_unaligned()
598 ret = emulate_stw(regs,FR3(regs->iir),1); in handle_unaligned()
604 ret = emulate_std(regs,R3(regs->iir),1); in handle_unaligned()
615 switch (regs->iir & OPCODE2_MASK) in handle_unaligned()
619 ret = emulate_ldd(regs,R2(regs->iir),1); in handle_unaligned()
623 ret = emulate_std(regs, R2(regs->iir),1); in handle_unaligned()
626 ret = emulate_ldd(regs, R2(regs->iir),0); in handle_unaligned()
629 ret = emulate_std(regs, R2(regs->iir),0); in handle_unaligned()
633 switch (regs->iir & OPCODE3_MASK) in handle_unaligned()
637 ret = emulate_ldw(regs, R2(regs->iir),0); in handle_unaligned()
640 ret = emulate_ldw(regs, R2(regs->iir),1); in handle_unaligned()
645 ret = emulate_stw(regs, R2(regs->iir),1); in handle_unaligned()
648 ret = emulate_stw(regs, R2(regs->iir),0); in handle_unaligned()
651 switch (regs->iir & OPCODE4_MASK) in handle_unaligned()
654 ret = emulate_ldh(regs, R2(regs->iir)); in handle_unaligned()
658 ret = emulate_ldw(regs, R2(regs->iir),0); in handle_unaligned()
661 ret = emulate_sth(regs, R2(regs->iir)); in handle_unaligned()
665 ret = emulate_stw(regs, R2(regs->iir),0); in handle_unaligned()
669 if (ret == 0 && modify && R1(regs->iir)) in handle_unaligned()
670 regs->gr[R1(regs->iir)] = newbase; in handle_unaligned()
674 printk(KERN_CRIT "Not-handled unaligned insn 0x%08lx\n", regs->iir); in handle_unaligned()
685 if (!user_mode(regs) && fixup_exception(regs)) in handle_unaligned()
689 die_if_kernel("Unaligned data reference", regs, 28); in handle_unaligned()
696 si.si_addr = (void __user *)regs->ior; in handle_unaligned()
706 si.si_addr = (void __user *)regs->ior; in handle_unaligned()
714 regs->gr[0]|=PSW_N; in handle_unaligned()
723 check_unaligned(struct pt_regs *regs) in check_unaligned() argument
730 switch (regs->iir & OPCODE1_MASK) { in check_unaligned()
748 switch (regs->iir & OPCODE4_MASK) { in check_unaligned()
763 return (int)(regs->ior & align_mask); in check_unaligned()