Revision: 6199
Author: [email protected]
Date: Thu Jan 6 04:53:59 2011
Log: Implement DoFunctionLiteral on ARM.
Review URL: http://codereview.chromium.org/6112001
http://code.google.com/p/v8/source/detail?r=6199
Modified:
/branches/bleeding_edge/src/arm/lithium-codegen-arm.cc
=======================================
--- /branches/bleeding_edge/src/arm/lithium-codegen-arm.cc Thu Jan 6
04:21:06 2011
+++ /branches/bleeding_edge/src/arm/lithium-codegen-arm.cc Thu Jan 6
04:53:59 2011
@@ -2321,7 +2321,23 @@
void LCodeGen::DoFunctionLiteral(LFunctionLiteral* instr) {
- Abort("DoFunctionLiteral unimplemented.");
+ // Use the fast case closure allocation code that allocates in new
+ // space for nested functions that don't need literals cloning.
+ Handle<SharedFunctionInfo> shared_info = instr->shared_info();
+ bool pretenure = !instr->hydrogen()->pretenure();
+ if (shared_info->num_literals() == 0 && !pretenure) {
+ FastNewClosureStub stub;
+ __ mov(r1, Operand(shared_info));
+ __ push(r1);
+ CallCode(stub.GetCode(), RelocInfo::CODE_TARGET, instr);
+ } else {
+ __ mov(r2, Operand(shared_info));
+ __ mov(r1, Operand(pretenure
+ ? Factory::true_value()
+ : Factory::false_value()));
+ __ Push(cp, r2, r1);
+ CallRuntime(Runtime::kNewClosure, 3, instr);
+ }
}
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev