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

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

Issue 638623002: Keyed stores to super where key is a name. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: All platforms + CR feedback Created 6 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
« no previous file with comments | « no previous file | src/arm64/full-codegen-arm64.cc » ('j') | src/full-codegen.h » ('J')
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 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #if V8_TARGET_ARCH_ARM 7 #if V8_TARGET_ARCH_ARM
8 8
9 #include "src/code-factory.h" 9 #include "src/code-factory.h"
10 #include "src/code-stubs.h" 10 #include "src/code-stubs.h"
(...skipping 1865 matching lines...) Expand 10 before | Expand all | Expand 10 after
1876 context()->Plug(r0); 1876 context()->Plug(r0);
1877 } 1877 }
1878 } 1878 }
1879 1879
1880 1880
1881 void FullCodeGenerator::VisitAssignment(Assignment* expr) { 1881 void FullCodeGenerator::VisitAssignment(Assignment* expr) {
1882 DCHECK(expr->target()->IsValidReferenceExpression()); 1882 DCHECK(expr->target()->IsValidReferenceExpression());
1883 1883
1884 Comment cmnt(masm_, "[ Assignment"); 1884 Comment cmnt(masm_, "[ Assignment");
1885 1885
1886 // Left-hand side can only be a property, a global or a (parameter or local)
1887 // slot.
1888 enum LhsKind {
1889 VARIABLE,
1890 NAMED_PROPERTY,
1891 KEYED_PROPERTY,
1892 NAMED_SUPER_PROPERTY
1893 };
1894 LhsKind assign_type = VARIABLE;
1895 Property* property = expr->target()->AsProperty(); 1886 Property* property = expr->target()->AsProperty();
1896 if (property != NULL) { 1887 LhsKind assign_type = GetAssignType(property);
1897 assign_type = (property->key()->IsPropertyName())
1898 ? (property->IsSuperAccess() ? NAMED_SUPER_PROPERTY
1899 : NAMED_PROPERTY)
1900 : KEYED_PROPERTY;
1901 }
1902 1888
1903 // Evaluate LHS expression. 1889 // Evaluate LHS expression.
1904 switch (assign_type) { 1890 switch (assign_type) {
1905 case VARIABLE: 1891 case VARIABLE:
1906 // Nothing to do here. 1892 // Nothing to do here.
1907 break; 1893 break;
1908 case NAMED_PROPERTY: 1894 case NAMED_PROPERTY:
1909 if (expr->is_compound()) { 1895 if (expr->is_compound()) {
1910 // We need the receiver both on the stack and in the register. 1896 // We need the receiver both on the stack and in the register.
1911 VisitForStackValue(property->obj()); 1897 VisitForStackValue(property->obj());
1912 __ ldr(LoadDescriptor::ReceiverRegister(), MemOperand(sp, 0)); 1898 __ ldr(LoadDescriptor::ReceiverRegister(), MemOperand(sp, 0));
1913 } else { 1899 } else {
1914 VisitForStackValue(property->obj()); 1900 VisitForStackValue(property->obj());
1915 } 1901 }
1916 break; 1902 break;
1917 case NAMED_SUPER_PROPERTY: 1903 case NAMED_SUPER_PROPERTY:
1918 VisitForStackValue(property->obj()->AsSuperReference()->this_var()); 1904 VisitForStackValue(property->obj()->AsSuperReference()->this_var());
1919 EmitLoadHomeObject(property->obj()->AsSuperReference()); 1905 EmitLoadHomeObject(property->obj()->AsSuperReference());
1920 __ Push(result_register()); 1906 __ Push(result_register());
1921 if (expr->is_compound()) { 1907 if (expr->is_compound()) {
1922 const Register scratch = r1; 1908 const Register scratch = r1;
1923 __ ldr(scratch, MemOperand(sp, kPointerSize)); 1909 __ ldr(scratch, MemOperand(sp, kPointerSize));
1924 __ Push(scratch); 1910 __ Push(scratch);
1925 __ Push(result_register()); 1911 __ Push(result_register());
1926 } 1912 }
1927 break; 1913 break;
1914 case KEYED_SUPER_PROPERTY:
1915 VisitForStackValue(property->obj()->AsSuperReference()->this_var());
1916 EmitLoadHomeObject(property->obj()->AsSuperReference());
1917 __ Push(result_register());
1918 VisitForAccumulatorValue(property->key());
1919 __ Push(result_register());
1920 if (expr->is_compound()) {
1921 const Register scratch = r1;
1922 __ ldr(scratch, MemOperand(sp, 2 * kPointerSize));
1923 __ Push(scratch);
1924 __ ldr(scratch, MemOperand(sp, 2 * kPointerSize));
1925 __ Push(scratch);
1926 __ Push(result_register());
1927 }
1928 break;
1928 case KEYED_PROPERTY: 1929 case KEYED_PROPERTY:
1929 if (expr->is_compound()) { 1930 if (expr->is_compound()) {
1930 VisitForStackValue(property->obj()); 1931 VisitForStackValue(property->obj());
1931 VisitForStackValue(property->key()); 1932 VisitForStackValue(property->key());
1932 __ ldr(LoadDescriptor::ReceiverRegister(), 1933 __ ldr(LoadDescriptor::ReceiverRegister(),
1933 MemOperand(sp, 1 * kPointerSize)); 1934 MemOperand(sp, 1 * kPointerSize));
1934 __ ldr(LoadDescriptor::NameRegister(), MemOperand(sp, 0)); 1935 __ ldr(LoadDescriptor::NameRegister(), MemOperand(sp, 0));
1935 } else { 1936 } else {
1936 VisitForStackValue(property->obj()); 1937 VisitForStackValue(property->obj());
1937 VisitForStackValue(property->key()); 1938 VisitForStackValue(property->key());
(...skipping 11 matching lines...) Expand all
1949 PrepareForBailout(expr->target(), TOS_REG); 1950 PrepareForBailout(expr->target(), TOS_REG);
1950 break; 1951 break;
1951 case NAMED_PROPERTY: 1952 case NAMED_PROPERTY:
1952 EmitNamedPropertyLoad(property); 1953 EmitNamedPropertyLoad(property);
1953 PrepareForBailoutForId(property->LoadId(), TOS_REG); 1954 PrepareForBailoutForId(property->LoadId(), TOS_REG);
1954 break; 1955 break;
1955 case NAMED_SUPER_PROPERTY: 1956 case NAMED_SUPER_PROPERTY:
1956 EmitNamedSuperPropertyLoad(property); 1957 EmitNamedSuperPropertyLoad(property);
1957 PrepareForBailoutForId(property->LoadId(), TOS_REG); 1958 PrepareForBailoutForId(property->LoadId(), TOS_REG);
1958 break; 1959 break;
1960 case KEYED_SUPER_PROPERTY:
1961 EmitKeyedSuperPropertyLoad(property);
1962 PrepareForBailoutForId(property->LoadId(), TOS_REG);
1963 break;
1959 case KEYED_PROPERTY: 1964 case KEYED_PROPERTY:
1960 EmitKeyedPropertyLoad(property); 1965 EmitKeyedPropertyLoad(property);
1961 PrepareForBailoutForId(property->LoadId(), TOS_REG); 1966 PrepareForBailoutForId(property->LoadId(), TOS_REG);
1962 break; 1967 break;
1963 } 1968 }
1964 } 1969 }
1965 1970
1966 Token::Value op = expr->binary_op(); 1971 Token::Value op = expr->binary_op();
1967 __ push(r0); // Left operand goes on the stack. 1972 __ push(r0); // Left operand goes on the stack.
1968 VisitForAccumulatorValue(expr->value()); 1973 VisitForAccumulatorValue(expr->value());
(...skipping 30 matching lines...) Expand all
1999 PrepareForBailoutForId(expr->AssignmentId(), TOS_REG); 2004 PrepareForBailoutForId(expr->AssignmentId(), TOS_REG);
2000 context()->Plug(r0); 2005 context()->Plug(r0);
2001 break; 2006 break;
2002 case NAMED_PROPERTY: 2007 case NAMED_PROPERTY:
2003 EmitNamedPropertyAssignment(expr); 2008 EmitNamedPropertyAssignment(expr);
2004 break; 2009 break;
2005 case NAMED_SUPER_PROPERTY: 2010 case NAMED_SUPER_PROPERTY:
2006 EmitNamedSuperPropertyStore(property); 2011 EmitNamedSuperPropertyStore(property);
2007 context()->Plug(r0); 2012 context()->Plug(r0);
2008 break; 2013 break;
2014 case KEYED_SUPER_PROPERTY:
2015 EmitKeyedSuperPropertyStore(property);
2016 context()->Plug(r0);
2017 break;
2009 case KEYED_PROPERTY: 2018 case KEYED_PROPERTY:
2010 EmitKeyedPropertyAssignment(expr); 2019 EmitKeyedPropertyAssignment(expr);
2011 break; 2020 break;
2012 } 2021 }
2013 } 2022 }
2014 2023
2015 2024
2016 void FullCodeGenerator::VisitYield(Yield* expr) { 2025 void FullCodeGenerator::VisitYield(Yield* expr) {
2017 Comment cmnt(masm_, "[ Yield"); 2026 Comment cmnt(masm_, "[ Yield");
2018 // Evaluate yielded value first; the initial iterator definition depends on 2027 // Evaluate yielded value first; the initial iterator definition depends on
(...skipping 625 matching lines...) Expand 10 before | Expand all | Expand 10 after
2644 2653
2645 2654
2646 void FullCodeGenerator::EmitNamedSuperPropertyStore(Property* prop) { 2655 void FullCodeGenerator::EmitNamedSuperPropertyStore(Property* prop) {
2647 // Assignment to named property of super. 2656 // Assignment to named property of super.
2648 // r0 : value 2657 // r0 : value
2649 // stack : receiver ('this'), home_object 2658 // stack : receiver ('this'), home_object
2650 DCHECK(prop != NULL); 2659 DCHECK(prop != NULL);
2651 Literal* key = prop->key()->AsLiteral(); 2660 Literal* key = prop->key()->AsLiteral();
2652 DCHECK(key != NULL); 2661 DCHECK(key != NULL);
2653 2662
2663 __ Push(key->value());
2654 __ Push(r0); 2664 __ Push(r0);
2655 __ Push(key->value());
2656 __ CallRuntime((strict_mode() == STRICT ? Runtime::kStoreToSuper_Strict 2665 __ CallRuntime((strict_mode() == STRICT ? Runtime::kStoreToSuper_Strict
2657 : Runtime::kStoreToSuper_Sloppy), 2666 : Runtime::kStoreToSuper_Sloppy),
2658 4); 2667 4);
2659 } 2668 }
2660 2669
2661 2670
2671 void FullCodeGenerator::EmitKeyedSuperPropertyStore(Property* prop) {
2672 // Assignment to named property of super.
2673 // r0 : value
2674 // stack : receiver ('this'), home_object, key
2675 DCHECK(prop != NULL);
2676
2677 __ Push(r0);
2678 __ CallRuntime((strict_mode() == STRICT ? Runtime::kStoreKeyedToSuper_Strict
2679 : Runtime::kStoreKeyedToSuper_Sloppy),
2680 4);
2681 }
2682
2683
2662 void FullCodeGenerator::EmitKeyedPropertyAssignment(Assignment* expr) { 2684 void FullCodeGenerator::EmitKeyedPropertyAssignment(Assignment* expr) {
2663 // Assignment to a property, using a keyed store IC. 2685 // Assignment to a property, using a keyed store IC.
2664 2686
2665 // Record source code position before IC call. 2687 // Record source code position before IC call.
2666 SetSourcePosition(expr->position()); 2688 SetSourcePosition(expr->position());
2667 __ Pop(StoreDescriptor::ReceiverRegister(), StoreDescriptor::NameRegister()); 2689 __ Pop(StoreDescriptor::ReceiverRegister(), StoreDescriptor::NameRegister());
2668 DCHECK(StoreDescriptor::ValueRegister().is(r0)); 2690 DCHECK(StoreDescriptor::ValueRegister().is(r0));
2669 2691
2670 Handle<Code> ic = CodeFactory::KeyedStoreIC(isolate(), strict_mode()).code(); 2692 Handle<Code> ic = CodeFactory::KeyedStoreIC(isolate(), strict_mode()).code();
2671 CallIC(ic, expr->AssignmentFeedbackId()); 2693 CallIC(ic, expr->AssignmentFeedbackId());
(...skipping 1751 matching lines...) Expand 10 before | Expand all | Expand 10 after
4423 } 4445 }
4424 } 4446 }
4425 4447
4426 4448
4427 void FullCodeGenerator::VisitCountOperation(CountOperation* expr) { 4449 void FullCodeGenerator::VisitCountOperation(CountOperation* expr) {
4428 DCHECK(expr->expression()->IsValidReferenceExpression()); 4450 DCHECK(expr->expression()->IsValidReferenceExpression());
4429 4451
4430 Comment cmnt(masm_, "[ CountOperation"); 4452 Comment cmnt(masm_, "[ CountOperation");
4431 SetSourcePosition(expr->position()); 4453 SetSourcePosition(expr->position());
4432 4454
4433 // Expression can only be a property, a global or a (parameter or local)
4434 // slot.
4435 enum LhsKind {
4436 VARIABLE,
4437 NAMED_PROPERTY,
4438 KEYED_PROPERTY,
4439 NAMED_SUPER_PROPERTY
4440 };
4441 LhsKind assign_type = VARIABLE;
4442 Property* prop = expr->expression()->AsProperty(); 4455 Property* prop = expr->expression()->AsProperty();
4443 // In case of a property we use the uninitialized expression context 4456 LhsKind assign_type = GetAssignType(prop);
4444 // of the key to detect a named property.
4445 if (prop != NULL) {
4446 assign_type =
4447 (prop->key()->IsPropertyName())
4448 ? (prop->IsSuperAccess() ? NAMED_SUPER_PROPERTY : NAMED_PROPERTY)
4449 : KEYED_PROPERTY;
4450 }
4451 4457
4452 // Evaluate expression and get value. 4458 // Evaluate expression and get value.
4453 if (assign_type == VARIABLE) { 4459 if (assign_type == VARIABLE) {
4454 DCHECK(expr->expression()->AsVariableProxy()->var() != NULL); 4460 DCHECK(expr->expression()->AsVariableProxy()->var() != NULL);
4455 AccumulatorValueContext context(this); 4461 AccumulatorValueContext context(this);
4456 EmitVariableLoad(expr->expression()->AsVariableProxy()); 4462 EmitVariableLoad(expr->expression()->AsVariableProxy());
4457 } else { 4463 } else {
4458 // Reserve space for result of postfix operation. 4464 // Reserve space for result of postfix operation.
4459 if (expr->is_postfix() && !context()->IsEffect()) { 4465 if (expr->is_postfix() && !context()->IsEffect()) {
4460 __ mov(ip, Operand(Smi::FromInt(0))); 4466 __ mov(ip, Operand(Smi::FromInt(0)));
4461 __ push(ip); 4467 __ push(ip);
4462 } 4468 }
4463 if (assign_type == NAMED_PROPERTY) { 4469 switch (assign_type) {
4464 // Put the object both on the stack and in the register. 4470 case NAMED_PROPERTY: {
4465 VisitForStackValue(prop->obj()); 4471 // Put the object both on the stack and in the register.
4466 __ ldr(LoadDescriptor::ReceiverRegister(), MemOperand(sp, 0)); 4472 VisitForStackValue(prop->obj());
4467 EmitNamedPropertyLoad(prop); 4473 __ ldr(LoadDescriptor::ReceiverRegister(), MemOperand(sp, 0));
4468 } else if (assign_type == NAMED_SUPER_PROPERTY) { 4474 EmitNamedPropertyLoad(prop);
4469 VisitForStackValue(prop->obj()->AsSuperReference()->this_var()); 4475 break;
4470 EmitLoadHomeObject(prop->obj()->AsSuperReference()); 4476 }
4471 __ Push(result_register()); 4477
4472 const Register scratch = r1; 4478 case NAMED_SUPER_PROPERTY: {
4473 __ ldr(scratch, MemOperand(sp, kPointerSize)); 4479 VisitForStackValue(prop->obj()->AsSuperReference()->this_var());
4474 __ Push(scratch); 4480 EmitLoadHomeObject(prop->obj()->AsSuperReference());
4475 __ Push(result_register()); 4481 __ Push(result_register());
4476 EmitNamedSuperPropertyLoad(prop); 4482 const Register scratch = r1;
4477 } else { 4483 __ ldr(scratch, MemOperand(sp, kPointerSize));
4478 VisitForStackValue(prop->obj()); 4484 __ Push(scratch);
4479 VisitForStackValue(prop->key()); 4485 __ Push(result_register());
4480 __ ldr(LoadDescriptor::ReceiverRegister(), 4486 EmitNamedSuperPropertyLoad(prop);
4481 MemOperand(sp, 1 * kPointerSize)); 4487 break;
4482 __ ldr(LoadDescriptor::NameRegister(), MemOperand(sp, 0)); 4488 }
4483 EmitKeyedPropertyLoad(prop); 4489
4490 case KEYED_SUPER_PROPERTY: {
4491 VisitForStackValue(prop->obj()->AsSuperReference()->this_var());
4492 EmitLoadHomeObject(prop->obj()->AsSuperReference());
4493 __ Push(result_register());
4494 VisitForAccumulatorValue(prop->key());
4495 __ Push(result_register());
4496 const Register scratch = r1;
4497 __ ldr(scratch, MemOperand(sp, 2 * kPointerSize));
4498 __ Push(scratch);
4499 __ ldr(scratch, MemOperand(sp, 2 * kPointerSize));
4500 __ Push(scratch);
4501 __ Push(result_register());
4502 EmitKeyedSuperPropertyLoad(prop);
4503 break;
4504 }
4505
4506 case KEYED_PROPERTY: {
4507 VisitForStackValue(prop->obj());
4508 VisitForStackValue(prop->key());
4509 __ ldr(LoadDescriptor::ReceiverRegister(),
4510 MemOperand(sp, 1 * kPointerSize));
4511 __ ldr(LoadDescriptor::NameRegister(), MemOperand(sp, 0));
4512 EmitKeyedPropertyLoad(prop);
4513 break;
4514 }
4515
4516 case VARIABLE:
4517 UNREACHABLE();
4484 } 4518 }
4485 } 4519 }
4486 4520
4487 // We need a second deoptimization point after loading the value 4521 // We need a second deoptimization point after loading the value
4488 // in case evaluating the property load my have a side effect. 4522 // in case evaluating the property load my have a side effect.
4489 if (assign_type == VARIABLE) { 4523 if (assign_type == VARIABLE) {
4490 PrepareForBailout(expr->expression(), TOS_REG); 4524 PrepareForBailout(expr->expression(), TOS_REG);
4491 } else { 4525 } else {
4492 PrepareForBailoutForId(prop->LoadId(), TOS_REG); 4526 PrepareForBailoutForId(prop->LoadId(), TOS_REG);
4493 } 4527 }
(...skipping 19 matching lines...) Expand all
4513 break; 4547 break;
4514 case NAMED_PROPERTY: 4548 case NAMED_PROPERTY:
4515 __ str(r0, MemOperand(sp, kPointerSize)); 4549 __ str(r0, MemOperand(sp, kPointerSize));
4516 break; 4550 break;
4517 case NAMED_SUPER_PROPERTY: 4551 case NAMED_SUPER_PROPERTY:
4518 __ str(r0, MemOperand(sp, 2 * kPointerSize)); 4552 __ str(r0, MemOperand(sp, 2 * kPointerSize));
4519 break; 4553 break;
4520 case KEYED_PROPERTY: 4554 case KEYED_PROPERTY:
4521 __ str(r0, MemOperand(sp, 2 * kPointerSize)); 4555 __ str(r0, MemOperand(sp, 2 * kPointerSize));
4522 break; 4556 break;
4557 case KEYED_SUPER_PROPERTY:
4558 __ str(r0, MemOperand(sp, 3 * kPointerSize));
4559 break;
4523 } 4560 }
4524 } 4561 }
4525 } 4562 }
4526 4563
4527 __ add(r0, r0, Operand(Smi::FromInt(count_value)), SetCC); 4564 __ add(r0, r0, Operand(Smi::FromInt(count_value)), SetCC);
4528 __ b(vc, &done); 4565 __ b(vc, &done);
4529 // Call stub. Undo operation first. 4566 // Call stub. Undo operation first.
4530 __ sub(r0, r0, Operand(Smi::FromInt(count_value))); 4567 __ sub(r0, r0, Operand(Smi::FromInt(count_value)));
4531 __ jmp(&stub_call); 4568 __ jmp(&stub_call);
4532 __ bind(&slow); 4569 __ bind(&slow);
(...skipping 13 matching lines...) Expand all
4546 break; 4583 break;
4547 case NAMED_PROPERTY: 4584 case NAMED_PROPERTY:
4548 __ str(r0, MemOperand(sp, kPointerSize)); 4585 __ str(r0, MemOperand(sp, kPointerSize));
4549 break; 4586 break;
4550 case NAMED_SUPER_PROPERTY: 4587 case NAMED_SUPER_PROPERTY:
4551 __ str(r0, MemOperand(sp, 2 * kPointerSize)); 4588 __ str(r0, MemOperand(sp, 2 * kPointerSize));
4552 break; 4589 break;
4553 case KEYED_PROPERTY: 4590 case KEYED_PROPERTY:
4554 __ str(r0, MemOperand(sp, 2 * kPointerSize)); 4591 __ str(r0, MemOperand(sp, 2 * kPointerSize));
4555 break; 4592 break;
4593 case KEYED_SUPER_PROPERTY:
4594 __ str(r0, MemOperand(sp, 3 * kPointerSize));
4595 break;
4556 } 4596 }
4557 } 4597 }
4558 } 4598 }
4559 4599
4560 4600
4561 __ bind(&stub_call); 4601 __ bind(&stub_call);
4562 __ mov(r1, r0); 4602 __ mov(r1, r0);
4563 __ mov(r0, Operand(Smi::FromInt(count_value))); 4603 __ mov(r0, Operand(Smi::FromInt(count_value)));
4564 4604
4565 // Record position before stub call. 4605 // Record position before stub call.
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
4612 EmitNamedSuperPropertyStore(prop); 4652 EmitNamedSuperPropertyStore(prop);
4613 if (expr->is_postfix()) { 4653 if (expr->is_postfix()) {
4614 if (!context()->IsEffect()) { 4654 if (!context()->IsEffect()) {
4615 context()->PlugTOS(); 4655 context()->PlugTOS();
4616 } 4656 }
4617 } else { 4657 } else {
4618 context()->Plug(r0); 4658 context()->Plug(r0);
4619 } 4659 }
4620 break; 4660 break;
4621 } 4661 }
4662 case KEYED_SUPER_PROPERTY: {
4663 EmitKeyedSuperPropertyStore(prop);
4664 if (expr->is_postfix()) {
4665 if (!context()->IsEffect()) {
4666 context()->PlugTOS();
4667 }
4668 } else {
4669 context()->Plug(r0);
4670 }
4671 break;
4672 }
4622 case KEYED_PROPERTY: { 4673 case KEYED_PROPERTY: {
4623 __ Pop(StoreDescriptor::ReceiverRegister(), 4674 __ Pop(StoreDescriptor::ReceiverRegister(),
4624 StoreDescriptor::NameRegister()); 4675 StoreDescriptor::NameRegister());
4625 Handle<Code> ic = 4676 Handle<Code> ic =
4626 CodeFactory::KeyedStoreIC(isolate(), strict_mode()).code(); 4677 CodeFactory::KeyedStoreIC(isolate(), strict_mode()).code();
4627 CallIC(ic, expr->CountStoreFeedbackId()); 4678 CallIC(ic, expr->CountStoreFeedbackId());
4628 PrepareForBailoutForId(expr->AssignmentId(), TOS_REG); 4679 PrepareForBailoutForId(expr->AssignmentId(), TOS_REG);
4629 if (expr->is_postfix()) { 4680 if (expr->is_postfix()) {
4630 if (!context()->IsEffect()) { 4681 if (!context()->IsEffect()) {
4631 context()->PlugTOS(); 4682 context()->PlugTOS();
(...skipping 510 matching lines...) Expand 10 before | Expand all | Expand 10 after
5142 5193
5143 DCHECK(interrupt_address == 5194 DCHECK(interrupt_address ==
5144 isolate->builtins()->OsrAfterStackCheck()->entry()); 5195 isolate->builtins()->OsrAfterStackCheck()->entry());
5145 return OSR_AFTER_STACK_CHECK; 5196 return OSR_AFTER_STACK_CHECK;
5146 } 5197 }
5147 5198
5148 5199
5149 } } // namespace v8::internal 5200 } } // namespace v8::internal
5150 5201
5151 #endif // V8_TARGET_ARCH_ARM 5202 #endif // V8_TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « no previous file | src/arm64/full-codegen-arm64.cc » ('j') | src/full-codegen.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698