OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 #if V8_TARGET_ARCH_IA32 | 5 #if V8_TARGET_ARCH_IA32 |
6 | 6 |
7 #include "src/base/bits.h" | 7 #include "src/base/bits.h" |
8 #include "src/base/division-by-constant.h" | 8 #include "src/base/division-by-constant.h" |
9 #include "src/base/utils/random-number-generator.h" | 9 #include "src/base/utils/random-number-generator.h" |
10 #include "src/bootstrapper.h" | 10 #include "src/bootstrapper.h" |
(...skipping 2118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2129 pop(eax); | 2129 pop(eax); |
2130 } else { | 2130 } else { |
2131 push(Immediate(upper)); | 2131 push(Immediate(upper)); |
2132 push(Immediate(lower)); | 2132 push(Immediate(lower)); |
2133 movsd(dst, Operand(esp, 0)); | 2133 movsd(dst, Operand(esp, 0)); |
2134 add(esp, Immediate(kDoubleSize)); | 2134 add(esp, Immediate(kDoubleSize)); |
2135 } | 2135 } |
2136 } | 2136 } |
2137 } | 2137 } |
2138 | 2138 |
| 2139 void MacroAssembler::Pxor(XMMRegister dst, const Operand& src) { |
| 2140 if (CpuFeatures::IsSupported(AVX)) { |
| 2141 CpuFeatureScope scope(this, AVX); |
| 2142 vpxor(dst, dst, src); |
| 2143 } else { |
| 2144 pxor(dst, src); |
| 2145 } |
| 2146 } |
| 2147 |
| 2148 void MacroAssembler::Pshuflw(XMMRegister dst, const Operand& src, |
| 2149 uint8_t shuffle) { |
| 2150 if (CpuFeatures::IsSupported(AVX)) { |
| 2151 CpuFeatureScope scope(this, AVX); |
| 2152 vpshuflw(dst, src, shuffle); |
| 2153 } else { |
| 2154 pshuflw(dst, src, shuffle); |
| 2155 } |
| 2156 } |
| 2157 |
2139 void MacroAssembler::Pshufd(XMMRegister dst, const Operand& src, | 2158 void MacroAssembler::Pshufd(XMMRegister dst, const Operand& src, |
2140 uint8_t shuffle) { | 2159 uint8_t shuffle) { |
2141 if (CpuFeatures::IsSupported(AVX)) { | 2160 if (CpuFeatures::IsSupported(AVX)) { |
2142 CpuFeatureScope scope(this, AVX); | 2161 CpuFeatureScope scope(this, AVX); |
2143 vpshufd(dst, src, shuffle); | 2162 vpshufd(dst, src, shuffle); |
2144 } else { | 2163 } else { |
2145 pshufd(dst, src, shuffle); | 2164 pshufd(dst, src, shuffle); |
2146 } | 2165 } |
2147 } | 2166 } |
2148 | 2167 |
| 2168 void MacroAssembler::Pshufb(XMMRegister dst, const Operand& src) { |
| 2169 if (CpuFeatures::IsSupported(AVX)) { |
| 2170 CpuFeatureScope scope(this, AVX); |
| 2171 vpshufb(dst, dst, src); |
| 2172 return; |
| 2173 } |
| 2174 if (CpuFeatures::IsSupported(SSSE3)) { |
| 2175 CpuFeatureScope sse_scope(this, SSSE3); |
| 2176 pshufb(dst, src); |
| 2177 return; |
| 2178 } |
| 2179 UNREACHABLE(); |
| 2180 } |
| 2181 |
| 2182 void MacroAssembler::Pextrb(Register dst, XMMRegister src, int8_t imm8) { |
| 2183 if (CpuFeatures::IsSupported(AVX)) { |
| 2184 CpuFeatureScope scope(this, AVX); |
| 2185 vpextrb(dst, src, imm8); |
| 2186 return; |
| 2187 } |
| 2188 if (CpuFeatures::IsSupported(SSE4_1)) { |
| 2189 CpuFeatureScope sse_scope(this, SSE4_1); |
| 2190 pextrb(dst, src, imm8); |
| 2191 return; |
| 2192 } |
| 2193 UNREACHABLE(); |
| 2194 } |
| 2195 |
| 2196 void MacroAssembler::Pextrw(Register dst, XMMRegister src, int8_t imm8) { |
| 2197 if (CpuFeatures::IsSupported(AVX)) { |
| 2198 CpuFeatureScope scope(this, AVX); |
| 2199 vpextrw(dst, src, imm8); |
| 2200 return; |
| 2201 } |
| 2202 if (CpuFeatures::IsSupported(SSE4_1)) { |
| 2203 CpuFeatureScope sse_scope(this, SSE4_1); |
| 2204 pextrw(dst, src, imm8); |
| 2205 return; |
| 2206 } |
| 2207 UNREACHABLE(); |
| 2208 } |
| 2209 |
2149 void MacroAssembler::Pextrd(Register dst, XMMRegister src, int8_t imm8) { | 2210 void MacroAssembler::Pextrd(Register dst, XMMRegister src, int8_t imm8) { |
2150 if (imm8 == 0) { | 2211 if (imm8 == 0) { |
2151 Movd(dst, src); | 2212 Movd(dst, src); |
2152 return; | 2213 return; |
2153 } | 2214 } |
2154 if (CpuFeatures::IsSupported(AVX)) { | 2215 if (CpuFeatures::IsSupported(AVX)) { |
2155 CpuFeatureScope scope(this, AVX); | 2216 CpuFeatureScope scope(this, AVX); |
2156 vpextrd(dst, src, imm8); | 2217 vpextrd(dst, src, imm8); |
2157 return; | 2218 return; |
2158 } | 2219 } |
(...skipping 642 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2801 mov(eax, dividend); | 2862 mov(eax, dividend); |
2802 shr(eax, 31); | 2863 shr(eax, 31); |
2803 add(edx, eax); | 2864 add(edx, eax); |
2804 } | 2865 } |
2805 | 2866 |
2806 | 2867 |
2807 } // namespace internal | 2868 } // namespace internal |
2808 } // namespace v8 | 2869 } // namespace v8 |
2809 | 2870 |
2810 #endif // V8_TARGET_ARCH_IA32 | 2871 #endif // V8_TARGET_ARCH_IA32 |
OLD | NEW |