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. |