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: Balamuruhan S <bala24@linux.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/20200626095158.1031507-4-bala24@linux.ibm.com
This commit is contained in:
parent
7e67c73b93
commit
68a180a44c
@ -104,6 +104,10 @@ enum instruction_type {
|
|||||||
|
|
||||||
#define MKOP(t, f, s) ((t) | (f) | SIZE(s))
|
#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 {
|
struct instruction_op {
|
||||||
int type;
|
int type;
|
||||||
int reg;
|
int reg;
|
||||||
|
@ -200,8 +200,8 @@ static nokprobe_inline unsigned long mlsd_8lsd_ea(unsigned int instr,
|
|||||||
unsigned int dd;
|
unsigned int dd;
|
||||||
unsigned long ea, d0, d1, d;
|
unsigned long ea, d0, d1, d;
|
||||||
|
|
||||||
prefix_r = instr & (1ul << 20);
|
prefix_r = GET_PREFIX_R(instr);
|
||||||
ra = (suffix >> 16) & 0x1f;
|
ra = GET_PREFIX_RA(suffix);
|
||||||
|
|
||||||
d0 = instr & 0x3ffff;
|
d0 = instr & 0x3ffff;
|
||||||
d1 = suffix & 0xffff;
|
d1 = suffix & 0xffff;
|
||||||
@ -1339,8 +1339,8 @@ int analyse_instr(struct instruction_op *op, const struct pt_regs *regs,
|
|||||||
switch (opcode) {
|
switch (opcode) {
|
||||||
#ifdef __powerpc64__
|
#ifdef __powerpc64__
|
||||||
case 1:
|
case 1:
|
||||||
prefix_r = word & (1ul << 20);
|
prefix_r = GET_PREFIX_R(word);
|
||||||
ra = (suffix >> 16) & 0x1f;
|
ra = GET_PREFIX_RA(suffix);
|
||||||
rd = (suffix >> 21) & 0x1f;
|
rd = (suffix >> 21) & 0x1f;
|
||||||
op->reg = rd;
|
op->reg = rd;
|
||||||
op->val = regs->gpr[rd];
|
op->val = regs->gpr[rd];
|
||||||
@ -2715,8 +2715,8 @@ int analyse_instr(struct instruction_op *op, const struct pt_regs *regs,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 1: /* Prefixed instructions */
|
case 1: /* Prefixed instructions */
|
||||||
prefix_r = word & (1ul << 20);
|
prefix_r = GET_PREFIX_R(word);
|
||||||
ra = (suffix >> 16) & 0x1f;
|
ra = GET_PREFIX_RA(suffix);
|
||||||
op->update_reg = ra;
|
op->update_reg = ra;
|
||||||
rd = (suffix >> 21) & 0x1f;
|
rd = (suffix >> 21) & 0x1f;
|
||||||
op->reg = rd;
|
op->reg = rd;
|
||||||
|
Loading…
Reference in New Issue
Block a user