| 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_MIPS64 | 7 #if V8_TARGET_ARCH_MIPS64 |
| 8 | 8 |
| 9 // Note on Mips implementation: | 9 // Note on Mips implementation: |
| 10 // | 10 // |
| (...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 307 type = ArgumentsAccessStub::NEW_SLOPPY_SLOW; | 307 type = ArgumentsAccessStub::NEW_SLOPPY_SLOW; |
| 308 } else { | 308 } else { |
| 309 type = ArgumentsAccessStub::NEW_SLOPPY_FAST; | 309 type = ArgumentsAccessStub::NEW_SLOPPY_FAST; |
| 310 } | 310 } |
| 311 ArgumentsAccessStub stub(isolate(), type, has_new_target); | 311 ArgumentsAccessStub stub(isolate(), type, has_new_target); |
| 312 __ CallStub(&stub); | 312 __ CallStub(&stub); |
| 313 | 313 |
| 314 SetVar(arguments, v0, a1, a2); | 314 SetVar(arguments, v0, a1, a2); |
| 315 } | 315 } |
| 316 | 316 |
| 317 // Possibly set up a local binding to the [[HomeObject]]. |
| 318 Variable* home_object_var = scope()->home_object_var(); |
| 319 if (home_object_var != nullptr) { |
| 320 Comment cmnt(masm_, "[ Home object"); |
| 321 if (function_in_register) { |
| 322 __ mov(LoadDescriptor::ReceiverRegister(), a1); |
| 323 } else { |
| 324 __ ld(LoadDescriptor::ReceiverRegister(), |
| 325 MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset)); |
| 326 } |
| 327 Handle<Symbol> home_object_symbol(isolate()->heap()->home_object_symbol()); |
| 328 __ li(LoadDescriptor::NameRegister(), home_object_symbol); |
| 329 __ li(LoadDescriptor::SlotRegister(), |
| 330 Operand(SmiFromSlot(function()->HomeObjectFeedbackSlot()))); |
| 331 CallLoadIC(NOT_CONTEXTUAL); |
| 332 |
| 333 SetVar(home_object_var, v0, a1, a2); |
| 334 } |
| 335 |
| 317 if (FLAG_trace) { | 336 if (FLAG_trace) { |
| 318 __ CallRuntime(Runtime::kTraceEnter, 0); | 337 __ CallRuntime(Runtime::kTraceEnter, 0); |
| 319 } | 338 } |
| 320 // Visit the declarations and body unless there is an illegal | 339 // Visit the declarations and body unless there is an illegal |
| 321 // redeclaration. | 340 // redeclaration. |
| 322 if (scope()->HasIllegalRedeclaration()) { | 341 if (scope()->HasIllegalRedeclaration()) { |
| 323 Comment cmnt(masm_, "[ Declarations"); | 342 Comment cmnt(masm_, "[ Declarations"); |
| 324 scope()->VisitIllegalRedeclaration(this); | 343 scope()->VisitIllegalRedeclaration(this); |
| 325 | 344 |
| 326 } else { | 345 } else { |
| (...skipping 976 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1303 context()->Plug(v0); | 1322 context()->Plug(v0); |
| 1304 } | 1323 } |
| 1305 | 1324 |
| 1306 | 1325 |
| 1307 void FullCodeGenerator::VisitVariableProxy(VariableProxy* expr) { | 1326 void FullCodeGenerator::VisitVariableProxy(VariableProxy* expr) { |
| 1308 Comment cmnt(masm_, "[ VariableProxy"); | 1327 Comment cmnt(masm_, "[ VariableProxy"); |
| 1309 EmitVariableLoad(expr); | 1328 EmitVariableLoad(expr); |
| 1310 } | 1329 } |
| 1311 | 1330 |
| 1312 | 1331 |
| 1332 <<<<<<< HEAD |
| 1313 void FullCodeGenerator::EmitLoadHomeObject(SuperReference* expr) { | 1333 void FullCodeGenerator::EmitLoadHomeObject(SuperReference* expr) { |
| 1314 Comment cnmt(masm_, "[ SuperReference "); | 1334 Comment cnmt(masm_, "[ SuperReference "); |
| 1315 | 1335 |
| 1316 __ ld(LoadDescriptor::ReceiverRegister(), | 1336 __ ld(LoadDescriptor::ReceiverRegister(), |
| 1317 MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset)); | 1337 MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset)); |
| 1318 | 1338 |
| 1319 Handle<Symbol> home_object_symbol(isolate()->heap()->home_object_symbol()); | 1339 Handle<Symbol> home_object_symbol(isolate()->heap()->home_object_symbol()); |
| 1320 __ li(LoadDescriptor::NameRegister(), home_object_symbol); | 1340 __ li(LoadDescriptor::NameRegister(), home_object_symbol); |
| 1321 | 1341 |
| 1322 __ li(LoadDescriptor::SlotRegister(), | 1342 __ li(LoadDescriptor::SlotRegister(), |
| 1323 Operand(SmiFromSlot(expr->HomeObjectFeedbackSlot()))); | 1343 Operand(SmiFromSlot(expr->HomeObjectFeedbackSlot()))); |
| 1324 CallLoadIC(NOT_CONTEXTUAL); | 1344 CallLoadIC(NOT_CONTEXTUAL); |
| 1325 | 1345 |
| 1326 Label done; | 1346 Label done; |
| 1327 __ Branch(&done, ne, v0, Operand(isolate()->factory()->undefined_value())); | 1347 __ Branch(&done, ne, v0, Operand(isolate()->factory()->undefined_value())); |
| 1328 __ CallRuntime(Runtime::kThrowNonMethodError, 0); | 1348 __ CallRuntime(Runtime::kThrowNonMethodError, 0); |
| 1329 __ bind(&done); | 1349 __ bind(&done); |
| 1330 } | 1350 } |
| 1331 | 1351 |
| 1332 | 1352 |
| 1353 ======= |
| 1354 >>>>>>> [es6] Support super.property in eval and arrow functions |
| 1333 void FullCodeGenerator::EmitSetHomeObjectIfNeeded(Expression* initializer, | 1355 void FullCodeGenerator::EmitSetHomeObjectIfNeeded(Expression* initializer, |
| 1334 int offset) { | 1356 int offset) { |
| 1335 if (NeedsHomeObject(initializer)) { | 1357 if (NeedsHomeObject(initializer)) { |
| 1336 __ ld(StoreDescriptor::ReceiverRegister(), MemOperand(sp)); | 1358 __ ld(StoreDescriptor::ReceiverRegister(), MemOperand(sp)); |
| 1337 __ li(StoreDescriptor::NameRegister(), | 1359 __ li(StoreDescriptor::NameRegister(), |
| 1338 Operand(isolate()->factory()->home_object_symbol())); | 1360 Operand(isolate()->factory()->home_object_symbol())); |
| 1339 __ ld(StoreDescriptor::ValueRegister(), | 1361 __ ld(StoreDescriptor::ValueRegister(), |
| 1340 MemOperand(sp, offset * kPointerSize)); | 1362 MemOperand(sp, offset * kPointerSize)); |
| 1341 CallStoreIC(); | 1363 CallStoreIC(); |
| 1342 } | 1364 } |
| (...skipping 591 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1934 if (expr->is_compound()) { | 1956 if (expr->is_compound()) { |
| 1935 // We need the receiver both on the stack and in the register. | 1957 // We need the receiver both on the stack and in the register. |
| 1936 VisitForStackValue(property->obj()); | 1958 VisitForStackValue(property->obj()); |
| 1937 __ ld(LoadDescriptor::ReceiverRegister(), MemOperand(sp, 0)); | 1959 __ ld(LoadDescriptor::ReceiverRegister(), MemOperand(sp, 0)); |
| 1938 } else { | 1960 } else { |
| 1939 VisitForStackValue(property->obj()); | 1961 VisitForStackValue(property->obj()); |
| 1940 } | 1962 } |
| 1941 break; | 1963 break; |
| 1942 case NAMED_SUPER_PROPERTY: | 1964 case NAMED_SUPER_PROPERTY: |
| 1943 VisitForStackValue(property->obj()->AsSuperReference()->this_var()); | 1965 VisitForStackValue(property->obj()->AsSuperReference()->this_var()); |
| 1944 EmitLoadHomeObject(property->obj()->AsSuperReference()); | 1966 VisitForAccumulatorValue( |
| 1967 property->obj()->AsSuperReference()->home_object_var()); |
| 1945 __ Push(result_register()); | 1968 __ Push(result_register()); |
| 1946 if (expr->is_compound()) { | 1969 if (expr->is_compound()) { |
| 1947 const Register scratch = a1; | 1970 const Register scratch = a1; |
| 1948 __ ld(scratch, MemOperand(sp, kPointerSize)); | 1971 __ ld(scratch, MemOperand(sp, kPointerSize)); |
| 1949 __ Push(scratch, result_register()); | 1972 __ Push(scratch, result_register()); |
| 1950 } | 1973 } |
| 1951 break; | 1974 break; |
| 1952 case KEYED_SUPER_PROPERTY: { | 1975 case KEYED_SUPER_PROPERTY: { |
| 1953 const Register scratch = a1; | 1976 const Register scratch = a1; |
| 1954 VisitForStackValue(property->obj()->AsSuperReference()->this_var()); | 1977 VisitForStackValue(property->obj()->AsSuperReference()->this_var()); |
| 1955 EmitLoadHomeObject(property->obj()->AsSuperReference()); | 1978 VisitForAccumulatorValue( |
| 1979 property->obj()->AsSuperReference()->home_object_var()); |
| 1956 __ Move(scratch, result_register()); | 1980 __ Move(scratch, result_register()); |
| 1957 VisitForAccumulatorValue(property->key()); | 1981 VisitForAccumulatorValue(property->key()); |
| 1958 __ Push(scratch, result_register()); | 1982 __ Push(scratch, result_register()); |
| 1959 if (expr->is_compound()) { | 1983 if (expr->is_compound()) { |
| 1960 const Register scratch1 = a4; | 1984 const Register scratch1 = a4; |
| 1961 __ ld(scratch1, MemOperand(sp, 2 * kPointerSize)); | 1985 __ ld(scratch1, MemOperand(sp, 2 * kPointerSize)); |
| 1962 __ Push(scratch1, scratch, result_register()); | 1986 __ Push(scratch1, scratch, result_register()); |
| 1963 } | 1987 } |
| 1964 break; | 1988 break; |
| 1965 } | 1989 } |
| (...skipping 612 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2578 __ mov(StoreDescriptor::ReceiverRegister(), result_register()); | 2602 __ mov(StoreDescriptor::ReceiverRegister(), result_register()); |
| 2579 __ pop(StoreDescriptor::ValueRegister()); // Restore value. | 2603 __ pop(StoreDescriptor::ValueRegister()); // Restore value. |
| 2580 __ li(StoreDescriptor::NameRegister(), | 2604 __ li(StoreDescriptor::NameRegister(), |
| 2581 Operand(prop->key()->AsLiteral()->value())); | 2605 Operand(prop->key()->AsLiteral()->value())); |
| 2582 CallStoreIC(); | 2606 CallStoreIC(); |
| 2583 break; | 2607 break; |
| 2584 } | 2608 } |
| 2585 case NAMED_SUPER_PROPERTY: { | 2609 case NAMED_SUPER_PROPERTY: { |
| 2586 __ Push(v0); | 2610 __ Push(v0); |
| 2587 VisitForStackValue(prop->obj()->AsSuperReference()->this_var()); | 2611 VisitForStackValue(prop->obj()->AsSuperReference()->this_var()); |
| 2588 EmitLoadHomeObject(prop->obj()->AsSuperReference()); | 2612 VisitForAccumulatorValue( |
| 2613 prop->obj()->AsSuperReference()->home_object_var()); |
| 2589 // stack: value, this; v0: home_object | 2614 // stack: value, this; v0: home_object |
| 2590 Register scratch = a2; | 2615 Register scratch = a2; |
| 2591 Register scratch2 = a3; | 2616 Register scratch2 = a3; |
| 2592 __ mov(scratch, result_register()); // home_object | 2617 __ mov(scratch, result_register()); // home_object |
| 2593 __ ld(v0, MemOperand(sp, kPointerSize)); // value | 2618 __ ld(v0, MemOperand(sp, kPointerSize)); // value |
| 2594 __ ld(scratch2, MemOperand(sp, 0)); // this | 2619 __ ld(scratch2, MemOperand(sp, 0)); // this |
| 2595 __ sd(scratch2, MemOperand(sp, kPointerSize)); // this | 2620 __ sd(scratch2, MemOperand(sp, kPointerSize)); // this |
| 2596 __ sd(scratch, MemOperand(sp, 0)); // home_object | 2621 __ sd(scratch, MemOperand(sp, 0)); // home_object |
| 2597 // stack: this, home_object; v0: value | 2622 // stack: this, home_object; v0: value |
| 2598 EmitNamedSuperPropertyStore(prop); | 2623 EmitNamedSuperPropertyStore(prop); |
| 2599 break; | 2624 break; |
| 2600 } | 2625 } |
| 2601 case KEYED_SUPER_PROPERTY: { | 2626 case KEYED_SUPER_PROPERTY: { |
| 2602 __ Push(v0); | 2627 __ Push(v0); |
| 2603 VisitForStackValue(prop->obj()->AsSuperReference()->this_var()); | 2628 VisitForStackValue(prop->obj()->AsSuperReference()->this_var()); |
| 2604 EmitLoadHomeObject(prop->obj()->AsSuperReference()); | 2629 VisitForStackValue(prop->obj()->AsSuperReference()->home_object_var()); |
| 2605 __ Push(result_register()); | |
| 2606 VisitForAccumulatorValue(prop->key()); | 2630 VisitForAccumulatorValue(prop->key()); |
| 2607 Register scratch = a2; | 2631 Register scratch = a2; |
| 2608 Register scratch2 = a3; | 2632 Register scratch2 = a3; |
| 2609 __ ld(scratch2, MemOperand(sp, 2 * kPointerSize)); // value | 2633 __ ld(scratch2, MemOperand(sp, 2 * kPointerSize)); // value |
| 2610 // stack: value, this, home_object; v0: key, a3: value | 2634 // stack: value, this, home_object; v0: key, a3: value |
| 2611 __ ld(scratch, MemOperand(sp, kPointerSize)); // this | 2635 __ ld(scratch, MemOperand(sp, kPointerSize)); // this |
| 2612 __ sd(scratch, MemOperand(sp, 2 * kPointerSize)); | 2636 __ sd(scratch, MemOperand(sp, 2 * kPointerSize)); |
| 2613 __ ld(scratch, MemOperand(sp, 0)); // home_object | 2637 __ ld(scratch, MemOperand(sp, 0)); // home_object |
| 2614 __ sd(scratch, MemOperand(sp, kPointerSize)); | 2638 __ sd(scratch, MemOperand(sp, kPointerSize)); |
| 2615 __ sd(v0, MemOperand(sp, 0)); | 2639 __ sd(v0, MemOperand(sp, 0)); |
| (...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2816 Comment cmnt(masm_, "[ Property"); | 2840 Comment cmnt(masm_, "[ Property"); |
| 2817 Expression* key = expr->key(); | 2841 Expression* key = expr->key(); |
| 2818 | 2842 |
| 2819 if (key->IsPropertyName()) { | 2843 if (key->IsPropertyName()) { |
| 2820 if (!expr->IsSuperAccess()) { | 2844 if (!expr->IsSuperAccess()) { |
| 2821 VisitForAccumulatorValue(expr->obj()); | 2845 VisitForAccumulatorValue(expr->obj()); |
| 2822 __ Move(LoadDescriptor::ReceiverRegister(), v0); | 2846 __ Move(LoadDescriptor::ReceiverRegister(), v0); |
| 2823 EmitNamedPropertyLoad(expr); | 2847 EmitNamedPropertyLoad(expr); |
| 2824 } else { | 2848 } else { |
| 2825 VisitForStackValue(expr->obj()->AsSuperReference()->this_var()); | 2849 VisitForStackValue(expr->obj()->AsSuperReference()->this_var()); |
| 2826 EmitLoadHomeObject(expr->obj()->AsSuperReference()); | 2850 VisitForStackValue(expr->obj()->AsSuperReference()->home_object_var()); |
| 2827 __ Push(result_register()); | |
| 2828 EmitNamedSuperPropertyLoad(expr); | 2851 EmitNamedSuperPropertyLoad(expr); |
| 2829 } | 2852 } |
| 2830 } else { | 2853 } else { |
| 2831 if (!expr->IsSuperAccess()) { | 2854 if (!expr->IsSuperAccess()) { |
| 2832 VisitForStackValue(expr->obj()); | 2855 VisitForStackValue(expr->obj()); |
| 2833 VisitForAccumulatorValue(expr->key()); | 2856 VisitForAccumulatorValue(expr->key()); |
| 2834 __ Move(LoadDescriptor::NameRegister(), v0); | 2857 __ Move(LoadDescriptor::NameRegister(), v0); |
| 2835 __ pop(LoadDescriptor::ReceiverRegister()); | 2858 __ pop(LoadDescriptor::ReceiverRegister()); |
| 2836 EmitKeyedPropertyLoad(expr); | 2859 EmitKeyedPropertyLoad(expr); |
| 2837 } else { | 2860 } else { |
| 2838 VisitForStackValue(expr->obj()->AsSuperReference()->this_var()); | 2861 VisitForStackValue(expr->obj()->AsSuperReference()->this_var()); |
| 2839 EmitLoadHomeObject(expr->obj()->AsSuperReference()); | 2862 VisitForStackValue(expr->obj()->AsSuperReference()->home_object_var()); |
| 2840 __ Push(result_register()); | |
| 2841 VisitForStackValue(expr->key()); | 2863 VisitForStackValue(expr->key()); |
| 2842 EmitKeyedSuperPropertyLoad(expr); | 2864 EmitKeyedSuperPropertyLoad(expr); |
| 2843 } | 2865 } |
| 2844 } | 2866 } |
| 2845 PrepareForBailoutForId(expr->LoadId(), TOS_REG); | 2867 PrepareForBailoutForId(expr->LoadId(), TOS_REG); |
| 2846 context()->Plug(v0); | 2868 context()->Plug(v0); |
| 2847 } | 2869 } |
| 2848 | 2870 |
| 2849 | 2871 |
| 2850 void FullCodeGenerator::CallIC(Handle<Code> code, | 2872 void FullCodeGenerator::CallIC(Handle<Code> code, |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2893 DCHECK(callee->IsProperty()); | 2915 DCHECK(callee->IsProperty()); |
| 2894 Property* prop = callee->AsProperty(); | 2916 Property* prop = callee->AsProperty(); |
| 2895 DCHECK(prop->IsSuperAccess()); | 2917 DCHECK(prop->IsSuperAccess()); |
| 2896 | 2918 |
| 2897 SetSourcePosition(prop->position()); | 2919 SetSourcePosition(prop->position()); |
| 2898 Literal* key = prop->key()->AsLiteral(); | 2920 Literal* key = prop->key()->AsLiteral(); |
| 2899 DCHECK(!key->value()->IsSmi()); | 2921 DCHECK(!key->value()->IsSmi()); |
| 2900 // Load the function from the receiver. | 2922 // Load the function from the receiver. |
| 2901 const Register scratch = a1; | 2923 const Register scratch = a1; |
| 2902 SuperReference* super_ref = prop->obj()->AsSuperReference(); | 2924 SuperReference* super_ref = prop->obj()->AsSuperReference(); |
| 2903 EmitLoadHomeObject(super_ref); | 2925 VisitForAccumulatorValue(super_ref->home_object_var()); |
| 2904 __ mov(scratch, v0); | 2926 __ mov(scratch, v0); |
| 2905 VisitForAccumulatorValue(super_ref->this_var()); | 2927 VisitForAccumulatorValue(super_ref->this_var()); |
| 2906 __ Push(scratch, v0, v0, scratch); | 2928 __ Push(scratch, v0, v0, scratch); |
| 2907 __ Push(key->value()); | 2929 __ Push(key->value()); |
| 2908 | 2930 |
| 2909 // Stack here: | 2931 // Stack here: |
| 2910 // - home_object | 2932 // - home_object |
| 2911 // - this (receiver) | 2933 // - this (receiver) |
| 2912 // - this (receiver) <-- LoadFromSuper will pop here and below. | 2934 // - this (receiver) <-- LoadFromSuper will pop here and below. |
| 2913 // - home_object | 2935 // - home_object |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2951 void FullCodeGenerator::EmitKeyedSuperCallWithLoadIC(Call* expr) { | 2973 void FullCodeGenerator::EmitKeyedSuperCallWithLoadIC(Call* expr) { |
| 2952 Expression* callee = expr->expression(); | 2974 Expression* callee = expr->expression(); |
| 2953 DCHECK(callee->IsProperty()); | 2975 DCHECK(callee->IsProperty()); |
| 2954 Property* prop = callee->AsProperty(); | 2976 Property* prop = callee->AsProperty(); |
| 2955 DCHECK(prop->IsSuperAccess()); | 2977 DCHECK(prop->IsSuperAccess()); |
| 2956 | 2978 |
| 2957 SetSourcePosition(prop->position()); | 2979 SetSourcePosition(prop->position()); |
| 2958 // Load the function from the receiver. | 2980 // Load the function from the receiver. |
| 2959 const Register scratch = a1; | 2981 const Register scratch = a1; |
| 2960 SuperReference* super_ref = prop->obj()->AsSuperReference(); | 2982 SuperReference* super_ref = prop->obj()->AsSuperReference(); |
| 2961 EmitLoadHomeObject(super_ref); | 2983 VisitForAccumulatorValue(super_ref->home_object_var()); |
| 2962 __ Move(scratch, v0); | 2984 __ Move(scratch, v0); |
| 2963 VisitForAccumulatorValue(super_ref->this_var()); | 2985 VisitForAccumulatorValue(super_ref->this_var()); |
| 2964 __ Push(scratch, v0, v0, scratch); | 2986 __ Push(scratch, v0, v0, scratch); |
| 2965 VisitForStackValue(prop->key()); | 2987 VisitForStackValue(prop->key()); |
| 2966 | 2988 |
| 2967 // Stack here: | 2989 // Stack here: |
| 2968 // - home_object | 2990 // - home_object |
| 2969 // - this (receiver) | 2991 // - this (receiver) |
| 2970 // - this (receiver) <-- LoadKeyedFromSuper will pop here and below. | 2992 // - this (receiver) <-- LoadKeyedFromSuper will pop here and below. |
| 2971 // - home_object | 2993 // - home_object |
| (...skipping 1851 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4823 case NAMED_PROPERTY: { | 4845 case NAMED_PROPERTY: { |
| 4824 // Put the object both on the stack and in the register. | 4846 // Put the object both on the stack and in the register. |
| 4825 VisitForStackValue(prop->obj()); | 4847 VisitForStackValue(prop->obj()); |
| 4826 __ ld(LoadDescriptor::ReceiverRegister(), MemOperand(sp, 0)); | 4848 __ ld(LoadDescriptor::ReceiverRegister(), MemOperand(sp, 0)); |
| 4827 EmitNamedPropertyLoad(prop); | 4849 EmitNamedPropertyLoad(prop); |
| 4828 break; | 4850 break; |
| 4829 } | 4851 } |
| 4830 | 4852 |
| 4831 case NAMED_SUPER_PROPERTY: { | 4853 case NAMED_SUPER_PROPERTY: { |
| 4832 VisitForStackValue(prop->obj()->AsSuperReference()->this_var()); | 4854 VisitForStackValue(prop->obj()->AsSuperReference()->this_var()); |
| 4833 EmitLoadHomeObject(prop->obj()->AsSuperReference()); | 4855 VisitForAccumulatorValue( |
| 4856 prop->obj()->AsSuperReference()->home_object_var()); |
| 4834 __ Push(result_register()); | 4857 __ Push(result_register()); |
| 4835 const Register scratch = a1; | 4858 const Register scratch = a1; |
| 4836 __ ld(scratch, MemOperand(sp, kPointerSize)); | 4859 __ ld(scratch, MemOperand(sp, kPointerSize)); |
| 4837 __ Push(scratch, result_register()); | 4860 __ Push(scratch, result_register()); |
| 4838 EmitNamedSuperPropertyLoad(prop); | 4861 EmitNamedSuperPropertyLoad(prop); |
| 4839 break; | 4862 break; |
| 4840 } | 4863 } |
| 4841 | 4864 |
| 4842 case KEYED_SUPER_PROPERTY: { | 4865 case KEYED_SUPER_PROPERTY: { |
| 4843 VisitForStackValue(prop->obj()->AsSuperReference()->this_var()); | 4866 VisitForStackValue(prop->obj()->AsSuperReference()->this_var()); |
| 4844 EmitLoadHomeObject(prop->obj()->AsSuperReference()); | 4867 VisitForAccumulatorValue( |
| 4868 prop->obj()->AsSuperReference()->home_object_var()); |
| 4845 const Register scratch = a1; | 4869 const Register scratch = a1; |
| 4846 const Register scratch1 = a4; | 4870 const Register scratch1 = a4; |
| 4847 __ Move(scratch, result_register()); | 4871 __ Move(scratch, result_register()); |
| 4848 VisitForAccumulatorValue(prop->key()); | 4872 VisitForAccumulatorValue(prop->key()); |
| 4849 __ Push(scratch, result_register()); | 4873 __ Push(scratch, result_register()); |
| 4850 __ ld(scratch1, MemOperand(sp, 2 * kPointerSize)); | 4874 __ ld(scratch1, MemOperand(sp, 2 * kPointerSize)); |
| 4851 __ Push(scratch1, scratch, result_register()); | 4875 __ Push(scratch1, scratch, result_register()); |
| 4852 EmitKeyedSuperPropertyLoad(prop); | 4876 EmitKeyedSuperPropertyLoad(prop); |
| 4853 break; | 4877 break; |
| 4854 } | 4878 } |
| (...skipping 575 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5430 Assembler::target_address_at(pc_immediate_load_address)) == | 5454 Assembler::target_address_at(pc_immediate_load_address)) == |
| 5431 reinterpret_cast<uint64_t>( | 5455 reinterpret_cast<uint64_t>( |
| 5432 isolate->builtins()->OsrAfterStackCheck()->entry())); | 5456 isolate->builtins()->OsrAfterStackCheck()->entry())); |
| 5433 return OSR_AFTER_STACK_CHECK; | 5457 return OSR_AFTER_STACK_CHECK; |
| 5434 } | 5458 } |
| 5435 | 5459 |
| 5436 | 5460 |
| 5437 } } // namespace v8::internal | 5461 } } // namespace v8::internal |
| 5438 | 5462 |
| 5439 #endif // V8_TARGET_ARCH_MIPS64 | 5463 #endif // V8_TARGET_ARCH_MIPS64 |
| OLD | NEW |