44c44,45
< class LoadReserved : public MemInst
---
> // memfence micro instruction
> class MemFenceMicro : public RiscvMicroInst
45a47,50
> public:
> MemFenceMicro(ExtMachInst _machInst, OpClass __opClass)
> : RiscvMicroInst("fence", _machInst, __opClass)
> { }
47c52
< using MemInst::MemInst;
---
> using RiscvMicroInst::RiscvMicroInst;
48a54
> Fault execute(ExecContext *, Trace::InstRecord *) const override;
53c59,60
< class StoreCond : public MemInst
---
> // load-reserved
> class LoadReserved : public RiscvMacroInst
56c63
< using MemInst::MemInst;
---
> using RiscvMacroInst::RiscvMacroInst;
61a69,99
> class LoadReservedMicro : public RiscvMicroInst
> {
> protected:
> Request::Flags memAccessFlags;
> using RiscvMicroInst::RiscvMicroInst;
>
> std::string generateDisassembly(
> Addr pc, const SymbolTable *symtab) const override;
> };
>
> // store-cond
> class StoreCond : public RiscvMacroInst
> {
> protected:
> using RiscvMacroInst::RiscvMacroInst;
>
> std::string generateDisassembly(
> Addr pc, const SymbolTable *symtab) const override;
> };
>
> class StoreCondMicro : public RiscvMicroInst
> {
> protected:
> Request::Flags memAccessFlags;
> using RiscvMicroInst::RiscvMicroInst;
>
> std::string generateDisassembly(
> Addr pc, const SymbolTable *symtab) const override;
> };
>
> // AMOs
80a119,135
> /**
> * A generic atomic op class
> */
>
> template<typename T>
> class AtomicGenericOp : public TypedAtomicOpFunctor<T>
> {
> public:
> AtomicGenericOp(T _a, std::function<void(T*,T)> _op)
> : a(_a), op(_op) { }
> AtomicOpFunctor* clone() { return new AtomicGenericOp<T>(*this); }
> void execute(T *b) { op(b, a); }
> private:
> T a;
> std::function<void(T*,T)> op;
> };
>