Lines Matching refs:instr

319 do_alignment_finish_ldst(unsigned long addr, u32 instr, struct pt_regs *regs, union offset_union offset)
321 if (!LDST_U_BIT(instr))
324 if (!LDST_P_BIT(instr))
327 if (!LDST_P_BIT(instr) || LDST_W_BIT(instr))
328 regs->uregs[RN_BITS(instr)] = addr;
332 do_alignment_ldrhstrh(unsigned long addr, u32 instr, struct pt_regs *regs)
334 unsigned int rd = RD_BITS(instr);
341 if (LDST_L_BIT(instr)) {
346 if (instr & 0x40)
356 if (LDST_L_BIT(instr)) {
364 if (instr & 0x40)
381 do_alignment_ldrdstrd(unsigned long addr, u32 instr, struct pt_regs *regs)
383 unsigned int rd = RD_BITS(instr);
387 if ((instr & 0xfe000000) == 0xe8000000) {
389 rd2 = (instr >> 8) & 0xf;
390 load = !!(LDST_L_BIT(instr));
394 load = ((instr & 0xf0) == 0xd0);
443 do_alignment_ldrstr(unsigned long addr, u32 instr, struct pt_regs *regs)
445 unsigned int rd = RD_BITS(instr);
449 if ((!LDST_P_BIT(instr) && LDST_W_BIT(instr)) || user_mode(regs))
452 if (LDST_L_BIT(instr)) {
461 if (LDST_L_BIT(instr)) {
492 do_alignment_ldmstm(unsigned long addr, u32 instr, struct pt_regs *regs)
497 if (LDM_S_BIT(instr))
506 nr_regs = hweight16(REGMASK_BITS(instr)) * 4;
508 rn = RN_BITS(instr);
511 if (!LDST_U_BIT(instr))
514 if (!LDST_U_BIT(instr))
517 if (LDST_P_EQ_U(instr)) /* U = P */
533 pr_err("LDMSTM: PC = %08lx, instr = %08x, "
535 instruction_pointer(regs), instr, addr, eaddr);
542 for (regbits = REGMASK_BITS(instr), rd = 0; regbits;
545 if (LDST_L_BIT(instr)) {
555 for (regbits = REGMASK_BITS(instr), rd = 0; regbits;
558 if (LDST_L_BIT(instr)) {
568 if (LDST_W_BIT(instr))
570 if (!LDST_L_BIT(instr) || !(REGMASK_BITS(instr) & (1 << 15)))
713 u32 instr = *pinstr;
714 u16 tinst1 = (instr >> 16) & 0xffff;
715 u16 tinst2 = instr & 0xffff;
727 if (RN_BITS(instr) == 13 && (tinst2 & 0x09ff) == 0x0904) {
728 u32 L = !!(LDST_L_BIT(instr));
733 *pinstr = subset[L] | (1<<RD_BITS(instr));
763 u32 instr = 0;
767 fault = get_user(instr, ip);
769 fault = get_kernel_nofault(instr, ip);
771 *inst = __mem_to_opcode_arm(instr);
778 u16 instr = 0;
782 fault = get_user(instr, ip);
784 fault = get_kernel_nofault(instr, ip);
786 *inst = __mem_to_opcode_thumb16(instr);
796 int (*handler)(unsigned long addr, u32 instr, struct pt_regs *regs);
798 u32 instr = 0;
819 instr = __opcode_thumb32_compose(tinstr, tinst2);
823 instr = thumb2arm(tinstr);
827 fault = alignment_get_arm(regs, (void *)instrptr, &instr);
845 switch (CODING_BITS(instr)) {
847 if (LDSTHD_I_BIT(instr))
848 offset.un = (instr & 0xf00) >> 4 | (instr & 15);
850 offset.un = regs->uregs[RM_BITS(instr)];
852 if ((instr & 0x000000f0) == 0x000000b0 || /* LDRH, STRH */
853 (instr & 0x001000f0) == 0x001000f0) /* LDRSH */
855 else if ((instr & 0x001000f0) == 0x000000d0 || /* LDRD */
856 (instr & 0x001000f0) == 0x000000f0) /* STRD */
858 else if ((instr & 0x01f00ff0) == 0x01000090) /* SWP */
865 if (COND_BITS(instr) == 0xf0000000) /* NEON VLDn, VSTn */
867 offset.un = OFFSET_BITS(instr);
872 offset.un = regs->uregs[RM_BITS(instr)];
874 if (IS_SHIFT(instr)) {
875 unsigned int shiftval = SHIFT_BITS(instr);
877 switch(SHIFT_TYPE(instr)) {
907 handler = do_alignment_t32_to_handler(&instr, regs, &offset);
920 type = handler(addr, instr, regs);
928 do_alignment_finish_ldst(addr, instr, regs, offset);
954 isize == 2 ? tinstr : instr, instrptr);
966 isize == 2 ? tinstr : instr,