gem5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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  * Authors: Gabe Black
29  */
30 
31 #include "arch/x86/types.hh"
32 
33 #include "sim/serialize.hh"
34 
35 using namespace X86ISA;
36 using namespace std;
37 
38 template <>
39 void
40 paramOut(CheckpointOut &cp, const string &name, ExtMachInst const &machInst)
41 {
42  // Prefixes
43  paramOut(cp, name + ".legacy", (uint8_t)machInst.legacy);
44  paramOut(cp, name + ".rex", (uint8_t)machInst.rex);
45  paramOut(cp, name + ".vex", (uint32_t)machInst.vex);
46 
47  // Opcode
48  paramOut(cp, name + ".opcode.type", (uint8_t)machInst.opcode.type);
49  paramOut(cp, name + ".opcode.op", (uint8_t)machInst.opcode.op);
50 
51  // Modifier bytes
52  paramOut(cp, name + ".modRM", (uint8_t)machInst.modRM);
53  paramOut(cp, name + ".sib", (uint8_t)machInst.sib);
54 
55  // Immediate fields
56  paramOut(cp, name + ".immediate", machInst.immediate);
57  paramOut(cp, name + ".displacement", machInst.displacement);
58 
59  // Sizes
60  paramOut(cp, name + ".opSize", machInst.opSize);
61  paramOut(cp, name + ".addrSize", machInst.addrSize);
62  paramOut(cp, name + ".stackSize", machInst.stackSize);
63  paramOut(cp, name + ".dispSize", machInst.dispSize);
64 
65  // Mode
66  paramOut(cp, name + ".mode", (uint8_t)machInst.mode);
67 }
68 
69 template <>
70 void
71 paramIn(CheckpointIn &cp, const string &name, ExtMachInst &machInst)
72 {
73  uint8_t temp8;
74  // Prefixes
75  paramIn(cp, name + ".legacy", temp8);
76  machInst.legacy = temp8;
77  paramIn(cp, name + ".rex", temp8);
78  machInst.rex = temp8;
79 
80  uint32_t temp32;
81  paramIn(cp, name + ".vex", temp32);
82  machInst.vex = temp32;
83 
84  // Opcode
85  paramIn(cp, name + ".opcode.type", temp8);
86  machInst.opcode.type = (OpcodeType)temp8;
87  paramIn(cp, name + ".opcode.op", temp8);
88  machInst.opcode.op = temp8;
89 
90  // Modifier bytes
91  paramIn(cp, name + ".modRM", temp8);
92  machInst.modRM = temp8;
93  paramIn(cp, name + ".sib", temp8);
94  machInst.sib = temp8;;
95 
96  // Immediate fields
97  paramIn(cp, name + ".immediate", machInst.immediate);
98  paramIn(cp, name + ".displacement", machInst.displacement);
99 
100  // Sizes
101  paramIn(cp, name + ".opSize", machInst.opSize);
102  paramIn(cp, name + ".addrSize", machInst.addrSize);
103  paramIn(cp, name + ".stackSize", machInst.stackSize);
104  paramIn(cp, name + ".dispSize", machInst.dispSize);
105 
106  // Mode
107  paramIn(cp, name + ".mode", temp8);
108  machInst.mode = temp8;
109 }
struct X86ISA::ExtMachInst::@25 opcode
uint64_t immediate
Definition: types.hh:218
const std::string & name()
Definition: trace.cc:49
uint8_t dispSize
Definition: types.hh:228
uint8_t stackSize
Definition: types.hh:226
OpcodeType type
Definition: types.hh:210
void paramOut(CheckpointOut &cp, const string &name, ExtMachInst const &machInst)
Definition: types.cc:40
LegacyPrefixVector legacy
Definition: types.hh:203
uint64_t displacement
Definition: types.hh:219
std::ostream CheckpointOut
Definition: serialize.hh:67
uint8_t opSize
Definition: types.hh:222
uint8_t addrSize
Definition: types.hh:224
OperatingMode mode
Definition: types.hh:231
void paramIn(CheckpointIn &cp, const string &name, ExtMachInst &machInst)
Definition: types.cc:71

Generated on Fri Jun 9 2017 13:03:40 for gem5 by doxygen 1.8.6