Index: src/arm/ic-arm.cc |
=================================================================== |
--- src/arm/ic-arm.cc (revision 6375) |
+++ src/arm/ic-arm.cc (working copy) |
@@ -1337,42 +1337,6 @@ |
} |
-// Convert unsigned integer with specified number of leading zeroes in binary |
-// representation to IEEE 754 double. |
-// Integer to convert is passed in register hiword. |
-// Resulting double is returned in registers hiword:loword. |
-// This functions does not work correctly for 0. |
-static void GenerateUInt2Double(MacroAssembler* masm, |
- Register hiword, |
- Register loword, |
- Register scratch, |
- int leading_zeroes) { |
- const int meaningful_bits = kBitsPerInt - leading_zeroes - 1; |
- const int biased_exponent = HeapNumber::kExponentBias + meaningful_bits; |
- |
- const int mantissa_shift_for_hi_word = |
- meaningful_bits - HeapNumber::kMantissaBitsInTopWord; |
- |
- const int mantissa_shift_for_lo_word = |
- kBitsPerInt - mantissa_shift_for_hi_word; |
- |
- __ mov(scratch, Operand(biased_exponent << HeapNumber::kExponentShift)); |
- if (mantissa_shift_for_hi_word > 0) { |
- __ mov(loword, Operand(hiword, LSL, mantissa_shift_for_lo_word)); |
- __ orr(hiword, scratch, Operand(hiword, LSR, mantissa_shift_for_hi_word)); |
- } else { |
- __ mov(loword, Operand(0, RelocInfo::NONE)); |
- __ orr(hiword, scratch, Operand(hiword, LSL, mantissa_shift_for_hi_word)); |
- } |
- |
- // If least significant bit of biased exponent was not 1 it was corrupted |
- // by most significant bit of mantissa so we should fix that. |
- if (!(biased_exponent & 1)) { |
- __ bic(hiword, hiword, Operand(1 << HeapNumber::kExponentShift)); |
- } |
-} |
- |
- |
void KeyedLoadIC::GenerateIndexedInterceptor(MacroAssembler* masm) { |
// ---------- S t a t e -------------- |
// -- lr : return address |
@@ -1569,76 +1533,6 @@ |
} |
-// Convert and store int passed in register ival to IEEE 754 single precision |
-// floating point value at memory location (dst + 4 * wordoffset) |
-// If VFP3 is available use it for conversion. |
-static void StoreIntAsFloat(MacroAssembler* masm, |
- Register dst, |
- Register wordoffset, |
- Register ival, |
- Register fval, |
- Register scratch1, |
- Register scratch2) { |
- if (CpuFeatures::IsSupported(VFP3)) { |
- CpuFeatures::Scope scope(VFP3); |
- __ vmov(s0, ival); |
- __ add(scratch1, dst, Operand(wordoffset, LSL, 2)); |
- __ vcvt_f32_s32(s0, s0); |
- __ vstr(s0, scratch1, 0); |
- } else { |
- Label not_special, done; |
- // Move sign bit from source to destination. This works because the sign |
- // bit in the exponent word of the double has the same position and polarity |
- // as the 2's complement sign bit in a Smi. |
- ASSERT(kBinary32SignMask == 0x80000000u); |
- |
- __ and_(fval, ival, Operand(kBinary32SignMask), SetCC); |
- // Negate value if it is negative. |
- __ rsb(ival, ival, Operand(0, RelocInfo::NONE), LeaveCC, ne); |
- |
- // We have -1, 0 or 1, which we treat specially. Register ival contains |
- // absolute value: it is either equal to 1 (special case of -1 and 1), |
- // greater than 1 (not a special case) or less than 1 (special case of 0). |
- __ cmp(ival, Operand(1)); |
- __ b(gt, ¬_special); |
- |
- // For 1 or -1 we need to or in the 0 exponent (biased). |
- static const uint32_t exponent_word_for_1 = |
- kBinary32ExponentBias << kBinary32ExponentShift; |
- |
- __ orr(fval, fval, Operand(exponent_word_for_1), LeaveCC, eq); |
- __ b(&done); |
- |
- __ bind(¬_special); |
- // Count leading zeros. |
- // Gets the wrong answer for 0, but we already checked for that case above. |
- Register zeros = scratch2; |
- __ CountLeadingZeros(zeros, ival, scratch1); |
- |
- // Compute exponent and or it into the exponent register. |
- __ rsb(scratch1, |
- zeros, |
- Operand((kBitsPerInt - 1) + kBinary32ExponentBias)); |
- |
- __ orr(fval, |
- fval, |
- Operand(scratch1, LSL, kBinary32ExponentShift)); |
- |
- // Shift up the source chopping the top bit off. |
- __ add(zeros, zeros, Operand(1)); |
- // This wouldn't work for 1 and -1 as the shift would be 32 which means 0. |
- __ mov(ival, Operand(ival, LSL, zeros)); |
- // And the top (top 20 bits). |
- __ orr(fval, |
- fval, |
- Operand(ival, LSR, kBitsPerInt - kBinary32MantissaBits)); |
- |
- __ bind(&done); |
- __ str(fval, MemOperand(dst, wordoffset, LSL, 2)); |
- } |
-} |
- |
- |
void StoreIC::GenerateMegamorphic(MacroAssembler* masm) { |
// ----------- S t a t e ------------- |
// -- r0 : value |