Serialize counters without throwing C++ exceptions
[riscv-isa-sim.git] / riscv / decode.h
index 4ad45490b95447074bc8082e4c37086bd8f3ee4c..72efcd9e9464ffef1d92ec4e9270c504e9f32515 100644 (file)
@@ -159,7 +159,11 @@ private:
        npc = sext_xlen(x); \
      } while(0)
 
+#define PC_SERIALIZE 3 /* sentinel value indicating simulator pipeline flush */
+
 #define validate_csr(which, write) ({ \
+  if (!STATE.serialized) return PC_SERIALIZE; \
+  STATE.serialized = false; \
   unsigned my_priv = get_field(STATE.mstatus, MSTATUS_PRV); \
   unsigned csr_priv = get_field((which), 0x300); \
   unsigned csr_read_only = get_field((which), 0xC00) == 3; \