Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(457)

Side by Side Diff: src/arm/full-codegen-arm.cc

Issue 11151005: Improve FastCloneShallowArray/ObjectStubs with VFP copying on ARM (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 8 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 1572 matching lines...) Expand 10 before | Expand all | Expand 10 after
1583 : ObjectLiteral::kNoFlags; 1583 : ObjectLiteral::kNoFlags;
1584 flags |= expr->has_function() 1584 flags |= expr->has_function()
1585 ? ObjectLiteral::kHasFunction 1585 ? ObjectLiteral::kHasFunction
1586 : ObjectLiteral::kNoFlags; 1586 : ObjectLiteral::kNoFlags;
1587 __ mov(r0, Operand(Smi::FromInt(flags))); 1587 __ mov(r0, Operand(Smi::FromInt(flags)));
1588 __ Push(r3, r2, r1, r0); 1588 __ Push(r3, r2, r1, r0);
1589 int properties_count = constant_properties->length() / 2; 1589 int properties_count = constant_properties->length() / 2;
1590 if (expr->depth() > 1) { 1590 if (expr->depth() > 1) {
1591 __ CallRuntime(Runtime::kCreateObjectLiteral, 4); 1591 __ CallRuntime(Runtime::kCreateObjectLiteral, 4);
1592 } else if (flags != ObjectLiteral::kFastElements || 1592 } else if (flags != ObjectLiteral::kFastElements ||
1593 properties_count > FastCloneShallowObjectStub::kMaximumClonedProperties) { 1593 properties_count >
1594 FastCloneShallowObjectStub::MaximumClonedProperties()) {
1594 __ CallRuntime(Runtime::kCreateObjectLiteralShallow, 4); 1595 __ CallRuntime(Runtime::kCreateObjectLiteralShallow, 4);
1595 } else { 1596 } else {
1596 FastCloneShallowObjectStub stub(properties_count); 1597 FastCloneShallowObjectStub stub(properties_count);
1597 __ CallStub(&stub); 1598 __ CallStub(&stub);
1598 } 1599 }
1599 1600
1600 // If result_saved is true the result is on top of the stack. If 1601 // If result_saved is true the result is on top of the stack. If
1601 // result_saved is false the result is in r0. 1602 // result_saved is false the result is in r0.
1602 bool result_saved = false; 1603 bool result_saved = false;
1603 1604
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
1713 __ Push(r3, r2, r1); 1714 __ Push(r3, r2, r1);
1714 if (has_fast_elements && constant_elements_values->map() == 1715 if (has_fast_elements && constant_elements_values->map() ==
1715 isolate()->heap()->fixed_cow_array_map()) { 1716 isolate()->heap()->fixed_cow_array_map()) {
1716 FastCloneShallowArrayStub stub( 1717 FastCloneShallowArrayStub stub(
1717 FastCloneShallowArrayStub::COPY_ON_WRITE_ELEMENTS, length); 1718 FastCloneShallowArrayStub::COPY_ON_WRITE_ELEMENTS, length);
1718 __ CallStub(&stub); 1719 __ CallStub(&stub);
1719 __ IncrementCounter( 1720 __ IncrementCounter(
1720 isolate()->counters()->cow_arrays_created_stub(), 1, r1, r2); 1721 isolate()->counters()->cow_arrays_created_stub(), 1, r1, r2);
1721 } else if (expr->depth() > 1) { 1722 } else if (expr->depth() > 1) {
1722 __ CallRuntime(Runtime::kCreateArrayLiteral, 3); 1723 __ CallRuntime(Runtime::kCreateArrayLiteral, 3);
1723 } else if (length > FastCloneShallowArrayStub::kMaximumClonedLength) { 1724 } else if (length > FastCloneShallowArrayStub::MaximumClonedLength()) {
1724 __ CallRuntime(Runtime::kCreateArrayLiteralShallow, 3); 1725 __ CallRuntime(Runtime::kCreateArrayLiteralShallow, 3);
1725 } else { 1726 } else {
1726 ASSERT(IsFastSmiOrObjectElementsKind(constant_elements_kind) || 1727 ASSERT(IsFastSmiOrObjectElementsKind(constant_elements_kind) ||
1727 FLAG_smi_only_arrays); 1728 FLAG_smi_only_arrays);
1728 FastCloneShallowArrayStub::Mode mode = has_fast_elements 1729 FastCloneShallowArrayStub::Mode mode = has_fast_elements
1729 ? FastCloneShallowArrayStub::CLONE_ELEMENTS 1730 ? FastCloneShallowArrayStub::CLONE_ELEMENTS
1730 : FastCloneShallowArrayStub::CLONE_ANY_ELEMENTS; 1731 : FastCloneShallowArrayStub::CLONE_ANY_ELEMENTS;
1731 FastCloneShallowArrayStub stub(mode, length); 1732 FastCloneShallowArrayStub stub(mode, length);
1732 __ CallStub(&stub); 1733 __ CallStub(&stub);
1733 } 1734 }
(...skipping 2850 matching lines...) Expand 10 before | Expand all | Expand 10 after
4584 *context_length = 0; 4585 *context_length = 0;
4585 return previous_; 4586 return previous_;
4586 } 4587 }
4587 4588
4588 4589
4589 #undef __ 4590 #undef __
4590 4591
4591 } } // namespace v8::internal 4592 } } // namespace v8::internal
4592 4593
4593 #endif // V8_TARGET_ARCH_ARM 4594 #endif // V8_TARGET_ARCH_ARM
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698