gem5  v22.1.0.0
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:
65  uint64_t imm1;
66  uint64_t imm2;
67 
68  RegRegImmImmOp64(const char *mnem, ArmISA::ExtMachInst _machInst,
69  OpClass __opClass, RegIndex _dest,
70  RegIndex _op1, uint64_t _imm1,
71  int64_t _imm2) :
72  ArmISA::ArmStaticInst(mnem, _machInst, __opClass),
73  dest(_dest), op1(_op1), imm1(_imm1), imm2(_imm2)
74  {}
75 
76  std::string generateDisassembly(
77  Addr pc, const loader::SymbolTable *symtab) const override;
78 };
79 
81 {
82  protected:
86  uint64_t imm;
87 
88  RegRegRegImmOp64(const char *mnem, ArmISA::ExtMachInst _machInst,
89  OpClass __opClass, RegIndex _dest,
90  RegIndex _op1, RegIndex _op2,
91  uint64_t _imm) :
92  ArmISA::ArmStaticInst(mnem, _machInst, __opClass),
93  dest(_dest), op1(_op1), op2(_op2), imm(_imm)
94  {}
95 
96  std::string generateDisassembly(
97  Addr pc, const loader::SymbolTable *symtab) const override;
98 };
99 
101 {
102  protected:
103 
104  UnknownOp64(const char *mnem, ArmISA::ExtMachInst _machInst,
105  OpClass __opClass) :
106  ArmISA::ArmStaticInst(mnem, _machInst, __opClass)
107  {}
108 
109  std::string generateDisassembly(
110  Addr pc, const loader::SymbolTable *symtab) const override;
111 };
112 
125 {
126  protected:
127  bool _miscRead;
128 
129  MiscRegOp64(const char *mnem, ArmISA::ExtMachInst _machInst,
130  OpClass __opClass, bool misc_read) :
131  ArmISA::ArmStaticInst(mnem, _machInst, __opClass),
132  _miscRead(misc_read)
133  {}
134 
135  uint32_t _iss(const ArmISA::MiscRegNum64 &misc_reg,
136  RegIndex int_index) const;
137 
138  public:
139  virtual uint32_t iss() const { return 0; }
140 
141  bool miscRead() const { return _miscRead; }
142 
145  ArmISA::ExceptionClass ec, uint32_t iss) const;
146 };
147 
149 {
150  protected:
152  uint32_t imm;
153 
154  MiscRegImmOp64(const char *mnem, ArmISA::ExtMachInst _machInst,
155  OpClass __opClass, ArmISA::MiscRegIndex _dest,
156  uint32_t _imm) :
157  MiscRegOp64(mnem, _machInst, __opClass, false),
158  dest(_dest), imm(_imm)
159  {}
160 
166  RegVal miscRegImm() const;
167 
168  std::string generateDisassembly(
169  Addr pc, const loader::SymbolTable *symtab) const override;
170 };
171 
173 {
174  protected:
177 
178  MiscRegRegImmOp64(const char *mnem, ArmISA::ExtMachInst _machInst,
179  OpClass __opClass, ArmISA::MiscRegIndex _dest,
180  RegIndex _op1) :
181  MiscRegOp64(mnem, _machInst, __opClass, false),
182  dest(_dest), op1(_op1)
183  {}
184 
185  std::string generateDisassembly(
186  Addr pc, const loader::SymbolTable *symtab) const override;
187 
188  uint32_t iss() const override;
189 };
190 
192 {
193  protected:
196 
197  RegMiscRegImmOp64(const char *mnem, ArmISA::ExtMachInst _machInst,
198  OpClass __opClass, RegIndex _dest,
199  ArmISA::MiscRegIndex _op1) :
200  MiscRegOp64(mnem, _machInst, __opClass, true),
201  dest(_dest), op1(_op1)
202  {}
203 
204  std::string generateDisassembly(
205  Addr pc, const loader::SymbolTable *symtab) const override;
206 
207  uint32_t iss() const override;
208 };
209 
211 {
212  protected:
213  const std::string fullMnemonic;
216 
217  public:
218  MiscRegImplDefined64(const char *mnem, ArmISA::ExtMachInst _machInst,
219  ArmISA::MiscRegNum64 &&misc_reg, RegIndex int_reg,
220  bool misc_read, const std::string full_mnem) :
221  MiscRegOp64(mnem, _machInst, No_OpClass, misc_read),
222  fullMnemonic(full_mnem), miscReg(misc_reg), intReg(int_reg)
223  {
225  }
226 
227  protected:
229  trace::InstRecord *traceData) const override;
230 
231  std::string generateDisassembly(
232  Addr pc, const loader::SymbolTable *symtab) const override;
233 
234  uint32_t iss() const override;
235 };
236 
238 {
239  protected:
241 
242  RegNone(const char *mnem, ArmISA::ExtMachInst _machInst,
243  OpClass __opClass, RegIndex _dest) :
244  ArmISA::ArmStaticInst(mnem, _machInst, __opClass),
245  dest(_dest)
246  {}
247 
248  std::string generateDisassembly(
249  Addr pc, const loader::SymbolTable *symtab) const;
250 };
251 
253 {
254  protected:
255  TlbiOp64(const char *mnem, ArmISA::ExtMachInst _machInst,
256  OpClass __opClass, ArmISA::MiscRegIndex _dest,
257  RegIndex _op1) :
258  MiscRegRegImmOp64(mnem, _machInst, __opClass, _dest, _op1)
259  {}
260 
261  void performTlbi(ExecContext *xc,
262  ArmISA::MiscRegIndex idx, RegVal value) const;
263 };
264 
265 } // namespace gem5
266 
267 #endif
The ExecContext is an abstract base class the provides the interface used by the ISA to manipulate th...
Definition: exec_context.hh:72
ImmOp64(const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass, uint64_t _imm)
Definition: misc64.hh:51
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition: misc64.cc:49
uint64_t imm
Definition: misc64.hh:49
RegVal miscRegImm() const
Returns the "register view" of the immediate field.
Definition: misc64.cc:127
ArmISA::MiscRegIndex dest
Definition: misc64.hh:151
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition: misc64.cc:142
MiscRegImmOp64(const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass, ArmISA::MiscRegIndex _dest, uint32_t _imm)
Definition: misc64.hh:154
const ArmISA::MiscRegNum64 miscReg
Definition: misc64.hh:214
const std::string fullMnemonic
Definition: misc64.hh:213
uint32_t iss() const override
Definition: misc64.cc:210
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition: misc64.cc:203
Fault execute(ExecContext *xc, trace::InstRecord *traceData) const override
Definition: misc64.cc:192
const RegIndex intReg
Definition: misc64.hh:215
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:218
This class is implementing the Base class for a generic AArch64 instruction which is making use of sy...
Definition: misc64.hh:125
uint32_t _iss(const ArmISA::MiscRegNum64 &misc_reg, RegIndex int_index) const
Definition: misc64.cc:93
MiscRegOp64(const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass, bool misc_read)
Definition: misc64.hh:129
Fault generateTrap(ArmISA::ExceptionLevel el) const
Definition: misc64.cc:105
virtual uint32_t iss() const
Definition: misc64.hh:139
bool miscRead() const
Definition: misc64.hh:141
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition: misc64.cc:154
ArmISA::MiscRegIndex dest
Definition: misc64.hh:175
uint32_t iss() const override
Definition: misc64.cc:166
MiscRegRegImmOp64(const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass, ArmISA::MiscRegIndex _dest, RegIndex _op1)
Definition: misc64.hh:178
uint32_t iss() const override
Definition: misc64.cc:185
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition: misc64.cc:173
ArmISA::MiscRegIndex op1
Definition: misc64.hh:195
RegMiscRegImmOp64(const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, ArmISA::MiscRegIndex _op1)
Definition: misc64.hh:197
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const
Internal function to generate disassembly string.
Definition: misc64.cc:216
RegNone(const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass, RegIndex _dest)
Definition: misc64.hh:242
RegIndex dest
Definition: misc64.hh:240
RegRegImmImmOp64(const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, uint64_t _imm1, int64_t _imm2)
Definition: misc64.hh:68
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition: misc64.cc:58
RegRegRegImmOp64(const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, RegIndex _op2, uint64_t _imm)
Definition: misc64.hh:88
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition: misc64.cc:71
TlbiOp64(const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass, ArmISA::MiscRegIndex _dest, RegIndex _op1)
Definition: misc64.hh:255
void performTlbi(ExecContext *xc, ArmISA::MiscRegIndex idx, RegVal value) const
Definition: misc64.cc:226
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition: misc64.cc:86
UnknownOp64(const char *mnem, ArmISA::ExtMachInst _machInst, OpClass __opClass)
Definition: misc64.hh:104
MiscRegIndex decodeAArch64SysReg(unsigned op0, unsigned op1, unsigned crn, unsigned crm, unsigned op2)
Definition: misc.cc:1975
MiscRegIndex
Definition: misc.hh:64
@ MISCREG_IMPDEF_UNIMPL
Definition: misc.hh:1080
Bitfield< 3, 2 > el
Definition: misc_types.hh:73
Bitfield< 4 > pc
uint64_t ExtMachInst
Definition: types.hh:43
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
std::shared_ptr< FaultBase > Fault
Definition: types.hh:248
uint16_t RegIndex
Definition: types.hh:176
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:147
uint64_t RegVal
Definition: types.hh:173

Generated on Wed Dec 21 2022 10:22:26 for gem5 by doxygen 1.9.1