I discovered that the cycle count does not get incremented if a conditional
branch is not taken.  The patch below fixes this.

galen

Index: sim/msp430/interp.c
===================================================================
RCS file: /cvsroot/mspgcc/gdb/gdb-5.1.1/sim/msp430/interp.c,v
retrieving revision 1.14
diff -u -r1.14 interp.c
--- sim/msp430/interp.c 27 Aug 2002 08:12:04 -0000      1.14
+++ sim/msp430/interp.c 14 Oct 2002 19:09:46 -0000
@@ -1088,25 +1088,32 @@
 
           /* jumps */
         case JNZ:
-          pc += 2 + ((!Z) ? msp430_offset(insn):0);
+          tmp = msp430_offset(insn);
+          pc += 2 + ((!Z) ? tmp:0);
           break;
         case JZ:
-          pc += 2 + ((Z) ? msp430_offset(insn):0);
+          tmp = msp430_offset(insn);
+          pc += 2 + ((Z) ? tmp:0);
           break;
         case JC:
-          pc += 2 + ((C) ? msp430_offset(insn):0);
+          tmp = msp430_offset(insn);
+          pc += 2 + ((C) ? tmp:0);
           break;
         case JNC:
-          pc += 2 + ((!C) ? msp430_offset(insn):0);
+          tmp = msp430_offset(insn);
+          pc += 2 + ((!C) ? tmp:0);
           break;
         case JN:
-          pc += 2 + ((N) ? msp430_offset(insn):0);
+          tmp = msp430_offset(insn);
+          pc += 2 + ((N) ? tmp:0);
           break;
         case JGE:
-          pc += 2 + ((!(N^V)) ? msp430_offset(insn):0);
+          tmp = msp430_offset(insn);
+          pc += 2 + ((!(N^V)) ? tmp:0);
           break;
         case JL:
-          pc += 2 + ((N^V) ? msp430_offset(insn):0);
+          tmp = msp430_offset(insn);
+          pc += 2 + ((N^V) ? tmp:0);
           break;
         case JMP:
           pc += msp430_offset(insn) + 2;



Reply via email to