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 |