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 de9710323b6d9b3d4800d46352a1b9bf96ffe22b..5a54e5637e9ad91d19a5e2d09e5a799b80dcc82d 100644 |
--- a/src/compiler/x64/code-generator-x64.cc |
+++ b/src/compiler/x64/code-generator-x64.cc |
@@ -407,6 +407,24 @@ void CodeGenerator::AssembleArchInstruction(Instruction* instr) { |
__ sqrtsd(i.OutputDoubleRegister(), i.InputOperand(0)); |
} |
break; |
+ case kSSEFloat64Floor: { |
+ CpuFeatureScope sse_scope(masm(), SSE4_1); |
+ __ roundsd(i.OutputDoubleRegister(), i.InputDoubleRegister(0), |
+ v8::internal::Assembler::kRoundDown); |
+ break; |
+ } |
+ case kSSEFloat64Ceil: { |
+ CpuFeatureScope sse_scope(masm(), SSE4_1); |
+ __ roundsd(i.OutputDoubleRegister(), i.InputDoubleRegister(0), |
+ v8::internal::Assembler::kRoundUp); |
+ break; |
+ } |
+ case kSSEFloat64RoundTruncate: { |
+ CpuFeatureScope sse_scope(masm(), SSE4_1); |
+ __ roundsd(i.OutputDoubleRegister(), i.InputDoubleRegister(0), |
+ v8::internal::Assembler::kRoundToZero); |
+ break; |
+ } |
case kSSECvtss2sd: |
if (instr->InputAt(0)->IsDoubleRegister()) { |
__ cvtss2sd(i.OutputDoubleRegister(), i.InputDoubleRegister(0)); |