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_X64 | 7 #if V8_TARGET_ARCH_X64 |
8 | 8 |
9 #include "src/base/bits.h" | 9 #include "src/base/bits.h" |
10 #include "src/code-stubs.h" | 10 #include "src/code-stubs.h" |
(...skipping 1703 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1714 | 1714 |
1715 void LCodeGen::DoConstantS(LConstantS* instr) { | 1715 void LCodeGen::DoConstantS(LConstantS* instr) { |
1716 __ Move(ToRegister(instr->result()), instr->value()); | 1716 __ Move(ToRegister(instr->result()), instr->value()); |
1717 } | 1717 } |
1718 | 1718 |
1719 | 1719 |
1720 void LCodeGen::DoConstantD(LConstantD* instr) { | 1720 void LCodeGen::DoConstantD(LConstantD* instr) { |
1721 DCHECK(instr->result()->IsDoubleRegister()); | 1721 DCHECK(instr->result()->IsDoubleRegister()); |
1722 XMMRegister res = ToDoubleRegister(instr->result()); | 1722 XMMRegister res = ToDoubleRegister(instr->result()); |
1723 double v = instr->value(); | 1723 double v = instr->value(); |
1724 uint64_t int_val = BitCast<uint64_t, double>(v); | 1724 uint64_t int_val = bit_cast<uint64_t, double>(v); |
1725 // Use xor to produce +0.0 in a fast and compact way, but avoid to | 1725 // Use xor to produce +0.0 in a fast and compact way, but avoid to |
1726 // do so if the constant is -0.0. | 1726 // do so if the constant is -0.0. |
1727 if (int_val == 0) { | 1727 if (int_val == 0) { |
1728 __ xorps(res, res); | 1728 __ xorps(res, res); |
1729 } else { | 1729 } else { |
1730 Register tmp = ToRegister(instr->temp()); | 1730 Register tmp = ToRegister(instr->temp()); |
1731 __ Set(tmp, int_val); | 1731 __ Set(tmp, int_val); |
1732 __ movq(res, tmp); | 1732 __ movq(res, tmp); |
1733 } | 1733 } |
1734 } | 1734 } |
(...skipping 2605 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4340 // Sign extend key because it could be a 32 bit negative value | 4340 // Sign extend key because it could be a 32 bit negative value |
4341 // and the dehoisted address computation happens in 64 bits | 4341 // and the dehoisted address computation happens in 64 bits |
4342 __ movsxlq(ToRegister(key), ToRegister(key)); | 4342 __ movsxlq(ToRegister(key), ToRegister(key)); |
4343 } | 4343 } |
4344 if (instr->NeedsCanonicalization()) { | 4344 if (instr->NeedsCanonicalization()) { |
4345 Label have_value; | 4345 Label have_value; |
4346 | 4346 |
4347 __ ucomisd(value, value); | 4347 __ ucomisd(value, value); |
4348 __ j(parity_odd, &have_value, Label::kNear); // NaN. | 4348 __ j(parity_odd, &have_value, Label::kNear); // NaN. |
4349 | 4349 |
4350 __ Set(kScratchRegister, BitCast<uint64_t>( | 4350 __ Set(kScratchRegister, |
4351 FixedDoubleArray::canonical_not_the_hole_nan_as_double())); | 4351 bit_cast<uint64_t>( |
| 4352 FixedDoubleArray::canonical_not_the_hole_nan_as_double())); |
4352 __ movq(value, kScratchRegister); | 4353 __ movq(value, kScratchRegister); |
4353 | 4354 |
4354 __ bind(&have_value); | 4355 __ bind(&have_value); |
4355 } | 4356 } |
4356 | 4357 |
4357 Operand double_store_operand = BuildFastArrayOperand( | 4358 Operand double_store_operand = BuildFastArrayOperand( |
4358 instr->elements(), | 4359 instr->elements(), |
4359 key, | 4360 key, |
4360 instr->hydrogen()->key()->representation(), | 4361 instr->hydrogen()->key()->representation(), |
4361 FAST_DOUBLE_ELEMENTS, | 4362 FAST_DOUBLE_ELEMENTS, |
(...skipping 1489 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5851 CallRuntime(Runtime::kPushBlockContext, 2, instr); | 5852 CallRuntime(Runtime::kPushBlockContext, 2, instr); |
5852 RecordSafepoint(Safepoint::kNoLazyDeopt); | 5853 RecordSafepoint(Safepoint::kNoLazyDeopt); |
5853 } | 5854 } |
5854 | 5855 |
5855 | 5856 |
5856 #undef __ | 5857 #undef __ |
5857 | 5858 |
5858 } } // namespace v8::internal | 5859 } } // namespace v8::internal |
5859 | 5860 |
5860 #endif // V8_TARGET_ARCH_X64 | 5861 #endif // V8_TARGET_ARCH_X64 |
OLD | NEW |