OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <assert.h> | 5 #include <assert.h> |
6 #include <stdarg.h> | 6 #include <stdarg.h> |
7 #include <stdio.h> | 7 #include <stdio.h> |
8 | 8 |
9 #if V8_TARGET_ARCH_IA32 | 9 #if V8_TARGET_ARCH_IA32 |
10 | 10 |
(...skipping 1466 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1477 } else if ((f0byte & 0xF0) == 0x80) { | 1477 } else if ((f0byte & 0xF0) == 0x80) { |
1478 data += JumpConditional(data, branch_hint); | 1478 data += JumpConditional(data, branch_hint); |
1479 } else if (f0byte == 0xBE || f0byte == 0xBF || f0byte == 0xB6 || | 1479 } else if (f0byte == 0xBE || f0byte == 0xBF || f0byte == 0xB6 || |
1480 f0byte == 0xB7 || f0byte == 0xAF) { | 1480 f0byte == 0xB7 || f0byte == 0xAF) { |
1481 data += 2; | 1481 data += 2; |
1482 data += PrintOperands(f0mnem, REG_OPER_OP_ORDER, data); | 1482 data += PrintOperands(f0mnem, REG_OPER_OP_ORDER, data); |
1483 } else if ((f0byte & 0xF0) == 0x90) { | 1483 } else if ((f0byte & 0xF0) == 0x90) { |
1484 data += SetCC(data); | 1484 data += SetCC(data); |
1485 } else if ((f0byte & 0xF0) == 0x40) { | 1485 } else if ((f0byte & 0xF0) == 0x40) { |
1486 data += CMov(data); | 1486 data += CMov(data); |
1487 } else if (f0byte == 0xA4) { | 1487 } else if (f0byte == 0xA4 || f0byte == 0xAC) { |
| 1488 // shld, shrd |
1488 data += 2; | 1489 data += 2; |
1489 AppendToBuffer("%s ", f0mnem); | 1490 AppendToBuffer("%s ", f0mnem); |
1490 int mod, regop, rm; | 1491 int mod, regop, rm; |
1491 get_modrm(*data, &mod, ®op, &rm); | 1492 get_modrm(*data, &mod, ®op, &rm); |
1492 int8_t imm8 = static_cast<int8_t>(data[1]); | 1493 int8_t imm8 = static_cast<int8_t>(data[1]); |
1493 data += 2; | 1494 data += 2; |
1494 AppendToBuffer("%s,%s,%d", NameOfCPURegister(rm), | 1495 AppendToBuffer("%s,%s,%d", NameOfCPURegister(rm), |
1495 NameOfCPURegister(regop), static_cast<int>(imm8)); | 1496 NameOfCPURegister(regop), static_cast<int>(imm8)); |
1496 } else if (f0byte == 0xAB || f0byte == 0xA5 || f0byte == 0xAD) { | 1497 } else if (f0byte == 0xAB || f0byte == 0xA5 || f0byte == 0xAD) { |
1497 // shrd, shld_cl, bts | 1498 // shrd_cl, shld_cl, bts |
1498 data += 2; | 1499 data += 2; |
1499 AppendToBuffer("%s ", f0mnem); | 1500 AppendToBuffer("%s ", f0mnem); |
1500 int mod, regop, rm; | 1501 int mod, regop, rm; |
1501 get_modrm(*data, &mod, ®op, &rm); | 1502 get_modrm(*data, &mod, ®op, &rm); |
1502 data += PrintRightOperand(data); | 1503 data += PrintRightOperand(data); |
1503 if (f0byte == 0xAB) { | 1504 if (f0byte == 0xAB) { |
1504 AppendToBuffer(",%s", NameOfCPURegister(regop)); | 1505 AppendToBuffer(",%s", NameOfCPURegister(regop)); |
1505 } else { | 1506 } else { |
1506 AppendToBuffer(",%s,cl", NameOfCPURegister(regop)); | 1507 AppendToBuffer(",%s,cl", NameOfCPURegister(regop)); |
1507 } | 1508 } |
(...skipping 774 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2282 fprintf(f, " "); | 2283 fprintf(f, " "); |
2283 } | 2284 } |
2284 fprintf(f, " %s\n", buffer.start()); | 2285 fprintf(f, " %s\n", buffer.start()); |
2285 } | 2286 } |
2286 } | 2287 } |
2287 | 2288 |
2288 | 2289 |
2289 } // namespace disasm | 2290 } // namespace disasm |
2290 | 2291 |
2291 #endif // V8_TARGET_ARCH_IA32 | 2292 #endif // V8_TARGET_ARCH_IA32 |
OLD | NEW |