Lines Matching refs:regs

92 static inline unsigned long fetch_reg(unsigned int reg, struct pt_regs *regs)  in fetch_reg()  argument
97 return (!reg ? 0 : regs->u_regs[reg]); in fetch_reg()
100 win = (struct reg_window32 *) regs->u_regs[UREG_FP]; in fetch_reg()
104 static inline unsigned long safe_fetch_reg(unsigned int reg, struct pt_regs *regs) in safe_fetch_reg() argument
110 return (!reg ? 0 : regs->u_regs[reg]); in safe_fetch_reg()
113 win = (struct reg_window32 __user *) regs->u_regs[UREG_FP]; in safe_fetch_reg()
124 static inline unsigned long *fetch_reg_addr(unsigned int reg, struct pt_regs *regs) in fetch_reg_addr() argument
129 return &regs->u_regs[reg]; in fetch_reg_addr()
130 win = (struct reg_window32 *) regs->u_regs[UREG_FP]; in fetch_reg_addr()
134 static unsigned long compute_effective_address(struct pt_regs *regs, in compute_effective_address() argument
143 return (fetch_reg(rs1, regs) + sign_extend_imm13(insn)); in compute_effective_address()
146 return (fetch_reg(rs1, regs) + fetch_reg(rs2, regs)); in compute_effective_address()
150 unsigned long safe_compute_effective_address(struct pt_regs *regs, in safe_compute_effective_address() argument
159 return (safe_fetch_reg(rs1, regs) + sign_extend_imm13(insn)); in safe_compute_effective_address()
162 return (safe_fetch_reg(rs1, regs) + safe_fetch_reg(rs2, regs)); in safe_compute_effective_address()
179 struct pt_regs *regs) in do_int_store() argument
185 src_val = fetch_reg_addr(reg_num, regs); in do_int_store()
189 zero[1] = fetch_reg(1, regs); in do_int_store()
197 static inline void advance(struct pt_regs *regs) in advance() argument
199 regs->pc = regs->npc; in advance()
200 regs->npc += 4; in advance()
213 static void kernel_mna_trap_fault(struct pt_regs *regs, unsigned int insn) in kernel_mna_trap_fault() argument
215 unsigned long g2 = regs->u_regs [UREG_G2]; in kernel_mna_trap_fault()
216 unsigned long fixup = search_extables_range(regs->pc, &g2); in kernel_mna_trap_fault()
219 unsigned long address = compute_effective_address(regs, insn); in kernel_mna_trap_fault()
231 die_if_kernel("Oops", regs); in kernel_mna_trap_fault()
234 regs->pc = fixup; in kernel_mna_trap_fault()
235 regs->npc = regs->pc + 4; in kernel_mna_trap_fault()
236 regs->u_regs [UREG_G2] = g2; in kernel_mna_trap_fault()
239 asmlinkage void kernel_unaligned_trap(struct pt_regs *regs, unsigned int insn) in kernel_unaligned_trap() argument
246 regs->pc); in kernel_unaligned_trap()
249 unsigned long addr = compute_effective_address(regs, insn); in kernel_unaligned_trap()
252 perf_sw_event(PERF_COUNT_SW_ALIGNMENT_FAULTS, 1, regs, addr); in kernel_unaligned_trap()
256 regs), in kernel_unaligned_trap()
263 (unsigned long *) addr, regs); in kernel_unaligned_trap()
270 kernel_mna_trap_fault(regs, insn); in kernel_unaligned_trap()
272 advance(regs); in kernel_unaligned_trap()
276 static inline int ok_for_user(struct pt_regs *regs, unsigned int insn, in ok_for_user() argument
283 if ((regs->pc | regs->npc) & 3) in ok_for_user()
288 ((void __user *)(((unsigned long *)regs->u_regs[UREG_FP])+(regnum))) in ok_for_user()
311 static void user_mna_trap_fault(struct pt_regs *regs, unsigned int insn) in user_mna_trap_fault() argument
318 info.si_addr = (void __user *)safe_compute_effective_address(regs, insn); in user_mna_trap_fault()
323 asmlinkage void user_unaligned_trap(struct pt_regs *regs, unsigned int insn) in user_unaligned_trap() argument
331 if(!ok_for_user(regs, insn, dir)) { in user_unaligned_trap()
342 addr = compute_effective_address(regs, insn); in user_unaligned_trap()
343 perf_sw_event(PERF_COUNT_SW_ALIGNMENT_FAULTS, 1, regs, addr); in user_unaligned_trap()
347 regs), in user_unaligned_trap()
354 (unsigned long *) addr, regs); in user_unaligned_trap()
373 advance(regs); in user_unaligned_trap()
378 user_mna_trap_fault(regs, insn); in user_unaligned_trap()