Lines Matching refs:regs

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()
460 if (user_mode(regs)) { in handle_unaligned()
469 current->comm, task_pid_nr(current), regs->ior, regs->iaoq[0]); in handle_unaligned()
472 show_regs(regs); in handle_unaligned()
481 switch (MAJOR_OP(regs->iir)) in handle_unaligned()
486 if (regs->iir&0x20) in handle_unaligned()
489 if (regs->iir&0x1000) /* short loads */ in handle_unaligned()
490 if (regs->iir&0x200) in handle_unaligned()
491 newbase += IM5_3(regs->iir); in handle_unaligned()
493 newbase += IM5_2(regs->iir); in handle_unaligned()
494 else if (regs->iir&0x2000) /* scaled indexed */ in handle_unaligned()
497 switch (regs->iir & OPCODE1_MASK) in handle_unaligned()
507 newbase += (R2(regs->iir)?regs->gr[R2(regs->iir)]:0)<<shift; in handle_unaligned()
509 newbase += (R2(regs->iir)?regs->gr[R2(regs->iir)]:0); in handle_unaligned()
515 newbase += IM14(regs->iir); in handle_unaligned()
519 if (regs->iir&8) in handle_unaligned()
522 newbase += IM14(regs->iir&~0xe); in handle_unaligned()
528 newbase += IM14(regs->iir&6); in handle_unaligned()
532 if (regs->iir&4) in handle_unaligned()
535 newbase += IM14(regs->iir&~4); in handle_unaligned()
541 switch (regs->iir & OPCODE1_MASK) in handle_unaligned()
545 ret = emulate_ldh(regs, R3(regs->iir)); in handle_unaligned()
552 ret = emulate_ldw(regs, R3(regs->iir),0); in handle_unaligned()
556 ret = emulate_sth(regs, R2(regs->iir)); in handle_unaligned()
561 ret = emulate_stw(regs, R2(regs->iir),0); in handle_unaligned()
569 ret = emulate_ldd(regs, R3(regs->iir),0); in handle_unaligned()
574 ret = emulate_std(regs, R2(regs->iir),0); in handle_unaligned()
583 ret = emulate_ldw(regs,FR3(regs->iir),1); in handle_unaligned()
589 ret = emulate_ldd(regs,R3(regs->iir),1); in handle_unaligned()
597 ret = emulate_stw(regs,FR3(regs->iir),1); in handle_unaligned()
603 ret = emulate_std(regs,R3(regs->iir),1); in handle_unaligned()
614 switch (regs->iir & OPCODE2_MASK) in handle_unaligned()
618 ret = emulate_ldd(regs,R2(regs->iir),1); in handle_unaligned()
622 ret = emulate_std(regs, R2(regs->iir),1); in handle_unaligned()
625 ret = emulate_ldd(regs, R2(regs->iir),0); in handle_unaligned()
628 ret = emulate_std(regs, R2(regs->iir),0); in handle_unaligned()
632 switch (regs->iir & OPCODE3_MASK) in handle_unaligned()
636 ret = emulate_ldw(regs, R2(regs->iir),0); in handle_unaligned()
639 ret = emulate_ldw(regs, R2(regs->iir),1); in handle_unaligned()
644 ret = emulate_stw(regs, R2(regs->iir),1); in handle_unaligned()
647 ret = emulate_stw(regs, R2(regs->iir),0); in handle_unaligned()
650 switch (regs->iir & OPCODE4_MASK) in handle_unaligned()
653 ret = emulate_ldh(regs, R2(regs->iir)); in handle_unaligned()
657 ret = emulate_ldw(regs, R2(regs->iir),0); in handle_unaligned()
660 ret = emulate_sth(regs, R2(regs->iir)); in handle_unaligned()
664 ret = emulate_stw(regs, R2(regs->iir),0); in handle_unaligned()
668 if (ret == 0 && modify && R1(regs->iir)) in handle_unaligned()
669 regs->gr[R1(regs->iir)] = newbase; in handle_unaligned()
673 printk(KERN_CRIT "Not-handled unaligned insn 0x%08lx\n", regs->iir); in handle_unaligned()
684 if (!user_mode(regs) && fixup_exception(regs)) in handle_unaligned()
688 die_if_kernel("Unaligned data reference", regs, 28); in handle_unaligned()
693 (void __user *)regs->ior, current); in handle_unaligned()
700 (void __user *)regs->ior, current); in handle_unaligned()
707 regs->gr[0]|=PSW_N; in handle_unaligned()
716 check_unaligned(struct pt_regs *regs) in check_unaligned() argument
723 switch (regs->iir & OPCODE1_MASK) { in check_unaligned()
741 switch (regs->iir & OPCODE4_MASK) { in check_unaligned()
756 return (int)(regs->ior & align_mask); in check_unaligned()