| Index: src/platform-win32.cc
|
| diff --git a/src/platform-win32.cc b/src/platform-win32.cc
|
| index e9e99246cb7924bbc7316aedf6701f8b88be96b6..224527addaecf46b843b1aa3fd94dd966a446301 100644
|
| --- a/src/platform-win32.cc
|
| +++ b/src/platform-win32.cc
|
| @@ -32,6 +32,7 @@
|
|
|
| #include "v8.h"
|
|
|
| +#include "codegen.h"
|
| #include "platform.h"
|
| #include "vm-state-inl.h"
|
|
|
| @@ -201,6 +202,30 @@ double modulo(double x, double y) {
|
|
|
| #endif // _WIN64
|
|
|
| +
|
| +static Mutex* transcendental_function_mutex = OS::CreateMutex();
|
| +
|
| +#define TRANSCENDENTAL_FUNCTION(name, type) \
|
| +static TranscendentalFunction fast_##name##_function = NULL; \
|
| +double fast_##name(double x) { \
|
| + if (fast_##name##_function == NULL) { \
|
| + ScopedLock lock(transcendental_function_mutex); \
|
| + TranscendentalFunction temp = \
|
| + CreateTranscendentalFunction(type); \
|
| + MemoryBarrier(); \
|
| + fast_##name##_function = temp; \
|
| + } \
|
| + return (*fast_##name##_function)(x); \
|
| +}
|
| +
|
| +TRANSCENDENTAL_FUNCTION(sin, TranscendentalCache::SIN)
|
| +TRANSCENDENTAL_FUNCTION(cos, TranscendentalCache::COS)
|
| +TRANSCENDENTAL_FUNCTION(tan, TranscendentalCache::TAN)
|
| +TRANSCENDENTAL_FUNCTION(log, TranscendentalCache::LOG)
|
| +
|
| +#undef TRANSCENDENTAL_FUNCTION
|
| +
|
| +
|
| // ----------------------------------------------------------------------------
|
| // The Time class represents time on win32. A timestamp is represented as
|
| // a 64-bit integer in 100 nanoseconds since January 1, 1601 (UTC). JavaScript
|
|
|