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_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 289 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
300 type = ArgumentsAccessStub::NEW_SLOPPY_SLOW; | 300 type = ArgumentsAccessStub::NEW_SLOPPY_SLOW; |
301 } else { | 301 } else { |
302 type = ArgumentsAccessStub::NEW_SLOPPY_FAST; | 302 type = ArgumentsAccessStub::NEW_SLOPPY_FAST; |
303 } | 303 } |
304 ArgumentsAccessStub stub(isolate(), type, has_new_target); | 304 ArgumentsAccessStub stub(isolate(), type, has_new_target); |
305 __ CallStub(&stub); | 305 __ CallStub(&stub); |
306 | 306 |
307 SetVar(arguments, r0, r1, r2); | 307 SetVar(arguments, r0, r1, r2); |
308 } | 308 } |
309 | 309 |
| 310 // Possibly set up a local binding to the [[HomeObject]]. |
| 311 Variable* home_object_var = scope()->home_object_var(); |
| 312 if (home_object_var != nullptr) { |
| 313 Comment cmnt(masm_, "[ Home object"); |
| 314 if (function_in_register) { |
| 315 __ Move(LoadDescriptor::ReceiverRegister(), r1); |
| 316 } else { |
| 317 __ ldr(LoadDescriptor::ReceiverRegister(), |
| 318 MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset)); |
| 319 } |
| 320 Handle<Symbol> home_object_symbol(isolate()->heap()->home_object_symbol()); |
| 321 __ Move(LoadDescriptor::NameRegister(), home_object_symbol); |
| 322 |
| 323 if (FLAG_vector_ics) { |
| 324 __ mov(VectorLoadICDescriptor::SlotRegister(), |
| 325 Operand(SmiFromSlot(function()->HomeObjectFeedbackSlot()))); |
| 326 } |
| 327 CallLoadIC(NOT_CONTEXTUAL); |
| 328 |
| 329 SetVar(home_object_var, r0, r1, r2); |
| 330 } |
| 331 |
310 if (FLAG_trace) { | 332 if (FLAG_trace) { |
311 __ CallRuntime(Runtime::kTraceEnter, 0); | 333 __ CallRuntime(Runtime::kTraceEnter, 0); |
312 } | 334 } |
313 | 335 |
314 // Visit the declarations and body unless there is an illegal | 336 // Visit the declarations and body unless there is an illegal |
315 // redeclaration. | 337 // redeclaration. |
316 if (scope()->HasIllegalRedeclaration()) { | 338 if (scope()->HasIllegalRedeclaration()) { |
317 Comment cmnt(masm_, "[ Declarations"); | 339 Comment cmnt(masm_, "[ Declarations"); |
318 scope()->VisitIllegalRedeclaration(this); | 340 scope()->VisitIllegalRedeclaration(this); |
319 | 341 |
(...skipping 998 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1318 context()->Plug(r0); | 1340 context()->Plug(r0); |
1319 } | 1341 } |
1320 | 1342 |
1321 | 1343 |
1322 void FullCodeGenerator::VisitVariableProxy(VariableProxy* expr) { | 1344 void FullCodeGenerator::VisitVariableProxy(VariableProxy* expr) { |
1323 Comment cmnt(masm_, "[ VariableProxy"); | 1345 Comment cmnt(masm_, "[ VariableProxy"); |
1324 EmitVariableLoad(expr); | 1346 EmitVariableLoad(expr); |
1325 } | 1347 } |
1326 | 1348 |
1327 | 1349 |
1328 void FullCodeGenerator::EmitLoadHomeObject(SuperReference* expr) { | |
1329 Comment cnmt(masm_, "[ SuperReference "); | |
1330 | |
1331 __ ldr(LoadDescriptor::ReceiverRegister(), | |
1332 MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset)); | |
1333 | |
1334 Handle<Symbol> home_object_symbol(isolate()->heap()->home_object_symbol()); | |
1335 __ Move(LoadDescriptor::NameRegister(), home_object_symbol); | |
1336 | |
1337 if (FLAG_vector_ics) { | |
1338 __ mov(VectorLoadICDescriptor::SlotRegister(), | |
1339 Operand(SmiFromSlot(expr->HomeObjectFeedbackSlot()))); | |
1340 CallLoadIC(NOT_CONTEXTUAL); | |
1341 } else { | |
1342 CallLoadIC(NOT_CONTEXTUAL, expr->HomeObjectFeedbackId()); | |
1343 } | |
1344 | |
1345 __ cmp(r0, Operand(isolate()->factory()->undefined_value())); | |
1346 Label done; | |
1347 __ b(ne, &done); | |
1348 __ CallRuntime(Runtime::kThrowNonMethodError, 0); | |
1349 __ bind(&done); | |
1350 } | |
1351 | |
1352 | |
1353 void FullCodeGenerator::EmitSetHomeObjectIfNeeded(Expression* initializer, | 1350 void FullCodeGenerator::EmitSetHomeObjectIfNeeded(Expression* initializer, |
1354 int offset) { | 1351 int offset) { |
1355 if (NeedsHomeObject(initializer)) { | 1352 if (NeedsHomeObject(initializer)) { |
1356 __ ldr(StoreDescriptor::ReceiverRegister(), MemOperand(sp)); | 1353 __ ldr(StoreDescriptor::ReceiverRegister(), MemOperand(sp)); |
1357 __ mov(StoreDescriptor::NameRegister(), | 1354 __ mov(StoreDescriptor::NameRegister(), |
1358 Operand(isolate()->factory()->home_object_symbol())); | 1355 Operand(isolate()->factory()->home_object_symbol())); |
1359 __ ldr(StoreDescriptor::ValueRegister(), | 1356 __ ldr(StoreDescriptor::ValueRegister(), |
1360 MemOperand(sp, offset * kPointerSize)); | 1357 MemOperand(sp, offset * kPointerSize)); |
1361 CallStoreIC(); | 1358 CallStoreIC(); |
1362 } | 1359 } |
(...skipping 595 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1958 if (expr->is_compound()) { | 1955 if (expr->is_compound()) { |
1959 // We need the receiver both on the stack and in the register. | 1956 // We need the receiver both on the stack and in the register. |
1960 VisitForStackValue(property->obj()); | 1957 VisitForStackValue(property->obj()); |
1961 __ ldr(LoadDescriptor::ReceiverRegister(), MemOperand(sp, 0)); | 1958 __ ldr(LoadDescriptor::ReceiverRegister(), MemOperand(sp, 0)); |
1962 } else { | 1959 } else { |
1963 VisitForStackValue(property->obj()); | 1960 VisitForStackValue(property->obj()); |
1964 } | 1961 } |
1965 break; | 1962 break; |
1966 case NAMED_SUPER_PROPERTY: | 1963 case NAMED_SUPER_PROPERTY: |
1967 VisitForStackValue(property->obj()->AsSuperReference()->this_var()); | 1964 VisitForStackValue(property->obj()->AsSuperReference()->this_var()); |
1968 EmitLoadHomeObject(property->obj()->AsSuperReference()); | 1965 VisitForAccumulatorValue( |
| 1966 property->obj()->AsSuperReference()->home_object_var()); |
1969 __ Push(result_register()); | 1967 __ Push(result_register()); |
1970 if (expr->is_compound()) { | 1968 if (expr->is_compound()) { |
1971 const Register scratch = r1; | 1969 const Register scratch = r1; |
1972 __ ldr(scratch, MemOperand(sp, kPointerSize)); | 1970 __ ldr(scratch, MemOperand(sp, kPointerSize)); |
1973 __ Push(scratch); | 1971 __ Push(scratch); |
1974 __ Push(result_register()); | 1972 __ Push(result_register()); |
1975 } | 1973 } |
1976 break; | 1974 break; |
1977 case KEYED_SUPER_PROPERTY: | 1975 case KEYED_SUPER_PROPERTY: |
1978 VisitForStackValue(property->obj()->AsSuperReference()->this_var()); | 1976 VisitForStackValue(property->obj()->AsSuperReference()->this_var()); |
1979 EmitLoadHomeObject(property->obj()->AsSuperReference()); | 1977 VisitForStackValue( |
1980 __ Push(result_register()); | 1978 property->obj()->AsSuperReference()->home_object_var()); |
1981 VisitForAccumulatorValue(property->key()); | 1979 VisitForAccumulatorValue(property->key()); |
1982 __ Push(result_register()); | 1980 __ Push(result_register()); |
1983 if (expr->is_compound()) { | 1981 if (expr->is_compound()) { |
1984 const Register scratch = r1; | 1982 const Register scratch = r1; |
1985 __ ldr(scratch, MemOperand(sp, 2 * kPointerSize)); | 1983 __ ldr(scratch, MemOperand(sp, 2 * kPointerSize)); |
1986 __ Push(scratch); | 1984 __ Push(scratch); |
1987 __ ldr(scratch, MemOperand(sp, 2 * kPointerSize)); | 1985 __ ldr(scratch, MemOperand(sp, 2 * kPointerSize)); |
1988 __ Push(scratch); | 1986 __ Push(scratch); |
1989 __ Push(result_register()); | 1987 __ Push(result_register()); |
1990 } | 1988 } |
(...skipping 635 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2626 __ Move(StoreDescriptor::ReceiverRegister(), r0); | 2624 __ Move(StoreDescriptor::ReceiverRegister(), r0); |
2627 __ pop(StoreDescriptor::ValueRegister()); // Restore value. | 2625 __ pop(StoreDescriptor::ValueRegister()); // Restore value. |
2628 __ mov(StoreDescriptor::NameRegister(), | 2626 __ mov(StoreDescriptor::NameRegister(), |
2629 Operand(prop->key()->AsLiteral()->value())); | 2627 Operand(prop->key()->AsLiteral()->value())); |
2630 CallStoreIC(); | 2628 CallStoreIC(); |
2631 break; | 2629 break; |
2632 } | 2630 } |
2633 case NAMED_SUPER_PROPERTY: { | 2631 case NAMED_SUPER_PROPERTY: { |
2634 __ Push(r0); | 2632 __ Push(r0); |
2635 VisitForStackValue(prop->obj()->AsSuperReference()->this_var()); | 2633 VisitForStackValue(prop->obj()->AsSuperReference()->this_var()); |
2636 EmitLoadHomeObject(prop->obj()->AsSuperReference()); | 2634 VisitForAccumulatorValue( |
| 2635 prop->obj()->AsSuperReference()->home_object_var()); |
2637 // stack: value, this; r0: home_object | 2636 // stack: value, this; r0: home_object |
2638 Register scratch = r2; | 2637 Register scratch = r2; |
2639 Register scratch2 = r3; | 2638 Register scratch2 = r3; |
2640 __ mov(scratch, result_register()); // home_object | 2639 __ mov(scratch, result_register()); // home_object |
2641 __ ldr(r0, MemOperand(sp, kPointerSize)); // value | 2640 __ ldr(r0, MemOperand(sp, kPointerSize)); // value |
2642 __ ldr(scratch2, MemOperand(sp, 0)); // this | 2641 __ ldr(scratch2, MemOperand(sp, 0)); // this |
2643 __ str(scratch2, MemOperand(sp, kPointerSize)); // this | 2642 __ str(scratch2, MemOperand(sp, kPointerSize)); // this |
2644 __ str(scratch, MemOperand(sp, 0)); // home_object | 2643 __ str(scratch, MemOperand(sp, 0)); // home_object |
2645 // stack: this, home_object; r0: value | 2644 // stack: this, home_object; r0: value |
2646 EmitNamedSuperPropertyStore(prop); | 2645 EmitNamedSuperPropertyStore(prop); |
2647 break; | 2646 break; |
2648 } | 2647 } |
2649 case KEYED_SUPER_PROPERTY: { | 2648 case KEYED_SUPER_PROPERTY: { |
2650 __ Push(r0); | 2649 __ Push(r0); |
2651 VisitForStackValue(prop->obj()->AsSuperReference()->this_var()); | 2650 VisitForStackValue(prop->obj()->AsSuperReference()->this_var()); |
2652 EmitLoadHomeObject(prop->obj()->AsSuperReference()); | 2651 VisitForStackValue(prop->obj()->AsSuperReference()->home_object_var()); |
2653 __ Push(result_register()); | |
2654 VisitForAccumulatorValue(prop->key()); | 2652 VisitForAccumulatorValue(prop->key()); |
2655 Register scratch = r2; | 2653 Register scratch = r2; |
2656 Register scratch2 = r3; | 2654 Register scratch2 = r3; |
2657 __ ldr(scratch2, MemOperand(sp, 2 * kPointerSize)); // value | 2655 __ ldr(scratch2, MemOperand(sp, 2 * kPointerSize)); // value |
2658 // stack: value, this, home_object; r0: key, r3: value | 2656 // stack: value, this, home_object; r0: key, r3: value |
2659 __ ldr(scratch, MemOperand(sp, kPointerSize)); // this | 2657 __ ldr(scratch, MemOperand(sp, kPointerSize)); // this |
2660 __ str(scratch, MemOperand(sp, 2 * kPointerSize)); | 2658 __ str(scratch, MemOperand(sp, 2 * kPointerSize)); |
2661 __ ldr(scratch, MemOperand(sp, 0)); // home_object | 2659 __ ldr(scratch, MemOperand(sp, 0)); // home_object |
2662 __ str(scratch, MemOperand(sp, kPointerSize)); | 2660 __ str(scratch, MemOperand(sp, kPointerSize)); |
2663 __ str(r0, MemOperand(sp, 0)); | 2661 __ str(r0, MemOperand(sp, 0)); |
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2855 Comment cmnt(masm_, "[ Property"); | 2853 Comment cmnt(masm_, "[ Property"); |
2856 Expression* key = expr->key(); | 2854 Expression* key = expr->key(); |
2857 | 2855 |
2858 if (key->IsPropertyName()) { | 2856 if (key->IsPropertyName()) { |
2859 if (!expr->IsSuperAccess()) { | 2857 if (!expr->IsSuperAccess()) { |
2860 VisitForAccumulatorValue(expr->obj()); | 2858 VisitForAccumulatorValue(expr->obj()); |
2861 __ Move(LoadDescriptor::ReceiverRegister(), r0); | 2859 __ Move(LoadDescriptor::ReceiverRegister(), r0); |
2862 EmitNamedPropertyLoad(expr); | 2860 EmitNamedPropertyLoad(expr); |
2863 } else { | 2861 } else { |
2864 VisitForStackValue(expr->obj()->AsSuperReference()->this_var()); | 2862 VisitForStackValue(expr->obj()->AsSuperReference()->this_var()); |
2865 EmitLoadHomeObject(expr->obj()->AsSuperReference()); | 2863 VisitForStackValue(expr->obj()->AsSuperReference()->home_object_var()); |
2866 __ Push(result_register()); | |
2867 EmitNamedSuperPropertyLoad(expr); | 2864 EmitNamedSuperPropertyLoad(expr); |
2868 } | 2865 } |
2869 } else { | 2866 } else { |
2870 if (!expr->IsSuperAccess()) { | 2867 if (!expr->IsSuperAccess()) { |
2871 VisitForStackValue(expr->obj()); | 2868 VisitForStackValue(expr->obj()); |
2872 VisitForAccumulatorValue(expr->key()); | 2869 VisitForAccumulatorValue(expr->key()); |
2873 __ Move(LoadDescriptor::NameRegister(), r0); | 2870 __ Move(LoadDescriptor::NameRegister(), r0); |
2874 __ pop(LoadDescriptor::ReceiverRegister()); | 2871 __ pop(LoadDescriptor::ReceiverRegister()); |
2875 EmitKeyedPropertyLoad(expr); | 2872 EmitKeyedPropertyLoad(expr); |
2876 } else { | 2873 } else { |
2877 VisitForStackValue(expr->obj()->AsSuperReference()->this_var()); | 2874 VisitForStackValue(expr->obj()->AsSuperReference()->this_var()); |
2878 EmitLoadHomeObject(expr->obj()->AsSuperReference()); | 2875 VisitForStackValue(expr->obj()->AsSuperReference()->home_object_var()); |
2879 __ Push(result_register()); | |
2880 VisitForStackValue(expr->key()); | 2876 VisitForStackValue(expr->key()); |
2881 EmitKeyedSuperPropertyLoad(expr); | 2877 EmitKeyedSuperPropertyLoad(expr); |
2882 } | 2878 } |
2883 } | 2879 } |
2884 PrepareForBailoutForId(expr->LoadId(), TOS_REG); | 2880 PrepareForBailoutForId(expr->LoadId(), TOS_REG); |
2885 context()->Plug(r0); | 2881 context()->Plug(r0); |
2886 } | 2882 } |
2887 | 2883 |
2888 | 2884 |
2889 void FullCodeGenerator::CallIC(Handle<Code> code, | 2885 void FullCodeGenerator::CallIC(Handle<Code> code, |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2935 DCHECK(callee->IsProperty()); | 2931 DCHECK(callee->IsProperty()); |
2936 Property* prop = callee->AsProperty(); | 2932 Property* prop = callee->AsProperty(); |
2937 DCHECK(prop->IsSuperAccess()); | 2933 DCHECK(prop->IsSuperAccess()); |
2938 | 2934 |
2939 SetSourcePosition(prop->position()); | 2935 SetSourcePosition(prop->position()); |
2940 Literal* key = prop->key()->AsLiteral(); | 2936 Literal* key = prop->key()->AsLiteral(); |
2941 DCHECK(!key->value()->IsSmi()); | 2937 DCHECK(!key->value()->IsSmi()); |
2942 // Load the function from the receiver. | 2938 // Load the function from the receiver. |
2943 const Register scratch = r1; | 2939 const Register scratch = r1; |
2944 SuperReference* super_ref = prop->obj()->AsSuperReference(); | 2940 SuperReference* super_ref = prop->obj()->AsSuperReference(); |
2945 EmitLoadHomeObject(super_ref); | 2941 VisitForStackValue(super_ref->home_object_var()); |
2946 __ Push(r0); | |
2947 VisitForAccumulatorValue(super_ref->this_var()); | 2942 VisitForAccumulatorValue(super_ref->this_var()); |
2948 __ Push(r0); | 2943 __ Push(r0); |
2949 __ Push(r0); | 2944 __ Push(r0); |
2950 __ ldr(scratch, MemOperand(sp, kPointerSize * 2)); | 2945 __ ldr(scratch, MemOperand(sp, kPointerSize * 2)); |
2951 __ Push(scratch); | 2946 __ Push(scratch); |
2952 __ Push(key->value()); | 2947 __ Push(key->value()); |
2953 | 2948 |
2954 // Stack here: | 2949 // Stack here: |
2955 // - home_object | 2950 // - home_object |
2956 // - this (receiver) | 2951 // - this (receiver) |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2996 void FullCodeGenerator::EmitKeyedSuperCallWithLoadIC(Call* expr) { | 2991 void FullCodeGenerator::EmitKeyedSuperCallWithLoadIC(Call* expr) { |
2997 Expression* callee = expr->expression(); | 2992 Expression* callee = expr->expression(); |
2998 DCHECK(callee->IsProperty()); | 2993 DCHECK(callee->IsProperty()); |
2999 Property* prop = callee->AsProperty(); | 2994 Property* prop = callee->AsProperty(); |
3000 DCHECK(prop->IsSuperAccess()); | 2995 DCHECK(prop->IsSuperAccess()); |
3001 | 2996 |
3002 SetSourcePosition(prop->position()); | 2997 SetSourcePosition(prop->position()); |
3003 // Load the function from the receiver. | 2998 // Load the function from the receiver. |
3004 const Register scratch = r1; | 2999 const Register scratch = r1; |
3005 SuperReference* super_ref = prop->obj()->AsSuperReference(); | 3000 SuperReference* super_ref = prop->obj()->AsSuperReference(); |
3006 EmitLoadHomeObject(super_ref); | 3001 VisitForStackValue(super_ref->home_object_var()); |
3007 __ Push(r0); | |
3008 VisitForAccumulatorValue(super_ref->this_var()); | 3002 VisitForAccumulatorValue(super_ref->this_var()); |
3009 __ Push(r0); | 3003 __ Push(r0); |
3010 __ Push(r0); | 3004 __ Push(r0); |
3011 __ ldr(scratch, MemOperand(sp, kPointerSize * 2)); | 3005 __ ldr(scratch, MemOperand(sp, kPointerSize * 2)); |
3012 __ Push(scratch); | 3006 __ Push(scratch); |
3013 VisitForStackValue(prop->key()); | 3007 VisitForStackValue(prop->key()); |
3014 | 3008 |
3015 // Stack here: | 3009 // Stack here: |
3016 // - home_object | 3010 // - home_object |
3017 // - this (receiver) | 3011 // - this (receiver) |
(...skipping 1825 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4843 case NAMED_PROPERTY: { | 4837 case NAMED_PROPERTY: { |
4844 // Put the object both on the stack and in the register. | 4838 // Put the object both on the stack and in the register. |
4845 VisitForStackValue(prop->obj()); | 4839 VisitForStackValue(prop->obj()); |
4846 __ ldr(LoadDescriptor::ReceiverRegister(), MemOperand(sp, 0)); | 4840 __ ldr(LoadDescriptor::ReceiverRegister(), MemOperand(sp, 0)); |
4847 EmitNamedPropertyLoad(prop); | 4841 EmitNamedPropertyLoad(prop); |
4848 break; | 4842 break; |
4849 } | 4843 } |
4850 | 4844 |
4851 case NAMED_SUPER_PROPERTY: { | 4845 case NAMED_SUPER_PROPERTY: { |
4852 VisitForStackValue(prop->obj()->AsSuperReference()->this_var()); | 4846 VisitForStackValue(prop->obj()->AsSuperReference()->this_var()); |
4853 EmitLoadHomeObject(prop->obj()->AsSuperReference()); | 4847 VisitForAccumulatorValue( |
| 4848 prop->obj()->AsSuperReference()->home_object_var()); |
4854 __ Push(result_register()); | 4849 __ Push(result_register()); |
4855 const Register scratch = r1; | 4850 const Register scratch = r1; |
4856 __ ldr(scratch, MemOperand(sp, kPointerSize)); | 4851 __ ldr(scratch, MemOperand(sp, kPointerSize)); |
4857 __ Push(scratch); | 4852 __ Push(scratch); |
4858 __ Push(result_register()); | 4853 __ Push(result_register()); |
4859 EmitNamedSuperPropertyLoad(prop); | 4854 EmitNamedSuperPropertyLoad(prop); |
4860 break; | 4855 break; |
4861 } | 4856 } |
4862 | 4857 |
4863 case KEYED_SUPER_PROPERTY: { | 4858 case KEYED_SUPER_PROPERTY: { |
4864 VisitForStackValue(prop->obj()->AsSuperReference()->this_var()); | 4859 VisitForStackValue(prop->obj()->AsSuperReference()->this_var()); |
4865 EmitLoadHomeObject(prop->obj()->AsSuperReference()); | 4860 VisitForStackValue(prop->obj()->AsSuperReference()->home_object_var()); |
4866 __ Push(result_register()); | |
4867 VisitForAccumulatorValue(prop->key()); | 4861 VisitForAccumulatorValue(prop->key()); |
4868 __ Push(result_register()); | 4862 __ Push(result_register()); |
4869 const Register scratch = r1; | 4863 const Register scratch = r1; |
4870 __ ldr(scratch, MemOperand(sp, 2 * kPointerSize)); | 4864 __ ldr(scratch, MemOperand(sp, 2 * kPointerSize)); |
4871 __ Push(scratch); | 4865 __ Push(scratch); |
4872 __ ldr(scratch, MemOperand(sp, 2 * kPointerSize)); | 4866 __ ldr(scratch, MemOperand(sp, 2 * kPointerSize)); |
4873 __ Push(scratch); | 4867 __ Push(scratch); |
4874 __ Push(result_register()); | 4868 __ Push(result_register()); |
4875 EmitKeyedSuperPropertyLoad(prop); | 4869 EmitKeyedSuperPropertyLoad(prop); |
4876 break; | 4870 break; |
(...skipping 634 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5511 | 5505 |
5512 DCHECK(interrupt_address == | 5506 DCHECK(interrupt_address == |
5513 isolate->builtins()->OsrAfterStackCheck()->entry()); | 5507 isolate->builtins()->OsrAfterStackCheck()->entry()); |
5514 return OSR_AFTER_STACK_CHECK; | 5508 return OSR_AFTER_STACK_CHECK; |
5515 } | 5509 } |
5516 | 5510 |
5517 | 5511 |
5518 } } // namespace v8::internal | 5512 } } // namespace v8::internal |
5519 | 5513 |
5520 #endif // V8_TARGET_ARCH_ARM | 5514 #endif // V8_TARGET_ARCH_ARM |
OLD | NEW |