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 --- |