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 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
119 #ifdef DEBUG | 119 #ifdef DEBUG |
120 if (strlen(FLAG_stop_at) > 0 && | 120 if (strlen(FLAG_stop_at) > 0 && |
121 info->function()->name()->IsUtf8EqualTo(CStrVector(FLAG_stop_at))) { | 121 info->function()->name()->IsUtf8EqualTo(CStrVector(FLAG_stop_at))) { |
122 __ stop("stop-at"); | 122 __ stop("stop-at"); |
123 } | 123 } |
124 #endif | 124 #endif |
125 | 125 |
126 // Sloppy mode functions and builtins need to replace the receiver with the | 126 // Sloppy mode functions and builtins need to replace the receiver with the |
127 // global proxy when called as functions (without an explicit receiver | 127 // global proxy when called as functions (without an explicit receiver |
128 // object). | 128 // object). |
129 if (info->strict_mode() == SLOPPY && !info->is_native()) { | 129 if (is_sloppy(info->language_mode()) && !info->is_native()) { |
130 Label ok; | 130 Label ok; |
131 int receiver_offset = info->scope()->num_parameters() * kPointerSize; | 131 int receiver_offset = info->scope()->num_parameters() * kPointerSize; |
132 __ ldr(r2, MemOperand(sp, receiver_offset)); | 132 __ ldr(r2, MemOperand(sp, receiver_offset)); |
133 __ CompareRoot(r2, Heap::kUndefinedValueRootIndex); | 133 __ CompareRoot(r2, Heap::kUndefinedValueRootIndex); |
134 __ b(ne, &ok); | 134 __ b(ne, &ok); |
135 | 135 |
136 __ ldr(r2, GlobalObjectOperand()); | 136 __ ldr(r2, GlobalObjectOperand()); |
137 __ ldr(r2, FieldMemOperand(r2, GlobalObject::kGlobalProxyOffset)); | 137 __ ldr(r2, FieldMemOperand(r2, GlobalObject::kGlobalProxyOffset)); |
138 | 138 |
139 __ str(r2, MemOperand(sp, receiver_offset)); | 139 __ str(r2, MemOperand(sp, receiver_offset)); |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
256 __ add(r2, fp, | 256 __ add(r2, fp, |
257 Operand(StandardFrameConstants::kCallerSPOffset + offset)); | 257 Operand(StandardFrameConstants::kCallerSPOffset + offset)); |
258 __ mov(r1, Operand(Smi::FromInt(num_parameters))); | 258 __ mov(r1, Operand(Smi::FromInt(num_parameters))); |
259 __ Push(r3, r2, r1); | 259 __ Push(r3, r2, r1); |
260 | 260 |
261 // Arguments to ArgumentsAccessStub: | 261 // Arguments to ArgumentsAccessStub: |
262 // function, receiver address, parameter count. | 262 // function, receiver address, parameter count. |
263 // The stub will rewrite receiever and parameter count if the previous | 263 // The stub will rewrite receiever and parameter count if the previous |
264 // stack frame was an arguments adapter frame. | 264 // stack frame was an arguments adapter frame. |
265 ArgumentsAccessStub::Type type; | 265 ArgumentsAccessStub::Type type; |
266 if (strict_mode() == STRICT) { | 266 if (is_strict(language_mode())) { |
267 type = ArgumentsAccessStub::NEW_STRICT; | 267 type = ArgumentsAccessStub::NEW_STRICT; |
268 } else if (function()->has_duplicate_parameters()) { | 268 } else if (function()->has_duplicate_parameters()) { |
269 type = ArgumentsAccessStub::NEW_SLOPPY_SLOW; | 269 type = ArgumentsAccessStub::NEW_SLOPPY_SLOW; |
270 } else { | 270 } else { |
271 type = ArgumentsAccessStub::NEW_SLOPPY_FAST; | 271 type = ArgumentsAccessStub::NEW_SLOPPY_FAST; |
272 } | 272 } |
273 ArgumentsAccessStub stub(isolate(), type); | 273 ArgumentsAccessStub stub(isolate(), type); |
274 __ CallStub(&stub); | 274 __ CallStub(&stub); |
275 | 275 |
276 SetVar(arguments, r0, r1, r2); | 276 SetVar(arguments, r0, r1, r2); |
(...skipping 1016 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1293 // space for nested functions that don't need literals cloning. If | 1293 // space for nested functions that don't need literals cloning. If |
1294 // we're running with the --always-opt or the --prepare-always-opt | 1294 // we're running with the --always-opt or the --prepare-always-opt |
1295 // flag, we need to use the runtime function so that the new function | 1295 // flag, we need to use the runtime function so that the new function |
1296 // we are creating here gets a chance to have its code optimized and | 1296 // we are creating here gets a chance to have its code optimized and |
1297 // doesn't just get a copy of the existing unoptimized code. | 1297 // doesn't just get a copy of the existing unoptimized code. |
1298 if (!FLAG_always_opt && | 1298 if (!FLAG_always_opt && |
1299 !FLAG_prepare_always_opt && | 1299 !FLAG_prepare_always_opt && |
1300 !pretenure && | 1300 !pretenure && |
1301 scope()->is_function_scope() && | 1301 scope()->is_function_scope() && |
1302 info->num_literals() == 0) { | 1302 info->num_literals() == 0) { |
1303 FastNewClosureStub stub(isolate(), info->strict_mode(), info->kind()); | 1303 FastNewClosureStub stub(isolate(), info->language_mode(), info->kind()); |
1304 __ mov(r2, Operand(info)); | 1304 __ mov(r2, Operand(info)); |
1305 __ CallStub(&stub); | 1305 __ CallStub(&stub); |
1306 } else { | 1306 } else { |
1307 __ mov(r0, Operand(info)); | 1307 __ mov(r0, Operand(info)); |
1308 __ LoadRoot(r1, pretenure ? Heap::kTrueValueRootIndex | 1308 __ LoadRoot(r1, pretenure ? Heap::kTrueValueRootIndex |
1309 : Heap::kFalseValueRootIndex); | 1309 : Heap::kFalseValueRootIndex); |
1310 __ Push(cp, r0, r1); | 1310 __ Push(cp, r0, r1); |
1311 __ CallRuntime(Runtime::kNewClosure, 3); | 1311 __ CallRuntime(Runtime::kNewClosure, 3); |
1312 } | 1312 } |
1313 context()->Plug(r0); | 1313 context()->Plug(r0); |
(...skipping 1341 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2655 break; | 2655 break; |
2656 } | 2656 } |
2657 case KEYED_PROPERTY: { | 2657 case KEYED_PROPERTY: { |
2658 __ push(r0); // Preserve value. | 2658 __ push(r0); // Preserve value. |
2659 VisitForStackValue(prop->obj()); | 2659 VisitForStackValue(prop->obj()); |
2660 VisitForAccumulatorValue(prop->key()); | 2660 VisitForAccumulatorValue(prop->key()); |
2661 __ Move(StoreDescriptor::NameRegister(), r0); | 2661 __ Move(StoreDescriptor::NameRegister(), r0); |
2662 __ Pop(StoreDescriptor::ValueRegister(), | 2662 __ Pop(StoreDescriptor::ValueRegister(), |
2663 StoreDescriptor::ReceiverRegister()); | 2663 StoreDescriptor::ReceiverRegister()); |
2664 Handle<Code> ic = | 2664 Handle<Code> ic = |
2665 CodeFactory::KeyedStoreIC(isolate(), strict_mode()).code(); | 2665 CodeFactory::KeyedStoreIC(isolate(), language_mode()).code(); |
2666 CallIC(ic); | 2666 CallIC(ic); |
2667 break; | 2667 break; |
2668 } | 2668 } |
2669 } | 2669 } |
2670 context()->Plug(r0); | 2670 context()->Plug(r0); |
2671 } | 2671 } |
2672 | 2672 |
2673 | 2673 |
2674 void FullCodeGenerator::EmitStoreToStackLocalOrContextSlot( | 2674 void FullCodeGenerator::EmitStoreToStackLocalOrContextSlot( |
2675 Variable* var, MemOperand location) { | 2675 Variable* var, MemOperand location) { |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2724 __ CallRuntime(Runtime::kThrowReferenceError, 1); | 2724 __ CallRuntime(Runtime::kThrowReferenceError, 1); |
2725 // Perform the assignment. | 2725 // Perform the assignment. |
2726 __ bind(&assign); | 2726 __ bind(&assign); |
2727 EmitStoreToStackLocalOrContextSlot(var, location); | 2727 EmitStoreToStackLocalOrContextSlot(var, location); |
2728 | 2728 |
2729 } else if (!var->is_const_mode() || op == Token::INIT_CONST) { | 2729 } else if (!var->is_const_mode() || op == Token::INIT_CONST) { |
2730 if (var->IsLookupSlot()) { | 2730 if (var->IsLookupSlot()) { |
2731 // Assignment to var. | 2731 // Assignment to var. |
2732 __ push(r0); // Value. | 2732 __ push(r0); // Value. |
2733 __ mov(r1, Operand(var->name())); | 2733 __ mov(r1, Operand(var->name())); |
2734 __ mov(r0, Operand(Smi::FromInt(strict_mode()))); | 2734 __ mov(r0, Operand(Smi::FromInt(language_mode()))); |
2735 __ Push(cp, r1, r0); // Context, name, strict mode. | 2735 __ Push(cp, r1, r0); // Context, name, language mode. |
2736 __ CallRuntime(Runtime::kStoreLookupSlot, 4); | 2736 __ CallRuntime(Runtime::kStoreLookupSlot, 4); |
2737 } else { | 2737 } else { |
2738 // Assignment to var or initializing assignment to let/const in harmony | 2738 // Assignment to var or initializing assignment to let/const in harmony |
2739 // mode. | 2739 // mode. |
2740 DCHECK((var->IsStackAllocated() || var->IsContextSlot())); | 2740 DCHECK((var->IsStackAllocated() || var->IsContextSlot())); |
2741 MemOperand location = VarOperand(var, r1); | 2741 MemOperand location = VarOperand(var, r1); |
2742 if (generate_debug_code_ && op == Token::INIT_LET) { | 2742 if (generate_debug_code_ && op == Token::INIT_LET) { |
2743 // Check for an uninitialized let binding. | 2743 // Check for an uninitialized let binding. |
2744 __ ldr(r2, location); | 2744 __ ldr(r2, location); |
2745 __ CompareRoot(r2, Heap::kTheHoleValueRootIndex); | 2745 __ CompareRoot(r2, Heap::kTheHoleValueRootIndex); |
2746 __ Check(eq, kLetBindingReInitialization); | 2746 __ Check(eq, kLetBindingReInitialization); |
2747 } | 2747 } |
2748 EmitStoreToStackLocalOrContextSlot(var, location); | 2748 EmitStoreToStackLocalOrContextSlot(var, location); |
2749 } | 2749 } |
2750 } else if (IsSignallingAssignmentToConst(var, op, strict_mode())) { | 2750 } else if (IsSignallingAssignmentToConst(var, op, language_mode())) { |
2751 __ CallRuntime(Runtime::kThrowConstAssignError, 0); | 2751 __ CallRuntime(Runtime::kThrowConstAssignError, 0); |
2752 } | 2752 } |
2753 } | 2753 } |
2754 | 2754 |
2755 | 2755 |
2756 void FullCodeGenerator::EmitNamedPropertyAssignment(Assignment* expr) { | 2756 void FullCodeGenerator::EmitNamedPropertyAssignment(Assignment* expr) { |
2757 // Assignment to a property, using a named store IC. | 2757 // Assignment to a property, using a named store IC. |
2758 Property* prop = expr->target()->AsProperty(); | 2758 Property* prop = expr->target()->AsProperty(); |
2759 DCHECK(prop != NULL); | 2759 DCHECK(prop != NULL); |
2760 DCHECK(prop->key()->IsLiteral()); | 2760 DCHECK(prop->key()->IsLiteral()); |
(...skipping 13 matching lines...) Expand all Loading... |
2774 void FullCodeGenerator::EmitNamedSuperPropertyStore(Property* prop) { | 2774 void FullCodeGenerator::EmitNamedSuperPropertyStore(Property* prop) { |
2775 // Assignment to named property of super. | 2775 // Assignment to named property of super. |
2776 // r0 : value | 2776 // r0 : value |
2777 // stack : receiver ('this'), home_object | 2777 // stack : receiver ('this'), home_object |
2778 DCHECK(prop != NULL); | 2778 DCHECK(prop != NULL); |
2779 Literal* key = prop->key()->AsLiteral(); | 2779 Literal* key = prop->key()->AsLiteral(); |
2780 DCHECK(key != NULL); | 2780 DCHECK(key != NULL); |
2781 | 2781 |
2782 __ Push(key->value()); | 2782 __ Push(key->value()); |
2783 __ Push(r0); | 2783 __ Push(r0); |
2784 __ CallRuntime((strict_mode() == STRICT ? Runtime::kStoreToSuper_Strict | 2784 __ CallRuntime((is_strict(language_mode()) ? Runtime::kStoreToSuper_Strict |
2785 : Runtime::kStoreToSuper_Sloppy), | 2785 : Runtime::kStoreToSuper_Sloppy), |
2786 4); | 2786 4); |
2787 } | 2787 } |
2788 | 2788 |
2789 | 2789 |
2790 void FullCodeGenerator::EmitKeyedSuperPropertyStore(Property* prop) { | 2790 void FullCodeGenerator::EmitKeyedSuperPropertyStore(Property* prop) { |
2791 // Assignment to named property of super. | 2791 // Assignment to named property of super. |
2792 // r0 : value | 2792 // r0 : value |
2793 // stack : receiver ('this'), home_object, key | 2793 // stack : receiver ('this'), home_object, key |
2794 DCHECK(prop != NULL); | 2794 DCHECK(prop != NULL); |
2795 | 2795 |
2796 __ Push(r0); | 2796 __ Push(r0); |
2797 __ CallRuntime((strict_mode() == STRICT ? Runtime::kStoreKeyedToSuper_Strict | 2797 __ CallRuntime( |
2798 : Runtime::kStoreKeyedToSuper_Sloppy), | 2798 (is_strict(language_mode()) ? Runtime::kStoreKeyedToSuper_Strict |
2799 4); | 2799 : Runtime::kStoreKeyedToSuper_Sloppy), |
| 2800 4); |
2800 } | 2801 } |
2801 | 2802 |
2802 | 2803 |
2803 void FullCodeGenerator::EmitKeyedPropertyAssignment(Assignment* expr) { | 2804 void FullCodeGenerator::EmitKeyedPropertyAssignment(Assignment* expr) { |
2804 // Assignment to a property, using a keyed store IC. | 2805 // Assignment to a property, using a keyed store IC. |
2805 | 2806 |
2806 // Record source code position before IC call. | 2807 // Record source code position before IC call. |
2807 SetSourcePosition(expr->position()); | 2808 SetSourcePosition(expr->position()); |
2808 __ Pop(StoreDescriptor::ReceiverRegister(), StoreDescriptor::NameRegister()); | 2809 __ Pop(StoreDescriptor::ReceiverRegister(), StoreDescriptor::NameRegister()); |
2809 DCHECK(StoreDescriptor::ValueRegister().is(r0)); | 2810 DCHECK(StoreDescriptor::ValueRegister().is(r0)); |
2810 | 2811 |
2811 Handle<Code> ic = CodeFactory::KeyedStoreIC(isolate(), strict_mode()).code(); | 2812 Handle<Code> ic = |
| 2813 CodeFactory::KeyedStoreIC(isolate(), language_mode()).code(); |
2812 CallIC(ic, expr->AssignmentFeedbackId()); | 2814 CallIC(ic, expr->AssignmentFeedbackId()); |
2813 | 2815 |
2814 PrepareForBailoutForId(expr->AssignmentId(), TOS_REG); | 2816 PrepareForBailoutForId(expr->AssignmentId(), TOS_REG); |
2815 context()->Plug(r0); | 2817 context()->Plug(r0); |
2816 } | 2818 } |
2817 | 2819 |
2818 | 2820 |
2819 void FullCodeGenerator::VisitProperty(Property* expr) { | 2821 void FullCodeGenerator::VisitProperty(Property* expr) { |
2820 Comment cmnt(masm_, "[ Property"); | 2822 Comment cmnt(masm_, "[ Property"); |
2821 Expression* key = expr->key(); | 2823 Expression* key = expr->key(); |
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3028 __ LoadRoot(r5, Heap::kUndefinedValueRootIndex); | 3030 __ LoadRoot(r5, Heap::kUndefinedValueRootIndex); |
3029 } | 3031 } |
3030 | 3032 |
3031 // r4: the receiver of the enclosing function. | 3033 // r4: the receiver of the enclosing function. |
3032 __ ldr(r4, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset)); | 3034 __ ldr(r4, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset)); |
3033 | 3035 |
3034 // r3: the receiver of the enclosing function. | 3036 // r3: the receiver of the enclosing function. |
3035 int receiver_offset = 2 + info_->scope()->num_parameters(); | 3037 int receiver_offset = 2 + info_->scope()->num_parameters(); |
3036 __ ldr(r3, MemOperand(fp, receiver_offset * kPointerSize)); | 3038 __ ldr(r3, MemOperand(fp, receiver_offset * kPointerSize)); |
3037 | 3039 |
3038 // r2: strict mode. | 3040 // r2: language mode. |
3039 __ mov(r2, Operand(Smi::FromInt(strict_mode()))); | 3041 __ mov(r2, Operand(Smi::FromInt(language_mode()))); |
3040 | 3042 |
3041 // r1: the start position of the scope the calls resides in. | 3043 // r1: the start position of the scope the calls resides in. |
3042 __ mov(r1, Operand(Smi::FromInt(scope()->start_position()))); | 3044 __ mov(r1, Operand(Smi::FromInt(scope()->start_position()))); |
3043 | 3045 |
3044 // Do the runtime call. | 3046 // Do the runtime call. |
3045 __ Push(r5); | 3047 __ Push(r5); |
3046 __ Push(r4, r3, r2, r1); | 3048 __ Push(r4, r3, r2, r1); |
3047 __ CallRuntime(Runtime::kResolvePossiblyDirectEval, 6); | 3049 __ CallRuntime(Runtime::kResolvePossiblyDirectEval, 6); |
3048 } | 3050 } |
3049 | 3051 |
(...skipping 1514 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4564 void FullCodeGenerator::VisitUnaryOperation(UnaryOperation* expr) { | 4566 void FullCodeGenerator::VisitUnaryOperation(UnaryOperation* expr) { |
4565 switch (expr->op()) { | 4567 switch (expr->op()) { |
4566 case Token::DELETE: { | 4568 case Token::DELETE: { |
4567 Comment cmnt(masm_, "[ UnaryOperation (DELETE)"); | 4569 Comment cmnt(masm_, "[ UnaryOperation (DELETE)"); |
4568 Property* property = expr->expression()->AsProperty(); | 4570 Property* property = expr->expression()->AsProperty(); |
4569 VariableProxy* proxy = expr->expression()->AsVariableProxy(); | 4571 VariableProxy* proxy = expr->expression()->AsVariableProxy(); |
4570 | 4572 |
4571 if (property != NULL) { | 4573 if (property != NULL) { |
4572 VisitForStackValue(property->obj()); | 4574 VisitForStackValue(property->obj()); |
4573 VisitForStackValue(property->key()); | 4575 VisitForStackValue(property->key()); |
4574 __ mov(r1, Operand(Smi::FromInt(strict_mode()))); | 4576 __ mov(r1, Operand(Smi::FromInt(language_mode()))); |
4575 __ push(r1); | 4577 __ push(r1); |
4576 __ InvokeBuiltin(Builtins::DELETE, CALL_FUNCTION); | 4578 __ InvokeBuiltin(Builtins::DELETE, CALL_FUNCTION); |
4577 context()->Plug(r0); | 4579 context()->Plug(r0); |
4578 } else if (proxy != NULL) { | 4580 } else if (proxy != NULL) { |
4579 Variable* var = proxy->var(); | 4581 Variable* var = proxy->var(); |
4580 // Delete of an unqualified identifier is disallowed in strict mode | 4582 // Delete of an unqualified identifier is disallowed in strict mode |
4581 // but "delete this" is allowed. | 4583 // but "delete this" is allowed. |
4582 DCHECK(strict_mode() == SLOPPY || var->is_this()); | 4584 DCHECK(is_sloppy(language_mode()) || var->is_this()); |
4583 if (var->IsUnallocated()) { | 4585 if (var->IsUnallocated()) { |
4584 __ ldr(r2, GlobalObjectOperand()); | 4586 __ ldr(r2, GlobalObjectOperand()); |
4585 __ mov(r1, Operand(var->name())); | 4587 __ mov(r1, Operand(var->name())); |
4586 __ mov(r0, Operand(Smi::FromInt(SLOPPY))); | 4588 __ mov(r0, Operand(Smi::FromInt(SLOPPY))); |
4587 __ Push(r2, r1, r0); | 4589 __ Push(r2, r1, r0); |
4588 __ InvokeBuiltin(Builtins::DELETE, CALL_FUNCTION); | 4590 __ InvokeBuiltin(Builtins::DELETE, CALL_FUNCTION); |
4589 context()->Plug(r0); | 4591 context()->Plug(r0); |
4590 } else if (var->IsStackAllocated() || var->IsContextSlot()) { | 4592 } else if (var->IsStackAllocated() || var->IsContextSlot()) { |
4591 // Result of deleting non-global, non-dynamic variables is false. | 4593 // Result of deleting non-global, non-dynamic variables is false. |
4592 // The subexpression does not have side effects. | 4594 // The subexpression does not have side effects. |
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4893 } | 4895 } |
4894 } else { | 4896 } else { |
4895 context()->Plug(r0); | 4897 context()->Plug(r0); |
4896 } | 4898 } |
4897 break; | 4899 break; |
4898 } | 4900 } |
4899 case KEYED_PROPERTY: { | 4901 case KEYED_PROPERTY: { |
4900 __ Pop(StoreDescriptor::ReceiverRegister(), | 4902 __ Pop(StoreDescriptor::ReceiverRegister(), |
4901 StoreDescriptor::NameRegister()); | 4903 StoreDescriptor::NameRegister()); |
4902 Handle<Code> ic = | 4904 Handle<Code> ic = |
4903 CodeFactory::KeyedStoreIC(isolate(), strict_mode()).code(); | 4905 CodeFactory::KeyedStoreIC(isolate(), language_mode()).code(); |
4904 CallIC(ic, expr->CountStoreFeedbackId()); | 4906 CallIC(ic, expr->CountStoreFeedbackId()); |
4905 PrepareForBailoutForId(expr->AssignmentId(), TOS_REG); | 4907 PrepareForBailoutForId(expr->AssignmentId(), TOS_REG); |
4906 if (expr->is_postfix()) { | 4908 if (expr->is_postfix()) { |
4907 if (!context()->IsEffect()) { | 4909 if (!context()->IsEffect()) { |
4908 context()->PlugTOS(); | 4910 context()->PlugTOS(); |
4909 } | 4911 } |
4910 } else { | 4912 } else { |
4911 context()->Plug(r0); | 4913 context()->Plug(r0); |
4912 } | 4914 } |
4913 break; | 4915 break; |
(...skipping 505 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5419 | 5421 |
5420 DCHECK(interrupt_address == | 5422 DCHECK(interrupt_address == |
5421 isolate->builtins()->OsrAfterStackCheck()->entry()); | 5423 isolate->builtins()->OsrAfterStackCheck()->entry()); |
5422 return OSR_AFTER_STACK_CHECK; | 5424 return OSR_AFTER_STACK_CHECK; |
5423 } | 5425 } |
5424 | 5426 |
5425 | 5427 |
5426 } } // namespace v8::internal | 5428 } } // namespace v8::internal |
5427 | 5429 |
5428 #endif // V8_TARGET_ARCH_ARM | 5430 #endif // V8_TARGET_ARCH_ARM |
OLD | NEW |