Index: src/ia32/code-stubs-ia32.cc |
diff --git a/src/ia32/code-stubs-ia32.cc b/src/ia32/code-stubs-ia32.cc |
index 4431944c1fe5facc5c5329776b42083ee2d7befa..2f2929f5cffa13a72e30f1cc52969a91aed73fe9 100644 |
--- a/src/ia32/code-stubs-ia32.cc |
+++ b/src/ia32/code-stubs-ia32.cc |
@@ -3192,6 +3192,25 @@ void ToNumberStub::Generate(MacroAssembler* masm) { |
} |
+void ToLengthStub::Generate(MacroAssembler* masm) { |
+ // The ToLength stub takes on argument in eax. |
+ Label not_smi, positive_smi; |
+ __ JumpIfNotSmi(eax, ¬_smi, Label::kNear); |
+ STATIC_ASSERT(kSmiTag == 0); |
+ __ test(eax, eax); |
+ __ j(greater_equal, &positive_smi, Label::kNear); |
+ __ xor_(eax, eax); |
+ __ bind(&positive_smi); |
+ __ Ret(); |
+ __ bind(¬_smi); |
+ |
+ __ pop(ecx); // Pop return address. |
+ __ push(eax); // Push argument. |
+ __ push(ecx); // Push return address. |
+ __ TailCallRuntime(Runtime::kToLength, 1, 1); |
+} |
+ |
+ |
void ToStringStub::Generate(MacroAssembler* masm) { |
// The ToString stub takes one argument in eax. |
Label is_number; |