Lines Matching refs:regs
106 static int emulate_ldh(struct pt_regs *regs, int toreg) in emulate_ldh() argument
108 unsigned long saddr = regs->ior; in emulate_ldh()
113 regs->isr, regs->ior, toreg); in emulate_ldh()
124 : "r" (saddr), "r" (regs->isr) ); in emulate_ldh()
129 regs->gr[toreg] = val; in emulate_ldh()
134 static int emulate_ldw(struct pt_regs *regs, int toreg, int flop) in emulate_ldw() argument
136 unsigned long saddr = regs->ior; in emulate_ldw()
141 regs->isr, regs->ior, toreg); in emulate_ldw()
156 : "r" (saddr), "r" (regs->isr) ); in emulate_ldw()
161 ((__u32*)(regs->fr))[toreg] = val; in emulate_ldw()
163 regs->gr[toreg] = val; in emulate_ldw()
167 static int emulate_ldd(struct pt_regs *regs, int toreg, int flop) in emulate_ldd() argument
169 unsigned long saddr = regs->ior; in emulate_ldd()
174 regs->isr, regs->ior, toreg); in emulate_ldd()
193 : "0" (val), "r" (saddr), "r" (regs->isr) in emulate_ldd()
214 : "r" (regs->isr) ); in emulate_ldd()
221 regs->fr[toreg] = val; in emulate_ldd()
223 regs->gr[toreg] = val; in emulate_ldd()
228 static int emulate_sth(struct pt_regs *regs, int frreg) in emulate_sth() argument
230 unsigned long val = regs->gr[frreg], temp1; in emulate_sth()
237 val, regs->isr, regs->ior); in emulate_sth()
248 : "r" (val), "r" (regs->ior), "r" (regs->isr) ); in emulate_sth()
253 static int emulate_stw(struct pt_regs *regs, int frreg, int flop) in emulate_stw() argument
259 val = ((__u32*)(regs->fr))[frreg]; in emulate_stw()
261 val = regs->gr[frreg]; in emulate_stw()
266 val, regs->isr, regs->ior); in emulate_stw()
289 : "r" (val), "r" (regs->ior), "r" (regs->isr) in emulate_stw()
294 static int emulate_std(struct pt_regs *regs, int frreg, int flop) in emulate_std() argument
300 val = regs->fr[frreg]; in emulate_std()
302 val = regs->gr[frreg]; in emulate_std()
307 val, regs->isr, regs->ior); in emulate_std()
335 : "r" (val), "r" (regs->ior), "r" (regs->isr) in emulate_std()
365 : "r" (valh), "r" (vall), "r" (regs->ior), "r" (regs->isr) in emulate_std()
373 void handle_unaligned(struct pt_regs *regs) in handle_unaligned() argument
376 unsigned long newbase = R1(regs->iir)?regs->gr[R1(regs->iir)]:0; in handle_unaligned()
383 if (user_mode(regs)) { in handle_unaligned()
392 current->comm, task_pid_nr(current), regs->ior, in handle_unaligned()
393 regs->iaoq[0], regs->iir); in handle_unaligned()
395 show_regs(regs); in handle_unaligned()
404 switch (MAJOR_OP(regs->iir)) in handle_unaligned()
409 if (regs->iir&0x20) in handle_unaligned()
412 if (regs->iir&0x1000) /* short loads */ in handle_unaligned()
413 if (regs->iir&0x200) in handle_unaligned()
414 newbase += IM5_3(regs->iir); in handle_unaligned()
416 newbase += IM5_2(regs->iir); in handle_unaligned()
417 else if (regs->iir&0x2000) /* scaled indexed */ in handle_unaligned()
420 switch (regs->iir & OPCODE1_MASK) in handle_unaligned()
430 newbase += (R2(regs->iir)?regs->gr[R2(regs->iir)]:0)<<shift; in handle_unaligned()
432 newbase += (R2(regs->iir)?regs->gr[R2(regs->iir)]:0); in handle_unaligned()
438 newbase += IM14(regs->iir); in handle_unaligned()
442 if (regs->iir&8) in handle_unaligned()
445 newbase += IM14(regs->iir&~0xe); in handle_unaligned()
451 newbase += IM14(regs->iir&6); in handle_unaligned()
455 if (regs->iir&4) in handle_unaligned()
458 newbase += IM14(regs->iir&~4); in handle_unaligned()
464 switch (regs->iir & OPCODE1_MASK) in handle_unaligned()
468 ret = emulate_ldh(regs, R3(regs->iir)); in handle_unaligned()
475 ret = emulate_ldw(regs, R3(regs->iir),0); in handle_unaligned()
479 ret = emulate_sth(regs, R2(regs->iir)); in handle_unaligned()
484 ret = emulate_stw(regs, R2(regs->iir),0); in handle_unaligned()
492 ret = emulate_ldd(regs, R3(regs->iir),0); in handle_unaligned()
497 ret = emulate_std(regs, R2(regs->iir),0); in handle_unaligned()
505 ret = emulate_ldw(regs,FR3(regs->iir),1); in handle_unaligned()
510 ret = emulate_ldd(regs,R3(regs->iir),1); in handle_unaligned()
517 ret = emulate_stw(regs,FR3(regs->iir),1); in handle_unaligned()
522 ret = emulate_std(regs,R3(regs->iir),1); in handle_unaligned()
532 switch (regs->iir & OPCODE2_MASK) in handle_unaligned()
535 ret = emulate_ldd(regs,R2(regs->iir),1); in handle_unaligned()
538 ret = emulate_std(regs, R2(regs->iir),1); in handle_unaligned()
542 ret = emulate_ldd(regs, R2(regs->iir),0); in handle_unaligned()
545 ret = emulate_std(regs, R2(regs->iir),0); in handle_unaligned()
549 switch (regs->iir & OPCODE3_MASK) in handle_unaligned()
552 ret = emulate_ldw(regs, R2(regs->iir), 1); in handle_unaligned()
555 ret = emulate_ldw(regs, R2(regs->iir), 0); in handle_unaligned()
559 ret = emulate_stw(regs, R2(regs->iir),1); in handle_unaligned()
562 ret = emulate_stw(regs, R2(regs->iir),0); in handle_unaligned()
565 switch (regs->iir & OPCODE4_MASK) in handle_unaligned()
568 ret = emulate_ldh(regs, R2(regs->iir)); in handle_unaligned()
572 ret = emulate_ldw(regs, R2(regs->iir),0); in handle_unaligned()
575 ret = emulate_sth(regs, R2(regs->iir)); in handle_unaligned()
579 ret = emulate_stw(regs, R2(regs->iir),0); in handle_unaligned()
583 if (ret == 0 && modify && R1(regs->iir)) in handle_unaligned()
584 regs->gr[R1(regs->iir)] = newbase; in handle_unaligned()
588 printk(KERN_CRIT "Not-handled unaligned insn 0x%08lx\n", regs->iir); in handle_unaligned()
599 if (!user_mode(regs) && fixup_exception(regs)) in handle_unaligned()
603 die_if_kernel("Unaligned data reference", regs, 28); in handle_unaligned()
608 (void __user *)regs->ior); in handle_unaligned()
615 (void __user *)regs->ior); in handle_unaligned()
622 regs->gr[0]|=PSW_N; in handle_unaligned()
631 check_unaligned(struct pt_regs *regs) in check_unaligned() argument
638 switch (regs->iir & OPCODE1_MASK) { in check_unaligned()
656 switch (regs->iir & OPCODE4_MASK) { in check_unaligned()
671 return (int)(regs->ior & align_mask); in check_unaligned()