diff --git a/src/arch/arm/insts/mem64.hh b/src/arch/arm/insts/mem64.hh index 8e21bb3b69..34eb43fa90 100644 --- a/src/arch/arm/insts/mem64.hh +++ b/src/arch/arm/insts/mem64.hh @@ -260,6 +260,52 @@ class MemoryLiteral64 : public Memory64 std::string generateDisassembly( Addr pc, const SymbolTable *symtab) const override; }; + +/** + * A generic atomic op class + */ + +template +class AtomicGeneric2Op : public TypedAtomicOpFunctor +{ + public: + AtomicGeneric2Op(T _a, std::function _op) + : a(_a), op(_op) + {} + AtomicOpFunctor* clone() override + { + return new AtomicGeneric2Op(*this); + } + void execute(T *b) override + { + op(b, a); + } + private: + T a; + std::function op; + }; + +template +class AtomicGeneric3Op : public TypedAtomicOpFunctor +{ + public: + AtomicGeneric3Op(T _a, T _c, std::function _op) + : a(_a), c(_c), op(_op) + {} + AtomicOpFunctor* clone() override + { + return new AtomicGeneric3Op(*this); + } + void execute(T *b) override + { + op(b, a, c); + } + private: + T a; + T c; + std::function op; +}; + } #endif //__ARCH_ARM_INSTS_MEM_HH__