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 38f7d4b0c100f51c1e464786cb57f35df22d18a6..37ad39dd4eb79fb7be5d0b93c25d2aef58f60b37 100644 |
--- a/src/compiler/ia32/code-generator-ia32.cc |
+++ b/src/compiler/ia32/code-generator-ia32.cc |
@@ -315,9 +315,22 @@ void CodeGenerator::AssembleArchInstruction(Instruction* instr) { |
case kSSEFloat64ToInt32: |
__ cvttsd2si(i.OutputRegister(), i.InputOperand(0)); |
break; |
+ case kSSEFloat64ToUint32: { |
+ XMMRegister scratch = xmm0; |
+ __ Move(scratch, -2147483648.0); |
+ // TODO(turbofan): IA32 SSE subsd() should take an operand. |
+ __ addsd(scratch, i.InputDoubleRegister(0)); |
+ __ cvttsd2si(i.OutputRegister(), scratch); |
+ __ add(i.OutputRegister(), Immediate(0x80000000)); |
+ break; |
+ } |
case kSSEInt32ToFloat64: |
__ cvtsi2sd(i.OutputDoubleRegister(), i.InputOperand(0)); |
break; |
+ case kSSEUint32ToFloat64: |
+ // TODO(turbofan): IA32 SSE LoadUint32() should take an operand. |
+ __ LoadUint32(i.OutputDoubleRegister(), i.InputRegister(0)); |
+ break; |
case kSSELoad: |
__ movsd(i.OutputDoubleRegister(), i.MemoryOperand()); |
break; |