| 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 #include "src/arm64/lithium-codegen-arm64.h" | 7 #include "src/arm64/lithium-codegen-arm64.h" |
| 8 #include "src/arm64/lithium-gap-resolver-arm64.h" | 8 #include "src/arm64/lithium-gap-resolver-arm64.h" |
| 9 #include "src/base/bits.h" | 9 #include "src/base/bits.h" |
| 10 #include "src/code-factory.h" | 10 #include "src/code-factory.h" |
| (...skipping 3587 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3598 mem_op = PrepareKeyedArrayOperand(load_base, elements, key, key_is_tagged, | 3598 mem_op = PrepareKeyedArrayOperand(load_base, elements, key, key_is_tagged, |
| 3599 instr->hydrogen()->elements_kind(), | 3599 instr->hydrogen()->elements_kind(), |
| 3600 instr->hydrogen()->representation(), | 3600 instr->hydrogen()->representation(), |
| 3601 instr->base_offset()); | 3601 instr->base_offset()); |
| 3602 } | 3602 } |
| 3603 | 3603 |
| 3604 __ Ldr(result, mem_op); | 3604 __ Ldr(result, mem_op); |
| 3605 | 3605 |
| 3606 if (instr->hydrogen()->RequiresHoleCheck()) { | 3606 if (instr->hydrogen()->RequiresHoleCheck()) { |
| 3607 Register scratch = ToRegister(instr->temp()); | 3607 Register scratch = ToRegister(instr->temp()); |
| 3608 // Detect the hole NaN by adding one to the integer representation of the | |
| 3609 // result, and checking for overflow. | |
| 3610 STATIC_ASSERT(kHoleNanInt64 == 0x7fffffffffffffff); | |
| 3611 __ Ldr(scratch, mem_op); | 3608 __ Ldr(scratch, mem_op); |
| 3612 __ Cmn(scratch, 1); | 3609 __ Cmp(scratch, Operand(kHoleNanInt64, RelocInfo::NONE64)); |
| 3613 DeoptimizeIf(vs, instr, "hole"); | 3610 DeoptimizeIf(eq, instr, "hole"); |
| 3614 } | 3611 } |
| 3615 } | 3612 } |
| 3616 | 3613 |
| 3617 | 3614 |
| 3618 void LCodeGen::DoLoadKeyedFixed(LLoadKeyedFixed* instr) { | 3615 void LCodeGen::DoLoadKeyedFixed(LLoadKeyedFixed* instr) { |
| 3619 Register elements = ToRegister(instr->elements()); | 3616 Register elements = ToRegister(instr->elements()); |
| 3620 Register result = ToRegister(instr->result()); | 3617 Register result = ToRegister(instr->result()); |
| 3621 MemOperand mem_op; | 3618 MemOperand mem_op; |
| 3622 | 3619 |
| 3623 Representation representation = instr->hydrogen()->representation(); | 3620 Representation representation = instr->hydrogen()->representation(); |
| (...skipping 2442 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6066 Handle<ScopeInfo> scope_info = instr->scope_info(); | 6063 Handle<ScopeInfo> scope_info = instr->scope_info(); |
| 6067 __ Push(scope_info); | 6064 __ Push(scope_info); |
| 6068 __ Push(ToRegister(instr->function())); | 6065 __ Push(ToRegister(instr->function())); |
| 6069 CallRuntime(Runtime::kPushBlockContext, 2, instr); | 6066 CallRuntime(Runtime::kPushBlockContext, 2, instr); |
| 6070 RecordSafepoint(Safepoint::kNoLazyDeopt); | 6067 RecordSafepoint(Safepoint::kNoLazyDeopt); |
| 6071 } | 6068 } |
| 6072 | 6069 |
| 6073 | 6070 |
| 6074 | 6071 |
| 6075 } } // namespace v8::internal | 6072 } } // namespace v8::internal |
| OLD | NEW |