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

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

Issue 1158543004: X87: [es6] Support super.property in eval and arrow functions (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 6 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 | no next file » | 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 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #if V8_TARGET_ARCH_X87 7 #if V8_TARGET_ARCH_X87
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 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
228 } else if (FLAG_debug_code) { 228 } else if (FLAG_debug_code) {
229 Label done; 229 Label done;
230 __ JumpIfInNewSpace(esi, eax, &done, Label::kNear); 230 __ JumpIfInNewSpace(esi, eax, &done, Label::kNear);
231 __ Abort(kExpectedNewSpaceObject); 231 __ Abort(kExpectedNewSpaceObject);
232 __ bind(&done); 232 __ bind(&done);
233 } 233 }
234 } 234 }
235 } 235 }
236 } 236 }
237 237
238 Variable* home_object_var = scope()->home_object_var();
239 if (home_object_var != nullptr) {
240 __ push(edi);
241 }
242
238 ArgumentsAccessStub::HasNewTarget has_new_target = 243 ArgumentsAccessStub::HasNewTarget has_new_target =
239 IsSubclassConstructor(info->function()->kind()) 244 IsSubclassConstructor(info->function()->kind())
240 ? ArgumentsAccessStub::HAS_NEW_TARGET 245 ? ArgumentsAccessStub::HAS_NEW_TARGET
241 : ArgumentsAccessStub::NO_NEW_TARGET; 246 : ArgumentsAccessStub::NO_NEW_TARGET;
242 247
243 // Possibly allocate RestParameters 248 // Possibly allocate RestParameters
244 int rest_index; 249 int rest_index;
245 Variable* rest_param = scope()->rest_parameter(&rest_index); 250 Variable* rest_param = scope()->rest_parameter(&rest_index);
246 if (rest_param) { 251 if (rest_param) {
247 Comment cmnt(masm_, "[ Allocate rest parameter array"); 252 Comment cmnt(masm_, "[ Allocate rest parameter array");
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
293 } else { 298 } else {
294 type = ArgumentsAccessStub::NEW_SLOPPY_FAST; 299 type = ArgumentsAccessStub::NEW_SLOPPY_FAST;
295 } 300 }
296 301
297 ArgumentsAccessStub stub(isolate(), type, has_new_target); 302 ArgumentsAccessStub stub(isolate(), type, has_new_target);
298 __ CallStub(&stub); 303 __ CallStub(&stub);
299 304
300 SetVar(arguments, eax, ebx, edx); 305 SetVar(arguments, eax, ebx, edx);
301 } 306 }
302 307
308 // Possibly set up a local binding to the [[HomeObject]].
309 if (home_object_var != nullptr) {
310 Comment cmnt(masm_, "[ Home object");
311 __ pop(LoadDescriptor::ReceiverRegister());
312 Handle<Symbol> home_object_symbol(isolate()->heap()->home_object_symbol());
313 __ mov(LoadDescriptor::NameRegister(), Immediate(home_object_symbol));
314 __ mov(LoadDescriptor::SlotRegister(),
315 Immediate(SmiFromSlot(function()->HomeObjectFeedbackSlot())));
316 CallLoadIC(NOT_CONTEXTUAL);
317
318 SetVar(home_object_var, eax, ebx, edx);
319 }
320
303 if (FLAG_trace) { 321 if (FLAG_trace) {
304 __ CallRuntime(Runtime::kTraceEnter, 0); 322 __ CallRuntime(Runtime::kTraceEnter, 0);
305 } 323 }
306 324
307 // Visit the declarations and body unless there is an illegal 325 // Visit the declarations and body unless there is an illegal
308 // redeclaration. 326 // redeclaration.
309 if (scope()->HasIllegalRedeclaration()) { 327 if (scope()->HasIllegalRedeclaration()) {
310 Comment cmnt(masm_, "[ Declarations"); 328 Comment cmnt(masm_, "[ Declarations");
311 scope()->VisitIllegalRedeclaration(this); 329 scope()->VisitIllegalRedeclaration(this);
312 330
(...skipping 924 matching lines...) Expand 10 before | Expand all | Expand 10 after
1237 context()->Plug(eax); 1255 context()->Plug(eax);
1238 } 1256 }
1239 1257
1240 1258
1241 void FullCodeGenerator::VisitVariableProxy(VariableProxy* expr) { 1259 void FullCodeGenerator::VisitVariableProxy(VariableProxy* expr) {
1242 Comment cmnt(masm_, "[ VariableProxy"); 1260 Comment cmnt(masm_, "[ VariableProxy");
1243 EmitVariableLoad(expr); 1261 EmitVariableLoad(expr);
1244 } 1262 }
1245 1263
1246 1264
1247 void FullCodeGenerator::EmitLoadHomeObject(SuperReference* expr) {
1248 Comment cnmt(masm_, "[ SuperReference ");
1249
1250 __ mov(LoadDescriptor::ReceiverRegister(),
1251 Operand(ebp, JavaScriptFrameConstants::kFunctionOffset));
1252
1253 Handle<Symbol> home_object_symbol(isolate()->heap()->home_object_symbol());
1254 __ mov(LoadDescriptor::NameRegister(), home_object_symbol);
1255
1256 __ mov(LoadDescriptor::SlotRegister(),
1257 Immediate(SmiFromSlot(expr->HomeObjectFeedbackSlot())));
1258 CallLoadIC(NOT_CONTEXTUAL);
1259
1260 __ cmp(eax, isolate()->factory()->undefined_value());
1261 Label done;
1262 __ j(not_equal, &done);
1263 __ CallRuntime(Runtime::kThrowNonMethodError, 0);
1264 __ bind(&done);
1265 }
1266
1267
1268 void FullCodeGenerator::EmitSetHomeObjectIfNeeded(Expression* initializer, 1265 void FullCodeGenerator::EmitSetHomeObjectIfNeeded(Expression* initializer,
1269 int offset) { 1266 int offset) {
1270 if (NeedsHomeObject(initializer)) { 1267 if (NeedsHomeObject(initializer)) {
1271 __ mov(StoreDescriptor::ReceiverRegister(), Operand(esp, 0)); 1268 __ mov(StoreDescriptor::ReceiverRegister(), Operand(esp, 0));
1272 __ mov(StoreDescriptor::NameRegister(), 1269 __ mov(StoreDescriptor::NameRegister(),
1273 Immediate(isolate()->factory()->home_object_symbol())); 1270 Immediate(isolate()->factory()->home_object_symbol()));
1274 __ mov(StoreDescriptor::ValueRegister(), 1271 __ mov(StoreDescriptor::ValueRegister(),
1275 Operand(esp, offset * kPointerSize)); 1272 Operand(esp, offset * kPointerSize));
1276 CallStoreIC(); 1273 CallStoreIC();
1277 } 1274 }
(...skipping 609 matching lines...) Expand 10 before | Expand all | Expand 10 after
1887 Property* property = expr->target()->AsProperty(); 1884 Property* property = expr->target()->AsProperty();
1888 LhsKind assign_type = GetAssignType(property); 1885 LhsKind assign_type = GetAssignType(property);
1889 1886
1890 // Evaluate LHS expression. 1887 // Evaluate LHS expression.
1891 switch (assign_type) { 1888 switch (assign_type) {
1892 case VARIABLE: 1889 case VARIABLE:
1893 // Nothing to do here. 1890 // Nothing to do here.
1894 break; 1891 break;
1895 case NAMED_SUPER_PROPERTY: 1892 case NAMED_SUPER_PROPERTY:
1896 VisitForStackValue(property->obj()->AsSuperReference()->this_var()); 1893 VisitForStackValue(property->obj()->AsSuperReference()->this_var());
1897 EmitLoadHomeObject(property->obj()->AsSuperReference()); 1894 VisitForAccumulatorValue(
1895 property->obj()->AsSuperReference()->home_object_var());
1898 __ push(result_register()); 1896 __ push(result_register());
1899 if (expr->is_compound()) { 1897 if (expr->is_compound()) {
1900 __ push(MemOperand(esp, kPointerSize)); 1898 __ push(MemOperand(esp, kPointerSize));
1901 __ push(result_register()); 1899 __ push(result_register());
1902 } 1900 }
1903 break; 1901 break;
1904 case NAMED_PROPERTY: 1902 case NAMED_PROPERTY:
1905 if (expr->is_compound()) { 1903 if (expr->is_compound()) {
1906 // We need the receiver both on the stack and in the register. 1904 // We need the receiver both on the stack and in the register.
1907 VisitForStackValue(property->obj()); 1905 VisitForStackValue(property->obj());
1908 __ mov(LoadDescriptor::ReceiverRegister(), Operand(esp, 0)); 1906 __ mov(LoadDescriptor::ReceiverRegister(), Operand(esp, 0));
1909 } else { 1907 } else {
1910 VisitForStackValue(property->obj()); 1908 VisitForStackValue(property->obj());
1911 } 1909 }
1912 break; 1910 break;
1913 case KEYED_SUPER_PROPERTY: 1911 case KEYED_SUPER_PROPERTY:
1914 VisitForStackValue(property->obj()->AsSuperReference()->this_var()); 1912 VisitForStackValue(property->obj()->AsSuperReference()->this_var());
1915 EmitLoadHomeObject(property->obj()->AsSuperReference()); 1913 VisitForStackValue(
1916 __ Push(result_register()); 1914 property->obj()->AsSuperReference()->home_object_var());
1917 VisitForAccumulatorValue(property->key()); 1915 VisitForAccumulatorValue(property->key());
1918 __ Push(result_register()); 1916 __ Push(result_register());
1919 if (expr->is_compound()) { 1917 if (expr->is_compound()) {
1920 __ push(MemOperand(esp, 2 * kPointerSize)); 1918 __ push(MemOperand(esp, 2 * kPointerSize));
1921 __ push(MemOperand(esp, 2 * kPointerSize)); 1919 __ push(MemOperand(esp, 2 * kPointerSize));
1922 __ push(result_register()); 1920 __ push(result_register());
1923 } 1921 }
1924 break; 1922 break;
1925 case KEYED_PROPERTY: { 1923 case KEYED_PROPERTY: {
1926 if (expr->is_compound()) { 1924 if (expr->is_compound()) {
(...skipping 602 matching lines...) Expand 10 before | Expand all | Expand 10 after
2529 __ Move(StoreDescriptor::ReceiverRegister(), eax); 2527 __ Move(StoreDescriptor::ReceiverRegister(), eax);
2530 __ pop(StoreDescriptor::ValueRegister()); // Restore value. 2528 __ pop(StoreDescriptor::ValueRegister()); // Restore value.
2531 __ mov(StoreDescriptor::NameRegister(), 2529 __ mov(StoreDescriptor::NameRegister(),
2532 prop->key()->AsLiteral()->value()); 2530 prop->key()->AsLiteral()->value());
2533 CallStoreIC(); 2531 CallStoreIC();
2534 break; 2532 break;
2535 } 2533 }
2536 case NAMED_SUPER_PROPERTY: { 2534 case NAMED_SUPER_PROPERTY: {
2537 __ push(eax); 2535 __ push(eax);
2538 VisitForStackValue(prop->obj()->AsSuperReference()->this_var()); 2536 VisitForStackValue(prop->obj()->AsSuperReference()->this_var());
2539 EmitLoadHomeObject(prop->obj()->AsSuperReference()); 2537 VisitForAccumulatorValue(
2538 prop->obj()->AsSuperReference()->home_object_var());
2540 // stack: value, this; eax: home_object 2539 // stack: value, this; eax: home_object
2541 Register scratch = ecx; 2540 Register scratch = ecx;
2542 Register scratch2 = edx; 2541 Register scratch2 = edx;
2543 __ mov(scratch, result_register()); // home_object 2542 __ mov(scratch, result_register()); // home_object
2544 __ mov(eax, MemOperand(esp, kPointerSize)); // value 2543 __ mov(eax, MemOperand(esp, kPointerSize)); // value
2545 __ mov(scratch2, MemOperand(esp, 0)); // this 2544 __ mov(scratch2, MemOperand(esp, 0)); // this
2546 __ mov(MemOperand(esp, kPointerSize), scratch2); // this 2545 __ mov(MemOperand(esp, kPointerSize), scratch2); // this
2547 __ mov(MemOperand(esp, 0), scratch); // home_object 2546 __ mov(MemOperand(esp, 0), scratch); // home_object
2548 // stack: this, home_object. eax: value 2547 // stack: this, home_object. eax: value
2549 EmitNamedSuperPropertyStore(prop); 2548 EmitNamedSuperPropertyStore(prop);
2550 break; 2549 break;
2551 } 2550 }
2552 case KEYED_SUPER_PROPERTY: { 2551 case KEYED_SUPER_PROPERTY: {
2553 __ push(eax); 2552 __ push(eax);
2554 VisitForStackValue(prop->obj()->AsSuperReference()->this_var()); 2553 VisitForStackValue(prop->obj()->AsSuperReference()->this_var());
2555 EmitLoadHomeObject(prop->obj()->AsSuperReference()); 2554 VisitForStackValue(prop->obj()->AsSuperReference()->home_object_var());
2556 __ push(result_register());
2557 VisitForAccumulatorValue(prop->key()); 2555 VisitForAccumulatorValue(prop->key());
2558 Register scratch = ecx; 2556 Register scratch = ecx;
2559 Register scratch2 = edx; 2557 Register scratch2 = edx;
2560 __ mov(scratch2, MemOperand(esp, 2 * kPointerSize)); // value 2558 __ mov(scratch2, MemOperand(esp, 2 * kPointerSize)); // value
2561 // stack: value, this, home_object; eax: key, edx: value 2559 // stack: value, this, home_object; eax: key, edx: value
2562 __ mov(scratch, MemOperand(esp, kPointerSize)); // this 2560 __ mov(scratch, MemOperand(esp, kPointerSize)); // this
2563 __ mov(MemOperand(esp, 2 * kPointerSize), scratch); 2561 __ mov(MemOperand(esp, 2 * kPointerSize), scratch);
2564 __ mov(scratch, MemOperand(esp, 0)); // home_object 2562 __ mov(scratch, MemOperand(esp, 0)); // home_object
2565 __ mov(MemOperand(esp, kPointerSize), scratch); 2563 __ mov(MemOperand(esp, kPointerSize), scratch);
2566 __ mov(MemOperand(esp, 0), eax); 2564 __ mov(MemOperand(esp, 0), eax);
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
2757 Comment cmnt(masm_, "[ Property"); 2755 Comment cmnt(masm_, "[ Property");
2758 Expression* key = expr->key(); 2756 Expression* key = expr->key();
2759 2757
2760 if (key->IsPropertyName()) { 2758 if (key->IsPropertyName()) {
2761 if (!expr->IsSuperAccess()) { 2759 if (!expr->IsSuperAccess()) {
2762 VisitForAccumulatorValue(expr->obj()); 2760 VisitForAccumulatorValue(expr->obj());
2763 __ Move(LoadDescriptor::ReceiverRegister(), result_register()); 2761 __ Move(LoadDescriptor::ReceiverRegister(), result_register());
2764 EmitNamedPropertyLoad(expr); 2762 EmitNamedPropertyLoad(expr);
2765 } else { 2763 } else {
2766 VisitForStackValue(expr->obj()->AsSuperReference()->this_var()); 2764 VisitForStackValue(expr->obj()->AsSuperReference()->this_var());
2767 EmitLoadHomeObject(expr->obj()->AsSuperReference()); 2765 VisitForStackValue(expr->obj()->AsSuperReference()->home_object_var());
2768 __ push(result_register());
2769 EmitNamedSuperPropertyLoad(expr); 2766 EmitNamedSuperPropertyLoad(expr);
2770 } 2767 }
2771 } else { 2768 } else {
2772 if (!expr->IsSuperAccess()) { 2769 if (!expr->IsSuperAccess()) {
2773 VisitForStackValue(expr->obj()); 2770 VisitForStackValue(expr->obj());
2774 VisitForAccumulatorValue(expr->key()); 2771 VisitForAccumulatorValue(expr->key());
2775 __ pop(LoadDescriptor::ReceiverRegister()); // Object. 2772 __ pop(LoadDescriptor::ReceiverRegister()); // Object.
2776 __ Move(LoadDescriptor::NameRegister(), result_register()); // Key. 2773 __ Move(LoadDescriptor::NameRegister(), result_register()); // Key.
2777 EmitKeyedPropertyLoad(expr); 2774 EmitKeyedPropertyLoad(expr);
2778 } else { 2775 } else {
2779 VisitForStackValue(expr->obj()->AsSuperReference()->this_var()); 2776 VisitForStackValue(expr->obj()->AsSuperReference()->this_var());
2780 EmitLoadHomeObject(expr->obj()->AsSuperReference()); 2777 VisitForStackValue(expr->obj()->AsSuperReference()->home_object_var());
2781 __ push(result_register());
2782 VisitForStackValue(expr->key()); 2778 VisitForStackValue(expr->key());
2783 EmitKeyedSuperPropertyLoad(expr); 2779 EmitKeyedSuperPropertyLoad(expr);
2784 } 2780 }
2785 } 2781 }
2786 PrepareForBailoutForId(expr->LoadId(), TOS_REG); 2782 PrepareForBailoutForId(expr->LoadId(), TOS_REG);
2787 context()->Plug(eax); 2783 context()->Plug(eax);
2788 } 2784 }
2789 2785
2790 2786
2791 void FullCodeGenerator::CallIC(Handle<Code> code, 2787 void FullCodeGenerator::CallIC(Handle<Code> code,
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
2830 Expression* callee = expr->expression(); 2826 Expression* callee = expr->expression();
2831 DCHECK(callee->IsProperty()); 2827 DCHECK(callee->IsProperty());
2832 Property* prop = callee->AsProperty(); 2828 Property* prop = callee->AsProperty();
2833 DCHECK(prop->IsSuperAccess()); 2829 DCHECK(prop->IsSuperAccess());
2834 2830
2835 SetSourcePosition(prop->position()); 2831 SetSourcePosition(prop->position());
2836 Literal* key = prop->key()->AsLiteral(); 2832 Literal* key = prop->key()->AsLiteral();
2837 DCHECK(!key->value()->IsSmi()); 2833 DCHECK(!key->value()->IsSmi());
2838 // Load the function from the receiver. 2834 // Load the function from the receiver.
2839 SuperReference* super_ref = callee->AsProperty()->obj()->AsSuperReference(); 2835 SuperReference* super_ref = callee->AsProperty()->obj()->AsSuperReference();
2840 EmitLoadHomeObject(super_ref); 2836 VisitForStackValue(super_ref->home_object_var());
2841 __ push(eax);
2842 VisitForAccumulatorValue(super_ref->this_var()); 2837 VisitForAccumulatorValue(super_ref->this_var());
2843 __ push(eax); 2838 __ push(eax);
2844 __ push(eax); 2839 __ push(eax);
2845 __ push(Operand(esp, kPointerSize * 2)); 2840 __ push(Operand(esp, kPointerSize * 2));
2846 __ push(Immediate(key->value())); 2841 __ push(Immediate(key->value()));
2847 // Stack here: 2842 // Stack here:
2848 // - home_object 2843 // - home_object
2849 // - this (receiver) 2844 // - this (receiver)
2850 // - this (receiver) <-- LoadFromSuper will pop here and below. 2845 // - this (receiver) <-- LoadFromSuper will pop here and below.
2851 // - home_object 2846 // - home_object
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
2887 2882
2888 void FullCodeGenerator::EmitKeyedSuperCallWithLoadIC(Call* expr) { 2883 void FullCodeGenerator::EmitKeyedSuperCallWithLoadIC(Call* expr) {
2889 Expression* callee = expr->expression(); 2884 Expression* callee = expr->expression();
2890 DCHECK(callee->IsProperty()); 2885 DCHECK(callee->IsProperty());
2891 Property* prop = callee->AsProperty(); 2886 Property* prop = callee->AsProperty();
2892 DCHECK(prop->IsSuperAccess()); 2887 DCHECK(prop->IsSuperAccess());
2893 2888
2894 SetSourcePosition(prop->position()); 2889 SetSourcePosition(prop->position());
2895 // Load the function from the receiver. 2890 // Load the function from the receiver.
2896 SuperReference* super_ref = callee->AsProperty()->obj()->AsSuperReference(); 2891 SuperReference* super_ref = callee->AsProperty()->obj()->AsSuperReference();
2897 EmitLoadHomeObject(super_ref); 2892 VisitForStackValue(super_ref->home_object_var());
2898 __ push(eax);
2899 VisitForAccumulatorValue(super_ref->this_var()); 2893 VisitForAccumulatorValue(super_ref->this_var());
2900 __ push(eax); 2894 __ push(eax);
2901 __ push(eax); 2895 __ push(eax);
2902 __ push(Operand(esp, kPointerSize * 2)); 2896 __ push(Operand(esp, kPointerSize * 2));
2903 VisitForStackValue(prop->key()); 2897 VisitForStackValue(prop->key());
2904 // Stack here: 2898 // Stack here:
2905 // - home_object 2899 // - home_object
2906 // - this (receiver) 2900 // - this (receiver)
2907 // - this (receiver) <-- LoadKeyedFromSuper will pop here and below. 2901 // - this (receiver) <-- LoadKeyedFromSuper will pop here and below.
2908 // - home_object 2902 // - home_object
(...skipping 1850 matching lines...) Expand 10 before | Expand all | Expand 10 after
4759 case NAMED_PROPERTY: { 4753 case NAMED_PROPERTY: {
4760 // Put the object both on the stack and in the register. 4754 // Put the object both on the stack and in the register.
4761 VisitForStackValue(prop->obj()); 4755 VisitForStackValue(prop->obj());
4762 __ mov(LoadDescriptor::ReceiverRegister(), Operand(esp, 0)); 4756 __ mov(LoadDescriptor::ReceiverRegister(), Operand(esp, 0));
4763 EmitNamedPropertyLoad(prop); 4757 EmitNamedPropertyLoad(prop);
4764 break; 4758 break;
4765 } 4759 }
4766 4760
4767 case NAMED_SUPER_PROPERTY: { 4761 case NAMED_SUPER_PROPERTY: {
4768 VisitForStackValue(prop->obj()->AsSuperReference()->this_var()); 4762 VisitForStackValue(prop->obj()->AsSuperReference()->this_var());
4769 EmitLoadHomeObject(prop->obj()->AsSuperReference()); 4763 VisitForAccumulatorValue(
4764 prop->obj()->AsSuperReference()->home_object_var());
4770 __ push(result_register()); 4765 __ push(result_register());
4771 __ push(MemOperand(esp, kPointerSize)); 4766 __ push(MemOperand(esp, kPointerSize));
4772 __ push(result_register()); 4767 __ push(result_register());
4773 EmitNamedSuperPropertyLoad(prop); 4768 EmitNamedSuperPropertyLoad(prop);
4774 break; 4769 break;
4775 } 4770 }
4776 4771
4777 case KEYED_SUPER_PROPERTY: { 4772 case KEYED_SUPER_PROPERTY: {
4778 VisitForStackValue(prop->obj()->AsSuperReference()->this_var()); 4773 VisitForStackValue(prop->obj()->AsSuperReference()->this_var());
4779 EmitLoadHomeObject(prop->obj()->AsSuperReference()); 4774 VisitForStackValue(prop->obj()->AsSuperReference()->home_object_var());
4780 __ push(result_register());
4781 VisitForAccumulatorValue(prop->key()); 4775 VisitForAccumulatorValue(prop->key());
4782 __ push(result_register()); 4776 __ push(result_register());
4783 __ push(MemOperand(esp, 2 * kPointerSize)); 4777 __ push(MemOperand(esp, 2 * kPointerSize));
4784 __ push(MemOperand(esp, 2 * kPointerSize)); 4778 __ push(MemOperand(esp, 2 * kPointerSize));
4785 __ push(result_register()); 4779 __ push(result_register());
4786 EmitKeyedSuperPropertyLoad(prop); 4780 EmitKeyedSuperPropertyLoad(prop);
4787 break; 4781 break;
4788 } 4782 }
4789 4783
4790 case KEYED_PROPERTY: { 4784 case KEYED_PROPERTY: {
(...skipping 587 matching lines...) Expand 10 before | Expand all | Expand 10 after
5378 DCHECK_EQ(isolate->builtins()->OsrAfterStackCheck()->entry(), 5372 DCHECK_EQ(isolate->builtins()->OsrAfterStackCheck()->entry(),
5379 Assembler::target_address_at(call_target_address, 5373 Assembler::target_address_at(call_target_address,
5380 unoptimized_code)); 5374 unoptimized_code));
5381 return OSR_AFTER_STACK_CHECK; 5375 return OSR_AFTER_STACK_CHECK;
5382 } 5376 }
5383 5377
5384 5378
5385 } } // namespace v8::internal 5379 } } // namespace v8::internal
5386 5380
5387 #endif // V8_TARGET_ARCH_X87 5381 #endif // V8_TARGET_ARCH_X87
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698