Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(174)

Side by Side Diff: src/x64/disasm-x64.cc

Issue 2170323002: [x64]: add cmpps/cmppd instructions (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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_X64 9 #if V8_TARGET_ARCH_X64
10 10
(...skipping 1241 matching lines...) Expand 10 before | Expand all | Expand 10 after
1252 case 0x54: 1252 case 0x54:
1253 AppendToBuffer("vandps %s,%s,", NameOfXMMRegister(regop), 1253 AppendToBuffer("vandps %s,%s,", NameOfXMMRegister(regop),
1254 NameOfXMMRegister(vvvv)); 1254 NameOfXMMRegister(vvvv));
1255 current += PrintRightXMMOperand(current); 1255 current += PrintRightXMMOperand(current);
1256 break; 1256 break;
1257 case 0x57: 1257 case 0x57:
1258 AppendToBuffer("vxorps %s,%s,", NameOfXMMRegister(regop), 1258 AppendToBuffer("vxorps %s,%s,", NameOfXMMRegister(regop),
1259 NameOfXMMRegister(vvvv)); 1259 NameOfXMMRegister(vvvv));
1260 current += PrintRightXMMOperand(current); 1260 current += PrintRightXMMOperand(current);
1261 break; 1261 break;
1262 case 0xC2: {
1263 AppendToBuffer("vcmpps %s,%s,", NameOfXMMRegister(regop),
1264 NameOfXMMRegister(vvvv));
1265 current += PrintRightXMMOperand(current);
1266 const char* const pseudo_op[] = {"eq", "lt", "le", "unord",
1267 "neq", "nlt", "nle", "ord"};
1268 AppendToBuffer(", (%s)", pseudo_op[*current]);
1269 current += 1;
1270 break;
1271 }
1262 default: 1272 default:
1263 UnimplementedInstruction(); 1273 UnimplementedInstruction();
1264 } 1274 }
1265 } else if (vex_66() && vex_0f()) { 1275 } else if (vex_66() && vex_0f()) {
1266 int mod, regop, rm, vvvv = vex_vreg(); 1276 int mod, regop, rm, vvvv = vex_vreg();
1267 get_modrm(*current, &mod, &regop, &rm); 1277 get_modrm(*current, &mod, &regop, &rm);
1268 switch (opcode) { 1278 switch (opcode) {
1269 case 0x10: 1279 case 0x10:
1270 AppendToBuffer("vmovupd %s,", NameOfXMMRegister(regop)); 1280 AppendToBuffer("vmovupd %s,", NameOfXMMRegister(regop));
1271 current += PrintRightXMMOperand(current); 1281 current += PrintRightXMMOperand(current);
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
1321 case 0x76: 1331 case 0x76:
1322 AppendToBuffer("vpcmpeqd %s,%s,", NameOfXMMRegister(regop), 1332 AppendToBuffer("vpcmpeqd %s,%s,", NameOfXMMRegister(regop),
1323 NameOfXMMRegister(vvvv)); 1333 NameOfXMMRegister(vvvv));
1324 current += PrintRightXMMOperand(current); 1334 current += PrintRightXMMOperand(current);
1325 break; 1335 break;
1326 case 0x7e: 1336 case 0x7e:
1327 AppendToBuffer("vmov%c ", vex_w() ? 'q' : 'd'); 1337 AppendToBuffer("vmov%c ", vex_w() ? 'q' : 'd');
1328 current += PrintRightOperand(current); 1338 current += PrintRightOperand(current);
1329 AppendToBuffer(",%s", NameOfXMMRegister(regop)); 1339 AppendToBuffer(",%s", NameOfXMMRegister(regop));
1330 break; 1340 break;
1341 case 0xC2: {
1342 AppendToBuffer("vcmppd %s,%s,", NameOfXMMRegister(regop),
1343 NameOfXMMRegister(vvvv));
1344 current += PrintRightXMMOperand(current);
1345 const char* const pseudo_op[] = {"eq", "lt", "le", "unord",
1346 "neq", "nlt", "nle", "ord"};
1347 AppendToBuffer(", (%s)", pseudo_op[*current]);
1348 current += 1;
1349 break;
1350 }
1331 default: 1351 default:
1332 UnimplementedInstruction(); 1352 UnimplementedInstruction();
1333 } 1353 }
1334 1354
1335 } else { 1355 } else {
1336 UnimplementedInstruction(); 1356 UnimplementedInstruction();
1337 } 1357 }
1338 1358
1339 return static_cast<int>(current - data); 1359 return static_cast<int>(current - data);
1340 } 1360 }
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after
1673 } else if (opcode == 0x62) { 1693 } else if (opcode == 0x62) {
1674 mnemonic = "punpckldq"; 1694 mnemonic = "punpckldq";
1675 } else if (opcode == 0x6A) { 1695 } else if (opcode == 0x6A) {
1676 mnemonic = "punpckhdq"; 1696 mnemonic = "punpckhdq";
1677 } else if (opcode == 0xF4) { 1697 } else if (opcode == 0xF4) {
1678 mnemonic = "pmuludq"; 1698 mnemonic = "pmuludq";
1679 } else if (opcode == 0xFA) { 1699 } else if (opcode == 0xFA) {
1680 mnemonic = "psubd"; 1700 mnemonic = "psubd";
1681 } else if (opcode == 0xFE) { 1701 } else if (opcode == 0xFE) {
1682 mnemonic = "paddd"; 1702 mnemonic = "paddd";
1703 } else if (opcode == 0xC2) {
1704 mnemonic = "cmppd";
1683 } else { 1705 } else {
1684 UnimplementedInstruction(); 1706 UnimplementedInstruction();
1685 } 1707 }
1686 AppendToBuffer("%s %s,", mnemonic, NameOfXMMRegister(regop)); 1708 AppendToBuffer("%s %s,", mnemonic, NameOfXMMRegister(regop));
1687 current += PrintRightXMMOperand(current); 1709 current += PrintRightXMMOperand(current);
1710 if (opcode == 0xC2) {
1711 const char* const pseudo_op[] = {"eq", "lt", "le", "unord",
1712 "neq", "nlt", "nle", "ord"};
1713 AppendToBuffer(", (%s)", pseudo_op[*current]);
1714 current += 1;
1715 }
1688 } 1716 }
1689 } 1717 }
1690 } else if (group_1_prefix_ == 0xF2) { 1718 } else if (group_1_prefix_ == 0xF2) {
1691 // Beginning of instructions with prefix 0xF2. 1719 // Beginning of instructions with prefix 0xF2.
1692 1720
1693 if (opcode == 0x11 || opcode == 0x10) { 1721 if (opcode == 0x11 || opcode == 0x10) {
1694 // MOVSD: Move scalar double-precision fp to/from/between XMM registers. 1722 // MOVSD: Move scalar double-precision fp to/from/between XMM registers.
1695 AppendToBuffer("movsd "); 1723 AppendToBuffer("movsd ");
1696 int mod, regop, rm; 1724 int mod, regop, rm;
1697 get_modrm(*current, &mod, &regop, &rm); 1725 get_modrm(*current, &mod, &regop, &rm);
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
1889 int mod, regop, rm; 1917 int mod, regop, rm;
1890 get_modrm(*current, &mod, &regop, &rm); 1918 get_modrm(*current, &mod, &regop, &rm);
1891 AppendToBuffer("%s %s,", pseudo_op[opcode - 0x51], 1919 AppendToBuffer("%s %s,", pseudo_op[opcode - 0x51],
1892 NameOfXMMRegister(regop)); 1920 NameOfXMMRegister(regop));
1893 current += PrintRightXMMOperand(current); 1921 current += PrintRightXMMOperand(current);
1894 1922
1895 } else if (opcode == 0xC2) { 1923 } else if (opcode == 0xC2) {
1896 // cmpps xmm, xmm/m128, imm8 1924 // cmpps xmm, xmm/m128, imm8
1897 int mod, regop, rm; 1925 int mod, regop, rm;
1898 get_modrm(*current, &mod, &regop, &rm); 1926 get_modrm(*current, &mod, &regop, &rm);
1899 const char* const pseudo_op[] = {"cmpeqps", "cmpltps", "cmpleps", 1927 const char* const pseudo_op[] = {"eq", "lt", "le", "unord",
1900 "cmpunordps", "cmpneqps", "cmpnltps", 1928 "neq", "nlt", "nle", "ord"};
1901 "cmpnleps", "cmpordps"}; 1929 AppendToBuffer("cmpps %s, ", NameOfXMMRegister(regop));
1902 AppendToBuffer("%s %s,%s", pseudo_op[current[1]], NameOfXMMRegister(regop), 1930 current += PrintRightXMMOperand(current);
1903 NameOfXMMRegister(rm)); 1931 AppendToBuffer(", %s", pseudo_op[*current]);
1904 current += 2; 1932 current += 1;
1905 } else if (opcode == 0xC6) { 1933 } else if (opcode == 0xC6) {
1906 // shufps xmm, xmm/m128, imm8 1934 // shufps xmm, xmm/m128, imm8
1907 int mod, regop, rm; 1935 int mod, regop, rm;
1908 get_modrm(*current, &mod, &regop, &rm); 1936 get_modrm(*current, &mod, &regop, &rm);
1909 AppendToBuffer("shufps %s, ", NameOfXMMRegister(regop)); 1937 AppendToBuffer("shufps %s, ", NameOfXMMRegister(regop));
1910 current += PrintRightXMMOperand(current); 1938 current += PrintRightXMMOperand(current);
1911 AppendToBuffer(", %d", (*current) & 3); 1939 AppendToBuffer(", %d", (*current) & 3);
1912 current += 1; 1940 current += 1;
1913 } else if (opcode == 0x50) { 1941 } else if (opcode == 0x50) {
1914 // movmskps reg, xmm 1942 // movmskps reg, xmm
(...skipping 665 matching lines...) Expand 10 before | Expand all | Expand 10 after
2580 for (int i = 6 - static_cast<int>(pc - prev_pc); i >= 0; i--) { 2608 for (int i = 6 - static_cast<int>(pc - prev_pc); i >= 0; i--) {
2581 fprintf(f, " "); 2609 fprintf(f, " ");
2582 } 2610 }
2583 fprintf(f, " %s\n", buffer.start()); 2611 fprintf(f, " %s\n", buffer.start());
2584 } 2612 }
2585 } 2613 }
2586 2614
2587 } // namespace disasm 2615 } // namespace disasm
2588 2616
2589 #endif // V8_TARGET_ARCH_X64 2617 #endif // V8_TARGET_ARCH_X64
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698