Deleted Added
sdiff udiff text old ( 12616:4b463b4dc098 ) new ( 13364:055bf0fa0f02 )
full compact
1/*
2 * Copyright (c) 2011-2013,2017-2018 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

--- 92 unchanged lines hidden (view full) ---

101 UnknownOp64(const char *mnem, ExtMachInst _machInst, OpClass __opClass) :
102 ArmStaticInst(mnem, _machInst, __opClass)
103 {}
104
105 std::string generateDisassembly(
106 Addr pc, const SymbolTable *symtab) const override;
107};
108
109/**
110 * This class is implementing the Base class for a generic AArch64
111 * instruction which is making use of system registers (MiscReg), like
112 * MSR,MRS,SYS. The common denominator or those instruction is the
113 * chance that the system register access is trapped to an upper
114 * Exception level. MiscRegOp64 is providing that feature. Other
115 * "pseudo" instructions, like access to implementation defined
116 * registers can inherit from this class to make use of the trapping
117 * functionalities even if there is no data movement between GPRs and
118 * system register.
119 */
120class MiscRegOp64 : public ArmStaticInst
121{
122 protected:
123 bool miscRead;
124
125 MiscRegOp64(const char *mnem, ExtMachInst _machInst,
126 OpClass __opClass, bool misc_read) :
127 ArmStaticInst(mnem, _machInst, __opClass),
128 miscRead(misc_read)
129 {}
130
131 Fault trap(ThreadContext *tc, MiscRegIndex misc_reg,
132 ExceptionLevel el, uint32_t immediate) const;
133 private:
134 bool checkEL1Trap(ThreadContext *tc, const MiscRegIndex misc_reg,
135 ExceptionLevel el) const;
136
137 bool checkEL2Trap(ThreadContext *tc, const MiscRegIndex misc_reg,
138 ExceptionLevel el, bool *is_vfp_neon) const;
139
140 bool checkEL3Trap(ThreadContext *tc, const MiscRegIndex misc_reg,
141 ExceptionLevel el, bool *is_vfp_neon) const;
142
143};
144
145class MiscRegRegImmOp64 : public MiscRegOp64
146{
147 protected:
148 MiscRegIndex dest;
149 IntRegIndex op1;
150 uint32_t imm;
151
152 MiscRegRegImmOp64(const char *mnem, ExtMachInst _machInst,
153 OpClass __opClass, MiscRegIndex _dest,
154 IntRegIndex _op1, uint32_t _imm) :
155 MiscRegOp64(mnem, _machInst, __opClass, false),
156 dest(_dest), op1(_op1), imm(_imm)
157 {}
158
159 std::string generateDisassembly(
160 Addr pc, const SymbolTable *symtab) const override;
161};
162
163class RegMiscRegImmOp64 : public MiscRegOp64
164{
165 protected:
166 IntRegIndex dest;
167 MiscRegIndex op1;
168 uint32_t imm;
169
170 RegMiscRegImmOp64(const char *mnem, ExtMachInst _machInst,
171 OpClass __opClass, IntRegIndex _dest,
172 MiscRegIndex _op1, uint32_t _imm) :
173 MiscRegOp64(mnem, _machInst, __opClass, true),
174 dest(_dest), op1(_op1), imm(_imm)
175 {}
176
177 std::string generateDisassembly(
178 Addr pc, const SymbolTable *symtab) const override;
179};
180
181#endif