| 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 98ec629b4d702ba2d8d033a34e830ec6b3cc2939..443f1b1efdd4676d601da77cc02c2f5e0971cc6a 100644
|
| --- a/src/compiler/x64/code-generator-x64.cc
|
| +++ b/src/compiler/x64/code-generator-x64.cc
|
| @@ -726,6 +726,14 @@ void CodeGenerator::AssembleArchInstruction(Instruction* instr) {
|
| case kSSEFloat32Div:
|
| ASSEMBLE_SSE_BINOP(divss);
|
| break;
|
| + case kSSEFloat32Abs: {
|
| + // TODO(bmeurer): Use RIP relative 128-bit constants.
|
| + // TODO(turbofan): Add AVX version with relaxed register constraints.
|
| + __ pcmpeqd(kScratchDoubleReg, kScratchDoubleReg);
|
| + __ psrlq(kScratchDoubleReg, 33);
|
| + __ andps(i.OutputDoubleRegister(), kScratchDoubleReg);
|
| + break;
|
| + }
|
| case kSSEFloat32Neg: {
|
| // TODO(bmeurer): Use RIP relative 128-bit constants.
|
| // TODO(turbofan): Add AVX version with relaxed register constraints.
|
| @@ -799,6 +807,14 @@ void CodeGenerator::AssembleArchInstruction(Instruction* instr) {
|
| case kSSEFloat64Min:
|
| ASSEMBLE_SSE_BINOP(minsd);
|
| break;
|
| + case kSSEFloat64Abs: {
|
| + // TODO(bmeurer): Use RIP relative 128-bit constants.
|
| + // TODO(turbofan): Add AVX version with relaxed register constraints.
|
| + __ pcmpeqd(kScratchDoubleReg, kScratchDoubleReg);
|
| + __ psrlq(kScratchDoubleReg, 1);
|
| + __ andpd(i.OutputDoubleRegister(), kScratchDoubleReg);
|
| + break;
|
| + }
|
| case kSSEFloat64Neg: {
|
| // TODO(bmeurer): Use RIP relative 128-bit constants.
|
| // TODO(turbofan): Add AVX version with relaxed register constraints.
|
|
|