uint64_t tmp = write_result;
// see stq_c
Ra = (tmp == 0 || tmp == 1) ? tmp : Ra;
- }}, mem_flags = LOCKED, inst_flags = IsNonSpeculative);
+ }}, mem_flags = LOCKED, inst_flags = [IsNonSpeculative,
+ IsSerializing,
+ IsSerializeAfter]);
0x2f: stq_c({{ Mem.uq = Ra; }},
{{
uint64_t tmp = write_result;
// mailbox access, and we don't update the
// result register at all.
Ra = (tmp == 0 || tmp == 1) ? tmp : Ra;
- }}, mem_flags = LOCKED, inst_flags = IsNonSpeculative);
+ }}, mem_flags = LOCKED, inst_flags = [IsNonSpeculative,
+ IsSerializing,
+ IsSerializeAfter]);
}
format IntegerOperate {
#else
Ra = curTick;
#endif
- }}, IsNonSpeculative);
+ }}, IsUnverifiable);
// All of the barrier instructions below do nothing in
// their execute() methods (hence the empty code blocks).
template <class Impl>
class OzoneDynInst;
+class CheckerCPU;
class FastCPU;
class SimpleCPU;
class InorderCPU;
IsNonSpeculative, ///< Should not be executed speculatively
IsQuiesce,
+ IsUnverifiable,
+
NumFlags
};
bool isWriteBarrier() const { return flags[IsWriteBarrier]; }
bool isNonSpeculative() const { return flags[IsNonSpeculative]; }
bool isQuiesce() const { return flags[IsQuiesce]; }
+ bool isUnverifiable() const { return flags[IsUnverifiable]; }
//@}
/// Operation class. Used to select appropriate function unit in issue.