OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 4362 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4373 | 4373 |
4374 __ bind(&maybe_nan); | 4374 __ bind(&maybe_nan); |
4375 // Could be NaN or Infinity. If fraction is not zero, it's NaN, otherwise | 4375 // Could be NaN or Infinity. If fraction is not zero, it's NaN, otherwise |
4376 // it's an Infinity, and the non-NaN code path applies. | 4376 // it's an Infinity, and the non-NaN code path applies. |
4377 __ b(gt, &is_nan); | 4377 __ b(gt, &is_nan); |
4378 __ ldr(mantissa_reg, FieldMemOperand(value_reg, HeapNumber::kMantissaOffset)); | 4378 __ ldr(mantissa_reg, FieldMemOperand(value_reg, HeapNumber::kMantissaOffset)); |
4379 __ cmp(mantissa_reg, Operand(0)); | 4379 __ cmp(mantissa_reg, Operand(0)); |
4380 __ b(eq, &have_double_value); | 4380 __ b(eq, &have_double_value); |
4381 __ bind(&is_nan); | 4381 __ bind(&is_nan); |
4382 // Load canonical NaN for storing into the double array. | 4382 // Load canonical NaN for storing into the double array. |
4383 __ mov(mantissa_reg, Operand(kCanonicalNonHoleNanLower32)); | 4383 uint64_t nan_int64 = BitCast<uint64_t>( |
4384 __ mov(exponent_reg, Operand(kCanonicalNonHoleNanUpper32)); | 4384 FixedDoubleArray::canonical_not_the_hole_nan_as_double()); |
| 4385 __ mov(mantissa_reg, Operand(static_cast<uint32_t>(nan_int64))); |
| 4386 __ mov(exponent_reg, Operand(static_cast<uint32_t>(nan_int64 >> 32))); |
4385 __ jmp(&have_double_value); | 4387 __ jmp(&have_double_value); |
4386 | 4388 |
4387 __ bind(&smi_value); | 4389 __ bind(&smi_value); |
4388 __ add(scratch, elements_reg, | 4390 __ add(scratch, elements_reg, |
4389 Operand(FixedDoubleArray::kHeaderSize - kHeapObjectTag)); | 4391 Operand(FixedDoubleArray::kHeaderSize - kHeapObjectTag)); |
4390 __ add(scratch, scratch, | 4392 __ add(scratch, scratch, |
4391 Operand(key_reg, LSL, kDoubleSizeLog2 - kSmiTagSize)); | 4393 Operand(key_reg, LSL, kDoubleSizeLog2 - kSmiTagSize)); |
4392 // scratch is now effective address of the double element | 4394 // scratch is now effective address of the double element |
4393 | 4395 |
4394 FloatingPointHelper::Destination destination; | 4396 FloatingPointHelper::Destination destination; |
(...skipping 22 matching lines...) Expand all Loading... |
4417 masm->isolate()->builtins()->KeyedStoreIC_MissForceGeneric(); | 4419 masm->isolate()->builtins()->KeyedStoreIC_MissForceGeneric(); |
4418 __ Jump(ic, RelocInfo::CODE_TARGET); | 4420 __ Jump(ic, RelocInfo::CODE_TARGET); |
4419 } | 4421 } |
4420 | 4422 |
4421 | 4423 |
4422 #undef __ | 4424 #undef __ |
4423 | 4425 |
4424 } } // namespace v8::internal | 4426 } } // namespace v8::internal |
4425 | 4427 |
4426 #endif // V8_TARGET_ARCH_ARM | 4428 #endif // V8_TARGET_ARCH_ARM |
OLD | NEW |