Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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 "src/compiler/code-generator.h" | 5 #include "src/compiler/code-generator.h" |
| 6 | 6 |
| 7 #include <limits> | 7 #include <limits> |
| 8 | 8 |
| 9 #include "src/compilation-info.h" | 9 #include "src/compilation-info.h" |
| 10 #include "src/compiler/code-generator-impl.h" | 10 #include "src/compiler/code-generator-impl.h" |
| (...skipping 2217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2228 case kX64I32x4MaxU: { | 2228 case kX64I32x4MaxU: { |
| 2229 CpuFeatureScope sse_scope(masm(), SSE4_1); | 2229 CpuFeatureScope sse_scope(masm(), SSE4_1); |
| 2230 __ pmaxud(i.OutputSimd128Register(), i.InputSimd128Register(1)); | 2230 __ pmaxud(i.OutputSimd128Register(), i.InputSimd128Register(1)); |
| 2231 break; | 2231 break; |
| 2232 } | 2232 } |
| 2233 case kX64S128Zero: { | 2233 case kX64S128Zero: { |
| 2234 XMMRegister dst = i.OutputSimd128Register(); | 2234 XMMRegister dst = i.OutputSimd128Register(); |
| 2235 __ xorps(dst, dst); | 2235 __ xorps(dst, dst); |
| 2236 break; | 2236 break; |
| 2237 } | 2237 } |
| 2238 case kX64S32x4Select: { | 2238 case kX64I16x8Splat: { |
| 2239 XMMRegister dst = i.OutputSimd128Register(); | |
| 2240 __ movd(dst, i.InputRegister(0)); | |
| 2241 __ pshuflw(dst, dst, 0x0); | |
| 2242 __ pshufhw(dst, dst, 0x0); | |
| 2243 __ pshufd(dst, dst, 0x0); | |
| 2244 break; | |
| 2245 } | |
| 2246 case kX64I16x8ExtractLane: { | |
| 2247 CpuFeatureScope sse_scope(masm(), SSE4_1); | |
| 2248 Register dst = i.OutputRegister(); | |
| 2249 __ xorq(dst, dst); | |
|
bbudge
2017/04/17 17:34:06
Is this really needed? It seems like movsx (move w
gdeepti
2017/04/17 17:46:22
Not needed, left behind as a result of merge after
| |
| 2250 __ pextrw(dst, i.InputSimd128Register(0), i.InputInt8(1)); | |
| 2251 __ movsxwl(i.OutputRegister(), i.OutputRegister()); | |
|
bbudge
2017/04/17 17:34:06
nit: use dst here.
gdeepti
2017/04/17 17:46:22
Done.
| |
| 2252 break; | |
| 2253 } | |
| 2254 case kX64I16x8ReplaceLane: { | |
| 2255 CpuFeatureScope sse_scope(masm(), SSE4_1); | |
| 2256 if (instr->InputAt(2)->IsRegister()) { | |
| 2257 __ pinsrw(i.OutputSimd128Register(), i.InputRegister(2), | |
| 2258 i.InputInt8(1)); | |
| 2259 } else { | |
| 2260 __ pinsrw(i.OutputSimd128Register(), i.InputOperand(2), i.InputInt8(1)); | |
| 2261 } | |
| 2262 break; | |
| 2263 } | |
| 2264 case kX64I16x8Shl: { | |
| 2265 __ psllw(i.OutputSimd128Register(), i.InputInt8(1)); | |
| 2266 break; | |
| 2267 } | |
| 2268 case kX64I16x8ShrS: { | |
| 2269 __ psraw(i.OutputSimd128Register(), i.InputInt8(1)); | |
| 2270 break; | |
| 2271 } | |
| 2272 case kX64I16x8Add: { | |
| 2273 __ paddw(i.OutputSimd128Register(), i.InputSimd128Register(1)); | |
| 2274 break; | |
| 2275 } | |
| 2276 case kX64I16x8AddSaturateS: { | |
| 2277 __ paddsw(i.OutputSimd128Register(), i.InputSimd128Register(1)); | |
| 2278 break; | |
| 2279 } | |
| 2280 case kX64I16x8Sub: { | |
| 2281 __ psubw(i.OutputSimd128Register(), i.InputSimd128Register(1)); | |
| 2282 break; | |
| 2283 } | |
| 2284 case kX64I16x8SubSaturateS: { | |
| 2285 __ psubsw(i.OutputSimd128Register(), i.InputSimd128Register(1)); | |
| 2286 break; | |
| 2287 } | |
| 2288 case kX64I16x8Mul: { | |
| 2289 CpuFeatureScope sse_scope(masm(), SSE4_1); | |
| 2290 __ pmullw(i.OutputSimd128Register(), i.InputSimd128Register(1)); | |
| 2291 break; | |
| 2292 } | |
| 2293 case kX64I16x8MinS: { | |
| 2294 CpuFeatureScope sse_scope(masm(), SSE4_1); | |
| 2295 __ pminsw(i.OutputSimd128Register(), i.InputSimd128Register(1)); | |
| 2296 break; | |
| 2297 } | |
| 2298 case kX64I16x8MaxS: { | |
| 2299 CpuFeatureScope sse_scope(masm(), SSE4_1); | |
| 2300 __ pmaxsw(i.OutputSimd128Register(), i.InputSimd128Register(1)); | |
| 2301 break; | |
| 2302 } | |
| 2303 case kX64I16x8Eq: { | |
| 2304 __ pcmpeqw(i.OutputSimd128Register(), i.InputSimd128Register(1)); | |
| 2305 break; | |
| 2306 } | |
| 2307 case kX64I16x8Ne: { | |
| 2308 __ pcmpeqw(i.OutputSimd128Register(), i.InputSimd128Register(1)); | |
| 2309 __ pcmpeqw(kScratchDoubleReg, kScratchDoubleReg); | |
| 2310 __ pxor(i.OutputSimd128Register(), kScratchDoubleReg); | |
| 2311 break; | |
| 2312 } | |
| 2313 case kX64I16x8ShrU: { | |
| 2314 __ psrlw(i.OutputSimd128Register(), i.InputInt8(1)); | |
| 2315 break; | |
| 2316 } | |
| 2317 case kX64I16x8AddSaturateU: { | |
| 2318 __ paddusw(i.OutputSimd128Register(), i.InputSimd128Register(1)); | |
| 2319 break; | |
| 2320 } | |
| 2321 case kX64I16x8SubSaturateU: { | |
| 2322 __ psubusw(i.OutputSimd128Register(), i.InputSimd128Register(1)); | |
| 2323 break; | |
| 2324 } | |
| 2325 case kX64I16x8MinU: { | |
| 2326 CpuFeatureScope sse_scope(masm(), SSE4_1); | |
| 2327 __ pminuw(i.OutputSimd128Register(), i.InputSimd128Register(1)); | |
| 2328 break; | |
| 2329 } | |
| 2330 case kX64I16x8MaxU: { | |
| 2331 CpuFeatureScope sse_scope(masm(), SSE4_1); | |
| 2332 __ pmaxuw(i.OutputSimd128Register(), i.InputSimd128Register(1)); | |
| 2333 break; | |
| 2334 } | |
| 2335 case kX64S128Select: { | |
| 2239 // Mask used here is stored in dst. | 2336 // Mask used here is stored in dst. |
| 2240 XMMRegister dst = i.OutputSimd128Register(); | 2337 XMMRegister dst = i.OutputSimd128Register(); |
| 2241 __ movaps(kScratchDoubleReg, i.InputSimd128Register(1)); | 2338 __ movaps(kScratchDoubleReg, i.InputSimd128Register(1)); |
| 2242 __ xorps(kScratchDoubleReg, i.InputSimd128Register(2)); | 2339 __ xorps(kScratchDoubleReg, i.InputSimd128Register(2)); |
| 2243 __ andps(dst, kScratchDoubleReg); | 2340 __ andps(dst, kScratchDoubleReg); |
| 2244 __ xorps(dst, i.InputSimd128Register(2)); | 2341 __ xorps(dst, i.InputSimd128Register(2)); |
| 2245 break; | 2342 break; |
| 2246 } | 2343 } |
| 2247 case kCheckedLoadInt8: | 2344 case kCheckedLoadInt8: |
| 2248 ASSEMBLE_CHECKED_LOAD_INTEGER(movsxbl); | 2345 ASSEMBLE_CHECKED_LOAD_INTEGER(movsxbl); |
| (...skipping 752 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3001 int padding_size = last_lazy_deopt_pc_ + space_needed - current_pc; | 3098 int padding_size = last_lazy_deopt_pc_ + space_needed - current_pc; |
| 3002 __ Nop(padding_size); | 3099 __ Nop(padding_size); |
| 3003 } | 3100 } |
| 3004 } | 3101 } |
| 3005 | 3102 |
| 3006 #undef __ | 3103 #undef __ |
| 3007 | 3104 |
| 3008 } // namespace compiler | 3105 } // namespace compiler |
| 3009 } // namespace internal | 3106 } // namespace internal |
| 3010 } // namespace v8 | 3107 } // namespace v8 |
| OLD | NEW |