Chromium Code Reviews| Index: src/compiler/ia32/code-generator-ia32.cc |
| diff --git a/src/compiler/ia32/code-generator-ia32.cc b/src/compiler/ia32/code-generator-ia32.cc |
| index 1aba6b103f2dd9520b1d2e764180acd0a4138249..cdcb09a4888eebcb209818bad003df994647fe39 100644 |
| --- a/src/compiler/ia32/code-generator-ia32.cc |
| +++ b/src/compiler/ia32/code-generator-ia32.cc |
| @@ -1900,6 +1900,32 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
| __ Pextrd(i.OutputRegister(), i.InputSimd128Register(0), i.InputInt8(1)); |
| break; |
| } |
| + case kIA32I16x8Splat: { |
|
bbudge
2017/06/13 22:08:21
Follow the order in wasm-opcodes.h.
|
| + XMMRegister dst = i.OutputSimd128Register(); |
| + __ Movd(dst, i.InputOperand(0)); |
| + __ Pshuflw(dst, dst, 0x0); |
| + __ Pshufd(dst, dst, 0x0); |
| + break; |
| + } |
| + case kIA32I16x8ExtractLane: { |
| + Register dst = i.OutputRegister(); |
| + __ Pextrw(dst, i.InputSimd128Register(0), i.InputInt8(1)); |
| + __ movsx_w(dst, dst); |
| + break; |
| + } |
| + case kIA32I8x16Splat: { |
| + XMMRegister dst = i.OutputSimd128Register(); |
| + __ Movd(dst, i.InputOperand(0)); |
| + __ Pxor(kScratchDoubleReg, kScratchDoubleReg); |
| + __ Pshufb(dst, kScratchDoubleReg); |
| + break; |
| + } |
| + case kIA32I8x16ExtractLane: { |
| + Register dst = i.OutputRegister(); |
| + __ Pextrb(dst, i.InputSimd128Register(0), i.InputInt8(1)); |
| + __ movsx_b(dst, dst); |
| + break; |
| + } |
| case kSSEI32x4ReplaceLane: { |
| CpuFeatureScope sse_scope(masm(), SSE4_1); |
| __ pinsrd(i.OutputSimd128Register(), i.InputOperand(2), i.InputInt8(1)); |
| @@ -1913,6 +1939,15 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
| __ psubd(i.OutputSimd128Register(), i.InputOperand(1)); |
| break; |
| } |
| + case kSSEI16x8ReplaceLane: { |
| + __ pinsrw(i.OutputSimd128Register(), i.InputOperand(2), i.InputInt8(1)); |
| + break; |
| + } |
| + case kSSEI8x16ReplaceLane: { |
| + CpuFeatureScope sse_scope(masm(), SSE4_1); |
| + __ pinsrb(i.OutputSimd128Register(), i.InputOperand(2), i.InputInt8(1)); |
| + break; |
| + } |
| case kAVXI32x4ReplaceLane: { |
| CpuFeatureScope avx_scope(masm(), AVX); |
| __ vpinsrd(i.OutputSimd128Register(), i.InputSimd128Register(0), |
| @@ -1931,6 +1966,18 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
| i.InputOperand(1)); |
| break; |
| } |
| + case kAVXI16x8ReplaceLane: { |
| + CpuFeatureScope avx_scope(masm(), AVX); |
| + __ vpinsrw(i.OutputSimd128Register(), i.InputSimd128Register(0), |
| + i.InputOperand(2), i.InputInt8(1)); |
| + break; |
| + } |
| + case kAVXI8x16ReplaceLane: { |
| + CpuFeatureScope avx_scope(masm(), AVX); |
| + __ vpinsrb(i.OutputSimd128Register(), i.InputSimd128Register(0), |
| + i.InputOperand(2), i.InputInt8(1)); |
| + break; |
| + } |
| case kCheckedLoadInt8: |
| ASSEMBLE_CHECKED_LOAD_INTEGER(movsx_b); |
| break; |