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 b52146b4d24a2c08d970a56951df08947d123ff4..8625b05be012232dcedb361c7409e3b490e46d6c 100644 |
--- a/src/compiler/ia32/code-generator-ia32.cc |
+++ b/src/compiler/ia32/code-generator-ia32.cc |
@@ -742,6 +742,18 @@ void CodeGenerator::AssembleArchInstruction(Instruction* instr) { |
case kSSEFloat32ToInt32: |
__ cvttss2si(i.OutputRegister(), i.InputOperand(0)); |
break; |
+ case kSSEFloat32ToUint32: { |
+ Label success; |
+ __ cvttss2si(i.OutputRegister(), i.InputOperand(0)); |
+ __ test(i.OutputRegister(), i.OutputRegister()); |
+ __ j(positive, &success); |
+ __ Move(kScratchDoubleReg, static_cast<float>(INT32_MIN)); |
+ __ addss(kScratchDoubleReg, i.InputOperand(0)); |
+ __ cvttss2si(i.OutputRegister(), kScratchDoubleReg); |
+ __ or_(i.OutputRegister(), Immediate(0x80000000)); |
+ __ bind(&success); |
+ break; |
+ } |
case kSSEFloat64ToInt32: |
__ cvttsd2si(i.OutputRegister(), i.InputOperand(0)); |
break; |