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

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

Issue 1044793002: [turbofan] Add backend support for float32 operations. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Add MachineOperator unit tests. Created 5 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
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 #include "src/v8.h" 9 #include "src/v8.h"
10 10
(...skipping 826 matching lines...) Expand 10 before | Expand all | Expand 10 after
837 current += PrintRightXMMOperand(current); 837 current += PrintRightXMMOperand(current);
838 break; 838 break;
839 case 0x5f: 839 case 0x5f:
840 AppendToBuffer("vmaxsd %s,%s,", NameOfXMMRegister(regop), 840 AppendToBuffer("vmaxsd %s,%s,", NameOfXMMRegister(regop),
841 NameOfXMMRegister(vvvv)); 841 NameOfXMMRegister(vvvv));
842 current += PrintRightXMMOperand(current); 842 current += PrintRightXMMOperand(current);
843 break; 843 break;
844 default: 844 default:
845 UnimplementedInstruction(); 845 UnimplementedInstruction();
846 } 846 }
847 } else if (vex_f3() && vex_0f()) {
848 int mod, regop, rm, vvvv = vex_vreg();
849 get_modrm(*current, &mod, &regop, &rm);
850 switch (opcode) {
851 case 0x58:
852 AppendToBuffer("vaddss %s,%s,", NameOfXMMRegister(regop),
853 NameOfXMMRegister(vvvv));
854 current += PrintRightXMMOperand(current);
855 break;
856 case 0x59:
857 AppendToBuffer("vmulss %s,%s,", NameOfXMMRegister(regop),
858 NameOfXMMRegister(vvvv));
859 current += PrintRightXMMOperand(current);
860 break;
861 case 0x5c:
862 AppendToBuffer("vsubss %s,%s,", NameOfXMMRegister(regop),
863 NameOfXMMRegister(vvvv));
864 current += PrintRightXMMOperand(current);
865 break;
866 case 0x5d:
867 AppendToBuffer("vminss %s,%s,", NameOfXMMRegister(regop),
868 NameOfXMMRegister(vvvv));
869 current += PrintRightXMMOperand(current);
870 break;
871 case 0x5e:
872 AppendToBuffer("vdivss %s,%s,", NameOfXMMRegister(regop),
873 NameOfXMMRegister(vvvv));
874 current += PrintRightXMMOperand(current);
875 break;
876 case 0x5f:
877 AppendToBuffer("vmaxss %s,%s,", NameOfXMMRegister(regop),
878 NameOfXMMRegister(vvvv));
879 current += PrintRightXMMOperand(current);
880 break;
881 default:
882 UnimplementedInstruction();
883 }
847 } else { 884 } else {
848 UnimplementedInstruction(); 885 UnimplementedInstruction();
849 } 886 }
850 887
851 return static_cast<int>(current - data); 888 return static_cast<int>(current - data);
852 } 889 }
853 890
854 891
855 // Returns number of bytes used, including *data. 892 // Returns number of bytes used, including *data.
856 int DisassemblerIA32::FPUInstruction(byte* data) { 893 int DisassemblerIA32::FPUInstruction(byte* data) {
(...skipping 897 matching lines...) Expand 10 before | Expand all | Expand 10 after
1754 data += PrintRightXMMOperand(data); 1791 data += PrintRightXMMOperand(data);
1755 } else if (b2 == 0x5A) { 1792 } else if (b2 == 0x5A) {
1756 data += 3; 1793 data += 3;
1757 int mod, regop, rm; 1794 int mod, regop, rm;
1758 get_modrm(*data, &mod, &regop, &rm); 1795 get_modrm(*data, &mod, &regop, &rm);
1759 AppendToBuffer("cvtsd2ss %s,", NameOfXMMRegister(regop)); 1796 AppendToBuffer("cvtsd2ss %s,", NameOfXMMRegister(regop));
1760 data += PrintRightXMMOperand(data); 1797 data += PrintRightXMMOperand(data);
1761 } else { 1798 } else {
1762 const char* mnem = "?"; 1799 const char* mnem = "?";
1763 switch (b2) { 1800 switch (b2) {
1764 case 0x2A: mnem = "cvtsi2sd"; break; 1801 case 0x2A:
1765 case 0x2C: mnem = "cvttsd2si"; break; 1802 mnem = "cvtsi2sd";
1766 case 0x2D: mnem = "cvtsd2si"; break; 1803 break;
1767 case 0x51: mnem = "sqrtsd"; break; 1804 case 0x2C:
1768 case 0x58: mnem = "addsd"; break; 1805 mnem = "cvttsd2si";
1769 case 0x59: mnem = "mulsd"; break; 1806 break;
1770 case 0x5C: mnem = "subsd"; break; 1807 case 0x2D:
1808 mnem = "cvtsd2si";
1809 break;
1810 case 0x51:
1811 mnem = "sqrtsd";
1812 break;
1813 case 0x58:
1814 mnem = "addsd";
1815 break;
1816 case 0x59:
1817 mnem = "mulsd";
1818 break;
1819 case 0x5C:
1820 mnem = "subsd";
1821 break;
1771 case 0x5D: 1822 case 0x5D:
1772 mnem = "minsd"; 1823 mnem = "minsd";
1773 break; 1824 break;
1774 case 0x5E: mnem = "divsd"; break; 1825 case 0x5E:
1826 mnem = "divsd";
1827 break;
1775 case 0x5F: 1828 case 0x5F:
1776 mnem = "maxsd"; 1829 mnem = "maxsd";
1777 break; 1830 break;
1778 } 1831 }
1779 data += 3; 1832 data += 3;
1780 int mod, regop, rm; 1833 int mod, regop, rm;
1781 get_modrm(*data, &mod, &regop, &rm); 1834 get_modrm(*data, &mod, &regop, &rm);
1782 if (b2 == 0x2A) { 1835 if (b2 == 0x2A) {
1783 AppendToBuffer("%s %s,", mnem, NameOfXMMRegister(regop)); 1836 AppendToBuffer("%s %s,", mnem, NameOfXMMRegister(regop));
1784 data += PrintRightOperand(data); 1837 data += PrintRightOperand(data);
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1821 int mod, regop, rm; 1874 int mod, regop, rm;
1822 get_modrm(*data, &mod, &regop, &rm); 1875 get_modrm(*data, &mod, &regop, &rm);
1823 data += PrintRightXMMOperand(data); 1876 data += PrintRightXMMOperand(data);
1824 AppendToBuffer(",%s", NameOfXMMRegister(regop)); 1877 AppendToBuffer(",%s", NameOfXMMRegister(regop));
1825 } else if (b2 == 0x10) { 1878 } else if (b2 == 0x10) {
1826 data += 3; 1879 data += 3;
1827 int mod, regop, rm; 1880 int mod, regop, rm;
1828 get_modrm(*data, &mod, &regop, &rm); 1881 get_modrm(*data, &mod, &regop, &rm);
1829 AppendToBuffer("movss %s,", NameOfXMMRegister(regop)); 1882 AppendToBuffer("movss %s,", NameOfXMMRegister(regop));
1830 data += PrintRightXMMOperand(data); 1883 data += PrintRightXMMOperand(data);
1831 } else if (b2 == 0x2C) {
1832 data += 3;
1833 int mod, regop, rm;
1834 get_modrm(*data, &mod, &regop, &rm);
1835 AppendToBuffer("cvttss2si %s,", NameOfCPURegister(regop));
1836 data += PrintRightXMMOperand(data);
1837 } else if (b2 == 0x58) {
1838 data += 3;
1839 int mod, regop, rm;
1840 get_modrm(*data, &mod, &regop, &rm);
1841 AppendToBuffer("addss %s,", NameOfXMMRegister(regop));
1842 data += PrintRightXMMOperand(data);
1843 } else if (b2 == 0x59) {
1844 data += 3;
1845 int mod, regop, rm;
1846 get_modrm(*data, &mod, &regop, &rm);
1847 AppendToBuffer("mulss %s,", NameOfXMMRegister(regop));
1848 data += PrintRightXMMOperand(data);
1849 } else if (b2 == 0x5A) { 1884 } else if (b2 == 0x5A) {
1850 data += 3; 1885 data += 3;
1851 int mod, regop, rm; 1886 int mod, regop, rm;
1852 get_modrm(*data, &mod, &regop, &rm); 1887 get_modrm(*data, &mod, &regop, &rm);
1853 AppendToBuffer("cvtss2sd %s,", NameOfXMMRegister(regop)); 1888 AppendToBuffer("cvtss2sd %s,", NameOfXMMRegister(regop));
1854 data += PrintRightXMMOperand(data); 1889 data += PrintRightXMMOperand(data);
1855 } else if (b2 == 0x5c) {
1856 data += 3;
1857 int mod, regop, rm;
1858 get_modrm(*data, &mod, &regop, &rm);
1859 AppendToBuffer("subss %s,", NameOfXMMRegister(regop));
1860 data += PrintRightXMMOperand(data);
1861 } else if (b2 == 0x5e) {
1862 data += 3;
1863 int mod, regop, rm;
1864 get_modrm(*data, &mod, &regop, &rm);
1865 AppendToBuffer("divss %s,", NameOfXMMRegister(regop));
1866 data += PrintRightXMMOperand(data);
1867 } else if (b2 == 0x6F) { 1890 } else if (b2 == 0x6F) {
1868 data += 3; 1891 data += 3;
1869 int mod, regop, rm; 1892 int mod, regop, rm;
1870 get_modrm(*data, &mod, &regop, &rm); 1893 get_modrm(*data, &mod, &regop, &rm);
1871 AppendToBuffer("movdqu %s,", NameOfXMMRegister(regop)); 1894 AppendToBuffer("movdqu %s,", NameOfXMMRegister(regop));
1872 data += PrintRightXMMOperand(data); 1895 data += PrintRightXMMOperand(data);
1873 } else if (b2 == 0x7F) { 1896 } else if (b2 == 0x7F) {
1874 AppendToBuffer("movdqu "); 1897 AppendToBuffer("movdqu ");
1875 data += 3; 1898 data += 3;
1876 int mod, regop, rm; 1899 int mod, regop, rm;
1877 get_modrm(*data, &mod, &regop, &rm); 1900 get_modrm(*data, &mod, &regop, &rm);
1878 data += PrintRightXMMOperand(data); 1901 data += PrintRightXMMOperand(data);
1879 AppendToBuffer(",%s", NameOfXMMRegister(regop)); 1902 AppendToBuffer(",%s", NameOfXMMRegister(regop));
1880 } else { 1903 } else {
1881 UnimplementedInstruction(); 1904 const char* mnem = "?";
1905 switch (b2) {
1906 case 0x2A:
1907 mnem = "cvtsi2ss";
1908 break;
1909 case 0x2C:
1910 mnem = "cvttss2si";
1911 break;
1912 case 0x2D:
1913 mnem = "cvtss2si";
1914 break;
1915 case 0x51:
1916 mnem = "sqrtss";
1917 break;
1918 case 0x58:
1919 mnem = "addss";
1920 break;
1921 case 0x59:
1922 mnem = "mulss";
1923 break;
1924 case 0x5C:
1925 mnem = "subss";
1926 break;
1927 case 0x5D:
1928 mnem = "minss";
1929 break;
1930 case 0x5E:
1931 mnem = "divss";
1932 break;
1933 case 0x5F:
1934 mnem = "maxss";
1935 break;
1936 }
1937 data += 3;
1938 int mod, regop, rm;
1939 get_modrm(*data, &mod, &regop, &rm);
1940 if (b2 == 0x2A) {
1941 AppendToBuffer("%s %s,", mnem, NameOfXMMRegister(regop));
1942 data += PrintRightOperand(data);
1943 } else if (b2 == 0x2C || b2 == 0x2D) {
1944 AppendToBuffer("%s %s,", mnem, NameOfCPURegister(regop));
1945 data += PrintRightXMMOperand(data);
1946 } else if (b2 == 0xC2) {
1947 // Intel manual 2A, Table 3-18.
1948 const char* const pseudo_op[] = {
1949 "cmpeqss", "cmpltss", "cmpless", "cmpunordss",
1950 "cmpneqss", "cmpnltss", "cmpnless", "cmpordss"};
1951 AppendToBuffer("%s %s,%s", pseudo_op[data[1]],
1952 NameOfXMMRegister(regop), NameOfXMMRegister(rm));
1953 data += 2;
1954 } else {
1955 AppendToBuffer("%s %s,", mnem, NameOfXMMRegister(regop));
1956 data += PrintRightXMMOperand(data);
1957 }
1882 } 1958 }
1883 } else if (*(data+1) == 0xA5) { 1959 } else if (*(data+1) == 0xA5) {
1884 data += 2; 1960 data += 2;
1885 AppendToBuffer("rep_movs"); 1961 AppendToBuffer("rep_movs");
1886 } else if (*(data+1) == 0xAB) { 1962 } else if (*(data+1) == 0xAB) {
1887 data += 2; 1963 data += 2;
1888 AppendToBuffer("rep_stos"); 1964 AppendToBuffer("rep_stos");
1889 } else { 1965 } else {
1890 UnimplementedInstruction(); 1966 UnimplementedInstruction();
1891 } 1967 }
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
2020 fprintf(f, " "); 2096 fprintf(f, " ");
2021 } 2097 }
2022 fprintf(f, " %s\n", buffer.start()); 2098 fprintf(f, " %s\n", buffer.start());
2023 } 2099 }
2024 } 2100 }
2025 2101
2026 2102
2027 } // namespace disasm 2103 } // namespace disasm
2028 2104
2029 #endif // V8_TARGET_ARCH_IA32 2105 #endif // V8_TARGET_ARCH_IA32
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698