gem5  v22.1.0.0
branch64.cc
Go to the documentation of this file.
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
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 
39 
40 namespace gem5
41 {
42 
43 namespace ArmISA
44 {
45 
46 std::unique_ptr<PCStateBase>
47 BranchImm64::branchTarget(const PCStateBase &branch_pc) const
48 {
49  PCStateBase *pcs = branch_pc.clone();
50  auto &apc = pcs->as<PCState>();
51  apc.instNPC(apc.pc() + imm);
52  apc.advance();
53  return std::unique_ptr<PCStateBase>{pcs};
54 }
55 
56 std::unique_ptr<PCStateBase>
58 {
59  PCStateBase *pcs = branch_pc.clone();
60  auto &apc = pcs->as<PCState>();
61  apc.instNPC(apc.pc() + imm);
62  apc.advance();
63  return std::unique_ptr<PCStateBase>{pcs};
64 }
65 
66 std::unique_ptr<PCStateBase>
68 {
69  PCStateBase *pcs = branch_pc.clone();
70  auto &apc = pcs->as<PCState>();
71  apc.instNPC(apc.pc() + imm2);
72  apc.advance();
73  return std::unique_ptr<PCStateBase>{pcs};
74 }
75 
76 std::string
78  Addr pc, const loader::SymbolTable *symtab) const
79 {
80  std::stringstream ss;
81  printMnemonic(ss, "", false, true, condCode);
82  printTarget(ss, pc + imm, symtab);
83  return ss.str();
84 }
85 
86 std::string
88  Addr pc, const loader::SymbolTable *symtab) const
89 {
90  std::stringstream ss;
91  printMnemonic(ss, "", false);
92  printTarget(ss, pc + imm, symtab);
93  return ss.str();
94 }
95 
96 std::string
98  Addr pc, const loader::SymbolTable *symtab) const
99 {
100  std::stringstream ss;
101  printMnemonic(ss, "", false);
102  printIntReg(ss, op1);
103  return ss.str();
104 }
105 
106 std::string
108  Addr pc, const loader::SymbolTable *symtab) const
109 {
110  std::stringstream ss;
111  printMnemonic(ss, "", false);
112  printIntReg(ss, op1);
113  ccprintf(ss, ", ");
114  printIntReg(ss, op2);
115  return ss.str();
116 }
117 
118 std::string
120  Addr pc, const loader::SymbolTable *symtab) const
121 {
122  std::stringstream ss;
123  printMnemonic(ss, "", false);
124  if (op1 != int_reg::X30)
125  printIntReg(ss, op1);
126  return ss.str();
127 }
128 
129 std::string
131  Addr pc, const loader::SymbolTable *symtab) const
132 {
133  std::stringstream ss;
134  printMnemonic(ss, "", false);
135  if (op1 != int_reg::X30)
136  printIntReg(ss, op1);
137  return ss.str();
138 }
139 
140 std::string
142  Addr pc, const loader::SymbolTable *symtab) const
143 {
144  std::stringstream ss;
145  printMnemonic(ss, "", false);
146  return ss.str();
147 }
148 
149 std::string
151  Addr pc, const loader::SymbolTable *symtab) const
152 {
153  std::stringstream ss;
154  printMnemonic(ss, "", false);
155  return ss.str();
156 }
157 
158 std::string
160  Addr pc, const loader::SymbolTable *symtab) const
161 {
162  std::stringstream ss;
163  printMnemonic(ss, "", false);
164  printIntReg(ss, op1);
165  ccprintf(ss, ", ");
166  printTarget(ss, pc + imm, symtab);
167  return ss.str();
168 }
169 
170 std::string
172  Addr pc, const loader::SymbolTable *symtab) const
173 {
174  std::stringstream ss;
175  printMnemonic(ss, "", false);
176  printIntReg(ss, op1);
177  ccprintf(ss, ", #%#x, ", imm1);
178  printTarget(ss, pc + imm2, symtab);
179  return ss.str();
180 }
181 
182 } // namespace ArmISA
183 } // namespace gem5
void printMnemonic(std::ostream &os, const std::string &suffix="", bool withPred=true, bool withCond64=false, ConditionCode cond64=COND_UC) const
Definition: static_inst.cc:377
void printIntReg(std::ostream &os, RegIndex reg_idx, uint8_t opWidth=0) const
Print a register name for disassembly given the unique dependence tag number (FP or int).
Definition: static_inst.cc:299
void printTarget(std::ostream &os, Addr target, const loader::SymbolTable *symtab) const
Definition: static_inst.cc:398
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition: branch64.cc:141
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition: branch64.cc:150
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition: branch64.cc:87
virtual std::unique_ptr< PCStateBase > branchTarget(const PCStateBase &pc) const
Explicitly import the otherwise hidden branchTarget.
Definition: static_inst.cc:46
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition: branch64.cc:77
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition: branch64.cc:171
virtual std::unique_ptr< PCStateBase > branchTarget(const PCStateBase &pc) const
Explicitly import the otherwise hidden branchTarget.
Definition: static_inst.cc:46
virtual std::unique_ptr< PCStateBase > branchTarget(const PCStateBase &pc) const
Explicitly import the otherwise hidden branchTarget.
Definition: static_inst.cc:46
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition: branch64.cc:159
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition: branch64.cc:97
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition: branch64.cc:107
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition: branch64.cc:119
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition: branch64.cc:130
Target & as()
Definition: pcstate.hh:72
virtual PCStateBase * clone() const =0
constexpr RegId X30
Definition: int.hh:270
Bitfield< 21 > ss
Definition: misc_types.hh:60
Bitfield< 4 > pc
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:147
void ccprintf(cp::Print &print)
Definition: cprintf.hh:130

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