| Index: src/v8conversions.h
|
| diff --git a/src/diy-fp.cc b/src/v8conversions.h
|
| similarity index 64%
|
| copy from src/diy-fp.cc
|
| copy to src/v8conversions.h
|
| index c54bd1d326f31c73af9aea6c24b51fe7173e0330..1840e3a34b733fbb3eb16d2c83e6ae9e12e66f71 100644
|
| --- a/src/diy-fp.cc
|
| +++ b/src/v8conversions.h
|
| @@ -1,4 +1,4 @@
|
| -// Copyright 2010 the V8 project authors. All rights reserved.
|
| +// Copyright 2011 the V8 project authors. All rights reserved.
|
| // Redistribution and use in source and binary forms, with or without
|
| // modification, are permitted provided that the following conditions are
|
| // met:
|
| @@ -25,34 +25,36 @@
|
| // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
| // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
| -#include "v8.h"
|
| +#ifndef V8_V8CONVERSIONS_H_
|
| +#define V8_V8CONVERSIONS_H_
|
|
|
| -#include "diy-fp.h"
|
| +#include "conversions.h"
|
|
|
| namespace v8 {
|
| namespace internal {
|
|
|
| -void DiyFp::Multiply(const DiyFp& other) {
|
| - // Simply "emulates" a 128 bit multiplication.
|
| - // However: the resulting number only contains 64 bits. The least
|
| - // significant 64 bits are only used for rounding the most significant 64
|
| - // bits.
|
| - const uint64_t kM32 = 0xFFFFFFFFu;
|
| - uint64_t a = f_ >> 32;
|
| - uint64_t b = f_ & kM32;
|
| - uint64_t c = other.f_ >> 32;
|
| - uint64_t d = other.f_ & kM32;
|
| - uint64_t ac = a * c;
|
| - uint64_t bc = b * c;
|
| - uint64_t ad = a * d;
|
| - uint64_t bd = b * d;
|
| - uint64_t tmp = (bd >> 32) + (ad & kM32) + (bc & kM32);
|
| - // By adding 1U << 31 to tmp we round the final result.
|
| - // Halfway cases will be round up.
|
| - tmp += 1U << 31;
|
| - uint64_t result_f = ac + (ad >> 32) + (bc >> 32) + (tmp >> 32);
|
| - e_ += other.e_ + 64;
|
| - f_ = result_f;
|
| +// Convert from Number object to C integer.
|
| +static inline int32_t NumberToInt32(Object* number) {
|
| + if (number->IsSmi()) return Smi::cast(number)->value();
|
| + return DoubleToInt32(number->Number());
|
| }
|
|
|
| +
|
| +static inline uint32_t NumberToUint32(Object* number) {
|
| + if (number->IsSmi()) return Smi::cast(number)->value();
|
| + return DoubleToUint32(number->Number());
|
| +}
|
| +
|
| +
|
| +// Converts a string into a double value according to ECMA-262 9.3.1
|
| +double StringToDouble(UnicodeCache* unicode_cache,
|
| + String* str,
|
| + int flags,
|
| + double empty_string_val = 0);
|
| +
|
| +// Converts a string into an integer.
|
| +double StringToInt(UnicodeCache* unicode_cache, String* str, int radix);
|
| +
|
| } } // namespace v8::internal
|
| +
|
| +#endif // V8_V8CONVERSIONS_H_
|
|
|