    }  // while (1)
  }
  
-diff -ur bochs-reference/cpu/cpu.h bochs/cpu/cpu.h
---- bochs-reference/cpu/cpu.h	2007-10-14 21:04:49.000000000 +0200
-+++ bochs/cpu/cpu.h	2007-10-16 21:39:28.640625000 +0200
-@@ -627,7 +627,7 @@
-   //  6...6  os64
-   //  5...5  as32
-   //  4...4  os32
--  //  3...3  (unused)
-+  //  3...3  stop trace (using with trace cache)
-   //  2...0  seg
-   Bit32u metaInfo;
- 
-@@ -807,6 +807,15 @@
+diff -ur bochs/cpu/cpu.h bochs-trace-cache/cpu/cpu.h
+--- bochs/cpu/cpu.h	2007-11-22 19:33:05.000000000 +0200
++++ bochs-trace-cache/cpu/cpu.h	2007-11-23 17:51:19.750000000 +0200
+@@ -614,9 +614,10 @@
+   void (BX_CPU_C::*execute)(bxInstruction_c *);
+ #endif
+ 
+-  // 31..28  (unused)
+-  // 27..19  b1 (9bits of opcode; 1byte-op=0..255, 2byte-op=256..511
++  // 31..29  (unused)
++  // 28..20  b1 (9bits of opcode; 1byte-op=0..255, 2byte-op=256..511
+   //            (leave this one on top so no mask is needed)
++  // 19..19  stop trace (used with trace cache)
+   // 18..18  mod==c0 (modrm)
+   // 17..16  repUsed (0=none, 2=0xF2, 3=0xF3).
+   Bit16u metaInfo3;
+@@ -843,13 +844,22 @@
+     metaInfo3 = (metaInfo3 & ~3) | (value);
    }
- #endif
  
 +#if BX_SUPPORT_ICACHE
 +  BX_CPP_INLINE void setStopTraceAttr(void) {
-+   metaInfo |= (1<<3);
++   metaInfo3 |= (1<<3);
 +  }
 +  BX_CPP_INLINE unsigned getStopTraceAttr(void) {
-+    return metaInfo & (1<<3);
++    return metaInfo3 & (1<<3);
 +  }
 +#endif
 +
-   BX_CPP_INLINE unsigned repUsedL(void) {
-     return metaInfo & (3<<9);
+   // Note this is the highest field, and thus needs no masking.
+   // DON'T PUT ANY FIELDS HIGHER THAN THIS ONE WITHOUT ADDING A MASK.
+   BX_CPP_INLINE unsigned b1(void) {
+-    return metaInfo3 >> 3;
++    return metaInfo3 >> 4;
    }
-@@ -2601,7 +2610,12 @@
+   BX_CPP_INLINE void setB1(unsigned b1) {
+-    metaInfo3 = (metaInfo3 & ~(0x1ff << 3)) | ((b1 & 0x1ff) << 3);
++    metaInfo3 = (metaInfo3 & ~(0x1ff << 4)) | ((b1 & 0x1ff) << 4);
+   }
+ };
+ // <TAG-CLASS-INSTRUCTION-END>
+@@ -2915,7 +2925,12 @@
  #if BX_SUPPORT_X86_64
    BX_SMF unsigned fetchDecode64(Bit8u *, bxInstruction_c *, unsigned);
  #endif

+  /* 3 */ { BxTraceEnd, &BX_CPU_C::CALL32_Ep },
+  /* 4 */ { BxTraceEnd, &BX_CPU_C::JMP_Ed },
+  /* 5 */ { BxTraceEnd, &BX_CPU_C::JMP32_Ep },
   /* 6 */ { 0, &BX_CPU_C::PUSH_Ed },
   /* 7 */ { 0, &BX_CPU_C::BxError }
 }; 
@@ -313,12 +313,12 @@
   // attributes defined in main area
   /* 0 */ { 0, &BX_CPU_C::SGDT_Ms },
   /* 1 */ { 0, &BX_CPU_C::SIDT_Ms },

 
 #if BX_SUPPORT_X86_64
   if (BX_CPU_THIS_PTR cpu_mode == BX_MODE_LONG_64)
@@ -142,26 +221,14 @@
     ret = fetchDecode32(fetchPtr, i, maxFetch);
 
   if (ret==0) {
