Index: src/ia32/lithium-codegen-ia32.cc |
diff --git a/src/ia32/lithium-codegen-ia32.cc b/src/ia32/lithium-codegen-ia32.cc |
index 4b9a62dbd863bc16aae785f89546119d9e983235..2e5fa56347105e9f97142dae783b058bd4406283 100644 |
--- a/src/ia32/lithium-codegen-ia32.cc |
+++ b/src/ia32/lithium-codegen-ia32.cc |
@@ -4586,7 +4586,13 @@ void LCodeGen::DoDeferredNumberTagI(LInstruction* instr, |
CpuFeatures::Scope feature_scope(SSE2); |
__ LoadUint32(xmm0, reg, xmm1); |
} else { |
- UNREACHABLE(); |
+ // There's no fild variant for unsigned values, so zero-extend to a 64-bit |
+ // int manually. |
+ __ push(Immediate(0)); |
+ __ push(reg); |
+ __ fild_d(Operand(esp, 0)); |
+ __ pop(reg); |
+ __ pop(reg); |
} |
} |
@@ -4638,10 +4644,10 @@ void LCodeGen::DoNumberTagD(LNumberTagD* instr) { |
}; |
Register reg = ToRegister(instr->result()); |
- Register tmp = ToRegister(instr->temp()); |
DeferredNumberTagD* deferred = new(zone()) DeferredNumberTagD(this, instr); |
if (FLAG_inline_new) { |
+ Register tmp = ToRegister(instr->temp()); |
__ AllocateHeapNumber(reg, tmp, no_reg, deferred->entry()); |
} else { |
__ jmp(deferred->entry()); |