microregop.hh (4679:0b39fa8f5eb8) microregop.hh (4688:82d7cbf0e66d)
1/*
2 * Copyright (c) 2007 The Hewlett-Packard Development Company
3 * All rights reserved.
4 *
5 * Redistribution and use of this software in source and binary forms,
6 * with or without modification, are permitted provided that the
7 * following conditions are met:
8 *

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

57
58#ifndef __ARCH_X86_INSTS_MICROREGOP_HH__
59#define __ARCH_X86_INSTS_MICROREGOP_HH__
60
61#include "arch/x86/insts/microop.hh"
62
63namespace X86ISA
64{
1/*
2 * Copyright (c) 2007 The Hewlett-Packard Development Company
3 * All rights reserved.
4 *
5 * Redistribution and use of this software in source and binary forms,
6 * with or without modification, are permitted provided that the
7 * following conditions are met:
8 *

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

57
58#ifndef __ARCH_X86_INSTS_MICROREGOP_HH__
59#define __ARCH_X86_INSTS_MICROREGOP_HH__
60
61#include "arch/x86/insts/microop.hh"
62
63namespace X86ISA
64{
65 namespace ConditionTests
66 {
67 enum CondTest {
68 True,
69 NotFalse = True,
70 ECF,
71 EZF,
72 SZnZF,
73 MSTRZ,
74 STRZ,
75 MSTRC,
76 STRZnZF,
77 OF,
78 CF,
79 ZF,
80 CvZF,
81 SF,
82 PF,
83 SxOF,
84 SxOvZF,
85
86 False,
87 NotTrue = False,
88 NotECF,
89 NotEZF,
90 NotSZnZF,
91 NotMSTRZ,
92 NotSTRZ,
93 NotMSTRC,
94 NotSTRZnZF,
95 NotOF,
96 NotCF,
97 NotZF,
98 NotCvZF,
99 NotSF,
100 NotPF,
101 NotSxOF,
102 NotSxOvZF
103 };
104 }
105
65 /**
66 * Base classes for RegOps which provides a generateDisassembly method.
67 */
106 /**
107 * Base classes for RegOps which provides a generateDisassembly method.
108 */
68 class RegOp : public X86MicroopBase
109 class RegOpBase : public X86MicroopBase
69 {
70 protected:
71 const RegIndex src1;
110 {
111 protected:
112 const RegIndex src1;
72 const RegIndex src2;
73 const RegIndex dest;
113 const RegIndex dest;
74 const bool setStatus;
75 const uint8_t dataSize;
114 const uint8_t dataSize;
76 const uint8_t ext;
115 const uint16_t ext;
77
78 // Constructor
116
117 // Constructor
118 RegOpBase(ExtMachInst _machInst,
119 const char *mnem, const char *_instMnem,
120 bool isMicro, bool isDelayed,
121 bool isFirst, bool isLast,
122 RegIndex _src1, RegIndex _dest,
123 uint8_t _dataSize, uint16_t _ext,
124 OpClass __opClass) :
125 X86MicroopBase(_machInst, mnem, _instMnem,
126 isMicro, isDelayed, isFirst, isLast,
127 __opClass),
128 src1(_src1), dest(_dest),
129 dataSize(_dataSize), ext(_ext)
130 {
131 }
132
133 //Figure out what the condition code flags should be.
134 uint64_t genFlags(uint64_t oldFlags, uint64_t flagMask,
135 uint64_t _dest, uint64_t _src1, uint64_t _src2) const;
136 bool checkCondition(uint64_t flags) const;
137 };
138
139 class RegOp : public RegOpBase
140 {
141 protected:
142 const RegIndex src2;
143
144 // Constructor
79 RegOp(ExtMachInst _machInst,
80 const char *mnem, const char *_instMnem,
81 bool isMicro, bool isDelayed,
82 bool isFirst, bool isLast,
83 RegIndex _src1, RegIndex _src2, RegIndex _dest,
145 RegOp(ExtMachInst _machInst,
146 const char *mnem, const char *_instMnem,
147 bool isMicro, bool isDelayed,
148 bool isFirst, bool isLast,
149 RegIndex _src1, RegIndex _src2, RegIndex _dest,
84 bool _setStatus, uint8_t _dataSize, uint8_t _ext,
150 uint8_t _dataSize, uint16_t _ext,
85 OpClass __opClass) :
151 OpClass __opClass) :
86 X86MicroopBase(_machInst, mnem, _instMnem,
152 RegOpBase(_machInst, mnem, _instMnem,
87 isMicro, isDelayed, isFirst, isLast,
153 isMicro, isDelayed, isFirst, isLast,
154 _src1, _dest, _dataSize, _ext,
88 __opClass),
155 __opClass),
89 src1(_src1), src2(_src2), dest(_dest),
90 setStatus(_setStatus), dataSize(_dataSize), ext(_ext)
156 src2(_src2)
91 {
92 }
93
94 std::string generateDisassembly(Addr pc,
95 const SymbolTable *symtab) const;
96 };
97
157 {
158 }
159
160 std::string generateDisassembly(Addr pc,
161 const SymbolTable *symtab) const;
162 };
163
98 class RegOpImm : public X86MicroopBase
164 class RegOpImm : public RegOpBase
99 {
100 protected:
165 {
166 protected:
101 const RegIndex src1;
102 const uint8_t imm8;
167 const uint8_t imm8;
103 const RegIndex dest;
104 const bool setStatus;
105 const uint8_t dataSize;
106 const uint8_t ext;
107
108 // Constructor
109 RegOpImm(ExtMachInst _machInst,
110 const char * mnem, const char *_instMnem,
111 bool isMicro, bool isDelayed,
112 bool isFirst, bool isLast,
113 RegIndex _src1, uint8_t _imm8, RegIndex _dest,
168
169 // Constructor
170 RegOpImm(ExtMachInst _machInst,
171 const char * mnem, const char *_instMnem,
172 bool isMicro, bool isDelayed,
173 bool isFirst, bool isLast,
174 RegIndex _src1, uint8_t _imm8, RegIndex _dest,
114 bool _setStatus, uint8_t _dataSize, uint8_t _ext,
175 uint8_t _dataSize, uint16_t _ext,
115 OpClass __opClass) :
176 OpClass __opClass) :
116 X86MicroopBase(_machInst, mnem, _instMnem,
177 RegOpBase(_machInst, mnem, _instMnem,
117 isMicro, isDelayed, isFirst, isLast,
178 isMicro, isDelayed, isFirst, isLast,
179 _src1, _dest, _dataSize, _ext,
118 __opClass),
180 __opClass),
119 src1(_src1), imm8(_imm8), dest(_dest),
120 setStatus(_setStatus), dataSize(_dataSize), ext(_ext)
181 imm8(_imm8)
121 {
122 }
123
124 std::string generateDisassembly(Addr pc,
125 const SymbolTable *symtab) const;
126 };
127}
128
129#endif //__ARCH_X86_INSTS_MICROREGOP_HH__
182 {
183 }
184
185 std::string generateDisassembly(Addr pc,
186 const SymbolTable *symtab) const;
187 };
188}
189
190#endif //__ARCH_X86_INSTS_MICROREGOP_HH__