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

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

Issue 2120963002: [fullcode][mips][mips64][ppc][s390] Avoid trashing of a home object when doing a keyed store to a... (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 5 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
« no previous file with comments | « no previous file | src/full-codegen/mips64/full-codegen-mips64.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #if V8_TARGET_ARCH_MIPS 5 #if V8_TARGET_ARCH_MIPS
6 6
7 // Note on Mips implementation: 7 // Note on Mips implementation:
8 // 8 //
9 // The result_register() for mips is the 'v0' register, which is defined 9 // The result_register() for mips is the 'v0' register, which is defined
10 // by the ABI to contain function return values. However, the first 10 // by the ABI to contain function return values. However, the first
(...skipping 1674 matching lines...) Expand 10 before | Expand all | Expand 10 after
1685 VisitForAccumulatorValue( 1685 VisitForAccumulatorValue(
1686 property->obj()->AsSuperPropertyReference()->home_object()); 1686 property->obj()->AsSuperPropertyReference()->home_object());
1687 PushOperand(result_register()); 1687 PushOperand(result_register());
1688 if (expr->is_compound()) { 1688 if (expr->is_compound()) {
1689 const Register scratch = a1; 1689 const Register scratch = a1;
1690 __ lw(scratch, MemOperand(sp, kPointerSize)); 1690 __ lw(scratch, MemOperand(sp, kPointerSize));
1691 PushOperands(scratch, result_register()); 1691 PushOperands(scratch, result_register());
1692 } 1692 }
1693 break; 1693 break;
1694 case KEYED_SUPER_PROPERTY: { 1694 case KEYED_SUPER_PROPERTY: {
1695 const Register scratch = a1;
1696 VisitForStackValue( 1695 VisitForStackValue(
1697 property->obj()->AsSuperPropertyReference()->this_var()); 1696 property->obj()->AsSuperPropertyReference()->this_var());
1698 VisitForAccumulatorValue( 1697 VisitForStackValue(
1699 property->obj()->AsSuperPropertyReference()->home_object()); 1698 property->obj()->AsSuperPropertyReference()->home_object());
1700 __ Move(scratch, result_register());
1701 VisitForAccumulatorValue(property->key()); 1699 VisitForAccumulatorValue(property->key());
1702 PushOperands(scratch, result_register()); 1700 PushOperand(result_register());
1703 if (expr->is_compound()) { 1701 if (expr->is_compound()) {
1704 const Register scratch1 = t0; 1702 const Register scratch1 = t0;
1703 const Register scratch2 = a1;
1705 __ lw(scratch1, MemOperand(sp, 2 * kPointerSize)); 1704 __ lw(scratch1, MemOperand(sp, 2 * kPointerSize));
1706 PushOperands(scratch1, scratch, result_register()); 1705 __ lw(scratch2, MemOperand(sp, 1 * kPointerSize));
1706 PushOperands(scratch1, scratch2, result_register());
1707 } 1707 }
1708 break; 1708 break;
1709 } 1709 }
1710 case KEYED_PROPERTY: 1710 case KEYED_PROPERTY:
1711 // We need the key and receiver on both the stack and in v0 and a1. 1711 // We need the key and receiver on both the stack and in v0 and a1.
1712 if (expr->is_compound()) { 1712 if (expr->is_compound()) {
1713 VisitForStackValue(property->obj()); 1713 VisitForStackValue(property->obj());
1714 VisitForStackValue(property->key()); 1714 VisitForStackValue(property->key());
1715 __ lw(LoadDescriptor::ReceiverRegister(), 1715 __ lw(LoadDescriptor::ReceiverRegister(),
1716 MemOperand(sp, 1 * kPointerSize)); 1716 MemOperand(sp, 1 * kPointerSize));
(...skipping 2083 matching lines...) Expand 10 before | Expand all | Expand 10 after
3800 reinterpret_cast<uint32_t>( 3800 reinterpret_cast<uint32_t>(
3801 isolate->builtins()->OnStackReplacement()->entry())); 3801 isolate->builtins()->OnStackReplacement()->entry()));
3802 return ON_STACK_REPLACEMENT; 3802 return ON_STACK_REPLACEMENT;
3803 } 3803 }
3804 3804
3805 3805
3806 } // namespace internal 3806 } // namespace internal
3807 } // namespace v8 3807 } // namespace v8
3808 3808
3809 #endif // V8_TARGET_ARCH_MIPS 3809 #endif // V8_TARGET_ARCH_MIPS
OLDNEW
« no previous file with comments | « no previous file | src/full-codegen/mips64/full-codegen-mips64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698