| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 "v8.h" | 5 #include "v8.h" |
| 6 | 6 |
| 7 #if V8_TARGET_ARCH_IA32 | 7 #if V8_TARGET_ARCH_IA32 |
| 8 | 8 |
| 9 #include "bootstrapper.h" | 9 #include "bootstrapper.h" |
| 10 #include "codegen.h" | 10 #include "codegen.h" |
| (...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 384 XMMRegister temp, | 384 XMMRegister temp, |
| 385 MinusZeroMode minus_zero_mode, | 385 MinusZeroMode minus_zero_mode, |
| 386 Label* lost_precision) { | 386 Label* lost_precision) { |
| 387 Label done; | 387 Label done; |
| 388 ASSERT(!temp.is(xmm0)); | 388 ASSERT(!temp.is(xmm0)); |
| 389 | 389 |
| 390 cmp(FieldOperand(input_reg, HeapObject::kMapOffset), | 390 cmp(FieldOperand(input_reg, HeapObject::kMapOffset), |
| 391 isolate()->factory()->heap_number_map()); | 391 isolate()->factory()->heap_number_map()); |
| 392 j(not_equal, lost_precision, Label::kNear); | 392 j(not_equal, lost_precision, Label::kNear); |
| 393 | 393 |
| 394 if (CpuFeatures::IsSafeForSnapshot(SSE2)) { | 394 if (CpuFeatures::IsSafeForSnapshot(isolate(), SSE2)) { |
| 395 ASSERT(!temp.is(no_xmm_reg)); | 395 ASSERT(!temp.is(no_xmm_reg)); |
| 396 CpuFeatureScope scope(this, SSE2); | 396 CpuFeatureScope scope(this, SSE2); |
| 397 | 397 |
| 398 movsd(xmm0, FieldOperand(input_reg, HeapNumber::kValueOffset)); | 398 movsd(xmm0, FieldOperand(input_reg, HeapNumber::kValueOffset)); |
| 399 cvttsd2si(result_reg, Operand(xmm0)); | 399 cvttsd2si(result_reg, Operand(xmm0)); |
| 400 Cvtsi2sd(temp, Operand(result_reg)); | 400 Cvtsi2sd(temp, Operand(result_reg)); |
| 401 ucomisd(xmm0, temp); | 401 ucomisd(xmm0, temp); |
| 402 RecordComment("Deferred TaggedToI: lost precision"); | 402 RecordComment("Deferred TaggedToI: lost precision"); |
| 403 j(not_equal, lost_precision, Label::kNear); | 403 j(not_equal, lost_precision, Label::kNear); |
| 404 RecordComment("Deferred TaggedToI: NaN"); | 404 RecordComment("Deferred TaggedToI: NaN"); |
| (...skipping 989 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1394 } | 1394 } |
| 1395 | 1395 |
| 1396 | 1396 |
| 1397 // Compute the hash code from the untagged key. This must be kept in sync with | 1397 // Compute the hash code from the untagged key. This must be kept in sync with |
| 1398 // ComputeIntegerHash in utils.h and KeyedLoadGenericElementStub in | 1398 // ComputeIntegerHash in utils.h and KeyedLoadGenericElementStub in |
| 1399 // code-stub-hydrogen.cc | 1399 // code-stub-hydrogen.cc |
| 1400 // | 1400 // |
| 1401 // Note: r0 will contain hash code | 1401 // Note: r0 will contain hash code |
| 1402 void MacroAssembler::GetNumberHash(Register r0, Register scratch) { | 1402 void MacroAssembler::GetNumberHash(Register r0, Register scratch) { |
| 1403 // Xor original key with a seed. | 1403 // Xor original key with a seed. |
| 1404 if (Serializer::enabled()) { | 1404 if (Serializer::enabled(isolate())) { |
| 1405 ExternalReference roots_array_start = | 1405 ExternalReference roots_array_start = |
| 1406 ExternalReference::roots_array_start(isolate()); | 1406 ExternalReference::roots_array_start(isolate()); |
| 1407 mov(scratch, Immediate(Heap::kHashSeedRootIndex)); | 1407 mov(scratch, Immediate(Heap::kHashSeedRootIndex)); |
| 1408 mov(scratch, | 1408 mov(scratch, |
| 1409 Operand::StaticArray(scratch, times_pointer_size, roots_array_start)); | 1409 Operand::StaticArray(scratch, times_pointer_size, roots_array_start)); |
| 1410 SmiUntag(scratch); | 1410 SmiUntag(scratch); |
| 1411 xor_(r0, scratch); | 1411 xor_(r0, scratch); |
| 1412 } else { | 1412 } else { |
| 1413 int32_t seed = isolate()->heap()->HashSeed(); | 1413 int32_t seed = isolate()->heap()->HashSeed(); |
| 1414 xor_(r0, Immediate(seed)); | 1414 xor_(r0, Immediate(seed)); |
| (...skipping 2208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3623 if (ms.shift() > 0) sar(edx, ms.shift()); | 3623 if (ms.shift() > 0) sar(edx, ms.shift()); |
| 3624 mov(eax, dividend); | 3624 mov(eax, dividend); |
| 3625 shr(eax, 31); | 3625 shr(eax, 31); |
| 3626 add(edx, eax); | 3626 add(edx, eax); |
| 3627 } | 3627 } |
| 3628 | 3628 |
| 3629 | 3629 |
| 3630 } } // namespace v8::internal | 3630 } } // namespace v8::internal |
| 3631 | 3631 |
| 3632 #endif // V8_TARGET_ARCH_IA32 | 3632 #endif // V8_TARGET_ARCH_IA32 |
| OLD | NEW |