Lines Matching refs:instr
44 int raw_patch_instruction(u32 *addr, ppc_inst_t instr) in raw_patch_instruction() argument
46 if (ppc_inst_prefixed(instr)) in raw_patch_instruction()
47 return __patch_mem(addr, ppc_inst_as_ulong(instr), addr, true); in raw_patch_instruction()
49 return __patch_mem(addr, ppc_inst_val(instr), addr, false); in raw_patch_instruction()
378 int patch_instruction(u32 *addr, ppc_inst_t instr) in patch_instruction() argument
380 if (ppc_inst_prefixed(instr)) in patch_instruction()
381 return patch_mem(addr, ppc_inst_as_ulong(instr), true); in patch_instruction()
383 return patch_mem(addr, ppc_inst_val(instr), false); in patch_instruction()
407 int patch_instruction(u32 *addr, ppc_inst_t instr) in patch_instruction() argument
409 return patch_mem(addr, ppc_inst_val(instr), false); in patch_instruction()
444 ppc_inst_t instr = ppc_inst_read(code); in __patch_instructions() local
446 if (ppc_inst_prefixed(instr)) { in __patch_instructions()
447 u64 val = ppc_inst_as_ulong(instr); in __patch_instructions()
451 u32 val = ppc_inst_val(instr); in __patch_instructions()
578 ppc_inst_t instr; in patch_branch() local
580 if (create_branch(&instr, addr, target, flags)) in patch_branch()
583 return patch_instruction(addr, instr); in patch_branch()
590 bool is_conditional_branch(ppc_inst_t instr) in is_conditional_branch() argument
592 unsigned int opcode = ppc_inst_primary_opcode(instr); in is_conditional_branch()
597 switch ((ppc_inst_val(instr) >> 1) & 0x3ff) { in is_conditional_branch()
608 int create_cond_branch(ppc_inst_t *instr, const u32 *addr, in create_cond_branch() argument
622 *instr = ppc_inst(0x40000000 | (flags & 0x3FF0003) | (offset & 0xFFFC)); in create_cond_branch()
627 int instr_is_relative_branch(ppc_inst_t instr) in instr_is_relative_branch() argument
629 if (ppc_inst_val(instr) & BRANCH_ABSOLUTE) in instr_is_relative_branch()
632 return instr_is_branch_iform(instr) || instr_is_branch_bform(instr); in instr_is_relative_branch()
635 int instr_is_relative_link_branch(ppc_inst_t instr) in instr_is_relative_link_branch() argument
637 return instr_is_relative_branch(instr) && (ppc_inst_val(instr) & BRANCH_SET_LINK); in instr_is_relative_link_branch()
640 static unsigned long branch_iform_target(const u32 *instr) in branch_iform_target() argument
644 imm = ppc_inst_val(ppc_inst_read(instr)) & 0x3FFFFFC; in branch_iform_target()
650 if ((ppc_inst_val(ppc_inst_read(instr)) & BRANCH_ABSOLUTE) == 0) in branch_iform_target()
651 imm += (unsigned long)instr; in branch_iform_target()
656 static unsigned long branch_bform_target(const u32 *instr) in branch_bform_target() argument
660 imm = ppc_inst_val(ppc_inst_read(instr)) & 0xFFFC; in branch_bform_target()
666 if ((ppc_inst_val(ppc_inst_read(instr)) & BRANCH_ABSOLUTE) == 0) in branch_bform_target()
667 imm += (unsigned long)instr; in branch_bform_target()
672 unsigned long branch_target(const u32 *instr) in branch_target() argument
674 if (instr_is_branch_iform(ppc_inst_read(instr))) in branch_target()
675 return branch_iform_target(instr); in branch_target()
676 else if (instr_is_branch_bform(ppc_inst_read(instr))) in branch_target()
677 return branch_bform_target(instr); in branch_target()
682 int translate_branch(ppc_inst_t *instr, const u32 *dest, const u32 *src) in translate_branch() argument
688 return create_branch(instr, dest, target, in translate_branch()
691 return create_cond_branch(instr, dest, target, in translate_branch()