Chromium Code Reviews| Index: src/ia32/code-stubs-ia32.cc |
| =================================================================== |
| --- src/ia32/code-stubs-ia32.cc (revision 6513) |
| +++ src/ia32/code-stubs-ia32.cc (working copy) |
| @@ -38,6 +38,29 @@ |
| namespace internal { |
| #define __ ACCESS_MASM(masm) |
| + |
| +void ToNumberStub::Generate(MacroAssembler* masm) { |
| + // The ToNumber stub takes one argument in eax. |
| + // It is assumed to be already smi-checked. |
| + NearLabel check_heap_number, call_builtin; |
| + __ test(eax, Immediate(kSmiTagMask)); |
| + __ j(not_zero, &check_heap_number); |
| + __ ret(0); |
|
William Hesse
2011/01/28 14:12:28
Ret() is an alternative to ret(0)
|
| + |
| + __ bind(&check_heap_number); |
| + __ mov(ebx, FieldOperand(eax, HeapObject::kMapOffset)); |
| + __ cmp(Operand(ebx), Immediate(Factory::heap_number_map())); |
| + __ j(not_equal, &call_builtin); |
| + __ ret(0); |
| + |
| + __ bind(&call_builtin); |
| + __ pop(ecx); // Pop return address. |
| + __ push(eax); |
| + __ push(ecx); // Push return address. |
| + __ InvokeBuiltin(Builtins::TO_NUMBER, JUMP_FUNCTION); |
| +} |
| + |
| + |
| void FastNewClosureStub::Generate(MacroAssembler* masm) { |
| // Create a new closure from the given function info in new |
| // space. Set the context to the current context in esi. |