Implement Lithium ARM support for ArrayLiteral.
TBR=kasperl@chromium.org Review URL: http://codereview.chromium.org/5988008 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@6165 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
806368bc92
commit
d44f3a0223
@ -2173,7 +2173,30 @@ void LCodeGen::DoCheckPrototypeMaps(LCheckPrototypeMaps* instr) {
|
||||
|
||||
|
||||
void LCodeGen::DoArrayLiteral(LArrayLiteral* instr) {
|
||||
Abort("DoArrayLiteral unimplemented.");
|
||||
__ ldr(r3, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset));
|
||||
__ ldr(r3, FieldMemOperand(r3, JSFunction::kLiteralsOffset));
|
||||
__ mov(r2, Operand(Smi::FromInt(instr->hydrogen()->literal_index())));
|
||||
__ mov(r1, Operand(instr->hydrogen()->constant_elements()));
|
||||
__ Push(r3, r2, r1);
|
||||
|
||||
// Pick the right runtime function or stub to call.
|
||||
int length = instr->hydrogen()->length();
|
||||
if (instr->hydrogen()->IsCopyOnWrite()) {
|
||||
ASSERT(instr->hydrogen()->depth() == 1);
|
||||
FastCloneShallowArrayStub::Mode mode =
|
||||
FastCloneShallowArrayStub::COPY_ON_WRITE_ELEMENTS;
|
||||
FastCloneShallowArrayStub stub(mode, length);
|
||||
CallCode(stub.GetCode(), RelocInfo::CODE_TARGET, instr);
|
||||
} else if (instr->hydrogen()->depth() > 1) {
|
||||
CallRuntime(Runtime::kCreateArrayLiteral, 3, instr);
|
||||
} else if (length > FastCloneShallowArrayStub::kMaximumClonedLength) {
|
||||
CallRuntime(Runtime::kCreateArrayLiteralShallow, 3, instr);
|
||||
} else {
|
||||
FastCloneShallowArrayStub::Mode mode =
|
||||
FastCloneShallowArrayStub::CLONE_ELEMENTS;
|
||||
FastCloneShallowArrayStub stub(mode, length);
|
||||
CallCode(stub.GetCode(), RelocInfo::CODE_TARGET, instr);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user