Chromium Code Reviews| 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 #include "src/v8.h" | 5 #include "src/v8.h" |
| 6 | 6 |
| 7 #if V8_TARGET_ARCH_ARM64 | 7 #if V8_TARGET_ARCH_ARM64 |
| 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 2429 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2440 MemOperand location = VarOperand(var, x1); | 2440 MemOperand location = VarOperand(var, x1); |
| 2441 __ Ldr(x10, location); | 2441 __ Ldr(x10, location); |
| 2442 __ JumpIfNotRoot(x10, Heap::kTheHoleValueRootIndex, &assign); | 2442 __ JumpIfNotRoot(x10, Heap::kTheHoleValueRootIndex, &assign); |
| 2443 __ Mov(x10, Operand(var->name())); | 2443 __ Mov(x10, Operand(var->name())); |
| 2444 __ Push(x10); | 2444 __ Push(x10); |
| 2445 __ CallRuntime(Runtime::kThrowReferenceError, 1); | 2445 __ CallRuntime(Runtime::kThrowReferenceError, 1); |
| 2446 // Perform the assignment. | 2446 // Perform the assignment. |
| 2447 __ Bind(&assign); | 2447 __ Bind(&assign); |
| 2448 EmitStoreToStackLocalOrContextSlot(var, location); | 2448 EmitStoreToStackLocalOrContextSlot(var, location); |
| 2449 | 2449 |
| 2450 } else if (var->mode() == CONST && op != Token::INIT_CONST) { | |
|
Dmitry Lomov (no reviews)
2015/03/04 17:57:35
Looks like the case at line 2488 anymore should be
| |
| 2451 // Assignment to const variable needs a write barrier. | |
| 2452 DCHECK(!var->IsLookupSlot()); | |
| 2453 DCHECK(var->IsStackAllocated() || var->IsContextSlot()); | |
| 2454 Label const_error; | |
| 2455 MemOperand location = VarOperand(var, x1); | |
| 2456 __ Ldr(x10, location); | |
| 2457 __ JumpIfNotRoot(x10, Heap::kTheHoleValueRootIndex, &const_error); | |
| 2458 __ Mov(x10, Operand(var->name())); | |
| 2459 __ Push(x10); | |
| 2460 __ CallRuntime(Runtime::kThrowReferenceError, 1); | |
| 2461 __ Bind(&const_error); | |
| 2462 __ CallRuntime(Runtime::kThrowConstAssignError, 0); | |
| 2463 | |
| 2450 } else if (!var->is_const_mode() || op == Token::INIT_CONST) { | 2464 } else if (!var->is_const_mode() || op == Token::INIT_CONST) { |
| 2451 if (var->IsLookupSlot()) { | 2465 if (var->IsLookupSlot()) { |
| 2452 // Assignment to var. | 2466 // Assignment to var. |
| 2453 __ Mov(x11, Operand(var->name())); | 2467 __ Mov(x11, Operand(var->name())); |
| 2454 __ Mov(x10, Smi::FromInt(language_mode())); | 2468 __ Mov(x10, Smi::FromInt(language_mode())); |
| 2455 // jssp[0] : mode. | 2469 // jssp[0] : mode. |
| 2456 // jssp[8] : name. | 2470 // jssp[8] : name. |
| 2457 // jssp[16] : context. | 2471 // jssp[16] : context. |
| 2458 // jssp[24] : value. | 2472 // jssp[24] : value. |
| 2459 __ Push(x0, cp, x11, x10); | 2473 __ Push(x0, cp, x11, x10); |
| (...skipping 3020 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 5480 return previous_; | 5494 return previous_; |
| 5481 } | 5495 } |
| 5482 | 5496 |
| 5483 | 5497 |
| 5484 #undef __ | 5498 #undef __ |
| 5485 | 5499 |
| 5486 | 5500 |
| 5487 } } // namespace v8::internal | 5501 } } // namespace v8::internal |
| 5488 | 5502 |
| 5489 #endif // V8_TARGET_ARCH_ARM64 | 5503 #endif // V8_TARGET_ARCH_ARM64 |
| OLD | NEW |