OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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 #if V8_TARGET_ARCH_ARM64 | 5 #if V8_TARGET_ARCH_ARM64 |
6 | 6 |
7 #include "src/ast/scopes.h" | 7 #include "src/ast/scopes.h" |
8 #include "src/code-factory.h" | 8 #include "src/code-factory.h" |
9 #include "src/code-stubs.h" | 9 #include "src/code-stubs.h" |
10 #include "src/codegen.h" | 10 #include "src/codegen.h" |
(...skipping 3538 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3549 STATIC_ASSERT(JSGeneratorObject::kNext < JSGeneratorObject::kReturn); | 3549 STATIC_ASSERT(JSGeneratorObject::kNext < JSGeneratorObject::kReturn); |
3550 STATIC_ASSERT(JSGeneratorObject::kThrow > JSGeneratorObject::kReturn); | 3550 STATIC_ASSERT(JSGeneratorObject::kThrow > JSGeneratorObject::kReturn); |
3551 __ Cmp(x1, Operand(Smi::FromInt(JSGeneratorObject::kReturn))); | 3551 __ Cmp(x1, Operand(Smi::FromInt(JSGeneratorObject::kReturn))); |
3552 __ B(lt, &resume); | 3552 __ B(lt, &resume); |
3553 __ Push(result_register()); | 3553 __ Push(result_register()); |
3554 __ B(gt, &exception); | 3554 __ B(gt, &exception); |
3555 EmitCreateIteratorResult(true); | 3555 EmitCreateIteratorResult(true); |
3556 EmitUnwindAndReturn(); | 3556 EmitUnwindAndReturn(); |
3557 | 3557 |
3558 __ Bind(&exception); | 3558 __ Bind(&exception); |
3559 __ CallRuntime(Runtime::kThrow); | 3559 __ CallRuntime(expr->rethrow_on_exception() ? Runtime::kReThrow |
| 3560 : Runtime::kThrow); |
3560 | 3561 |
3561 __ Bind(&suspend); | 3562 __ Bind(&suspend); |
3562 OperandStackDepthIncrement(1); // Not popped on this path. | 3563 OperandStackDepthIncrement(1); // Not popped on this path. |
3563 VisitForAccumulatorValue(expr->generator_object()); | 3564 VisitForAccumulatorValue(expr->generator_object()); |
3564 DCHECK((continuation.pos() > 0) && Smi::IsValid(continuation.pos())); | 3565 DCHECK((continuation.pos() > 0) && Smi::IsValid(continuation.pos())); |
3565 __ Mov(x1, Smi::FromInt(continuation.pos())); | 3566 __ Mov(x1, Smi::FromInt(continuation.pos())); |
3566 __ Str(x1, FieldMemOperand(x0, JSGeneratorObject::kContinuationOffset)); | 3567 __ Str(x1, FieldMemOperand(x0, JSGeneratorObject::kContinuationOffset)); |
3567 __ Str(cp, FieldMemOperand(x0, JSGeneratorObject::kContextOffset)); | 3568 __ Str(cp, FieldMemOperand(x0, JSGeneratorObject::kContextOffset)); |
3568 __ Mov(x1, cp); | 3569 __ Mov(x1, cp); |
3569 __ RecordWriteField(x0, JSGeneratorObject::kContextOffset, x1, x2, | 3570 __ RecordWriteField(x0, JSGeneratorObject::kContextOffset, x1, x2, |
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3846 } | 3847 } |
3847 | 3848 |
3848 return INTERRUPT; | 3849 return INTERRUPT; |
3849 } | 3850 } |
3850 | 3851 |
3851 | 3852 |
3852 } // namespace internal | 3853 } // namespace internal |
3853 } // namespace v8 | 3854 } // namespace v8 |
3854 | 3855 |
3855 #endif // V8_TARGET_ARCH_ARM64 | 3856 #endif // V8_TARGET_ARCH_ARM64 |
OLD | NEW |