gem5  v19.0.0.0
amo.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2015 RISC-V Foundation
3  * Copyright (c) 2017 The University of Virginia
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions are
8  * met: redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer;
10  * redistributions in binary form must reproduce the above copyright
11  * notice, this list of conditions and the following disclaimer in the
12  * documentation and/or other materials provided with the distribution;
13  * neither the name of the copyright holders nor the names of its
14  * contributors may be used to endorse or promote products derived from
15  * this software without specific prior written permission.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28  *
29  * Authors: Alec Roelke
30  */
31 
32 #ifndef __ARCH_RISCV_INSTS_AMO_HH__
33 #define __ARCH_RISCV_INSTS_AMO_HH__
34 
35 #include <string>
36 
37 #include "arch/riscv/insts/mem.hh"
39 #include "cpu/static_inst.hh"
40 
41 namespace RiscvISA
42 {
43 
44 // memfence micro instruction
46 {
47  public:
48  MemFenceMicro(ExtMachInst _machInst, OpClass __opClass)
49  : RiscvMicroInst("fence", _machInst, __opClass)
50  { }
51  protected:
53 
54  Fault execute(ExecContext *, Trace::InstRecord *) const override;
55  std::string generateDisassembly(
56  Addr pc, const SymbolTable *symtab) const override;
57 };
58 
59 // load-reserved
61 {
62  protected:
64 
65  std::string generateDisassembly(
66  Addr pc, const SymbolTable *symtab) const override;
67 };
68 
70 {
71  protected:
74 
75  std::string generateDisassembly(
76  Addr pc, const SymbolTable *symtab) const override;
77 };
78 
79 // store-cond
80 class StoreCond : public RiscvMacroInst
81 {
82  protected:
84 
85  std::string generateDisassembly(
86  Addr pc, const SymbolTable *symtab) const override;
87 };
88 
90 {
91  protected:
94 
95  std::string generateDisassembly(
96  Addr pc, const SymbolTable *symtab) const override;
97 };
98 
99 // AMOs
101 {
102  protected:
104 
105  std::string generateDisassembly(
106  Addr pc, const SymbolTable *symtab) const override;
107 };
108 
110 {
111  protected:
114 
115  std::string generateDisassembly(
116  Addr pc, const SymbolTable *symtab) const override;
117 };
118 
123 template<typename T>
125 {
126  public:
127  AtomicGenericOp(T _a, std::function<void(T*,T)> _op)
128  : a(_a), op(_op) { }
129  AtomicOpFunctor* clone() { return new AtomicGenericOp<T>(*this); }
130  void execute(T *b) { op(b, a); }
131  private:
132  T a;
133  std::function<void(T*,T)> op;
134 };
135 
136 }
137 
138 #endif // __ARCH_RISCV_INSTS_AMO_HH__
Request::Flags memAccessFlags
Definition: amo.hh:112
AtomicOpFunctor * clone()
Definition: amo.hh:129
Fault execute(ExecContext *, Trace::InstRecord *) const override
Definition: amo.cc:56
Base class for all RISC-V Microops.
Definition: static_inst.hh:110
RiscvMicroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass)
Definition: static_inst.hh:113
Bitfield< 8 > a
void execute(T *b)
Definition: amo.hh:130
Request::Flags memAccessFlags
Definition: amo.hh:92
Request::Flags memAccessFlags
Definition: amo.hh:72
Bitfield< 7 > b
The ExecContext is an abstract base class the provides the interface used by the ISA to manipulate th...
Definition: exec_context.hh:73
Bitfield< 4 > pc
Base class for all RISC-V Macroops.
Definition: static_inst.hh:67
std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition: amo.cc:48
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:142
A generic atomic op class.
Definition: amo.hh:124
MemFenceMicro(ExtMachInst _machInst, OpClass __opClass)
Definition: amo.hh:48
std::function< void(T *, T)> op
Definition: amo.hh:133
AtomicGenericOp(T _a, std::function< void(T *, T)> _op)
Definition: amo.hh:127
TheISA::ExtMachInst ExtMachInst
Binary extended machine instruction type.
Definition: static_inst.hh:87
Bitfield< 4 > op
Definition: types.hh:80
std::shared_ptr< FaultBase > Fault
Definition: types.hh:240
RiscvMacroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass)
Definition: static_inst.hh:72

Generated on Fri Feb 28 2020 16:26:58 for gem5 by doxygen 1.8.13