From: Hans-Peter Nilsson <h...@axis.com>

Don't count prefix instructions as separate when singlestepping.

For example, for this following instruction

 1ad8:       a011 e00b               move.d r0,[r1-96]

before this patch, we get two register dumps:

 PC=1ad8 CCS=0 btaken=1 btarget=1ac6
 cc_op=1 cc_src=3746 cc_dest=1 cc_result=ea2 cc_mask=0
 $r0=00000000 $r1=00004360 $r2=00004308 $r3=0000026c
 $r4=00002076 $r5=00002022 $r6=00000000 $r7=00000000
 $r8=00000000 $r9=00000ea2 $r10=00000002 $r11=00004308
 $r12=00001080 $r13=00000ec0 $sp=0000bfd8 $pc=00001ad4

 PC=1ada CCS=800 btaken=1 btarget=1ac6
 cc_op=1 cc_src=3746 cc_dest=1 cc_result=ea2 cc_mask=0
 $r0=00000000 $r1=00004360 $r2=00004308 $r3=0000026c
 $r4=00002076 $r5=00002022 $r6=00000000 $r7=00000000
 $r8=00000000 $r9=00000ea2 $r10=00000002 $r11=00004308
 $r12=00001080 $r13=00000ec0 $sp=0000bfd8 $pc=00001ad4

With the patch, we get only one:

 PC=1ad8 CCS=0 btaken=1 btarget=1ac6
 cc_op=1 cc_src=3746 cc_dest=1 cc_result=ea2 cc_mask=0
 $r0=00000000 $r1=00004360 $r2=00004308 $r3=0000026c
 $r4=00002076 $r5=00002022 $r6=00000000 $r7=00000000
 $r8=00000000 $r9=00000ea2 $r10=00000002 $r11=00004308
 $r12=00001080 $r13=00000ec0 $sp=0000bfd8 $pc=00001ad4

Signed-off-by: Hans-Peter Nilsson <h...@axis.com>
Signed-off-by: Rabin Vincent <rab...@axis.com>
---
 target-cris/translate.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/target-cris/translate.c b/target-cris/translate.c
index a4512b5..c9b1e65 100644
--- a/target-cris/translate.c
+++ b/target-cris/translate.c
@@ -3262,7 +3262,8 @@ void gen_intermediate_code(CPUCRISState *env, struct 
TranslationBlock *tb)
         }
     } while (!dc->is_jmp && !dc->cpustate_changed
             && !tcg_op_buf_full()
-            && !singlestep
+            /* We don't count prefix insns as separate wrt. singlestep.  */
+            && (!singlestep || (dc->tb_flags & PFIX_FLAG))
             && (dc->pc < next_page_start)
             && num_insns < max_insns);
 
-- 
2.1.4


Reply via email to