Index: src/ia32/builtins-ia32.cc |
diff --git a/src/ia32/builtins-ia32.cc b/src/ia32/builtins-ia32.cc |
index 1cab549d3dc47d3b405b82ff5745c8ccd2fab6ef..31f56461eec9e230c2f3a5b4a9b55934873135c8 100644 |
--- a/src/ia32/builtins-ia32.cc |
+++ b/src/ia32/builtins-ia32.cc |
@@ -2618,6 +2618,44 @@ void Builtins::Generate_Construct(MacroAssembler* masm) { |
RelocInfo::CODE_TARGET); |
} |
+// static |
+void Builtins::Generate_AllocateInNewSpace(MacroAssembler* masm) { |
+ // ----------- S t a t e ------------- |
+ // -- edx : requested object size (untagged) |
+ // -- esp[0] : return address |
+ // ----------------------------------- |
+ Label runtime; |
+ __ Allocate(edx, eax, ecx, edi, &runtime, NO_ALLOCATION_FLAGS); |
+ __ Ret(); |
+ |
+ __ bind(&runtime); |
+ __ SmiTag(edx); |
+ __ PopReturnAddressTo(ecx); |
+ __ Push(edx); |
+ __ PushReturnAddressFrom(ecx); |
+ __ Move(esi, Smi::FromInt(0)); |
+ __ TailCallRuntime(Runtime::kAllocateInNewSpace); |
+} |
+ |
+// static |
+void Builtins::Generate_AllocateInOldSpace(MacroAssembler* masm) { |
+ // ----------- S t a t e ------------- |
+ // -- edx : requested object size (untagged) |
+ // -- esp[0] : return address |
+ // ----------------------------------- |
+ Label runtime; |
+ __ Allocate(edx, eax, ecx, edi, &runtime, PRETENURE); |
+ __ Ret(); |
+ |
+ __ bind(&runtime); |
+ __ SmiTag(edx); |
+ __ PopReturnAddressTo(ecx); |
+ __ Push(edx); |
+ __ Push(Smi::FromInt(AllocateTargetSpace::encode(OLD_SPACE))); |
+ __ PushReturnAddressFrom(ecx); |
+ __ Move(esi, Smi::FromInt(0)); |
+ __ TailCallRuntime(Runtime::kAllocateInTargetSpace); |
+} |
void Builtins::Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm) { |
// ----------- S t a t e ------------- |