Commit 68a180a4 authored by Balamuruhan S's avatar Balamuruhan S Committed by Michael Ellerman
Browse files

powerpc/sstep: Introduce macros to retrieve Prefix instruction operands



retrieve prefix instruction operands RA and pc relative bit R values
using macros and adopt it in sstep.c and test_emulate_step.c.

Signed-off-by: default avatarBalamuruhan S <bala24@linux.ibm.com>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20200626095158.1031507-4-bala24@linux.ibm.com
parent 7e67c73b
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -104,6 +104,10 @@ enum instruction_type {

#define MKOP(t, f, s)	((t) | (f) | SIZE(s))

/* Prefix instruction operands */
#define GET_PREFIX_RA(i)	(((i) >> 16) & 0x1f)
#define GET_PREFIX_R(i)		((i) & (1ul << 20))

struct instruction_op {
	int type;
	int reg;
+6 −6
Original line number Diff line number Diff line
@@ -200,8 +200,8 @@ static nokprobe_inline unsigned long mlsd_8lsd_ea(unsigned int instr,
	unsigned int  dd;
	unsigned long ea, d0, d1, d;

	prefix_r = instr & (1ul << 20);
	ra = (suffix >> 16) & 0x1f;
	prefix_r = GET_PREFIX_R(instr);
	ra = GET_PREFIX_RA(suffix);

	d0 = instr & 0x3ffff;
	d1 = suffix & 0xffff;
@@ -1339,8 +1339,8 @@ int analyse_instr(struct instruction_op *op, const struct pt_regs *regs,
	switch (opcode) {
#ifdef __powerpc64__
	case 1:
		prefix_r = word & (1ul << 20);
		ra = (suffix >> 16) & 0x1f;
		prefix_r = GET_PREFIX_R(word);
		ra = GET_PREFIX_RA(suffix);
		rd = (suffix >> 21) & 0x1f;
		op->reg = rd;
		op->val = regs->gpr[rd];
@@ -2715,8 +2715,8 @@ int analyse_instr(struct instruction_op *op, const struct pt_regs *regs,
		}
		break;
	case 1: /* Prefixed instructions */
		prefix_r = word & (1ul << 20);
		ra = (suffix >> 16) & 0x1f;
		prefix_r = GET_PREFIX_R(word);
		ra = GET_PREFIX_RA(suffix);
		op->update_reg = ra;
		rd = (suffix >> 21) & 0x1f;
		op->reg = rd;