gem5  [DEVELOP-FOR-23.0]
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
misc64.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2011-2013,2017-2019, 2021-2022 Arm Limited
3  * All rights reserved
4  *
5  * The license below extends only to copyright in the software and shall
6  * not be construed as granting a license to any other intellectual
7  * property including but not limited to intellectual property relating
8  * to a hardware implementation of the functionality of the software
9  * licensed hereunder. You may use the software subject to the license
10  * terms below provided that you ensure that this notice is replicated
11  * unmodified and in its entirety in all distributions of the software,
12  * modified or unmodified, in source code or in binary form.
13  *
14  * Redistribution and use in source and binary forms, with or without
15  * modification, are permitted provided that the following conditions are
16  * met: redistributions of source code must retain the above copyright
17  * notice, this list of conditions and the following disclaimer;
18  * redistributions in binary form must reproduce the above copyright
19  * notice, this list of conditions and the following disclaimer in the
20  * documentation and/or other materials provided with the distribution;
21  * neither the name of the copyright holders nor the names of its
22  * contributors may be used to endorse or promote products derived from
23  * this software without specific prior written permission.
24  *
25  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36  */
37 
38 #ifndef __ARCH_ARM_INSTS_MISC64_HH__
39 #define __ARCH_ARM_INSTS_MISC64_HH__
40 
42 
43 namespace gem5
44 {
45 
47 {
48  protected:
49  uint64_t imm;
50 
51  ImmOp64(const char *mnem, ArmISA::ExtMachInst _machInst,
52  OpClass __opClass, uint64_t _imm) :
53  ArmISA::ArmStaticInst(mnem, _machInst, __opClass), imm(_imm)
54  {}
55 
56  std::string generateDisassembly(
57  Addr pc, const loader::SymbolTable *symtab) const override;
58 };
59 
61 {
62  protected:
64 
65  RegOp64(const char *mnem, ArmISA::ExtMachInst _machInst,
66  OpClass __opClass, RegIndex _op1) :
67  ArmISA::ArmStaticInst(mnem, _machInst, __opClass), op1(_op1)
68  {}
69 
70  std::string generateDisassembly(
71  Addr pc, const loader::SymbolTable *symtab) const override;
72 };
73 
75 {
76  protected:
78  uint64_t imm1;
79  uint64_t imm2;
80 
81  RegImmImmOp64(const char *mnem, ArmISA::ExtMachInst _machInst,
82  OpClass __opClass, RegIndex _op1,
83  uint64_t _imm1, uint64_t _imm2) :
84  ArmISA::ArmStaticInst(mnem, _machInst, __opClass),
85  op1(_op1), imm1(_imm1), imm2(_imm2)
86  {}
87 
88  std::string generateDisassembly(
89  Addr pc, const loader::SymbolTable *symtab) const override;
90 };
91 
93 {
94  protected:
97  uint64_t imm1;
98  uint64_t imm2;
99 
100  RegRegImmImmOp64(const char *mnem, ArmISA::ExtMachInst _machInst,
101  OpClass __opClass, RegIndex _dest,
102  RegIndex _op1, uint64_t _imm1,
103  int64_t _imm2) :
104  ArmISA::ArmStaticInst(mnem, _machInst, __opClass),
105  dest(_dest), op1(_op1), imm1(_imm1), imm2(_imm2)
106  {}
107 
108  std::string generateDisassembly(
109  Addr pc, const loader::SymbolTable *symtab) const override;
110 };
111 
113 {
114  protected:
118  uint64_t imm;
119 
120  RegRegRegImmOp64(const char *mnem, ArmISA::ExtMachInst _machInst,
121  OpClass __opClass, RegIndex _dest,
122  RegIndex _op1, RegIndex _op2,
123  uint64_t _imm) :
124  ArmISA::ArmStaticInst(mnem, _machInst, __opClass),
125  dest(_dest), op1(_op1), op2(_op2), imm(_imm)
126  {}
127 
128  std::string generateDisassembly(
129  Addr pc, const loader::SymbolTable *symtab) const override;
130 };
131 
133 {
134  protected:
135 
136  UnknownOp64(const char *mnem, ArmISA::ExtMachInst _machInst,
137  OpClass __opClass) :
138  ArmISA::ArmStaticInst(mnem, _machInst, __opClass)
139  {}
140 
141  std::string generateDisassembly(
142  Addr pc, const loader::SymbolTable *symtab) const override;
143 };
144 
157 {
158  protected:
159  bool _miscRead;
160 
161  MiscRegOp64(const char *mnem, ArmISA::ExtMachInst _machInst,
162  OpClass __opClass, bool misc_read) :
163  ArmISA::ArmStaticInst(mnem, _machInst, __opClass),
164  _miscRead(misc_read)
165  {}
166 
167  uint32_t _iss(const ArmISA::MiscRegNum64 &misc_reg,
168  RegIndex int_index) const;
169 
170  public:
171  virtual uint32_t iss() const { return 0; }
172 
173  bool miscRead() const { return _miscRead; }
174 
177  ArmISA::ExceptionClass ec, uint32_t iss) const;
178 };
179 
181 {
182  protected:
184  uint32_t imm;
185 
186  MiscRegImmOp64(const char *mnem, ArmISA::ExtMachInst _machInst,
187  OpClass __opClass, ArmISA::MiscRegIndex _dest,
188  uint32_t _imm) :
189  MiscRegOp64(mnem, _machInst, __opClass, false),
190  dest(_dest), imm(_imm)
191  {}
192 
198  RegVal miscRegImm() const;
199 
200  std::string generateDisassembly(
201  Addr pc, const loader::SymbolTable *symtab) const override;
202 };
203 
205 {
206  protected:
209 
210  MiscRegRegImmOp64(const char *mnem, ArmISA::ExtMachInst _machInst,
211  OpClass __opClass, ArmISA::MiscRegIndex _dest,
212  RegIndex _op1) :
213  MiscRegOp64(mnem, _machInst, __opClass, false),
214  dest(_dest), op1(_op1)
215  {}
216 
217  std::string generateDisassembly(
218  Addr pc, const loader::SymbolTable *symtab) const override;
219 
220  uint32_t iss() const override;
221 };
222 
224 {
225  protected:
228 
229  RegMiscRegImmOp64(const char *mnem, ArmISA::ExtMachInst _machInst,
230  OpClass __opClass, RegIndex _dest,
231  ArmISA::MiscRegIndex _op1) :
232  MiscRegOp64(mnem, _machInst, __opClass, true),
233  dest(_dest), op1(_op1)
234  {}
235 
236  std::string generateDisassembly(
237  Addr pc, const loader::SymbolTable *symtab) const override;
238 
239  uint32_t iss() const override;
240 };
241 
243 {
244  protected:
245  const std::string fullMnemonic;
248 
249  public:
250  MiscRegImplDefined64(const char *mnem, ArmISA::ExtMachInst _machInst,
251  ArmISA::MiscRegNum64 &&misc_reg, RegIndex int_reg,
252  bool misc_read, const std::string full_mnem) :
253  MiscRegOp64(mnem, _machInst, No_OpClass, misc_read),
254  fullMnemonic(full_mnem), miscReg(misc_reg), intReg(int_reg)
255  {
257  }
258 
259  protected:
261  trace::InstRecord *traceData) const override;
262 
263  std::string generateDisassembly(
264  Addr pc, const loader::SymbolTable *symtab) const override;
265 
266  uint32_t iss() const override;
267 };
268 
270 {
271  protected:
273 
274  RegNone(const char *mnem, ArmISA::ExtMachInst _machInst,
275  OpClass __opClass, RegIndex _dest) :
276  ArmISA::ArmStaticInst(mnem, _machInst, __opClass),
277  dest(_dest)
278  {}
279 
280  std::string generateDisassembly(
281  Addr pc, const loader::SymbolTable *symtab) const;
282 };
283 
285 {
286  protected:
287  TlbiOp64(const char *mnem, ArmISA::ExtMachInst _machInst,
288  OpClass __opClass, ArmISA::MiscRegIndex _dest,
289  RegIndex _op1) :
290  MiscRegRegImmOp64(mnem, _machInst, __opClass, _dest, _op1)
291  {}
292 
293  void performTlbi(ExecContext *xc,
294  ArmISA::MiscRegIndex idx, RegVal value) const;
295 };
296 
297 } // namespace gem5
298 
299 #endif
gem5::MiscRegImmOp64::generateDisassembly
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition: misc64.cc:163
gem5::MiscRegOp64::iss
virtual uint32_t iss() const
Definition: misc64.hh:171
gem5::TlbiOp64::TlbiOp64
TlbiOp64(const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass, ArmISA::MiscRegIndex _dest, RegIndex _op1)
Definition: misc64.hh:287
gem5::RegRegRegImmOp64::op1
RegIndex op1
Definition: misc64.hh:116
gem5::MiscRegImmOp64
Definition: misc64.hh:180
gem5::RegVal
uint64_t RegVal
Definition: types.hh:173
gem5::RegRegImmImmOp64::imm2
uint64_t imm2
Definition: misc64.hh:98
gem5::RegOp64
Definition: misc64.hh:60
gem5::ArmISA::ArmStaticInst
Definition: static_inst.hh:65
gem5::ArmISA::el
Bitfield< 3, 2 > el
Definition: misc_types.hh:73
gem5::MiscRegOp64::_iss
uint32_t _iss(const ArmISA::MiscRegNum64 &misc_reg, RegIndex int_index) const
Definition: misc64.cc:114
gem5::trace::InstRecord
Definition: insttracer.hh:60
gem5::RegImmImmOp64::RegImmImmOp64
RegImmImmOp64(const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass, RegIndex _op1, uint64_t _imm1, uint64_t _imm2)
Definition: misc64.hh:81
gem5::RegRegImmImmOp64::imm1
uint64_t imm1
Definition: misc64.hh:97
gem5::RegRegRegImmOp64
Definition: misc64.hh:112
gem5::RegOp64::generateDisassembly
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition: misc64.cc:58
gem5::RegNone::RegNone
RegNone(const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass, RegIndex _dest)
Definition: misc64.hh:274
gem5::ArmISA::decodeAArch64SysReg
MiscRegIndex decodeAArch64SysReg(unsigned op0, unsigned op1, unsigned crn, unsigned crm, unsigned op2)
Definition: misc.cc:2162
gem5::loader::SymbolTable
Definition: symtab.hh:64
gem5::UnknownOp64::UnknownOp64
UnknownOp64(const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass)
Definition: misc64.hh:136
gem5::MiscRegRegImmOp64::iss
uint32_t iss() const override
Definition: misc64.cc:187
gem5::ImmOp64::ImmOp64
ImmOp64(const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass, uint64_t _imm)
Definition: misc64.hh:51
gem5::RegRegRegImmOp64::op2
RegIndex op2
Definition: misc64.hh:117
gem5::RegImmImmOp64::imm2
uint64_t imm2
Definition: misc64.hh:79
gem5::RegImmImmOp64
Definition: misc64.hh:74
gem5::MiscRegOp64::miscRead
bool miscRead() const
Definition: misc64.hh:173
gem5::ImmOp64::generateDisassembly
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition: misc64.cc:49
gem5::RegMiscRegImmOp64
Definition: misc64.hh:223
gem5::RegMiscRegImmOp64::RegMiscRegImmOp64
RegMiscRegImmOp64(const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, ArmISA::MiscRegIndex _op1)
Definition: misc64.hh:229
gem5::RegOp64::op1
RegIndex op1
Definition: misc64.hh:63
gem5::MiscRegImmOp64::dest
ArmISA::MiscRegIndex dest
Definition: misc64.hh:183
gem5::RegRegImmImmOp64
Definition: misc64.hh:92
gem5::ArmISA::ec
ec
Definition: misc_types.hh:727
gem5::MiscRegOp64::generateTrap
Fault generateTrap(ArmISA::ExceptionLevel el) const
Definition: misc64.cc:126
gem5::RegMiscRegImmOp64::iss
uint32_t iss() const override
Definition: misc64.cc:206
gem5::RegMiscRegImmOp64::dest
RegIndex dest
Definition: misc64.hh:226
gem5::MiscRegImplDefined64::iss
uint32_t iss() const override
Definition: misc64.cc:231
gem5::ImmOp64
Definition: misc64.hh:46
gem5::MiscRegRegImmOp64::generateDisassembly
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition: misc64.cc:175
gem5::UnknownOp64
Definition: misc64.hh:132
gem5::MiscRegImplDefined64::generateDisassembly
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition: misc64.cc:224
gem5::MiscRegOp64::MiscRegOp64
MiscRegOp64(const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass, bool misc_read)
Definition: misc64.hh:161
gem5::RegRegImmImmOp64::op1
RegIndex op1
Definition: misc64.hh:96
gem5::MiscRegImplDefined64::miscReg
const ArmISA::MiscRegNum64 miscReg
Definition: misc64.hh:246
gem5::TlbiOp64::performTlbi
void performTlbi(ExecContext *xc, ArmISA::MiscRegIndex idx, RegVal value) const
Definition: misc64.cc:247
gem5::Fault
std::shared_ptr< FaultBase > Fault
Definition: types.hh:248
gem5::MiscRegOp64::_miscRead
bool _miscRead
Definition: misc64.hh:159
gem5::MiscRegRegImmOp64::MiscRegRegImmOp64
MiscRegRegImmOp64(const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass, ArmISA::MiscRegIndex _dest, RegIndex _op1)
Definition: misc64.hh:210
gem5::RegRegImmImmOp64::dest
RegIndex dest
Definition: misc64.hh:95
gem5::MiscRegImplDefined64::intReg
const RegIndex intReg
Definition: misc64.hh:247
gem5::MipsISA::ExtMachInst
uint64_t ExtMachInst
Definition: types.hh:43
gem5::MiscRegImplDefined64::fullMnemonic
const std::string fullMnemonic
Definition: misc64.hh:245
gem5::ImmOp64::imm
uint64_t imm
Definition: misc64.hh:49
gem5::RegImmImmOp64::op1
RegIndex op1
Definition: misc64.hh:77
gem5::MiscRegImmOp64::miscRegImm
RegVal miscRegImm() const
Returns the "register view" of the immediate field.
Definition: misc64.cc:148
gem5::RegRegRegImmOp64::generateDisassembly
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition: misc64.cc:92
gem5::MiscRegImplDefined64
Definition: misc64.hh:242
gem5::RegNone
Definition: misc64.hh:269
gem5::RegMiscRegImmOp64::op1
ArmISA::MiscRegIndex op1
Definition: misc64.hh:227
gem5::Addr
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:147
gem5::MiscRegOp64
This class is implementing the Base class for a generic AArch64 instruction which is making use of sy...
Definition: misc64.hh:156
gem5::RegNone::generateDisassembly
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const
Internal function to generate disassembly string.
Definition: misc64.cc:237
gem5::ArmISA::MiscRegIndex
MiscRegIndex
Definition: misc.hh:64
gem5::MiscRegImplDefined64::execute
Fault execute(ExecContext *xc, trace::InstRecord *traceData) const override
Definition: misc64.cc:213
gem5::ArmISA::ExceptionClass
ExceptionClass
Definition: types.hh:300
gem5::MiscRegRegImmOp64::dest
ArmISA::MiscRegIndex dest
Definition: misc64.hh:207
gem5::MiscRegImmOp64::imm
uint32_t imm
Definition: misc64.hh:184
gem5::MiscRegRegImmOp64::op1
RegIndex op1
Definition: misc64.hh:208
gem5::MiscRegRegImmOp64
Definition: misc64.hh:204
gem5::RegImmImmOp64::generateDisassembly
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition: misc64.cc:67
gem5::MiscRegImplDefined64::MiscRegImplDefined64
MiscRegImplDefined64(const char *mnem, ArmISA::ExtMachInst _machInst, ArmISA::MiscRegNum64 &&misc_reg, RegIndex int_reg, bool misc_read, const std::string full_mnem)
Definition: misc64.hh:250
gem5::ArmISA::MiscRegNum64
Definition: misc.hh:1688
gem5::RegNone::dest
RegIndex dest
Definition: misc64.hh:272
gem5::UnknownOp64::generateDisassembly
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition: misc64.cc:107
static_inst.hh
gem5::MipsISA::pc
Bitfield< 4 > pc
Definition: pra_constants.hh:243
gem5::RegRegImmImmOp64::RegRegImmImmOp64
RegRegImmImmOp64(const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, uint64_t _imm1, int64_t _imm2)
Definition: misc64.hh:100
gem5::RegOp64::RegOp64
RegOp64(const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass, RegIndex _op1)
Definition: misc64.hh:65
gem5::TlbiOp64
Definition: misc64.hh:284
gem5::ExecContext
The ExecContext is an abstract base class the provides the interface used by the ISA to manipulate th...
Definition: exec_context.hh:71
gem5::RegRegRegImmOp64::RegRegRegImmOp64
RegRegRegImmOp64(const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, RegIndex _op2, uint64_t _imm)
Definition: misc64.hh:120
gem5::RegMiscRegImmOp64::generateDisassembly
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition: misc64.cc:194
gem5::RegRegRegImmOp64::dest
RegIndex dest
Definition: misc64.hh:115
gem5::RegIndex
uint16_t RegIndex
Definition: types.hh:176
gem5::ArmISA::MISCREG_IMPDEF_UNIMPL
@ MISCREG_IMPDEF_UNIMPL
Definition: misc.hh:1114
gem5
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
Definition: gpu_translation_state.hh:37
gem5::RegRegRegImmOp64::imm
uint64_t imm
Definition: misc64.hh:118
gem5::RegImmImmOp64::imm1
uint64_t imm1
Definition: misc64.hh:78
gem5::RegRegImmImmOp64::generateDisassembly
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition: misc64.cc:79
gem5::MiscRegImmOp64::MiscRegImmOp64
MiscRegImmOp64(const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass, ArmISA::MiscRegIndex _dest, uint32_t _imm)
Definition: misc64.hh:186
gem5::ArmISA::ExceptionLevel
ExceptionLevel
Definition: types.hh:271

Generated on Sun Jul 30 2023 01:56:48 for gem5 by doxygen 1.8.17