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 |