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;