Lines Matching refs:regs
108 static int emulate_ldh(struct pt_regs *regs, int toreg) in emulate_ldh() argument
110 unsigned long saddr = regs->ior; in emulate_ldh()
115 regs->isr, regs->ior, toreg); in emulate_ldh()
126 : "r" (saddr), "r" (regs->isr) ); in emulate_ldh()
131 regs->gr[toreg] = val; in emulate_ldh()
136 static int emulate_ldw(struct pt_regs *regs, int toreg, int flop) in emulate_ldw() argument
138 unsigned long saddr = regs->ior; in emulate_ldw()
143 regs->isr, regs->ior, toreg); in emulate_ldw()
158 : "r" (saddr), "r" (regs->isr) ); in emulate_ldw()
163 ((__u32*)(regs->fr))[toreg] = val; in emulate_ldw()
165 regs->gr[toreg] = val; in emulate_ldw()
169 static int emulate_ldd(struct pt_regs *regs, int toreg, int flop) in emulate_ldd() argument
171 unsigned long saddr = regs->ior; in emulate_ldd()
176 regs->isr, regs->ior, toreg); in emulate_ldd()
195 : "0" (val), "r" (saddr), "r" (regs->isr) in emulate_ldd()
216 : "r" (regs->isr) ); in emulate_ldd()
223 regs->fr[toreg] = val; in emulate_ldd()
225 regs->gr[toreg] = val; in emulate_ldd()
230 static int emulate_sth(struct pt_regs *regs, int frreg) in emulate_sth() argument
232 unsigned long val = regs->gr[frreg], temp1; in emulate_sth()
239 val, regs->isr, regs->ior); in emulate_sth()
250 : "r" (val), "r" (regs->ior), "r" (regs->isr) ); in emulate_sth()
255 static int emulate_stw(struct pt_regs *regs, int frreg, int flop) in emulate_stw() argument
261 val = ((__u32*)(regs->fr))[frreg]; in emulate_stw()
263 val = regs->gr[frreg]; in emulate_stw()
268 val, regs->isr, regs->ior); in emulate_stw()
291 : "r" (val), "r" (regs->ior), "r" (regs->isr) in emulate_stw()
296 static int emulate_std(struct pt_regs *regs, int frreg, int flop) in emulate_std() argument
302 val = regs->fr[frreg]; in emulate_std()
304 val = regs->gr[frreg]; in emulate_std()
309 val, regs->isr, regs->ior); in emulate_std()
337 : "r" (val), "r" (regs->ior), "r" (regs->isr) in emulate_std()
366 : "r" (val), "r" (regs->ior), "r" (regs->isr) in emulate_std()
374 void handle_unaligned(struct pt_regs *regs) in handle_unaligned() argument
377 unsigned long newbase = R1(regs->iir)?regs->gr[R1(regs->iir)]:0; in handle_unaligned()
384 if (user_mode(regs)) { in handle_unaligned()
393 current->comm, task_pid_nr(current), regs->ior, in handle_unaligned()
394 regs->iaoq[0], regs->iir); in handle_unaligned()
396 show_regs(regs); in handle_unaligned()
405 switch (MAJOR_OP(regs->iir)) in handle_unaligned()
410 if (regs->iir&0x20) in handle_unaligned()
413 if (regs->iir&0x1000) /* short loads */ in handle_unaligned()
414 if (regs->iir&0x200) in handle_unaligned()
415 newbase += IM5_3(regs->iir); in handle_unaligned()
417 newbase += IM5_2(regs->iir); in handle_unaligned()
418 else if (regs->iir&0x2000) /* scaled indexed */ in handle_unaligned()
421 switch (regs->iir & OPCODE1_MASK) in handle_unaligned()
431 newbase += (R2(regs->iir)?regs->gr[R2(regs->iir)]:0)<<shift; in handle_unaligned()
433 newbase += (R2(regs->iir)?regs->gr[R2(regs->iir)]:0); in handle_unaligned()
439 newbase += IM14(regs->iir); in handle_unaligned()
443 if (regs->iir&8) in handle_unaligned()
446 newbase += IM14(regs->iir&~0xe); in handle_unaligned()
452 newbase += IM14(regs->iir&6); in handle_unaligned()
456 if (regs->iir&4) in handle_unaligned()
459 newbase += IM14(regs->iir&~4); in handle_unaligned()
465 switch (regs->iir & OPCODE1_MASK) in handle_unaligned()
469 ret = emulate_ldh(regs, R3(regs->iir)); in handle_unaligned()
476 ret = emulate_ldw(regs, R3(regs->iir), 0); in handle_unaligned()
480 ret = emulate_sth(regs, R2(regs->iir)); in handle_unaligned()
485 ret = emulate_stw(regs, R2(regs->iir), 0); in handle_unaligned()
493 ret = emulate_ldd(regs, R3(regs->iir), 0); in handle_unaligned()
498 ret = emulate_std(regs, R2(regs->iir), 0); in handle_unaligned()
506 ret = emulate_ldw(regs, FR3(regs->iir), 1); in handle_unaligned()
511 ret = emulate_ldd(regs, R3(regs->iir), 1); in handle_unaligned()
518 ret = emulate_stw(regs, FR3(regs->iir), 1); in handle_unaligned()
523 ret = emulate_std(regs, R3(regs->iir), 1); in handle_unaligned()
533 switch (regs->iir & OPCODE2_MASK) in handle_unaligned()
536 ret = emulate_ldd(regs,R2(regs->iir),1); in handle_unaligned()
539 ret = emulate_std(regs, R2(regs->iir),1); in handle_unaligned()
543 ret = emulate_ldd(regs, R2(regs->iir),0); in handle_unaligned()
546 ret = emulate_std(regs, R2(regs->iir),0); in handle_unaligned()
550 switch (regs->iir & OPCODE3_MASK) in handle_unaligned()
553 ret = emulate_ldw(regs, R2(regs->iir), 1); in handle_unaligned()
556 ret = emulate_ldw(regs, R2(regs->iir), 0); in handle_unaligned()
560 ret = emulate_stw(regs, R2(regs->iir),1); in handle_unaligned()
563 ret = emulate_stw(regs, R2(regs->iir),0); in handle_unaligned()
566 switch (regs->iir & OPCODE4_MASK) in handle_unaligned()
569 ret = emulate_ldh(regs, R2(regs->iir)); in handle_unaligned()
573 ret = emulate_ldw(regs, R2(regs->iir),0); in handle_unaligned()
576 ret = emulate_sth(regs, R2(regs->iir)); in handle_unaligned()
580 ret = emulate_stw(regs, R2(regs->iir),0); in handle_unaligned()
584 if (ret == 0 && modify && R1(regs->iir)) in handle_unaligned()
585 regs->gr[R1(regs->iir)] = newbase; in handle_unaligned()
589 printk(KERN_CRIT "Not-handled unaligned insn 0x%08lx\n", regs->iir); in handle_unaligned()
600 if (!user_mode(regs) && fixup_exception(regs)) in handle_unaligned()
604 die_if_kernel("Unaligned data reference", regs, 28); in handle_unaligned()
609 (void __user *)regs->ior); in handle_unaligned()
616 (void __user *)regs->ior); in handle_unaligned()
623 regs->gr[0]|=PSW_N; in handle_unaligned()
632 check_unaligned(struct pt_regs *regs) in check_unaligned() argument
639 switch (regs->iir & OPCODE1_MASK) { in check_unaligned()
657 switch (regs->iir & OPCODE4_MASK) { in check_unaligned()
672 return (int)(regs->ior & align_mask); in check_unaligned()