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

Side by Side Diff: src/x64/full-codegen-x64.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
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_X64 7 #if V8_TARGET_ARCH_X64
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 1829 matching lines...) Expand 10 before | Expand all | Expand 10 after
1840 context()->Plug(rax); 1840 context()->Plug(rax);
1841 } 1841 }
1842 } 1842 }
1843 1843
1844 1844
1845 void FullCodeGenerator::VisitAssignment(Assignment* expr) { 1845 void FullCodeGenerator::VisitAssignment(Assignment* expr) {
1846 DCHECK(expr->target()->IsValidReferenceExpression()); 1846 DCHECK(expr->target()->IsValidReferenceExpression());
1847 1847
1848 Comment cmnt(masm_, "[ Assignment"); 1848 Comment cmnt(masm_, "[ Assignment");
1849 1849
1850 // Left-hand side can only be a property, a global or a (parameter or local)
1851 // slot.
1852 enum LhsKind {
1853 VARIABLE,
1854 NAMED_PROPERTY,
1855 KEYED_PROPERTY,
1856 NAMED_SUPER_PROPERTY
1857 };
1858 LhsKind assign_type = VARIABLE;
1859 Property* property = expr->target()->AsProperty(); 1850 Property* property = expr->target()->AsProperty();
1860 if (property != NULL) { 1851 LhsKind assign_type = GetAssignType(property);
1861 assign_type = (property->key()->IsPropertyName())
1862 ? (property->IsSuperAccess() ? NAMED_SUPER_PROPERTY
1863 : NAMED_PROPERTY)
1864 : KEYED_PROPERTY;
1865 }
1866 1852
1867 // Evaluate LHS expression. 1853 // Evaluate LHS expression.
1868 switch (assign_type) { 1854 switch (assign_type) {
1869 case VARIABLE: 1855 case VARIABLE:
1870 // Nothing to do here. 1856 // Nothing to do here.
1871 break; 1857 break;
1872 case NAMED_PROPERTY: 1858 case NAMED_PROPERTY:
1873 if (expr->is_compound()) { 1859 if (expr->is_compound()) {
1874 // We need the receiver both on the stack and in the register. 1860 // We need the receiver both on the stack and in the register.
1875 VisitForStackValue(property->obj()); 1861 VisitForStackValue(property->obj());
1876 __ movp(LoadDescriptor::ReceiverRegister(), Operand(rsp, 0)); 1862 __ movp(LoadDescriptor::ReceiverRegister(), Operand(rsp, 0));
1877 } else { 1863 } else {
1878 VisitForStackValue(property->obj()); 1864 VisitForStackValue(property->obj());
1879 } 1865 }
1880 break; 1866 break;
1881 case NAMED_SUPER_PROPERTY: 1867 case NAMED_SUPER_PROPERTY:
1882 VisitForStackValue(property->obj()->AsSuperReference()->this_var()); 1868 VisitForStackValue(property->obj()->AsSuperReference()->this_var());
1883 EmitLoadHomeObject(property->obj()->AsSuperReference()); 1869 EmitLoadHomeObject(property->obj()->AsSuperReference());
1884 __ Push(result_register()); 1870 __ Push(result_register());
1885 if (expr->is_compound()) { 1871 if (expr->is_compound()) {
1886 __ Push(MemOperand(rsp, kPointerSize)); 1872 __ Push(MemOperand(rsp, kPointerSize));
1887 __ Push(result_register()); 1873 __ Push(result_register());
1888 } 1874 }
1889 break; 1875 break;
1876 case KEYED_SUPER_PROPERTY:
1877 VisitForStackValue(property->obj()->AsSuperReference()->this_var());
1878 EmitLoadHomeObject(property->obj()->AsSuperReference());
1879 __ Push(result_register());
1880 VisitForAccumulatorValue(property->key());
1881 __ Push(result_register());
1882 if (expr->is_compound()) {
1883 __ Push(MemOperand(rsp, 2 * kPointerSize));
1884 __ Push(MemOperand(rsp, 2 * kPointerSize));
1885 __ Push(result_register());
1886 }
1887 break;
1890 case KEYED_PROPERTY: { 1888 case KEYED_PROPERTY: {
1891 if (expr->is_compound()) { 1889 if (expr->is_compound()) {
1892 VisitForStackValue(property->obj()); 1890 VisitForStackValue(property->obj());
1893 VisitForStackValue(property->key()); 1891 VisitForStackValue(property->key());
1894 __ movp(LoadDescriptor::ReceiverRegister(), Operand(rsp, kPointerSize)); 1892 __ movp(LoadDescriptor::ReceiverRegister(), Operand(rsp, kPointerSize));
1895 __ movp(LoadDescriptor::NameRegister(), Operand(rsp, 0)); 1893 __ movp(LoadDescriptor::NameRegister(), Operand(rsp, 0));
1896 } else { 1894 } else {
1897 VisitForStackValue(property->obj()); 1895 VisitForStackValue(property->obj());
1898 VisitForStackValue(property->key()); 1896 VisitForStackValue(property->key());
1899 } 1897 }
(...skipping 11 matching lines...) Expand all
1911 PrepareForBailout(expr->target(), TOS_REG); 1909 PrepareForBailout(expr->target(), TOS_REG);
1912 break; 1910 break;
1913 case NAMED_PROPERTY: 1911 case NAMED_PROPERTY:
1914 EmitNamedPropertyLoad(property); 1912 EmitNamedPropertyLoad(property);
1915 PrepareForBailoutForId(property->LoadId(), TOS_REG); 1913 PrepareForBailoutForId(property->LoadId(), TOS_REG);
1916 break; 1914 break;
1917 case NAMED_SUPER_PROPERTY: 1915 case NAMED_SUPER_PROPERTY:
1918 EmitNamedSuperPropertyLoad(property); 1916 EmitNamedSuperPropertyLoad(property);
1919 PrepareForBailoutForId(property->LoadId(), TOS_REG); 1917 PrepareForBailoutForId(property->LoadId(), TOS_REG);
1920 break; 1918 break;
1919 case KEYED_SUPER_PROPERTY:
1920 EmitKeyedSuperPropertyLoad(property);
1921 PrepareForBailoutForId(property->LoadId(), TOS_REG);
1922 break;
1921 case KEYED_PROPERTY: 1923 case KEYED_PROPERTY:
1922 EmitKeyedPropertyLoad(property); 1924 EmitKeyedPropertyLoad(property);
1923 PrepareForBailoutForId(property->LoadId(), TOS_REG); 1925 PrepareForBailoutForId(property->LoadId(), TOS_REG);
1924 break; 1926 break;
1925 } 1927 }
1926 } 1928 }
1927 1929
1928 Token::Value op = expr->binary_op(); 1930 Token::Value op = expr->binary_op();
1929 __ Push(rax); // Left operand goes on the stack. 1931 __ Push(rax); // Left operand goes on the stack.
1930 VisitForAccumulatorValue(expr->value()); 1932 VisitForAccumulatorValue(expr->value());
(...skipping 29 matching lines...) Expand all
1960 PrepareForBailoutForId(expr->AssignmentId(), TOS_REG); 1962 PrepareForBailoutForId(expr->AssignmentId(), TOS_REG);
1961 context()->Plug(rax); 1963 context()->Plug(rax);
1962 break; 1964 break;
1963 case NAMED_PROPERTY: 1965 case NAMED_PROPERTY:
1964 EmitNamedPropertyAssignment(expr); 1966 EmitNamedPropertyAssignment(expr);
1965 break; 1967 break;
1966 case NAMED_SUPER_PROPERTY: 1968 case NAMED_SUPER_PROPERTY:
1967 EmitNamedSuperPropertyStore(property); 1969 EmitNamedSuperPropertyStore(property);
1968 context()->Plug(rax); 1970 context()->Plug(rax);
1969 break; 1971 break;
1972 case KEYED_SUPER_PROPERTY:
1973 EmitKeyedSuperPropertyStore(property);
1974 context()->Plug(rax);
1975 break;
1970 case KEYED_PROPERTY: 1976 case KEYED_PROPERTY:
1971 EmitKeyedPropertyAssignment(expr); 1977 EmitKeyedPropertyAssignment(expr);
1972 break; 1978 break;
1973 } 1979 }
1974 } 1980 }
1975 1981
1976 1982
1977 void FullCodeGenerator::VisitYield(Yield* expr) { 1983 void FullCodeGenerator::VisitYield(Yield* expr) {
1978 Comment cmnt(masm_, "[ Yield"); 1984 Comment cmnt(masm_, "[ Yield");
1979 // Evaluate yielded value first; the initial iterator definition depends on 1985 // Evaluate yielded value first; the initial iterator definition depends on
(...skipping 577 matching lines...) Expand 10 before | Expand all | Expand 10 after
2557 2563
2558 2564
2559 void FullCodeGenerator::EmitNamedSuperPropertyStore(Property* prop) { 2565 void FullCodeGenerator::EmitNamedSuperPropertyStore(Property* prop) {
2560 // Assignment to named property of super. 2566 // Assignment to named property of super.
2561 // rax : value 2567 // rax : value
2562 // stack : receiver ('this'), home_object 2568 // stack : receiver ('this'), home_object
2563 DCHECK(prop != NULL); 2569 DCHECK(prop != NULL);
2564 Literal* key = prop->key()->AsLiteral(); 2570 Literal* key = prop->key()->AsLiteral();
2565 DCHECK(key != NULL); 2571 DCHECK(key != NULL);
2566 2572
2573 __ Push(key->value());
2567 __ Push(rax); 2574 __ Push(rax);
2568 __ Push(key->value());
2569 __ CallRuntime((strict_mode() == STRICT ? Runtime::kStoreToSuper_Strict 2575 __ CallRuntime((strict_mode() == STRICT ? Runtime::kStoreToSuper_Strict
2570 : Runtime::kStoreToSuper_Sloppy), 2576 : Runtime::kStoreToSuper_Sloppy),
2571 4); 2577 4);
2572 } 2578 }
2573 2579
2574 2580
2581 void FullCodeGenerator::EmitKeyedSuperPropertyStore(Property* prop) {
2582 // Assignment to named property of super.
2583 // rax : value
2584 // stack : receiver ('this'), home_object, key
2585 DCHECK(prop != NULL);
2586
2587 __ Push(rax);
2588 __ CallRuntime((strict_mode() == STRICT ? Runtime::kStoreKeyedToSuper_Strict
2589 : Runtime::kStoreKeyedToSuper_Sloppy),
2590 4);
2591 }
2592
2593
2575 void FullCodeGenerator::EmitKeyedPropertyAssignment(Assignment* expr) { 2594 void FullCodeGenerator::EmitKeyedPropertyAssignment(Assignment* expr) {
2576 // Assignment to a property, using a keyed store IC. 2595 // Assignment to a property, using a keyed store IC.
2577 2596
2578 __ Pop(StoreDescriptor::NameRegister()); // Key. 2597 __ Pop(StoreDescriptor::NameRegister()); // Key.
2579 __ Pop(StoreDescriptor::ReceiverRegister()); 2598 __ Pop(StoreDescriptor::ReceiverRegister());
2580 DCHECK(StoreDescriptor::ValueRegister().is(rax)); 2599 DCHECK(StoreDescriptor::ValueRegister().is(rax));
2581 // Record source code position before IC call. 2600 // Record source code position before IC call.
2582 SetSourcePosition(expr->position()); 2601 SetSourcePosition(expr->position());
2583 Handle<Code> ic = CodeFactory::KeyedStoreIC(isolate(), strict_mode()).code(); 2602 Handle<Code> ic = CodeFactory::KeyedStoreIC(isolate(), strict_mode()).code();
2584 CallIC(ic, expr->AssignmentFeedbackId()); 2603 CallIC(ic, expr->AssignmentFeedbackId());
(...skipping 1807 matching lines...) Expand 10 before | Expand all | Expand 10 after
4392 } 4411 }
4393 } 4412 }
4394 4413
4395 4414
4396 void FullCodeGenerator::VisitCountOperation(CountOperation* expr) { 4415 void FullCodeGenerator::VisitCountOperation(CountOperation* expr) {
4397 DCHECK(expr->expression()->IsValidReferenceExpression()); 4416 DCHECK(expr->expression()->IsValidReferenceExpression());
4398 4417
4399 Comment cmnt(masm_, "[ CountOperation"); 4418 Comment cmnt(masm_, "[ CountOperation");
4400 SetSourcePosition(expr->position()); 4419 SetSourcePosition(expr->position());
4401 4420
4402 // Expression can only be a property, a global or a (parameter or local)
4403 // slot.
4404 enum LhsKind {
4405 VARIABLE,
4406 NAMED_PROPERTY,
4407 KEYED_PROPERTY,
4408 NAMED_SUPER_PROPERTY
4409 };
4410 LhsKind assign_type = VARIABLE;
4411 Property* prop = expr->expression()->AsProperty(); 4421 Property* prop = expr->expression()->AsProperty();
4412 // In case of a property we use the uninitialized expression context 4422 LhsKind assign_type = GetAssignType(prop);
4413 // of the key to detect a named property.
4414 if (prop != NULL) {
4415 assign_type =
4416 (prop->key()->IsPropertyName())
4417 ? (prop->IsSuperAccess() ? NAMED_SUPER_PROPERTY : NAMED_PROPERTY)
4418 : KEYED_PROPERTY;
4419 }
4420 4423
4421 // Evaluate expression and get value. 4424 // Evaluate expression and get value.
4422 if (assign_type == VARIABLE) { 4425 if (assign_type == VARIABLE) {
4423 DCHECK(expr->expression()->AsVariableProxy()->var() != NULL); 4426 DCHECK(expr->expression()->AsVariableProxy()->var() != NULL);
4424 AccumulatorValueContext context(this); 4427 AccumulatorValueContext context(this);
4425 EmitVariableLoad(expr->expression()->AsVariableProxy()); 4428 EmitVariableLoad(expr->expression()->AsVariableProxy());
4426 } else { 4429 } else {
4427 // Reserve space for result of postfix operation. 4430 // Reserve space for result of postfix operation.
4428 if (expr->is_postfix() && !context()->IsEffect()) { 4431 if (expr->is_postfix() && !context()->IsEffect()) {
4429 __ Push(Smi::FromInt(0)); 4432 __ Push(Smi::FromInt(0));
4430 } 4433 }
4431 if (assign_type == NAMED_PROPERTY) { 4434 switch (assign_type) {
4432 VisitForStackValue(prop->obj()); 4435 case NAMED_PROPERTY: {
4433 __ movp(LoadDescriptor::ReceiverRegister(), Operand(rsp, 0)); 4436 VisitForStackValue(prop->obj());
4434 EmitNamedPropertyLoad(prop); 4437 __ movp(LoadDescriptor::ReceiverRegister(), Operand(rsp, 0));
4435 } else if (assign_type == NAMED_SUPER_PROPERTY) { 4438 EmitNamedPropertyLoad(prop);
4436 VisitForStackValue(prop->obj()->AsSuperReference()->this_var()); 4439 break;
4437 EmitLoadHomeObject(prop->obj()->AsSuperReference()); 4440 }
4438 __ Push(result_register()); 4441
4439 __ Push(MemOperand(rsp, kPointerSize)); 4442 case NAMED_SUPER_PROPERTY: {
4440 __ Push(result_register()); 4443 VisitForStackValue(prop->obj()->AsSuperReference()->this_var());
4441 EmitNamedSuperPropertyLoad(prop); 4444 EmitLoadHomeObject(prop->obj()->AsSuperReference());
4442 } else { 4445 __ Push(result_register());
4443 VisitForStackValue(prop->obj()); 4446 __ Push(MemOperand(rsp, kPointerSize));
4444 VisitForStackValue(prop->key()); 4447 __ Push(result_register());
4445 // Leave receiver on stack 4448 EmitNamedSuperPropertyLoad(prop);
4446 __ movp(LoadDescriptor::ReceiverRegister(), Operand(rsp, kPointerSize)); 4449 break;
4447 // Copy of key, needed for later store. 4450 }
4448 __ movp(LoadDescriptor::NameRegister(), Operand(rsp, 0)); 4451
4449 EmitKeyedPropertyLoad(prop); 4452 case KEYED_SUPER_PROPERTY: {
4453 VisitForStackValue(prop->obj()->AsSuperReference()->this_var());
4454 EmitLoadHomeObject(prop->obj()->AsSuperReference());
4455 __ Push(result_register());
4456 VisitForAccumulatorValue(prop->key());
4457 __ Push(result_register());
4458 __ Push(MemOperand(rsp, 2 * kPointerSize));
4459 __ Push(MemOperand(rsp, 2 * kPointerSize));
4460 __ Push(result_register());
4461 EmitKeyedSuperPropertyLoad(prop);
4462 break;
4463 }
4464
4465 case KEYED_PROPERTY: {
4466 VisitForStackValue(prop->obj());
4467 VisitForStackValue(prop->key());
4468 // Leave receiver on stack
4469 __ movp(LoadDescriptor::ReceiverRegister(), Operand(rsp, kPointerSize));
4470 // Copy of key, needed for later store.
4471 __ movp(LoadDescriptor::NameRegister(), Operand(rsp, 0));
4472 EmitKeyedPropertyLoad(prop);
4473 break;
4474 }
4475
4476 case VARIABLE:
4477 UNREACHABLE();
4450 } 4478 }
4451 } 4479 }
4452 4480
4453 // We need a second deoptimization point after loading the value 4481 // We need a second deoptimization point after loading the value
4454 // in case evaluating the property load my have a side effect. 4482 // in case evaluating the property load my have a side effect.
4455 if (assign_type == VARIABLE) { 4483 if (assign_type == VARIABLE) {
4456 PrepareForBailout(expr->expression(), TOS_REG); 4484 PrepareForBailout(expr->expression(), TOS_REG);
4457 } else { 4485 } else {
4458 PrepareForBailoutForId(prop->LoadId(), TOS_REG); 4486 PrepareForBailoutForId(prop->LoadId(), TOS_REG);
4459 } 4487 }
(...skipping 17 matching lines...) Expand all
4477 break; 4505 break;
4478 case NAMED_PROPERTY: 4506 case NAMED_PROPERTY:
4479 __ movp(Operand(rsp, kPointerSize), rax); 4507 __ movp(Operand(rsp, kPointerSize), rax);
4480 break; 4508 break;
4481 case NAMED_SUPER_PROPERTY: 4509 case NAMED_SUPER_PROPERTY:
4482 __ movp(Operand(rsp, 2 * kPointerSize), rax); 4510 __ movp(Operand(rsp, 2 * kPointerSize), rax);
4483 break; 4511 break;
4484 case KEYED_PROPERTY: 4512 case KEYED_PROPERTY:
4485 __ movp(Operand(rsp, 2 * kPointerSize), rax); 4513 __ movp(Operand(rsp, 2 * kPointerSize), rax);
4486 break; 4514 break;
4515 case KEYED_SUPER_PROPERTY:
4516 __ movp(Operand(rsp, 3 * kPointerSize), rax);
4517 break;
4487 } 4518 }
4488 } 4519 }
4489 } 4520 }
4490 4521
4491 SmiOperationExecutionMode mode; 4522 SmiOperationExecutionMode mode;
4492 mode.Add(PRESERVE_SOURCE_REGISTER); 4523 mode.Add(PRESERVE_SOURCE_REGISTER);
4493 mode.Add(BAILOUT_ON_NO_OVERFLOW); 4524 mode.Add(BAILOUT_ON_NO_OVERFLOW);
4494 if (expr->op() == Token::INC) { 4525 if (expr->op() == Token::INC) {
4495 __ SmiAddConstant(rax, rax, Smi::FromInt(1), mode, &done, Label::kNear); 4526 __ SmiAddConstant(rax, rax, Smi::FromInt(1), mode, &done, Label::kNear);
4496 } else { 4527 } else {
(...skipping 18 matching lines...) Expand all
4515 break; 4546 break;
4516 case NAMED_PROPERTY: 4547 case NAMED_PROPERTY:
4517 __ movp(Operand(rsp, kPointerSize), rax); 4548 __ movp(Operand(rsp, kPointerSize), rax);
4518 break; 4549 break;
4519 case NAMED_SUPER_PROPERTY: 4550 case NAMED_SUPER_PROPERTY:
4520 __ movp(Operand(rsp, 2 * kPointerSize), rax); 4551 __ movp(Operand(rsp, 2 * kPointerSize), rax);
4521 break; 4552 break;
4522 case KEYED_PROPERTY: 4553 case KEYED_PROPERTY:
4523 __ movp(Operand(rsp, 2 * kPointerSize), rax); 4554 __ movp(Operand(rsp, 2 * kPointerSize), rax);
4524 break; 4555 break;
4556 case KEYED_SUPER_PROPERTY:
4557 __ movp(Operand(rsp, 3 * kPointerSize), rax);
4558 break;
4525 } 4559 }
4526 } 4560 }
4527 } 4561 }
4528 4562
4529 // Record position before stub call. 4563 // Record position before stub call.
4530 SetSourcePosition(expr->position()); 4564 SetSourcePosition(expr->position());
4531 4565
4532 // Call stub for +1/-1. 4566 // Call stub for +1/-1.
4533 __ bind(&stub_call); 4567 __ bind(&stub_call);
4534 __ movp(rdx, rax); 4568 __ movp(rdx, rax);
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
4582 EmitNamedSuperPropertyStore(prop); 4616 EmitNamedSuperPropertyStore(prop);
4583 if (expr->is_postfix()) { 4617 if (expr->is_postfix()) {
4584 if (!context()->IsEffect()) { 4618 if (!context()->IsEffect()) {
4585 context()->PlugTOS(); 4619 context()->PlugTOS();
4586 } 4620 }
4587 } else { 4621 } else {
4588 context()->Plug(rax); 4622 context()->Plug(rax);
4589 } 4623 }
4590 break; 4624 break;
4591 } 4625 }
4626 case KEYED_SUPER_PROPERTY: {
4627 EmitKeyedSuperPropertyStore(prop);
4628 if (expr->is_postfix()) {
4629 if (!context()->IsEffect()) {
4630 context()->PlugTOS();
4631 }
4632 } else {
4633 context()->Plug(rax);
4634 }
4635 break;
4636 }
4592 case KEYED_PROPERTY: { 4637 case KEYED_PROPERTY: {
4593 __ Pop(StoreDescriptor::NameRegister()); 4638 __ Pop(StoreDescriptor::NameRegister());
4594 __ Pop(StoreDescriptor::ReceiverRegister()); 4639 __ Pop(StoreDescriptor::ReceiverRegister());
4595 Handle<Code> ic = 4640 Handle<Code> ic =
4596 CodeFactory::KeyedStoreIC(isolate(), strict_mode()).code(); 4641 CodeFactory::KeyedStoreIC(isolate(), strict_mode()).code();
4597 CallIC(ic, expr->CountStoreFeedbackId()); 4642 CallIC(ic, expr->CountStoreFeedbackId());
4598 PrepareForBailoutForId(expr->AssignmentId(), TOS_REG); 4643 PrepareForBailoutForId(expr->AssignmentId(), TOS_REG);
4599 if (expr->is_postfix()) { 4644 if (expr->is_postfix()) {
4600 if (!context()->IsEffect()) { 4645 if (!context()->IsEffect()) {
4601 context()->PlugTOS(); 4646 context()->PlugTOS();
(...skipping 443 matching lines...) Expand 10 before | Expand all | Expand 10 after
5045 DCHECK_EQ(isolate->builtins()->OsrAfterStackCheck()->entry(), 5090 DCHECK_EQ(isolate->builtins()->OsrAfterStackCheck()->entry(),
5046 Assembler::target_address_at(call_target_address, 5091 Assembler::target_address_at(call_target_address,
5047 unoptimized_code)); 5092 unoptimized_code));
5048 return OSR_AFTER_STACK_CHECK; 5093 return OSR_AFTER_STACK_CHECK;
5049 } 5094 }
5050 5095
5051 5096
5052 } } // namespace v8::internal 5097 } } // namespace v8::internal
5053 5098
5054 #endif // V8_TARGET_ARCH_X64 5099 #endif // V8_TARGET_ARCH_X64
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698