linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 1/5] powerpc/lib/sstep: Add cmpb instruction emulation
@ 2017-07-24  1:01 Matt Brown
  2017-07-24  1:01 ` [PATCH v2 2/5] powerpc/lib/sstep: Add popcnt " Matt Brown
                   ` (3 more replies)
  0 siblings, 4 replies; 12+ messages in thread
From: Matt Brown @ 2017-07-24  1:01 UTC (permalink / raw)
  To: linuxppc-dev

This patch adds emulation of the cmpb instruction, enabling xmon to
emulate this instruction.
Tested for correctness against the cmpb asm instruction on ppc64le.

Signed-off-by: Matt Brown <matthew.brown.dev@gmail.com>
---
v2: 
	- fixed opcode
	- fixed mask typecasting
---
 arch/powerpc/lib/sstep.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/arch/powerpc/lib/sstep.c b/arch/powerpc/lib/sstep.c
index 33117f8..87d277f 100644
--- a/arch/powerpc/lib/sstep.c
+++ b/arch/powerpc/lib/sstep.c
@@ -596,6 +596,22 @@ static nokprobe_inline void do_cmp_unsigned(struct pt_regs *regs, unsigned long
 	regs->ccr = (regs->ccr & ~(0xf << shift)) | (crval << shift);
 }
 
+static nokprobe_inline void do_cmpb(struct pt_regs *regs, unsigned long v1,
+				unsigned long v2, int rd)
+{
+	unsigned long long out_val, mask;
+	int i;
+
+	out_val = 0;
+	for (i = 0; i < 8; i++) {
+		mask = 0xffUL << (i * 8);
+		if ((v1 & mask) == (v2 & mask))
+			out_val |= mask;
+	}
+
+	regs->gpr[rd] = out_val;
+}
+
 static nokprobe_inline int trap_compare(long v1, long v2)
 {
 	int ret = 0;
@@ -1049,6 +1065,10 @@ int analyse_instr(struct instruction_op *op, struct pt_regs *regs,
 			do_cmp_unsigned(regs, val, val2, rd >> 2);
 			goto instr_done;
 
+		case 508: /* cmpb */
+			do_cmpb(regs, regs->gpr[rd], regs->gpr[rb], ra);
+			goto instr_done;
+
 /*
  * Arithmetic instructions
  */
-- 
2.9.3

^ permalink raw reply related	[flat|nested] 12+ messages in thread
* [PATCH 1/5] powerpc/lib/sstep: Add cmpb instruction emulation
@ 2017-07-13  3:25 Matt Brown
  2017-07-13  3:25 ` [PATCH 4/5] powerpc/lib/sstep: Add prty " Matt Brown
  0 siblings, 1 reply; 12+ messages in thread
From: Matt Brown @ 2017-07-13  3:25 UTC (permalink / raw)
  To: linuxppc-dev; +Cc: anton

This patch adds emulation of the cmpb instruction, enabling xmon to
emulate this instruction.

Signed-off-by: Matt Brown <matthew.brown.dev@gmail.com>
---
 arch/powerpc/lib/sstep.c | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/arch/powerpc/lib/sstep.c b/arch/powerpc/lib/sstep.c
index 33117f8..f3e9ba8 100644
--- a/arch/powerpc/lib/sstep.c
+++ b/arch/powerpc/lib/sstep.c
@@ -596,6 +596,23 @@ static nokprobe_inline void do_cmp_unsigned(struct pt_regs *regs, unsigned long
 	regs->ccr = (regs->ccr & ~(0xf << shift)) | (crval << shift);
 }
 
+static nokprobe_inline void do_cmpb(struct pt_regs *regs, unsigned long v1,
+				unsigned long v2, int rd)
+{
+	unsigned long out_val, mask;
+	int i;
+
+	out_val = 0;
+	for (i = 0; i < 8; i++) {
+		mask = 0xff << (i * 8);
+
+		if ((v1 & mask) == (v2 & mask))
+			out_val |= mask;
+	}
+
+	regs->gpr[rd] = out_val;
+}
+
 static nokprobe_inline int trap_compare(long v1, long v2)
 {
 	int ret = 0;
@@ -1049,6 +1066,13 @@ int analyse_instr(struct instruction_op *op, struct pt_regs *regs,
 			do_cmp_unsigned(regs, val, val2, rd >> 2);
 			goto instr_done;
 
+		case 19173952: /* cmpb */
+			val = regs->gpr[rd];
+			val2 = regs->gpr[rb];
+
+			do_cmpb(regs, val, val2, ra);
+			goto instr_done;
+
 /*
  * Arithmetic instructions
  */
-- 
2.9.3

^ permalink raw reply related	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2017-07-25  0:53 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-07-24  1:01 [PATCH v2 1/5] powerpc/lib/sstep: Add cmpb instruction emulation Matt Brown
2017-07-24  1:01 ` [PATCH v2 2/5] powerpc/lib/sstep: Add popcnt " Matt Brown
2017-07-24  7:36   ` Segher Boessenkool
2017-07-24 10:28   ` Balbir Singh
2017-07-25  0:53     ` Matt Brown
2017-07-24  1:01 ` [PATCH v2 3/5] powerpc/lib/sstep: Add bpermd " Matt Brown
2017-07-24  1:01 ` [PATCH 4/5] powerpc/lib/sstep: Add prty " Matt Brown
2017-07-24  1:01 ` [PATCH v2 5/5] powerpc/lib/sstep: Add isel " Matt Brown
  -- strict thread matches above, loose matches on Subject: below --
2017-07-13  3:25 [PATCH 1/5] powerpc/lib/sstep: Add cmpb " Matt Brown
2017-07-13  3:25 ` [PATCH 4/5] powerpc/lib/sstep: Add prty " Matt Brown
2017-07-13  7:37   ` Segher Boessenkool
2017-07-14  0:46     ` Matt Brown
2017-07-14 19:02   ` kbuild test robot

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).