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

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

Issue 2767983002: [wasm] Implement wasm x64 I16x8 Ops (Closed)
Patch Set: Bill's review Created 3 years, 8 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
« no previous file with comments | « src/x64/assembler-x64.cc ('k') | test/cctest/test-disasm-x64.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 1664 matching lines...) Expand 10 before | Expand all | Expand 10 after
1675 } else if (third_byte == 0x14) { 1675 } else if (third_byte == 0x14) {
1676 get_modrm(*current, &mod, &regop, &rm); 1676 get_modrm(*current, &mod, &regop, &rm);
1677 AppendToBuffer("pextrb "); // reg/m32, xmm, imm8 1677 AppendToBuffer("pextrb "); // reg/m32, xmm, imm8
1678 current += PrintRightOperand(current); 1678 current += PrintRightOperand(current);
1679 AppendToBuffer(",%s,%d", NameOfXMMRegister(regop), (*current) & 3); 1679 AppendToBuffer(",%s,%d", NameOfXMMRegister(regop), (*current) & 3);
1680 current += 1; 1680 current += 1;
1681 } else if (third_byte == 0x15) { 1681 } else if (third_byte == 0x15) {
1682 get_modrm(*current, &mod, &regop, &rm); 1682 get_modrm(*current, &mod, &regop, &rm);
1683 AppendToBuffer("pextrw "); // reg/m32, xmm, imm8 1683 AppendToBuffer("pextrw "); // reg/m32, xmm, imm8
1684 current += PrintRightOperand(current); 1684 current += PrintRightOperand(current);
1685 AppendToBuffer(",%s,%d", NameOfXMMRegister(regop), (*current) & 3); 1685 AppendToBuffer(",%s,%d", NameOfXMMRegister(regop), (*current) & 7);
1686 current += 1; 1686 current += 1;
1687 } else if (third_byte == 0x16) { 1687 } else if (third_byte == 0x16) {
1688 get_modrm(*current, &mod, &regop, &rm); 1688 get_modrm(*current, &mod, &regop, &rm);
1689 AppendToBuffer("pextrd "); // reg/m32, xmm, imm8 1689 AppendToBuffer("pextrd "); // reg/m32, xmm, imm8
1690 current += PrintRightOperand(current); 1690 current += PrintRightOperand(current);
1691 AppendToBuffer(",%s,%d", NameOfXMMRegister(regop), (*current) & 3); 1691 AppendToBuffer(",%s,%d", NameOfXMMRegister(regop), (*current) & 3);
1692 current += 1; 1692 current += 1;
1693 } else if (third_byte == 0x20) { 1693 } else if (third_byte == 0x20) {
1694 get_modrm(*current, &mod, &regop, &rm); 1694 get_modrm(*current, &mod, &regop, &rm);
1695 AppendToBuffer("pinsrd "); // xmm, reg/m32, imm8 1695 AppendToBuffer("pinsrd "); // xmm, reg/m32, imm8
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
1781 AppendToBuffer("ps%sd %s,%d", sf_str[regop / 2], NameOfXMMRegister(rm), 1781 AppendToBuffer("ps%sd %s,%d", sf_str[regop / 2], NameOfXMMRegister(rm),
1782 *current & 0x7f); 1782 *current & 0x7f);
1783 current += 1; 1783 current += 1;
1784 } else if (opcode == 0x73) { 1784 } else if (opcode == 0x73) {
1785 current += 1; 1785 current += 1;
1786 AppendToBuffer("ps%sq %s,%d", sf_str[regop / 2], NameOfXMMRegister(rm), 1786 AppendToBuffer("ps%sq %s,%d", sf_str[regop / 2], NameOfXMMRegister(rm),
1787 *current & 0x7f); 1787 *current & 0x7f);
1788 current += 1; 1788 current += 1;
1789 } else if (opcode == 0xB1) { 1789 } else if (opcode == 0xB1) {
1790 current += PrintOperands("cmpxchg", OPER_REG_OP_ORDER, current); 1790 current += PrintOperands("cmpxchg", OPER_REG_OP_ORDER, current);
1791 } else if (opcode == 0xC4) {
1792 AppendToBuffer("pinsrw %s,", NameOfXMMRegister(regop));
1793 current += PrintRightOperand(current);
1794 AppendToBuffer(",0x%x", (*current) & 7);
1795 current += 1;
1791 } else { 1796 } else {
1792 const char* mnemonic = "?"; 1797 const char* mnemonic = "?";
1793 if (opcode == 0x54) { 1798 if (opcode == 0x54) {
1794 mnemonic = "andpd"; 1799 mnemonic = "andpd";
1795 } else if (opcode == 0x56) { 1800 } else if (opcode == 0x56) {
1796 mnemonic = "orpd"; 1801 mnemonic = "orpd";
1797 } else if (opcode == 0x57) { 1802 } else if (opcode == 0x57) {
1798 mnemonic = "xorpd"; 1803 mnemonic = "xorpd";
1799 } else if (opcode == 0x5B) { 1804 } else if (opcode == 0x5B) {
1800 mnemonic = "cvtps2dq"; 1805 mnemonic = "cvtps2dq";
(...skipping 16 matching lines...) Expand all
1817 } else if (opcode == 0x62) { 1822 } else if (opcode == 0x62) {
1818 mnemonic = "punpckldq"; 1823 mnemonic = "punpckldq";
1819 } else if (opcode == 0x63) { 1824 } else if (opcode == 0x63) {
1820 mnemonic = "packsswb"; 1825 mnemonic = "packsswb";
1821 } else if (opcode == 0x67) { 1826 } else if (opcode == 0x67) {
1822 mnemonic = "packuswb"; 1827 mnemonic = "packuswb";
1823 } else if (opcode == 0x6A) { 1828 } else if (opcode == 0x6A) {
1824 mnemonic = "punpckhdq"; 1829 mnemonic = "punpckhdq";
1825 } else if (opcode == 0x6B) { 1830 } else if (opcode == 0x6B) {
1826 mnemonic = "packssdw"; 1831 mnemonic = "packssdw";
1827 } else if (opcode == 0xC4) {
1828 mnemonic = "pinsrw";
1829 } else if (opcode == 0xC5) {
1830 mnemonic = "pextrw";
1831 } else if (opcode == 0xD1) { 1832 } else if (opcode == 0xD1) {
1832 mnemonic = "psrlw"; 1833 mnemonic = "psrlw";
1833 } else if (opcode == 0xD2) { 1834 } else if (opcode == 0xD2) {
1834 mnemonic = "psrld"; 1835 mnemonic = "psrld";
1835 } else if (opcode == 0xD5) { 1836 } else if (opcode == 0xD5) {
1836 mnemonic = "pmullw"; 1837 mnemonic = "pmullw";
1837 } else if (opcode == 0xD7) { 1838 } else if (opcode == 0xD7) {
1838 mnemonic = "pmovmskb"; 1839 mnemonic = "pmovmskb";
1839 } else if (opcode == 0xD8) { 1840 } else if (opcode == 0xD8) {
1840 mnemonic = "psubusb"; 1841 mnemonic = "psubusb";
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
1934 get_modrm(*current, &mod, &regop, &rm); 1935 get_modrm(*current, &mod, &regop, &rm);
1935 AppendToBuffer("cvtsd2si%c %s,", 1936 AppendToBuffer("cvtsd2si%c %s,",
1936 operand_size_code(), NameOfCPURegister(regop)); 1937 operand_size_code(), NameOfCPURegister(regop));
1937 current += PrintRightXMMOperand(current); 1938 current += PrintRightXMMOperand(current);
1938 } else if ((opcode & 0xF8) == 0x58 || opcode == 0x51) { 1939 } else if ((opcode & 0xF8) == 0x58 || opcode == 0x51) {
1939 // XMM arithmetic. Mnemonic was retrieved at the start of this function. 1940 // XMM arithmetic. Mnemonic was retrieved at the start of this function.
1940 int mod, regop, rm; 1941 int mod, regop, rm;
1941 get_modrm(*current, &mod, &regop, &rm); 1942 get_modrm(*current, &mod, &regop, &rm);
1942 AppendToBuffer("%s %s,", mnemonic, NameOfXMMRegister(regop)); 1943 AppendToBuffer("%s %s,", mnemonic, NameOfXMMRegister(regop));
1943 current += PrintRightXMMOperand(current); 1944 current += PrintRightXMMOperand(current);
1945 } else if (opcode == 0x70) {
1946 int mod, regop, rm;
1947 get_modrm(*current, &mod, &regop, &rm);
1948 AppendToBuffer("pshuflw %s, ", NameOfXMMRegister(regop));
1949 current += PrintRightXMMOperand(current);
1950 AppendToBuffer(", %d", (*current) & 7);
1951 current += 1;
1944 } else if (opcode == 0xC2) { 1952 } else if (opcode == 0xC2) {
1945 // Intel manual 2A, Table 3-18. 1953 // Intel manual 2A, Table 3-18.
1946 int mod, regop, rm; 1954 int mod, regop, rm;
1947 get_modrm(*current, &mod, &regop, &rm); 1955 get_modrm(*current, &mod, &regop, &rm);
1948 const char* const pseudo_op[] = { 1956 const char* const pseudo_op[] = {
1949 "cmpeqsd", 1957 "cmpeqsd",
1950 "cmpltsd", 1958 "cmpltsd",
1951 "cmplesd", 1959 "cmplesd",
1952 "cmpunordsd", 1960 "cmpunordsd",
1953 "cmpneqsd", 1961 "cmpneqsd",
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
1989 AppendToBuffer("%s %s,", mnemonic, NameOfXMMRegister(regop)); 1997 AppendToBuffer("%s %s,", mnemonic, NameOfXMMRegister(regop));
1990 current += PrintRightOperand(current); 1998 current += PrintRightOperand(current);
1991 } else if (opcode == 0x2C) { 1999 } else if (opcode == 0x2C) {
1992 // CVTTSS2SI: 2000 // CVTTSS2SI:
1993 // Convert with truncation scalar single-precision FP to dword integer. 2001 // Convert with truncation scalar single-precision FP to dword integer.
1994 int mod, regop, rm; 2002 int mod, regop, rm;
1995 get_modrm(*current, &mod, &regop, &rm); 2003 get_modrm(*current, &mod, &regop, &rm);
1996 AppendToBuffer("cvttss2si%c %s,", 2004 AppendToBuffer("cvttss2si%c %s,",
1997 operand_size_code(), NameOfCPURegister(regop)); 2005 operand_size_code(), NameOfCPURegister(regop));
1998 current += PrintRightXMMOperand(current); 2006 current += PrintRightXMMOperand(current);
2007 } else if (opcode == 0x70) {
2008 int mod, regop, rm;
2009 get_modrm(*current, &mod, &regop, &rm);
2010 AppendToBuffer("pshufhw %s, ", NameOfXMMRegister(regop));
2011 current += PrintRightXMMOperand(current);
2012 AppendToBuffer(", %d", (*current) & 7);
2013 current += 1;
1999 } else if (opcode == 0x7E) { 2014 } else if (opcode == 0x7E) {
2000 int mod, regop, rm; 2015 int mod, regop, rm;
2001 get_modrm(*current, &mod, &regop, &rm); 2016 get_modrm(*current, &mod, &regop, &rm);
2002 AppendToBuffer("movq %s,", NameOfXMMRegister(regop)); 2017 AppendToBuffer("movq %s,", NameOfXMMRegister(regop));
2003 current += PrintRightXMMOperand(current); 2018 current += PrintRightXMMOperand(current);
2004 } else if ((opcode & 0xF8) == 0x58 || opcode == 0x51) { 2019 } else if ((opcode & 0xF8) == 0x58 || opcode == 0x51) {
2005 // XMM arithmetic. Mnemonic was retrieved at the start of this function. 2020 // XMM arithmetic. Mnemonic was retrieved at the start of this function.
2006 int mod, regop, rm; 2021 int mod, regop, rm;
2007 get_modrm(*current, &mod, &regop, &rm); 2022 get_modrm(*current, &mod, &regop, &rm);
2008 AppendToBuffer("%s %s,", mnemonic, NameOfXMMRegister(regop)); 2023 AppendToBuffer("%s %s,", mnemonic, NameOfXMMRegister(regop));
(...skipping 794 matching lines...) Expand 10 before | Expand all | Expand 10 after
2803 for (int i = 6 - static_cast<int>(pc - prev_pc); i >= 0; i--) { 2818 for (int i = 6 - static_cast<int>(pc - prev_pc); i >= 0; i--) {
2804 fprintf(f, " "); 2819 fprintf(f, " ");
2805 } 2820 }
2806 fprintf(f, " %s\n", buffer.start()); 2821 fprintf(f, " %s\n", buffer.start());
2807 } 2822 }
2808 } 2823 }
2809 2824
2810 } // namespace disasm 2825 } // namespace disasm
2811 2826
2812 #endif // V8_TARGET_ARCH_X64 2827 #endif // V8_TARGET_ARCH_X64
OLDNEW
« no previous file with comments | « src/x64/assembler-x64.cc ('k') | test/cctest/test-disasm-x64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698