Lines Matching refs:instr

329 do_alignment_finish_ldst(unsigned long addr, unsigned long instr, struct pt_regs *regs, union offse…  in do_alignment_finish_ldst()  argument
331 if (!LDST_U_BIT(instr)) in do_alignment_finish_ldst()
334 if (!LDST_P_BIT(instr)) in do_alignment_finish_ldst()
337 if (!LDST_P_BIT(instr) || LDST_W_BIT(instr)) in do_alignment_finish_ldst()
338 regs->uregs[RN_BITS(instr)] = addr; in do_alignment_finish_ldst()
342 do_alignment_ldrhstrh(unsigned long addr, unsigned long instr, struct pt_regs *regs) in do_alignment_ldrhstrh() argument
344 unsigned int rd = RD_BITS(instr); in do_alignment_ldrhstrh()
351 if (LDST_L_BIT(instr)) { in do_alignment_ldrhstrh()
356 if (instr & 0x40) in do_alignment_ldrhstrh()
366 if (LDST_L_BIT(instr)) { in do_alignment_ldrhstrh()
374 if (instr & 0x40) in do_alignment_ldrhstrh()
391 do_alignment_ldrdstrd(unsigned long addr, unsigned long instr, in do_alignment_ldrdstrd() argument
394 unsigned int rd = RD_BITS(instr); in do_alignment_ldrdstrd()
398 if ((instr & 0xfe000000) == 0xe8000000) { in do_alignment_ldrdstrd()
400 rd2 = (instr >> 8) & 0xf; in do_alignment_ldrdstrd()
401 load = !!(LDST_L_BIT(instr)); in do_alignment_ldrdstrd()
405 load = ((instr & 0xf0) == 0xd0); in do_alignment_ldrdstrd()
454 do_alignment_ldrstr(unsigned long addr, unsigned long instr, struct pt_regs *regs) in do_alignment_ldrstr() argument
456 unsigned int rd = RD_BITS(instr); in do_alignment_ldrstr()
460 if ((!LDST_P_BIT(instr) && LDST_W_BIT(instr)) || user_mode(regs)) in do_alignment_ldrstr()
463 if (LDST_L_BIT(instr)) { in do_alignment_ldrstr()
472 if (LDST_L_BIT(instr)) { in do_alignment_ldrstr()
503 do_alignment_ldmstm(unsigned long addr, unsigned long instr, struct pt_regs *regs) in do_alignment_ldmstm() argument
508 if (LDM_S_BIT(instr)) in do_alignment_ldmstm()
517 nr_regs = hweight16(REGMASK_BITS(instr)) * 4; in do_alignment_ldmstm()
519 rn = RN_BITS(instr); in do_alignment_ldmstm()
522 if (!LDST_U_BIT(instr)) in do_alignment_ldmstm()
525 if (!LDST_U_BIT(instr)) in do_alignment_ldmstm()
528 if (LDST_P_EQ_U(instr)) /* U = P */ in do_alignment_ldmstm()
546 instruction_pointer(regs), instr, addr, eaddr); in do_alignment_ldmstm()
553 for (regbits = REGMASK_BITS(instr), rd = 0; regbits; in do_alignment_ldmstm()
556 if (LDST_L_BIT(instr)) { in do_alignment_ldmstm()
566 for (regbits = REGMASK_BITS(instr), rd = 0; regbits; in do_alignment_ldmstm()
569 if (LDST_L_BIT(instr)) { in do_alignment_ldmstm()
579 if (LDST_W_BIT(instr)) in do_alignment_ldmstm()
581 if (!LDST_L_BIT(instr) || !(REGMASK_BITS(instr) & (1 << 15))) in do_alignment_ldmstm()
724 unsigned long instr = *pinstr; in do_alignment_t32_to_handler() local
725 u16 tinst1 = (instr >> 16) & 0xffff; in do_alignment_t32_to_handler()
726 u16 tinst2 = instr & 0xffff; in do_alignment_t32_to_handler()
738 if (RN_BITS(instr) == 13 && (tinst2 & 0x09ff) == 0x0904) { in do_alignment_t32_to_handler()
739 u32 L = !!(LDST_L_BIT(instr)); in do_alignment_t32_to_handler()
744 *pinstr = subset[L] | (1<<RD_BITS(instr)); in do_alignment_t32_to_handler()
774 unsigned long instr = 0, instrptr; in do_alignment() local
775 int (*handler)(unsigned long addr, unsigned long instr, struct pt_regs *regs); in do_alignment()
798 instr = __opcode_thumb32_compose(tinstr, tinst2); in do_alignment()
802 instr = thumb2arm(tinstr); in do_alignment()
806 fault = probe_kernel_address((void *)instrptr, instr); in do_alignment()
807 instr = __mem_to_opcode_arm(instr); in do_alignment()
825 switch (CODING_BITS(instr)) { in do_alignment()
827 if (LDSTHD_I_BIT(instr)) in do_alignment()
828 offset.un = (instr & 0xf00) >> 4 | (instr & 15); in do_alignment()
830 offset.un = regs->uregs[RM_BITS(instr)]; in do_alignment()
832 if ((instr & 0x000000f0) == 0x000000b0 || /* LDRH, STRH */ in do_alignment()
833 (instr & 0x001000f0) == 0x001000f0) /* LDRSH */ in do_alignment()
835 else if ((instr & 0x001000f0) == 0x000000d0 || /* LDRD */ in do_alignment()
836 (instr & 0x001000f0) == 0x000000f0) /* STRD */ in do_alignment()
838 else if ((instr & 0x01f00ff0) == 0x01000090) /* SWP */ in do_alignment()
845 if (COND_BITS(instr) == 0xf0000000) /* NEON VLDn, VSTn */ in do_alignment()
847 offset.un = OFFSET_BITS(instr); in do_alignment()
852 offset.un = regs->uregs[RM_BITS(instr)]; in do_alignment()
854 if (IS_SHIFT(instr)) { in do_alignment()
855 unsigned int shiftval = SHIFT_BITS(instr); in do_alignment()
857 switch(SHIFT_TYPE(instr)) { in do_alignment()
887 handler = do_alignment_t32_to_handler(&instr, regs, &offset); in do_alignment()
900 type = handler(addr, instr, regs); in do_alignment()
908 do_alignment_finish_ldst(addr, instr, regs, offset); in do_alignment()
931 isize == 2 ? tinstr : instr, instrptr); in do_alignment()
943 isize == 2 ? tinstr : instr, in do_alignment()