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

Side by Side Diff: src/compiler/x64/code-generator-x64.cc

Issue 2829483002: [wasm] Implement first set of SIMD I8x16 ops (Closed)
Patch Set: Created 3 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
« no previous file with comments | « src/compiler/instruction-selector.cc ('k') | src/compiler/x64/instruction-codes-x64.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 2313 matching lines...) Expand 10 before | Expand all | Expand 10 after
2324 case kX64I16x8MinU: { 2324 case kX64I16x8MinU: {
2325 CpuFeatureScope sse_scope(masm(), SSE4_1); 2325 CpuFeatureScope sse_scope(masm(), SSE4_1);
2326 __ pminuw(i.OutputSimd128Register(), i.InputSimd128Register(1)); 2326 __ pminuw(i.OutputSimd128Register(), i.InputSimd128Register(1));
2327 break; 2327 break;
2328 } 2328 }
2329 case kX64I16x8MaxU: { 2329 case kX64I16x8MaxU: {
2330 CpuFeatureScope sse_scope(masm(), SSE4_1); 2330 CpuFeatureScope sse_scope(masm(), SSE4_1);
2331 __ pmaxuw(i.OutputSimd128Register(), i.InputSimd128Register(1)); 2331 __ pmaxuw(i.OutputSimd128Register(), i.InputSimd128Register(1));
2332 break; 2332 break;
2333 } 2333 }
2334 case kX64I8x16Splat: {
2335 CpuFeatureScope sse_scope(masm(), SSSE3);
2336 XMMRegister dst = i.OutputSimd128Register();
2337 __ movd(dst, i.InputRegister(0));
2338 __ xorps(kScratchDoubleReg, kScratchDoubleReg);
2339 __ pshufb(dst, kScratchDoubleReg);
2340 break;
2341 }
2342 case kX64I8x16ExtractLane: {
2343 CpuFeatureScope sse_scope(masm(), SSE4_1);
2344 Register dst = i.OutputRegister();
2345 __ pextrb(dst, i.InputSimd128Register(0), i.InputInt8(1));
2346 __ movsxbl(dst, dst);
2347 break;
2348 }
2349 case kX64I8x16ReplaceLane: {
2350 CpuFeatureScope sse_scope(masm(), SSE4_1);
2351 if (instr->InputAt(2)->IsRegister()) {
2352 __ pinsrb(i.OutputSimd128Register(), i.InputRegister(2),
2353 i.InputInt8(1));
2354 } else {
2355 __ pinsrb(i.OutputSimd128Register(), i.InputOperand(2), i.InputInt8(1));
2356 }
2357 break;
2358 }
2359 case kX64I8x16Add: {
2360 __ paddb(i.OutputSimd128Register(), i.InputSimd128Register(1));
2361 break;
2362 }
2363 case kX64I8x16AddSaturateS: {
2364 __ paddsb(i.OutputSimd128Register(), i.InputSimd128Register(1));
2365 break;
2366 }
2367 case kX64I8x16Sub: {
2368 __ psubb(i.OutputSimd128Register(), i.InputSimd128Register(1));
2369 break;
2370 }
2371 case kX64I8x16SubSaturateS: {
2372 __ psubsb(i.OutputSimd128Register(), i.InputSimd128Register(1));
2373 break;
2374 }
2375 case kX64I8x16MinS: {
2376 CpuFeatureScope sse_scope(masm(), SSE4_1);
2377 __ pminsb(i.OutputSimd128Register(), i.InputSimd128Register(1));
2378 break;
2379 }
2380 case kX64I8x16MaxS: {
2381 CpuFeatureScope sse_scope(masm(), SSE4_1);
2382 __ pmaxsb(i.OutputSimd128Register(), i.InputSimd128Register(1));
2383 break;
2384 }
2385 case kX64I8x16Eq: {
2386 __ pcmpeqb(i.OutputSimd128Register(), i.InputSimd128Register(1));
2387 break;
2388 }
2389 case kX64I8x16Ne: {
2390 __ pcmpeqb(i.OutputSimd128Register(), i.InputSimd128Register(1));
2391 __ pcmpeqb(kScratchDoubleReg, kScratchDoubleReg);
2392 __ pxor(i.OutputSimd128Register(), kScratchDoubleReg);
2393 break;
2394 }
2395 case kX64I8x16AddSaturateU: {
2396 __ paddusb(i.OutputSimd128Register(), i.InputSimd128Register(1));
2397 break;
2398 }
2399 case kX64I8x16SubSaturateU: {
2400 __ psubusb(i.OutputSimd128Register(), i.InputSimd128Register(1));
2401 break;
2402 }
2403 case kX64I8x16MinU: {
2404 CpuFeatureScope sse_scope(masm(), SSE4_1);
2405 __ pminub(i.OutputSimd128Register(), i.InputSimd128Register(1));
2406 break;
2407 }
2408 case kX64I8x16MaxU: {
2409 CpuFeatureScope sse_scope(masm(), SSE4_1);
2410 __ pmaxub(i.OutputSimd128Register(), i.InputSimd128Register(1));
2411 break;
2412 }
2334 case kX64S128Select: { 2413 case kX64S128Select: {
2335 // Mask used here is stored in dst. 2414 // Mask used here is stored in dst.
2336 XMMRegister dst = i.OutputSimd128Register(); 2415 XMMRegister dst = i.OutputSimd128Register();
2337 __ movaps(kScratchDoubleReg, i.InputSimd128Register(1)); 2416 __ movaps(kScratchDoubleReg, i.InputSimd128Register(1));
2338 __ xorps(kScratchDoubleReg, i.InputSimd128Register(2)); 2417 __ xorps(kScratchDoubleReg, i.InputSimd128Register(2));
2339 __ andps(dst, kScratchDoubleReg); 2418 __ andps(dst, kScratchDoubleReg);
2340 __ xorps(dst, i.InputSimd128Register(2)); 2419 __ xorps(dst, i.InputSimd128Register(2));
2341 break; 2420 break;
2342 } 2421 }
2343 case kCheckedLoadInt8: 2422 case kCheckedLoadInt8:
(...skipping 753 matching lines...) Expand 10 before | Expand all | Expand 10 after
3097 int padding_size = last_lazy_deopt_pc_ + space_needed - current_pc; 3176 int padding_size = last_lazy_deopt_pc_ + space_needed - current_pc;
3098 __ Nop(padding_size); 3177 __ Nop(padding_size);
3099 } 3178 }
3100 } 3179 }
3101 3180
3102 #undef __ 3181 #undef __
3103 3182
3104 } // namespace compiler 3183 } // namespace compiler
3105 } // namespace internal 3184 } // namespace internal
3106 } // namespace v8 3185 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/instruction-selector.cc ('k') | src/compiler/x64/instruction-codes-x64.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698