| OLD | NEW |
| 1 // Copyright (c) 1994-2006 Sun Microsystems Inc. | 1 // Copyright (c) 1994-2006 Sun Microsystems Inc. |
| 2 // All Rights Reserved. | 2 // All Rights Reserved. |
| 3 // | 3 // |
| 4 // Redistribution and use in source and binary forms, with or without | 4 // Redistribution and use in source and binary forms, with or without |
| 5 // modification, are permitted provided that the following conditions | 5 // modification, are permitted provided that the following conditions |
| 6 // are met: | 6 // are met: |
| 7 // | 7 // |
| 8 // - Redistributions of source code must retain the above copyright notice, | 8 // - Redistributions of source code must retain the above copyright notice, |
| 9 // this list of conditions and the following disclaimer. | 9 // this list of conditions and the following disclaimer. |
| 10 // | 10 // |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 45 namespace v8 { | 45 namespace v8 { |
| 46 namespace internal { | 46 namespace internal { |
| 47 | 47 |
| 48 // ----------------------------------------------------------------------------- | 48 // ----------------------------------------------------------------------------- |
| 49 // Implementation of CpuFeatures | 49 // Implementation of CpuFeatures |
| 50 | 50 |
| 51 #ifdef DEBUG | 51 #ifdef DEBUG |
| 52 bool CpuFeatures::initialized_ = false; | 52 bool CpuFeatures::initialized_ = false; |
| 53 #endif | 53 #endif |
| 54 uint64_t CpuFeatures::supported_ = 0; | 54 uint64_t CpuFeatures::supported_ = 0; |
| 55 uint64_t CpuFeatures::found_by_runtime_probing_ = 0; | 55 uint64_t CpuFeatures::found_by_runtime_probing_only_ = 0; |
| 56 | 56 |
| 57 | 57 |
| 58 ExternalReference ExternalReference::cpu_features() { | 58 ExternalReference ExternalReference::cpu_features() { |
| 59 ASSERT(CpuFeatures::initialized_); | 59 ASSERT(CpuFeatures::initialized_); |
| 60 return ExternalReference(&CpuFeatures::supported_); | 60 return ExternalReference(&CpuFeatures::supported_); |
| 61 } | 61 } |
| 62 | 62 |
| 63 | 63 |
| 64 int IntelDoubleRegister::NumAllocatableRegisters() { | 64 int IntelDoubleRegister::NumAllocatableRegisters() { |
| 65 if (CpuFeatures::IsSupported(SSE2)) { | 65 if (CpuFeatures::IsSupported(SSE2)) { |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 139 __ xor_(eax, eax); | 139 __ xor_(eax, eax); |
| 140 __ xor_(edx, edx); | 140 __ xor_(edx, edx); |
| 141 __ jmp(&done); | 141 __ jmp(&done); |
| 142 | 142 |
| 143 // Invoke CPUID with 1 in eax to get feature information in | 143 // Invoke CPUID with 1 in eax to get feature information in |
| 144 // ecx:edx. Temporarily enable CPUID support because we know it's | 144 // ecx:edx. Temporarily enable CPUID support because we know it's |
| 145 // safe here. | 145 // safe here. |
| 146 __ bind(&cpuid); | 146 __ bind(&cpuid); |
| 147 __ mov(eax, 1); | 147 __ mov(eax, 1); |
| 148 supported_ = (1 << CPUID); | 148 supported_ = (1 << CPUID); |
| 149 { Scope fscope(CPUID); | 149 { CpuFeatureScope fscope(&assm, CPUID); |
| 150 __ cpuid(); | 150 __ cpuid(); |
| 151 } | 151 } |
| 152 supported_ = 0; | 152 supported_ = 0; |
| 153 | 153 |
| 154 // Move the result from ecx:edx to edx:eax and make sure to mark the | 154 // Move the result from ecx:edx to edx:eax and make sure to mark the |
| 155 // CPUID feature as supported. | 155 // CPUID feature as supported. |
| 156 __ mov(eax, edx); | 156 __ mov(eax, edx); |
| 157 __ or_(eax, 1 << CPUID); | 157 __ or_(eax, 1 << CPUID); |
| 158 __ mov(edx, ecx); | 158 __ mov(edx, ecx); |
| 159 | 159 |
| 160 // Done. | 160 // Done. |
| 161 __ bind(&done); | 161 __ bind(&done); |
| 162 __ mov(esp, ebp); | 162 __ mov(esp, ebp); |
| 163 __ pop(ebx); | 163 __ pop(ebx); |
| 164 __ pop(ecx); | 164 __ pop(ecx); |
| 165 __ popfd(); | 165 __ popfd(); |
| 166 __ pop(ebp); | 166 __ pop(ebp); |
| 167 __ ret(0); | 167 __ ret(0); |
| 168 #undef __ | 168 #undef __ |
| 169 | 169 |
| 170 typedef uint64_t (*F0)(); | 170 typedef uint64_t (*F0)(); |
| 171 F0 probe = FUNCTION_CAST<F0>(reinterpret_cast<Address>(memory->address())); | 171 F0 probe = FUNCTION_CAST<F0>(reinterpret_cast<Address>(memory->address())); |
| 172 supported_ = probe(); | 172 uint64_t probed_features = probe(); |
| 173 found_by_runtime_probing_ = supported_; | 173 uint64_t platform_features = OS::CpuFeaturesImpliedByPlatform(); |
| 174 uint64_t os_guarantees = OS::CpuFeaturesImpliedByPlatform(); | 174 supported_ = probed_features | platform_features; |
| 175 supported_ |= os_guarantees; | 175 found_by_runtime_probing_only_ = probed_features & ~platform_features; |
| 176 found_by_runtime_probing_ &= ~os_guarantees; | |
| 177 | 176 |
| 178 delete memory; | 177 delete memory; |
| 179 } | 178 } |
| 180 | 179 |
| 181 | 180 |
| 182 // ----------------------------------------------------------------------------- | 181 // ----------------------------------------------------------------------------- |
| 183 // Implementation of Displacement | 182 // Implementation of Displacement |
| 184 | 183 |
| 185 void Displacement::init(Label* L, Type type) { | 184 void Displacement::init(Label* L, Type type) { |
| 186 ASSERT(!L->is_bound()); | 185 ASSERT(!L->is_bound()); |
| (...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 468 } | 467 } |
| 469 } | 468 } |
| 470 | 469 |
| 471 | 470 |
| 472 void Assembler::CodeTargetAlign() { | 471 void Assembler::CodeTargetAlign() { |
| 473 Align(16); // Preferred alignment of jump targets on ia32. | 472 Align(16); // Preferred alignment of jump targets on ia32. |
| 474 } | 473 } |
| 475 | 474 |
| 476 | 475 |
| 477 void Assembler::cpuid() { | 476 void Assembler::cpuid() { |
| 478 ASSERT(CpuFeatures::IsEnabled(CPUID)); | 477 ASSERT(IsEnabled(CPUID)); |
| 479 EnsureSpace ensure_space(this); | 478 EnsureSpace ensure_space(this); |
| 480 EMIT(0x0F); | 479 EMIT(0x0F); |
| 481 EMIT(0xA2); | 480 EMIT(0xA2); |
| 482 } | 481 } |
| 483 | 482 |
| 484 | 483 |
| 485 void Assembler::pushad() { | 484 void Assembler::pushad() { |
| 486 EnsureSpace ensure_space(this); | 485 EnsureSpace ensure_space(this); |
| 487 EMIT(0x60); | 486 EMIT(0x60); |
| 488 } | 487 } |
| (...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 690 | 689 |
| 691 void Assembler::movzx_w(Register dst, const Operand& src) { | 690 void Assembler::movzx_w(Register dst, const Operand& src) { |
| 692 EnsureSpace ensure_space(this); | 691 EnsureSpace ensure_space(this); |
| 693 EMIT(0x0F); | 692 EMIT(0x0F); |
| 694 EMIT(0xB7); | 693 EMIT(0xB7); |
| 695 emit_operand(dst, src); | 694 emit_operand(dst, src); |
| 696 } | 695 } |
| 697 | 696 |
| 698 | 697 |
| 699 void Assembler::cmov(Condition cc, Register dst, const Operand& src) { | 698 void Assembler::cmov(Condition cc, Register dst, const Operand& src) { |
| 700 ASSERT(CpuFeatures::IsEnabled(CMOV)); | 699 ASSERT(IsEnabled(CMOV)); |
| 701 EnsureSpace ensure_space(this); | 700 EnsureSpace ensure_space(this); |
| 702 // Opcode: 0f 40 + cc /r. | 701 // Opcode: 0f 40 + cc /r. |
| 703 EMIT(0x0F); | 702 EMIT(0x0F); |
| 704 EMIT(0x40 + cc); | 703 EMIT(0x40 + cc); |
| 705 emit_operand(dst, src); | 704 emit_operand(dst, src); |
| 706 } | 705 } |
| 707 | 706 |
| 708 | 707 |
| 709 void Assembler::cld() { | 708 void Assembler::cld() { |
| 710 EnsureSpace ensure_space(this); | 709 EnsureSpace ensure_space(this); |
| (...skipping 588 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1299 } | 1298 } |
| 1300 | 1299 |
| 1301 | 1300 |
| 1302 void Assembler::nop() { | 1301 void Assembler::nop() { |
| 1303 EnsureSpace ensure_space(this); | 1302 EnsureSpace ensure_space(this); |
| 1304 EMIT(0x90); | 1303 EMIT(0x90); |
| 1305 } | 1304 } |
| 1306 | 1305 |
| 1307 | 1306 |
| 1308 void Assembler::rdtsc() { | 1307 void Assembler::rdtsc() { |
| 1309 ASSERT(CpuFeatures::IsEnabled(RDTSC)); | 1308 ASSERT(IsEnabled(RDTSC)); |
| 1310 EnsureSpace ensure_space(this); | 1309 EnsureSpace ensure_space(this); |
| 1311 EMIT(0x0F); | 1310 EMIT(0x0F); |
| 1312 EMIT(0x31); | 1311 EMIT(0x31); |
| 1313 } | 1312 } |
| 1314 | 1313 |
| 1315 | 1314 |
| 1316 void Assembler::ret(int imm16) { | 1315 void Assembler::ret(int imm16) { |
| 1317 EnsureSpace ensure_space(this); | 1316 EnsureSpace ensure_space(this); |
| 1318 ASSERT(is_uint16(imm16)); | 1317 ASSERT(is_uint16(imm16)); |
| 1319 if (imm16 == 0) { | 1318 if (imm16 == 0) { |
| (...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1653 | 1652 |
| 1654 | 1653 |
| 1655 void Assembler::fistp_s(const Operand& adr) { | 1654 void Assembler::fistp_s(const Operand& adr) { |
| 1656 EnsureSpace ensure_space(this); | 1655 EnsureSpace ensure_space(this); |
| 1657 EMIT(0xDB); | 1656 EMIT(0xDB); |
| 1658 emit_operand(ebx, adr); | 1657 emit_operand(ebx, adr); |
| 1659 } | 1658 } |
| 1660 | 1659 |
| 1661 | 1660 |
| 1662 void Assembler::fisttp_s(const Operand& adr) { | 1661 void Assembler::fisttp_s(const Operand& adr) { |
| 1663 ASSERT(CpuFeatures::IsEnabled(SSE3)); | 1662 ASSERT(IsEnabled(SSE3)); |
| 1664 EnsureSpace ensure_space(this); | 1663 EnsureSpace ensure_space(this); |
| 1665 EMIT(0xDB); | 1664 EMIT(0xDB); |
| 1666 emit_operand(ecx, adr); | 1665 emit_operand(ecx, adr); |
| 1667 } | 1666 } |
| 1668 | 1667 |
| 1669 | 1668 |
| 1670 void Assembler::fisttp_d(const Operand& adr) { | 1669 void Assembler::fisttp_d(const Operand& adr) { |
| 1671 ASSERT(CpuFeatures::IsEnabled(SSE3)); | 1670 ASSERT(IsEnabled(SSE3)); |
| 1672 EnsureSpace ensure_space(this); | 1671 EnsureSpace ensure_space(this); |
| 1673 EMIT(0xDD); | 1672 EMIT(0xDD); |
| 1674 emit_operand(ecx, adr); | 1673 emit_operand(ecx, adr); |
| 1675 } | 1674 } |
| 1676 | 1675 |
| 1677 | 1676 |
| 1678 void Assembler::fist_s(const Operand& adr) { | 1677 void Assembler::fist_s(const Operand& adr) { |
| 1679 EnsureSpace ensure_space(this); | 1678 EnsureSpace ensure_space(this); |
| 1680 EMIT(0xDB); | 1679 EMIT(0xDB); |
| 1681 emit_operand(edx, adr); | 1680 emit_operand(edx, adr); |
| (...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1923 void Assembler::setcc(Condition cc, Register reg) { | 1922 void Assembler::setcc(Condition cc, Register reg) { |
| 1924 ASSERT(reg.is_byte_register()); | 1923 ASSERT(reg.is_byte_register()); |
| 1925 EnsureSpace ensure_space(this); | 1924 EnsureSpace ensure_space(this); |
| 1926 EMIT(0x0F); | 1925 EMIT(0x0F); |
| 1927 EMIT(0x90 | cc); | 1926 EMIT(0x90 | cc); |
| 1928 EMIT(0xC0 | reg.code()); | 1927 EMIT(0xC0 | reg.code()); |
| 1929 } | 1928 } |
| 1930 | 1929 |
| 1931 | 1930 |
| 1932 void Assembler::cvttss2si(Register dst, const Operand& src) { | 1931 void Assembler::cvttss2si(Register dst, const Operand& src) { |
| 1933 ASSERT(CpuFeatures::IsEnabled(SSE2)); | 1932 ASSERT(IsEnabled(SSE2)); |
| 1934 EnsureSpace ensure_space(this); | 1933 EnsureSpace ensure_space(this); |
| 1935 EMIT(0xF3); | 1934 EMIT(0xF3); |
| 1936 EMIT(0x0F); | 1935 EMIT(0x0F); |
| 1937 EMIT(0x2C); | 1936 EMIT(0x2C); |
| 1938 emit_operand(dst, src); | 1937 emit_operand(dst, src); |
| 1939 } | 1938 } |
| 1940 | 1939 |
| 1941 | 1940 |
| 1942 void Assembler::cvttsd2si(Register dst, const Operand& src) { | 1941 void Assembler::cvttsd2si(Register dst, const Operand& src) { |
| 1943 ASSERT(CpuFeatures::IsEnabled(SSE2)); | 1942 ASSERT(IsEnabled(SSE2)); |
| 1944 EnsureSpace ensure_space(this); | 1943 EnsureSpace ensure_space(this); |
| 1945 EMIT(0xF2); | 1944 EMIT(0xF2); |
| 1946 EMIT(0x0F); | 1945 EMIT(0x0F); |
| 1947 EMIT(0x2C); | 1946 EMIT(0x2C); |
| 1948 emit_operand(dst, src); | 1947 emit_operand(dst, src); |
| 1949 } | 1948 } |
| 1950 | 1949 |
| 1951 | 1950 |
| 1952 void Assembler::cvtsd2si(Register dst, XMMRegister src) { | 1951 void Assembler::cvtsd2si(Register dst, XMMRegister src) { |
| 1953 ASSERT(CpuFeatures::IsEnabled(SSE2)); | 1952 ASSERT(IsEnabled(SSE2)); |
| 1954 EnsureSpace ensure_space(this); | 1953 EnsureSpace ensure_space(this); |
| 1955 EMIT(0xF2); | 1954 EMIT(0xF2); |
| 1956 EMIT(0x0F); | 1955 EMIT(0x0F); |
| 1957 EMIT(0x2D); | 1956 EMIT(0x2D); |
| 1958 emit_sse_operand(dst, src); | 1957 emit_sse_operand(dst, src); |
| 1959 } | 1958 } |
| 1960 | 1959 |
| 1961 | 1960 |
| 1962 void Assembler::cvtsi2sd(XMMRegister dst, const Operand& src) { | 1961 void Assembler::cvtsi2sd(XMMRegister dst, const Operand& src) { |
| 1963 ASSERT(CpuFeatures::IsEnabled(SSE2)); | 1962 ASSERT(IsEnabled(SSE2)); |
| 1964 EnsureSpace ensure_space(this); | 1963 EnsureSpace ensure_space(this); |
| 1965 EMIT(0xF2); | 1964 EMIT(0xF2); |
| 1966 EMIT(0x0F); | 1965 EMIT(0x0F); |
| 1967 EMIT(0x2A); | 1966 EMIT(0x2A); |
| 1968 emit_sse_operand(dst, src); | 1967 emit_sse_operand(dst, src); |
| 1969 } | 1968 } |
| 1970 | 1969 |
| 1971 | 1970 |
| 1972 void Assembler::cvtss2sd(XMMRegister dst, XMMRegister src) { | 1971 void Assembler::cvtss2sd(XMMRegister dst, XMMRegister src) { |
| 1973 ASSERT(CpuFeatures::IsEnabled(SSE2)); | 1972 ASSERT(IsEnabled(SSE2)); |
| 1974 EnsureSpace ensure_space(this); | 1973 EnsureSpace ensure_space(this); |
| 1975 EMIT(0xF3); | 1974 EMIT(0xF3); |
| 1976 EMIT(0x0F); | 1975 EMIT(0x0F); |
| 1977 EMIT(0x5A); | 1976 EMIT(0x5A); |
| 1978 emit_sse_operand(dst, src); | 1977 emit_sse_operand(dst, src); |
| 1979 } | 1978 } |
| 1980 | 1979 |
| 1981 | 1980 |
| 1982 void Assembler::cvtsd2ss(XMMRegister dst, XMMRegister src) { | 1981 void Assembler::cvtsd2ss(XMMRegister dst, XMMRegister src) { |
| 1983 ASSERT(CpuFeatures::IsEnabled(SSE2)); | 1982 ASSERT(IsEnabled(SSE2)); |
| 1984 EnsureSpace ensure_space(this); | 1983 EnsureSpace ensure_space(this); |
| 1985 EMIT(0xF2); | 1984 EMIT(0xF2); |
| 1986 EMIT(0x0F); | 1985 EMIT(0x0F); |
| 1987 EMIT(0x5A); | 1986 EMIT(0x5A); |
| 1988 emit_sse_operand(dst, src); | 1987 emit_sse_operand(dst, src); |
| 1989 } | 1988 } |
| 1990 | 1989 |
| 1991 | 1990 |
| 1992 void Assembler::addsd(XMMRegister dst, XMMRegister src) { | 1991 void Assembler::addsd(XMMRegister dst, XMMRegister src) { |
| 1993 ASSERT(CpuFeatures::IsEnabled(SSE2)); | 1992 ASSERT(IsEnabled(SSE2)); |
| 1994 EnsureSpace ensure_space(this); | 1993 EnsureSpace ensure_space(this); |
| 1995 EMIT(0xF2); | 1994 EMIT(0xF2); |
| 1996 EMIT(0x0F); | 1995 EMIT(0x0F); |
| 1997 EMIT(0x58); | 1996 EMIT(0x58); |
| 1998 emit_sse_operand(dst, src); | 1997 emit_sse_operand(dst, src); |
| 1999 } | 1998 } |
| 2000 | 1999 |
| 2001 | 2000 |
| 2002 void Assembler::addsd(XMMRegister dst, const Operand& src) { | 2001 void Assembler::addsd(XMMRegister dst, const Operand& src) { |
| 2003 ASSERT(CpuFeatures::IsEnabled(SSE2)); | 2002 ASSERT(IsEnabled(SSE2)); |
| 2004 EnsureSpace ensure_space(this); | 2003 EnsureSpace ensure_space(this); |
| 2005 EMIT(0xF2); | 2004 EMIT(0xF2); |
| 2006 EMIT(0x0F); | 2005 EMIT(0x0F); |
| 2007 EMIT(0x58); | 2006 EMIT(0x58); |
| 2008 emit_sse_operand(dst, src); | 2007 emit_sse_operand(dst, src); |
| 2009 } | 2008 } |
| 2010 | 2009 |
| 2011 | 2010 |
| 2012 void Assembler::mulsd(XMMRegister dst, XMMRegister src) { | 2011 void Assembler::mulsd(XMMRegister dst, XMMRegister src) { |
| 2013 ASSERT(CpuFeatures::IsEnabled(SSE2)); | 2012 ASSERT(IsEnabled(SSE2)); |
| 2014 EnsureSpace ensure_space(this); | 2013 EnsureSpace ensure_space(this); |
| 2015 EMIT(0xF2); | 2014 EMIT(0xF2); |
| 2016 EMIT(0x0F); | 2015 EMIT(0x0F); |
| 2017 EMIT(0x59); | 2016 EMIT(0x59); |
| 2018 emit_sse_operand(dst, src); | 2017 emit_sse_operand(dst, src); |
| 2019 } | 2018 } |
| 2020 | 2019 |
| 2021 | 2020 |
| 2022 void Assembler::mulsd(XMMRegister dst, const Operand& src) { | 2021 void Assembler::mulsd(XMMRegister dst, const Operand& src) { |
| 2023 ASSERT(CpuFeatures::IsEnabled(SSE2)); | 2022 ASSERT(IsEnabled(SSE2)); |
| 2024 EnsureSpace ensure_space(this); | 2023 EnsureSpace ensure_space(this); |
| 2025 EMIT(0xF2); | 2024 EMIT(0xF2); |
| 2026 EMIT(0x0F); | 2025 EMIT(0x0F); |
| 2027 EMIT(0x59); | 2026 EMIT(0x59); |
| 2028 emit_sse_operand(dst, src); | 2027 emit_sse_operand(dst, src); |
| 2029 } | 2028 } |
| 2030 | 2029 |
| 2031 | 2030 |
| 2032 void Assembler::subsd(XMMRegister dst, XMMRegister src) { | 2031 void Assembler::subsd(XMMRegister dst, XMMRegister src) { |
| 2033 ASSERT(CpuFeatures::IsEnabled(SSE2)); | 2032 ASSERT(IsEnabled(SSE2)); |
| 2034 EnsureSpace ensure_space(this); | 2033 EnsureSpace ensure_space(this); |
| 2035 EMIT(0xF2); | 2034 EMIT(0xF2); |
| 2036 EMIT(0x0F); | 2035 EMIT(0x0F); |
| 2037 EMIT(0x5C); | 2036 EMIT(0x5C); |
| 2038 emit_sse_operand(dst, src); | 2037 emit_sse_operand(dst, src); |
| 2039 } | 2038 } |
| 2040 | 2039 |
| 2041 | 2040 |
| 2042 void Assembler::divsd(XMMRegister dst, XMMRegister src) { | 2041 void Assembler::divsd(XMMRegister dst, XMMRegister src) { |
| 2043 ASSERT(CpuFeatures::IsEnabled(SSE2)); | 2042 ASSERT(IsEnabled(SSE2)); |
| 2044 EnsureSpace ensure_space(this); | 2043 EnsureSpace ensure_space(this); |
| 2045 EMIT(0xF2); | 2044 EMIT(0xF2); |
| 2046 EMIT(0x0F); | 2045 EMIT(0x0F); |
| 2047 EMIT(0x5E); | 2046 EMIT(0x5E); |
| 2048 emit_sse_operand(dst, src); | 2047 emit_sse_operand(dst, src); |
| 2049 } | 2048 } |
| 2050 | 2049 |
| 2051 | 2050 |
| 2052 void Assembler::xorpd(XMMRegister dst, XMMRegister src) { | 2051 void Assembler::xorpd(XMMRegister dst, XMMRegister src) { |
| 2053 ASSERT(CpuFeatures::IsEnabled(SSE2)); | 2052 ASSERT(IsEnabled(SSE2)); |
| 2054 EnsureSpace ensure_space(this); | 2053 EnsureSpace ensure_space(this); |
| 2055 EMIT(0x66); | 2054 EMIT(0x66); |
| 2056 EMIT(0x0F); | 2055 EMIT(0x0F); |
| 2057 EMIT(0x57); | 2056 EMIT(0x57); |
| 2058 emit_sse_operand(dst, src); | 2057 emit_sse_operand(dst, src); |
| 2059 } | 2058 } |
| 2060 | 2059 |
| 2061 | 2060 |
| 2062 void Assembler::xorps(XMMRegister dst, XMMRegister src) { | 2061 void Assembler::xorps(XMMRegister dst, XMMRegister src) { |
| 2063 EnsureSpace ensure_space(this); | 2062 EnsureSpace ensure_space(this); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 2088 void Assembler::orpd(XMMRegister dst, XMMRegister src) { | 2087 void Assembler::orpd(XMMRegister dst, XMMRegister src) { |
| 2089 EnsureSpace ensure_space(this); | 2088 EnsureSpace ensure_space(this); |
| 2090 EMIT(0x66); | 2089 EMIT(0x66); |
| 2091 EMIT(0x0F); | 2090 EMIT(0x0F); |
| 2092 EMIT(0x56); | 2091 EMIT(0x56); |
| 2093 emit_sse_operand(dst, src); | 2092 emit_sse_operand(dst, src); |
| 2094 } | 2093 } |
| 2095 | 2094 |
| 2096 | 2095 |
| 2097 void Assembler::ucomisd(XMMRegister dst, XMMRegister src) { | 2096 void Assembler::ucomisd(XMMRegister dst, XMMRegister src) { |
| 2098 ASSERT(CpuFeatures::IsEnabled(SSE2)); | 2097 ASSERT(IsEnabled(SSE2)); |
| 2099 EnsureSpace ensure_space(this); | 2098 EnsureSpace ensure_space(this); |
| 2100 EMIT(0x66); | 2099 EMIT(0x66); |
| 2101 EMIT(0x0F); | 2100 EMIT(0x0F); |
| 2102 EMIT(0x2E); | 2101 EMIT(0x2E); |
| 2103 emit_sse_operand(dst, src); | 2102 emit_sse_operand(dst, src); |
| 2104 } | 2103 } |
| 2105 | 2104 |
| 2106 | 2105 |
| 2107 void Assembler::ucomisd(XMMRegister dst, const Operand& src) { | 2106 void Assembler::ucomisd(XMMRegister dst, const Operand& src) { |
| 2108 ASSERT(CpuFeatures::IsEnabled(SSE2)); | 2107 ASSERT(IsEnabled(SSE2)); |
| 2109 EnsureSpace ensure_space(this); | 2108 EnsureSpace ensure_space(this); |
| 2110 EMIT(0x66); | 2109 EMIT(0x66); |
| 2111 EMIT(0x0F); | 2110 EMIT(0x0F); |
| 2112 EMIT(0x2E); | 2111 EMIT(0x2E); |
| 2113 emit_sse_operand(dst, src); | 2112 emit_sse_operand(dst, src); |
| 2114 } | 2113 } |
| 2115 | 2114 |
| 2116 | 2115 |
| 2117 void Assembler::roundsd(XMMRegister dst, XMMRegister src, RoundingMode mode) { | 2116 void Assembler::roundsd(XMMRegister dst, XMMRegister src, RoundingMode mode) { |
| 2118 ASSERT(CpuFeatures::IsEnabled(SSE4_1)); | 2117 ASSERT(IsEnabled(SSE4_1)); |
| 2119 EnsureSpace ensure_space(this); | 2118 EnsureSpace ensure_space(this); |
| 2120 EMIT(0x66); | 2119 EMIT(0x66); |
| 2121 EMIT(0x0F); | 2120 EMIT(0x0F); |
| 2122 EMIT(0x3A); | 2121 EMIT(0x3A); |
| 2123 EMIT(0x0B); | 2122 EMIT(0x0B); |
| 2124 emit_sse_operand(dst, src); | 2123 emit_sse_operand(dst, src); |
| 2125 // Mask precision exeption. | 2124 // Mask precision exeption. |
| 2126 EMIT(static_cast<byte>(mode) | 0x8); | 2125 EMIT(static_cast<byte>(mode) | 0x8); |
| 2127 } | 2126 } |
| 2128 | 2127 |
| 2129 void Assembler::movmskpd(Register dst, XMMRegister src) { | 2128 void Assembler::movmskpd(Register dst, XMMRegister src) { |
| 2130 ASSERT(CpuFeatures::IsEnabled(SSE2)); | 2129 ASSERT(IsEnabled(SSE2)); |
| 2131 EnsureSpace ensure_space(this); | 2130 EnsureSpace ensure_space(this); |
| 2132 EMIT(0x66); | 2131 EMIT(0x66); |
| 2133 EMIT(0x0F); | 2132 EMIT(0x0F); |
| 2134 EMIT(0x50); | 2133 EMIT(0x50); |
| 2135 emit_sse_operand(dst, src); | 2134 emit_sse_operand(dst, src); |
| 2136 } | 2135 } |
| 2137 | 2136 |
| 2138 | 2137 |
| 2139 void Assembler::movmskps(Register dst, XMMRegister src) { | 2138 void Assembler::movmskps(Register dst, XMMRegister src) { |
| 2140 ASSERT(CpuFeatures::IsEnabled(SSE2)); | 2139 ASSERT(IsEnabled(SSE2)); |
| 2141 EnsureSpace ensure_space(this); | 2140 EnsureSpace ensure_space(this); |
| 2142 EMIT(0x0F); | 2141 EMIT(0x0F); |
| 2143 EMIT(0x50); | 2142 EMIT(0x50); |
| 2144 emit_sse_operand(dst, src); | 2143 emit_sse_operand(dst, src); |
| 2145 } | 2144 } |
| 2146 | 2145 |
| 2147 | 2146 |
| 2148 void Assembler::pcmpeqd(XMMRegister dst, XMMRegister src) { | 2147 void Assembler::pcmpeqd(XMMRegister dst, XMMRegister src) { |
| 2149 ASSERT(CpuFeatures::IsEnabled(SSE2)); | 2148 ASSERT(IsEnabled(SSE2)); |
| 2150 EnsureSpace ensure_space(this); | 2149 EnsureSpace ensure_space(this); |
| 2151 EMIT(0x66); | 2150 EMIT(0x66); |
| 2152 EMIT(0x0F); | 2151 EMIT(0x0F); |
| 2153 EMIT(0x76); | 2152 EMIT(0x76); |
| 2154 emit_sse_operand(dst, src); | 2153 emit_sse_operand(dst, src); |
| 2155 } | 2154 } |
| 2156 | 2155 |
| 2157 | 2156 |
| 2158 void Assembler::cmpltsd(XMMRegister dst, XMMRegister src) { | 2157 void Assembler::cmpltsd(XMMRegister dst, XMMRegister src) { |
| 2159 ASSERT(CpuFeatures::IsEnabled(SSE2)); | 2158 ASSERT(IsEnabled(SSE2)); |
| 2160 EnsureSpace ensure_space(this); | 2159 EnsureSpace ensure_space(this); |
| 2161 EMIT(0xF2); | 2160 EMIT(0xF2); |
| 2162 EMIT(0x0F); | 2161 EMIT(0x0F); |
| 2163 EMIT(0xC2); | 2162 EMIT(0xC2); |
| 2164 emit_sse_operand(dst, src); | 2163 emit_sse_operand(dst, src); |
| 2165 EMIT(1); // LT == 1 | 2164 EMIT(1); // LT == 1 |
| 2166 } | 2165 } |
| 2167 | 2166 |
| 2168 | 2167 |
| 2169 void Assembler::movaps(XMMRegister dst, XMMRegister src) { | 2168 void Assembler::movaps(XMMRegister dst, XMMRegister src) { |
| 2170 ASSERT(CpuFeatures::IsEnabled(SSE2)); | 2169 ASSERT(IsEnabled(SSE2)); |
| 2171 EnsureSpace ensure_space(this); | 2170 EnsureSpace ensure_space(this); |
| 2172 EMIT(0x0F); | 2171 EMIT(0x0F); |
| 2173 EMIT(0x28); | 2172 EMIT(0x28); |
| 2174 emit_sse_operand(dst, src); | 2173 emit_sse_operand(dst, src); |
| 2175 } | 2174 } |
| 2176 | 2175 |
| 2177 | 2176 |
| 2178 void Assembler::movdqa(const Operand& dst, XMMRegister src) { | 2177 void Assembler::movdqa(const Operand& dst, XMMRegister src) { |
| 2179 ASSERT(CpuFeatures::IsEnabled(SSE2)); | 2178 ASSERT(IsEnabled(SSE2)); |
| 2180 EnsureSpace ensure_space(this); | 2179 EnsureSpace ensure_space(this); |
| 2181 EMIT(0x66); | 2180 EMIT(0x66); |
| 2182 EMIT(0x0F); | 2181 EMIT(0x0F); |
| 2183 EMIT(0x7F); | 2182 EMIT(0x7F); |
| 2184 emit_sse_operand(src, dst); | 2183 emit_sse_operand(src, dst); |
| 2185 } | 2184 } |
| 2186 | 2185 |
| 2187 | 2186 |
| 2188 void Assembler::movdqa(XMMRegister dst, const Operand& src) { | 2187 void Assembler::movdqa(XMMRegister dst, const Operand& src) { |
| 2189 ASSERT(CpuFeatures::IsEnabled(SSE2)); | 2188 ASSERT(IsEnabled(SSE2)); |
| 2190 EnsureSpace ensure_space(this); | 2189 EnsureSpace ensure_space(this); |
| 2191 EMIT(0x66); | 2190 EMIT(0x66); |
| 2192 EMIT(0x0F); | 2191 EMIT(0x0F); |
| 2193 EMIT(0x6F); | 2192 EMIT(0x6F); |
| 2194 emit_sse_operand(dst, src); | 2193 emit_sse_operand(dst, src); |
| 2195 } | 2194 } |
| 2196 | 2195 |
| 2197 | 2196 |
| 2198 void Assembler::movdqu(const Operand& dst, XMMRegister src ) { | 2197 void Assembler::movdqu(const Operand& dst, XMMRegister src ) { |
| 2199 ASSERT(CpuFeatures::IsEnabled(SSE2)); | 2198 ASSERT(IsEnabled(SSE2)); |
| 2200 EnsureSpace ensure_space(this); | 2199 EnsureSpace ensure_space(this); |
| 2201 EMIT(0xF3); | 2200 EMIT(0xF3); |
| 2202 EMIT(0x0F); | 2201 EMIT(0x0F); |
| 2203 EMIT(0x7F); | 2202 EMIT(0x7F); |
| 2204 emit_sse_operand(src, dst); | 2203 emit_sse_operand(src, dst); |
| 2205 } | 2204 } |
| 2206 | 2205 |
| 2207 | 2206 |
| 2208 void Assembler::movdqu(XMMRegister dst, const Operand& src) { | 2207 void Assembler::movdqu(XMMRegister dst, const Operand& src) { |
| 2209 ASSERT(CpuFeatures::IsEnabled(SSE2)); | 2208 ASSERT(IsEnabled(SSE2)); |
| 2210 EnsureSpace ensure_space(this); | 2209 EnsureSpace ensure_space(this); |
| 2211 EMIT(0xF3); | 2210 EMIT(0xF3); |
| 2212 EMIT(0x0F); | 2211 EMIT(0x0F); |
| 2213 EMIT(0x6F); | 2212 EMIT(0x6F); |
| 2214 emit_sse_operand(dst, src); | 2213 emit_sse_operand(dst, src); |
| 2215 } | 2214 } |
| 2216 | 2215 |
| 2217 | 2216 |
| 2218 void Assembler::movntdqa(XMMRegister dst, const Operand& src) { | 2217 void Assembler::movntdqa(XMMRegister dst, const Operand& src) { |
| 2219 ASSERT(CpuFeatures::IsEnabled(SSE4_1)); | 2218 ASSERT(IsEnabled(SSE4_1)); |
| 2220 EnsureSpace ensure_space(this); | 2219 EnsureSpace ensure_space(this); |
| 2221 EMIT(0x66); | 2220 EMIT(0x66); |
| 2222 EMIT(0x0F); | 2221 EMIT(0x0F); |
| 2223 EMIT(0x38); | 2222 EMIT(0x38); |
| 2224 EMIT(0x2A); | 2223 EMIT(0x2A); |
| 2225 emit_sse_operand(dst, src); | 2224 emit_sse_operand(dst, src); |
| 2226 } | 2225 } |
| 2227 | 2226 |
| 2228 | 2227 |
| 2229 void Assembler::movntdq(const Operand& dst, XMMRegister src) { | 2228 void Assembler::movntdq(const Operand& dst, XMMRegister src) { |
| 2230 ASSERT(CpuFeatures::IsEnabled(SSE2)); | 2229 ASSERT(IsEnabled(SSE2)); |
| 2231 EnsureSpace ensure_space(this); | 2230 EnsureSpace ensure_space(this); |
| 2232 EMIT(0x66); | 2231 EMIT(0x66); |
| 2233 EMIT(0x0F); | 2232 EMIT(0x0F); |
| 2234 EMIT(0xE7); | 2233 EMIT(0xE7); |
| 2235 emit_sse_operand(src, dst); | 2234 emit_sse_operand(src, dst); |
| 2236 } | 2235 } |
| 2237 | 2236 |
| 2238 | 2237 |
| 2239 void Assembler::prefetch(const Operand& src, int level) { | 2238 void Assembler::prefetch(const Operand& src, int level) { |
| 2240 ASSERT(is_uint2(level)); | 2239 ASSERT(is_uint2(level)); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 2253 } | 2252 } |
| 2254 | 2253 |
| 2255 | 2254 |
| 2256 void Assembler::movdbl(const Operand& dst, XMMRegister src) { | 2255 void Assembler::movdbl(const Operand& dst, XMMRegister src) { |
| 2257 EnsureSpace ensure_space(this); | 2256 EnsureSpace ensure_space(this); |
| 2258 movsd(dst, src); | 2257 movsd(dst, src); |
| 2259 } | 2258 } |
| 2260 | 2259 |
| 2261 | 2260 |
| 2262 void Assembler::movsd(const Operand& dst, XMMRegister src ) { | 2261 void Assembler::movsd(const Operand& dst, XMMRegister src ) { |
| 2263 ASSERT(CpuFeatures::IsEnabled(SSE2)); | 2262 ASSERT(IsEnabled(SSE2)); |
| 2264 EnsureSpace ensure_space(this); | 2263 EnsureSpace ensure_space(this); |
| 2265 EMIT(0xF2); // double | 2264 EMIT(0xF2); // double |
| 2266 EMIT(0x0F); | 2265 EMIT(0x0F); |
| 2267 EMIT(0x11); // store | 2266 EMIT(0x11); // store |
| 2268 emit_sse_operand(src, dst); | 2267 emit_sse_operand(src, dst); |
| 2269 } | 2268 } |
| 2270 | 2269 |
| 2271 | 2270 |
| 2272 void Assembler::movsd(XMMRegister dst, const Operand& src) { | 2271 void Assembler::movsd(XMMRegister dst, const Operand& src) { |
| 2273 ASSERT(CpuFeatures::IsEnabled(SSE2)); | 2272 ASSERT(IsEnabled(SSE2)); |
| 2274 EnsureSpace ensure_space(this); | 2273 EnsureSpace ensure_space(this); |
| 2275 EMIT(0xF2); // double | 2274 EMIT(0xF2); // double |
| 2276 EMIT(0x0F); | 2275 EMIT(0x0F); |
| 2277 EMIT(0x10); // load | 2276 EMIT(0x10); // load |
| 2278 emit_sse_operand(dst, src); | 2277 emit_sse_operand(dst, src); |
| 2279 } | 2278 } |
| 2280 | 2279 |
| 2281 | 2280 |
| 2282 void Assembler::movsd(XMMRegister dst, XMMRegister src) { | 2281 void Assembler::movsd(XMMRegister dst, XMMRegister src) { |
| 2283 ASSERT(CpuFeatures::IsEnabled(SSE2)); | 2282 ASSERT(IsEnabled(SSE2)); |
| 2284 EnsureSpace ensure_space(this); | 2283 EnsureSpace ensure_space(this); |
| 2285 EMIT(0xF2); | 2284 EMIT(0xF2); |
| 2286 EMIT(0x0F); | 2285 EMIT(0x0F); |
| 2287 EMIT(0x10); | 2286 EMIT(0x10); |
| 2288 emit_sse_operand(dst, src); | 2287 emit_sse_operand(dst, src); |
| 2289 } | 2288 } |
| 2290 | 2289 |
| 2291 | 2290 |
| 2292 void Assembler::movss(const Operand& dst, XMMRegister src ) { | 2291 void Assembler::movss(const Operand& dst, XMMRegister src ) { |
| 2293 ASSERT(CpuFeatures::IsEnabled(SSE2)); | 2292 ASSERT(IsEnabled(SSE2)); |
| 2294 EnsureSpace ensure_space(this); | 2293 EnsureSpace ensure_space(this); |
| 2295 EMIT(0xF3); // float | 2294 EMIT(0xF3); // float |
| 2296 EMIT(0x0F); | 2295 EMIT(0x0F); |
| 2297 EMIT(0x11); // store | 2296 EMIT(0x11); // store |
| 2298 emit_sse_operand(src, dst); | 2297 emit_sse_operand(src, dst); |
| 2299 } | 2298 } |
| 2300 | 2299 |
| 2301 | 2300 |
| 2302 void Assembler::movss(XMMRegister dst, const Operand& src) { | 2301 void Assembler::movss(XMMRegister dst, const Operand& src) { |
| 2303 ASSERT(CpuFeatures::IsEnabled(SSE2)); | 2302 ASSERT(IsEnabled(SSE2)); |
| 2304 EnsureSpace ensure_space(this); | 2303 EnsureSpace ensure_space(this); |
| 2305 EMIT(0xF3); // float | 2304 EMIT(0xF3); // float |
| 2306 EMIT(0x0F); | 2305 EMIT(0x0F); |
| 2307 EMIT(0x10); // load | 2306 EMIT(0x10); // load |
| 2308 emit_sse_operand(dst, src); | 2307 emit_sse_operand(dst, src); |
| 2309 } | 2308 } |
| 2310 | 2309 |
| 2311 | 2310 |
| 2312 void Assembler::movss(XMMRegister dst, XMMRegister src) { | 2311 void Assembler::movss(XMMRegister dst, XMMRegister src) { |
| 2313 ASSERT(CpuFeatures::IsEnabled(SSE2)); | 2312 ASSERT(IsEnabled(SSE2)); |
| 2314 EnsureSpace ensure_space(this); | 2313 EnsureSpace ensure_space(this); |
| 2315 EMIT(0xF3); | 2314 EMIT(0xF3); |
| 2316 EMIT(0x0F); | 2315 EMIT(0x0F); |
| 2317 EMIT(0x10); | 2316 EMIT(0x10); |
| 2318 emit_sse_operand(dst, src); | 2317 emit_sse_operand(dst, src); |
| 2319 } | 2318 } |
| 2320 | 2319 |
| 2321 | 2320 |
| 2322 void Assembler::movd(XMMRegister dst, const Operand& src) { | 2321 void Assembler::movd(XMMRegister dst, const Operand& src) { |
| 2323 ASSERT(CpuFeatures::IsEnabled(SSE2)); | 2322 ASSERT(IsEnabled(SSE2)); |
| 2324 EnsureSpace ensure_space(this); | 2323 EnsureSpace ensure_space(this); |
| 2325 EMIT(0x66); | 2324 EMIT(0x66); |
| 2326 EMIT(0x0F); | 2325 EMIT(0x0F); |
| 2327 EMIT(0x6E); | 2326 EMIT(0x6E); |
| 2328 emit_sse_operand(dst, src); | 2327 emit_sse_operand(dst, src); |
| 2329 } | 2328 } |
| 2330 | 2329 |
| 2331 | 2330 |
| 2332 void Assembler::movd(const Operand& dst, XMMRegister src) { | 2331 void Assembler::movd(const Operand& dst, XMMRegister src) { |
| 2333 ASSERT(CpuFeatures::IsEnabled(SSE2)); | 2332 ASSERT(IsEnabled(SSE2)); |
| 2334 EnsureSpace ensure_space(this); | 2333 EnsureSpace ensure_space(this); |
| 2335 EMIT(0x66); | 2334 EMIT(0x66); |
| 2336 EMIT(0x0F); | 2335 EMIT(0x0F); |
| 2337 EMIT(0x7E); | 2336 EMIT(0x7E); |
| 2338 emit_sse_operand(src, dst); | 2337 emit_sse_operand(src, dst); |
| 2339 } | 2338 } |
| 2340 | 2339 |
| 2341 | 2340 |
| 2342 void Assembler::extractps(Register dst, XMMRegister src, byte imm8) { | 2341 void Assembler::extractps(Register dst, XMMRegister src, byte imm8) { |
| 2343 ASSERT(CpuFeatures::IsSupported(SSE4_1)); | 2342 ASSERT(CpuFeatures::IsSupported(SSE4_1)); |
| 2344 ASSERT(is_uint8(imm8)); | 2343 ASSERT(is_uint8(imm8)); |
| 2345 EnsureSpace ensure_space(this); | 2344 EnsureSpace ensure_space(this); |
| 2346 EMIT(0x66); | 2345 EMIT(0x66); |
| 2347 EMIT(0x0F); | 2346 EMIT(0x0F); |
| 2348 EMIT(0x3A); | 2347 EMIT(0x3A); |
| 2349 EMIT(0x17); | 2348 EMIT(0x17); |
| 2350 emit_sse_operand(dst, src); | 2349 emit_sse_operand(dst, src); |
| 2351 EMIT(imm8); | 2350 EMIT(imm8); |
| 2352 } | 2351 } |
| 2353 | 2352 |
| 2354 | 2353 |
| 2355 void Assembler::pand(XMMRegister dst, XMMRegister src) { | 2354 void Assembler::pand(XMMRegister dst, XMMRegister src) { |
| 2356 ASSERT(CpuFeatures::IsEnabled(SSE2)); | 2355 ASSERT(IsEnabled(SSE2)); |
| 2357 EnsureSpace ensure_space(this); | 2356 EnsureSpace ensure_space(this); |
| 2358 EMIT(0x66); | 2357 EMIT(0x66); |
| 2359 EMIT(0x0F); | 2358 EMIT(0x0F); |
| 2360 EMIT(0xDB); | 2359 EMIT(0xDB); |
| 2361 emit_sse_operand(dst, src); | 2360 emit_sse_operand(dst, src); |
| 2362 } | 2361 } |
| 2363 | 2362 |
| 2364 | 2363 |
| 2365 void Assembler::pxor(XMMRegister dst, XMMRegister src) { | 2364 void Assembler::pxor(XMMRegister dst, XMMRegister src) { |
| 2366 ASSERT(CpuFeatures::IsEnabled(SSE2)); | 2365 ASSERT(IsEnabled(SSE2)); |
| 2367 EnsureSpace ensure_space(this); | 2366 EnsureSpace ensure_space(this); |
| 2368 EMIT(0x66); | 2367 EMIT(0x66); |
| 2369 EMIT(0x0F); | 2368 EMIT(0x0F); |
| 2370 EMIT(0xEF); | 2369 EMIT(0xEF); |
| 2371 emit_sse_operand(dst, src); | 2370 emit_sse_operand(dst, src); |
| 2372 } | 2371 } |
| 2373 | 2372 |
| 2374 | 2373 |
| 2375 void Assembler::por(XMMRegister dst, XMMRegister src) { | 2374 void Assembler::por(XMMRegister dst, XMMRegister src) { |
| 2376 ASSERT(CpuFeatures::IsEnabled(SSE2)); | 2375 ASSERT(IsEnabled(SSE2)); |
| 2377 EnsureSpace ensure_space(this); | 2376 EnsureSpace ensure_space(this); |
| 2378 EMIT(0x66); | 2377 EMIT(0x66); |
| 2379 EMIT(0x0F); | 2378 EMIT(0x0F); |
| 2380 EMIT(0xEB); | 2379 EMIT(0xEB); |
| 2381 emit_sse_operand(dst, src); | 2380 emit_sse_operand(dst, src); |
| 2382 } | 2381 } |
| 2383 | 2382 |
| 2384 | 2383 |
| 2385 void Assembler::ptest(XMMRegister dst, XMMRegister src) { | 2384 void Assembler::ptest(XMMRegister dst, XMMRegister src) { |
| 2386 ASSERT(CpuFeatures::IsEnabled(SSE4_1)); | 2385 ASSERT(IsEnabled(SSE4_1)); |
| 2387 EnsureSpace ensure_space(this); | 2386 EnsureSpace ensure_space(this); |
| 2388 EMIT(0x66); | 2387 EMIT(0x66); |
| 2389 EMIT(0x0F); | 2388 EMIT(0x0F); |
| 2390 EMIT(0x38); | 2389 EMIT(0x38); |
| 2391 EMIT(0x17); | 2390 EMIT(0x17); |
| 2392 emit_sse_operand(dst, src); | 2391 emit_sse_operand(dst, src); |
| 2393 } | 2392 } |
| 2394 | 2393 |
| 2395 | 2394 |
| 2396 void Assembler::psllq(XMMRegister reg, int8_t shift) { | 2395 void Assembler::psllq(XMMRegister reg, int8_t shift) { |
| 2397 ASSERT(CpuFeatures::IsEnabled(SSE2)); | 2396 ASSERT(IsEnabled(SSE2)); |
| 2398 EnsureSpace ensure_space(this); | 2397 EnsureSpace ensure_space(this); |
| 2399 EMIT(0x66); | 2398 EMIT(0x66); |
| 2400 EMIT(0x0F); | 2399 EMIT(0x0F); |
| 2401 EMIT(0x73); | 2400 EMIT(0x73); |
| 2402 emit_sse_operand(esi, reg); // esi == 6 | 2401 emit_sse_operand(esi, reg); // esi == 6 |
| 2403 EMIT(shift); | 2402 EMIT(shift); |
| 2404 } | 2403 } |
| 2405 | 2404 |
| 2406 | 2405 |
| 2407 void Assembler::psllq(XMMRegister dst, XMMRegister src) { | 2406 void Assembler::psllq(XMMRegister dst, XMMRegister src) { |
| 2408 ASSERT(CpuFeatures::IsEnabled(SSE2)); | 2407 ASSERT(IsEnabled(SSE2)); |
| 2409 EnsureSpace ensure_space(this); | 2408 EnsureSpace ensure_space(this); |
| 2410 EMIT(0x66); | 2409 EMIT(0x66); |
| 2411 EMIT(0x0F); | 2410 EMIT(0x0F); |
| 2412 EMIT(0xF3); | 2411 EMIT(0xF3); |
| 2413 emit_sse_operand(dst, src); | 2412 emit_sse_operand(dst, src); |
| 2414 } | 2413 } |
| 2415 | 2414 |
| 2416 | 2415 |
| 2417 void Assembler::psrlq(XMMRegister reg, int8_t shift) { | 2416 void Assembler::psrlq(XMMRegister reg, int8_t shift) { |
| 2418 ASSERT(CpuFeatures::IsEnabled(SSE2)); | 2417 ASSERT(IsEnabled(SSE2)); |
| 2419 EnsureSpace ensure_space(this); | 2418 EnsureSpace ensure_space(this); |
| 2420 EMIT(0x66); | 2419 EMIT(0x66); |
| 2421 EMIT(0x0F); | 2420 EMIT(0x0F); |
| 2422 EMIT(0x73); | 2421 EMIT(0x73); |
| 2423 emit_sse_operand(edx, reg); // edx == 2 | 2422 emit_sse_operand(edx, reg); // edx == 2 |
| 2424 EMIT(shift); | 2423 EMIT(shift); |
| 2425 } | 2424 } |
| 2426 | 2425 |
| 2427 | 2426 |
| 2428 void Assembler::psrlq(XMMRegister dst, XMMRegister src) { | 2427 void Assembler::psrlq(XMMRegister dst, XMMRegister src) { |
| 2429 ASSERT(CpuFeatures::IsEnabled(SSE2)); | 2428 ASSERT(IsEnabled(SSE2)); |
| 2430 EnsureSpace ensure_space(this); | 2429 EnsureSpace ensure_space(this); |
| 2431 EMIT(0x66); | 2430 EMIT(0x66); |
| 2432 EMIT(0x0F); | 2431 EMIT(0x0F); |
| 2433 EMIT(0xD3); | 2432 EMIT(0xD3); |
| 2434 emit_sse_operand(dst, src); | 2433 emit_sse_operand(dst, src); |
| 2435 } | 2434 } |
| 2436 | 2435 |
| 2437 | 2436 |
| 2438 void Assembler::pshufd(XMMRegister dst, XMMRegister src, uint8_t shuffle) { | 2437 void Assembler::pshufd(XMMRegister dst, XMMRegister src, uint8_t shuffle) { |
| 2439 ASSERT(CpuFeatures::IsEnabled(SSE2)); | 2438 ASSERT(IsEnabled(SSE2)); |
| 2440 EnsureSpace ensure_space(this); | 2439 EnsureSpace ensure_space(this); |
| 2441 EMIT(0x66); | 2440 EMIT(0x66); |
| 2442 EMIT(0x0F); | 2441 EMIT(0x0F); |
| 2443 EMIT(0x70); | 2442 EMIT(0x70); |
| 2444 emit_sse_operand(dst, src); | 2443 emit_sse_operand(dst, src); |
| 2445 EMIT(shuffle); | 2444 EMIT(shuffle); |
| 2446 } | 2445 } |
| 2447 | 2446 |
| 2448 | 2447 |
| 2449 void Assembler::pextrd(const Operand& dst, XMMRegister src, int8_t offset) { | 2448 void Assembler::pextrd(const Operand& dst, XMMRegister src, int8_t offset) { |
| 2450 ASSERT(CpuFeatures::IsEnabled(SSE4_1)); | 2449 ASSERT(IsEnabled(SSE4_1)); |
| 2451 EnsureSpace ensure_space(this); | 2450 EnsureSpace ensure_space(this); |
| 2452 EMIT(0x66); | 2451 EMIT(0x66); |
| 2453 EMIT(0x0F); | 2452 EMIT(0x0F); |
| 2454 EMIT(0x3A); | 2453 EMIT(0x3A); |
| 2455 EMIT(0x16); | 2454 EMIT(0x16); |
| 2456 emit_sse_operand(src, dst); | 2455 emit_sse_operand(src, dst); |
| 2457 EMIT(offset); | 2456 EMIT(offset); |
| 2458 } | 2457 } |
| 2459 | 2458 |
| 2460 | 2459 |
| 2461 void Assembler::pinsrd(XMMRegister dst, const Operand& src, int8_t offset) { | 2460 void Assembler::pinsrd(XMMRegister dst, const Operand& src, int8_t offset) { |
| 2462 ASSERT(CpuFeatures::IsEnabled(SSE4_1)); | 2461 ASSERT(IsEnabled(SSE4_1)); |
| 2463 EnsureSpace ensure_space(this); | 2462 EnsureSpace ensure_space(this); |
| 2464 EMIT(0x66); | 2463 EMIT(0x66); |
| 2465 EMIT(0x0F); | 2464 EMIT(0x0F); |
| 2466 EMIT(0x3A); | 2465 EMIT(0x3A); |
| 2467 EMIT(0x22); | 2466 EMIT(0x22); |
| 2468 emit_sse_operand(dst, src); | 2467 emit_sse_operand(dst, src); |
| 2469 EMIT(offset); | 2468 EMIT(offset); |
| 2470 } | 2469 } |
| 2471 | 2470 |
| 2472 | 2471 |
| (...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2687 fprintf(coverage_log, "%s\n", file_line); | 2686 fprintf(coverage_log, "%s\n", file_line); |
| 2688 fflush(coverage_log); | 2687 fflush(coverage_log); |
| 2689 } | 2688 } |
| 2690 } | 2689 } |
| 2691 | 2690 |
| 2692 #endif | 2691 #endif |
| 2693 | 2692 |
| 2694 } } // namespace v8::internal | 2693 } } // namespace v8::internal |
| 2695 | 2694 |
| 2696 #endif // V8_TARGET_ARCH_IA32 | 2695 #endif // V8_TARGET_ARCH_IA32 |
| OLD | NEW |