OLD | NEW |
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_IA32 | 7 #if V8_TARGET_ARCH_IA32 |
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 285 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
296 } else { | 296 } else { |
297 type = ArgumentsAccessStub::NEW_SLOPPY_FAST; | 297 type = ArgumentsAccessStub::NEW_SLOPPY_FAST; |
298 } | 298 } |
299 | 299 |
300 ArgumentsAccessStub stub(isolate(), type, has_new_target); | 300 ArgumentsAccessStub stub(isolate(), type, has_new_target); |
301 __ CallStub(&stub); | 301 __ CallStub(&stub); |
302 | 302 |
303 SetVar(arguments, eax, ebx, edx); | 303 SetVar(arguments, eax, ebx, edx); |
304 } | 304 } |
305 | 305 |
| 306 // Possibly set up a local binding to the [[HomeObject]]. |
| 307 Variable* home_object_var = scope()->home_object_var(); |
| 308 if (home_object_var != nullptr) { |
| 309 Comment cmnt(masm_, "[ Home object"); |
| 310 if (function_in_register) { |
| 311 __ mov(LoadDescriptor::ReceiverRegister(), edi); |
| 312 } else { |
| 313 __ mov(LoadDescriptor::ReceiverRegister(), |
| 314 Operand(ebp, JavaScriptFrameConstants::kFunctionOffset)); |
| 315 } |
| 316 Handle<Symbol> home_object_symbol(isolate()->heap()->home_object_symbol()); |
| 317 __ mov(LoadDescriptor::NameRegister(), Immediate(home_object_symbol)); |
| 318 |
| 319 if (FLAG_vector_ics) { |
| 320 __ mov(VectorLoadICDescriptor::SlotRegister(), |
| 321 Immediate(SmiFromSlot(function()->HomeObjectFeedbackSlot()))); |
| 322 } |
| 323 CallLoadIC(NOT_CONTEXTUAL); |
| 324 |
| 325 SetVar(home_object_var, eax, ebx, edx); |
| 326 } |
| 327 |
306 if (FLAG_trace) { | 328 if (FLAG_trace) { |
307 __ CallRuntime(Runtime::kTraceEnter, 0); | 329 __ CallRuntime(Runtime::kTraceEnter, 0); |
308 } | 330 } |
309 | 331 |
310 // Visit the declarations and body unless there is an illegal | 332 // Visit the declarations and body unless there is an illegal |
311 // redeclaration. | 333 // redeclaration. |
312 if (scope()->HasIllegalRedeclaration()) { | 334 if (scope()->HasIllegalRedeclaration()) { |
313 Comment cmnt(masm_, "[ Declarations"); | 335 Comment cmnt(masm_, "[ Declarations"); |
314 scope()->VisitIllegalRedeclaration(this); | 336 scope()->VisitIllegalRedeclaration(this); |
315 | 337 |
(...skipping 928 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1244 context()->Plug(eax); | 1266 context()->Plug(eax); |
1245 } | 1267 } |
1246 | 1268 |
1247 | 1269 |
1248 void FullCodeGenerator::VisitVariableProxy(VariableProxy* expr) { | 1270 void FullCodeGenerator::VisitVariableProxy(VariableProxy* expr) { |
1249 Comment cmnt(masm_, "[ VariableProxy"); | 1271 Comment cmnt(masm_, "[ VariableProxy"); |
1250 EmitVariableLoad(expr); | 1272 EmitVariableLoad(expr); |
1251 } | 1273 } |
1252 | 1274 |
1253 | 1275 |
1254 void FullCodeGenerator::EmitLoadHomeObject(SuperReference* expr) { | |
1255 Comment cnmt(masm_, "[ SuperReference "); | |
1256 | |
1257 __ mov(LoadDescriptor::ReceiverRegister(), | |
1258 Operand(ebp, JavaScriptFrameConstants::kFunctionOffset)); | |
1259 | |
1260 Handle<Symbol> home_object_symbol(isolate()->heap()->home_object_symbol()); | |
1261 __ mov(LoadDescriptor::NameRegister(), home_object_symbol); | |
1262 | |
1263 if (FLAG_vector_ics) { | |
1264 __ mov(VectorLoadICDescriptor::SlotRegister(), | |
1265 Immediate(SmiFromSlot(expr->HomeObjectFeedbackSlot()))); | |
1266 CallLoadIC(NOT_CONTEXTUAL); | |
1267 } else { | |
1268 CallLoadIC(NOT_CONTEXTUAL, expr->HomeObjectFeedbackId()); | |
1269 } | |
1270 | |
1271 __ cmp(eax, isolate()->factory()->undefined_value()); | |
1272 Label done; | |
1273 __ j(not_equal, &done); | |
1274 __ CallRuntime(Runtime::kThrowNonMethodError, 0); | |
1275 __ bind(&done); | |
1276 } | |
1277 | |
1278 | |
1279 void FullCodeGenerator::EmitSetHomeObjectIfNeeded(Expression* initializer, | 1276 void FullCodeGenerator::EmitSetHomeObjectIfNeeded(Expression* initializer, |
1280 int offset) { | 1277 int offset) { |
1281 if (NeedsHomeObject(initializer)) { | 1278 if (NeedsHomeObject(initializer)) { |
1282 __ mov(StoreDescriptor::ReceiverRegister(), Operand(esp, 0)); | 1279 __ mov(StoreDescriptor::ReceiverRegister(), Operand(esp, 0)); |
1283 __ mov(StoreDescriptor::NameRegister(), | 1280 __ mov(StoreDescriptor::NameRegister(), |
1284 Immediate(isolate()->factory()->home_object_symbol())); | 1281 Immediate(isolate()->factory()->home_object_symbol())); |
1285 __ mov(StoreDescriptor::ValueRegister(), | 1282 __ mov(StoreDescriptor::ValueRegister(), |
1286 Operand(esp, offset * kPointerSize)); | 1283 Operand(esp, offset * kPointerSize)); |
1287 CallStoreIC(); | 1284 CallStoreIC(); |
1288 } | 1285 } |
(...skipping 587 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1876 Property* property = expr->target()->AsProperty(); | 1873 Property* property = expr->target()->AsProperty(); |
1877 LhsKind assign_type = GetAssignType(property); | 1874 LhsKind assign_type = GetAssignType(property); |
1878 | 1875 |
1879 // Evaluate LHS expression. | 1876 // Evaluate LHS expression. |
1880 switch (assign_type) { | 1877 switch (assign_type) { |
1881 case VARIABLE: | 1878 case VARIABLE: |
1882 // Nothing to do here. | 1879 // Nothing to do here. |
1883 break; | 1880 break; |
1884 case NAMED_SUPER_PROPERTY: | 1881 case NAMED_SUPER_PROPERTY: |
1885 VisitForStackValue(property->obj()->AsSuperReference()->this_var()); | 1882 VisitForStackValue(property->obj()->AsSuperReference()->this_var()); |
1886 EmitLoadHomeObject(property->obj()->AsSuperReference()); | 1883 VisitForAccumulatorValue( |
| 1884 property->obj()->AsSuperReference()->home_object_var()); |
1887 __ push(result_register()); | 1885 __ push(result_register()); |
1888 if (expr->is_compound()) { | 1886 if (expr->is_compound()) { |
1889 __ push(MemOperand(esp, kPointerSize)); | 1887 __ push(MemOperand(esp, kPointerSize)); |
1890 __ push(result_register()); | 1888 __ push(result_register()); |
1891 } | 1889 } |
1892 break; | 1890 break; |
1893 case NAMED_PROPERTY: | 1891 case NAMED_PROPERTY: |
1894 if (expr->is_compound()) { | 1892 if (expr->is_compound()) { |
1895 // We need the receiver both on the stack and in the register. | 1893 // We need the receiver both on the stack and in the register. |
1896 VisitForStackValue(property->obj()); | 1894 VisitForStackValue(property->obj()); |
1897 __ mov(LoadDescriptor::ReceiverRegister(), Operand(esp, 0)); | 1895 __ mov(LoadDescriptor::ReceiverRegister(), Operand(esp, 0)); |
1898 } else { | 1896 } else { |
1899 VisitForStackValue(property->obj()); | 1897 VisitForStackValue(property->obj()); |
1900 } | 1898 } |
1901 break; | 1899 break; |
1902 case KEYED_SUPER_PROPERTY: | 1900 case KEYED_SUPER_PROPERTY: |
1903 VisitForStackValue(property->obj()->AsSuperReference()->this_var()); | 1901 VisitForStackValue(property->obj()->AsSuperReference()->this_var()); |
1904 EmitLoadHomeObject(property->obj()->AsSuperReference()); | 1902 VisitForStackValue( |
1905 __ Push(result_register()); | 1903 property->obj()->AsSuperReference()->home_object_var()); |
1906 VisitForAccumulatorValue(property->key()); | 1904 VisitForAccumulatorValue(property->key()); |
1907 __ Push(result_register()); | 1905 __ Push(result_register()); |
1908 if (expr->is_compound()) { | 1906 if (expr->is_compound()) { |
1909 __ push(MemOperand(esp, 2 * kPointerSize)); | 1907 __ push(MemOperand(esp, 2 * kPointerSize)); |
1910 __ push(MemOperand(esp, 2 * kPointerSize)); | 1908 __ push(MemOperand(esp, 2 * kPointerSize)); |
1911 __ push(result_register()); | 1909 __ push(result_register()); |
1912 } | 1910 } |
1913 break; | 1911 break; |
1914 case KEYED_PROPERTY: { | 1912 case KEYED_PROPERTY: { |
1915 if (expr->is_compound()) { | 1913 if (expr->is_compound()) { |
(...skipping 616 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2532 __ Move(StoreDescriptor::ReceiverRegister(), eax); | 2530 __ Move(StoreDescriptor::ReceiverRegister(), eax); |
2533 __ pop(StoreDescriptor::ValueRegister()); // Restore value. | 2531 __ pop(StoreDescriptor::ValueRegister()); // Restore value. |
2534 __ mov(StoreDescriptor::NameRegister(), | 2532 __ mov(StoreDescriptor::NameRegister(), |
2535 prop->key()->AsLiteral()->value()); | 2533 prop->key()->AsLiteral()->value()); |
2536 CallStoreIC(); | 2534 CallStoreIC(); |
2537 break; | 2535 break; |
2538 } | 2536 } |
2539 case NAMED_SUPER_PROPERTY: { | 2537 case NAMED_SUPER_PROPERTY: { |
2540 __ push(eax); | 2538 __ push(eax); |
2541 VisitForStackValue(prop->obj()->AsSuperReference()->this_var()); | 2539 VisitForStackValue(prop->obj()->AsSuperReference()->this_var()); |
2542 EmitLoadHomeObject(prop->obj()->AsSuperReference()); | 2540 VisitForAccumulatorValue( |
| 2541 prop->obj()->AsSuperReference()->home_object_var()); |
2543 // stack: value, this; eax: home_object | 2542 // stack: value, this; eax: home_object |
2544 Register scratch = ecx; | 2543 Register scratch = ecx; |
2545 Register scratch2 = edx; | 2544 Register scratch2 = edx; |
2546 __ mov(scratch, result_register()); // home_object | 2545 __ mov(scratch, result_register()); // home_object |
2547 __ mov(eax, MemOperand(esp, kPointerSize)); // value | 2546 __ mov(eax, MemOperand(esp, kPointerSize)); // value |
2548 __ mov(scratch2, MemOperand(esp, 0)); // this | 2547 __ mov(scratch2, MemOperand(esp, 0)); // this |
2549 __ mov(MemOperand(esp, kPointerSize), scratch2); // this | 2548 __ mov(MemOperand(esp, kPointerSize), scratch2); // this |
2550 __ mov(MemOperand(esp, 0), scratch); // home_object | 2549 __ mov(MemOperand(esp, 0), scratch); // home_object |
2551 // stack: this, home_object. eax: value | 2550 // stack: this, home_object. eax: value |
2552 EmitNamedSuperPropertyStore(prop); | 2551 EmitNamedSuperPropertyStore(prop); |
2553 break; | 2552 break; |
2554 } | 2553 } |
2555 case KEYED_SUPER_PROPERTY: { | 2554 case KEYED_SUPER_PROPERTY: { |
2556 __ push(eax); | 2555 __ push(eax); |
2557 VisitForStackValue(prop->obj()->AsSuperReference()->this_var()); | 2556 VisitForStackValue(prop->obj()->AsSuperReference()->this_var()); |
2558 EmitLoadHomeObject(prop->obj()->AsSuperReference()); | 2557 VisitForStackValue(prop->obj()->AsSuperReference()->home_object_var()); |
2559 __ push(result_register()); | |
2560 VisitForAccumulatorValue(prop->key()); | 2558 VisitForAccumulatorValue(prop->key()); |
2561 Register scratch = ecx; | 2559 Register scratch = ecx; |
2562 Register scratch2 = edx; | 2560 Register scratch2 = edx; |
2563 __ mov(scratch2, MemOperand(esp, 2 * kPointerSize)); // value | 2561 __ mov(scratch2, MemOperand(esp, 2 * kPointerSize)); // value |
2564 // stack: value, this, home_object; eax: key, edx: value | 2562 // stack: value, this, home_object; eax: key, edx: value |
2565 __ mov(scratch, MemOperand(esp, kPointerSize)); // this | 2563 __ mov(scratch, MemOperand(esp, kPointerSize)); // this |
2566 __ mov(MemOperand(esp, 2 * kPointerSize), scratch); | 2564 __ mov(MemOperand(esp, 2 * kPointerSize), scratch); |
2567 __ mov(scratch, MemOperand(esp, 0)); // home_object | 2565 __ mov(scratch, MemOperand(esp, 0)); // home_object |
2568 __ mov(MemOperand(esp, kPointerSize), scratch); | 2566 __ mov(MemOperand(esp, kPointerSize), scratch); |
2569 __ mov(MemOperand(esp, 0), eax); | 2567 __ mov(MemOperand(esp, 0), eax); |
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2760 Comment cmnt(masm_, "[ Property"); | 2758 Comment cmnt(masm_, "[ Property"); |
2761 Expression* key = expr->key(); | 2759 Expression* key = expr->key(); |
2762 | 2760 |
2763 if (key->IsPropertyName()) { | 2761 if (key->IsPropertyName()) { |
2764 if (!expr->IsSuperAccess()) { | 2762 if (!expr->IsSuperAccess()) { |
2765 VisitForAccumulatorValue(expr->obj()); | 2763 VisitForAccumulatorValue(expr->obj()); |
2766 __ Move(LoadDescriptor::ReceiverRegister(), result_register()); | 2764 __ Move(LoadDescriptor::ReceiverRegister(), result_register()); |
2767 EmitNamedPropertyLoad(expr); | 2765 EmitNamedPropertyLoad(expr); |
2768 } else { | 2766 } else { |
2769 VisitForStackValue(expr->obj()->AsSuperReference()->this_var()); | 2767 VisitForStackValue(expr->obj()->AsSuperReference()->this_var()); |
2770 EmitLoadHomeObject(expr->obj()->AsSuperReference()); | 2768 VisitForStackValue(expr->obj()->AsSuperReference()->home_object_var()); |
2771 __ push(result_register()); | |
2772 EmitNamedSuperPropertyLoad(expr); | 2769 EmitNamedSuperPropertyLoad(expr); |
2773 } | 2770 } |
2774 } else { | 2771 } else { |
2775 if (!expr->IsSuperAccess()) { | 2772 if (!expr->IsSuperAccess()) { |
2776 VisitForStackValue(expr->obj()); | 2773 VisitForStackValue(expr->obj()); |
2777 VisitForAccumulatorValue(expr->key()); | 2774 VisitForAccumulatorValue(expr->key()); |
2778 __ pop(LoadDescriptor::ReceiverRegister()); // Object. | 2775 __ pop(LoadDescriptor::ReceiverRegister()); // Object. |
2779 __ Move(LoadDescriptor::NameRegister(), result_register()); // Key. | 2776 __ Move(LoadDescriptor::NameRegister(), result_register()); // Key. |
2780 EmitKeyedPropertyLoad(expr); | 2777 EmitKeyedPropertyLoad(expr); |
2781 } else { | 2778 } else { |
2782 VisitForStackValue(expr->obj()->AsSuperReference()->this_var()); | 2779 VisitForStackValue(expr->obj()->AsSuperReference()->this_var()); |
2783 EmitLoadHomeObject(expr->obj()->AsSuperReference()); | 2780 VisitForStackValue(expr->obj()->AsSuperReference()->home_object_var()); |
2784 __ push(result_register()); | |
2785 VisitForStackValue(expr->key()); | 2781 VisitForStackValue(expr->key()); |
2786 EmitKeyedSuperPropertyLoad(expr); | 2782 EmitKeyedSuperPropertyLoad(expr); |
2787 } | 2783 } |
2788 } | 2784 } |
2789 PrepareForBailoutForId(expr->LoadId(), TOS_REG); | 2785 PrepareForBailoutForId(expr->LoadId(), TOS_REG); |
2790 context()->Plug(eax); | 2786 context()->Plug(eax); |
2791 } | 2787 } |
2792 | 2788 |
2793 | 2789 |
2794 void FullCodeGenerator::CallIC(Handle<Code> code, | 2790 void FullCodeGenerator::CallIC(Handle<Code> code, |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2833 Expression* callee = expr->expression(); | 2829 Expression* callee = expr->expression(); |
2834 DCHECK(callee->IsProperty()); | 2830 DCHECK(callee->IsProperty()); |
2835 Property* prop = callee->AsProperty(); | 2831 Property* prop = callee->AsProperty(); |
2836 DCHECK(prop->IsSuperAccess()); | 2832 DCHECK(prop->IsSuperAccess()); |
2837 | 2833 |
2838 SetSourcePosition(prop->position()); | 2834 SetSourcePosition(prop->position()); |
2839 Literal* key = prop->key()->AsLiteral(); | 2835 Literal* key = prop->key()->AsLiteral(); |
2840 DCHECK(!key->value()->IsSmi()); | 2836 DCHECK(!key->value()->IsSmi()); |
2841 // Load the function from the receiver. | 2837 // Load the function from the receiver. |
2842 SuperReference* super_ref = callee->AsProperty()->obj()->AsSuperReference(); | 2838 SuperReference* super_ref = callee->AsProperty()->obj()->AsSuperReference(); |
2843 EmitLoadHomeObject(super_ref); | 2839 VisitForStackValue(super_ref->home_object_var()); |
2844 __ push(eax); | |
2845 VisitForAccumulatorValue(super_ref->this_var()); | 2840 VisitForAccumulatorValue(super_ref->this_var()); |
2846 __ push(eax); | 2841 __ push(eax); |
2847 __ push(eax); | 2842 __ push(eax); |
2848 __ push(Operand(esp, kPointerSize * 2)); | 2843 __ push(Operand(esp, kPointerSize * 2)); |
2849 __ push(Immediate(key->value())); | 2844 __ push(Immediate(key->value())); |
2850 // Stack here: | 2845 // Stack here: |
2851 // - home_object | 2846 // - home_object |
2852 // - this (receiver) | 2847 // - this (receiver) |
2853 // - this (receiver) <-- LoadFromSuper will pop here and below. | 2848 // - this (receiver) <-- LoadFromSuper will pop here and below. |
2854 // - home_object | 2849 // - home_object |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2890 | 2885 |
2891 void FullCodeGenerator::EmitKeyedSuperCallWithLoadIC(Call* expr) { | 2886 void FullCodeGenerator::EmitKeyedSuperCallWithLoadIC(Call* expr) { |
2892 Expression* callee = expr->expression(); | 2887 Expression* callee = expr->expression(); |
2893 DCHECK(callee->IsProperty()); | 2888 DCHECK(callee->IsProperty()); |
2894 Property* prop = callee->AsProperty(); | 2889 Property* prop = callee->AsProperty(); |
2895 DCHECK(prop->IsSuperAccess()); | 2890 DCHECK(prop->IsSuperAccess()); |
2896 | 2891 |
2897 SetSourcePosition(prop->position()); | 2892 SetSourcePosition(prop->position()); |
2898 // Load the function from the receiver. | 2893 // Load the function from the receiver. |
2899 SuperReference* super_ref = callee->AsProperty()->obj()->AsSuperReference(); | 2894 SuperReference* super_ref = callee->AsProperty()->obj()->AsSuperReference(); |
2900 EmitLoadHomeObject(super_ref); | 2895 VisitForStackValue(super_ref->home_object_var()); |
2901 __ push(eax); | |
2902 VisitForAccumulatorValue(super_ref->this_var()); | 2896 VisitForAccumulatorValue(super_ref->this_var()); |
2903 __ push(eax); | 2897 __ push(eax); |
2904 __ push(eax); | 2898 __ push(eax); |
2905 __ push(Operand(esp, kPointerSize * 2)); | 2899 __ push(Operand(esp, kPointerSize * 2)); |
2906 VisitForStackValue(prop->key()); | 2900 VisitForStackValue(prop->key()); |
2907 // Stack here: | 2901 // Stack here: |
2908 // - home_object | 2902 // - home_object |
2909 // - this (receiver) | 2903 // - this (receiver) |
2910 // - this (receiver) <-- LoadKeyedFromSuper will pop here and below. | 2904 // - this (receiver) <-- LoadKeyedFromSuper will pop here and below. |
2911 // - home_object | 2905 // - home_object |
(...skipping 1855 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4767 case NAMED_PROPERTY: { | 4761 case NAMED_PROPERTY: { |
4768 // Put the object both on the stack and in the register. | 4762 // Put the object both on the stack and in the register. |
4769 VisitForStackValue(prop->obj()); | 4763 VisitForStackValue(prop->obj()); |
4770 __ mov(LoadDescriptor::ReceiverRegister(), Operand(esp, 0)); | 4764 __ mov(LoadDescriptor::ReceiverRegister(), Operand(esp, 0)); |
4771 EmitNamedPropertyLoad(prop); | 4765 EmitNamedPropertyLoad(prop); |
4772 break; | 4766 break; |
4773 } | 4767 } |
4774 | 4768 |
4775 case NAMED_SUPER_PROPERTY: { | 4769 case NAMED_SUPER_PROPERTY: { |
4776 VisitForStackValue(prop->obj()->AsSuperReference()->this_var()); | 4770 VisitForStackValue(prop->obj()->AsSuperReference()->this_var()); |
4777 EmitLoadHomeObject(prop->obj()->AsSuperReference()); | 4771 VisitForAccumulatorValue( |
| 4772 prop->obj()->AsSuperReference()->home_object_var()); |
4778 __ push(result_register()); | 4773 __ push(result_register()); |
4779 __ push(MemOperand(esp, kPointerSize)); | 4774 __ push(MemOperand(esp, kPointerSize)); |
4780 __ push(result_register()); | 4775 __ push(result_register()); |
4781 EmitNamedSuperPropertyLoad(prop); | 4776 EmitNamedSuperPropertyLoad(prop); |
4782 break; | 4777 break; |
4783 } | 4778 } |
4784 | 4779 |
4785 case KEYED_SUPER_PROPERTY: { | 4780 case KEYED_SUPER_PROPERTY: { |
4786 VisitForStackValue(prop->obj()->AsSuperReference()->this_var()); | 4781 VisitForStackValue(prop->obj()->AsSuperReference()->this_var()); |
4787 EmitLoadHomeObject(prop->obj()->AsSuperReference()); | 4782 VisitForStackValue(prop->obj()->AsSuperReference()->home_object_var()); |
4788 __ push(result_register()); | |
4789 VisitForAccumulatorValue(prop->key()); | 4783 VisitForAccumulatorValue(prop->key()); |
4790 __ push(result_register()); | 4784 __ push(result_register()); |
4791 __ push(MemOperand(esp, 2 * kPointerSize)); | 4785 __ push(MemOperand(esp, 2 * kPointerSize)); |
4792 __ push(MemOperand(esp, 2 * kPointerSize)); | 4786 __ push(MemOperand(esp, 2 * kPointerSize)); |
4793 __ push(result_register()); | 4787 __ push(result_register()); |
4794 EmitKeyedSuperPropertyLoad(prop); | 4788 EmitKeyedSuperPropertyLoad(prop); |
4795 break; | 4789 break; |
4796 } | 4790 } |
4797 | 4791 |
4798 case KEYED_PROPERTY: { | 4792 case KEYED_PROPERTY: { |
(...skipping 577 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5376 DCHECK_EQ(isolate->builtins()->OsrAfterStackCheck()->entry(), | 5370 DCHECK_EQ(isolate->builtins()->OsrAfterStackCheck()->entry(), |
5377 Assembler::target_address_at(call_target_address, | 5371 Assembler::target_address_at(call_target_address, |
5378 unoptimized_code)); | 5372 unoptimized_code)); |
5379 return OSR_AFTER_STACK_CHECK; | 5373 return OSR_AFTER_STACK_CHECK; |
5380 } | 5374 } |
5381 | 5375 |
5382 | 5376 |
5383 } } // namespace v8::internal | 5377 } } // namespace v8::internal |
5384 | 5378 |
5385 #endif // V8_TARGET_ARCH_IA32 | 5379 #endif // V8_TARGET_ARCH_IA32 |
OLD | NEW |