gem5
v24.0.0.0
Loading...
Searching...
No Matches
arch
x86
insts
microop.hh
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2007 The Hewlett-Packard Development Company
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_X86_INSTS_MICROOP_HH__
39
#define __ARCH_X86_INSTS_MICROOP_HH__
40
41
#include "
arch/x86/insts/static_inst.hh
"
42
#include "
arch/x86/pcstate.hh
"
43
#include "
base/compiler.hh
"
44
45
namespace
gem5
46
{
47
48
namespace
X86ISA
49
{
50
51
namespace
condition_tests
52
{
53
54
enum
CondTest
55
{
56
True
,
57
NotFalse
=
True
,
58
ECF
,
59
EZF
,
60
SZnZF
,
61
MSTRZ
,
62
STRZ
,
63
MSTRC
,
64
STRZnEZF
,
65
OF
,
66
CF
,
67
ZF
,
68
CvZF
,
69
SF
,
70
PF
,
71
SxOF
,
72
SxOvZF
,
73
74
False
,
75
NotTrue
=
False
,
76
NotECF
,
77
NotEZF
,
78
NotSZnZF
,
79
NotMSTRZ
,
80
NotSTRZ
,
81
NotMSTRC
,
82
STRnZnEZF
,
83
NotOF
,
84
NotCF
,
85
NotZF
,
86
NotCvZF
,
87
NotSF
,
88
NotPF
,
89
NotSxOF
,
90
NotSxOvZF
91
};
92
93
}
94
95
//A class which is the base of all x86 micro ops. It provides a function to
96
//set necessary flags appropriately.
97
class
X86MicroopBase
:
public
X86StaticInst
98
{
99
protected
:
100
const
char
*
instMnem
;
101
uint8_t
opSize
;
102
uint8_t
addrSize
;
103
104
X86MicroopBase
(
ExtMachInst
_machInst,
105
const
char
*mnem,
const
char
*_instMnem,
106
uint64_t setFlags, OpClass __opClass) :
107
X86ISA::
X86StaticInst
(mnem, _machInst, __opClass),
108
instMnem
(_instMnem)
109
{
110
const
int
ChunkSize =
sizeof
(
unsigned
long);
111
const
int
Chunks =
sizeof
(setFlags) / ChunkSize;
112
113
// Since the bitset constructor can only handle unsigned long
114
// sized chunks, feed it those one at a time while oring them in.
115
for
(
int
i
= 0;
i
< Chunks;
i
++) {
116
unsigned
shift
=
i
* ChunkSize * 8;
117
flags
|= (std::bitset<Num_Flags>(setFlags >>
shift
) <<
shift
);
118
}
119
}
120
121
std::string
122
generateDisassembly
(
Addr
pc
,
123
const
loader::SymbolTable
*symtab)
const override
124
{
125
std::stringstream
ss
;
126
127
ccprintf
(
ss
,
"\t%s.%s"
,
instMnem
,
mnemonic
);
128
129
return
ss
.str();
130
}
131
132
bool
checkCondition
(uint64_t
flags
,
int
condition)
const
;
133
134
void
135
advancePC
(
PCStateBase
&pcState)
const override
136
{
137
auto
&xpc = pcState.
as
<
PCState
>();
138
if
(
flags
[IsLastMicroop])
139
xpc.
uEnd
();
140
else
141
xpc.uAdvance();
142
}
143
144
void
145
advancePC
(
ThreadContext
*tc)
const override
146
{
147
PCState
pc
= tc->
pcState
().
as
<
PCState
>();
148
if
(
flags
[IsLastMicroop])
149
pc
.
uEnd
();
150
else
151
pc
.uAdvance();
152
tc->
pcState
(
pc
);
153
}
154
155
std::unique_ptr<PCStateBase>
branchTarget
(
156
const
PCStateBase
&branch_pc)
const override
;
157
158
// Explicitly import the otherwise hidden branchTarget.
159
using
StaticInst::branchTarget
;
160
};
161
162
class
MicroCondBase
:
public
X86MicroopBase
163
{
164
protected
:
165
uint8_t
cc
;
166
167
public
:
168
MicroCondBase
(
ExtMachInst
mach_inst,
const
char
*mnem,
169
const
char
*inst_mnem, uint64_t set_flags, OpClass op_class,
170
uint8_t _cc) :
171
X86MicroopBase
(mach_inst, mnem, inst_mnem, set_flags, op_class),
172
cc
(_cc)
173
{}
174
};
175
176
}
// namespace X86ISA
177
}
// namespace gem5
178
179
#endif
//__ARCH_X86_INSTS_MICROOP_HH__
static_inst.hh
gem5::PCStateBase
Definition
pcstate.hh:59
gem5::PCStateBase::as
Target & as()
Definition
pcstate.hh:73
gem5::StaticInst::branchTarget
virtual std::unique_ptr< PCStateBase > branchTarget(const PCStateBase &pc) const
Return the target address for a PC-relative branch.
Definition
static_inst.cc:46
gem5::StaticInst::mnemonic
const char * mnemonic
Base mnemonic (e.g., "add").
Definition
static_inst.hh:268
gem5::StaticInst::flags
std::bitset< Num_Flags > flags
Flag values for this instruction.
Definition
static_inst.hh:103
gem5::ThreadContext
ThreadContext is the external interface to all thread state for anything outside of the CPU.
Definition
guest_abi.test.cc:41
gem5::ThreadContext::pcState
virtual const PCStateBase & pcState() const =0
gem5::X86ISA::MicroCondBase
Definition
microop.hh:163
gem5::X86ISA::MicroCondBase::cc
uint8_t cc
Definition
microop.hh:165
gem5::X86ISA::MicroCondBase::MicroCondBase
MicroCondBase(ExtMachInst mach_inst, const char *mnem, const char *inst_mnem, uint64_t set_flags, OpClass op_class, uint8_t _cc)
Definition
microop.hh:168
gem5::X86ISA::PCState
Definition
pcstate.hh:51
gem5::X86ISA::PCState::uEnd
void uEnd()
Definition
pcstate.hh:105
gem5::X86ISA::X86MicroopBase
Definition
microop.hh:98
gem5::X86ISA::X86MicroopBase::checkCondition
bool checkCondition(uint64_t flags, int condition) const
Definition
microop.cc:49
gem5::X86ISA::X86MicroopBase::branchTarget
std::unique_ptr< PCStateBase > branchTarget(const PCStateBase &branch_pc) const override
Return the target address for a PC-relative branch.
Definition
microop.cc:126
gem5::X86ISA::X86MicroopBase::advancePC
void advancePC(PCStateBase &pcState) const override
Definition
microop.hh:135
gem5::X86ISA::X86MicroopBase::addrSize
uint8_t addrSize
Definition
microop.hh:102
gem5::X86ISA::X86MicroopBase::opSize
uint8_t opSize
Definition
microop.hh:101
gem5::X86ISA::X86MicroopBase::X86MicroopBase
X86MicroopBase(ExtMachInst _machInst, const char *mnem, const char *_instMnem, uint64_t setFlags, OpClass __opClass)
Definition
microop.hh:104
gem5::X86ISA::X86MicroopBase::instMnem
const char * instMnem
Definition
microop.hh:100
gem5::X86ISA::X86MicroopBase::advancePC
void advancePC(ThreadContext *tc) const override
Definition
microop.hh:145
gem5::X86ISA::X86MicroopBase::generateDisassembly
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition
microop.hh:122
gem5::X86ISA::X86StaticInst
Base class for all X86 static instructions.
Definition
static_inst.hh:101
gem5::loader::SymbolTable
Definition
symtab.hh:152
compiler.hh
gem5::ArmISA::i
Bitfield< 7 > i
Definition
misc_types.hh:67
gem5::ArmISA::shift
Bitfield< 6, 5 > shift
Definition
types.hh:117
gem5::ArmISA::ss
Bitfield< 21 > ss
Definition
misc_types.hh:60
gem5::X86ISA::condition_tests::CondTest
CondTest
Definition
microop.hh:55
gem5::X86ISA::condition_tests::NotCvZF
@ NotCvZF
Definition
microop.hh:86
gem5::X86ISA::condition_tests::True
@ True
Definition
microop.hh:56
gem5::X86ISA::condition_tests::NotOF
@ NotOF
Definition
microop.hh:83
gem5::X86ISA::condition_tests::ZF
@ ZF
Definition
microop.hh:67
gem5::X86ISA::condition_tests::NotSxOF
@ NotSxOF
Definition
microop.hh:89
gem5::X86ISA::condition_tests::False
@ False
Definition
microop.hh:74
gem5::X86ISA::condition_tests::NotTrue
@ NotTrue
Definition
microop.hh:75
gem5::X86ISA::condition_tests::SZnZF
@ SZnZF
Definition
microop.hh:60
gem5::X86ISA::condition_tests::STRZnEZF
@ STRZnEZF
Definition
microop.hh:64
gem5::X86ISA::condition_tests::MSTRC
@ MSTRC
Definition
microop.hh:63
gem5::X86ISA::condition_tests::NotSF
@ NotSF
Definition
microop.hh:87
gem5::X86ISA::condition_tests::STRnZnEZF
@ STRnZnEZF
Definition
microop.hh:82
gem5::X86ISA::condition_tests::OF
@ OF
Definition
microop.hh:65
gem5::X86ISA::condition_tests::SxOF
@ SxOF
Definition
microop.hh:71
gem5::X86ISA::condition_tests::NotSZnZF
@ NotSZnZF
Definition
microop.hh:78
gem5::X86ISA::condition_tests::SF
@ SF
Definition
microop.hh:69
gem5::X86ISA::condition_tests::NotPF
@ NotPF
Definition
microop.hh:88
gem5::X86ISA::condition_tests::NotMSTRZ
@ NotMSTRZ
Definition
microop.hh:79
gem5::X86ISA::condition_tests::NotFalse
@ NotFalse
Definition
microop.hh:57
gem5::X86ISA::condition_tests::SxOvZF
@ SxOvZF
Definition
microop.hh:72
gem5::X86ISA::condition_tests::NotSTRZ
@ NotSTRZ
Definition
microop.hh:80
gem5::X86ISA::condition_tests::PF
@ PF
Definition
microop.hh:70
gem5::X86ISA::condition_tests::ECF
@ ECF
Definition
microop.hh:58
gem5::X86ISA::condition_tests::CvZF
@ CvZF
Definition
microop.hh:68
gem5::X86ISA::condition_tests::EZF
@ EZF
Definition
microop.hh:59
gem5::X86ISA::condition_tests::NotCF
@ NotCF
Definition
microop.hh:84
gem5::X86ISA::condition_tests::MSTRZ
@ MSTRZ
Definition
microop.hh:61
gem5::X86ISA::condition_tests::STRZ
@ STRZ
Definition
microop.hh:62
gem5::X86ISA::condition_tests::NotEZF
@ NotEZF
Definition
microop.hh:77
gem5::X86ISA::condition_tests::NotMSTRC
@ NotMSTRC
Definition
microop.hh:81
gem5::X86ISA::condition_tests::CF
@ CF
Definition
microop.hh:66
gem5::X86ISA::condition_tests::NotZF
@ NotZF
Definition
microop.hh:85
gem5::X86ISA::condition_tests::NotSxOvZF
@ NotSxOvZF
Definition
microop.hh:90
gem5::X86ISA::condition_tests::NotECF
@ NotECF
Definition
microop.hh:76
gem5::X86ISA::pc
Bitfield< 19 > pc
Definition
misc.hh:840
gem5
Copyright (c) 2024 - Pranith Kumar Copyright (c) 2020 Inria All rights reserved.
Definition
binary32.hh:36
gem5::Addr
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition
types.hh:147
gem5::ccprintf
void ccprintf(cp::Print &print)
Definition
cprintf.hh:130
gem5::X86ISA::ExtMachInst
Definition
types.hh:213
pcstate.hh
Generated on Tue Jun 18 2024 16:24:00 for gem5 by
doxygen
1.11.0