• Home
  • Raw
  • Download

Lines Matching refs:regs

10 static int get_reg(struct pt_regs *regs, int nr)  in get_reg()  argument
15 val = *(unsigned long *)(&regs->r0 + nr); in get_reg()
17 val = *(unsigned long *)(&regs->r4 + (nr - 4)); in get_reg()
19 val = *(unsigned long *)(&regs->r7 + (nr - 7)); in get_reg()
21 val = *(unsigned long *)(&regs->fp + (nr - 13)); in get_reg()
26 static void set_reg(struct pt_regs *regs, int nr, int val) in set_reg() argument
29 *(unsigned long *)(&regs->r0 + nr) = val; in set_reg()
31 *(unsigned long *)(&regs->r4 + (nr - 4)) = val; in set_reg()
33 *(unsigned long *)(&regs->r7 + (nr - 7)) = val; in set_reg()
35 *(unsigned long *)(&regs->fp + (nr - 13)) = val; in set_reg()
81 static int emu_addi(unsigned short insn, struct pt_regs *regs) in emu_addi() argument
87 val = get_reg(regs, dest); in emu_addi()
89 set_reg(regs, dest, val); in emu_addi()
94 static int emu_ldi(unsigned short insn, struct pt_regs *regs) in emu_ldi() argument
98 set_reg(regs, REG1(insn), (int)imm); in emu_ldi()
103 static int emu_add(unsigned short insn, struct pt_regs *regs) in emu_add() argument
109 val = get_reg(regs, dest); in emu_add()
110 val += get_reg(regs, src); in emu_add()
111 set_reg(regs, dest, val); in emu_add()
116 static int emu_addx(unsigned short insn, struct pt_regs *regs) in emu_addx() argument
121 val = regs->psw & PSW_BC ? 1 : 0; in emu_addx()
122 tmp = get_reg(regs, dest); in emu_addx()
124 val += (unsigned int)get_reg(regs, REG2(insn)); in emu_addx()
125 set_reg(regs, dest, val); in emu_addx()
129 regs->psw |= PSW_BC; in emu_addx()
131 regs->psw &= ~(PSW_BC); in emu_addx()
136 static int emu_and(unsigned short insn, struct pt_regs *regs) in emu_and() argument
141 val = get_reg(regs, dest); in emu_and()
142 val &= get_reg(regs, REG2(insn)); in emu_and()
143 set_reg(regs, dest, val); in emu_and()
148 static int emu_cmp(unsigned short insn, struct pt_regs *regs) in emu_cmp() argument
150 if (get_reg(regs, REG1(insn)) < get_reg(regs, REG2(insn))) in emu_cmp()
151 regs->psw |= PSW_BC; in emu_cmp()
153 regs->psw &= ~(PSW_BC); in emu_cmp()
158 static int emu_cmpeq(unsigned short insn, struct pt_regs *regs) in emu_cmpeq() argument
160 if (get_reg(regs, REG1(insn)) == get_reg(regs, REG2(insn))) in emu_cmpeq()
161 regs->psw |= PSW_BC; in emu_cmpeq()
163 regs->psw &= ~(PSW_BC); in emu_cmpeq()
168 static int emu_cmpu(unsigned short insn, struct pt_regs *regs) in emu_cmpu() argument
170 if ((unsigned int)get_reg(regs, REG1(insn)) in emu_cmpu()
171 < (unsigned int)get_reg(regs, REG2(insn))) in emu_cmpu()
172 regs->psw |= PSW_BC; in emu_cmpu()
174 regs->psw &= ~(PSW_BC); in emu_cmpu()
179 static int emu_cmpz(unsigned short insn, struct pt_regs *regs) in emu_cmpz() argument
181 if (!get_reg(regs, REG2(insn))) in emu_cmpz()
182 regs->psw |= PSW_BC; in emu_cmpz()
184 regs->psw &= ~(PSW_BC); in emu_cmpz()
189 static int emu_mv(unsigned short insn, struct pt_regs *regs) in emu_mv() argument
193 val = get_reg(regs, REG2(insn)); in emu_mv()
194 set_reg(regs, REG1(insn), val); in emu_mv()
199 static int emu_neg(unsigned short insn, struct pt_regs *regs) in emu_neg() argument
203 val = get_reg(regs, REG2(insn)); in emu_neg()
204 set_reg(regs, REG1(insn), 0 - val); in emu_neg()
209 static int emu_not(unsigned short insn, struct pt_regs *regs) in emu_not() argument
213 val = get_reg(regs, REG2(insn)); in emu_not()
214 set_reg(regs, REG1(insn), ~val); in emu_not()
219 static int emu_or(unsigned short insn, struct pt_regs *regs) in emu_or() argument
224 val = get_reg(regs, dest); in emu_or()
225 val |= get_reg(regs, REG2(insn)); in emu_or()
226 set_reg(regs, dest, val); in emu_or()
231 static int emu_sub(unsigned short insn, struct pt_regs *regs) in emu_sub() argument
236 val = get_reg(regs, dest); in emu_sub()
237 val -= get_reg(regs, REG2(insn)); in emu_sub()
238 set_reg(regs, dest, val); in emu_sub()
243 static int emu_subx(unsigned short insn, struct pt_regs *regs) in emu_subx() argument
248 val = tmp = get_reg(regs, dest); in emu_subx()
249 val -= (unsigned int)get_reg(regs, REG2(insn)); in emu_subx()
250 val -= regs->psw & PSW_BC ? 1 : 0; in emu_subx()
251 set_reg(regs, dest, val); in emu_subx()
255 regs->psw |= PSW_BC; in emu_subx()
257 regs->psw &= ~(PSW_BC); in emu_subx()
262 static int emu_xor(unsigned short insn, struct pt_regs *regs) in emu_xor() argument
267 val = (unsigned int)get_reg(regs, dest); in emu_xor()
268 val ^= (unsigned int)get_reg(regs, REG2(insn)); in emu_xor()
269 set_reg(regs, dest, val); in emu_xor()
274 static int emu_mul(unsigned short insn, struct pt_regs *regs) in emu_mul() argument
279 reg1 = get_reg(regs, dest); in emu_mul()
280 reg2 = get_reg(regs, REG2(insn)); in emu_mul()
287 set_reg(regs, dest, reg1); in emu_mul()
292 static int emu_mullo_a0(unsigned short insn, struct pt_regs *regs) in emu_mullo_a0() argument
296 reg1 = get_reg(regs, REG1(insn)); in emu_mullo_a0()
297 reg2 = get_reg(regs, REG2(insn)); in emu_mullo_a0()
306 regs->acc0h = reg1; in emu_mullo_a0()
307 regs->acc0l = reg2; in emu_mullo_a0()
312 static int emu_mullo_a1(unsigned short insn, struct pt_regs *regs) in emu_mullo_a1() argument
316 reg1 = get_reg(regs, REG1(insn)); in emu_mullo_a1()
317 reg2 = get_reg(regs, REG2(insn)); in emu_mullo_a1()
326 regs->acc1h = reg1; in emu_mullo_a1()
327 regs->acc1l = reg2; in emu_mullo_a1()
332 static int emu_mvfacmi_a0(unsigned short insn, struct pt_regs *regs) in emu_mvfacmi_a0() argument
336 val = (regs->acc0h << 16) | (regs->acc0l >> 16); in emu_mvfacmi_a0()
337 set_reg(regs, REG1(insn), (int)val); in emu_mvfacmi_a0()
342 static int emu_mvfacmi_a1(unsigned short insn, struct pt_regs *regs) in emu_mvfacmi_a1() argument
346 val = (regs->acc1h << 16) | (regs->acc1l >> 16); in emu_mvfacmi_a1()
347 set_reg(regs, REG1(insn), (int)val); in emu_mvfacmi_a1()
352 static int emu_m32r2(unsigned short insn, struct pt_regs *regs) in emu_m32r2() argument
361 res = emu_addi(insn, regs); in emu_m32r2()
364 res = emu_ldi(insn, regs); in emu_m32r2()
375 res = emu_add(insn, regs); in emu_m32r2()
378 res = emu_addx(insn, regs); in emu_m32r2()
381 res = emu_and(insn, regs); in emu_m32r2()
384 res = emu_cmp(insn, regs); in emu_m32r2()
387 res = emu_cmpeq(insn, regs); in emu_m32r2()
390 res = emu_cmpu(insn, regs); in emu_m32r2()
393 res = emu_cmpz(insn, regs); in emu_m32r2()
396 res = emu_mv(insn, regs); in emu_m32r2()
399 res = emu_neg(insn, regs); in emu_m32r2()
402 res = emu_not(insn, regs); in emu_m32r2()
405 res = emu_or(insn, regs); in emu_m32r2()
408 res = emu_sub(insn, regs); in emu_m32r2()
411 res = emu_subx(insn, regs); in emu_m32r2()
414 res = emu_xor(insn, regs); in emu_m32r2()
417 res = emu_mul(insn, regs); in emu_m32r2()
420 res = emu_mullo_a0(insn, regs); in emu_m32r2()
423 res = emu_mullo_a1(insn, regs); in emu_m32r2()
434 res = emu_mvfacmi_a0(insn, regs); in emu_m32r2()
437 res = emu_mvfacmi_a1(insn, regs); in emu_m32r2()
459 static int insn_check(unsigned long insn, struct pt_regs *regs, in insn_check() argument
471 regs->bpc += 4; in insn_check()
475 if (!(regs->bpc & 0x2) && insn & 0x8000) { in insn_check()
476 res = emu_m32r2((unsigned short)insn, regs); in insn_check()
477 regs->bpc += 4; in insn_check()
480 regs->bpc += 2; in insn_check()
486 static int emu_ld(unsigned long insn32, struct pt_regs *regs) in emu_ld() argument
495 ucp = (unsigned char *)get_reg(regs, src); in emu_ld()
497 if (insn_check(insn32, regs, &ucp)) in emu_ld()
511 set_reg(regs, REG1(insn16), val); in emu_ld()
515 set_reg(regs, src, (unsigned long)(ucp + 4)); in emu_ld()
520 static int emu_st(unsigned long insn32, struct pt_regs *regs) in emu_st() argument
530 ucp = (unsigned char *)get_reg(regs, src2); in emu_st()
532 if (insn_check(insn32, regs, &ucp)) in emu_st()
536 val = get_reg(regs, REG1(insn16)); in emu_st()
547 set_reg(regs, src2, (unsigned long)ucp); in emu_st()
556 set_reg(regs, src2, (unsigned long)ucp); in emu_st()
562 int handle_unaligned_access(unsigned long insn32, struct pt_regs *regs) in handle_unaligned_access() argument
574 if ((insn16 & 0x8000) && (regs->bpc & 3)) in handle_unaligned_access()
578 res = emu_ld(insn32, regs); in handle_unaligned_access()
580 res = emu_st(insn32, regs); in handle_unaligned_access()