branch64.hh (10037:5cac77888310) branch64.hh (12616:4b463b4dc098)
1/*
2 * Copyright (c) 2011-2013 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

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

50 int64_t imm;
51
52 public:
53 BranchImm64(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
54 int64_t _imm) :
55 ArmStaticInst(mnem, _machInst, __opClass), imm(_imm)
56 {}
57
1/*
2 * Copyright (c) 2011-2013 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

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

50 int64_t imm;
51
52 public:
53 BranchImm64(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
54 int64_t _imm) :
55 ArmStaticInst(mnem, _machInst, __opClass), imm(_imm)
56 {}
57
58 ArmISA::PCState branchTarget(const ArmISA::PCState &branchPC) const;
58 ArmISA::PCState branchTarget(
59 const ArmISA::PCState &branchPC) const override;
59
60 /// Explicitly import the otherwise hidden branchTarget
61 using StaticInst::branchTarget;
62
60
61 /// Explicitly import the otherwise hidden branchTarget
62 using StaticInst::branchTarget;
63
63 std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const;
64 std::string generateDisassembly(
65 Addr pc, const SymbolTable *symtab) const override;
64};
65
66// Conditionally Branch to a target computed with an immediate
67class BranchImmCond64 : public BranchImm64
68{
69 protected:
70 ConditionCode condCode;
71
72 public:
73 BranchImmCond64(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
74 int64_t _imm, ConditionCode _condCode) :
75 BranchImm64(mnem, _machInst, __opClass, _imm), condCode(_condCode)
76 {}
77
66};
67
68// Conditionally Branch to a target computed with an immediate
69class BranchImmCond64 : public BranchImm64
70{
71 protected:
72 ConditionCode condCode;
73
74 public:
75 BranchImmCond64(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
76 int64_t _imm, ConditionCode _condCode) :
77 BranchImm64(mnem, _machInst, __opClass, _imm), condCode(_condCode)
78 {}
79
78 std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const;
80 std::string generateDisassembly(
81 Addr pc, const SymbolTable *symtab) const override;
79};
80
81// Branch to a target computed with a register
82class BranchReg64 : public ArmStaticInst
83{
84 protected:
85 IntRegIndex op1;
86
87 public:
88 BranchReg64(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
89 IntRegIndex _op1) :
90 ArmStaticInst(mnem, _machInst, __opClass), op1(_op1)
91 {}
92
82};
83
84// Branch to a target computed with a register
85class BranchReg64 : public ArmStaticInst
86{
87 protected:
88 IntRegIndex op1;
89
90 public:
91 BranchReg64(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
92 IntRegIndex _op1) :
93 ArmStaticInst(mnem, _machInst, __opClass), op1(_op1)
94 {}
95
93 std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const;
96 std::string generateDisassembly(
97 Addr pc, const SymbolTable *symtab) const override;
94};
95
96// Ret instruction
97class BranchRet64 : public BranchReg64
98{
99 public:
100 BranchRet64(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
101 IntRegIndex _op1) :
102 BranchReg64(mnem, _machInst, __opClass, _op1)
103 {}
104
98};
99
100// Ret instruction
101class BranchRet64 : public BranchReg64
102{
103 public:
104 BranchRet64(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
105 IntRegIndex _op1) :
106 BranchReg64(mnem, _machInst, __opClass, _op1)
107 {}
108
105 std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const;
109 std::string generateDisassembly(
110 Addr pc, const SymbolTable *symtab) const override;
106};
107
108// Eret instruction
109class BranchEret64 : public ArmStaticInst
110{
111 public:
112 BranchEret64(const char *mnem, ExtMachInst _machInst, OpClass __opClass) :
113 ArmStaticInst(mnem, _machInst, __opClass)
114 {}
115
111};
112
113// Eret instruction
114class BranchEret64 : public ArmStaticInst
115{
116 public:
117 BranchEret64(const char *mnem, ExtMachInst _machInst, OpClass __opClass) :
118 ArmStaticInst(mnem, _machInst, __opClass)
119 {}
120
116 std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const;
121 std::string generateDisassembly(
122 Addr pc, const SymbolTable *symtab) const override;
117};
118
119// Branch to a target computed with an immediate and a register
120class BranchImmReg64 : public ArmStaticInst
121{
122 protected:
123 int64_t imm;
124 IntRegIndex op1;
125
126 public:
127 BranchImmReg64(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
128 int64_t _imm, IntRegIndex _op1) :
129 ArmStaticInst(mnem, _machInst, __opClass), imm(_imm), op1(_op1)
130 {}
131
123};
124
125// Branch to a target computed with an immediate and a register
126class BranchImmReg64 : public ArmStaticInst
127{
128 protected:
129 int64_t imm;
130 IntRegIndex op1;
131
132 public:
133 BranchImmReg64(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
134 int64_t _imm, IntRegIndex _op1) :
135 ArmStaticInst(mnem, _machInst, __opClass), imm(_imm), op1(_op1)
136 {}
137
132 ArmISA::PCState branchTarget(const ArmISA::PCState &branchPC) const;
138 ArmISA::PCState branchTarget(
139 const ArmISA::PCState &branchPC) const override;
133
134 /// Explicitly import the otherwise hidden branchTarget
135 using StaticInst::branchTarget;
136
140
141 /// Explicitly import the otherwise hidden branchTarget
142 using StaticInst::branchTarget;
143
137 std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const;
144 std::string generateDisassembly(
145 Addr pc, const SymbolTable *symtab) const override;
138};
139
140// Branch to a target computed with two immediates
141class BranchImmImmReg64 : public ArmStaticInst
142{
143 protected:
144 int64_t imm1;
145 int64_t imm2;
146 IntRegIndex op1;
147
148 public:
149 BranchImmImmReg64(const char *mnem, ExtMachInst _machInst,
150 OpClass __opClass, int64_t _imm1, int64_t _imm2,
151 IntRegIndex _op1) :
152 ArmStaticInst(mnem, _machInst, __opClass),
153 imm1(_imm1), imm2(_imm2), op1(_op1)
154 {}
155
146};
147
148// Branch to a target computed with two immediates
149class BranchImmImmReg64 : public ArmStaticInst
150{
151 protected:
152 int64_t imm1;
153 int64_t imm2;
154 IntRegIndex op1;
155
156 public:
157 BranchImmImmReg64(const char *mnem, ExtMachInst _machInst,
158 OpClass __opClass, int64_t _imm1, int64_t _imm2,
159 IntRegIndex _op1) :
160 ArmStaticInst(mnem, _machInst, __opClass),
161 imm1(_imm1), imm2(_imm2), op1(_op1)
162 {}
163
156 ArmISA::PCState branchTarget(const ArmISA::PCState &branchPC) const;
164 ArmISA::PCState branchTarget(
165 const ArmISA::PCState &branchPC) const override;
157
158 /// Explicitly import the otherwise hidden branchTarget
159 using StaticInst::branchTarget;
160
166
167 /// Explicitly import the otherwise hidden branchTarget
168 using StaticInst::branchTarget;
169
161 std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const;
170 std::string generateDisassembly(
171 Addr pc, const SymbolTable *symtab) const override;
162};
163
164}
165
166#endif //__ARCH_ARM_INSTS_BRANCH_HH__
172};
173
174}
175
176#endif //__ARCH_ARM_INSTS_BRANCH_HH__