gem5
v19.0.0.0
arch
riscv
insts
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
"
38
#include "
arch/riscv/insts/static_inst.hh
"
39
#include "
cpu/static_inst.hh
"
40
41
namespace
RiscvISA
42
{
43
44
// memfence micro instruction
45
class
MemFenceMicro
:
public
RiscvMicroInst
46
{
47
public
:
48
MemFenceMicro
(
ExtMachInst
_machInst, OpClass __opClass)
49
:
RiscvMicroInst
(
"fence"
, _machInst, __opClass)
50
{ }
51
protected
:
52
using
RiscvMicroInst::RiscvMicroInst
;
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
60
class
LoadReserved
:
public
RiscvMacroInst
61
{
62
protected
:
63
using
RiscvMacroInst::RiscvMacroInst
;
64
65
std::string
generateDisassembly
(
66
Addr
pc
,
const
SymbolTable
*symtab)
const override
;
67
};
68
69
class
LoadReservedMicro
:
public
RiscvMicroInst
70
{
71
protected
:
72
Request::Flags
memAccessFlags
;
73
using
RiscvMicroInst::RiscvMicroInst
;
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
:
83
using
RiscvMacroInst::RiscvMacroInst
;
84
85
std::string
generateDisassembly
(
86
Addr
pc
,
const
SymbolTable
*symtab)
const override
;
87
};
88
89
class
StoreCondMicro
:
public
RiscvMicroInst
90
{
91
protected
:
92
Request::Flags
memAccessFlags
;
93
using
RiscvMicroInst::RiscvMicroInst
;
94
95
std::string
generateDisassembly
(
96
Addr
pc
,
const
SymbolTable
*symtab)
const override
;
97
};
98
99
// AMOs
100
class
AtomicMemOp
:
public
RiscvMacroInst
101
{
102
protected
:
103
using
RiscvMacroInst::RiscvMacroInst
;
104
105
std::string
generateDisassembly
(
106
Addr
pc
,
const
SymbolTable
*symtab)
const override
;
107
};
108
109
class
AtomicMemOpMicro
:
public
RiscvMicroInst
110
{
111
protected
:
112
Request::Flags
memAccessFlags
;
113
using
RiscvMicroInst::RiscvMicroInst
;
114
115
std::string
generateDisassembly
(
116
Addr
pc
,
const
SymbolTable
*symtab)
const override
;
117
};
118
123
template
<
typename
T>
124
class
AtomicGenericOp
:
public
TypedAtomicOpFunctor
<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__
RiscvISA::AtomicMemOpMicro::memAccessFlags
Request::Flags memAccessFlags
Definition:
amo.hh:112
RiscvISA::AtomicGenericOp::clone
AtomicOpFunctor * clone()
Definition:
amo.hh:129
RiscvISA::MemFenceMicro::execute
Fault execute(ExecContext *, Trace::InstRecord *) const override
Definition:
amo.cc:56
RiscvISA::RiscvMicroInst
Base class for all RISC-V Microops.
Definition:
static_inst.hh:110
RiscvISA::StoreCond
Definition:
amo.hh:80
RiscvISA::RiscvMicroInst::RiscvMicroInst
RiscvMicroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass)
Definition:
static_inst.hh:113
ArmISA::a
Bitfield< 8 > a
Definition:
miscregs_types.hh:65
RiscvISA::AtomicGenericOp::execute
void execute(T *b)
Definition:
amo.hh:130
mem.hh
RiscvISA::StoreCondMicro::memAccessFlags
Request::Flags memAccessFlags
Definition:
amo.hh:92
SymbolTable
Definition:
symtab.hh:42
RiscvISA::LoadReservedMicro::memAccessFlags
Request::Flags memAccessFlags
Definition:
amo.hh:72
RiscvISA::AtomicMemOpMicro
Definition:
amo.hh:109
RiscvISA::AtomicMemOp
Definition:
amo.hh:100
ArmISA::b
Bitfield< 7 > b
Definition:
miscregs_types.hh:378
ExecContext
The ExecContext is an abstract base class the provides the interface used by the ISA to manipulate th...
Definition:
exec_context.hh:73
RiscvISA::pc
Bitfield< 4 > pc
Definition:
pra_constants.hh:242
static_inst.hh
Flags< FlagsType >
RiscvISA::RiscvMacroInst
Base class for all RISC-V Macroops.
Definition:
static_inst.hh:67
RiscvISA::AtomicGenericOp::a
T a
Definition:
amo.hh:132
RiscvISA::StoreCondMicro
Definition:
amo.hh:89
static_inst.hh
RiscvISA::MemFenceMicro::generateDisassembly
std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition:
amo.cc:48
Addr
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition:
types.hh:142
RiscvISA::LoadReservedMicro
Definition:
amo.hh:69
RiscvISA::AtomicGenericOp
A generic atomic op class.
Definition:
amo.hh:124
TypedAtomicOpFunctor
Definition:
amo.hh:50
Trace::InstRecord
Definition:
insttracer.hh:58
RiscvISA::MemFenceMicro::MemFenceMicro
MemFenceMicro(ExtMachInst _machInst, OpClass __opClass)
Definition:
amo.hh:48
RiscvISA::AtomicGenericOp::op
std::function< void(T *, T)> op
Definition:
amo.hh:133
RiscvISA::LoadReserved
Definition:
amo.hh:60
RiscvISA::AtomicGenericOp::AtomicGenericOp
AtomicGenericOp(T _a, std::function< void(T *, T)> _op)
Definition:
amo.hh:127
AtomicOpFunctor
Definition:
amo.hh:42
StaticInst::ExtMachInst
TheISA::ExtMachInst ExtMachInst
Binary extended machine instruction type.
Definition:
static_inst.hh:87
X86ISA::op
Bitfield< 4 > op
Definition:
types.hh:80
RiscvISA::MemFenceMicro
Definition:
amo.hh:45
Fault
std::shared_ptr< FaultBase > Fault
Definition:
types.hh:240
RiscvISA::RiscvMacroInst::RiscvMacroInst
RiscvMacroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass)
Definition:
static_inst.hh:72
RiscvISA
Definition:
decoder.cc:37
Generated on Fri Feb 28 2020 16:26:58 for gem5 by
doxygen
1.8.13