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); |
Michael Starzinger
2013/03/05 09:31:11
White-space after the opening brace.
Sven Panne
2013/03/05 10:38:01
Done.
| |
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 |