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

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

Issue 2849463003: [wasm] Implement Generic S128 Load/Store, logical ops and Horizontal add (Closed)
Patch Set: Zvi's review Created 3 years, 7 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 1988 matching lines...) Expand 10 before | Expand all | Expand 10 after
1999 EmitOOLTrapIfNeeded(zone(), this, opcode, instr->InputCount(), i, 1999 EmitOOLTrapIfNeeded(zone(), this, opcode, instr->InputCount(), i,
2000 __ pc_offset()); 2000 __ pc_offset());
2001 if (instr->HasOutput()) { 2001 if (instr->HasOutput()) {
2002 __ Movsd(i.OutputDoubleRegister(), i.MemoryOperand()); 2002 __ Movsd(i.OutputDoubleRegister(), i.MemoryOperand());
2003 } else { 2003 } else {
2004 size_t index = 0; 2004 size_t index = 0;
2005 Operand operand = i.MemoryOperand(&index); 2005 Operand operand = i.MemoryOperand(&index);
2006 __ Movsd(operand, i.InputDoubleRegister(index)); 2006 __ Movsd(operand, i.InputDoubleRegister(index));
2007 } 2007 }
2008 break; 2008 break;
2009 case kX64Movdqu: {
2010 CpuFeatureScope sse_scope(masm(), SSSE3);
2011 EmitOOLTrapIfNeeded(zone(), this, opcode, instr->InputCount(), i,
2012 __ pc_offset());
2013 if (instr->HasOutput()) {
2014 __ movdqu(i.OutputSimd128Register(), i.MemoryOperand());
2015 } else {
2016 size_t index = 0;
2017 Operand operand = i.MemoryOperand(&index);
2018 __ movdqu(operand, i.InputSimd128Register(index));
2019 }
2020 break;
2021 }
2009 case kX64BitcastFI: 2022 case kX64BitcastFI:
2010 if (instr->InputAt(0)->IsFPStackSlot()) { 2023 if (instr->InputAt(0)->IsFPStackSlot()) {
2011 __ movl(i.OutputRegister(), i.InputOperand(0)); 2024 __ movl(i.OutputRegister(), i.InputOperand(0));
2012 } else { 2025 } else {
2013 __ Movd(i.OutputRegister(), i.InputDoubleRegister(0)); 2026 __ Movd(i.OutputRegister(), i.InputDoubleRegister(0));
2014 } 2027 }
2015 break; 2028 break;
2016 case kX64BitcastDL: 2029 case kX64BitcastDL:
2017 if (instr->InputAt(0)->IsFPStackSlot()) { 2030 if (instr->InputAt(0)->IsFPStackSlot()) {
2018 __ movq(i.OutputRegister(), i.InputOperand(0)); 2031 __ movq(i.OutputRegister(), i.InputOperand(0));
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
2180 break; 2193 break;
2181 } 2194 }
2182 case kX64I32x4ShrS: { 2195 case kX64I32x4ShrS: {
2183 __ psrad(i.OutputSimd128Register(), i.InputInt8(1)); 2196 __ psrad(i.OutputSimd128Register(), i.InputInt8(1));
2184 break; 2197 break;
2185 } 2198 }
2186 case kX64I32x4Add: { 2199 case kX64I32x4Add: {
2187 __ paddd(i.OutputSimd128Register(), i.InputSimd128Register(1)); 2200 __ paddd(i.OutputSimd128Register(), i.InputSimd128Register(1));
2188 break; 2201 break;
2189 } 2202 }
2203 case kX64I32x4AddHoriz: {
2204 CpuFeatureScope sse_scope(masm(), SSSE3);
2205 __ phaddd(i.OutputSimd128Register(), i.InputSimd128Register(1));
2206 break;
2207 }
2190 case kX64I32x4Sub: { 2208 case kX64I32x4Sub: {
2191 __ psubd(i.OutputSimd128Register(), i.InputSimd128Register(1)); 2209 __ psubd(i.OutputSimd128Register(), i.InputSimd128Register(1));
2192 break; 2210 break;
2193 } 2211 }
2194 case kX64I32x4Mul: { 2212 case kX64I32x4Mul: {
2195 CpuFeatureScope sse_scope(masm(), SSE4_1); 2213 CpuFeatureScope sse_scope(masm(), SSE4_1);
2196 __ pmulld(i.OutputSimd128Register(), i.InputSimd128Register(1)); 2214 __ pmulld(i.OutputSimd128Register(), i.InputSimd128Register(1));
2197 break; 2215 break;
2198 } 2216 }
2199 case kX64I32x4MinS: { 2217 case kX64I32x4MinS: {
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
2269 break; 2287 break;
2270 } 2288 }
2271 case kX64I16x8Add: { 2289 case kX64I16x8Add: {
2272 __ paddw(i.OutputSimd128Register(), i.InputSimd128Register(1)); 2290 __ paddw(i.OutputSimd128Register(), i.InputSimd128Register(1));
2273 break; 2291 break;
2274 } 2292 }
2275 case kX64I16x8AddSaturateS: { 2293 case kX64I16x8AddSaturateS: {
2276 __ paddsw(i.OutputSimd128Register(), i.InputSimd128Register(1)); 2294 __ paddsw(i.OutputSimd128Register(), i.InputSimd128Register(1));
2277 break; 2295 break;
2278 } 2296 }
2297 case kX64I16x8AddHoriz: {
2298 CpuFeatureScope sse_scope(masm(), SSSE3);
2299 __ phaddw(i.OutputSimd128Register(), i.InputSimd128Register(1));
2300 break;
2301 }
2279 case kX64I16x8Sub: { 2302 case kX64I16x8Sub: {
2280 __ psubw(i.OutputSimd128Register(), i.InputSimd128Register(1)); 2303 __ psubw(i.OutputSimd128Register(), i.InputSimd128Register(1));
2281 break; 2304 break;
2282 } 2305 }
2283 case kX64I16x8SubSaturateS: { 2306 case kX64I16x8SubSaturateS: {
2284 __ psubsw(i.OutputSimd128Register(), i.InputSimd128Register(1)); 2307 __ psubsw(i.OutputSimd128Register(), i.InputSimd128Register(1));
2285 break; 2308 break;
2286 } 2309 }
2287 case kX64I16x8Mul: { 2310 case kX64I16x8Mul: {
2288 CpuFeatureScope sse_scope(masm(), SSE4_1); 2311 CpuFeatureScope sse_scope(masm(), SSE4_1);
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
2403 case kX64I8x16MinU: { 2426 case kX64I8x16MinU: {
2404 CpuFeatureScope sse_scope(masm(), SSE4_1); 2427 CpuFeatureScope sse_scope(masm(), SSE4_1);
2405 __ pminub(i.OutputSimd128Register(), i.InputSimd128Register(1)); 2428 __ pminub(i.OutputSimd128Register(), i.InputSimd128Register(1));
2406 break; 2429 break;
2407 } 2430 }
2408 case kX64I8x16MaxU: { 2431 case kX64I8x16MaxU: {
2409 CpuFeatureScope sse_scope(masm(), SSE4_1); 2432 CpuFeatureScope sse_scope(masm(), SSE4_1);
2410 __ pmaxub(i.OutputSimd128Register(), i.InputSimd128Register(1)); 2433 __ pmaxub(i.OutputSimd128Register(), i.InputSimd128Register(1));
2411 break; 2434 break;
2412 } 2435 }
2436 case kX64S128And: {
2437 __ pand(i.OutputSimd128Register(), i.InputSimd128Register(1));
2438 break;
2439 }
2440 case kX64S128Or: {
2441 __ por(i.OutputSimd128Register(), i.InputSimd128Register(1));
2442 break;
2443 }
2444 case kX64S128Xor: {
2445 __ pxor(i.OutputSimd128Register(), i.InputSimd128Register(1));
2446 break;
2447 }
2448 case kX64S128Not: {
2449 XMMRegister dst = i.OutputSimd128Register();
2450 __ pcmpeqd(dst, dst);
2451 __ pxor(dst, i.InputSimd128Register(1));
2452 break;
2453 }
2413 case kX64S128Select: { 2454 case kX64S128Select: {
2414 // Mask used here is stored in dst. 2455 // Mask used here is stored in dst.
2415 XMMRegister dst = i.OutputSimd128Register(); 2456 XMMRegister dst = i.OutputSimd128Register();
2416 __ movaps(kScratchDoubleReg, i.InputSimd128Register(1)); 2457 __ movaps(kScratchDoubleReg, i.InputSimd128Register(1));
2417 __ xorps(kScratchDoubleReg, i.InputSimd128Register(2)); 2458 __ xorps(kScratchDoubleReg, i.InputSimd128Register(2));
2418 __ andps(dst, kScratchDoubleReg); 2459 __ andps(dst, kScratchDoubleReg);
2419 __ xorps(dst, i.InputSimd128Register(2)); 2460 __ xorps(dst, i.InputSimd128Register(2));
2420 break; 2461 break;
2421 } 2462 }
2422 case kCheckedLoadInt8: 2463 case kCheckedLoadInt8:
(...skipping 753 matching lines...) Expand 10 before | Expand all | Expand 10 after
3176 int padding_size = last_lazy_deopt_pc_ + space_needed - current_pc; 3217 int padding_size = last_lazy_deopt_pc_ + space_needed - current_pc;
3177 __ Nop(padding_size); 3218 __ Nop(padding_size);
3178 } 3219 }
3179 } 3220 }
3180 3221
3181 #undef __ 3222 #undef __
3182 3223
3183 } // namespace compiler 3224 } // namespace compiler
3184 } // namespace internal 3225 } // namespace internal
3185 } // namespace v8 3226 } // 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