Lines Matching refs:regs
121 static int emulate_ldh(struct pt_regs *regs, int toreg) in emulate_ldh() argument
123 unsigned long saddr = regs->ior; in emulate_ldh()
128 regs->isr, regs->ior, toreg); in emulate_ldh()
144 : "0" (val), "r" (saddr), "r" (regs->isr) in emulate_ldh()
150 regs->gr[toreg] = val; in emulate_ldh()
155 static int emulate_ldw(struct pt_regs *regs, int toreg, int flop) in emulate_ldw() argument
157 unsigned long saddr = regs->ior; in emulate_ldw()
162 regs->isr, regs->ior, toreg); in emulate_ldw()
182 : "0" (val), "r" (saddr), "r" (regs->isr) in emulate_ldw()
188 ((__u32*)(regs->fr))[toreg] = val; in emulate_ldw()
190 regs->gr[toreg] = val; in emulate_ldw()
194 static int emulate_ldd(struct pt_regs *regs, int toreg, int flop) in emulate_ldd() argument
196 unsigned long saddr = regs->ior; in emulate_ldd()
201 regs->isr, regs->ior, toreg); in emulate_ldd()
226 : "0" (val), "r" (saddr), "r" (regs->isr) in emulate_ldd()
252 : "0" (valh), "1" (vall), "r" (saddr), "r" (regs->isr) in emulate_ldd()
261 regs->fr[toreg] = val; in emulate_ldd()
263 regs->gr[toreg] = val; in emulate_ldd()
268 static int emulate_sth(struct pt_regs *regs, int frreg) in emulate_sth() argument
270 unsigned long val = regs->gr[frreg]; in emulate_sth()
277 val, regs->isr, regs->ior); in emulate_sth()
293 : "r" (val), "r" (regs->ior), "r" (regs->isr) in emulate_sth()
299 static int emulate_stw(struct pt_regs *regs, int frreg, int flop) in emulate_stw() argument
305 val = ((__u32*)(regs->fr))[frreg]; in emulate_stw()
307 val = regs->gr[frreg]; in emulate_stw()
312 val, regs->isr, regs->ior); in emulate_stw()
340 : "r" (val), "r" (regs->ior), "r" (regs->isr) in emulate_stw()
345 static int emulate_std(struct pt_regs *regs, int frreg, int flop) in emulate_std() argument
351 val = regs->fr[frreg]; in emulate_std()
353 val = regs->gr[frreg]; in emulate_std()
358 val, regs->isr, regs->ior); in emulate_std()
392 : "r" (val), "r" (regs->ior), "r" (regs->isr) in emulate_std()
427 : "r" (valh), "r" (vall), "r" (regs->ior), "r" (regs->isr) in emulate_std()
435 void handle_unaligned(struct pt_regs *regs) in handle_unaligned() argument
438 unsigned long newbase = R1(regs->iir)?regs->gr[R1(regs->iir)]:0; in handle_unaligned()
446 if (user_mode(regs)) { in handle_unaligned()
455 current->comm, task_pid_nr(current), regs->ior, regs->iaoq[0]); in handle_unaligned()
458 show_regs(regs); in handle_unaligned()
467 switch (MAJOR_OP(regs->iir)) in handle_unaligned()
472 if (regs->iir&0x20) in handle_unaligned()
475 if (regs->iir&0x1000) /* short loads */ in handle_unaligned()
476 if (regs->iir&0x200) in handle_unaligned()
477 newbase += IM5_3(regs->iir); in handle_unaligned()
479 newbase += IM5_2(regs->iir); in handle_unaligned()
480 else if (regs->iir&0x2000) /* scaled indexed */ in handle_unaligned()
483 switch (regs->iir & OPCODE1_MASK) in handle_unaligned()
493 newbase += (R2(regs->iir)?regs->gr[R2(regs->iir)]:0)<<shift; in handle_unaligned()
495 newbase += (R2(regs->iir)?regs->gr[R2(regs->iir)]:0); in handle_unaligned()
501 newbase += IM14(regs->iir); in handle_unaligned()
505 if (regs->iir&8) in handle_unaligned()
508 newbase += IM14(regs->iir&~0xe); in handle_unaligned()
514 newbase += IM14(regs->iir&6); in handle_unaligned()
518 if (regs->iir&4) in handle_unaligned()
521 newbase += IM14(regs->iir&~4); in handle_unaligned()
527 switch (regs->iir & OPCODE1_MASK) in handle_unaligned()
531 ret = emulate_ldh(regs, R3(regs->iir)); in handle_unaligned()
538 ret = emulate_ldw(regs, R3(regs->iir),0); in handle_unaligned()
542 ret = emulate_sth(regs, R2(regs->iir)); in handle_unaligned()
547 ret = emulate_stw(regs, R2(regs->iir),0); in handle_unaligned()
555 ret = emulate_ldd(regs, R3(regs->iir),0); in handle_unaligned()
560 ret = emulate_std(regs, R2(regs->iir),0); in handle_unaligned()
569 ret = emulate_ldw(regs,FR3(regs->iir),1); in handle_unaligned()
575 ret = emulate_ldd(regs,R3(regs->iir),1); in handle_unaligned()
583 ret = emulate_stw(regs,FR3(regs->iir),1); in handle_unaligned()
589 ret = emulate_std(regs,R3(regs->iir),1); in handle_unaligned()
600 switch (regs->iir & OPCODE2_MASK) in handle_unaligned()
604 ret = emulate_ldd(regs,R2(regs->iir),1); in handle_unaligned()
608 ret = emulate_std(regs, R2(regs->iir),1); in handle_unaligned()
611 ret = emulate_ldd(regs, R2(regs->iir),0); in handle_unaligned()
614 ret = emulate_std(regs, R2(regs->iir),0); in handle_unaligned()
618 switch (regs->iir & OPCODE3_MASK) in handle_unaligned()
622 ret = emulate_ldw(regs, R2(regs->iir),0); in handle_unaligned()
625 ret = emulate_ldw(regs, R2(regs->iir),1); in handle_unaligned()
630 ret = emulate_stw(regs, R2(regs->iir),1); in handle_unaligned()
633 ret = emulate_stw(regs, R2(regs->iir),0); in handle_unaligned()
636 switch (regs->iir & OPCODE4_MASK) in handle_unaligned()
639 ret = emulate_ldh(regs, R2(regs->iir)); in handle_unaligned()
643 ret = emulate_ldw(regs, R2(regs->iir),0); in handle_unaligned()
646 ret = emulate_sth(regs, R2(regs->iir)); in handle_unaligned()
650 ret = emulate_stw(regs, R2(regs->iir),0); in handle_unaligned()
654 if (ret == 0 && modify && R1(regs->iir)) in handle_unaligned()
655 regs->gr[R1(regs->iir)] = newbase; in handle_unaligned()
659 printk(KERN_CRIT "Not-handled unaligned insn 0x%08lx\n", regs->iir); in handle_unaligned()
670 if (!user_mode(regs) && fixup_exception(regs)) in handle_unaligned()
674 die_if_kernel("Unaligned data reference", regs, 28); in handle_unaligned()
679 (void __user *)regs->ior); in handle_unaligned()
686 (void __user *)regs->ior); in handle_unaligned()
693 regs->gr[0]|=PSW_N; in handle_unaligned()
702 check_unaligned(struct pt_regs *regs) in check_unaligned() argument
709 switch (regs->iir & OPCODE1_MASK) { in check_unaligned()
727 switch (regs->iir & OPCODE4_MASK) { in check_unaligned()
742 return (int)(regs->ior & align_mask); in check_unaligned()