Lines Matching refs:instr

18 static int __patch_instruction(u32 *exec_addr, ppc_inst_t instr, u32 *patch_addr)  in __patch_instruction()  argument
20 if (!ppc_inst_prefixed(instr)) { in __patch_instruction()
21 u32 val = ppc_inst_val(instr); in __patch_instruction()
25 u64 val = ppc_inst_as_ulong(instr); in __patch_instruction()
39 int raw_patch_instruction(u32 *addr, ppc_inst_t instr) in raw_patch_instruction() argument
41 return __patch_instruction(addr, instr, addr); in raw_patch_instruction()
150 static int __do_patch_instruction(u32 *addr, ppc_inst_t instr) in __do_patch_instruction() argument
167 err = __patch_instruction(addr, instr, patch_addr); in __do_patch_instruction()
175 static int do_patch_instruction(u32 *addr, ppc_inst_t instr) in do_patch_instruction() argument
186 return raw_patch_instruction(addr, instr); in do_patch_instruction()
189 err = __do_patch_instruction(addr, instr); in do_patch_instruction()
196 static int do_patch_instruction(u32 *addr, ppc_inst_t instr) in do_patch_instruction() argument
198 return raw_patch_instruction(addr, instr); in do_patch_instruction()
205 int patch_instruction(u32 *addr, ppc_inst_t instr) in patch_instruction() argument
211 return do_patch_instruction(addr, instr); in patch_instruction()
217 ppc_inst_t instr; in patch_branch() local
219 if (create_branch(&instr, addr, target, flags)) in patch_branch()
222 return patch_instruction(addr, instr); in patch_branch()
229 bool is_conditional_branch(ppc_inst_t instr) in is_conditional_branch() argument
231 unsigned int opcode = ppc_inst_primary_opcode(instr); in is_conditional_branch()
236 switch ((ppc_inst_val(instr) >> 1) & 0x3ff) { in is_conditional_branch()
247 int create_cond_branch(ppc_inst_t *instr, const u32 *addr, in create_cond_branch() argument
261 *instr = ppc_inst(0x40000000 | (flags & 0x3FF0003) | (offset & 0xFFFC)); in create_cond_branch()
266 int instr_is_relative_branch(ppc_inst_t instr) in instr_is_relative_branch() argument
268 if (ppc_inst_val(instr) & BRANCH_ABSOLUTE) in instr_is_relative_branch()
271 return instr_is_branch_iform(instr) || instr_is_branch_bform(instr); in instr_is_relative_branch()
274 int instr_is_relative_link_branch(ppc_inst_t instr) in instr_is_relative_link_branch() argument
276 return instr_is_relative_branch(instr) && (ppc_inst_val(instr) & BRANCH_SET_LINK); in instr_is_relative_link_branch()
279 static unsigned long branch_iform_target(const u32 *instr) in branch_iform_target() argument
283 imm = ppc_inst_val(ppc_inst_read(instr)) & 0x3FFFFFC; in branch_iform_target()
289 if ((ppc_inst_val(ppc_inst_read(instr)) & BRANCH_ABSOLUTE) == 0) in branch_iform_target()
290 imm += (unsigned long)instr; in branch_iform_target()
295 static unsigned long branch_bform_target(const u32 *instr) in branch_bform_target() argument
299 imm = ppc_inst_val(ppc_inst_read(instr)) & 0xFFFC; in branch_bform_target()
305 if ((ppc_inst_val(ppc_inst_read(instr)) & BRANCH_ABSOLUTE) == 0) in branch_bform_target()
306 imm += (unsigned long)instr; in branch_bform_target()
311 unsigned long branch_target(const u32 *instr) in branch_target() argument
313 if (instr_is_branch_iform(ppc_inst_read(instr))) in branch_target()
314 return branch_iform_target(instr); in branch_target()
315 else if (instr_is_branch_bform(ppc_inst_read(instr))) in branch_target()
316 return branch_bform_target(instr); in branch_target()
321 int translate_branch(ppc_inst_t *instr, const u32 *dest, const u32 *src) in translate_branch() argument
327 return create_branch(instr, dest, target, in translate_branch()
330 return create_cond_branch(instr, dest, target, in translate_branch()