Lines Matching refs:instr
23 static int __patch_instruction(u32 *exec_addr, ppc_inst_t instr, u32 *patch_addr)
25 if (!ppc_inst_prefixed(instr)) {
26 u32 val = ppc_inst_val(instr);
30 u64 val = ppc_inst_as_ulong(instr);
44 int raw_patch_instruction(u32 *addr, ppc_inst_t instr)
46 return __patch_instruction(addr, instr, addr);
281 static int __do_patch_instruction_mm(u32 *addr, ppc_inst_t instr)
310 err = __patch_instruction(addr, instr, patch_addr);
331 static int __do_patch_instruction(u32 *addr, ppc_inst_t instr)
348 err = __patch_instruction(addr, instr, patch_addr);
356 int patch_instruction(u32 *addr, ppc_inst_t instr)
368 return raw_patch_instruction(addr, instr);
372 err = __do_patch_instruction_mm(addr, instr);
374 err = __do_patch_instruction(addr, instr);
383 ppc_inst_t instr;
385 if (create_branch(&instr, addr, target, flags))
388 return patch_instruction(addr, instr);
395 bool is_conditional_branch(ppc_inst_t instr)
397 unsigned int opcode = ppc_inst_primary_opcode(instr);
402 switch ((ppc_inst_val(instr) >> 1) & 0x3ff) {
413 int create_cond_branch(ppc_inst_t *instr, const u32 *addr,
427 *instr = ppc_inst(0x40000000 | (flags & 0x3FF0003) | (offset & 0xFFFC));
432 int instr_is_relative_branch(ppc_inst_t instr)
434 if (ppc_inst_val(instr) & BRANCH_ABSOLUTE)
437 return instr_is_branch_iform(instr) || instr_is_branch_bform(instr);
440 int instr_is_relative_link_branch(ppc_inst_t instr)
442 return instr_is_relative_branch(instr) && (ppc_inst_val(instr) & BRANCH_SET_LINK);
445 static unsigned long branch_iform_target(const u32 *instr)
449 imm = ppc_inst_val(ppc_inst_read(instr)) & 0x3FFFFFC;
455 if ((ppc_inst_val(ppc_inst_read(instr)) & BRANCH_ABSOLUTE) == 0)
456 imm += (unsigned long)instr;
461 static unsigned long branch_bform_target(const u32 *instr)
465 imm = ppc_inst_val(ppc_inst_read(instr)) & 0xFFFC;
471 if ((ppc_inst_val(ppc_inst_read(instr)) & BRANCH_ABSOLUTE) == 0)
472 imm += (unsigned long)instr;
477 unsigned long branch_target(const u32 *instr)
479 if (instr_is_branch_iform(ppc_inst_read(instr)))
480 return branch_iform_target(instr);
481 else if (instr_is_branch_bform(ppc_inst_read(instr)))
482 return branch_bform_target(instr);
487 int translate_branch(ppc_inst_t *instr, const u32 *dest, const u32 *src)
493 return create_branch(instr, dest, target,
496 return create_cond_branch(instr, dest, target,