| 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 19a76e075f5d077cbc2a0cde0cb129006b82fc61..447a8e3b1c75d7302a76c97ccf30543b44efbc57 100644
|
| --- a/src/compiler/ia32/code-generator-ia32.cc
|
| +++ b/src/compiler/ia32/code-generator-ia32.cc
|
| @@ -477,6 +477,14 @@ void CodeGenerator::AssembleArchInstruction(Instruction* instr) {
|
| case kSSEFloat32Sqrt:
|
| __ sqrtss(i.OutputDoubleRegister(), i.InputOperand(0));
|
| break;
|
| + case kSSEFloat32Abs: {
|
| + // TODO(bmeurer): Use 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 128-bit constants.
|
| // TODO(turbofan): Add AVX version with relaxed register constraints.
|
| @@ -531,6 +539,14 @@ void CodeGenerator::AssembleArchInstruction(Instruction* instr) {
|
| __ add(esp, Immediate(kDoubleSize));
|
| break;
|
| }
|
| + case kSSEFloat64Abs: {
|
| + // TODO(bmeurer): Use 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 128-bit constants.
|
| // TODO(turbofan): Add AVX version with relaxed register constraints.
|
|
|