static_inst.cc (11793:ef606668d247) static_inst.cc (12104:edd63f9c6184)
1/*
2 * Copyright (c) 2007 The Hewlett-Packard Development Company
3 * Copyright (c) 2013 Advanced Micro Devices, Inc.
4 * All rights reserved.
5 *
6 * The license below extends only to copyright in the software and shall
7 * not be construed as granting a license to any other intellectual
8 * property including but not limited to intellectual property relating

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

115 void
116 X86StaticInst::printDestReg(std::ostream &os, int reg, int size) const
117 {
118 if (_numDestRegs > reg)
119 printReg(os, _destRegIdx[reg], size);
120 }
121
122 void
1/*
2 * Copyright (c) 2007 The Hewlett-Packard Development Company
3 * Copyright (c) 2013 Advanced Micro Devices, Inc.
4 * All rights reserved.
5 *
6 * The license below extends only to copyright in the software and shall
7 * not be construed as granting a license to any other intellectual
8 * property including but not limited to intellectual property relating

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

115 void
116 X86StaticInst::printDestReg(std::ostream &os, int reg, int size) const
117 {
118 if (_numDestRegs > reg)
119 printReg(os, _destRegIdx[reg], size);
120 }
121
122 void
123 X86StaticInst::printReg(std::ostream &os, int reg, int size) const
123 X86StaticInst::printReg(std::ostream &os, RegId reg, int size) const
124 {
125 assert(size == 1 || size == 2 || size == 4 || size == 8);
126 static const char * abcdFormats[9] =
127 {"", "%s", "%sx", "", "e%sx", "", "", "", "r%sx"};
128 static const char * piFormats[9] =
129 {"", "%s", "%s", "", "e%s", "", "", "", "r%s"};
130 static const char * longFormats[9] =
131 {"", "r%sb", "r%sw", "", "r%sd", "", "", "", "r%s"};
132 static const char * microFormats[9] =
133 {"", "t%db", "t%dw", "", "t%dd", "", "", "", "t%d"};
134
124 {
125 assert(size == 1 || size == 2 || size == 4 || size == 8);
126 static const char * abcdFormats[9] =
127 {"", "%s", "%sx", "", "e%sx", "", "", "", "r%sx"};
128 static const char * piFormats[9] =
129 {"", "%s", "%s", "", "e%s", "", "", "", "r%s"};
130 static const char * longFormats[9] =
131 {"", "r%sb", "r%sw", "", "r%sd", "", "", "", "r%s"};
132 static const char * microFormats[9] =
133 {"", "t%db", "t%dw", "", "t%dd", "", "", "", "t%d"};
134
135 RegIndex rel_reg;
135 RegIndex reg_idx = reg.regIdx;
136
136
137 switch (regIdxToClass(reg, &rel_reg)) {
137 switch (reg.regClass) {
138 case IntRegClass: {
139 const char * suffix = "";
138 case IntRegClass: {
139 const char * suffix = "";
140 bool fold = rel_reg & IntFoldBit;
141 rel_reg &= ~IntFoldBit;
140 bool fold = reg_idx & IntFoldBit;
141 reg_idx &= ~IntFoldBit;
142
143 if (fold)
144 suffix = "h";
142
143 if (fold)
144 suffix = "h";
145 else if (rel_reg < 8 && size == 1)
145 else if (reg_idx < 8 && size == 1)
146 suffix = "l";
147
146 suffix = "l";
147
148 switch (rel_reg) {
148 switch (reg_idx) {
149 case INTREG_RAX:
150 ccprintf(os, abcdFormats[size], "a");
151 break;
152 case INTREG_RBX:
153 ccprintf(os, abcdFormats[size], "b");
154 break;
155 case INTREG_RCX:
156 ccprintf(os, abcdFormats[size], "c");

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

190 break;
191 case INTREG_R14W:
192 ccprintf(os, longFormats[size], "14");
193 break;
194 case INTREG_R15W:
195 ccprintf(os, longFormats[size], "15");
196 break;
197 default:
149 case INTREG_RAX:
150 ccprintf(os, abcdFormats[size], "a");
151 break;
152 case INTREG_RBX:
153 ccprintf(os, abcdFormats[size], "b");
154 break;
155 case INTREG_RCX:
156 ccprintf(os, abcdFormats[size], "c");

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

190 break;
191 case INTREG_R14W:
192 ccprintf(os, longFormats[size], "14");
193 break;
194 case INTREG_R15W:
195 ccprintf(os, longFormats[size], "15");
196 break;
197 default:
198 ccprintf(os, microFormats[size], rel_reg - NUM_INTREGS);
198 ccprintf(os, microFormats[size], reg_idx - NUM_INTREGS);
199 }
200 ccprintf(os, suffix);
201 break;
202 }
203
204 case FloatRegClass: {
199 }
200 ccprintf(os, suffix);
201 break;
202 }
203
204 case FloatRegClass: {
205 if (rel_reg < NumMMXRegs) {
206 ccprintf(os, "%%mmx%d", rel_reg);
205 if (reg_idx < NumMMXRegs) {
206 ccprintf(os, "%%mmx%d", reg_idx);
207 return;
208 }
207 return;
208 }
209 rel_reg -= NumMMXRegs;
210 if (rel_reg < NumXMMRegs * 2) {
211 ccprintf(os, "%%xmm%d_%s", rel_reg / 2,
212 (rel_reg % 2) ? "high": "low");
209 reg_idx -= NumMMXRegs;
210 if (reg_idx < NumXMMRegs * 2) {
211 ccprintf(os, "%%xmm%d_%s", reg_idx / 2,
212 (reg_idx % 2) ? "high": "low");
213 return;
214 }
213 return;
214 }
215 rel_reg -= NumXMMRegs * 2;
216 if (rel_reg < NumMicroFpRegs) {
217 ccprintf(os, "%%ufp%d", rel_reg);
215 reg_idx -= NumXMMRegs * 2;
216 if (reg_idx < NumMicroFpRegs) {
217 ccprintf(os, "%%ufp%d", reg_idx);
218 return;
219 }
218 return;
219 }
220 rel_reg -= NumMicroFpRegs;
221 ccprintf(os, "%%st(%d)", rel_reg);
220 reg_idx -= NumMicroFpRegs;
221 ccprintf(os, "%%st(%d)", reg_idx);
222 break;
223 }
224
225 case CCRegClass:
222 break;
223 }
224
225 case CCRegClass:
226 ccprintf(os, "%%cc%d", rel_reg);
226 ccprintf(os, "%%cc%d", reg_idx);
227 break;
228
229 case MiscRegClass:
227 break;
228
229 case MiscRegClass:
230 switch (rel_reg) {
230 switch (reg_idx) {
231 default:
231 default:
232 ccprintf(os, "%%ctrl%d", rel_reg);
232 ccprintf(os, "%%ctrl%d", reg_idx);
233 }
234 break;
235 }
236 }
237
238 void X86StaticInst::printMem(std::ostream &os, uint8_t segment,
239 uint8_t scale, RegIndex index, RegIndex base,
240 uint64_t disp, uint8_t addressSize, bool rip) const

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

245 if (rip) {
246 os << "rip";
247 someAddr = true;
248 } else {
249 if (scale != 0 && index != ZeroReg)
250 {
251 if (scale != 1)
252 ccprintf(os, "%d*", scale);
233 }
234 break;
235 }
236 }
237
238 void X86StaticInst::printMem(std::ostream &os, uint8_t segment,
239 uint8_t scale, RegIndex index, RegIndex base,
240 uint64_t disp, uint8_t addressSize, bool rip) const

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

245 if (rip) {
246 os << "rip";
247 someAddr = true;
248 } else {
249 if (scale != 0 && index != ZeroReg)
250 {
251 if (scale != 1)
252 ccprintf(os, "%d*", scale);
253 printReg(os, index, addressSize);
253 printReg(os, InstRegIndex(index), addressSize);
254 someAddr = true;
255 }
256 if (base != ZeroReg)
257 {
258 if (someAddr)
259 os << " + ";
254 someAddr = true;
255 }
256 if (base != ZeroReg)
257 {
258 if (someAddr)
259 os << " + ";
260 printReg(os, base, addressSize);
260 printReg(os, InstRegIndex(base), addressSize);
261 someAddr = true;
262 }
263 }
264 if (disp != 0)
265 {
266 if (someAddr)
267 os << " + ";
268 ccprintf(os, "%#x", disp);

--- 17 unchanged lines hidden ---
261 someAddr = true;
262 }
263 }
264 if (disp != 0)
265 {
266 if (someAddr)
267 os << " + ";
268 ccprintf(os, "%#x", disp);

--- 17 unchanged lines hidden ---