| Index: src/compiler/x64/code-generator-x64.cc
|
| diff --git a/src/compiler/x64/code-generator-x64.cc b/src/compiler/x64/code-generator-x64.cc
|
| index 72dc78f24b53cf3c1a30d95bb3b85b071dc38873..86c547f460b6803ddd3dc75438b7ecb5204f6061 100644
|
| --- a/src/compiler/x64/code-generator-x64.cc
|
| +++ b/src/compiler/x64/code-generator-x64.cc
|
| @@ -2006,6 +2006,19 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction(
|
| __ Movsd(operand, i.InputDoubleRegister(index));
|
| }
|
| break;
|
| + case kX64Movdqu: {
|
| + CpuFeatureScope sse_scope(masm(), SSSE3);
|
| + EmitOOLTrapIfNeeded(zone(), this, opcode, instr->InputCount(), i,
|
| + __ pc_offset());
|
| + if (instr->HasOutput()) {
|
| + __ movdqu(i.OutputSimd128Register(), i.MemoryOperand());
|
| + } else {
|
| + size_t index = 0;
|
| + Operand operand = i.MemoryOperand(&index);
|
| + __ movdqu(operand, i.InputSimd128Register(index));
|
| + }
|
| + break;
|
| + }
|
| case kX64BitcastFI:
|
| if (instr->InputAt(0)->IsFPStackSlot()) {
|
| __ movl(i.OutputRegister(), i.InputOperand(0));
|
| @@ -2187,6 +2200,11 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction(
|
| __ paddd(i.OutputSimd128Register(), i.InputSimd128Register(1));
|
| break;
|
| }
|
| + case kX64I32x4AddHoriz: {
|
| + CpuFeatureScope sse_scope(masm(), SSSE3);
|
| + __ phaddd(i.OutputSimd128Register(), i.InputSimd128Register(1));
|
| + break;
|
| + }
|
| case kX64I32x4Sub: {
|
| __ psubd(i.OutputSimd128Register(), i.InputSimd128Register(1));
|
| break;
|
| @@ -2276,6 +2294,11 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction(
|
| __ paddsw(i.OutputSimd128Register(), i.InputSimd128Register(1));
|
| break;
|
| }
|
| + case kX64I16x8AddHoriz: {
|
| + CpuFeatureScope sse_scope(masm(), SSSE3);
|
| + __ phaddw(i.OutputSimd128Register(), i.InputSimd128Register(1));
|
| + break;
|
| + }
|
| case kX64I16x8Sub: {
|
| __ psubw(i.OutputSimd128Register(), i.InputSimd128Register(1));
|
| break;
|
| @@ -2410,6 +2433,24 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction(
|
| __ pmaxub(i.OutputSimd128Register(), i.InputSimd128Register(1));
|
| break;
|
| }
|
| + case kX64S128And: {
|
| + __ pand(i.OutputSimd128Register(), i.InputSimd128Register(1));
|
| + break;
|
| + }
|
| + case kX64S128Or: {
|
| + __ por(i.OutputSimd128Register(), i.InputSimd128Register(1));
|
| + break;
|
| + }
|
| + case kX64S128Xor: {
|
| + __ pxor(i.OutputSimd128Register(), i.InputSimd128Register(1));
|
| + break;
|
| + }
|
| + case kX64S128Not: {
|
| + XMMRegister dst = i.OutputSimd128Register();
|
| + __ pcmpeqd(dst, dst);
|
| + __ pxor(dst, i.InputSimd128Register(1));
|
| + break;
|
| + }
|
| case kX64S128Select: {
|
| // Mask used here is stored in dst.
|
| XMMRegister dst = i.OutputSimd128Register();
|
|
|