Lines Matching refs:regs

83 static int generate_and_check_address(struct pt_regs *regs,  in generate_and_check_address()  argument
100 base_address = regs->regs[basereg]; in generate_and_check_address()
110 offset = regs->regs[offsetreg]; in generate_and_check_address()
121 if (user_mode(regs)) { in generate_and_check_address()
131 perf_sw_event(PERF_COUNT_SW_EMULATION_FAULTS, 1, regs, addr); in generate_and_check_address()
132 unaligned_fixups_notify(current, opcode, regs); in generate_and_check_address()
165 static int misaligned_load(struct pt_regs *regs, in misaligned_load() argument
176 error = generate_and_check_address(regs, opcode, in misaligned_load()
182 if (user_mode(regs)) { in misaligned_load()
195 regs->regs[destreg] = (__u64)(__s64) *(__s16 *) &buffer; in misaligned_load()
197 regs->regs[destreg] = (__u64) *(__u16 *) &buffer; in misaligned_load()
201 regs->regs[destreg] = (__u64)(__s64) *(__s32 *) &buffer; in misaligned_load()
204 regs->regs[destreg] = buffer; in misaligned_load()
208 width_shift, (unsigned long) regs->pc); in misaligned_load()
217 misaligned_kernel_word_load(address, do_sign_extend, &regs->regs[destreg]); in misaligned_load()
222 regs->regs[destreg] = lo | hi; in misaligned_load()
227 regs->regs[destreg] = lo | hi; in misaligned_load()
232 width_shift, (unsigned long) regs->pc); in misaligned_load()
240 static int misaligned_store(struct pt_regs *regs, in misaligned_store() argument
250 error = generate_and_check_address(regs, opcode, in misaligned_store()
256 if (user_mode(regs)) { in misaligned_store()
265 *(__u16 *) &buffer = (__u16) regs->regs[srcreg]; in misaligned_store()
268 *(__u32 *) &buffer = (__u32) regs->regs[srcreg]; in misaligned_store()
271 buffer = regs->regs[srcreg]; in misaligned_store()
275 width_shift, (unsigned long) regs->pc); in misaligned_store()
284 __u64 val = regs->regs[srcreg]; in misaligned_store()
301 width_shift, (unsigned long) regs->pc); in misaligned_store()
311 static int misaligned_fpu_load(struct pt_regs *regs, in misaligned_fpu_load() argument
322 error = generate_and_check_address(regs, opcode, in misaligned_fpu_load()
328 if (user_mode(regs)) { in misaligned_fpu_load()
347 regs->sr |= SR_FD; in misaligned_fpu_load()
373 width_shift, (unsigned long) regs->pc); in misaligned_fpu_load()
378 die ("Misaligned FPU load inside kernel", regs, 0); in misaligned_fpu_load()
383 static int misaligned_fpu_store(struct pt_regs *regs, in misaligned_fpu_store() argument
394 error = generate_and_check_address(regs, opcode, in misaligned_fpu_store()
400 if (user_mode(regs)) { in misaligned_fpu_store()
417 regs->sr |= SR_FD; in misaligned_fpu_store()
440 width_shift, (unsigned long) regs->pc); in misaligned_fpu_store()
451 die ("Misaligned FPU load inside kernel", regs, 0); in misaligned_fpu_store()
456 static int misaligned_fixup(struct pt_regs *regs) in misaligned_fixup() argument
467 error = read_opcode(regs->pc, &opcode, user_mode(regs)); in misaligned_fixup()
476 error = misaligned_load(regs, opcode, 1, 1, 1); in misaligned_fixup()
479 error = misaligned_load(regs, opcode, 1, 1, 0); in misaligned_fixup()
482 error = misaligned_load(regs, opcode, 1, 2, 1); in misaligned_fixup()
485 error = misaligned_load(regs, opcode, 1, 3, 0); in misaligned_fixup()
489 error = misaligned_store(regs, opcode, 1, 1); in misaligned_fixup()
492 error = misaligned_store(regs, opcode, 1, 2); in misaligned_fixup()
495 error = misaligned_store(regs, opcode, 1, 3); in misaligned_fixup()
501 error = misaligned_load(regs, opcode, 0, 1, 1); in misaligned_fixup()
504 error = misaligned_load(regs, opcode, 0, 1, 0); in misaligned_fixup()
507 error = misaligned_load(regs, opcode, 0, 2, 1); in misaligned_fixup()
510 error = misaligned_load(regs, opcode, 0, 3, 0); in misaligned_fixup()
521 error = misaligned_store(regs, opcode, 0, 1); in misaligned_fixup()
524 error = misaligned_store(regs, opcode, 0, 2); in misaligned_fixup()
527 error = misaligned_store(regs, opcode, 0, 3); in misaligned_fixup()
536 error = misaligned_fpu_load(regs, opcode, 1, 2, 0); in misaligned_fixup()
539 error = misaligned_fpu_load(regs, opcode, 1, 3, 1); in misaligned_fixup()
542 error = misaligned_fpu_load(regs, opcode, 1, 3, 0); in misaligned_fixup()
547 error = misaligned_fpu_load(regs, opcode, 0, 2, 0); in misaligned_fixup()
550 error = misaligned_fpu_load(regs, opcode, 0, 3, 1); in misaligned_fixup()
553 error = misaligned_fpu_load(regs, opcode, 0, 3, 0); in misaligned_fixup()
561 error = misaligned_fpu_store(regs, opcode, 1, 2, 0); in misaligned_fixup()
564 error = misaligned_fpu_store(regs, opcode, 1, 3, 1); in misaligned_fixup()
567 error = misaligned_fpu_store(regs, opcode, 1, 3, 0); in misaligned_fixup()
572 error = misaligned_fpu_store(regs, opcode, 0, 2, 0); in misaligned_fixup()
575 error = misaligned_fpu_store(regs, opcode, 0, 3, 1); in misaligned_fixup()
578 error = misaligned_fpu_store(regs, opcode, 0, 3, 0); in misaligned_fixup()
595 regs->pc += 4; /* Skip the instruction that's just been emulated */ in misaligned_fixup()
601 struct pt_regs *regs) in do_unhandled_exception() argument
603 if (user_mode(regs)) in do_unhandled_exception()
606 die_if_no_fixup(str, regs, error); in do_unhandled_exception()
610 asmlinkage void do_##name(unsigned long error_code, struct pt_regs *regs) \
612 do_unhandled_exception(signr, str, error_code, regs); \
647 void do_reserved_inst(unsigned long error_code, struct pt_regs *regs) in do_reserved_inst() argument
659 pc = regs->pc; in do_reserved_inst()
707 if (!user_mode(regs)) { in do_reserved_inst()
723 if (!user_mode(regs)) in do_reserved_inst()
750 do_unhandled_exception(signr, exception_name, error_code, regs); in do_reserved_inst()
762 asmlinkage void do_exception_error(unsigned long ex, struct pt_regs *regs) in do_exception_error() argument
764 die_if_kernel("exception", regs, ex); in do_exception_error()
767 asmlinkage int do_unknown_trapa(unsigned long scId, struct pt_regs *regs) in do_unknown_trapa() argument
772 die_if_kernel("unknown trapa", regs, scId); in do_unknown_trapa()
781 asmlinkage void do_address_error_load(unsigned long error_code, struct pt_regs *regs) in do_address_error_load() argument
783 if (misaligned_fixup(regs) < 0) in do_address_error_load()
785 error_code, regs); in do_address_error_load()
788 asmlinkage void do_address_error_store(unsigned long error_code, struct pt_regs *regs) in do_address_error_store() argument
790 if (misaligned_fixup(regs) < 0) in do_address_error_store()
792 error_code, regs); in do_address_error_store()
795 asmlinkage void do_debug_interrupt(unsigned long code, struct pt_regs *regs) in do_debug_interrupt() argument