gem5
v20.1.0.0
arch
x86
types.cc
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2010 Advanced Micro Devices, Inc.
3
* All rights reserved.
4
*
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions are
7
* met: redistributions of source code must retain the above copyright
8
* notice, this list of conditions and the following disclaimer;
9
* redistributions in binary form must reproduce the above copyright
10
* notice, this list of conditions and the following disclaimer in the
11
* documentation and/or other materials provided with the distribution;
12
* neither the name of the copyright holders nor the names of its
13
* contributors may be used to endorse or promote products derived from
14
* this software without specific prior written permission.
15
*
16
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
*/
28
29
#include "
arch/x86/types.hh
"
30
31
#include "
sim/serialize.hh
"
32
33
using namespace
X86ISA
;
34
using namespace
std
;
35
36
template
<>
37
void
38
paramOut
(
CheckpointOut
&
cp
,
const
string
&
name
,
ExtMachInst
const
&machInst)
39
{
40
// Prefixes
41
paramOut
(
cp
,
name
+
".legacy"
, (uint8_t)machInst.
legacy
);
42
paramOut
(
cp
,
name
+
".rex"
, (uint8_t)machInst.
rex
);
43
paramOut
(
cp
,
name
+
".vex"
, (uint32_t)machInst.
vex
);
44
45
// Opcode
46
paramOut
(
cp
,
name
+
".opcode.type"
, (uint8_t)machInst.
opcode
.
type
);
47
paramOut
(
cp
,
name
+
".opcode.op"
, (uint8_t)machInst.
opcode
.
op
);
48
49
// Modifier bytes
50
paramOut
(
cp
,
name
+
".modRM"
, (uint8_t)machInst.
modRM
);
51
paramOut
(
cp
,
name
+
".sib"
, (uint8_t)machInst.
sib
);
52
53
// Immediate fields
54
paramOut
(
cp
,
name
+
".immediate"
, machInst.
immediate
);
55
paramOut
(
cp
,
name
+
".displacement"
, machInst.
displacement
);
56
57
// Sizes
58
paramOut
(
cp
,
name
+
".opSize"
, machInst.
opSize
);
59
paramOut
(
cp
,
name
+
".addrSize"
, machInst.
addrSize
);
60
paramOut
(
cp
,
name
+
".stackSize"
, machInst.
stackSize
);
61
paramOut
(
cp
,
name
+
".dispSize"
, machInst.
dispSize
);
62
63
// Mode
64
paramOut
(
cp
,
name
+
".mode"
, (uint8_t)machInst.
mode
);
65
}
66
67
template
<>
68
void
69
paramIn
(
CheckpointIn
&
cp
,
const
string
&
name
,
ExtMachInst
&machInst)
70
{
71
uint8_t temp8;
72
// Prefixes
73
paramIn
(
cp
,
name
+
".legacy"
, temp8);
74
machInst.
legacy
= temp8;
75
paramIn
(
cp
,
name
+
".rex"
, temp8);
76
machInst.
rex
= temp8;
77
78
uint32_t temp32;
79
paramIn
(
cp
,
name
+
".vex"
, temp32);
80
machInst.
vex
= temp32;
81
82
// Opcode
83
paramIn
(
cp
,
name
+
".opcode.type"
, temp8);
84
machInst.
opcode
.
type
= (OpcodeType)temp8;
85
paramIn
(
cp
,
name
+
".opcode.op"
, temp8);
86
machInst.
opcode
.
op
= temp8;
87
88
// Modifier bytes
89
paramIn
(
cp
,
name
+
".modRM"
, temp8);
90
machInst.
modRM
= temp8;
91
paramIn
(
cp
,
name
+
".sib"
, temp8);
92
machInst.
sib
= temp8;;
93
94
// Immediate fields
95
paramIn
(
cp
,
name
+
".immediate"
, machInst.
immediate
);
96
paramIn
(
cp
,
name
+
".displacement"
, machInst.
displacement
);
97
98
// Sizes
99
paramIn
(
cp
,
name
+
".opSize"
, machInst.
opSize
);
100
paramIn
(
cp
,
name
+
".addrSize"
, machInst.
addrSize
);
101
paramIn
(
cp
,
name
+
".stackSize"
, machInst.
stackSize
);
102
paramIn
(
cp
,
name
+
".dispSize"
, machInst.
dispSize
);
103
104
// Mode
105
paramIn
(
cp
,
name
+
".mode"
, temp8);
106
machInst.
mode
= temp8;
107
}
X86ISA::ExtMachInst::mode
OperatingMode mode
Definition:
types.hh:233
X86ISA::ExtMachInst::opcode
struct X86ISA::ExtMachInst::@22 opcode
serialize.hh
X86ISA::ExtMachInst::op
Opcode op
Definition:
types.hh:214
X86ISA::ExtMachInst::immediate
uint64_t immediate
Definition:
types.hh:220
paramOut
void paramOut(CheckpointOut &cp, const string &name, ExtMachInst const &machInst)
Definition:
types.cc:38
X86ISA::ExtMachInst::displacement
uint64_t displacement
Definition:
types.hh:221
cp
Definition:
cprintf.cc:40
X86ISA::ExtMachInst::opSize
uint8_t opSize
Definition:
types.hh:224
X86ISA::ExtMachInst::addrSize
uint8_t addrSize
Definition:
types.hh:226
X86ISA::ExtMachInst
Definition:
types.hh:198
X86ISA
This is exposed globally, independent of the ISA.
Definition:
acpi.hh:55
X86ISA::ExtMachInst::modRM
ModRM modRM
Definition:
types.hh:217
name
const std::string & name()
Definition:
trace.cc:50
X86ISA::ExtMachInst::stackSize
uint8_t stackSize
Definition:
types.hh:228
std
Overload hash function for BasicBlockRange type.
Definition:
vec_reg.hh:587
X86ISA::ExtMachInst::type
OpcodeType type
Definition:
types.hh:212
X86ISA::ExtMachInst::rex
Rex rex
Definition:
types.hh:206
paramIn
void paramIn(CheckpointIn &cp, const string &name, ExtMachInst &machInst)
Definition:
types.cc:69
X86ISA::ExtMachInst::sib
Sib sib
Definition:
types.hh:218
X86ISA::ExtMachInst::vex
VexInfo vex
Definition:
types.hh:207
X86ISA::ExtMachInst::dispSize
uint8_t dispSize
Definition:
types.hh:230
CheckpointOut
std::ostream CheckpointOut
Definition:
serialize.hh:63
X86ISA::ExtMachInst::legacy
LegacyPrefixVector legacy
Definition:
types.hh:205
CheckpointIn
Definition:
serialize.hh:67
types.hh
Generated on Wed Sep 30 2020 14:02:07 for gem5 by
doxygen
1.8.17